Ausgabe mit Zwischensummen und Gesamtsumme

Getting started ... Alles für einen gelungenen Start.
6 Beiträge • Seite 1 von 1
6 Beiträge Seite 1 von 1

Ausgabe mit Zwischensummen und Gesamtsumme

Beitrag von cubarr (ForumUser / 21 / 0 / 0 ) »
Hallo zuasammen,

ich habe glaub wieder ein typisches Anfängerproblem, aber ältere Posts konnten mir auch nicht weiterhelfen. :(

Ich hab eine interne Tabelle (nach Kostenstellen sortiert) wo unter anderen die Spalten Kostenstelle und Restbetrag vorhanden sind. Nun würde ich diese Daten gerne wie folgt am Bilschirm ausgeben:

Kostenstelle ... Restbetrag

11111 100
11111 50
-----------------------------------------------------
zwischensum 11111 150
-----------------------------------------------------

11112 25
-----------------------------------------------------
zwischensum 11112 25
-----------------------------------------------------
Gesamtsum 175

Kann mir jemand einen Tip geben, wie ich die Summen in meinen write-Anweisungen unterbringen kann?

*DANKE*

Schönen Gruß
Ralf

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Beitrag von Hermann ( / / 0 / 3 ) »
So auf die schnelle:

Kopie der internen Tabelle erzeugen und auf die Kopie den collect-Befehl anwenden. Die Schlüssel bleiben erhalten, zahlenartige Felder werden aufaddiert. Damit hast Du dann in der Kopie der internen Tabelle die zusammengefassten Summenzeilen. Dann loop über die 'originale' interne Tabelle und bei jedem neuen Schlüssel vorher einen Read über die 'Kopie' machen, um die entsprechende Summenzeile zu besorgen.

Hermann

Beitrag von Gast ( / / 0 / 3 ) »
Gibt es also somit kein 'Befehl', der mir das von 'selbst' ohne eine zusätzliche Tabelle macht?!

Danke für deine Antwort!

Beitrag von Hermann ( / / 0 / 3 ) »
Naja, auf einen zweiten Blick gibt es noch at und endat. Ich zitiere aus der Doku (hab den Befehl selbst noch nicht benutzt):
AT - itab


Syntax
LOOP AT itab result ...
[AT FIRST.
...
ENDAT.]
[AT NEW comp1.
...
ENDAT.
[AT NEW comp2.
...
ENDAT.]]
[ ... ]
[[AT END OF comp2.
...
ENDAT.]
AT END OF comp1.
...
ENDAT.]
[AT LAST.
...
ENDAT.]
ENDLOOP.



Zusätze:
1. ... FIRST

2. ... {NEW}|{END OF} comp

3. ... LAST



Wirkung
Der Anweisungsblock einer LOOP-Schleife kann Kontrollstrukturen für eine Gruppenstufenverarbeitung enthalten. Die entsprechende Kontrollanweisung ist AT. Die Anweisungen AT und ENDAT definieren Anweisungsblöcke, die bei Gruppenwechseln ausgeführt werden. Innerhalb dieser Anweisungsblöcke kann die Anweisung SUM angegeben werden, um numerische Komponenten einer Gruppenstufe zu summieren. Für das Ausgabeverhalten result gilt das Gleiche wie bei LOOP AT.

Damit die Gruppenstufenverarbeitung ordnungsgemäß durchgeführt wird, sind folgende Regeln zu beachten:

Hinter LOOP darf keine einschränkende Bedingung cond angegeben werden.


Die interne Tabelle darf innerhalb der LOOP-Schleife nicht modifiziert werden.


Ein in der Anweisung LOOP hinter dem Zusatz INTO angegebener Arbeitsbereich wa muss kompatibel zum Zeilentyp der Tabelle sein.


Der Inhalt eines in der Anweisung LOOP hinter dem Zusatz INTO angegebenen Arbeitsbereichs wa darf nicht modifiziert werden.

Voraussetzung für die Gruppenstufenverarbeitung ist, dass die interne Tabelle genau nach der Reihenfolge der Komponenten ihres Zeilentyps sortiert ist, d.h. zuerst nach der ersten Komponente, dann nach der zweiten Komponente und so weiter. Aus der Zeilenstruktur und der entsprechenden Sortierung ergibt sich eine Gruppenstruktur des Inhalts der internen Tabelle, deren Stufen mit AT -Anweisungen ausgewertet werden können. Die AT-ENDAT-Kontrollstrukturen müssen entsprechend der Gruppenstruktur hintereinander angeordnet sein.

Die Anweisungsblöcke innerhalb der AT-ENDAT-Kontrollstrukturen werden ausgeführt, wenn bei der aktuellen Tabellenzeile ein entsprechender Gruppenwechsel stattfindet. Anweisungen der LOOP-ENDLOOP-Kontrollstruktur, die nicht innerhalb einer AT-ENDAT-Kontrollstruktur aufgeführt sind, werden bei jedem Schleifendurchgang ausgeführt.

Wenn in der Anweisung LOOP der Zusatz INTO verwendet wird, um den Inhalt der aktuellen Zeile einem Arbeitsbereich wa zuzuweisen, wird dessen Inhalt bei Eintritt in die AT-ENDAT-Kontrollstruktur wie folgt geändert:

Die Komponenten des aktuellen Gruppenschlüssels bleiben unverändert.


Alle Komponenten mit zeichenartigem flachen Datentyp rechts vom aktuellen Gruppenschlüssel werden an jeder Stelle auf das Zeichen "*" gesetzt.


Alle anderen Komponenten rechts vom aktuellen Gruppenschlüssel werden auf ihren Initialwert gesetzt.

Bei Verlassen der AT-ENDAT-Kontrollstruktur wird dem gesamten Arbeitsbereich wa der Inhalt der aktuellen Tabellenzeile zugewiesen.



Hinweis
Wenn in der Anweisung LOOP der Zusatz INTO verwendet wird, kann außerhalb von Klassen hinter AT {NEW}|{END OF} ein Feldsymbol angegeben werden, dem die entsprechende Komponente des Arbeitsbereichs wa zugewiesen ist.



Zusatz 1
... FIRST


Wirkung
Erste Zeile der internen Tabelle.



Zusatz 2
... {NEW}|{END OF} comp


Wirkung
Anfang bzw. Ende einer Gruppe von Zeilen mit dem gleichen Inhalt in der Komponenten comp1 comp2 ... und in den Komponenten links von comp1 comp2 .... Die Komponenten comp1 comp2 ... können wie im Abschnitt Angabe von Komponenten beschrieben angegeben werden, mit der Einschränkung, dass der Zugriff auf die Attribute von Objekten hier nicht möglich ist.



Zusatz 3
... LAST


Wirkung
Die letzte Zeile der internen Tabelle.



Beispiel
Siehe SUM.



Ausnahmen
Unbehandelbare Ausnahmen


Ursache: Unzulässiger Teilfeldzugriff bei dynamischer Spezifikation des Gruppenwechselkriteriums.
Laufzeitfehler: AT_BAD_PARTIAL_FIELD_ACCESS

Ursache: Bei dynamischer Spezifikation des Gruppenwechselkriteriums via Feldsymbol zeigt das Feldsymbol nicht in den LOOP-Ausgabebereich.
Laufzeitfehler: AT_ITAB_FIELD_INVALID

Ursache: Bei dynamischer Spezifikation des Gruppenwechselkriteriums via (name) enthält das Feld name keinen gültigen Teilfeldbezeichner.
Laufzeitfehler: ITAB_ILLEGAL_COMPONENT

Ursache: Überlauf bei Summenbildung mit SUM.
Laufzeitfehler: SUM_OVERFLOW
Das müsste das sein, was Du sucht, oder?!

Herman

Beitrag von Hans-Hermann ( / / 0 / 3 ) »
Es geht auch ohne eine 2. Tabelle:

Bring die Kostenstelle an den Anfang deiner Itab, sortiere die Tabelle und dann:

Code: Alles auswählen.

loop at itab.
write: itab-kst, itab-dmbtr.
at end of kst.
  sum.
  write: 'Zwischensum', itab-dmbtr.
endat.
at last.
  sum.
  write: 'Summe   ', itab-dmbtr.
endat.
endloop.

Beitrag von cubarr (ForumUser / 21 / 0 / 0 ) »
:D SUPER - Danke :D

Seite 1 von 1

Vergleichbare Themen

3
Antw.
7001
Views
Gesamtsumme eines Feldes / Interne Tabelle
von isp » 31.10.2012 17:25 • Verfasst in ABAP® für Anfänger
3
Antw.
5506
Views
zwischensummen bei alv-grid
von TobiB » 29.11.2007 11:40 • Verfasst in ABAP® für Anfänger
1
Antw.
6484
Views
Zwischensummen im ALV zusammenklappen
von Alexander D. » 29.03.2012 11:29 • Verfasst in ABAP® Core
6
Antw.
16831
Views
Adobe Forms mit 2 Tabellen, Zwischensummen und Übertrag auf nächster Seite
von Kaiwalker » 23.05.2025 12:06 • Verfasst in Java & SAP®
7
Antw.
6887
Views
Write-Ausgabe vor Alv-Grid Ausgabe
von L0w-RiDer » 14.08.2019 14:09 • Verfasst in ABAP® für Anfänger

Über diesen Beitrag


Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.