!--a11y-->
Gesamtsummen berechnen und ausgeben 
Verwendung
Sie wollen die Gesamtsumme über eine Spalte Ihrer Tabelle bilden und ausgeben. Es ist dabei möglich, daß die Summe am Ende der gesamten Tabelle und Zwischensummen am Ende von jeder Seite ausgegeben werden.

Falls Sie nicht über verschiedene Währungen oder Mengeneinheiten summieren wollen, nutzen Sie die Berechnungs-Registerkarte des Tabellen-Knotens (siehe:
Die hier beschriebene Lösung bezieht sich auf die
alte Tabellenausgabe. Sie kann jedoch leicht auf den neuen Tabellentyp übertragen werden.
Das Formular
Voraussetzungen
Sie geben bereits eine Tabelle über den Tabellen-Knoten aus, für die Sie eine Gesamtsumme ausgeben wollen.
Vorgehensweise
Wenn Sie eine Zwischensumme der Gesamtsumme vor einem Seitenumbruch ausgeben wollen, ist eine besondere Berechnung der Summe nötig. Aber auch im anderen Fall, d.h. wenn Sie lediglich am Ende der Tabellenausgabe die Gesamtsumme ausgeben wollen, funktioniert die hier beschriebene Methode.
Die Summierung soll hier an Hand des Flugdatenmodells erklärt werden. In einem Formular wird bereits eine Tabelle mit den Flügen der Fluggesellschaften ausgegeben. Die zugehörige interne Tabelle (
T_SFLIGHT ) ist dabei in der Formularschnittstelle definiert und vom Typ TABLE OF SFLIGHT . Für die Ausgabe einer Tabellenzeile haben Sie zudem bereits das Feld GS_SFLIGHT vom Typ SFLIGHT als globales Feld definiert. Nun soll die Summe über den Preis des Fluges gebildet werden, wobei zu beachten ist, daß die Fluggesellschaften Ihren Preis nach unterschiedlichen Währungen berechnen.Formularlogik für die Berechnung der Gesamtsumme
Navigationsbaum |
Knotenattribute/Inhalt/Bedingungen | |||
|
Ausgabeparameter : GT_TOTAL, GS_4NEXT_ADDITIONProgrammzeilen: refresh gt_total. clear: gs_total, gs_4next_addition. | |||
|
LOOP-Schleife :interne Tabelle T_SFLIGHT INTO GS_SFLIGHT | |||
|
|
&GS_SFLIGHT-PRICE& | |||
|
|
Eingabeparameter : GS_SFLIGHT, GS_4NEXT_ADDITIONAusgabeparameter : GT_TOTAL, GS_4NEXT_ADDITION Programmzeilen : if not gs_4next_addition is initial. collect gs_4next_addition into gt_total. endif. gs_4next_addition-price = gs_sflight-price. | |||
|
|
&GS_SFLIGHT-CURRENCY& | |||
|
Fußbereich |
Stellen Sie sicher, daß sie dem Fußbereich eine ausreichende Höhe zuweisen. | |||
|
|
Bedingung : nur am Ende des AbschnittsEingabeparameter : GS_4NEXT_ADDITIONAusgabeparameter : GT_TOTAL Programmzeilen : if not gs_4next_addition is initial. collect gs_4next_addition into gt_total. endif. | |||
|
|
LOOP-Schleife :interne Tabelle GT_TOTAL INTO GS_TOTAL | |||
|
|
&GS_TOTAL-PRICE& | |||
|
|
&GS_TOTAL-CURRENCY& | |||
Ergebnis
Wenn die Tabellenausgabe über mehrere Seiten geht, wird am Ende von jeder Seite eine Zwischensumme der Gesamtsumme ausgegeben. Falls Sie die Summe lediglich am Ende der Tabelle ausgeben möchten, versehen Sie den Schleifen-Knoten (G) mit der Bedingung
nur am Ende des Abschnitts .Diskussion
Einige Schritte in der Formularlogik sind intuitiv einleuchtend:
Dagegen erscheint es auf den ersten Blick verwunderlich, wozu man das Feld
gs_4next_addition benötigt. Warum addiert man nicht einfach den aktuellen Wert von gs_sflight auf den zugehörigen Wert in der internen Tabelle GT_TOTAL ?Der Grund liegt in der Ausgabesteuerung für
Schleifen und Tabellen. Die Berechnung des Seitenumbruchs erfordert es, Tabellenzeilen zu puffern bevor sie ausgegeben werden. Die Ausgabesteuerung benötigt die Höhenangaben der gesamten Zeile, bevor entschieden werden kann, wann sie den automatische Seitenumbruch auslöst. Die Programmzeilen-Knoten werden dagegen aber nicht gepuffert, sondern direkt bei der Prozessierung ausgeführt.
Siehe dazu:
Die Ausgabesteuerung erkennt erst bei der ersten Ausgabe der folgenden Zeile, daß die letzte Tabellenzeile beendet ist. Um die Berechnung der Summe mit deren Ausgabe in Einklang zu bringen, muß sie verzögert werden. Und genau für diesen Zweck benötigt man das zusätzliche Feld
gs_4next_addition :