Cómo modificar los campos de informe mediante programación en Visual FoxPro


Resumen


Puede ser conveniente cambiar los campos del informe mediante programación para diferenciar los valores o modificar el formato en función de una condición. En este artículo se muestra cómo cambiar el color de la 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 utilizando la escucha de informes y la impresión controlada por eventos.

Más información


En el siguiente se crea una tabla, se rellena la tabla y se ejecuta un informe de ventas, lo que cambia el color de la 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 puede usar para cambiar también el estilo de fuente, el tamaño de fuente o incluso cambiar la posición del campo. Además, se puede cambiar una clase completa de objetos, utilizando el campo de propiedad reemplazar todos los <> con <valor de propiedad> para 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. Crear un informe. En la banda de encabezado de página, agregue un campo de informe y cree la expresión salestot.id. En la banda de detalle, agregue un campo de informe y haga la expresión salestot. invamt. En la banda de pie de página, agregue un campo de informe y haga la expresión salestot. invamt. Haga clic en el botón cálculos en el cuadro de diálogo expresión de informe. Seleccione suma, haga clic en aceptar y, 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 muestre la vista previa de cada informe, desplácese a la parte inferior para ver el Resumen y observar cómo cambia el color de cada vendedor.

Referencias


(c) Microsoft Corporation 1998, todos los derechos reservados. Contribuciones de Mike Stewart, Microsoft Corporation