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 ) » 26. Apr 2012 15:59

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. Apr 2012 16:46, insgesamt 1-mal geändert.


Re: Zwischensumme in interne Tabelle in neues Feld schreiben

Beitrag von bliss (ForumUser / 66 / 2 / 6 ) » 26. Apr 2012 16:30

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 / 1135 / 0 / 178 ) » 26. Apr 2012 18:24

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 ) » 27. Apr 2012 12:32

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

Aktuelle Forenbeiträge

Excel OLE2 Blatt schützen gelöst
vor 4 Minuten von Kerstin 5 / 18
Wann wird VBFA-MATNR gefüllt? gelöst
vor 13 Minuten von deejey 3 / 35
VL10B - Partner ändern -> Funktionsbaustein?
vor 13 Stunden von black_adept 2 / 44
Datenaustausch mit externen Lieferanten
vor 20 Stunden von DeathAndPain 5 / 162
Vorschlagswerte IT0700
vor 23 Stunden von DeathAndPain 8 / 122

Unbeantwortete Forenbeiträge

SP01 Verweildauer
vor 4 Tagen von SAP_ENTWICKLER 1 / 67
Transaktion OMT3B Subscreens in Dynpros einhängen
vor 5 Tagen von SAP_ENTWICKLER 1 / 49
Zeitereignisarten anlegen
vor einer Woche von Flashtie 1 / 160
Genehmiger & Status der Genehmigung bei einer BANF
vor 3 Wochen von Der Formulator 1 / 233
Migrationstool Upload QUAN und CURR Felder
vor 3 Wochen von SAP_ENTWICKLER 1 / 222