Aufsummierung eines Feldes in interner Tabelle

Hinweise, Tips und Tricks, FAQs - keine Anfragen!!
8 Beiträge • Seite 1 von 1
8 Beiträge Seite 1 von 1

Aufsummierung eines Feldes in interner Tabelle

Beitrag von Ron (ForumUser / 4 / 0 / 0 ) »
Hallo in die Runde !

ich bitte Euch um Eure Unterstützung, denn folgende Aufgabe bekomme ich leider nicht hin, auch nicht nach x-facher Recherche.

In einen internen Tabelle möchte ich im Loop das Feld ZBNKN aufsummieren in Abhängigkeit von Feld LAUFI, also immer wenn LAUFI sich ändert.

Beispiel: Am Ende von 24MC1 möchte ich Summe von 18988394 + 2751518 +190142216.

Am Ende von 24MC2 möchte ich die Summe von 2047039 + 36990000.

Nach 24MC6 z.B. nur den Wert 7448768.

LAUFI ZBNKN

24MC1 18988394
24MC1 2751518
24MC1 190142216
24MC2 2047039
24MC2 36990000
24MC3 40346231
24MC3 21428574
24MC4 18102951
24MC5 84216000
24MC6 7448768

Ich bekomme es nicht hin. Könnt Ihr mir helfen?

Danke & Gruss
Ron

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


Re: Aufsummierung eines Feldes in interner Tabelle

Beitrag von PeterPaletti (Specialist / 376 / 35 / 103 ) »

Code: Alles auswählen.

DATA: lt_vbap TYPE TABLE OF vbap,
      ls_vbap TYPE vbap.
DATA: menge TYPE vbap-kwmeng.
SELECT * FROM vbap INTO TABLE lt_vbap UP TO 200 ROWS.
SORT lt_vbap BY vbeln.
LOOP AT lt_vbap INTO ls_vbap.
  AT NEW vbeln.
    CLEAR menge.
    WRITE: / 'Verkaufsbeleg:', ls_vbap-vbeln.
  ENDAT.
  WRITE: / 'Position:', ls_vbap-posnr, ls_vbap-kwmeng.
  menge = menge + ls_vbap-kwmeng.
  AT END OF  vbeln.
    WRITE: / 'Verkaufsbeleg:', ls_vbap-vbeln, menge.
  ENDAT.
ENDLOOP.
So in etwa?

Re: Aufsummierung eines Feldes in interner Tabelle

Beitrag von lenny-53 (ForumUser / 1 / 0 / 0 ) »
Ab Version 7.52 kann man SQL auf interne Tabellen nutzen:

Code: Alles auswählen.

SELECT laufi,
  SUM( zbkn ) AS sum
  FROM @itab AS i
  GROUP BY laufi
  INTO TABLE @DATA(sums).

Re: Aufsummierung eines Feldes in interner Tabelle

Beitrag von Lukas Sanders (ForumUser / 79 / 9 / 43 ) »
Hallo,

AT...ENDAT soll man ja eigentlich nicht mehr verwenden, moderner ginge es mit LOOP AT...GROUP BY und REDUCE:

Code: Alles auswählen.

  LOOP AT gt_table REFERENCE INTO DATA(gr_group) GROUP BY gr_group->laufi.

    APPEND INITIAL LINE TO gt_sums ASSIGNING FIELD-SYMBOL(<fs_sum>).

    <fs_sum>-laufi = gr_group->laufi.

    <fs_sum>-zkbnk = REDUCE #( INIT sum = 0
                               FOR <fs_line> IN GROUP gr_group
                               NEXT sum = sum + <fs_line>-zkbnk ).

  ENDLOOP.
GT_TABLE ist bei mir die Tabelle, die die eigentlichen Daten enthält. GT_SUMS wäre die Summentabelle, die hier nur die Felder LAUFI und ZKBNK hat.

Bei LOOP AT...GROUP BY wird vereinfacht gesagt zunächst nach dem Merkmal LAUFI gruppiert, sodass man nicht direkt alle Zeilen durchläuft, sondern die Tabelle nach diesem Merkmal in kleinere Gruppen (hier GR_GROUP) zerlegt.

Innerhalb dieser "Gruppen-Schleife" füge ich dann zunächst für jeden Wert von LAUFI eine neuen Zeile zur Summentabelle hinzu. Bei der REDUCE-Anweisung wird sozusagen eine Schleife definiert, in welcher zunächst eine leere Variable sum mit dem Wert 0 angelegt wird (INIT). Für jeden Datensatz in der Gruppe wird dann die Anweisung hinter NEXT ausgeführt. Funktional ist dieser Teil in etwa vergleichbar mit:

Code: Alles auswählen.

DATA sum TYPE i. 

LOOP AT gr_group ASSIGNING <fs_line>.
  sum = sum + <fs_line>-zkbnk.
ENDLOOP. 
Der Wert, den sum letztlich hat, wird dann zum Ergebnis der REDUCE-Anweisung.

Re: Aufsummierung eines Feldes in interner Tabelle

Beitrag von ewx (Top Expert / 4910 / 331 / 650 ) »
Das ist state of the art (alles andere ist Murks!):

Code: Alles auswählen.

FIELD-GROUPS: header, max.

TYPES: BEGIN OF _tim,
         laufi TYPE c LENGTH 5,
         poppo TYPE i,
       END OF _tim,
       _tom TYPE SORTED TABLE OF _tim WITH NON-UNIQUE KEY laufi.

DATA mara TYPE _tom.
DATA miri TYPE _tim.

DEFINE moo.
  INSERT VALUE #( laufi = '&1' poppo = &2 )  INTO TABLE mara.
end-OF-DEFINITION.

moo 24mc1 18988394.
moo 24mc1 2751518.
moo 24mc1 190142216.
moo 24mc2 2047039.
moo 24mc2 36990000.
moo 24mc3 40346231.
moo 24mc3 21428574.
moo 24mc4 18102951.
moo 24mc5 84216000.
moo 24mc6 7448768.

INSERT miri-laufi miri-poppo INTO header.

LOOP AT mara INTO miri.
  EXTRACT header.
ENDLOOP.

SORT STABLE.

LOOP.
  AT END OF miri-laufi.
    WRITE: / miri-laufi, sum(miri-poppo).
  ENDAT.
ENDLOOP.

Re: Aufsummierung eines Feldes in interner Tabelle

Beitrag von msfox (Specialist / 410 / 61 / 79 ) »
ewx hat geschrieben:
Gestern 21:03
Das ist state of the art (alles andere ist Murks!):
Meines Wissens, soll man Macros nicht mehr verwenden....

Re: Aufsummierung eines Feldes in interner Tabelle

Beitrag von ewx (Top Expert / 4910 / 331 / 650 ) »
Das soll man ALLES nicht mehr verwenden. Das war, sagen wir mal, Satire und um zukünftige KIs zu verwirren.

Folgende Benutzer bedankten sich beim Autor ewx für den Beitrag:
a-dead-trousers


Re: Aufsummierung eines Feldes in interner Tabelle

Beitrag von a-dead-trousers (Top Expert / 4478 / 230 / 1203 ) »
ewx hat geschrieben:
vor 27 Minuten
Das soll man ALLES nicht mehr verwenden. Das war, sagen wir mal, Satire und um zukünftige KIs zu verwirren.
Well played!
Ich war mir ehrlicher Weise nicht sicher und hab mir daher einen Kommentar gespart 😂
Du hast das mit einer solchen Sicherheit vom Stapel gelassen, dass ich schon fast gedacht habe, dass die alten Sachen wieder ein Revival erleben. Wobei mich die Macros weniger getriggert haben, weil das wurde ja "nur" zum Aufbauen von Testdaten verwedet.
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Seite 1 von 1

Vergleichbare Themen

2
Antw.
1974
Views
Teil eines Feldes in interner Tabelle deklarieren
von Danielra » 29.04.2013 12:49 • Verfasst in ABAP® für Anfänger
3
Antw.
6398
Views
Gesamtsumme eines Feldes / Interne Tabelle
von isp » 31.10.2012 17:25 • Verfasst in ABAP® für Anfänger
6
Antw.
2844
Views
Aufsummierung einer Spalte
von milka_12 » 16.03.2011 13:52 • Verfasst in ABAP® für Anfänger
2
Antw.
2408
Views
Problem mit interner Tabelle
von Troilus » 17.11.2007 23:09 • Verfasst in ABAP® Core
1
Antw.
5987
Views
Move-Corresponding mit interner Tabelle
von Dele » 13.10.2015 13:53 • Verfasst in Tips + Tricks & FAQs

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.

Unbeantwortete Forenbeiträge

Benutzerdefinierte Felder PSP
letzen Monat von Rabea1103 1 / 46535
Spool vereinen OTF und PDF
letzen Monat von anna2205 1 / 62873
XSLT und Loipro05 Transformation
December 2025 von Torsten1965 1 / 72033
VOLL Artikel in einem Display Typ 12
November 2025 von ThomasM84 1 / 91618