ABAP采购订单针对行项目撤销问题2021-05-27

需求描述:SAP接收MRM接口数据创建采购申请,用户可能会通过同一个采购申请的不同的行项目创建不同的采购订单这种情况,MRM接口这时想针对行项目去进行撤销,先撤销采购订单相应行项目,撤销采购订单前,如果有审批标识先取消审批标识,然后再判断审批状态是否为待审批,如果是,则恢复审批状态为审批中,然后撤销采购申请相应的行项目。
问题描述:问题就出现在“撤销采购订单前,如果有审批标识先取消审批标识”。
调用BAPI:BAPI_PO_RESET_RELEASE取消审批标识有可能会造成采购订单被锁定,所以调用BAPI:BAPI_PO_CHANGE再去修改采购订单的状态会失败,提示“用户XXX正在更改采购订单xxx”。
解决方法:在取消采购订单审批标识后,给它强制解锁,反正是接口的用户锁定的。

CALL FUNCTION 'DEQUEUE_EMEKKOE'
  EXPORTING
    mode_ekko = 'E'
*   MODE_EKPO = 'E'
    mandt     = sy-mandt
    ebeln     = ls_order-headernumber.

如果不想强制解锁,可以采取先对该采购订单进行上锁,如果上锁不成功说明确实被锁了,继续对其上锁,直到上锁成功,再对其解锁。

DO.
  CALL FUNCTION 'ENQUEUE_EMEKKOE'
    EXPORTING
      mode_ekko      = 'E'
*     MODE_EKPO      = 'E'
      mandt          = sy-mandt
      ebeln          = ls_order-headernumber
    EXCEPTIONS
      foreign_lock   = 1
      system_failure = 2
      OTHERS         = 3.
  IF sy-subrc <> 0.
    CONTINUE.
  ELSE.
    CALL FUNCTION 'DEQUEUE_EMEKKOE'
      EXPORTING
        mode_ekko = 'E'
*       MODE_EKPO = 'E'
        mandt     = sy-mandt
        ebeln     = ls_order-headernumber.
    EXIT.
  ENDIF.
ENDDO.

接口过来的操作,不考虑上锁不成功的情况,何况上锁前的取消审批操作就可以规避这种情况了

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容