Ein der neuen Feautures in FastReport VCL 6 ist die Möglichkeit, Totals im Gruppen-Header anzuzeigen. In vorigen Versionen konnte man diese Totals nur nach der Gruppierung darstellen. Wenn diese Gruppe ziemlich groß ist, sollte man beim Vorschau bis zum ender der Seite scrollen, um due Totals zu sehen. In dieser Situation ist es viel mehr bequem, diese Totals am Anfang der Gruppe darzustellen.
Also, besprechen wir jetzt, wie dieser Mechanismus funktioniert. Und zuerst ein bisschen Theorie.
Die Totals in den Headers sind mit der "deferred processing" berechnet. Beim Output des Reports werden alle Objekte mit den speziellen Bearbeitungsbedingungen in einer separaten Liste platziert. Weiter startet oben definierte Bearbeitung, wenn diese Bedingungen erfüllt werden.
Es gibt ein Paar Aufforderungen, die erfüllt werden sollen, für erfolgreiche Darstellung der Totals im Gruppen-Header:
Jetzt besprechen wir die Eigenschaft des Objekts "Text". Die "Processing"-Eigenschaft definiert einen Event, der definiert, welchen Wert in diesem Objekt zu zeigen. "Processing" hat zwei Parameter - GroupLevel und ProcessAt. GroupLevel allows you to set the nesting level of the groups. This is done in case you use several nested groupings. Thus, you can display your totals in each heading in each group.
GroupLevel bestimmt das Niveau der Verschachtelung der Gruppen. Das ist sehr nützlich für die Situation, wen man mehrere Gruppierungen mit der Verschachtelung verwendet. Auf diese Weise werden die Totals für jede Gruppe angezeigt.
ProcessAt enthält eine Eventsliste, die für die Feldbearbeitung dienen. Mögliche Werte:
Zum Beispiel möchten Sie die Totals am Ende der Gruppe zeigen. Um zu erkennen, dass die Gruppe am Ende ist, sucht FR nach einem Footer. Wenn der Event paReportFinished auch aktiviert ist, sucht FR nach dem Footer der Seite auch.
Und jetzt zu den genauen Beispieln. Wir erstellen einen Report mit zwei Teilen.
Ein Teil befindet sich in anderem. wir verwenden die Tabelle Sales aus der Demo-Datenbank.
Wir erstellen eine Gruppe mit dem Namen des Unternehmens. Weiter fügen wir eine Gruppe hinzu, die die Bestellungsnummer hat. Und im Band "Data" werden die Informationen über die Bestellung dargestellt. Jede Gruppe hat einen Footer mit den Totals für:
[SUM (<Sales. "Qty"> * <Sales. "List Price">, MasterData1)].
Das Ergebniss wird im Band "report summary" angezeigt.
Unser Ziel ist, die Ergebnisse im Header-Band zu zeigen. Wir starten mit der ersten Gruppe. wir fügen den folgenden Text auf der rechten Seite hinzu: "Total group sum: [SUM (<Sales." Qty "> * <Sales." List Price ">, MasterData1)] $". In den Eigenschaften für diesen Text-Box suchen wir "Processing" und setzen den Wert für paGroupFinished:
Wir starten den Report:
Weiter fügen wir noch zwei Text-Felder Now in die zweite Gruppe hunzu. Wir platzieren sie die Reihe nach auf der rechten Seite. Für erste Gruppe wird der Wert "[SUM (<Sales." Qty "> * <Sales." List Price ">, MasterData1)] $". Und für zweite Gruppe wird es "from [SUM (<Sales." Qty "> * <Sales." List Price ">, MasterData1)] $".
Für erste Gruppe setzen wir folgende Eigenschaften ein: GroupLevel - 0, ProcessAt - paGroupFinished.
Für zweite Gruppe: GroupLevel - 1, ProcessAt - paGroupFinished.
Auf diese Weise zeigen wir die Totals für laufende Gruppe udn weiter für die Gruppe vom höhen Niveau. Und wie das aussieht:
Weiter soll die Totals für den ganzen Report dargestellt werden. Wir fügen den Header für den Report mit der Summe: [SUM (<Sales. "Qty"> * <Sales. "List Price">, MasterData1)] $. Und die Eigenschaften dafür: GroupLevel - 0, ProcessAt - paReportPageFinished. Wir starten den Report:
In each case, we display a field with the same aggregate expression, but we get different values for the groups and the report header. It's all about the time of formation the total. At some time point, the aggregate function has different values. That's why it's important to set the ProcessAt parameter correctly.
In jedem Fall zeigen wir das Feld mit "aggregate expression", aber bekommen verschiedene Werte für die Gruppen oder für den Header. Das verursacht die Zeit der Reports Erstellung. Im bestimmten Moment der Zeit hat die Funktion verschiedene Werte. Auf diese Weise ist es wichtig, richtig die Parameter ProcessAt einzusetzen.