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. *"---------------------------------------------------------------------- * ...
随机推荐
- Python从0到1丨细说图像增强及运算
摘要:本文主要讲解常见的图像锐化和边缘检测方法,即Roberts算子和Prewitt算子. 本文分享自华为云社区<[Python从零到壹] 五十七.图像增强及运算篇之图像锐化Roberts.Pr ...
- Unix 系统数据文件那些事儿
前言 Unix like 系统和 windows 的最大区别就是有一套标准的系统信息数据文件,一般存放在 /etc/ 目录下,并且提供了一组近似的接口访问和查询信息,这些基础设施让系统管理看起来井井有 ...
- BBS项目 未完待续
项目开发基本流程 1.需求分析 2.架构设计 3.分组开发 4.提交测试 5.交付上线 创建项目配置 环境配置 TEMPLATES = [ { 'BACKEND': 'django.template. ...
- C组合方案
递归实现组合型枚举 从 1∼n 这 n 个整数中随机选出 m 个,输出所有可能的选择方案. 输入格式 两个整数 n,m ,在同一行用空格隔开. 输出格式 按照从小到大的顺序输出所有方案,每行 1 个. ...
- 01-逻辑仿真工具VCS使用
1 逻辑仿真工具VCS的使用 在书写完成RTL代码之后,确保自己书写的代码和自己想要的逻辑是一致的. VCS是synopsys公司下的的仿真工具. 1 VCS仿真过程 编译-->仿真--> ...
- MySQL 表的创建、复制、修改与删除
MySQL中如何利用代码完成表的创建.复制.修改和删除. 一.创建表 --创建新表,如果存在则覆盖 drop table [if exists] 表名; --创建新表,如果存在则返回 create t ...
- 【实战】yolov8 tensorrt模型加速部署
[实战]yolov8 tensorrt模型加速部署 TensorRT-Alpha基于tensorrt+cuda c++实现模型end2end的gpu加速,支持win10.linux,在2023年已经更 ...
- SOFAJRaft源码阅读-ShutdownHook如何优雅的停机
Java程序经常会遇到进程挂掉的情况,一些状态没有正确的保存下来,这时候就需要在JVM关掉的时候执行一些清理现场的代码.JAVA中的ShutdownHook提供了比较好的方案.而在SOFAJRaft- ...
- Vue3的script setup语法糖这么好用的吗????
最近发现这个vue3居然还可以这样写 原始写法 <template> <h1>Tangdoudou</h1> <h1>{{ num }}</h1& ...
- vh 存在问题?试试动态视口单位之 dvh、svh、lvh
大部分同学都知道,在 CSS 世界中,有 vw.vh.vmax.vmin 这几个与视口 Viewport 相关的单位. 正常而言: 1vw 等于1/100的视口宽度 (Viewport Width) ...