Zwischensumme in interne Tabelle in neues Feld schreiben


Getting started ... Alles für einen gelungenen Start.

Moderatoren: Jan, Steff

Zwischensumme in interne Tabelle in neues Feld schreiben

Beitragvon neptun277 » 26.04.2012, 14: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.04.2012, 15:46, insgesamt 1-mal geändert.
neptun277
ForumUser
 
Beiträge: 2
Registriert: 26.04.2012, 14:41
Dank erhalten: 0 mal
Ich bin: Entwickler/in

Sponsor

Alte ABAP-Entwicklerweisheit: Weißt du weder aus noch ein, baust du einen BADI ein

Re: Zwischensumme in interne Tabelle in neues Feld schreiben

Beitragvon bliss » 26.04.2012, 15: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.
bliss
ForumUser
 
Beiträge: 66
Registriert: 10.04.2012, 15:31
Dank erhalten: 6 mal
Ich bin: Entwickler/in

Re: Zwischensumme in interne Tabelle in neues Feld schreiben

Beitragvon JHM » 26.04.2012, 17: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.
 
Gruß Hendrik

Für diese Nachricht hat JHM einen Dank bekommen :
neptun277
JHM
Top Expert
 
Beiträge: 1131
Registriert: 15.02.2006, 12:39
Wohnort: Aachen
Dank erhalten: 178 mal

Re: Zwischensumme in interne Tabelle in neues Feld schreiben

Beitragvon neptun277 » 27.04.2012, 11: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
neptun277
ForumUser
 
Beiträge: 2
Registriert: 26.04.2012, 14:41
Dank erhalten: 0 mal
Ich bin: Entwickler/in


Zurück zu ABAP® für Anfänger

  Aktuelle Beiträge   
gelöst SALV - Layout wird nicht gezogen
vor 6 Stunden von ralf.wenzel 0 Antw.
ADRMAS-Segmente vorbefüllen
vor 10 Stunden von lausek 0 Antw.
MS Word nicht als SAPscript-Editor verwenden
vor 11 Stunden von DeathAndPain 2 Antw.
EWM: HU mit RBG anhand von Produkt-LB bewegen
Gestern von TimTo 0 Antw.
BADI Impl. cin_plug_in_to_migo deaktivieren
Gestern von zzcpak 1 Antw.

  Ähnliche Beiträge beta
in interne Tabelle schreiben
25.06.2007, 11:07 von ereglam 2 Antw.
XString in interne tabelle schreiben.
06.11.2018, 16:32 von a-dead-trousers 19 Antw.
in eine interne tabelle schreiben mit where bedingung.
27.12.2006, 13:35 von swonny 2 Antw.
Datenbanktabelle Daten aus interne Tabelle schreiben
05.12.2018, 12:06 von DeathAndPain 1 Antw.
ein bereits ausgegebenes ALV in ein neues ALV schreiben
08.05.2009, 00:01 von black_adept 1 Antw.

 

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder