Zwischensumme in interne Tabelle in neues Feld schreiben

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

Zwischensumme in interne Tabelle in neues Feld schreiben

Beitrag von neptun277 (ForumUser / 2 / 1 / 0 ) »
Hallo Zusammen,

ich grübel nun schon seit 2 Tagen an folgenden Sachverhalt.


Ich möchte aus einer internen Tabelle die Forderungssumme von einzelnen Kunden in ein seperates Feld in der selben internen Tabelle schreiben.

Deklarationder internen Tabelle:

Code: Alles auswählen.

TYPES: BEGIN OF gt_bsid,
  BUKRS like BSID-bukrs,
  KUNNR like BSID-KUNNR,
  BLDAT like BSID-BLDAT,
  DMBTR like BSID-DMBTR,
  ZFBDT like bsid-zfbdt,
  ZBD1T like BSID-zbd1t,
  ZBD2T like BSID-zbd2t,
  ZBD3T like BSID-zbd3t,
  SHKZG like BSID-shkzg,
  faedt like RFPOS-FAEDT,
  DMBTR5S like BSID-DMBTR,
  DMBTR5H like BSID-DMBTR,
  VBELN like BSID-vbeln,
END OF gt_bsid.
Diese Tabelle wird mit folgender select-Anweisung befüllt:

Code: Alles auswählen.

select * from bsid into CORRESPONDING FIELDS OF TABLE it_bsid
  where bukrs in s_bukrs
    and kunnr in s_kunde.
Anschließend wird das Nettofälligkeitsdatum berechnet und in das Feld it_bsid-faedt geschrieben:

Code: Alles auswählen.

loop at it_bsid into it_wabsid.

      CALL FUNCTION 'NET_DUE_DATE_GET'
        EXPORTING
          i_zfbdt       = it_wabsid-zfbdt
          i_zbd1t       = it_wabsid-zbd1t
          i_zbd2t       = it_wabsid-zbd2t
          i_zbd3t       = it_wabsid-zbd3t
          i_shkzg       = it_wabsid-shkzg
          i_rebzg       = it_wabsid-vbeln
*       I_KOART       = 'D'
      IMPORTING
        e_faedt       = i_faedt.


move i_faedt to it_wabsid-faedt.

MODIFY it_bsid from it_wabsid.
endloop.
Und nun will ich die Forderungssummen der einzelnen Kunden berechnet, die das Nettofälligkeitsdatum überschritten haben und in ein neues Feld schreiben (it_bsid-dmbtr5s)
Hierzu habe ich schon mit dem sum-Befehl herumexperimentiert.
Leider bis jetzt ohne Erfolg.
Coding:

Code: Alles auswählen.

loop at it_bsid into it_wabsid.
sort it_wabsid by kunnr.
IF it_wabsid-faedt >= sy-datum and it_wabsid-shkzg = 'S'.
 at end of kunnr.
   sum.
 move it_wabsid-dmbtr to it_wabsid-dmbtr5s.
endat.
endif.
MODIFY it_bsid from it_wabsid.
endloop.
Hier soll die Summe dieser Gruppierung in das Feld it_wabsid-dmbtr5s geschrieben werden.
Leider ohne Erfolg.
Kann mir da vielleicht jemand weiterhelfen?
Wäre klasse :D
Vielen Dank.
Zuletzt geändert von neptun277 am 26.04.2012 16:46, insgesamt 1-mal geändert.

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


Re: Zwischensumme in interne Tabelle in neues Feld schreiben

Beitrag von bliss (ForumUser / 66 / 2 / 6 ) »
Setz mal das Ganze in die [ code ][ /code ] Klammern, so hat keiner Lust sich das durchzulesen! Einfach die 4 Bereiche markieren und oben im Editor auf Code klicken.
Gruß
bliss
.|.. .. ...| . .|.. ||| |. ||. .| |. |.. .||. .|. ||| ... .||. . .|.

Ich bin Anfänger und meine Tipps sind mit Vorsicht zu genießen.

Re: Zwischensumme in interne Tabelle in neues Feld schreiben

Beitrag von JHM (Top Expert / 1197 / 1 / 197 ) »
neptun277 hat geschrieben:

Code: Alles auswählen.

loop at it_bsid into it_wabsid.
sort it_wabsid by kunnr.
1. dein Namensschema ist bescheiden. Da gibt es deutlich bessere, dann wird es deutlich lesbarer. (z.B.: gt = global itab; gs = global structure: gw = global workarea)
2. Bedingte Summierungen sind mit SUM nicht möglich!
3. Da ist einiges bei dir durcheinander gegangen. Hier ein Lösungsansatz.

Code: Alles auswählen.

* Hilfsvariable für die Summierung:
DATA: gv_sum TYPE dmbtr.

* ITAB nach KUNNR für Summierung vor dem LOOP sortieren (du versuchst in deinem Code eine Struktur innerhalb des LOOPs zu sortieren)
SORT gt_bsid BY kunnr.

LOOP AT gt_bsid INTO gs_bsid.
  AT NEW kunnr.
    CLEAR: gv_sum. "Summe initialisieren
  ENDAT.

* Bedingte Summierung
  IF gs_bsid-dmbtr >= sy-datum AND gs_bsid-shkzg = 'S'.
    gv_sum = gv_sum + gs_bsid-dmbtr.
  ENDIF.

* Summe in ITAB übernehmen!
  AT END OF kunnr.
    gs_bsid-dmbtr5s = gv_sum.
    MODIFY gt_bsid FROM gs_bsid TRANSPORTING dmbtr5s WHERE kunnr = gs_bsid-kunnr. "WICHTIG: Nur die Summe in die ITAB übernehmen
  ENDAT.
ENDLOOP.

Folgende Benutzer bedankten sich beim Autor JHM für den Beitrag:
neptun277

Gruß Hendrik

Re: Zwischensumme in interne Tabelle in neues Feld schreiben

Beitrag von neptun277 (ForumUser / 2 / 1 / 0 ) »
Hallo Hendrik,

vielen Dank für Deinen Lösungsansatz. Es hat funktionert!
Bzgl. des Namensschemas hast du recht. Das bedarf noch der Optimierung:-)
Ein schönes Wochenende!

Gruß Ingo

Seite 1 von 1

Vergleichbare Themen

5
Antw.
831
Views
1
Antw.
521
Views
2
Antw.
7178
Views
in interne Tabelle schreiben
von anki_86 » 25.06.2007 08:53 • Verfasst in ABAP® für Anfänger
19
Antw.
4111
Views
XString in interne tabelle schreiben.
von L0w-RiDer » 06.11.2018 14:09 • Verfasst in ABAP® für Anfänger
4
Antw.
2556
Views
Interne Tabelle in Excel schreiben
von mamba » 12.12.2006 15:36 • Verfasst in ABAP® Core

Ü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.

Unbeantwortete Forenbeiträge

Daten an Tabelle binden
vor 5 Stunden von Bright4.5 1 / 118
aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 1759
Hilfe bei SWEC/SWE2
letzen Monat von retsch 1 / 8361