* 注意:发货过账后才能拒绝;只能对各个行项目进行拒绝,而不能按整个单子拒绝,因为:有的行项目是完全交货,有的不是。
* 完全交货的订单行项目会显示已完成,非完全交货的订单行项目会显示正在处理.已完全交货的行项目是不能被拒绝的。
data: order_header_in type bapisdh1,
lwa_order_header_inx type bapisdh1x,
lwa_return type bapiret2,
lit_return type table of bapiret2,
lit_order_item_in type table of bapisditm,
lwa_order_item_in type bapisditm,
lit_order_item_inx type table of bapisditmx,
lwa_order_item_inx type bapisditmx.
lwa_order_header_inx-updateflag = 'U'.
*---相应订单行项目状态改为拒绝
loop at lt_vbap.
clear: lit_order_item_in,lit_order_item_inx.
"process 行项目数据.
lwa_order_item_in-itm_number = lt_vbap-posnr.
lwa_order_item_in-reason_rej = 'Z1'.
append lwa_order_item_in to lit_order_item_in.
lwa_order_item_inx-itm_number = lt_vbap-posnr.
lwa_order_item_inx-updateflag = 'U'.
lwa_order_item_inx-reason_rej = 'X'.
append lwa_order_item_inx to lit_order_item_inx.
"call bapi
call function 'BAPI_SALESORDER_CHANGE'
exporting
salesdocument = lt_vbap-vbeln
order_header_in = order_header_in
order_header_inx = lwa_order_header_inx
tables
return = lit_return
order_item_in = lit_order_item_in
order_item_inx = lit_order_item_inx.
delete lit_return where type = 'S' or type = 'W' or type = 'I'.
if lit_return is initial.
"返回正确消息
call function 'BAPI_TRANSACTION_COMMIT'
exporting
wait = 'X'.
else.
if sy-subrc = 0.
call function 'BAPI_TRANSACTION_ROLLBACK' .
endif.
endif.
endloop.
评论