簡體   English   中英

具有多個物料編號和相同 PP 訂單的 BAPI_GOODSMVT_CREATE?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM