SAP 交货单过账函数 WS_DELIVERY_UPDATE 可以模拟VL02N过账,但是因为参数相关较多,使用时也会出现异常退出问题,所以在这里整理下,方便以后排查。
部分参数解析:
1、参数 VBKOK_WA:交货抬头信息
必须传值。抬头结构中必传字段:VBELN_VL(交货)、WABUC(自动过帐)、WADAT_IST(实际货物移动日期)
2、参数 DELIVERY:要更改的交货单
必须传值。交货单
3、参数 UPDATE_PICKING : 更新拣配标识
默认 空,如果标记,即会自动更新数量、重量等拣配字段及交货状态。
4、参数 NO_MESSAGES_UPDATE :无更新消息标识
5、参数 SYNCHRON :在对话框中过帐标识。
默认 空,如果标记,则表示同步过账,而不走Update Task
6、参数 IF_ERROR_MESSAGES_SEND_0 :复选框
默认 X,自动抛异常并退出函数逻辑。
7、参数 COMMIT :提交标识
默认空,常规调用需设置 X
8、参数 VBPOK_TAB:交货数据表
常规传值(LIPS都有):VBELN_VL、POSNR_VL、VBELN、POSNN、MATNR、WERKS、PIKMG、MEINS。
9、参数 PROT:Log 日志
返回消息。通过函数 MESSAGE_TEXT_BUILD 整合可读性消息。
调用示例:
CALL FUNCTION 'WS_DELIVERY_UPDATE'
EXPORTING
vbkok_wa = ls_vbkok
delivery = pv_vbeln
* update_picking = 'X'
commit = 'X'
no_messages_update = 'X'
* if_error_messages_send_0 = space
IMPORTING
ef_error_in_goods_issue_0 = lv_error
TABLES
vbpok_tab = lt_vbpok_tab
prot = lt_prot
EXCEPTIONS
error_message = 1
OTHERS = 4.
示例分析:
原本函数并没有EXCEPTIONS参数,这边专门使用ERROR_MESSAGE 和 OTHERS 就是防止异常终止事件。当函数异常退出时,LT_PROT无正常返回消息,可读取系统消息。
IF sy-subrc = 1 AND lt_prot[] IS INITIAL."交货单异常,过账失败
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4
INTO pv_message.
ENDIF.
READ TABLE lt_prot TRANSPORTING NO FIELDS WITH KEY msgty = 'E' .
IF sy-subrc = 0.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
LOOP AT lt_prot INTO DATA(ls_prot) WHERE msgty CA 'AEX'.
CALL FUNCTION 'MESSAGE_TEXT_BUILD'
EXPORTING
msgid = ls_prot-msgid
msgnr = ls_prot-msgno
msgv1 = ls_prot-msgv1
msgv2 = ls_prot-msgv1
msgv3 = ls_prot-msgv1
msgv4 = ls_prot-msgv1
IMPORTING
message_text_output = pv_message.
ENDLOOP.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
pv_message = '交货单过账成功'.
ENDIF.
附常见场景Demo:
SAP VL02N 交货单过账函数 WS_DELIVERY_UPDATE_请输入昵称膨胀的馒头的博客-CSDN博客用BDC模拟VL02N过账也可以,并不复杂只不过用SAP提供的FunctionModule在扩展性上要好一些。_ws_delivery_updatehttps://blog.csdn.net/Fall_in_Lc/article/details/126000285
SAP ABAP WS_DELIVERY_UPDATE 修改数量、过账日期并发货过账https://www.cnblogs.com/SAPmatinal/p/11181864.html