BAPI_SALESORDER_CREATEFROMDAT2¶
Create sales orders programmatically — the standard SD BAPI for order creation.
Purpose¶
BAPI_SALESORDER_CREATEFROMDAT2 creates SD sales orders of any document type. It supports header, line items, partners (sold-to, ship-to, payer), schedule lines, and conditions. Always call BAPI_TRANSACTION_COMMIT after success.
Signature (key parameters)¶
| Parameter | Direction | Type | Description |
|---|---|---|---|
ORDER_HEADER_IN |
Importing | BAPISDHD1 |
Order header data |
ORDER_HEADER_INX |
Importing | BAPISDHD1X |
Checkbox — flag fields to send |
ORDER_ITEMS_IN |
Tables | BAPISDITM |
Line items |
ORDER_ITEMS_INX |
Tables | BAPISDITMX |
Checkbox for items |
ORDER_PARTNERS |
Tables | BAPIPARNR |
Partners (sold-to, ship-to, payer) |
SALESDOCUMENT |
Exporting | VBELN_VA |
Created order number |
RETURN |
Tables | BAPIRET2 |
Messages |
Example — create a standard order¶
DATA: ls_header TYPE bapisdhd1,
ls_headerx TYPE bapisdhd1x,
lt_items TYPE STANDARD TABLE OF bapisditm,
lt_itemsx TYPE STANDARD TABLE OF bapisditmx,
lt_partners TYPE STANDARD TABLE OF bapiparnr,
lt_return TYPE STANDARD TABLE OF bapiret2.
DATA lv_order_no TYPE vbeln_va.
" Header
ls_header-doc_type = 'TA'. " standard order
ls_header-sales_org = '1000'.
ls_header-distr_chan = '10'.
ls_header-division = '00'.
ls_header-req_date_h = sy-datum + 7. " requested delivery
ls_headerx-doc_type = 'X'.
ls_headerx-sales_org = 'X'.
ls_headerx-distr_chan = 'X'.
ls_headerx-division = 'X'.
ls_headerx-req_date_h = 'X'.
" Partners — sold-to is mandatory
APPEND VALUE #( partn_role = 'AG' partn_numb = '0000010001' ) TO lt_partners. " sold-to
APPEND VALUE #( partn_role = 'WE' partn_numb = '0000010002' ) TO lt_partners. " ship-to
" Items
APPEND VALUE #(
itm_number = '000010'
material = '000000000000000100'
target_qty = '5'
target_qu = 'PC'
plant = '1000'
) TO lt_items.
APPEND VALUE #(
itm_number = '000010'
material = 'X'
target_qty = 'X'
target_qu = 'X'
plant = 'X'
) TO lt_itemsx.
CALL FUNCTION 'BAPI_SALESORDER_CREATEFROMDAT2'
EXPORTING
order_header_in = ls_header
order_header_inx = ls_headerx
IMPORTING
salesdocument = lv_order_no
TABLES
order_items_in = lt_items
order_items_inx = lt_itemsx
order_partners = lt_partners
return = lt_return.
" Check for errors
DATA(lv_has_error) = xsdbool( line_exists(
lt_return[ type = 'E' ] ) OR line_exists( lt_return[ type = 'A' ] ) ).
IF lv_has_error = abap_false AND lv_order_no IS NOT INITIAL.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = abap_true.
WRITE: / 'Sales order created:', lv_order_no.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
LOOP AT lt_return INTO DATA(ls_msg) WHERE type CA 'EA'.
WRITE: / ls_msg-message.
ENDLOOP.
ENDIF.
Common pitfalls¶
Checkbox pattern is mandatory
ORDER_HEADER_INX and ORDER_ITEMS_INX must have 'X' for every field you populate in the data structures. Unpopulated checkbox fields cause the corresponding data fields to be ignored.
Sold-to partner (AG) is required
If ORDER_PARTNERS doesn't contain an entry with PARTN_ROLE = 'AG', the BAPI returns an error. The sold-to partner drives pricing, tax, and delivery determination.
- Incompleteness log: A successfully created order may still have incompleteness warnings in RETURN. The order is created — check it in VA02/VA03 and complete it there.
- Pricing: Conditions are determined automatically from the customer/material master. Pass
ORDER_CONDITIONS_INonly if you need to override prices.
See also¶
BAPI_PO_CREATE1— purchase order creation- Transaction VA01 — create sales order manually
- Transaction VA03 — display sales order