销售订单审批状态配置的数据表有三级(转自:博客链接):
- 状态参数文件的数据表是TJ20,对应的语言描述表TJ20T;
- 用户状态条目的数据表是TJ30,对应的语言描述表TJ30T,注意字段TJ30-ESTAT(用户状态)是条目的自增长值,不可以编辑,格式“Exxx”,例如E0001、E0002;
- 用户状态控制的数据表是TJ31,字段MODKZ存放编辑标志,1为允许、2为允许但警告、3为禁止。
下面的Demo的作用是改变审批状态,同时取消行项目拒绝原因。
1、更新审批状态
data: ls_objnr type jsto-objnr.
clear: ls_objnr.
ls_objnr = 'VB' && vbap-vbeln && vbap-posnr.
call function 'I_CHANGE_STATUS'
exporting
objnr = ls_objnr
estat_inactive = 'E0002'
estat_active = 'E0004'
stsma = 'ZSD001'
exceptions
cannot_update = 1
others = 2.
这里要是状态没有把控到位则会出现Dump。
2、取消拒绝原因
perform change_so using vbap-vbeln vbap-posnr
changing lv_flag.
if lv_flag = 'S'.
"取消成功
elseif lv_flag = 'E'.
"取消失败
endif.
form change_so using p_vbeln p_posnr
changing p_flag.
data: l_vbeln type bapivbeln-vbeln,
l_headx type bapisdh1x,
l_ret type table of bapiret2 with header line,
l_item type table of bapisditm with header line,
l_itemx type table of bapisditmx with header line.
refresh:l_item,l_itemx,l_ret.
l_headx-updateflag = 'U'.
l_item-itm_number = p_posnr.
l_item-reason_rej = ''.
append l_item. clear l_item.
l_itemx-itm_number = p_posnr.
l_itemx-updateflag = 'U'.
l_itemx-reason_rej = 'X'.
append l_itemx. clear l_itemx.
call function 'BAPI_SALESORDER_CHANGE'
exporting
salesdocument = p_vbeln
order_header_inx = l_headx
tables
return = l_ret
order_item_in = l_item
order_item_inx = l_itemx.
loop at l_ret where type ca 'AEX'.
p_flag = 'E'.
endloop.
if sy-subrc <> 0.
call function 'BAPI_TRANSACTION_COMMIT'
exporting
wait = 'X'.
p_flag = 'S'.
else.
call function 'BAPI_TRANSACTION_ROLLBACK'.
endif.
endform.