【Demo】改变SO项目状态并取消拒绝原因实现

销售订单审批状态配置的数据表有三级(转自:博客链接):

  • 状态参数文件的数据表是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.

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SAP剑客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值