Some related transaction codes:
MB01 Goods movement by purchase order
MB31 Goods movement by production order
MB1A Goods Pickup (Work Order Return
MB1B transfer posting
MB1C other receipts
MB11 Goods movement
MB04 Post-Adjustment for “Material Supply” Consumption
Some related mobile logos:
Goods movement without reference (null)
B Goods movement by purchase order
F Goods movement related to production order
L Goods movement on delivery notification
K Goods Movement for Kanban Demand (WM – Internal only)
O “Supply Material” Subsequent Adjustments to Consumption
Subsequent adjustments to the W scale/product unit material
1. Transfer order (goods movement) ↓
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 *"---------------------------------------------- ----------------------- *Input table data: ZMES_TORDER_REQ_I (table structure) * PSTNG_DATE type BUDAT posting date in document * MATERIAL MATNR material number * PLANT WERKS_D CHAR factory * MOVE_PLANT UMWRK receiving/shipping plant * STGE_LOC LGORT_D stock location * MOVE_STLOC UMLGO Receipt/Shipment Stock Location * ENTRY_QNT ERFMG Quantity in input units * BATCH CHARG_D batch number *"---------------------------------------------- ----------------------- 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. "The document date in the document goodsmvt_header-pr_uname = sy-datum. "username LOOP AT zmes_torder_req_i INTO req_i. MOVE-CORRESPONDING req_i TO itab. goodsmvt_header-pstng_date = req_i-pstng_date. "The posting date in the voucher IF req_i-plant = req_i-move_plant. itab-move_type = '311'. "Move Type (Stock Location <-> Stock Location) ELSE. * itab-move_type = '301'. "Move Type (Factory<->Factory) 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.
2. Work order delivery ↓
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 *"---------------------------------------------- ----------------------- * Input table: ZMES_ORD_REQ_I (table structure) * PLANT WERKS_D factory * ORDERID AUFNR order number * MATERIAL MATNR material number * ENTRY_QNT ERFMG Quantity in input units * STGE_LOC LGORT_D stock location *"---------------------------------------------- ----------------------- 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. "The document date in the document goodsmvt_header-pstng_date = sy-datum. "posting date in the document goodsmvt_header-pr_uname = sy-datum. "username loop at zmes_ord_req_i into req_i. move-CORRESPONDING req_i to itab. itab-move_type = '261'. "Move Type (Inventory Management) append itab. clear itab. end loop. 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. end loop. call function 'BAPI_TRANSACTION_ROLLBACK' . else. call function 'BAPI_TRANSACTION_COMMIT' exporting wait = 'X'. rstype = 'S'. o_mblnr = mat_doc. endif. endfunction.
3. Work order return ↓
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 *"---------------------------------------------- ----------------------- * Input table: ZMES_RT_ORDER_I (table structure) * PLANT WERKS_D factory * ORDERID AUFNR order number * MATERIAL MATNR material number * RESERV_NO RSNUM number of reservation/related requirement * RES_ITEM RSPOS Reservation/Requirement Item Number * ENTRY_QNT ERFMG Quantity in input units * MOVE_REAS MB_GRBEW move reason * STGE_LOC LGORT_D stock location * BATCH CHARG_D batch number *"---------------------------------------------- ----------------------- 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. "The document date in the document goodsmvt_header-pstng_date = sy-datum. "posting date in the document goodsmvt_header-pr_uname = sy-datum. "username loop at zmes_rt_order_i into order_i. move-corresponding order_i to itab. itab-move_type = '262'. "Move Type (Inventory Management) append itab. clear itab. end loop. 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. end loop. call function 'BAPI_TRANSACTION_ROLLBACK' . else. call function 'BAPI_TRANSACTION_COMMIT' exporting wait = 'X'. rstype = 'S'. o_mblnr = mat_doc. endif. endfunction.
4. Work order storage ↓
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 *"---------------------------------------------- ----------------------- *Input table: ZMES_ORDER_IN_I (table structure) * PLANT WERKS_D factory * ORDERID AUFNR order number * ENTRY_QNT ERFMG Quantity in input units * STGE_LOC LGORT_D stock location * BATCH CHARG_D batch number *"---------------------------------------------- ----------------------- 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. "The document date in the document header-pstng_date = sy-datum. "posting date in the document header-pr_uname = sy-datum. "username code-gm_code = '01'. LOOP AT zmes_order_in_i INTO order_in. MOVE-CORRESPONDING order_in TO itab. itab-move_type = '101'. "Movement type itab-mvt_ind = 'F'. "Mobile ID 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. END FUNCTION. ENDFUNCTION.
5. PO returns ↓
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 *"---------------------------------------------- ----------------------- * Input table: ZMES_PO_STOCK_I (table structure) * MOVE_TYPE BWART move type (inventory management) * PO_NUMBER BSTNR Purchase order number * PO_ITEM EBELP The item number of the purchasing document * PLANT WERKS_D factory * MATERIAL MATNR material number * ENTRY_QNT ERFMG Quantity in input units * STGE_LOC LGORT_D stock location * MOVE_REAS MB_GRBEW move reason * REF_DOC MBLNR material document number * REF_DOC_IT LFPOS reference document item *"---------------------------------------------- ----------------------- 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. "The document date in the document header-pstng_date = sy-datum. "posting date in the voucher header-pr_uname = sy-datum. "username LOOP AT zmes_po_stock_i INTO stock_i. MOVE-CORRESPONDING stock_i TO itab. itab-mvt_ind = 'B'. "Mobile ID CASE stock_i-move_type. WHEN '102'. itab-move_reas = ''. "Move reason WHEN '122'. WHEN '161'. itab-move_type = '101'. "Movement type itab-ref_doc = ''. "material document itab-ref_doc_it = ''. "Material document item itab-move_reas = ''. "Move reason ENDCASE. APPEND itab. CLEAR itab. ENDLOOP. CALL FUNCTION 'BAPI_GOODSMVT_CREATE' EXPORTING goodsmvt_header = header goodsmvt_code = '01' "MB01 Goods movement by purchase order 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.
6. Receive goods ↓
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 *"---------------------------------------------- ----------------------- * Input table: ZMES_PO_IN (table structure) * REF_DOC_NO XBLNR Reference Document Number * PLANT WERKS_D factory * PO_NUMBER EBELN purchase document number * PO_ITEM EBELP The item number of the purchasing document * ETENS EETEN delivery schedule line counter * MATERIAL MATNR material number * STGE_LOC LGORT_D stock location * ENTRY_QNT ERFMG Quantity in input units * VENDOR ELIFN supplier account number * BATCH CHARG_D batch number *"---------------------------------------------- ----------------------- 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. "The document date in the document header-pstng_date = sy-datum. "posting date in the document header-pr_uname = sy-datum. "username header-ref_doc_no = zmes_po_in-ref_doc_no. "Outbound delivery note code-gm_code = '01'. "Assign transaction code 4500090063 for BAPI goods movement LOOP AT zmes_po_in INTO po_in. MOVE-CORRESPONDING po_in TO itab. itab-move_type = '101'. "Movement type itab-mvt_ind = 'B'. "Mobile ID 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.
7. IQC storage ↓
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 *"---------------------------------------------- ----------------------- * Input table: ZMES_PO_IQC_I (table structure) * PLANT WERKS_D factory * MATERIAL MATNR material number * ENTRY_QNT ERFMG Quantity in input units * STGE_LOC LGORT_D stock location * BATCH CHARG_D batch number *"---------------------------------------------- ----------------------- 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. "The document date in the document header-pstng_date = sy-datum. "posting date in the document header-pr_uname = sy-datum. "username LOOP AT zmes_po_iqc_i INTO iqc_in. MOVE-CORRESPONDING iqc_in TO itab. itab-move_type = '321'. "Movement type APPEND itab. CLEAR itab. ENDLOOP. CALL FUNCTION 'BAPI_GOODSMVT_CREATE' EXPORTING goodsmvt_header = header goodsmvt_code = '04' "Assign transaction code for BAPI goods movement (MB1B transfer posting) 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.
If there are incomplete or other errors, just leave a message in the comment area.