相关的表:

ekko:采购凭证抬头表 用于判断是否委外

ekpo:采购凭证行项目表 用于判断是否委外以及委外采购的数量

resb:获取委外采购单中bom的相应预留

mseg:获取已经委外原材料出库给供应商的批次

mslb:获取提供给供应商的库存以及批次

bapi

BAPI_GOODSMVT_CREATE:过账bapi

相关移动类型

101:采购收货过账

541:委外原材料出库过账(这里的逻辑默认已经原料出库了)

543:消耗委外原材料出库到供应商的库存的数据

委外流程

创建委外采购单

委外采购单:4500000908



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

委外原材料过账

审批后进行委外过账,我这边也是通过接口过账的,也是用的BAPI_GOODSMVT_CREATE这个bapi,移动类型541

过账后你会在mmbe里查看物料的库存时发现有提供给供应商的库存

委外采购过账

因为涉及系统之间的传输,所以并不能完整给出代码,但是主体处理是没有问题的,部分参数我也写死了,根据自己需要改写即可

  1. DATA: ls_header LIKE bapi2017_gm_head_01,
  2. lv_code LIKE bapi2017_gm_code VALUE '01',
  3. lv_doc TYPE bapi2017_gm_head_ret-mat_doc,
  4. lv_year TYPE bapi2017_gm_head_ret-doc_year,
  5. lt_item LIKE bapi2017_gm_item_create OCCURS 0 WITH HEADER LINE,
  6. lt_ret LIKE bapiret2 OCCURS 0 WITH HEADER LINE.
  7. DATA: lv_outfm TYPE mseg-menge,
  8. lv_outfz TYPE mseg-menge.
  9. DATA: lv_line_id TYPE mseg-line_id VALUE '000000',
  10. lv_parent_id TYPE mseg-parent_id VALUE '000000',
  11. lv_line_depth TYPE mseg-line_depth VALUE '00'.
  12. "判断 是否是 委外采购订单收货
  13. SELECT
  14. FROM ekko
  15. INNER JOIN ekpo
  16. ON ekko~ebeln EQ ekpo~ebeln
  17. FIELDS
  18. ekko~ebeln,
  19. ekpo~ebelp,
  20. ekpo~matnr,
  21. ekko~bsart,
  22. ekpo~pstyp,
  23. ekpo~menge
  24. WHERE ekpo~ebeln EQ '4500000908'
  25. AND ekpo~ebelp EQ '00010'
  26. AND ekpo~matnr EQ '采购单上的物料号'
  27. AND ekko~bsart EQ 'Z003'
  28. AND ekpo~pstyp EQ '3'
  29. INTO TABLE @DATA(lt_outpo).
  30. IF lt_outpo IS NOT INITIAL. " 该采购单是委外采购单
  31. "获取委外采购单的相应bom预留 以及 对应批次
  32. SELECT
  33. FROM resb
  34. INNER JOIN mseg
  35. ON mseg~ebeln EQ resb~ebeln
  36. AND mseg~ebelp EQ resb~ebelp
  37. AND mseg~lifnr eq resb~lifnr
  38. AND mseg~matnr eq resb~matnr
  39. FIELDS
  40. mseg~matnr,
  41. resb~erfmg,
  42. resb~ebeln,
  43. resb~ebelp,
  44. mseg~werks,
  45. mseg~lgort,
  46. mseg~sobkz,
  47. mseg~charg,
  48. mseg~lifnr,
  49. resb~meins
  50. WHERE resb~ebeln EQ '4500000908'
  51. AND resb~ebelp EQ '00010'
  52. AND mseg~lifnr EQ '30108'
  53. AND mseg~sobkz = 'O'
  54. INTO TABLE @DATA(lt_outbom).
  55. "获取提供给的供应商库存
  56. SELECT
  57. FROM mslb
  58. FIELDS
  59. mslb~matnr,
  60. mslb~charg,
  61. mslb~werks,
  62. mslb~sobkz,
  63. mslb~lifnr,
  64. mslb~lblab,
  65. mslb~ersda
  66. WHERE mslb~lifnr EQ '30108'
  67. INTO TABLE @DATA(lt_outinv).
  68. SORT lt_outinv BY ersda ASCENDING.
  69. ENDIF.
  70. lt_item-po_number = '4500000908'.
  71. lt_item-po_item = '00010'.
  72. lt_item-material = '采购单上的物料号'.
  73. lt_item-vendor = '30108'.
  74. lt_item-entry_qnt = '5'.
  75. lt_item-entry_uom = '物料单位'.
  76. lt_item-plant = '工厂'.
  77. lt_item-stge_loc = '存储地点'.
  78. lt_item-move_type = '101'.
  79. lt_item-vendrbatch = '供应商批次'.
  80. lt_item-batch = '内部批次'.
  81. lv_xchpf = 'X'.
  82. lv_line_id = lv_line_id + 1.
  83. lv_parent_id = lv_line_id.
  84. lt_item-line_id = lv_parent_id. " 父项目
  85. _conv_matnr: 'IN' lt_item-material.
  86. _conv_alpha: 'IN' lt_item-vendor.
  87. _conv_alpha: 'IN' lt_item-po_number.
  88. APPEND lt_item.
  89. CLEAR: lt_item.
  90. "上面的过账一般采购收货都是一样的 ,委外的区别就在下面这个循环,需要将bom组件的数据也写入
  91. IF lt_outpo IS NOT INITIAL. " 该采购单是委外采购单 需要填入明细数据 移动类型为543
  92. lv_outfz = '采购收货的数量'. " 过账的数量 用作分子
  93. READ TABLE lt_outpo INTO DATA(ls_outpo) WITH KEY ebeln = '4500000908' ebelp = '00010'.
  94. IF sy-subrc EQ 0.
  95. lv_outfm = ls_outpo-menge. " 找出采购单的数量 用作分母
  96. ENDIF.
  97. LOOP AT lt_outbom ASSIGNING FIELD-SYMBOL(<fs_outbom>) WHERE ebeln = '4500000908' AND ebelp = '00010'. " 获取bom预留
  98. lt_item-move_type = '543'. " 移动类型
  99. lt_item-material = <fs_outbom>-matnr. " 物料号
  100. lt_item-plant = <fs_outbom>-werks. " 工厂
  101. lt_item-stge_loc = <fs_outbom>-lgort. " 存储字典
  102. lt_item-spec_stock = 'O'. " 特殊库存
  103. lt_item-batch = <fs_outbom>-charg. " 内部批次
  104. lt_item-entry_qnt = lv_outfz / lv_outfm * <fs_outbom>-erfmg. " 过账的成品数量 / 采购的成品数量 * BOM组件的数量
  105. lt_item-entry_uom = <fs_outbom>-meins. " 单位
  106. lt_item-parent_id = lv_parent_id. " 父项目编码
  107. lv_line_id = lv_line_id + 1. " 子项目编号
  108. lt_item-line_id = lv_line_id.
  109. lv_line_depth = '01'.
  110. lt_item-line_depth = lv_line_depth. "bom层次
  111. APPEND lt_item.
  112. CLEAR lt_item.
  113. ENDLOOP.
  114. ENDIF.
  115. clear it_item.
  116. CALL FUNCTION 'BAPI_GOODSMVT_CREATE'
  117. EXPORTING
  118. goodsmvt_header = ls_header
  119. goodsmvt_code = lv_code
  120. IMPORTING
  121. materialdocument = lv_doc
  122. matdocumentyear = lv_year
  123. TABLES
  124. goodsmvt_item = lt_item
  125. return = lt_ret.
  126. IF lv_doc <> ''.
  127. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
  128. EXPORTING
  129. wait = 'X'.
  130. ELSE.
  131. CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
  132. ENDIF.

ABAP 委外采购收货调用过账bapi的更多相关文章

  1. 20170524 委外采购的物料BOM

    目标:找委外采购订单BOM, 我的方法:1.直接在电脑中搜索关键字:2.到系统中找数据查询3.委外采购订单系统如何操作? 数据怎么做, 实施: 结果:MDBAEKET, "采购订单项目计划行 ...

  2. 【MM系列】SAP MM模块-分析采购收货完成标识

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[MM系列]SAP MM模块-分析采购收货完成标 ...

  3. 【MM系列】SAP MM模块-委外采购订单 把Warning转换成Error信息提示

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[MM系列]SAP MM模块-委外采购订单 把W ...

  4. ERP采购收货在标准成本和移动平均价下的差别

    欢迎关注微信公众号:iERPer (ERP咨询顾问之家) ERP系统在处理主要的采购流程有: 下采购合同->下采购订单->收货->发票校验->付款(财务) 其中 收货和发票校验 ...

  5. SAP交货单过账自动生产采购订单、采购订单自动收货入库

    公司间需要买卖操作,由于发货和收货都是同一批人在操作,为了减少业务人员的工作量,提高工作效率,特实现以上功能 1.增强实现:增强点为交货单过账成功时触发,在提交前触发,如果遇到不可预知问题,可能造成数 ...

  6. 通过数据,修改金蝶ERP的收料通知单不合格和合格数量,修改生产投料单,委外发出数量

    update POInStockEntry set FAuxNotPassQty=不合格数量 where FInterID=(select FInterID from POInStock where ...

  7. SAP MM 标准采购组织的分配对于寄售采购订单收货的影响

    SAP MM 标准采购组织的分配对于寄售采购订单收货的影响 PO 4100004022 是一个寄售的采购订单, 采购组织是CSAS, 工厂代码SZSP.采购信息记录也是有的, MIGO试图对该采购订单 ...

  8. 【MM系列】SAP 采购订单收货后不能修改价格的增强

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[MM系列]SAP 采购订单收货后不能修改价格的 ...

  9. 【MM系列】SAP MM模块-收货自动创建采购订单

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[MM系列]SAP MM模块-收货自动创建采购订 ...

  10. 收货MIGO

    FUNCTION zrfc_mm003. *"---------------------------------------------------------------------- * ...

随机推荐

  1. .Net 7 的AOT的程序比托管代码更容易破解?

    楔子 .Net 7的一个重要功能是把托管的源码编译成Native Code,也就是二进制文件.此举看似增加了程序反编译难度,实际上是减少了程序的破解难度.本篇在不触及整个程序架构的前提下,以简单的例子 ...

  2. 一个开放源代码,实现动态IL注入(Hook或补丁工具)框架:Lib.Harmony(Patch,PatchAll,Prefix,Postfix,Transpiler)

    详情请参考原文:一个开放源代码,实现动态IL注入(Hook或补丁工具)框架:Lib.Harmony  

  3. 物以类聚人以群分,通过GensimLda文本聚类构建人工智能个性化推荐系统(Python3.10)

    众所周知,个性化推荐系统能够根据用户的兴趣.偏好等信息向用户推荐相关内容,使得用户更感兴趣,从而提升用户体验,提高用户粘度,之前我们曾经使用协同过滤算法构建过个性化推荐系统,但基于显式反馈的算法就会有 ...

  4. 数字IC设计流程

    数字IC设计流程 简单介绍数字IC设计流程

  5. 干货满满的 Zookeeper 学习笔记

    读完< ZooKeeper : Wait-free coordination for Internet-scale systems > 论文的一些笔记,记录下来,方便以后查看 在读论文的时 ...

  6. Go使用协程批量获取数据,加快接口返回速度

    服务端经常需要返回一个列表,里面包含很多用户数据,常规做法当然是遍历然后读缓存. 使用Go语言后,可以并发获取,极大提升效率. 使用channel package main import ( &quo ...

  7. TamperMonkey油猴脚本获取

    TamperMonkey官网-脚本获取页面    https://www.tampermonkey.net/scripts.php?ext=dhdg 脚本站点1:Userscript.ZoneSear ...

  8. IIS重定向HTTP至HTTPS

    一.安装URL重写模块,自行百度下载 二.选择网站进行添加规则 三.总结 其实就是在站点的Web.config增加了一段配置: <system.webServer> <rewrite ...

  9. 超详细!Jmeter性能测试

    前言 性能测试是一个全栈工程师/架构师必会的技能之一,只有学会性能测试,才能根据得到的测试报告进行分析,找到系统性能的瓶颈所在,而这也是优化架构设计中重要的依据. 测试流程: 需求分析→环境搭建→测试 ...

  10. 2021级《JAVA语言程序设计》上机考试试题2

    以下是学生页面 首先先给上数据库 在准备准备工作 以下为代码: package Bean; public class Student { private String StuID; private S ...