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.