Code: Alles auswählen.
form SELECT_KDAUF_ALT .
* SELECT * FROM VBAK
SELECT vbeln auart
INTO (xvbak-vbeln, vbak-auart)
* INTO CORRESPONDING FIELDS OF XVBAK FROM VBAK
FROM vbak
WHERE vkorg EQ p_vkorg
AND vtweg EQ p_vtweg
AND auart IN s_aufart
AND vbeln IN s_vbeln
AND ( vbtyp EQ 'C' OR vbtyp EQ 'I' ) .
* Beginn AS20030413
CHECK vbak-auart NE 'ZBK'.
CHECK vbak-auart NE 'ZPT'.
* Ende AS20030413
* Beginn BZ25042006
CHECK vbak-auart NE 'ZDB'.
* Ende BZ25042006
* SELECT * FROM VBAP
SELECT vbeln posnr kwmeng
INTO (xvbap-vbeln, xvbap-posnr, xvbap-kwmeng)
* INTO CORRESPONDING FIELDS OF XVBAP FROM VBAP
FROM vbap
WHERE vbeln EQ xvbak-vbeln
AND fkrel NE space " fakturarelevant: JA
AND abgru EQ space " kein absagegrund
AND kwmeng NE 0.
CLEAR ex.
MOVE xvbak-vbeln TO ex-vbeln.
MOVE xvbap-posnr TO ex-posnr.
MOVE xvbap-kwmeng TO ex-aemenge.
* EXTRACT POSTEN.
APPEND ex.
ENDSELECT.
ENDSELECT.
endform. " SELECT_KDAUF_ALT
Code: Alles auswählen.
form SELECT_KDAUF_NEU .
SELECT K~VBELN
P~POSNR
P~KWMENG
P~FKREL
K~AUART
FROM VBAK AS K
INNER JOIN VBAP AS P
ON K~VBELN = P~VBELN
INTO TABLE IT_KDAUF
WHERE K~VBELN IN S_VBELN
AND P~POSNR IN R_POSNR
AND K~VKORG EQ P_VKORG
AND K~VTWEG EQ P_VTWEG
AND K~AUART IN S_AUFART
AND ( K~VBTYP EQ 'C' OR K~VBTYP EQ 'I' )
AND P~ABGRU EQ SPACE.
DELETE IT_KDAUF WHERE AUART EQ 'ZBK'.
DELETE IT_KDAUF WHERE AUART EQ 'ZPT'.
DELETE IT_KDAUF WHERE AUART EQ 'ZDB'.
DELETE IT_KDAUF WHERE KWMENG EQ 0.
DELETE IT_KDAUF WHERE FKREL EQ SPACE.
* ex füllen
LOOP AT IT_KDAUF ASSIGNING <WA_KDAUF>.
CLEAR EX.
EX-VBELN = <WA_KDAUF>-VBELN.
EX-POSNR = <WA_KDAUF>-POSNR.
EX-AEMENGE = <WA_KDAUF>-KWMENG.
APPEND EX.
ENDLOOP. " it_kdauf
FREE IT_KDAUF.
endform. " SELECT_KDAUF_NEU
So wie beide Codings aussehen, wird in der FORM nur die Tabelle EX gefüllt.btml06 hat geschrieben: (Die itab ex ist aus historischen Gründen vorhanden, wird später weiterverwendet und muss deshalb gefüllt werden.)