Modificación mediante programación de campos de informe en Visual FoxPro

En este artículo se presenta cómo modificar mediante programación un archivo de informe para cambiar el color de fuente de un campo.

Versión original del producto: Visual FoxPro
Número de KB original: 188403

Resumen

Puede ser conveniente cambiar los campos de informe mediante programación para diferenciar valores o modificar el formato en función de una condición. En este artículo se muestra cómo cambiar el color de fuente de un campo de informe en función de los totales de ventas de un vendedor individual. Aunque esta técnica funciona en Microsoft Visual FoxPro 9.0 Professional Edition, puede obtener los mismos resultados mediante report listener e impresión controlada por eventos.

Más información

A continuación se crea una tabla, se rellena la tabla y se ejecuta un informe de ventas, se cambia el color de fuente para reflejar los totales de ventas. Para cambiar el color de un campo de informe, se modifican los campos PenRed, PenGreen y PenBlue del registro del campo de informe. Este método se podría usar para cambiar también el estilo de fuente, el tamaño de fuente o incluso para cambiar la posición del campo. Además, se podría cambiar una clase completa de objetos mediante el campo> de propiedad REPLACE ALL <WITH <con el valor> de propiedad FOR objtype = 8, por ejemplo.

  1. Guarde el código siguiente en un archivo de programa denominado Maketabs.prg y ejecute el programa para crear y rellenar una tabla.

    Código de ejemplo

     *-- Code begins here.
     CREATE TABLE sales (ID c(10), invamt N(8,2))
     INSERT INTO sales (ID, invamt) VALUES ("JOE", 1000)
     INSERT INTO sales (ID, invamt) VALUES ("MARY", 2000)
     INSERT INTO sales (ID, invamt) VALUES ("HARRY", 500)
     INSERT INTO sales (ID, invamt) VALUES ("JOE", 1001)
     INSERT INTO sales (ID, invamt) VALUES ("MARY", 2001)
     INSERT INTO sales (ID, invamt) VALUES ("HARRY", 501)
     INSERT INTO sales (ID, invamt) VALUES ("JOE", 1002)
     INSERT INTO sales (ID, invamt) VALUES ("MARY", 2002)
     INSERT INTO sales (ID, invamt) VALUES ("HARRY", 502)
     *-- Code ends here
    
  2. Cree un informe. En la banda Encabezado de página, agregue un campo de informe y haga que la expresión salestot.id. En la banda Detalles, agregue un campo de informe y convierta la expresión salestot.invamt en . En la banda Pie de página, agregue un campo de informe y haga que la expresión salestot.invamt. Haga clic en el botón Cálculos del cuadro de diálogo Expresión de informe. Seleccione Suma, haga clic en Aceptary, a continuación, haga clic en Aceptar de nuevo. Guarde el informe como Sales.frx.

  3. Guarde el código siguiente en un archivo de programa denominado Sales.prg y ejecute el programa:

     *-- Code begins here.
     SET TALK OFF
     *-- Get a list of salespersons.
     SELECT DISTINCT id FROM sales INTO CURSOR list
    
     *-- Step through the list and print sales results for each
     *-- salesperson.
     SCAN
     SELECT * FROM sales WHERE id = list.id INTO CURSOR salestot
    
    *-- Get the total sales for this person.
     SUM invamt TO lnTotal
     SELECT 0
    
    *-- Open the report file as a table.
     USE sales.frx
    
     *-- We're looking for a field (objtype) that is
     *-- calculated (totaltype) and whose expression
     *-- (expr) is equal to table field we're calculating.
     LOCATE FOR objtype = 8 AND totaltype = 2 AND ;
     ATC("salestot.invamt", expr) > 0
    
    *-- Save the values for the pen and fill fields.
     lnPenRed = penred
     lnPenGreen = pengreen
     lnPenBlue = penblue
    
    *-- Modify the font color for the sales total.
     DO CASE
     CASE lnTotal > 3000 AND lnTotal < 6000 && Print green
     REPLACE penred WITH 0, pengreen WITH 255, penblue WITH 0
     CASE lnTotal > 6000 && Print blue
     REPLACE penred WITH 0, pengreen WITH 0, penblue WITH 255
     OTHERWISE && Print dark red on white
     REPLACE penred WITH 128, pengreen WITH 0, penblue WITH 0
     ENDCASE
     USE
     SELECT salestot
    
    *-- Change PREVIEW to TO PRINTER to print the report.
     REPORT FORM sales PREVIEW
     ENDSCAN()
    
    *-- Restore the original values.
     USE sales.frx
     LOCATE FOR objtype = 8 AND totaltype = 2 AND ;
     ATC("sales.invamt", expr) > 0
     REPLACE penred WITH lnPenRed, pengreen WITH lnPenGreen,;
     penblue WITH lnPenBlue
     USE
     CLOSE DATA
     *-- Code ends here.
    
  4. A medida que se obtenga una vista previa de cada informe, desplácese hasta la parte inferior para ver el resumen y observar cómo cambia el color de cada vendedor.