Mit den CalcTotal und CalcController Komponenten hat man in Rave Reports gute Tools zur Summenberechnung, zum Zählen oder auch zur Berechnung eines Durchschnitts zur Verfügung. Einiges gibt es aber zu beachten beim Einsatz dieser Komponenten.
Mitunter hat man einen Report mit einem Hauptband (beispielsweise den Daten eines Kunden) und einem Detailband, etwa mit Umsätzen zu dem Kunden. Beiden ist eine eigene DataView zugeordnet, wobei für das Umsatzband das Kundenband das zugeordnete Controllerband ist. Nun gilt es auch noch beide Tabellen miteinander zu verknüpfen, was über die Eigenschaften MasterDataView, Masterkey (Kundentabelle) und DataView, Detailkey (Umsatztabelle) gelingt.
Fügt man nun noch die passenden Felder aus der Kundentabelle für das Band mit den Kundendaten hinzu, und dies ebenso für das Detailband mit den Umsatzdatenfeldern, so bekommt man recht schnell im Designer einen Report hin, der oben die Kundendaten anzeigt und darunter entsprechende Umsatzdaten.
Nun möchte man aber oft in einem Fußbereich (Body Footer, zugeordnet dem Band mit den Umsatzdaten) auch noch Berechnungen ausgeben, also zum Beispiel Umsatzsummen oder auch einfach die Anzahl der Umsatzeinträge.
Berechnungen im Body Footer ausgeben
Hier geht man wie folgt vor:
- Man markiert den Hauptreport im Baum rechts, klickt auf Parameters und erstellt so Variablen, beispielsweise AnzahlUmsaetze
- Nun markiert man das Detail – Band, welches die Umsätze enthält, und fügt aus der Palette Report die Komponente CalcTotal hinzu.
Geht es um die Berechnung der Anzahl der Einträge, setzt man für CalcTotal folgende Eigenschaften:
- CalcType = ctCount
- DataView = DataView mit den Umsatzdaten
- DestParam = die eben erstelle Variable AnzahlUmsaetze
- Controller = Das DataBand, welches die Umsatzdaten enthält
- DataField = ein zählbares Feld aus der Umsatz DataView – Tabelle
Im Body Footer des Umsatzbereiches fügt man nun eine DataText Komponente hinzu (Palette Report). Im Eigenschaftsdialog der DataText Komponente wählt man nun DataField und im Dialog, der sich öffnet, wählt man unter der Auswahlliste Project Parameters die Variable AnzahlUmsaetze aus.
Startet man seinen Report nunmehr, so kann es sein, dass an dieser Stelle 1 ausgegeben wird, obwohl vielleicht 5 Einträge vorhanden sind. Hierzu im Baum rechts die CalcTotal Komponente wählen und RunningTotal auf True setzen. Nun erscheint die korrekte Anzahl bei der Ausgabe. Das klappt wunderbar, solange man einen Kunden mit dessen Umsatzdaten hat. Hat man mehrere Kunden und Umsatzdaten ergibt sich das Problem das CalcTotal alle Umsatzeinträge der verschiedenen Kunden zusammenzählt, beim ersten Kunden stimmt es noch, aber ab dem zweiten werden die Einträge von Kunde 1 und von Kunde 2 aufaddiert usw.
Zwischensummen korrekt berechnen mit CalcController
Um dies zu lösen, gilt es noch eine CalcController Komponente hinzuzufügen. Diese fügt man in einen Kopfbereich (Body Header) des Umsatzblockes hinzu und weist dieser einen InitialValue von 0 zu. Bei unserer CalcTotal Komponente weist nun unter Initializer im Eigenschaftsfenster der Komponente die soeben hinzugefügte CalcController Komponente hinzu.
Dies bewirkt, dass der Zähler AnzahlUmsaetze bei jedem Kunden mit Beginn der Ausgabe von dessen Umsatzdaten auf 0 zurückgesetzt wird, sodass am Ende immer nur die Anzahl der Umsatzeinträge für genau diesen Kunden ausgegeben werden. Beim nächsten Kunden wird die Anzahl wieder auf Null zurückgesetzt und unsere Anzeige ist endlich korrekt.
Tipp: Bei RaveReports ist die Reihenfolge wichtig. Daher müssen CalcTotal Komponenten immer im Baum rechts oberhalb der Komponente liegen, die die berechneten Daten ausgibt.