SAP ABAP 交货冲销(删除dn/删除dn行项目)BAPI_OUTB_DELIVERY_CHANGE
DATA:lt_lips TYPE TABLE OF lips WITH HEADER LINE,
ls_lips TYPE lips,
ls_header_data LIKE bapiobdlvhdrchg,
ls_header_control LIKE bapiobdlvhdrctrlchg,
lt_return LIKE TABLE OF bapiret2,
ls_return LIKE bapiret2,
ls_item_data LIKE bapiobdlvitemchg,
lt_item_data LIKE TABLE OF bapiobdlvitemchg,
ls_item_spl LIKE /spe/bapiobdlvitemchg,
lt_item_spl TYPE TABLE OF /spe/bapiobdlvitemchg,
ls_techn_control LIKE bapidlvcontrol,
ls_item_control LIKE bapiobdlvitemctrlchg,
lt_item_control LIKE TABLE OF bapiobdlvitemctrlchg.
SELECT * " 获取退货dn的行项目数据
INTO CORRESPONDING FIELDS OF TABLE lt_lips
FROM lips
WHERE vbeln = "交货号.
LOOP AT LT_LIPS INTO DATA(LS_LIPS).
ls_item_spl-deliv_numb = ls_lips-vbeln .
ls_item_spl-deliv_item = ls_lips-posnr .
ls_item_spl-stge_loc = ls_lips-lgort.
APPEND ls_item_spl TO lt_item_spl.
CLEAR:ls_item_spl.
ls_item_data-deliv_numb = ls_lips-vbeln .
ls_item_data-deliv_item = ls_lips-posnr .
ls_item_data-batch = ls_lips-charg.
ls_item_data-dlv_qty = ls_lips-lfimg .
ls_item_data-dlv_qty_imunit = ls_lips-lgmng.
ls_item_data-fact_unit_nom = ls_lips-umvkz.
ls_item_data-fact_unit_denom = ls_lips-umvkn .
ls_item_data-conv_fact = ls_lips-umrev.
APPEND ls_item_data TO lt_item_data.
CLEAR:ls_item_data.
ls_item_control-deliv_numb = ls_lips-vbeln.
ls_item_control-deliv_item = ls_lips-posnr.
ls_item_control-chg_delqty = 'X'.
ls_item_control-volume_flg = 'X'.
ls_item_control-del_item = 'X'. "删除dn行项目
APPEND ls_item_control TO lt_item_control.
CLEAR:ls_item_control .
ENDLOOP.
ls_header_data-deliv_numb = u_vbeln.
ls_header_control-deliv_numb = u_vbeln.
ls_header_control-dlv_del = 'X'."删除整个dn
CALL FUNCTION 'BAPI_OUTB_DELIVERY_CHANGE' "修改dn
EXPORTING
header_data = ls_header_data
header_control = ls_header_control
delivery = "交货号
TABLES
item_data = lt_item_data
item_control = lt_item_control
return = lt_return
item_data_spl = lt_item_spl.
LOOP AT lt_return INTO ls_return WHERE type NA 'AEX'."如果不包含aex的错误 就代表成功
lv_type = 'S'.
EXIT.
ENDLOOP.
IF lt_return IS INITIAL ."为空也是代表成功
lv_type = 'S'.
ENDIF.
IF lv_type = 'S'.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = abap_true.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ENDIF.
注意1:删除整个dn/删除dn行项目或只冲销不删除,根据实际业务需求选择
注意2:交货冲销之后需要进行过账(整单删除不需要过账),过账参考:https://www.cnblogs.com/LikZ-WM/p/16531047.html