TYPES: BEGIN OF ty_so,
vbeln LIKE vbap-vbeln,
posnr LIKE vbap-posnr,
END OF ty_so.
FORM frm_create_dn USING u_so
CHANGING c_dn c_result.
DATA:l_vbeln LIKE vbap-vbeln,
l_posnr LIKE vbap-posnr.
DATA: lt_so_item TYPE TABLE OF bapidlvreftosalesorder,
ls_so_item TYPE bapidlvreftosalesorder,
lt_return TYPE TABLE OF bapiret2,
ls_return TYPE bapiret2.
DATA: gt_so TYPE ty_so OCCURS 0,
wa_so TYPE ty_so.
CLEAR lt_so_item.
SELECT * INTO CORRESPONDING FIELDS OF TABLE gt_so
FROM vbap
WHERE vbeln EQ u_so.
LOOP AT gt_so INTO wa_so.
ls_so_item-ref_doc = wa_so-vbeln.
ls_so_item-ref_item = wa_so-posnr.
APPEND ls_so_item TO lt_so_item.
CLEAR ls_so_item.
ENDLOOP.
CALL FUNCTION 'BAPI_OUTB_DELIVERY_CREATE_SLS'
IMPORTING
delivery = c_dn
TABLES
sales_order_items = lt_so_item
return = lt_return.
READ TABLE lt_return INTO ls_return WITH KEY type = 'E'.
IF sy-subrc EQ 0.
c_result = ls_return-message.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'
* IMPORTING
* RETURN =
.
EXPORT lt_return TO MEMORY ID 'LT_RETURN'.
"PERFORM frm_show_message.
RETURN.
ELSE.
c_result = ls_return-message.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
ENDIF.
ENDFORM.