Code: Alles auswählen.
*&---------------------------------------------------------------------*
*& Report ZTEST4
*&---------------------------------------------------------------------*
REPORT ZTEST4.
TYPES: BEGIN OF TYPE_T,
VKORG LIKE VBAK-VKORG,
KUNNR LIKE VBAK-KUNNR,
VBELN LIKE VBAK-VBELN,
POSIT TYPE I,
SPLIT(2) TYPE N,
END OF TYPE_T.
DATA: T TYPE STANDARD TABLE OF TYPE_T WITH HEADER LINE,
LAST_VKORG LIKE VBAK-VKORG,
LAST_KUNNR LIKE VBAK-KUNNR,
CURRENT_SPLIT(2) TYPE N,
CURRENT_CUMULATION TYPE I.
*** START-OF-SELECTION ***
START-OF-SELECTION.
APPEND VALUE #( VKORG = '1000' KUNNR = '123456' VBELN = '00000001' POSIT = 60 SPLIT = '00' ) TO T.
APPEND VALUE #( VKORG = '1000' KUNNR = '123456' VBELN = '00000001' POSIT = 50 SPLIT = '00' ) TO T.
APPEND VALUE #( VKORG = '1000' KUNNR = '123456' VBELN = '00000001' POSIT = 70 SPLIT = '00' ) TO T.
APPEND VALUE #( VKORG = '1000' KUNNR = '123456' VBELN = '00000001' POSIT = 30 SPLIT = '00' ) TO T.
APPEND VALUE #( VKORG = '1000' KUNNR = '123456' VBELN = '00000001' POSIT = 60 SPLIT = '00' ) TO T.
APPEND VALUE #( VKORG = '1000' KUNNR = '123456' VBELN = '00000001' POSIT = 20 SPLIT = '00' ) TO T.
APPEND VALUE #( VKORG = '2000' KUNNR = '123456' VBELN = '00000001' POSIT = 180 SPLIT = '00' ) TO T.
APPEND VALUE #( VKORG = '2000' KUNNR = '123456' VBELN = '00000001' POSIT = 70 SPLIT = '00' ) TO T.
APPEND VALUE #( VKORG = '2000' KUNNR = '123456' VBELN = '00000001' POSIT = 1 SPLIT = '00' ) TO T.
LOOP AT T.
* Bei neuer Kombination aus VKORG und Kunde mit Splitkennzeichen von vorne anfangen
IF T-VKORG <> LAST_VKORG OR T-KUNNR <> LAST_KUNNR.
CLEAR: CURRENT_SPLIT, CURRENT_CUMULATION.
ENDIF.
* Aktuelle Werte für nächsten Schleifendurchlauf merken
LAST_VKORG = T-VKORG.
LAST_KUNNR = T-KUNNR.
* Aktuelles Splitkennzeichen in die Spalte SPLIT eintragen und Positionen aufaddieren
T-SPLIT = CURRENT_SPLIT.
ADD T-POSIT TO CURRENT_CUMULATION.
* Der Beleg darf ja nicht gesplittet werden. Wenn die 200 aber überschritten werden,
* beim nächsten Beleg ein anderes Splitkennzeichen verwenden
IF CURRENT_CUMULATION >= 200.
ADD 1 TO CURRENT_SPLIT.
CLEAR CURRENT_CUMULATION.
ENDIF.
MODIFY T TRANSPORTING SPLIT.
ENDLOOP.
* Ergebnis zur Veranschaulichung ausgeben
LOOP AT T.
WRITE: / T-VKORG, T-KUNNR, T-VBELN, T-POSIT, T-SPLIT.
ENDLOOP.
Folgende Benutzer bedankten sich beim Autor DeathAndPain für den Beitrag:
ABAP Neuling
Code: Alles auswählen.
TYPES: BEGIN OF TYPE_T,
VKORG LIKE VBAK-VKORG,
KUNNR LIKE VBAK-KUNNR,
VBELN LIKE VBAK-VBELN,
POSIT TYPE p decimals 0,
SPLIT(2) TYPE N,
END OF TYPE_T.
DATA: T TYPE STANDARD TABLE OF TYPE_T WITH HEADER LINE.
data: summe_pos type p,
vkorg like VBAK-VKORG,
kunnr like vbak-kunnr.
*** START-OF-SELECTION ***
START-OF-SELECTION.
APPEND VALUE #( VKORG = '1000' KUNNR = '123456' VBELN = '00000001' POSIT = 60 SPLIT = '00' ) TO T.
APPEND VALUE #( VKORG = '1000' KUNNR = '123456' VBELN = '00000002' POSIT = 50 SPLIT = '00' ) TO T.
APPEND VALUE #( VKORG = '1000' KUNNR = '123456' VBELN = '00000003' POSIT = 70 SPLIT = '00' ) TO T.
APPEND VALUE #( VKORG = '1000' KUNNR = '123457' VBELN = '00000001' POSIT = 30 SPLIT = '00' ) TO T.
APPEND VALUE #( VKORG = '1000' KUNNR = '123457' VBELN = '00000002' POSIT = 60 SPLIT = '00' ) TO T.
APPEND VALUE #( VKORG = '1000' KUNNR = '123457' VBELN = '00000003' POSIT = 20 SPLIT = '00' ) TO T.
APPEND VALUE #( VKORG = '2000' KUNNR = '123456' VBELN = '00000001' POSIT = 180 SPLIT = '00' ) TO T.
APPEND VALUE #( VKORG = '2000' KUNNR = '123456' VBELN = '00000002' POSIT = 70 SPLIT = '00' ) TO T.
APPEND VALUE #( VKORG = '2000' KUNNR = '123456' VBELN = '00000003' POSIT = 1 SPLIT = '00' ) TO T.
sort t by vkorg kunnr.
loop at t.
move: t-vkorg to vkorg,
t-kunnr to kunnr.
at end of kunnr.
sum.
move t-posit to summe_pos.
if summe_pos > 200.
loop at t where vkorg eq vkorg and kunnr eq kunnr.
move '01' to t-split.
modify t.
endloop.
endif.
endat.
endloop.
loop at t.
write:/ t-vkorg, t-kunnr, t-vbeln, t-posit, t-split.
endloop.
Folgende Benutzer bedankten sich beim Autor ratsnus für den Beitrag:
ABAP Neuling