[英]BAPI_GOODSMVT_CREATE with multiple material numbers and same PP order?
據我所知,當您同時使用 BAPI_GOODSMVT_CREATE(通過循環或巧合)時,使用相同的材料編號會給您帶來有關鎖定 object 的錯誤(材料 XXXX 已被用戶 YYYY 鎖定)。
但是,據我所知,同時使用 BAPI_GOODSMVT_CREATE,但具有相同生產訂單的不同材料編號不會出錯。
問題
最近我發現一個關於 M3/897 的錯誤(物料 XXXX 的工廠數據被用戶 XXXX 鎖定)當我嘗試 GI 用於生產訂單時執行 BAPI_GOODSMVT_CREATE,通過並行處理,將不同的物料編號放入同一生產命令。
問題
所以,我問的是 BAPI_GOODSMVT_CREATE 的約束。
到目前為止我知道的是 -
A. 當您為不同的生產訂單放置相同的物料編號時,您不能同時為生產訂單 (Mvt 261) 發出 GI。
B.(我對此不確定)當您為同一生產訂單放置不同的物料編號時,您不能同時為生產訂單 (Mvt 261) 發出 GI。
兩者都對,還是只有 A 對? 經驗豐富的 ABAPer 或 MM 顧問的任何幫助將不勝感激!
要在循環中發布 GI,您需要在每次運行后進行提交,並顯式解鎖 object,否則您將獲得 PP 鎖。
試試這樣:
LOOP AT lt_orders ASSIGNING <fs>.
...
CALL FUNCTION 'BAPI_GOODSMVT_CREATE'
EXPORTING
goodsmvt_header = ls_header
goodsmvt_code = ls_code
IMPORTING
goodsmvt_headret = ls_headret
materialdocument = ls_retmtd
TABLES
goodsmvt_item = lt_item
return = lt_return.
IF line_exists( lt_return[ type = 'E' ] ).
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ELSE.
COMMIT WORK AND WAIT.
CALL FUNCTION 'DEQUEUE_ALL'.
ENDIF.
ENDLOOP.
在每次 BAPI 調用后始終使用帶有 WAIT 參數的 BAPI_TRANSACTION_COMMIT 或帶有相同參數的 COMMIT WORK。
GR 和隱式 GI 運動也可能存在棘手的問題,請參閱關於此的注釋369518 。
您可以使用此 FM - “ENQUE_READ2”在運行時檢查現有鎖的存在。
data: RAW_ENQ like LOCKSEDX_ENQ_TAB, SUBRC type SY-SUBRC, NUMBER type I.
clear : RAW_ENQ[], SUBRC, NUMBER.
add 1 to COUNTER.
call function 'ENQUE_READ2'
importing
SUBRC = SUBRC
NUMBER = NUMBER
tables
ENQ = RAW_ENQ.
但是如果你必須防止 GOODS mvt 失敗。 通常,您必須實施一些重新處理邏輯來存儲錯誤。
步驟是:捕獲錯誤 --> 存儲 bapi 信息或 header 文檔編號 --> 稍后重試
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.