AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Rave - Kalkulation mit mehreren Detailbändern
Thema durchsuchen
Ansicht
Themen-Optionen

Rave - Kalkulation mit mehreren Detailbändern

Ein Thema von lowmax_5 · begonnen am 24. Jul 2006 · letzter Beitrag vom 25. Jul 2006
Antwort Antwort
lowmax_5

Registriert seit: 9. Mai 2003
Ort: Münster, NRW
257 Beiträge
 
Delphi 11 Alexandria
 
#1

Rave - Kalkulation mit mehreren Detailbändern

  Alt 24. Jul 2006, 15:22
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
  Mit Zitat antworten Zitat
StefanG

Registriert seit: 23. Feb 2006
74 Beiträge
 
#2

Re: Rave - Kalkulation mit mehreren Detailbändern

  Alt 24. Jul 2006, 15:44
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:
Select Angebotsnummer, SUM(Angebotsbetrag)
From angebote where Kundennummer=:Kundennummer [b]GROUP BY[/b] Angebotsnummer
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)
oder du machst
Code:
Select SUM(Angebotsbetrag)
From angebote where Kundennummer=:Kundennummer
um eben eine Summe über alle Angebote des Kunden zu bekommen.

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.
  Mit Zitat antworten Zitat
lowmax_5

Registriert seit: 9. Mai 2003
Ort: Münster, NRW
257 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Rave - Kalkulation mit mehreren Detailbändern

  Alt 24. Jul 2006, 16:00
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
  Mit Zitat antworten Zitat
StefanG

Registriert seit: 23. Feb 2006
74 Beiträge
 
#4

Re: Rave - Kalkulation mit mehreren Detailbändern

  Alt 25. Jul 2006, 07:43
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.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:41 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz