1.删除销售订单的BAPI:BAPI_SALESORDER_CHANGE
- 销售订单更改/删除TCODE:VA02
具体示例代码如下:
"定义
data:lv_sd TYPE bapivbeln-vbeln,
ls_order_header_in TYPE bapisdh1,
ls_order_header_inx TYPE bapisdh1x,
lt_order_item_in TYPE STANDARD TABLE OF bapisditm,
lt_order_item_inx TYPE STANDARD TABLE OF bapisditmx,
ls_order_item_in TYPE bapisditm,
ls_order_item_inx TYPE bapisditmx.
DATA: lt_return TYPE STANDARD TABLE OF bapiret2,
ls_return TYPE bapiret2.
LOOP AT gt_sd ASSIGNING FIELD-SYMBOL(<fs_sd>)
GROUP BY ( key1 = <fs_sd>-vbeln )
ASSIGNING FIELD-SYMBOL(<fs_group>).
CLEAR: lv_sd,
ls_return,
ls_order_header_in,
ls_order_header_inx,
ls_order_item_in,
lt_order_item_in,
ls_order_item_inx,
lt_order_item_inx.
LOOP AT GROUP <fs_group> ASSIGNING FIELD-SYMBOL(<fs_line>) .
ls_order_item_in-itm_number = <fs_line>-posnr.
ls_order_item_in-reason_rej = 'Z2'. "关闭原因
APPEND ls_order_item_in TO lt_order_item_in.
ls_order_item_inx-itm_number = <fs_line>-posnr.
ls_order_item_inx-updateflag = 'U'.
ls_order_item_inx-reason_rej = 'X'.
APPEND ls_order_item_inx TO lt_order_item_inx.
ENDLOOP.
"Z3是删除,Z2 是更改,这是自定义的,跟BAPI无关
IF <fs_line>-zrule = 'Z3'.
lv_sd = <fs_line>-vbeln.
ls_order_header_inx-updateflag = 'D'.
CLEAR: lt_order_item_in, lt_order_item_inx.
ELSE.
lv_sd = <fs_line>-vbeln.
ls_order_header_inx-updateflag = 'U'.
ENDIF.
"赋值
CALL FUNCTION 'BAPI_SALESORDER_CHANGE'
EXPORTING
salesdocument = lv_sd
order_header_in = ls_order_header_in
order_header_inx = ls_order_header_inx
TABLES
return = lt_return
order_item_in = lt_order_item_in
order_item_inx = lt_order_item_inx.
"处理返回结果
IF line_exists( lt_return[ type = 'E' ] ) OR
line_exists( lt_return[ type = 'A' ] ).
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
cs_sd-light = icon_red_light.
cs_sd-mtype = 'E'.
LOOP AT lt_return INTO ls_return WHERE type = 'E' OR type = 'A' .
cs_sd-messg = |{ cs_sd-messg }/{ ls_return-message }|.
ENDLOOP.
SHIFT cs_sd-messg LEFT DELETING LEADING '/'.
ELSEIF line_exists( lt_return[ type = 'W' ] ).
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
cs_sd-light = icon_green_light.
cs_sd-mtype = 'W'.
LOOP AT lt_return INTO ls_return WHERE type = 'W'.
cs_sd-messg = |{ cs_sd-messg }/{ ls_return-message }|.
ENDLOOP.
IF iv_zrule = 'Z3'.
cs_sd-messg = |{ cs_sd-messg }/删除成功|.
ELSE.
cs_sd-messg = |{ cs_sd-messg }/关闭成功|.
ENDIF.
SHIFT cs_sd-messg LEFT DELETING LEADING '/'.
ELSEIF line_exists( lt_return[ type = 'S' ] ).
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
cs_sd-light = icon_green_light.
cs_sd-mtype = 'S'.
IF iv_zrule = 'Z3'.
cs_sd-messg = |{ cs_sd-messg }/删除成功|.
ELSE.
cs_sd-messg = |{ cs_sd-messg }/关闭成功|.
ENDIF.
SHIFT cs_sd-messg LEFT DELETING LEADING '/'.
ENDIF.