生产订单 CO02 物料清单重新展开(BOM主数据重读) && SM12的锁释放

需求:

在这里插入图片描述
在这里插入图片描述

实现:

 LOOP AT gt_alv ASSIGNING <fs_alv>.
        CLEAR: ls_orderdata, ls_orderdatax, ls_return, ls_read.

        SELECT SINGLE verid INTO ls_orderdata-prod_version FROM afpo WHERE aufnr = <fs_alv>-aufnr
        AND matnr = <fs_alv>-matnr. "生产版本
        ls_orderdata-explosion_date = <fs_alv>-ndat ."BOM展开日期
        ls_orderdata-explode_new = 'X' .

        ls_orderdatax-prod_version = 'X' .
        ls_orderdatax-explosion_date = 'X' .
        ls_orderdatax-routing = 'X' .

        CALL FUNCTION 'BAPI_PRODORD_CHANGE'
          EXPORTING
            "aufk~aufnr
            number           = <fs_alv>-aufnr "生产订单号
            orderdata        = ls_orderdata
            orderdatax       = ls_orderdatax
          IMPORTING
            return           = ls_return
            "重读主数据成功就会返回X,否则为空
            master_data_read = ls_read.
        IF ls_return-type = 'E' AND ls_read = '' .

          <fs_alv>-light = '@0A@'.
          <fs_alv>-msg = '读取主数据失败,请检查订单状态及投料报工入库记录。'.
          CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.

        ELSE .
          CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
            EXPORTING
              wait = 'X'.
          <fs_alv>-light = '@08@'.

          "释放锁
          DATA:
            lt_enq    TYPE STANDARD TABLE OF seqg3,
            ls_enq    TYPE                   seqg3,
            lv_subrct TYPE           sy-subrc,
            lv_garg   TYPE                   seqg3-garg.

          CLEAR: ls_enq, lt_enq[], lv_subrct.

          lv_garg = sy-mandt && <fs_alv>-aufnr.

          CALL FUNCTION 'ENQUEUE_READ'
            EXPORTING
              gclient               = sy-mandt
              garg                  = lv_garg
              guname                = sy-uname
            TABLES
              enq                   = lt_enq
            EXCEPTIONS
              communication_failure = 1
              system_failure        = 2
              OTHERS                = 3.
          IF sy-subrc = 0.
            CALL FUNCTION 'ENQUE_DELETE'
              EXPORTING
                check_upd_requests = 1
              IMPORTING
                subrc              = lv_subrct
              TABLES
                enq                = lt_enq.
          ENDIF.


          CLEAR: gs_bapi_order_key, gt_bapi_order_key[], gt_order_return, gt_order_return[].

          gs_bapi_order_key-order_number = <fs_alv>-aufnr.
          APPEND gs_bapi_order_key TO gt_bapi_order_key.

          CALL FUNCTION 'BAPI_PRODORD_RELEASE'
            TABLES
              orders        = gt_bapi_order_key
              detail_return = gt_order_return.

          READ TABLE gt_order_return WITH KEY type = 'E'.
          IF sy-subrc <> 0.
            CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
              EXPORTING
                wait = 'X'.
            <fs_alv>-light = '@08@'.
            <fs_alv>-msg = ''.
          ELSE.
            CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
            <fs_alv>-light = '@0A@'.
            <fs_alv>-msg = '生产订单下达失败:' && gt_order_return-message.
          ENDIF.
        ENDIF .

      ENDLOOP.

TIPS:

1.工单修改提交之后,SM12会存在锁记录,通过DEQUEUE_并不能释放

所以这里使用ENQUE_DELETE释放锁

2.工单修改完成之后,状态需要重新下达;

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值