Hallo,
ich habe eine Tabelle mit Rechnungspositionen. Diese wird in einem CxGrid dargestellt. Eine vereinfachte Darstellung, nur mit den für die Fragestellung relevanten Feldern, ist unten zu sehen.
Nun möchte ich die Möglichkeit haben Zwischesummen auszurechnen und anzuzeigen. Und zwar auf zwei verschiedene Arten:
1)
Hier soll die Zwischensumme die Summe aller Positionen vom Anfang der Tabelle bis zur ersten Zwischensumme (A) oder die Summe zwischen zwei Zwischensummen (B) sein:
Code:
Position Artikeltyp Bezeichnung Preis
1 Artikel Tastatur 50
2 Artikel Maus 10
(A) Zwischesumme Zwischesumme 60 (=50+10)
3 Artikel MS Office 100
4 Artikel Photoshop 200
(B) Zwischesumme Zwischensumme 300 (=100+200)
Die
Rechnungssume beträgt hier 360 EUR. (Ist nicht Bestandteil der Tabelle.)
2)
Hier soll es eine spezielle Zwischensumme (C) geben: Dabei wird zuerst wieder die Zwischensumme wie gehabt berechnet nun aber mit einem Kommissionssatz multipliziert. Nur das Ergebnis davon geht in die Gesamte Rechnungssume ein. Die Preise Positionen 1 und 2 sind nur für die Rechnung wichtig und dürfen nicht mehr in der Rechnungssume berücksichtig werden.
Code:
Position Artikeltyp Bezeichnung Preis
1 KommisionsArtikel Tastatur 50
2 KommisionsArtikel Maus 10
(C) KommisionsSumme 10 % Kommision 6 (=Kommissionssatz 10 % auf Zwischensumme 60 EUR = 6 EUR [weil: (50+10) * 0,1 = 6]
3 Artikel MS Office 100
4 Artikel Photoshop 200
(D) Zwischensumme Zwischensumme 300 (=100+200)
Die
Rechnungssume beträgt hier 306 EUR. (Ist nicht Bestandteil der Tabelle.)
Weiterhin möchte ich die Summe aller Rechnungen möglichst einfach bilden können. Z.B. so:
Code:
Select sum(Preis) from RechnungsPositionen where Artikeltyp = 'Artikel' or Artikeltyp ='KommisionsSumme'
Wie mache ich das am besten? Trigger auf die Rechnungspostionen? Immer wenn es eine Änderung gibt, schauen ob die Zwischesummen berechnet werden müssen? Wie würde das
SQL für eine Zwischensumme aussehen? Wie wird mein CxGrid dann aktualisiert? Durch den Trigger könnte ja ein anderer Datensatz geändert werden, als der Datensatz in dem ich gerade mit dem Cursor bin. Wie bekommt das cxGrid das mit?
Oder sollten die Zwischensummen gar nicht in der
DB gespeichert werden und nur in der
GUI angezeigt werden? Bei dem Kommissionssatz müssen sie aber in die
DB, da sie dort für die Rechnungssume gebraucht wird.
Wie würde man mit diesen Anforderungen am besten umgehen? Danke!