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. *"---------------------------------------------------------------------- * ...
随机推荐
- vs code .net core Linux下离线安装Nuget包
本人第一次使用 vs code在linux下开发.net core项目,由于处于内网,无法通过在线安装,所以在遇见离线安装Nuget包时,耗费了一番功夫,网上也没有相关的,最后还是多个思路结合才解决的 ...
- session取不到值
今天鼓捣项目时出现了一个问题 项目重启后,设置session值后,第一次请求经过过滤器时 session取不到值,导致被拦截 经过半天的研究,终于...我请教了别人 把代码给了朋友,在朋友一段时间的琢 ...
- DVWA靶场实战(六)——Insecure CAPTCHA
DVWA靶场实战(六) 六.Insecure CAPTCHA: 1.漏洞原理: Insecure CAPTCHA(不安全的验证码),CAPTCHA全程为Completely Automated Pub ...
- win32com操作word API精讲&项目实战 预告
对win32com的使用和研究有好一段时间了,想起本人刚开始做word编程项目时的各种痛苦:网上能找到的都是简单的示例,如同hello word一般,嚼之无味又无可奈何.读office的word接口文 ...
- Odoo View 常用技巧
隐藏Field <field name="currency_id" invisible="True"/> <field name=" ...
- (转载)Python中关键词yield怎么用?
原文: https://stackoverflow.com/questions/231767/what-does-the-yield-keyword-do 译文: https://zhuanlan.z ...
- 从零开始,打造属于你的 ChatGPT 机器人!
大家好!我是韩老师. 不得不说,最近 OpenAI/ChatGPT 真的是太火了. 前几天,微软宣布推出全新的 Bing 和 Edge,集成了 OpenAI/ChatGPT 相关的技术,带动股价大涨: ...
- Matlab导入多个.mat文件进行画图
目录 0. 实验背景 1. 导入.mat文件存储 1.1 导入.mat文件及作图最简单的方式: 1.2 导入.mat文件及作图的脚本代码 2. plot画图总结 2.1 画散点图 2.1.1 点形状 ...
- 《关于我因为flink成为spark源码贡献者这件小事》
各位读者老爷请放下手上的板砖,我可真没有标题党,且容老弟慢慢道来. spark和flink本身相信我不用做过多的介绍,后端同学不管搞没搞过大数据,应该都多多少少听过. 如果没听过,简单说,spark和 ...
- Centos7搭建hadoop3.3.4分布式集群
目录 1.背景 2.集群规划 2.1 hdfs集群规划 2.2 yarn集群规划 3.集群搭建步骤 3.1 安装JDK 3.2 修改主机名和host映射 3.3 配置时间同步 3.4 关闭防火墙 3. ...