一 背景说明
SAP BAPI(Business Application Programming Interface)是SAP系统中的一组规范和标准,用于从SAP系统中获取数据、输入数据和更新数据。这些API允许开发者以编程方式与SAP系统交互,而无需编写大量的自定义代码。
1.1 BAPI清单
销售订单创建 | BAPI_BILLINGDOC_CREATEMULTIPLE |
交货单创建 | BAPI_OUTB_DELIVERY_CREATE_SLS |
交货单过帐 | WS_DELIVERY_UPDATE |
销售订单开票 | BAPI_BILLINGDOC_CREATEMULTIPLE |
二 实施步骤
2.1 Copy代码 直接可使用
FORM create_delivery .
DATA: lv_vstel TYPE vbap-vstel.
DATA: delivery TYPE bapishpdelivnumb-deliv_numb.
DATA: num_deliveries TYPE bapidlvcreateheader-num_deliveries.
DATA: sales_order_items TYPE TABLE OF bapidlvreftosalesorder.
DATA: ls_sales_order TYPE bapidlvreftosalesorder.
DATA: extension_in TYPE TABLE OF bapiparex.
DATA: ls_extension_in TYPE bapiparex.
DATA: extension_out TYPE TABLE OF bapiparex.
DATA: ls_extension_out TYPE bapiparex.
DATA: return TYPE TABLE OF bapiret2.
DATA: ls_return TYPE bapiret2.
DATA: zlikp_extension TYPE zlikp_extension.
DATA: zlips_extension TYPE zlips_extension.
DATA: message TYPE string.
DATA: output TYPE string.
DATA: ls_index TYPE i.
CLEAR: ls_index.
CLEAR: delivery, num_deliveries, zlikp_extension.
REFRESH: sales_order_items, extension_in, extension_out, return.
IF gs_header_likp IS NOT INITIAL.
MOVE-CORRESPONDING gs_header_likp TO zlikp_extension.
ENDIF.
LOOP AT gt_create_lips INTO gs_create_lips.
CALL FUNCTION 'CONVERSION_EXIT_CUNIT_INPUT'
EXPORTING
input = gs_create_lips-vrkme
language = sy-langu
IMPORTING
output = output
EXCEPTIONS
unit_not_found = 1
OTHERS = 2.
IF output IS NOT INITIAL.
gs_create_lips-vrkme = output.
ENDIF.
IF gs_header_likp IS INITIAL.
READ TABLE gt_lips_create INTO DATA(ls_lips_create) WITH KEY index = gs_create_lips-index.
IF sy-subrc = 0.
READ TABLE lt_address INTO DATA(ls_address) WITH KEY ship_item = ls_lips_create-ship_item.
MOVE-CORRESPONDING ls_address TO zlikp_extension.
zlikp_extension-zzvendor = zlikp_extension-zzvendor.
ls_extension_in-structure = 'LIKP'.
ls_extension_in+30 = zlikp_extension.
APPEND ls_extension_in TO extension_in.
ENDIF.
ENDIF.
"--------------------------------------------
IF lv_vstel IS INITIAL.
lv_vstel = gs_create_lips-vstel. "装运点
ENDIF.
CLEAR: ls_sales_order.
ls_sales_order-ref_doc = gs_create_lips-vbeln. "销售订单
ls_sales_order-ref_item = gs_create_lips-posnr. "销售订单行项目
ls_sales_order-dlv_qty = gs_create_lips-kwmeng."数量
ls_sales_order-sales_unit = gs_create_lips-vrkme. "单位
APPEND ls_sales_order TO sales_order_items.
CLEAR: zlips_extension.
ls_extension_in-structure = 'LIPS'.
zlips_extension-zlgort = gs_create_lips-lgort.
zlips_extension-vbeln = ls_sales_order-ref_doc.
zlips_extension-posnr = ls_sales_order-ref_item.
ls_extension_in+30 = zlips_extension.
APPEND ls_extension_in TO extension_in.
ENDLOOP.
EXPORT extension_in FROM extension_in TO MEMORY ID 'EXTENSION_IN'.
EXPORT zlikp_extension FROM zlikp_extension TO MEMORY ID 'ZLIKP_EXTENSION'.
CALL FUNCTION 'BAPI_OUTB_DELIVERY_CREATE_SLS'
EXPORTING
ship_point = lv_vstel "装运点
IMPORTING
delivery = delivery "交货单号
num_deliveries = num_deliveries
TABLES
sales_order_items = sales_order_items
extension_in = extension_in
extension_out = extension_out
return = return.
IF delivery IS NOT INITIAL.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ENDIF.
"--------------------------------------------
ENDFORM.
2.2 VL01N交货