Natürlich ist das Möglich...Grundsätzlich gilt beim Rave aber, dass man versuchen sollte seinem Ergebnis schon durch die
SQL Query so weit wie möglich zu bekommen.
Zum Ausführen von Berechnungen hast du verschiedene Komponenten zur Auswahl :
CalcOp :
Diese Komponente ist eine "Unsichtbare" Kompontente. Sie führt Rechen Vorgänge aus. Allerdings kann sie immer nur einen Vorgang auf einmal machen. Dafür können mehrere CalcOps aber hintereinander gehängt werden.
CalcTotal :
Die CalcTotal Komponente summiert Werte die ihm angegeben werden. (Sie muss sich immer auf dem Band befinden in welchem auch später der Wert gedruckt werden soll)
Bei beiden Komponenten kann man das Ergebnis in einem Parameter oder einer PIVar speichern.
Wenn du die Summen der Angebote, Aufträge, Rechnungen schon durch die
Query ermittelt hast, dann kannst du im Summenband 2 CalcOps nehmen.
In der ersten CalcOp summierst du die Summe der Angebot und der Aufträge, und im zweiten dann dieses Ergebnis addiert mit der Summe der Rechnungen. Bei der zweiten CalcOp kannst du als anfangswert die erste CalcOp angeben.
Solltest du aber in den darüberliegenden Detailbändern die einzelnen Angebote etc anzeigen und die Summen noch nicht hast, dann machst du vorher noch folgendes :
- Du legst im Report 3 Parameter an (SummeAngebot, SummeAuftrag, SummeRechnung oder so)
- In je ein Datenband kommt entweder eine CalcTotal oder eine CalcOp Komponente
Bei CalcTotal :
- Die Eigenschaft CalcType muss auf ctSum stehen
- DataView ist Kunden, Aufträge, Rechnungen (wie du sie auch immer genannt hast)
- DataField .. (müsstest du ja auch selber wissen)
- DestParam ist SummeAngebot/SummeAuftrag/SummeRechnung
Bei CalcOp :
Das Gleiche, nur musst du bei SourceParam SummeAngebot etc eintragen, weil die Rechenoperation bei jedem Datensatz ausgeführt wird.
Es wird quasi immer der neue Wert einfach hinzugerechnet.
Wenn du die 3 Summen hast, kannst du die im Summenband als SourceValue angeben und dir so das Ergebnis errechnen lassen.
Alternative :
Du kannst auch im Summenband eine Textkomponente hinzufügen und dort ein OnGetText Ereignis erstellen :
Code:
function Text1_OnGetText(Self: TRaveText; var Value: string);
begin
Value := IntToStr(StrToInt(RaveProject.GetParam('SummeAngebot')) +
StrToInt(RaveProject.GetParam('SummeAuftrag')) +
StrToInt(RaveProject.GetParam('SummeRechnung')));
end OnGetText;
Das macht natürlich nur Sinn, wenn du den Wert nur anzeigen und nicht weiterverwenden willst.