First do the events like INITIALIZATION, START-OF-SELECTION.
Then
SELECT vbeln auart erdat ernam waerk
FROM vbak INTO TABLE ivbak
WHERE vbeln IN s_vbeln.
IF NOT ivbak[] IS INITIAL.
SELECT vbeln matnr netwr
FROM vbap INTO ivbap FOR ALL ENTRIES IN ivbak
WHERE vbeln EQ ivbak-vbeln.
SORT ivbap BY vbeln.
LOOP AT ivbak.
* -> Here there is a loop (no read table) necessary beacuse you got several positions for one BELNR
LOOP AT ivbap WHERE vbeln = ivbak-vbeln..
MOVE : ivbak-vbeln TO final-vbeln,
ivbak-auart TO final-auart,
ivbak-erdat TO final-erdat,
ivbak-ernam TO final-ernam,
ivbak-waerk TO final-waerk,
ivbap-matnr TO final-matnr,
ivbap-netwr TO final-netwr.
APPEND final.
CLEAR final.
CLEAR ivbak.
CLEAR ivbap.
ENDLOOP.
ENDLOOP.
* -> Why do you have the write list here? You are displaying it in ALV so WRITE is not necessary?
LOOP AT final.
WRITE : / final-auart,
final-vbeln,
final-matnr,
final-erdat,
final-ernam,
final-waerk,
final-netwr.
ENDLOOP.
ENDIF.
Regards
Michael