ABAP 委外采购收货调用过账bapi
相关的表:
ekko:采购凭证抬头表 用于判断是否委外
ekpo:采购凭证行项目表 用于判断是否委外以及委外采购的数量
resb:获取委外采购单中bom的相应预留
mseg:获取已经委外原材料出库给供应商的批次
mslb:获取提供给供应商的库存以及批次
bapi
BAPI_GOODSMVT_CREATE:过账bapi
相关移动类型
101:采购收货过账
541:委外原材料出库过账(这里的逻辑默认已经原料出库了)
543:消耗委外原材料出库到供应商的库存的数据
委外流程
创建委外采购单
委外采购单:4500000908

因为bom组件过多,我用作测试的话,就在采购订单中删除了很多bom组件,只留了两个

委外原材料过账
审批后进行委外过账,我这边也是通过接口过账的,也是用的BAPI_GOODSMVT_CREATE这个bapi,移动类型541
过账后你会在mmbe里查看物料的库存时发现有提供给供应商的库存

委外采购过账
因为涉及系统之间的传输,所以并不能完整给出代码,但是主体处理是没有问题的,部分参数我也写死了,根据自己需要改写即可
DATA: ls_header LIKE bapi2017_gm_head_01,
lv_code LIKE bapi2017_gm_code VALUE '01',
lv_doc TYPE bapi2017_gm_head_ret-mat_doc,
lv_year TYPE bapi2017_gm_head_ret-doc_year,
lt_item LIKE bapi2017_gm_item_create OCCURS 0 WITH HEADER LINE,
lt_ret LIKE bapiret2 OCCURS 0 WITH HEADER LINE.
DATA: lv_outfm TYPE mseg-menge,
lv_outfz TYPE mseg-menge.
DATA: lv_line_id TYPE mseg-line_id VALUE '000000',
lv_parent_id TYPE mseg-parent_id VALUE '000000',
lv_line_depth TYPE mseg-line_depth VALUE '00'.
"判断 是否是 委外采购订单收货
SELECT
FROM ekko
INNER JOIN ekpo
ON ekko~ebeln EQ ekpo~ebeln
FIELDS
ekko~ebeln,
ekpo~ebelp,
ekpo~matnr,
ekko~bsart,
ekpo~pstyp,
ekpo~menge
WHERE ekpo~ebeln EQ '4500000908'
AND ekpo~ebelp EQ '00010'
AND ekpo~matnr EQ '采购单上的物料号'
AND ekko~bsart EQ 'Z003'
AND ekpo~pstyp EQ '3'
INTO TABLE @DATA(lt_outpo).
IF lt_outpo IS NOT INITIAL. " 该采购单是委外采购单
"获取委外采购单的相应bom预留 以及 对应批次
SELECT
FROM resb
INNER JOIN mseg
ON mseg~ebeln EQ resb~ebeln
AND mseg~ebelp EQ resb~ebelp
AND mseg~lifnr eq resb~lifnr
AND mseg~matnr eq resb~matnr
FIELDS
mseg~matnr,
resb~erfmg,
resb~ebeln,
resb~ebelp,
mseg~werks,
mseg~lgort,
mseg~sobkz,
mseg~charg,
mseg~lifnr,
resb~meins
WHERE resb~ebeln EQ '4500000908'
AND resb~ebelp EQ '00010'
AND mseg~lifnr EQ '30108'
AND mseg~sobkz = 'O'
INTO TABLE @DATA(lt_outbom).
"获取提供给的供应商库存
SELECT
FROM mslb
FIELDS
mslb~matnr,
mslb~charg,
mslb~werks,
mslb~sobkz,
mslb~lifnr,
mslb~lblab,
mslb~ersda
WHERE mslb~lifnr EQ '30108'
INTO TABLE @DATA(lt_outinv).
SORT lt_outinv BY ersda ASCENDING.
ENDIF.
lt_item-po_number = '4500000908'.
lt_item-po_item = '00010'.
lt_item-material = '采购单上的物料号'.
lt_item-vendor = '30108'.
lt_item-entry_qnt = '5'.
lt_item-entry_uom = '物料单位'.
lt_item-plant = '工厂'.
lt_item-stge_loc = '存储地点'.
lt_item-move_type = '101'.
lt_item-vendrbatch = '供应商批次'.
lt_item-batch = '内部批次'.
lv_xchpf = 'X'.
lv_line_id = lv_line_id + 1.
lv_parent_id = lv_line_id.
lt_item-line_id = lv_parent_id. " 父项目
_conv_matnr: 'IN' lt_item-material.
_conv_alpha: 'IN' lt_item-vendor.
_conv_alpha: 'IN' lt_item-po_number.
APPEND lt_item.
CLEAR: lt_item.
"上面的过账一般采购收货都是一样的 ,委外的区别就在下面这个循环,需要将bom组件的数据也写入
IF lt_outpo IS NOT INITIAL. " 该采购单是委外采购单 需要填入明细数据 移动类型为543
lv_outfz = '采购收货的数量'. " 过账的数量 用作分子
READ TABLE lt_outpo INTO DATA(ls_outpo) WITH KEY ebeln = '4500000908' ebelp = '00010'.
IF sy-subrc EQ 0.
lv_outfm = ls_outpo-menge. " 找出采购单的数量 用作分母
ENDIF.
LOOP AT lt_outbom ASSIGNING FIELD-SYMBOL(<fs_outbom>) WHERE ebeln = '4500000908' AND ebelp = '00010'. " 获取bom预留
lt_item-move_type = '543'. " 移动类型
lt_item-material = <fs_outbom>-matnr. " 物料号
lt_item-plant = <fs_outbom>-werks. " 工厂
lt_item-stge_loc = <fs_outbom>-lgort. " 存储字典
lt_item-spec_stock = 'O'. " 特殊库存
lt_item-batch = <fs_outbom>-charg. " 内部批次
lt_item-entry_qnt = lv_outfz / lv_outfm * <fs_outbom>-erfmg. " 过账的成品数量 / 采购的成品数量 * BOM组件的数量
lt_item-entry_uom = <fs_outbom>-meins. " 单位
lt_item-parent_id = lv_parent_id. " 父项目编码
lv_line_id = lv_line_id + 1. " 子项目编号
lt_item-line_id = lv_line_id.
lv_line_depth = '01'.
lt_item-line_depth = lv_line_depth. "bom层次
APPEND lt_item.
CLEAR lt_item.
ENDLOOP.
ENDIF.
clear it_item.
CALL FUNCTION 'BAPI_GOODSMVT_CREATE'
EXPORTING
goodsmvt_header = ls_header
goodsmvt_code = lv_code
IMPORTING
materialdocument = lv_doc
matdocumentyear = lv_year
TABLES
goodsmvt_item = lt_item
return = lt_ret.
IF lv_doc <> ''.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ENDIF.
ABAP 委外采购收货调用过账bapi的更多相关文章
- 20170524 委外采购的物料BOM
目标:找委外采购订单BOM, 我的方法:1.直接在电脑中搜索关键字:2.到系统中找数据查询3.委外采购订单系统如何操作? 数据怎么做, 实施: 结果:MDBAEKET, "采购订单项目计划行 ...
- 【MM系列】SAP MM模块-分析采购收货完成标识
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[MM系列]SAP MM模块-分析采购收货完成标 ...
- 【MM系列】SAP MM模块-委外采购订单 把Warning转换成Error信息提示
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[MM系列]SAP MM模块-委外采购订单 把W ...
- ERP采购收货在标准成本和移动平均价下的差别
欢迎关注微信公众号:iERPer (ERP咨询顾问之家) ERP系统在处理主要的采购流程有: 下采购合同->下采购订单->收货->发票校验->付款(财务) 其中 收货和发票校验 ...
- SAP交货单过账自动生产采购订单、采购订单自动收货入库
公司间需要买卖操作,由于发货和收货都是同一批人在操作,为了减少业务人员的工作量,提高工作效率,特实现以上功能 1.增强实现:增强点为交货单过账成功时触发,在提交前触发,如果遇到不可预知问题,可能造成数 ...
- 通过数据,修改金蝶ERP的收料通知单不合格和合格数量,修改生产投料单,委外发出数量
update POInStockEntry set FAuxNotPassQty=不合格数量 where FInterID=(select FInterID from POInStock where ...
- SAP MM 标准采购组织的分配对于寄售采购订单收货的影响
SAP MM 标准采购组织的分配对于寄售采购订单收货的影响 PO 4100004022 是一个寄售的采购订单, 采购组织是CSAS, 工厂代码SZSP.采购信息记录也是有的, MIGO试图对该采购订单 ...
- 【MM系列】SAP 采购订单收货后不能修改价格的增强
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[MM系列]SAP 采购订单收货后不能修改价格的 ...
- 【MM系列】SAP MM模块-收货自动创建采购订单
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[MM系列]SAP MM模块-收货自动创建采购订 ...
- 收货MIGO
FUNCTION zrfc_mm003. *"---------------------------------------------------------------------- * ...
随机推荐
- [OpenCV实战]26 基于OpenCV实现选择性搜索算法
目录 1 背景 1.1 目标检测与目标识别 1.2 滑动窗口算法 1.3 候选区域选择算法 2 选择性搜索算法 2.1 什么是选择性搜索? 2.2 选择性搜索相似性度量 2.3 结果 3 代码 4 参 ...
- @Transactional事务回滚异常:Transaction rolled back because it has been marked as rollback-only
问题描述 事务设置手动回滚:TransactionAspectSupport.currentTransactionStatus().setRollbackOnly() 代码需要返回比较友好的提示,但t ...
- 你知道这个提高 Java 单元测试效率的 IDEA 插件吗
前言 2023年我们公司主抓代码质量,所以单元测试必不可少,而且都写到了年底的绩效目标中了.在考虑如何达成这个目标的过程中,我发现了一个关于单元测试的IDEA插件--SquareTest,它可以帮助我 ...
- mysql常用命令,检查数据库连接情况以及修改时区
常用操作 注:也可以运行 mysql -u 用户名(root) -p 密码(root) 数据库名(bank) ,然后回车 导入文件:source e:bank.sql (你的sql文件) 回车 PS ...
- Hive删除分区名称中含有特殊字符
先说方案:通过show partitions和hdfs url看到的都不是真正的分区名称,都是经过URI重新编码的,访问这些分区应该使用分区名称的原始字符串. 场景描述 当我们在SQL语句中使用变量时 ...
- Python实用代码片段(1)-rot13加密
Python之禅:THIS.PY 你安装了python之后,能在Lib目录下找到一个this.py的文件,就是此处的内容. s = """Gur Mra bs Clgub ...
- linux-基础及相关软件安装
1.linux常见岗位 自动化运维.容器运维.DBA ps:会的越多给的就越多!!! """ IDC运维:机房运维员 不要做!!! """ ...
- LeetCode_单周赛_328
6291. 数组元素和与数字和的绝对差 代码 模拟即可 class Solution { public int differenceOfSum(int[] nums) { int ans = 0; i ...
- Vue22 VueCli 脚手架
1 简介 CLI 是 Command-Line Interface, 翻译为命令行界面, 但是俗称脚手架 Vue CLI是一个官方发布 vue.js 项目脚手架 使用 vue-cli 可以快速搭建 V ...
- 安装和配置Java开发环境JDK
我们通常软件开发的操作系统选择Windows,生产环境选择linux或windows Server.移动开发可能是安卓或IOS和鸿蒙系统等. Windows下一般选择的是64位的操作系统,一般建议CP ...