Creating Outbound Delivery of S/4HANA with BAPISDORDER_GETDETAILED LIST

Keywords: Programming

To create Outbound Delivery in S/4HANA, you first need to have a sales order with an ID of 376, which is viewed through the transaction code VA03.

It takes only 61 lines of code to create a corresponding outbound delivery based on this Sales Order:

REPORT zcreate_dn.

DATA:lv_ship_point        TYPE          bapidlvcreateheader-ship_point VALUE '0001',
     lv_due_date          TYPE datum VALUE '20181205',
     lv_delivery          TYPE          bapishpdelivnumb-deliv_numb,
     lt_so_items          LIKE TABLE OF bapidlvreftosalesorder,
     ls_so_items          LIKE LINE OF lt_so_items,
     lt_return            TYPE TABLE OF bapiret2,
     ls_read              TYPE order_view,
     lt_item              TYPE TABLE OF bapisdit,
     lt_order_headers_out TYPE TABLE OF bapisdhd,
     lt_header            TYPE TABLE OF sales_key,
     lt_bapisdtehd        TYPE TABLE OF bapisdtehd,
     lt_bapitextli        TYPE TABLE OF bapitextli,
     lt_bapiret2          LIKE bapiret2   OCCURS 0 WITH HEADER LINE.

APPEND INITIAL LINE TO lt_header ASSIGNING FIELD-SYMBOL(<header>).

ls_read-item = 'X'.

<header>-vbeln = '0000000376'.

CALL FUNCTION 'BAPISDORDER_GETDETAILEDLIST'
  EXPORTING
    i_bapi_view     = ls_read
  TABLES
    sales_documents = lt_header
    order_items_out = lt_item.

LOOP AT lt_item ASSIGNING FIELD-SYMBOL(<item>).
  APPEND INITIAL LINE TO lt_so_items ASSIGNING FIELD-SYMBOL(<fill>).

  <fill>-ref_doc = <item>-doc_number.
  <fill>-ref_item = <item>-itm_number.
  <fill>-dlv_qty = <item>-req_qty.
  <fill>-sales_unit = 'EA'.
ENDLOOP.

CALL FUNCTION 'BAPI_OUTB_DELIVERY_CREATE_SLS'
  EXPORTING
    ship_point        = lv_ship_point
    due_date          = lv_due_date
  IMPORTING
    delivery          = lv_delivery
  TABLES
    sales_order_items = lt_so_items
    return            = lt_return.

LOOP AT lt_return ASSIGNING FIELD-SYMBOL(<return>).
  WRITE:/ | Type: { <return>-type }: { <return>-message } | COLOR COL_NEGATIVE.
ENDLOOP.

CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
  EXPORTING
    wait   = 'X'
  IMPORTING
    return = lt_bapiret2.

LOOP AT lt_bapiret2 ASSIGNING <return>.
  WRITE:/ 'Message:', <return>-message COLOR COL_POSITIVE.
ENDLOOP.

The idea is to read out the line item details of the sales order with the function BAPISDORDER_GETDETAILED LIST, and then create outbound delivery with BAPI_OUTB_DELIVERY_CREATE_SLS.

Execute report to show that Outbound Delivery 80000205 was successfully created:

Use Transaction Code VL03N to view:

For more original articles by Jerry, please pay attention to the public name "Wang Zixi":

Posted by Rik Peters on Mon, 21 Jan 2019 21:39:12 -0800