ABAP-增强-MRP运行-根据工厂/父件/子件/供应商拆分采购申请
最近有个业务需要,MRP运行过程中需要根据生产计划订单/子件/供应商对应关系来拆解采购申请。
1.具体实例:
a.基础数据
整车物料:NL1G58420151001219
子件:000000008888002653
供应商:0000563007 / 0008000005
配额:

订单BOM:

b.创建计划独立需求T-CODE:MD61


c.MRP运行T-CODE:MD41

d.库存/需求清单T-CODE:MD04

综上:MRP运行后子件8888002653生成的采购申请是根据配额来分配供应商的。
新需求:生产某些车型需要的子件需要特定的供应商专供,针对该子件的其他采购需求还是按照配额来分配供应商。
该需求很无语,通过SPRO配置已无解,只能通过查找增强出口解决该问题了。
2.解决方式:
2.1自定义表


2.2增强点

在程序 LM61YF0J 行70 创建隐式增强点 ZIMP_BADI_MRP_VENDOR ,并插入 include zmmi0001_mrp_vendor.
2.4 INCLUDE ZMMI0001_MRP_VENDOR程序代码
*&---------------------------------------------------------------------*
*& Include ZMMI0001_MRP_VENDOR
*&
*&---------------------------------------------------------------------*
*& Program Name: MRP运行-根据车型/供应商拆分采购申请
*& Date written: 2018-08-13
*& Author's name: 陈**
*& Business design:陈**
*& Last update: 2018-08-13
*& Project Name: *****ERP项目
*& Version: V1.0
*& Modify History:
*& Sketch: MRP运行根据车型/供应商拆分采购申请
*&---------------------------------------------------------------------*
*& Variables: 变量
*& MDPSN 采购申请明细
*& MDPSX 订单需求明细(计划订单/生产订单/销售订单/采购订单)
*& MDNBX 订单需求每日汇总
*& CM61X WERKS/PLMOD/BANER/DISER/LIFKZ/TRMPL
*& CM61D MATNR/WERKS
*&---------------------------------------------------------------------*
*& 逻辑:
*& 1.校验工厂,是否执行
*& 2.获取采购明细MDPSN
*& 3.获取生产计划需求明细,根据车型获取供应商
*& 4.根据供应商拆解采购申请MDPSN
*&---------------------------------------------------------------------* "局部变量定义
data:
begin of wa_mdps,
check type c,
poflg type c,
vendor type lifnr.
include structure mdps.
data:end of wa_mdps.
data:
lv_mng01 type mdps-mng01,
lv_bnfpo type eban-bnfpo,
lv_mng02 type mdps-mng02,
lv_exitdg type c,
lv_index type i.
data:
lt_mrp_mdpsn like table of mdps,
lt_mrp_mdpso like table of mdps,
lt_cop_mdpsn like table of mdps,
lt_col_mdpsn like table of mdps,
lt_mrp_mdpsx like table of wa_mdps,
lt_mrp_mdnbx like table of mdnb,
lt_mrp_vendor like table of ztmm0094_mrp_vnd.
field-symbols:
<fs_mdpsx> like wa_mdps,
<fs_vendor> like ztmm0094_mrp_vnd,
<fs_mdps> like mdps,
<fs_mdpsn> like mdps,
<fs_mdpso> like mdps,
<fs_mdnbx> like mdnb. select single fg_exitdg
into lv_exitdg
from ztmm0093_mrp_wrk
where werks = cm61x-werks
and fg_enable = 'X'
and fg_vendor = 'X'.
if sy-subrc = .
"是否断点
if lv_exitdg = 'X'.
break-point.
endif. lt_mrp_mdpsn[] = mdpsn[].
lt_mrp_mdnbx[] = mdnbx[].
lt_mrp_mdpso[] = mdpso[]. loop at mdpsx assigning <fs_mdps>.
append initial line to lt_mrp_mdpsx assigning <fs_mdpsx>.
move-corresponding <fs_mdps> to <fs_mdpsx>.
unassign <fs_mdpsx>.
endloop. loop at lt_mrp_mdpsn assigning <fs_mdpsn>
where delnr is not initial.
"行项目6位转5位
clear:lv_bnfpo.
lv_bnfpo = <fs_mdpsn>-delps+(). "获取供应商
select single flief
into <fs_mdpsn>-lifnr
from eban
where banfn = <fs_mdpsn>-delnr
and bnfpo = lv_bnfpo.
endloop. "获取组件对应供应商
select *
into table lt_mrp_vendor
from ztmm0094_mrp_vnd
where werks = cm61x-werks
and idnrk = cm61d-matnr.
sort lt_mrp_vendor by werks idnrk matnr lifnr. loop at lt_mrp_mdpsx assigning <fs_mdpsx>
where delkz <> 'WB'
and ( plumi = '+' or plumi = '-'). "判断是否计划订单/生产订单
if <fs_mdpsx>-stlty = 'M'
and <fs_mdpsx>-stlnr is not initial
and <fs_mdpsx>-stlkn is not initial
and <fs_mdpsx>-stpoz is not initial
and <fs_mdpsx>-baugr is not initial. read table lt_mrp_vendor
assigning <fs_vendor>
with key matnr = <fs_mdpsx>-baugr
binary search.
if sy-subrc = .
"标识-车型/组件/供应商匹配
<fs_mdpsx>-check = 'X'.
<fs_mdpsx>-vendor = <fs_vendor>-lifnr.
endif.
endif. "拆分采购申请
if <fs_mdpsx>-plumi = '-'.
loop at lt_mrp_mdpsn assigning <fs_mdpsn>
where mng01 > .
"非特殊标识check=space供应商
if <fs_mdpsx>-check = space.
<fs_mdpsx>-vendor = <fs_mdpsn>-lifnr.
endif.
"逐步递减数量
clear:lv_mng01.
if <fs_mdpsx>-mng01 >= <fs_mdpsn>-mng01.
lv_mng01 = <fs_mdpsn>-mng01.
elseif <fs_mdpsx>-mng01 < <fs_mdpsn>-mng01.
lv_mng01 = <fs_mdpsx>-mng01.
endif. if <fs_mdpsn>-delkz <> 'ZZ'.
read table lt_cop_mdpsn assigning <fs_mdps>
with key plaab = <fs_mdpsn>-plaab
planr = <fs_mdpsn>-planr
tag00 = <fs_mdpsn>-tag00
sort1 = <fs_mdpsn>-sort1
sort2 = <fs_mdpsn>-sort2
lgort = <fs_mdpsn>-lgort
delkz = <fs_mdpsn>-delkz
lifnr = <fs_mdpsx>-vendor
vrfkz = <fs_mdpsn>-vrfkz
plumi = <fs_mdpsn>-plumi
dat00 = <fs_mdpsn>-dat00
dat01 = <fs_mdpsn>-dat01
dat02 = <fs_mdpsn>-dat02.
if sy-subrc = .
<fs_mdps>-mng01 = <fs_mdps>-mng01 + lv_mng01.
else.
if cm61x-plmod = '' "1 适应计划数据(普通模式)
or cm61x-plmod = ''. "2 重扩展 BOM 和工艺路线
read table mdpso assigning <fs_mdpso>
with key plaab = <fs_mdpsn>-plaab
planr = <fs_mdpsn>-planr
tag00 = <fs_mdpsn>-tag00
sort1 = <fs_mdpsn>-sort1
sort2 = <fs_mdpsn>-sort2
lgort = <fs_mdpsn>-lgort
delkz = <fs_mdpsn>-delkz
lifnr = <fs_mdpsx>-vendor
vrfkz = <fs_mdpsn>-vrfkz
plumi = <fs_mdpsn>-plumi
dat00 = <fs_mdpsn>-dat00
dat01 = <fs_mdpsn>-dat01
dat02 = <fs_mdpsn>-dat02.
if sy-subrc = .
lv_index = sy-tabix.
if <fs_mdpsx>-check = 'X'.
append initial line to lt_cop_mdpsn assigning <fs_mdps>.
move-corresponding <fs_mdpso> to <fs_mdps>.
<fs_mdps>-mng01 = lv_mng01.
<fs_mdps>-lifnr = <fs_mdpsx>-vendor.
<fs_mdps>-vstat = <fs_mdpsn>-vstat.
unassign <fs_mdps>.
else.
append initial line to lt_cop_mdpsn assigning <fs_mdps>.
move-corresponding <fs_mdpso> to <fs_mdps>.
<fs_mdps>-mng01 = lv_mng01.
<fs_mdps>-lifnr = <fs_mdpsx>-vendor.
<fs_mdps>-vstat = <fs_mdpsn>-vstat.
unassign <fs_mdps>.
endif.
delete mdpso index lv_index.
else.
if <fs_mdpsx>-check = 'X'.
append initial line to lt_cop_mdpsn assigning <fs_mdps>.
move-corresponding <fs_mdpsn> to <fs_mdps>.
<fs_mdps>-mng01 = lv_mng01.
<fs_mdps>-lifnr = <fs_mdpsx>-vendor.
unassign <fs_mdps>.
else.
append initial line to lt_cop_mdpsn assigning <fs_mdps>.
move-corresponding <fs_mdpsn> to <fs_mdps>.
<fs_mdps>-mng01 = lv_mng01.
<fs_mdps>-lifnr = <fs_mdpsx>-vendor.
unassign <fs_mdps>.
endif.
endif.
unassign <fs_mdpso>.
elseif cm61x-plmod = ''. "3 删除并重新创建计划数据
if <fs_mdpsx>-check = 'X'.
append initial line to lt_cop_mdpsn assigning <fs_mdps>.
move-corresponding <fs_mdpsn> to <fs_mdps>.
<fs_mdps>-mng01 = lv_mng01.
<fs_mdps>-lifnr = <fs_mdpsx>-vendor.
unassign <fs_mdps>.
else.
append initial line to lt_cop_mdpsn assigning <fs_mdps>.
move-corresponding <fs_mdpsn> to <fs_mdps>.
<fs_mdps>-mng01 = lv_mng01.
<fs_mdps>-lifnr = <fs_mdpsx>-vendor.
unassign <fs_mdps>.
endif.
endif.
endif.
endif. <fs_mdpsn>-mng01 = <fs_mdpsn>-mng01 - lv_mng01.
<fs_mdpsx>-mng01 = <fs_mdpsx>-mng01 - lv_mng01. if <fs_mdpsx>-mng01 = .
exit.
endif.
endloop.
elseif <fs_mdpsx>-plumi = '+'.
append initial line to lt_mrp_mdpsn assigning <fs_mdpsn>.
move-corresponding <fs_mdpsx> to <fs_mdpsn>.
<fs_mdpsn>-delkz = 'ZZ'. "自定义符号,仅逻辑计算
unassign <fs_mdpsn>. sort lt_mrp_mdpsn.
endif.
endloop. "未清记录
loop at lt_mrp_mdpsn assigning <fs_mdpsn>
where delkz <> 'ZZ'
and vstat <> 'L'
and mng01 > . read table lt_cop_mdpsn assigning <fs_mdps>
with key plaab = <fs_mdpsn>-plaab
planr = <fs_mdpsn>-planr
tag00 = <fs_mdpsn>-tag00
sort1 = <fs_mdpsn>-sort1
sort2 = <fs_mdpsn>-sort2
lgort = <fs_mdpsn>-lgort
delkz = <fs_mdpsn>-delkz
lifnr = <fs_mdpsn>-lifnr
vrfkz = <fs_mdpsn>-vrfkz
plumi = <fs_mdpsn>-plumi
dat00 = <fs_mdpsn>-dat00
dat01 = <fs_mdpsn>-dat01
dat02 = <fs_mdpsn>-dat02.
if sy-subrc = .
<fs_mdps>-mng01 = <fs_mdps>-mng01 + <fs_mdpsn>-mng01.
else.
append initial line to lt_cop_mdpsn assigning <fs_mdps>.
move-corresponding <fs_mdpsn> to <fs_mdps>.
<fs_mdps>-mng01 = <fs_mdpsn>-mng01.
<fs_mdps>-lifnr = <fs_mdpsn>-lifnr.
endif.
unassign <fs_mdps>.
endloop. sort lt_cop_mdpsn. "数量总和对比
clear:lv_mng01,lv_mng02. loop at lt_cop_mdpsn assigning <fs_mdps>.
lv_mng01 = lv_mng01 + <fs_mdps>-mng01.
endloop. loop at mdpsn assigning <fs_mdpsn>.
lv_mng02 = lv_mng02 + <fs_mdpsn>-mng01.
endloop. if lv_mng01 <> lv_mng02. endif. "最终执行记录
mdpsn[] = lt_cop_mdpsn[]. sort mdpsn. endif.
3.测试
3.1维护配置表
ZTMM0093_MRP_WRK

ZTMM0094_MRP_VND

3.2业务测试
子件8888002653重新运行MRP,T-CODE:MD41

查询子件子件8888002653 MRP运行后的库存需求清单,T-CODE:MD04

整车物料NL1G58420151001219对应子件8888002653获取的供应商编号为 8000005 (配置表ZTMM0094_MRP_VND记录)
ABAP-增强-MRP运行-根据工厂/父件/子件/供应商拆分采购申请的更多相关文章
- winform继承窗体,无法修改父窗体控件问题处理笔记
问题描述: 一个窗体集成父窗体,发现无法直接修改父窗体的控件,比如修改大小等,父窗体控件已经设置为public,如果做成一个dll被引用无此问题 特征: 不禁使父窗体控件,就算新加一个控件也会这样:鼠 ...
- SAP MM '独立/集中'等于1的MTS物料MRP运行后合并需求触发PR
SAP MM '独立/集中'等于1的MTS物料MRP运行后合并需求触发PR Test data 独立与集中: 1 (仅个别需求) STO 1, 这是一个公司间STO,从国内生产基本转入香港贸易公司, ...
- 关闭是否只查看安全传送的网页内容提示框 和 是否允许运行软件,如ActiveX控件和插件提示框
关闭是否只查看安全传送的网页内容提示框 最新编写 爬虫程序,运行程序后,电脑就总是出现下面这个提示框,一遍遍点"是"或"否"繁琐又麻烦.我看得有点不耐烦了.于是 ...
- maven(二) maven项目构建ssh工程(父工程与子模块的拆分与聚合)
前一节我们明白了maven是个什么玩意,这一节就来讲讲他的一个重要的应用场景,也就是通过maven将一个ssh项目分割为不同的几个部分独立开发,很重要,加油 --WH 一.maven父工程与子模块的拆 ...
- 转:jquery 父、子页面之间页面元素的获取,方法的调用
一.jQuery 父.子页面之间页面元素的获取,方法的调用: 1. 父页面获取子页面元素: 格式:$("#iframe的ID").contents().find("#if ...
- vue学习记录⑤(组件通信-父与子)
今天我们看一下组件通信. 经过前面几篇文章,我们已经可以构建出完整的单个组件,并利用路由使其串联起来访问了. 但这明显还是不够的.一个页面不可能就是个单组件,一般是由多个组件合成的.正因为如此,组件之 ...
- Jquery中父,子页面之间元素获取及方法调用
一.jquery 父.子页面之间页面元素的获取,方法的调用: 1. 父页面获取子页面元素: 格式:$("#iframe的ID").contents().find("#if ...
- jquery 父、子页面之间页面元素的获取,方法的调用
一.jquery 父.子页面之间页面元素的获取,方法的调用: 1. 父页面获取子页面元素: 格式:$("#iframe的ID").contents().find("#if ...
- 学习参考《父与子的编程之旅python【第二版】》高清中文版PDF+高清英文版PDF+源代码
对于初步接触编程语言的朋友,推荐看一看<父与子的编程之旅第2版>,对于完全编程零基础的很友好! 图文并茂,过多的文字堆垒很容易让人产生厌倦情绪,也更容易让人产生放弃的想法.使用了大量插图, ...
随机推荐
- 4.图像sensor的特性和驱动解析
修改 摄像头SDK中支持的sensor需要做的事 例如:ar0130 --> ov9712 1.修改加载load3518e脚本的参数 vi /etc/profile ./load3518e -i ...
- Microsoft Dynamics CRM 2011 配置好的IFD环境 怎么制作证书?
一.CRM2011 IFD怎么制作证书? 配置好的IFD环境里面:打开开始—运行 1.输入: mmc(微软管理控制台) 出现: 2. 出现: 3.添加/删除管理单元,如图: 4.添加证书 5. 6. ...
- 日期获取 net
项目中用到了,所以就写全了,供参考使用. DateTime dt=DateTime.Now;int weeknow = Convert.ToInt32(DateTime.Now.DayOfWeek); ...
- TFS错误-TF249053
前几天规划了下代码结构,改了很多东西后,台式机依然正常访问,但是笔记本一连接或者更改TFS相关资源就报错TF249053.报错点击后不影响正常使用,但是很郁闷.于是查了下资料如下. 错误原因: htt ...
- 微信小程序的视频教程
极客学院小程序视频教程: 链接:https://pan.baidu.com/s/1VpKnvnsn-T6Nd79bsi4ugg 密码:0ta9 小程序项目实战: 链接:https://pan.baid ...
- IIS6与IIS7在编程实现HTTPS绑定时的细微差别
本文章其实最主要信息是: 问题出在那个小小的*号上——IIS6中不支持通配符,第一部分为空时表示(All Unsigned),而IIS7中同时支持空或通配符的写法,如果为空则自动转为*:443:,我们 ...
- python学习笔记--装饰器
1.首先是一个很无聊的函数,实现了两个数的加法运算: def f(x,y): print x+y f(2,3) 输出结果也ok 5 2.可是这时候我们感觉输出结果太单一了点,想让代码的输出多一点看起来 ...
- IE浏览器中overflow:hidden无效,内层元素超出外层div的解决方法
原文地址:http://www.xin126.cn/show.asp?id=2624 在用css布局的时候,用IE浏览器(ie6.ie7.ie8)预览,有时候会出现内层元素(内部DIV.图片等)超出外 ...
- OSPF里几个特殊区域(stub、Totally stubby、NSSA、Totally NSSA)总结
网友总结: 简单的说,就是 stub过滤4,5类lsa,ABR会产生缺省的3类lsa,区域内不能引入外部路由 total stub过滤3,4,5类lsa,ABR会产生缺省的3类lsa,区域内不能引入外 ...
- [UE4]头文件循环依赖C++
有2个类:aaa和bbb. aaa.h已经#include了bbb.h,则bbb.h就不能#include aaa.h,但bbb.cpp可以#include aaa.h bbb.h已经#include ...