**目录**
**引言**
之前已发表过关于MIGO的创建及增强的文章
> MIGO:BAPI_GOODSMVT_CREATE创建及增强
>
> 斌将军,公众号:斌将军 [ MIGO 创建及增强
> ](https://mp.weixin.qq.com/s?__biz=Mzg5OTg3ODg2MQ==&mid=2247484229&idx=2&sn=daeb2c230648b44600c22fdf255b5218&chksm=c04dd9e7f73a50f12421f0fb0c075169ccc688a23d9a56d406cea018e445fa04c69ad6f35046#rd)
为方便各位快速完成MIGO相关的各种业务对BAPI的调用,现根据移动类型,将几种情况汇总,方便各位查阅
—
### 增强字段的传值-移动类型531
当需要传入增强字段时的代码示例
"--------------------@斌将军--------------------DATA:ls_imseg TYPE bapi_te_xmseg.DATA: ls_header TYPE bapi2017_gm_head_01, ls_mode TYPE bapi2017_gm_code, ls_goodsmvt_headret TYPE bapi2017_gm_head_ret, lt_goodsmvt_item TYPE STANDARD TABLE OF bapi2017_gm_item_create WITH HEADER LINE,* lt_goodsmvt_serialnumber TYPE STANDARD TABLE OF bapi2017_gm_serialnumber WITH HEADER LINE, lt_return TYPE STANDARD TABLE OF bapiret2 WITH HEADER LINE.
DATA:lv_message TYPE char200, l_line_id TYPE mseg-line_id VALUE '000000' lv_check TYPE char1.* 01:采购订单的收货* 02:生产订单的收货* 03:发货* 04:转移发布* 05:其他收货* 06:货物移动的逆转* 07:关于转包订单的后续调整
ls_header-pr_uname = sy-uname. "用户名ls_header-doc_date = '20220315'."gs_template1-bldat."LV_DATE. "凭证日期ls_header-pstng_date = '20220315'."gs_template1-budat."LV_DATE. "过账日期ls_header-header_txt = ''."gs_template1-id."LV_DATE. "抬头文本
ls_mode-gm_code = '05'.
lt_goodsmvt_item-material = '000000000000210103'."lt_goodsmvt_item-plant = '2000'."lt_goodsmvt_item-stge_loc = '2021'."存储地点lt_goodsmvt_item-move_type = '531'."移动类型lt_goodsmvt_item-entry_qnt = '1'."以录入项单位表示的数量lt_goodsmvt_item-entry_uom = 'KPC'."单位lt_goodsmvt_item-orderid = '000100000349'."订单号* 凭证行的唯一标识l_line_id = l_line_id + 1.lt_goodsmvt_item-line_id = l_line_id.APPEND lt_goodsmvt_item.
CLEAR:ls_imseg.ls_imseg-matdoc_itm = l_line_id.ls_imseg-zline = lwa_pcsx-zline.
CLEAR:ls_exte.ls_exte-structure = 'BAPI_TE_XMSEG'.ls_exte-valuepart1 = ls_imseg.APPEND ls_exte TO lt_exte.
CALL FUNCTION 'BAPI_GOODSMVT_CREATE' EXPORTING goodsmvt_header = ls_header goodsmvt_code = ls_mode IMPORTING goodsmvt_headret = ls_goodsmvt_headret TABLES goodsmvt_item = lt_goodsmvt_item[] extensionin = lt_exte* goodsmvt_serialnumber = lt_goodsmvt_serialnumber[] return = lt_return.CLEAR:lv_message,lv_check.
LOOP AT lt_return WHERE type CA 'EAX'. lv_check = 'E'. CONCATENATE lv_message lt_return-message INTO lv_message. CLEAR lt_return.ENDLOOP."BAPI调用成功IF lv_check = 'E'. CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.ELSE. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = 'X'.ENDIF."--------------------@斌将军--------------------
—
### 采购退货-移动类型161
退货采购订单,执行101,生成161移动类型行项目
MIGO收货
代码要按照MIGO传值101移动类型,BAPI会自动产生161移动类型
"--------------------@斌将军--------------------ls_mode-gm_code = '01'.
CLEAR:ls_goodsmvt_item.ls_goodsmvt_item-po_number = '4100001418'."采购订单ls_goodsmvt_item-po_item = '00010'."采购订单行项目ls_goodsmvt_item-move_type = '101'."移动类型ls_goodsmvt_item-mvt_ind = 'B'. "移动标识ls_goodsmvt_item-material = '000000010000000002'."物料ls_goodsmvt_item-plant = '1011'."工厂ls_goodsmvt_item-stge_loc = '1001'."存储地点ls_goodsmvt_item-entry_qnt = '1'."数量ls_goodsmvt_item-entry_uom = 'EA'."单位ls_goodsmvt_item-batch = 'A'."批次APPEND ls_goodsmvt_item TO lt_goodsmvt_item."--------------------@斌将军--------------------—
### 委外加工-移动类型543
委外加工,物料首层移动类型101,子层级移动类型543
MIGO收货
代码要按照MIGO传值101移动类型,并将子层级物料也作为行项目,且移动类型543,此处注意不要传入虚拟件的行
"--------------------@斌将军--------------------ls_mode-gm_code = '01'.
lv_line_id = lv_line_id + 1.
CLEAR:ls_goodsmvt_item.ls_goodsmvt_item-line_id = lv_line_id."凭证行的唯一标识 0001ls_goodsmvt_item-move_type = '101'."移动类型ls_goodsmvt_item-mvt_ind = 'B'. "移动标识ls_goodsmvt_item-po_number = '4600000020'."采购订单ls_goodsmvt_item-po_item = '00010'."采购订单行项目ls_goodsmvt_item-material = '000000010000000002'."物料ls_goodsmvt_item-plant = '1011'."工厂ls_goodsmvt_item-stge_loc = '1001'."存储地点ls_goodsmvt_item-entry_qnt = '1'."数量ls_goodsmvt_item-entry_uom = 'EA'."单位ls_goodsmvt_item-batch = 'A'."批次APPEND ls_goodsmvt_item TO lt_goodsmvt_item.
CLEAR:ls_goodsmvt_item.ls_goodsmvt_item-parent_id = lv_line_id."父行标识 0001lv_line_id = lv_line_id + 1.ls_goodsmvt_item-line_id = lv_line_id."凭证行的唯一标识 0002ls_goodsmvt_item-move_type = '543'."移动类型ls_goodsmvt_item-mvt_ind = 'O'. "移动标识ls_goodsmvt_item-material = '000000010000000003'."物料ls_goodsmvt_item-plant = '1011'."工厂ls_goodsmvt_item-entry_qnt = '1'."数量ls_goodsmvt_item-entry_uom = 'EA'."单位ls_goodsmvt_item-batch = 'A'."批次APPEND ls_goodsmvt_item TO lt_goodsmvt_item."--------------------@斌将军--------------------—
### 传输过账-移动类型411/413/415
传输过账举例
前台如图
在BAPI传值时,注意转出和转入的参数,不要传反
"--------------------@斌将军--------------------ls_goodsmvt_code-gm_code = '04'.
IF p_wa_upload-bwart = '413' AND p_wa_upload-sobkz = 'E'."销售订单到销售订单 ls_goodsmvt_item-val_sales_ord = p_wa_upload-vbeln."从销售订单 ls_goodsmvt_item-val_s_ord_item = p_wa_upload-posnr. ls_goodsmvt_item-sales_ord = p_wa_upload-d_vbeln."到销售订单 ls_goodsmvt_item-s_ord_item = p_wa_upload-d_posnr.ELSEIF p_wa_upload-bwart = '415' AND p_wa_upload-sobkz = 'Q'."项目转项目 ls_goodsmvt_item-val_wbs_elem = p_wa_upload-posid."从WBS ls_goodsmvt_item-wbs_elem = p_wa_upload-d_posid."到WBSELSEIF p_wa_upload-bwart = '411' AND p_wa_upload-sobkz = 'E'."单转非限制 ls_goodsmvt_item-val_sales_ord = p_wa_upload-vbeln. ls_goodsmvt_item-val_s_ord_item = p_wa_upload-posnr.ELSEIF p_wa_upload-bwart = '411' AND p_wa_upload-sobkz = 'Q'."项目转非限制 ls_goodsmvt_item-val_wbs_elem = p_wa_upload-posid.ENDIF."--------------------@斌将军--------------------