![]() |
Rave - Kalkulation mit mehreren Detailbändern
Hallo,
ich bin am verzweifeln! Eine einfache Berechnungsaufgabe bekomme ich mit Rave-Report einfach nicht gelöst. Wie läßt sich folgender Report am besten umsetzen? Über jeden Tipp oder ein Beispiel bin ich sehr dankbar - vermutlich liegt meinerseits ein Denkfehler vor, da ich einfach nicht weiterkomme! Spätenstens ab der zweiten Query werden irgendweche Werte angezeigt, oder das Vorgängerergebnis wird ausgegeben. Leider finde ich in den Demos auch kein Beipiel wo ein Wert über mehrere Detailbänder berechnet werden soll. Oder kann es sein, dass dieses mit Rave technisch gar nicht machbar ist? Vielen Dank, lowmax Report Information zum Kunden Neben dem Kundennamen soll nun folgendes angezeigt werden: Summe aller Angebote, Summe aller Aufträge Summe aller Rechnungen ------------------------ Summe aller Angebote, Aufträge und Rechnungen (Obriges einfach addiert) Die Queries sind folgende: SELECT Kundennummer,Kundenname from KUNDEN SELECT Angebotsnummer, Sum(Angebotsbetrag) from angebote where Kundennummer=:Kundennummer SELECT Auftragsnummer, Sum(Auftragsbetrag) from Auftraege where Kundennummer=:Kundennummer SELECT Rechnungsnummer, Sum(Rechnungsbetrag) from Rechnungen where Kundennummer=:Kundennummer Als QueryParams wird jeweils die DriverDataView des Kundenqueries referenziert: kundennummer=DDV1.kundennummer |
Re: Rave - Kalkulation mit mehreren Detailbändern
Hi,
mal rein aus logischer Sicht betrachtet : Ihr habt eine Tabelle Angebote, wo eben die Angebote drinstehen. Dieses verknüpfst du mit der Kundennr....logisch soweit. Jedes Angebot hat jetzt einen Betrag (Angebotsbetrag) und auch nur eine Angebotsnummer oder? Wie kann es dann funktionieren dass du eine (von evtl mehreren vorhandenen Angeboten eines Kunden, und dazu die EINE Summe aller angebote über ein Query bekommst? Entweder müsstest du doch dann
Code:
machen, um eben für den Kunden eine Summe pro Angebot zu bekommen (falls ihr, warum auch immer, dort mehrere Datensätze habt mit gleicher Angebotsnummer)
Select Angebotsnummer, SUM(Angebotsbetrag)
From angebote where Kundennummer=:Kundennummer [b]GROUP BY[/b] Angebotsnummer oder du machst
Code:
um eben eine Summe über alle Angebote des Kunden zu bekommen.
Select SUM(Angebotsbetrag)
From angebote where Kundennummer=:Kundennummer Oder versteh ich das falsch? Dann könntest du die Summen doch direkt aus den Queries nehmen und dort andrucken. Für die Summenzeile müsstest du dann entweder 2 CalcOps nehmen und die 3 Werte zusammenaddieren, oder du machst dir eine Query, die das alles alleine Zusammenrechnet oder du rechnest die Werte innerhalb eines Events (mit der Rave Scriptsprache) zusammen. Ansonsten müsstest du nochmal beschreiben, wie das genau bei dir aussehen sollte. |
Re: Rave - Kalkulation mit mehreren Detailbändern
Hi,
vielen Dank für Deine schnelle Antwort. Mit dem 'Group by' hast Du natürlich recht - das ist nicht logisch. Ich habe das Beipiel da wohl schlecht gewählt. Das Grundproblem der Berechnung bleibt jedoch. Wie kann eine Anzeige und Summierung dieser von Werten aus meheren Detailbändern in Rave realisiert werden? Ist dieses grundsätzlich mit Rave möglich? lowmax |
Re: Rave - Kalkulation mit mehreren Detailbändern
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:
Das macht natürlich nur Sinn, wenn du den Wert nur anzeigen und nicht weiterverwenden willst.
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; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:39 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz