code-gm_code取值:
01 MB01 按采購訂單的貨物移動
02 MB31 按生產訂單的貨物移動
03 MB1A 貨物提取(工單退料
04 MB1B 轉移過帳
05 MB1C 其他收貨
06 MB11 貨物移動
07 MB04 "物料供應"消耗的事后調整
itab-mvt_ind = 'B'. "移動標識
無參考的貨物移動(空)
B 按采購訂單的貨物移動
F 有關生產單的貨物移動
L 有關交貨通知的貨物移動
K 看板需求的貨物移動(WM-僅限內部)
O "提供物料"消耗的后續調整
W 比例的后續調整/產品單位物料
下 面 代 碼 都 已 封 裝 為 RFC
調撥單(貨物移動)
FUNCTION zfunction. *"---------------------------------------------------------------------- *"*"Local interface: *" EXPORTING *" VALUE(RSTYPE) TYPE XFELD *" VALUE(RSMESG) TYPE STRING *" VALUE(O_MBLNR) TYPE MBLNR *" TABLES *" ZMES_TORDER_REQ_I STRUCTURE ZMES_TORDER_REQ_I *"---------------------------------------------------------------------- *輸入表數據:ZMES_TORDER_REQ_I(表結構) * PSTNG_DATE type BUDAT 憑證中的過帳日期 * MATERIAL MATNR 物料號 * PLANT WERKS_D CHAR 工廠 * MOVE_PLANT UMWRK 收貨/發貨工廠 * STGE_LOC LGORT_D 庫存地點 * MOVE_STLOC UMLGO 收貨/發貨庫存地點 * ENTRY_QNT ERFMG 以輸入單位計的數量 * BATCH CHARG_D 批號 *"---------------------------------------------------------------------- DATA:goodsmvt_header LIKE bapi2017_gm_head_01, itab TYPE TABLE OF bapi2017_gm_item_create WITH HEADER LINE, return LIKE TABLE OF bapiret2 WITH HEADER LINE, mat_doc LIKE bapi2017_gm_head_ret-mat_doc, req_i TYPE zmes_torder_req_i. CLEAR:goodsmvt_header. goodsmvt_header-doc_date = sy-datum. "憑證中的憑證日期 goodsmvt_header-pr_uname = sy-datum. "用戶名 LOOP AT zmes_torder_req_i INTO req_i. MOVE-CORRESPONDING req_i TO itab. goodsmvt_header-pstng_date = req_i-pstng_date. "憑證中的過帳日期 IF req_i-plant = req_i-move_plant. itab-move_type = '311'. "移動類型(庫儲存地點<->庫存地點) ELSE. * itab-move_type = '301'. "移動類型(工廠<->工廠) ENDIF. APPEND itab. CLEAR itab. ENDLOOP. CALL FUNCTION 'BAPI_GOODSMVT_CREATE' EXPORTING goodsmvt_header = goodsmvt_header goodsmvt_code = '04' IMPORTING materialdocument = mat_doc TABLES goodsmvt_item = itab return = return. READ TABLE return WITH KEY type = 'E'. IF sy-subrc = 0. rstype = 'E'. LOOP AT return WHERE type = 'E' . CONCATENATE rsmesg return-message ',' INTO rsmesg. ENDLOOP. CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK' . ELSE. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = 'X'. rstype = 'S'. o_mblnr = mat_doc. ENDIF. ENDFUNCTION.
工單發料
function zfunction. *"---------------------------------------------------------------------- *"*"Local interface: *" EXPORTING *" VALUE(RSTYPE) TYPE XFELD *" VALUE(RSMESG) TYPE STRING *" VALUE(O_MBLNR) TYPE MBLNR *" TABLES *" ZMES_ORD_REQ_I STRUCTURE ZMES_ORD_REQ_I *"---------------------------------------------------------------------- *輸入表:ZMES_ORD_REQ_I(表結構) * PLANT WERKS_D 工廠 * ORDERID AUFNR 訂單號 * MATERIAL MATNR 物料號 * ENTRY_QNT ERFMG 以輸入單位計的數量 * STGE_LOC LGORT_D 庫存地點 *"---------------------------------------------------------------------- data:goodsmvt_header like bapi2017_gm_head_01, itab type table of bapi2017_gm_item_create with header line, return like table of bapiret2 with header line, mat_doc like bapi2017_gm_head_ret-mat_doc, req_i type zmes_ord_req_i. clear:goodsmvt_header. goodsmvt_header-doc_date = sy-datum. "憑證中的憑證日期 goodsmvt_header-pstng_date = sy-datum. "憑證中的過帳日期 goodsmvt_header-pr_uname = sy-datum. "用戶名 loop at zmes_ord_req_i into req_i. move-CORRESPONDING req_i to itab. itab-move_type = '261'. "移動類型(庫存管理) append itab. clear itab. endloop. call function 'BAPI_GOODSMVT_CREATE' exporting goodsmvt_header = goodsmvt_header goodsmvt_code = '03' importing materialdocument = mat_doc tables goodsmvt_item = itab return = return. read table return with key type = 'E'. if sy-subrc = 0. rstype = 'E'. loop at return where type = 'E' . concatenate rsmesg return-message ',' into rsmesg. endloop. call function 'BAPI_TRANSACTION_ROLLBACK' . else. call function 'BAPI_TRANSACTION_COMMIT' exporting wait = 'X'. rstype = 'S'. o_mblnr = mat_doc. endif. endfunction.
工單退料
function zfunction. *"---------------------------------------------------------------------- *"*"Local interface: *" EXPORTING *" VALUE(RSTYPE) TYPE XFELD *" VALUE(RSMESG) TYPE STRING *" VALUE(O_MBLNR) TYPE MBLNR *" TABLES *" ZMES_RT_ORDER_I STRUCTURE ZMES_RT_ORDER_I *"---------------------------------------------------------------------- *輸入表:ZMES_RT_ORDER_I(表結構) * PLANT WERKS_D 工廠 * ORDERID AUFNR 訂單號 * MATERIAL MATNR 物料號 * RESERV_NO RSNUM 預留/相關需求的編號 * RES_ITEM RSPOS 預留/相關需求的項目編號 * ENTRY_QNT ERFMG 以輸入單位計的數量 * MOVE_REAS MB_GRBEW 移動原因 * STGE_LOC LGORT_D 庫存地點 * BATCH CHARG_D 批號 *"---------------------------------------------------------------------- data:goodsmvt_header like bapi2017_gm_head_01, itab type table of bapi2017_gm_item_create with header line, return like table of bapiret2 with header line, mat_doc like bapi2017_gm_head_ret-mat_doc, order_i type zmes_rt_order_i. clear:goodsmvt_header. goodsmvt_header-doc_date = sy-datum. "憑證中的憑證日期 goodsmvt_header-pstng_date = sy-datum. "憑證中的過帳日期 goodsmvt_header-pr_uname = sy-datum. "用戶名 loop at zmes_rt_order_i into order_i. move-corresponding order_i to itab. itab-move_type = '262'. "移動類型(庫存管理) append itab. clear itab. endloop. call function 'BAPI_GOODSMVT_CREATE' exporting goodsmvt_header = goodsmvt_header goodsmvt_code = '03' importing materialdocument = mat_doc tables goodsmvt_item = itab return = return. read table return with key type = 'E'. if sy-subrc = 0. rstype = 'E'. loop at return where type = 'E' . concatenate rsmesg return-message ',' into rsmesg. endloop. call function 'BAPI_TRANSACTION_ROLLBACK' . else. call function 'BAPI_TRANSACTION_COMMIT' exporting wait = 'X'. rstype = 'S'. o_mblnr = mat_doc. endif. endfunction.
工單入庫
FUNCTION zfunction. FUNCTION zmes_order_in. *"---------------------------------------------------------------------- *"*"Local interface: *" EXPORTING *" VALUE(RSTYPE) TYPE XFELD *" VALUE(RSMESG) TYPE STRING *" VALUE(O_MBLNR) TYPE MBLNR *" TABLES *" ZMES_ORDER_IN_I STRUCTURE ZMES_ORDER_IN_I *"---------------------------------------------------------------------- *輸入表:ZMES_ORDER_IN_I(表結構) * PLANT WERKS_D 工廠 * ORDERID AUFNR 訂單號 * ENTRY_QNT ERFMG 以輸入單位計的數量 * STGE_LOC LGORT_D 庫存地點 * BATCH CHARG_D 批號 *"---------------------------------------------------------------------- DATA:header LIKE bapi2017_gm_head_01, code LIKE bapi2017_gm_code, itab TYPE TABLE OF bapi2017_gm_item_create WITH HEADER LINE, return LIKE TABLE OF bapiret2 WITH HEADER LINE, mat_doc LIKE bapi2017_gm_head_ret-mat_doc, goodsmvt_serialnumber TYPE TABLE OF bapi2017_gm_serialnumber, order_in TYPE zmes_order_in_i. CLEAR:header,code. header-doc_date = sy-datum. "憑證中的憑證日期 header-pstng_date = sy-datum. "憑證中的過帳日期 header-pr_uname = sy-datum. "用戶名 code-gm_code = '01'. LOOP AT zmes_order_in_i INTO order_in. MOVE-CORRESPONDING order_in TO itab. itab-move_type = '101'. "移動類型 itab-mvt_ind = 'F'. "移動標識 APPEND itab. CLEAR itab. ENDLOOP. CALL FUNCTION 'BAPI_GOODSMVT_CREATE' EXPORTING goodsmvt_header = header goodsmvt_code = code IMPORTING materialdocument = mat_doc TABLES goodsmvt_item = itab goodsmvt_serialnumber = goodsmvt_serialnumber return = return. READ TABLE return WITH KEY type = 'E'. IF sy-subrc = 0. rstype = 'E'. LOOP AT return WHERE type = 'E' . CONCATENATE rsmesg return-message ',' INTO rsmesg. ENDLOOP. CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK' . ELSE. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = 'X'. rstype = 'S'. o_mblnr = mat_doc. ENDIF. ENDFUNCTION. ENDFUNCTION.
PO退貨
FUNCTION zfunction. *"---------------------------------------------------------------------- *"*"Local interface: *" EXPORTING *" VALUE(RSTYPE) TYPE XFELD *" VALUE(RSMESG) TYPE STRING *" VALUE(O_MBLNR) TYPE MBLNR *" TABLES *" ZMES_PO_STOCK_I STRUCTURE ZMES_PO_STOCK_I *"---------------------------------------------------------------------- *輸入表:ZMES_PO_STOCK_I(表結構) * MOVE_TYPE BWART 移動類型(庫存管理) * PO_NUMBER BSTNR 采購訂單編號 * PO_ITEM EBELP 采購憑證的項目編號 * PLANT WERKS_D 工廠 * MATERIAL MATNR 物料號 * ENTRY_QNT ERFMG 以輸入單位計的數量 * STGE_LOC LGORT_D 庫存地點 * MOVE_REAS MB_GRBEW 移動原因 * REF_DOC MBLNR 物料憑證編號 * REF_DOC_IT LFPOS 參考憑證項目 *"---------------------------------------------------------------------- DATA:header LIKE bapi2017_gm_head_01, itab TYPE TABLE OF bapi2017_gm_item_create WITH HEADER LINE, return LIKE TABLE OF bapiret2 WITH HEADER LINE, mat_doc LIKE bapi2017_gm_head_ret-mat_doc, stock_i TYPE zmes_po_stock_i. CLEAR:header. header-doc_date = sy-datum. "憑證中的憑證日期 header-pstng_date = sy-datum. "憑證中的過帳日期 header-pr_uname = sy-datum. "用戶名 LOOP AT zmes_po_stock_i INTO stock_i. MOVE-CORRESPONDING stock_i TO itab. itab-mvt_ind = 'B'. "移動標識 CASE stock_i-move_type. WHEN '102'. itab-move_reas = ''. "移動原因 WHEN '122'. WHEN '161'. itab-move_type = '101'. "移動類型 itab-ref_doc = ''. "物料憑證 itab-ref_doc_it = ''. "物料憑證項目 itab-move_reas = ''. "移動原因 ENDCASE. APPEND itab. CLEAR itab. ENDLOOP. CALL FUNCTION 'BAPI_GOODSMVT_CREATE' EXPORTING goodsmvt_header = header goodsmvt_code = '01' "MB01 按采購訂單的貨物移動 IMPORTING materialdocument = mat_doc TABLES goodsmvt_item = itab return = return. READ TABLE return WITH KEY type = 'E'. IF sy-subrc = 0. rstype = 'E'. LOOP AT return WHERE type = 'E' . CONCATENATE rsmesg return-message ',' INTO rsmesg. ENDLOOP. CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK' . ELSE. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = 'X'. rstype = 'S'. o_mblnr = mat_doc. ENDIF. ENDFUNCTION.
收貨
FUNCTION zfunction. *"---------------------------------------------------------------------- *"*"Local interface: *" EXPORTING *" VALUE(RSTYPE) TYPE XFELD *" VALUE(RSMESG) TYPE STRING *" VALUE(O_MBLNR) TYPE MBLNR *" TABLES *" ZMES_PO_IN STRUCTURE ZMES_PO_IN *"---------------------------------------------------------------------- *輸入表:ZMES_PO_IN(表結構) * REF_DOC_NO XBLNR 參考憑證編號 * PLANT WERKS_D 工廠 * PO_NUMBER EBELN 采購憑證號 * PO_ITEM EBELP 采購憑證的項目編號 * ETENS EETEN 交貨計划行計數器 * MATERIAL MATNR 物料號 * STGE_LOC LGORT_D 庫存地點 * ENTRY_QNT ERFMG 以輸入單位計的數量 * VENDOR ELIFN 供應商帳戶號 * BATCH CHARG_D 批號 *"---------------------------------------------------------------------- DATA:header LIKE bapi2017_gm_head_01, code LIKE bapi2017_gm_code, itab TYPE TABLE OF bapi2017_gm_item_create WITH HEADER LINE, return LIKE TABLE OF bapiret2 WITH HEADER LINE, mat_doc LIKE bapi2017_gm_head_ret-mat_doc, po_in TYPE zmes_po_in. CLEAR:header,code. header-doc_date = sy-datum. "憑證中的憑證日期 header-pstng_date = sy-datum. "憑證中的過帳日期 header-pr_uname = sy-datum. "用戶名 header-ref_doc_no = zmes_po_in-ref_doc_no. "外向交貨單 code-gm_code = '01'. "為 BAPI 貨物移動分配事務代碼 4500090063 LOOP AT zmes_po_in INTO po_in. MOVE-CORRESPONDING po_in TO itab. itab-move_type = '101'. "移動類型 itab-mvt_ind = 'B'. "移動標識 APPEND itab. CLEAR itab. ENDLOOP. CALL FUNCTION 'BAPI_GOODSMVT_CREATE' EXPORTING goodsmvt_header = header goodsmvt_code = code IMPORTING materialdocument = mat_doc TABLES goodsmvt_item = itab return = return. READ TABLE return WITH KEY type = 'E'. IF sy-subrc = 0. rstype = 'E'. LOOP AT return WHERE type = 'E' . CONCATENATE rsmesg return-message ',' INTO rsmesg. ENDLOOP. CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK' . ELSE. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = 'X'. rstype = 'S'. o_mblnr = mat_doc. ENDIF. ENDFUNCTION.
IQC入庫
FUNCTION zfunction. *"---------------------------------------------------------------------- *"*"Local interface: *" EXPORTING *" VALUE(RSTYPE) TYPE XFELD *" VALUE(RSMESG) TYPE STRING *" VALUE(O_MBLNR) TYPE MBLNR *" TABLES *" ZMES_PO_IQC_I STRUCTURE ZMES_PO_IQC_I *"---------------------------------------------------------------------- *輸入表:ZMES_PO_IQC_I(表結構) * PLANT WERKS_D 工廠 * MATERIAL MATNR 物料號 * ENTRY_QNT ERFMG 以輸入單位計的數量 * STGE_LOC LGORT_D 庫存地點 * BATCH CHARG_D 批號 *"---------------------------------------------------------------------- DATA:header LIKE bapi2017_gm_head_01, itab TYPE TABLE OF bapi2017_gm_item_create WITH HEADER LINE, return LIKE TABLE OF bapiret2 WITH HEADER LINE, mat_doc LIKE bapi2017_gm_head_ret-mat_doc, goodsmvt_serialnumber TYPE TABLE OF bapi2017_gm_serialnumber, iqc_in TYPE zmes_po_iqc_i. CLEAR:header. header-doc_date = sy-datum. "憑證中的憑證日期 header-pstng_date = sy-datum. "憑證中的過帳日期 header-pr_uname = sy-datum. "用戶名 LOOP AT zmes_po_iqc_i INTO iqc_in. MOVE-CORRESPONDING iqc_in TO itab. itab-move_type = '321'. "移動類型 APPEND itab. CLEAR itab. ENDLOOP. CALL FUNCTION 'BAPI_GOODSMVT_CREATE' EXPORTING goodsmvt_header = header goodsmvt_code = '04' "為BAPI貨物移動分配事務代碼(MB1B 轉移過帳) IMPORTING materialdocument = mat_doc TABLES goodsmvt_item = itab goodsmvt_serialnumber = goodsmvt_serialnumber return = return. READ TABLE return WITH KEY type = 'E'. IF sy-subrc = 0. rstype = 'E'. LOOP AT return WHERE type = 'E' . CONCATENATE rsmesg return-message ',' INTO rsmesg. ENDLOOP. CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK' . ELSE. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = 'X'. rstype = 'S'. o_mblnr = mat_doc. ENDIF. ENDFUNCTION.