SAP货物移动BAPI BAPI_GOODSMVT_CREATE 详解
此函数重要参数给参,虽然S4已经都使用MIGO了,但是这个参数还是是根据老的功能进行实现的。
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 比例的后续调整/产品单位物料
入库/收货101
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'. "收货的话改为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 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.
退货
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 zmm1. data : goodsmvt_header type bapi2017_gm_head_01,
goodsmvt_code type bapi2017_gm_code,
goodsmvt_headret type bapi2017_gm_head_ret,
materialdocument type bapi2017_gm_head_ret-mat_doc,
matdocumentyear type bapi2017_gm_head_ret-doc_year,
gs_goodsmvt_item type bapi2017_gm_item_create,
gs_return type bapiret2,
bapi2017_gm_head_ret type bapi2017_gm_head_ret,
goodsmvt_item type standard table of bapi2017_gm_item_create,
return type standard table of bapiret2.
data : gt_return type standard table of bapiret2. 自己写写一下时间的参数 CLEAR bapi2017_gm_head_ret . REFRESH return . CALL FUNCTION 'BAPI_GOODSMVT_CANCEL' EXPORTING materialdocument = it_tbgz-mblnr matdocumentyear = it_tbgz-mjahr GOODSMVT_PSTNG_DATE = s_budat * GOODSMVT_PR_UNAME = * DOCUMENTHEADER_TEXT = IMPORTING goodsmvt_headret = bapi2017_gm_head_ret TABLES return = return * GOODSMVT_MATDOCITEM = . READ TABLE return WITH KEY type = 'E' TRANSPORTING NO FIELDS . IF sy-subrc <> 0 . CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = 'X' * IMPORTING * RETURN = . e_mblnr = bapi2017_gm_head_ret-mat_doc . e_mjahr = bapi2017_gm_head_ret-doc_year . e_succ = 'S' . e_message = '凭证反记账成功!' . ***更新后台表 ELSE . e_succ = 'E' . LOOP AT return ASSIGNING FIELD-SYMBOL(<fs_return>) WHERE type = 'E' OR type = 'A' OR type = 'I' . e_message = e_message && <fs_return>-message . ENDLOOP . . CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK' * IMPORTING * RETURN = . ENDIF . ENDFUNCTION.
其他参考https://www.cnblogs.com/freeandeasy/p/12212800.html
另外一个https://blog.csdn.net/hugh_lee/article/details/76240021#

浙公网安备 33010602011771号