Programmgesteuertes Ändern von Berichtsfeldern in Visual FoxPro

In diesem Artikel wird beschrieben, wie Sie eine Berichtsdatei programmgesteuert ändern, um die Schriftfarbe eines Felds zu ändern.

Ursprüngliche Produktversion: Visual FoxPro
Ursprüngliche KB-Nummer: 188403

Zusammenfassung

Es kann wünschenswert sein, Berichtsfelder programmgesteuert zu ändern, um Werte zu unterscheiden oder das Format je nach Bedingung anderweitig zu ändern. In diesem Artikel wird veranschaulicht, wie Sie die Schriftfarbe eines Berichtsfelds basierend auf den Umsatzsummen eines einzelnen Vertriebsmitarbeiters ändern. Obwohl diese Technik in Microsoft Visual FoxPro 9.0 Professional Edition funktioniert, können Sie die gleichen Ergebnisse mithilfe des Berichtslisteners und des ereignisgesteuerten Druckens erzielen.

Weitere Informationen

Im Folgenden wird eine Tabelle erstellt, die Tabelle aufgefüllt und ein Umsatzbericht ausgeführt, wobei die Schriftfarbe so geändert wird, dass die Gesamtsummen der Verkäufe widerzuspiegeln sind. Um die Farbe eines Berichtsfelds zu ändern, werden die Felder PenRed, PenGreen und PenBlue des Datensatzes des Berichtsfelds geändert. Diese Methode kann auch verwendet werden, um den Schriftschnitt, den Schriftgrad oder sogar die Position des Felds zu ändern. Darüber hinaus kann eine ganze Klasse von Objekten mit REPLACE ALL-Eigenschaftsfeld <> with <property value> FOR objtype = 8 für instance geändert werden.

  1. Speichern Sie den folgenden Code in einer Programmdatei namens Maketabs.prg , und führen Sie das Programm aus, um eine Tabelle zu erstellen und aufzufüllen.

    Beispielcode

     *-- 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. Erstellen Sie einen Bericht. Fügen Sie im Seitenkopfbereich ein Berichtsfeld hinzu, und legen Sie den Ausdruck salestot.id. Fügen Sie im Bereich Detail ein Berichtsfeld hinzu, und legen Sie den Ausdruck salestot.invamt fest. Fügen Sie im Seitenfußbereich ein Berichtsfeld hinzu, und legen Sie den Ausdruck salestot.invamt fest. Klicken Sie im Dialogfeld Berichtsausdruck auf die Schaltfläche Berechnungen. Wählen Sie Summe aus, klicken Sie auf OK, und klicken Sie dann erneut auf OK. Speichern Sie den Bericht als Sales.frx.

  3. Speichern Sie den folgenden Code in einer Programmdatei namens Sales.prg, und führen Sie das Programm aus:

     *-- 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. Wenn jeder Bericht in der Vorschau angezeigt wird, scrollen Sie nach unten, um die Zusammenfassung anzuzeigen und zu beobachten, wie sich die Farbe für jeden Vertriebsmitarbeiter ändert.