MIGO BAPI_GOODSMVT_CREATE创建及增强
1、MIGO过账BAPI新增字段
BAPI新增收货行号字段,保存外围系统的数据
1.1、MATDOC表新增收货行号

1.2、MSEG表新增收货行号

创建DDL视图用于扩展NSDM_E_MSEG

1.3、增强实施
BADI:MB_BAPI_GOODSMVT_CREATE
调用方法IF_EX_MB_BAPI_GOODSMVT_CREATE~EXTENSIONIN_TO_MATDOC
IMSEG结构中也要新增增强字段,用于传值

增强代码
"--------------------@斌将军--------------------
METHOD IF_EX_MB_BAPI_GOODSMVT_CREATE~EXTENSIONIN_TO_MATDOC. DATA:
c_lenstruc TYPE i VALUE 30,
wa_bapi_mb_header TYPE bapi_te_xmkpf,
wa_bapi_mb_item TYPE bapi_te_xmseg,
wa_extension_in TYPE bapiparex. FIELD-SYMBOLS:
<fs_imseg> TYPE imseg. CHECK NOT extension_in[] IS INITIAL. * Analyze IMSEG for document structure and assign LINE_IDs if necessary
CALL METHOD cl_mmim_line_id_manager=>analyze_mb_create
CHANGING
ct_imseg = ct_imseg[]
EXCEPTIONS
duplicate_line_id = 1
OTHERS = 2. LOOP AT extension_in INTO wa_extension_in.
CASE wa_extension_in-structure.
* extension of MKPF
WHEN 'BAPI_TE_XMKPF'.
MOVE wa_extension_in+c_lenstruc TO wa_bapi_mb_header.
MOVE-CORRESPONDING wa_bapi_mb_header TO cs_imkpf.
* extension of MSEG
WHEN 'BAPI_TE_XMSEG'.
MOVE wa_extension_in+c_lenstruc TO wa_bapi_mb_item.
READ TABLE ct_imseg
WITH KEY line_id = wa_bapi_mb_item-matdoc_itm
ASSIGNING <fs_imseg>.
IF sy-subrc EQ 0.
MOVE-CORRESPONDING wa_bapi_mb_item TO <fs_imseg>.
ENDIF.
ENDCASE.
ENDLOOP. ENDMETHOD.
"--------------------@斌将军--------------------
2、MIGO各情况代码示例
对应的gm_code取值:
* 01:采购订单的收货
* 02:生产订单的收货
* 03:发货
* 04:转移发布
* 05:其他收货
* 06:货物移动的逆转
* 07:关于转包订单的后续调整
当遇到移动类型不知道选择GOODSMVT_CODE对应的CODE时,可以通过移动类型查询T158B表和T158G,找到对应的CODE值
2.1、带增强字段的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. "--------------------@斌将军--------------------
2.2、采购退货-移动类型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.
"--------------------@斌将军--------------------
2.3、委外加工-移动类型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."凭证行的唯一标识 0001
ls_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."父行标识 0001
lv_line_id = lv_line_id + 1.
ls_goodsmvt_item-line_id = lv_line_id."凭证行的唯一标识 0002
ls_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.
"--------------------@斌将军--------------------
2.4、传输过账-移动类型411/413/415
传输过账举例

前台如图

在BAPI传值时,注意转出和转入的参数,不要传反
"--------------------@斌将军--------------------
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."到WBS
ELSEIF 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.
"--------------------@斌将军--------------------
2.5、投料和退料
投料举例

参考代码
"--------------------@斌将军--------------------
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_return TYPE STANDARD TABLE OF bapiret2 WITH HEADER LINE. DATA:lv_message TYPE char200,
l_line_id TYPE mseg-line_id,
lv_check TYPE char1.
* 01:采购订单的收货
* 02:生产订单的收货
* 03:发货
* 04:转移发布
* 05:其他收货
* 06:货物移动的逆转
* 07:关于转包订单的后续调整 ls_header-pr_uname = sy-uname. "用户名
ls_header-doc_date = sy-datum."gs_template1-bldat."LV_DATE. "凭证日期
ls_header-pstng_date = sy-datum."gs_template1-budat."LV_DATE. "过账日期
ls_header-header_txt = ''."gs_template1-id."LV_DATE. "抬头文本 ls_mode-gm_code = '03'. lt_goodsmvt_item-material = '000000000003000008'."
lt_goodsmvt_item-plant = 'P010'."工厂
lt_goodsmvt_item-stge_loc = '9101'."存储地点
lt_goodsmvt_item-move_type = 'Z62'."移动类型
lt_goodsmvt_item-entry_qnt = '1'."以录入项单位表示的数量
lt_goodsmvt_item-orderid = '000001000019'."订单号
lt_goodsmvt_item-val_type = 'ZIZHI'."评估类型
* 凭证行的唯一标识
l_line_id = l_line_id + 1.
lt_goodsmvt_item-line_id = l_line_id.
APPEND lt_goodsmvt_item. 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'.
lv_message = lv_message && lt_return-message.
ENDLOOP.
"BAPI调用成功
IF lv_check = 'E'.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
ENDIF.
"--------------------@斌将军--------------------
定期更文,欢迎关注

- 中文(简体)
- 中文(繁体)
- 丹麦语
- 乌克兰语
- 乌尔都语
- 亚美尼亚语
- 俄语
- 保加利亚语
- 克罗地亚语
- 冰岛语
- 加泰罗尼亚语
- 匈牙利语
- 卡纳达语
- 印地语
- 印尼语
- 古吉拉特语
- 哈萨克语
- 土耳其语
- 威尔士语
- 孟加拉语
- 尼泊尔语
- 布尔语(南非荷兰语)
- 希伯来语
- 希腊语
- 库尔德语
- 德语
- 意大利语
- 拉脱维亚语
- 挪威语
- 捷克语
- 斯洛伐克语
- 斯洛文尼亚语
- 旁遮普语
- 日语
- 普什图语
- 毛利语
- 法语
- 波兰语
- 波斯语
- 泰卢固语
- 泰米尔语
- 泰语
- 海地克里奥尔语
- 爱沙尼亚语
- 瑞典语
- 立陶宛语
- 缅甸语
- 罗马尼亚语
- 老挝语
- 芬兰语
- 英语
- 荷兰语
- 萨摩亚语
- 葡萄牙语
- 西班牙语
- 越南语
- 阿塞拜疆语
- 阿姆哈拉语
- 阿尔巴尼亚语
- 阿拉伯语
- 韩语
- 马尔加什语
- 马拉地语
- 马拉雅拉姆语
- 马来语
- 马耳他语
- 高棉语
一律不翻译英语
一律不翻译i.cnblogs.com
MIGO BAPI_GOODSMVT_CREATE创建及增强的更多相关文章
- 【HR系列】SAP HR PA信息类型的创建与增强
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HR系列]SAP HR PA信息类型的创建与增 ...
- BAPI_GOODSMVT_CREATE物料凭证增强字段
项目MSEG 的 BAPI 表增强结构 BAPI_TE_XMSEG 抬头MKPF 的 BAIP 表增强 BAPI_TE_XMKPF 1. 在结构BAPI_TE_XMSEG中appending str ...
- SAP 常用增强记录文档
转自:http://blog.csdn.net/budaha 20170215需要一个PR 修改保存时候的增强,目的是同步PR的处理状态 EBAN-STATU 到一个自建表ZTPRTOPO,记得有个P ...
- SAP-FI模块 如何处理自动生成会计凭证增强
一. 相关问题概览 1. 固定资产业务过渡科目摘要增强功能-F-02 需用表BKPF.BSEG.T001.通过BUKRS.BELNR.GJAHR三个字段相等关联BKPF与BSEG.通过BKPF ...
- 《JavaScript高级程序设计》读书笔记--(4)对象的创建
ECMAScript支持面向对象(OO)编程,但不使用类或者接口.对象可以在代码执行过程中创建或增强,因此具有动态性而非严格定义的实体.在没有类的情况下,可以采用下列模式创建对象. 对象的创建 工厂模 ...
- [SAP ABAP开发技术总结]增强Enhancement
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- SAP增强Enhancement
第一代:基于源码增强(子过程subroutine) 第一代增强基于源代码,是SAP提供的一个空代码的子过程.在这个子过程中用户可以添加自己的代码,控制自己的需求.这类增强集中在一些文件名倒数第二个字符 ...
- SAP增强 和VA01相关增强点介绍
-转 sap寻找用户出口方法 sap的用户出口总共有三代: 一.User EXIT 第一代的用户出口,它们include在SAP标准程序的源代码里,可以说他们是源代码的一部分,你改了这种出口就相当于改 ...
- 第四代增强 NEW BADI的定义及实现
NEW BADI 是在第四代增强框架下创建的BADI,是相对于第三代增强Classic Badi 而言的. 根据第四代增强的基本概念,所有显式增强Enhancement options 都必须放在增强 ...
- 实现简单的AOP前置后置增强
AOP操作是我们日常开发经常使用到的操作,例如都会用到的spring事务管理.今天我们通过一个demo实现对一个类的某一个方法进行前置和后置的增强. //被增强类 public class PetSt ...
随机推荐
- React、Umi、RN 整体理解
可以少去理解一些不必要的概念,而多去思考为什么会有这样的东西,它解决了什么问题,或者它的运行机制是什么? React 1. React 起源和发展(是什么?) React 是用于构建用户界面的 Jav ...
- 总结---Django部分
Django是走大而全的方向,它最出名的是其全自动化的管理后台:只需要使用起ORM,做简单的对象定义,它就能自动生成数据库结构.以及全功能的管理后台. Django内置的ORM跟框架内的其他模块耦合程 ...
- C#winform中使用SQLite数据库
公众号「DotNet学习交流」,分享学习DotNet的点滴. SQLite简介 SQLite是一种轻量级的关系型数据库管理系统(RDBMS),它以一个C库的形式提供.以下是SQLite数据库的一些关键 ...
- 一次显著的性能提升,从8s到0.7s
前言 最近我在公司优化了一些慢查询SQL,积累了一些SQL调优的实战经验. 我之前写过一些SQL优化相关的文章<聊聊SQL优化的15个小技巧>和<explain | 索引优化的这把绝 ...
- 【ASP.NET Core】MVC过滤器:常见用法
前面老周给大伙伴们演示了过滤器的运行流程,大伙只需要知道下面知识点即可: 1.过滤器分为授权过滤.资源访问过滤.操作方法(Action)过滤.结果过滤.异常过滤.终结点过滤.上一次咱们没有说异常过滤和 ...
- mysql的用户管理和权限控制
1.创建用户用 create user '用户名' @ 'localhost' identified by '密码'; 这串代码是创建当地用,是这台电脑的用户,因为有个localhost: creat ...
- 使用dtd定义属性
- 我的大数据之路 - 基于HANA构建实时方案的历程
产品内部前期有一个共识,依据业务要求的时效性来选择技术平台,即: 实时类业务,时效性小于2小时,则使用HANA构建. 离线类业务,时效性大于2小时,则使用大数据平台构建. 经过五月.六月两月的努力,离 ...
- 一键打包,随时运行,Python3项目虚拟环境一键整合包的制作(Venv)
之前我们介绍了如何使用嵌入式 Python3 环境给项目制作一键整合包,在使用嵌入式 Python 环境时,通常是作为另一个应用程序的一部分,而Python3虚拟环境是为了在开发过程中隔离项目所需的 ...
- 【Python】人工智能-机器学习——不调库手撕深度网络分类问题
1. 作业内容描述 1.1 背景 数据集大小150 该数据有4个属性,分别如下 Sepal.Length:花萼长度(cm) Sepal.Width:花萼宽度单位(cm) Petal.Length:花瓣 ...