[BAPI]使用BAPI_GOODSMVT_CREATE創建委外訂單(subcontract)的物料移動憑證


下面介紹一下使用bapi BAPI_GOODSMVT_CREATE為委外訂單創建物料移動憑證。

例子代碼:

*&---------------------------------------------------------------------*
*& Report YTEST_SUBCONTRACT_MIGO
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ytest_subcontract_migo.

DATA:lt_return  TYPE STANDARD TABLE OF  bapiret2 WITH HEADER LINE,
     l_doc      TYPE mseg-mblnr,
     l_year     TYPE mseg-mjahr,
     lt_item    TYPE STANDARD TABLE OF bapi2017_gm_item_create WITH HEADER LINE,
     lwa_header TYPE bapi2017_gm_head_01,
     lwa_code   TYPE bapi2017_gm_code.
DATA:l_line_id    TYPE mseg-line_id    VALUE '000000',
     l_parent_id  TYPE mseg-parent_id  VALUE '000000',
     l_line_depth TYPE mseg-line_depth VALUE '00'.

lwa_code-gm_code = '01' .  "MB01

lwa_header-pstng_date = sy-datum.        "憑證中的過帳日期
lwa_header-doc_date   = sy-datum.        "憑證中的憑證日期
lwa_header-pr_uname   = sy-uname.        "用戶名
lwa_header-ref_doc_no = '123456'.        "參考訂單
lwa_header-header_txt = 'Header text'.   "抬頭文本


*   物料
lt_item-material   = '000000410000000043'.
* 工廠
lt_item-plant      = '1286'.
* 批次號
lt_item-batch      = '1808031000'.
* 移動類型
lt_item-move_type  = '101'.
* 庫存地點
lt_item-stge_loc   = '1103'.
* 基本單位數量
lt_item-entry_qnt  =  57040.
* 輸入單位
lt_item-entry_uom  = 'KG'.
* 訂單單位數量
lt_item-po_pr_qnt  = 57040.
* 訂單價格單位(采購)
lt_item-orderpr_un = 'KG'.
* 采購訂單號
lt_item-po_number  =  4400000011.
* 采購憑證的項目編號
lt_item-po_item    = '00010'.
lt_item-mvt_ind    = 'B'.
* 憑證行的唯一標識
l_line_id          = l_line_id + 1.
l_parent_id        = l_line_id.
lt_item-line_id    = l_line_id.
APPEND lt_item.

CLEAR:lt_item.

lt_item-move_type = '543'.

* 物料編號
lt_item-material = '000000410000000044'.
* 工廠
lt_item-plant = '1286'.

lt_item-spec_stock = 'O'.
* 批次號
lt_item-batch     = '0000000004'. 
* 數量
lt_item-entry_qnt = 3600.
* 基本計量單位
lt_item-entry_uom = 'KG'.
* 上一行的識別碼
lt_item-parent_id = l_parent_id.
* 憑證行的唯一標識
l_line_id = l_line_id + 1.
lt_item-line_id = l_line_id.
* 憑證中行層次結構級別
l_line_depth = '01'.
lt_item-line_depth = l_line_depth.
APPEND lt_item.

CALL FUNCTION 'BAPI_GOODSMVT_CREATE'
  EXPORTING
    goodsmvt_header  = lwa_header
    goodsmvt_code    = lwa_code
*   TESTRUN          = ' '
*   GOODSMVT_REF_EWM =
*   GOODSMVT_PRINT_CTRL           =
  IMPORTING
*   GOODSMVT_HEADRET =
    materialdocument = l_doc
    matdocumentyear  = l_year
  TABLES
    goodsmvt_item    = lt_item
    return           = lt_return.
LOOP AT lt_return WHERE type CA 'AEX'.
  EXIT.
ENDLOOP.
IF sy-subrc = 0.
  CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
  WRITE:'Failed'.
ELSE.
  CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
    EXPORTING
      wait = 'X'.
  WRITE:'物料憑證號:', l_doc.
ENDIF.

代碼不復雜,需要注意的是字段line_id,parent_id,line_depth要填寫正確,

line_id是用來唯一標識行項目的,委外行要正確制定上層行項目ID,也就是把上層行項目的line_ID填到委外行的parent_ID字段中,line_depth也要按層次填入01...

如果行項目字段填寫不正確有時會出現M7 387錯誤。

委外訂單物料移動憑證創建成功后,通過MIGO查看一下:

代碼中委外行項目上的批次號,一定是系統中存在的批次,要不然也會報錯,如下

M7 076的錯誤:“這種物料的特殊庫存 O 0000000005 0010000003 000000410000000044不存在”

以上。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM