需求:


实现:
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.工单修改完成之后,状态需要重新下达;
1000

被折叠的 条评论
为什么被折叠?



