目前新需求:整车A下挂有委外总成件B,总成件B和子件E是层级BOM,且采购类型均为F,信息记录类型均为寄售,按照现在标准MRP逻辑,只能计算第一层级子件需求,无法运行出子件E的需求。

1.实现方式

 1.1自定义表

  ZTMM0093_MRP_WRK

  

  ZTMM0010_MAT_INF:接口-物料主数据明细表

 1.2增强点

  在获取BOM子件中进行增强:函数 GET_STPO 行 311 增加隐式增强点 ZIMP_BADI_MRP_BOM_HIERARCHY

  

  INCLUDE ZMMI0003_MRP_BOM_HIERARCHY程序代码:

 *&---------------------------------------------------------------------*
*& Include ZMMI0003_MRP_BOM_HIERARCHY
*&
*&---------------------------------------------------------------------*
*& Program Name: MRP运行-BOM层级子件
*& Date written: 2018-10-29
*& Author's name: ***
*& Business design:***
*& Last update: 2018-10-29
*& Project Name: ***ERP项目
*& Version: V1.0
*& Modify History:
*& Sketch: MRP运行-BOM层级子件
*&---------------------------------------------------------------------*
*& Variables: 变量
*& MDPSN 采购申请明细
*& MDPSX 订单需求明细(计划订单/生产订单/销售订单/采购订单)
*& MDNBX 订单需求每日汇总
*& CM61X WERKS/PLMOD/BANER/DISER/LIFKZ/TRMPL
*& CM61D MATNR/WERKS
*&---------------------------------------------------------------------*
*& 逻辑:
*& 1.获取工厂,判断配置信息
*& 2.获取BOM第一层级总成件是否含子件信息,
*& 3.判断总成件是否为委外件(查询ZTMM0010_MAT_INF 字段MAKEBUYINDICATOR=CSMT-A)
*& 4.若为委外总成件,则将总成下子件运行MRP
*& 5.子件需求日期 = MRP结果中总成件需求日期 - 总成件收货处理时间 - 子件加工时间(可配置);
*& 6.子件的交货日期 = 子件的需求日期 - 子件收货处理时间
*&---------------------------------------------------------------------*
constants:
lc_check type c value 'X',
lc_stlty type stpo-stlty value 'M',
lc_stlan type mast-stlan value '',
lc_stlal type mast-stlal value '',
lc_postp type stpo-postp value 'L',
lc_makebuyindicator type string value 'CSMT-A',
lc_capid type tc04-capid value 'PP01',
lc_beskz_f type string value 'F',
lc_mtart_zycl type string value 'ZYCL'.
data:
lv_werks like marc-werks,
lv_posnr type stpob-posnr,
lv_index type cszalt-index,
lv_i_matnr type csap_mbom-matnr,
lv_i_plant type csap_mbom-werks,
lv_i_usage type csap_mbom-stlan,
lv_i_alter type csap_mbom-stlal,
lv_i_datuv type datuv_bi,
lv_i_datub type datub_bi.
data:
ls_mrp like ztmm0093_mrp_wrk,
ls_wa type line of cs01_stpob_tab,
ls_matinf like ztmm0010_mat_inf,
ls_i_stpo type stpo_api02.
data:
lt_wa like table of stpob,
lt_addwa type table of cszalt,
lt_stb type table of stpo,
lt_e_stpo type table of stpo_api02.
field-symbols:
<fs_stpo> like stpo,
<fs_estpo> like stpo_api02,
<fs_cwa> like stpob,
<fs_cadd> like cszalt,
<fs_wa> like stpob,
<fs_addwa> like cszalt. read table wa into ls_wa index . "获取工厂
select single wrkan
into lv_werks
from stko
where stlnr = ls_wa-stlnr
and stlty = ls_wa-stlty. select single *
into ls_mrp
from ztmm0093_mrp_wrk
where werks = lv_werks
and fg_bomlevel = lc_check.
if sy-subrc = and ls_mrp-vl_tcode cs sy-tcode.
if ls_mrp-fg_exitdg = lc_check.
break-point.
endif. loop at wa assigning <fs_wa>.
clear:lt_stb,ls_matinf.
"判断是否委外总成件
select single
max( datum ) as datum
max( uzeit ) as uzeit
makebuyindicator
into corresponding fields of ls_matinf
from ztmm0010_mat_inf
where partbase = <fs_wa>-idnrk
group by makebuyindicator.
if ls_matinf-makebuyindicator = lc_makebuyindicator.
* "获取总成件BOM子件
* "BOM执行函数涉及嵌套问题,CK11N成本核算报错
* call function 'CS_BOM_EXPL_MAT_V2'
* exporting
* capid = lc_capid "PP01生产用途
* datuv = sy-datum
* ehndl = '1'
* emeng = <fs_wa>-menge
* mktls = 'X'
* mehrs = '' "分解多层BOM
* mmory = '1'
* mtnrv = <fs_wa>-idnrk
* stlan = '1' "BOM用途
* stpst = 0
* svwvo = 'X'
* werks = lv_werks
* tables
* stb = lt_stb
* exceptions
* alt_not_found = 1
* call_invalid = 2
* material_not_found = 3
* missing_authorization = 4
* no_bom_found = 5
* no_plant_data = 6
* no_suitable_bom_found = 7
* conversion_error = 8
* others = 9. clear:ls_i_stpo,lv_i_matnr,lv_i_plant,lv_i_usage,lv_i_alter,lv_i_datuv,lv_i_datub.
clear:lt_e_stpo,lt_e_stpo[]. lv_i_matnr = <fs_wa>-idnrk.
lv_i_plant = lv_werks.
lv_i_usage = lc_stlan.
"lv_i_alter = alter.
lv_i_datuv = datuv.
lv_i_datub = datub. "获取总成件BOM清单
call function 'CSAP_MAT_BOM_ITEM_SELECT'
exporting
i_stpo = ls_i_stpo
material = lv_i_matnr
plant = lv_i_plant
bom_usage = lv_i_usage
alternative = lv_i_alter
fl_material_check = lc_check
fl_foreign_key_check = lc_check
valid_from = lv_i_datuv
valid_to = lv_i_datub
tables
t_stpo = lt_e_stpo
exceptions
error =
others = .
if sy-subrc <> .
* Implement suitable error handling here
else.
loop at lt_e_stpo assigning <fs_estpo>.
call function 'CONVERSION_EXIT_ALPHA_INPUT'
exporting
input = <fs_estpo>-component
importing
output = <fs_estpo>-component.
endloop.
endif. select *
into corresponding fields of table lt_stb
from mast as a inner join stpo as b
on a~stlnr = b~stlnr
where a~stlan = lc_stlan
and a~stlal = lc_stlal
and a~werks = lv_werks
and a~matnr = <fs_wa>-idnrk
and b~stlty = lc_stlty
and b~lkenz = space
and b~datuv <= sy-datum
and b~postp = lc_postp. loop at lt_stb assigning <fs_stpo>.
read table lt_e_stpo assigning <fs_estpo>
with key item_guid = <fs_stpo>-guidx.
if sy-subrc <> .
continue.
endif. select single count(*)
from mara inner join marc
on mara~matnr = marc~matnr
where mara~matnr = <fs_stpo>-idnrk
and mara~mtart = lc_mtart_zycl
and marc~beskz = lc_beskz_f.
if sy-subrc = .
append initial line to lt_wa assigning <fs_cwa>.
move-corresponding <fs_wa> to <fs_cwa>.
<fs_cwa>-idnrk = <fs_stpo>-idnrk.
<fs_cwa>-menge = <fs_stpo>-menge.
<fs_cwa>-meins = <fs_stpo>-meins.
<fs_cwa>-posnr = space.
unassign <fs_cwa>. read table add_wa assigning <fs_addwa>
with key stlkn = <fs_wa>-stlkn
stpoz = <fs_wa>-stpoz.
if sy-subrc = .
append initial line to lt_addwa assigning <fs_cadd>.
move-corresponding <fs_addwa> to <fs_cadd>.
<fs_cadd>-index = space.
unassign:<fs_addwa>,<fs_cadd>.
endif.
endif.
endloop.
endif.
endloop. if lt_wa[] is not initial.
clear:lv_index,lv_posnr. sort wa by posnr descending.
sort add_wa by index descending. read table wa assigning <fs_wa> index .
if sy-subrc = .
lv_posnr = <fs_wa>-posnr.
endif. read table add_wa assigning <fs_addwa> index .
if sy-subrc = .
lv_index = <fs_addwa>-index.
endif. loop at lt_wa assigning <fs_cwa>
where posnr = space.
lv_posnr = lv_posnr + . call function 'CONVERSION_EXIT_ALPHA_INPUT'
exporting
input = lv_posnr
importing
output = lv_posnr . <fs_cwa>-posnr = lv_posnr.
endloop. loop at lt_addwa assigning <fs_cadd>
where index = space.
lv_index = lv_index + .
<fs_cadd>-index = lv_index.
endloop. append lines of lt_wa[] to wa[].
append lines of lt_addwa[] to add_wa[].
endif. endif.

2.系统测试

 2.1基础数据

  

  整车物料:TWL-ZZCH-003

  总成件:TWL0824(包含子件TWL0825)

  

  总成件TWL0824为委外件(类型CSMT-A)

  

  配置表ZTMM0093_MRP_WRK :工厂3302启用BOM层级子件运算,对应的事务码:MD41/MD42/CK11N

 2.2测试-MRP运行

  创建独立需求MD61:

  

  MRP运行MD41:

  

  查看子件 TWL0825 需求清单MD04:

  

  查看整车TWL-ZZCH-003成本核算CK11N:总成件TWL0824与其子件TWL0825都进行核算

ABAP-增强-层级BOM-AB件业务的更多相关文章

  1. 重新想象 Windows 8.1 Store Apps (77) - 控件增强: 文本类控件的增强, 部分控件增加了 Header 属性和 HeaderTemplate 属性, 部分控件增加了 PlaceholderText 属性

    [源码下载] 重新想象 Windows 8.1 Store Apps (77) - 控件增强: 文本类控件的增强, 部分控件增加了 Header 属性和 HeaderTemplate 属性, 部分控件 ...

  2. 通用数据水平层级选择控件v0.70升级版使其支持jQuery v1.9.1

    升级原因:作者原来脚本支持的jquery版本太低了,查找了下资料,使得它能支持最新版本的jquery 备注说明:脚本代码源作者跟源文出处很难找,只能在此特感谢他的分享. 更新部分: 1.新版本不再支持 ...

  3. Android 可单选多选的任意层级树形控件

    花了几天研究了下鸿扬大神的博客<Android打造任意层级树形控件,考验你的数据结构和设计>,再结合公司项目改造改造,现在做个笔记. 先看看Demo的实现效果.首先看的是多选效果 再看看单 ...

  4. Android 打造任意层级树形控件 考验你的数据结构和设计

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/40212367,本文出自:[张鸿洋的博客] 1.概述 大家在项目中或多或少的可能会 ...

  5. Android 打造任意层级树形控件 考验你的数据结构和设计

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/40212367,本文出自:[张鸿洋的博客] 1.概述 大家在项目中或多或少的可能会 ...

  6. Android 打造随意层级树形控件 考验你的数据结构和设计

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/40212367,本文出自:[张鸿洋的博客] 1.概述 大家在项目中或多或少的可能会 ...

  7. 浏览器自动化的一些体会6 增强的webBrowser控件

    这里谈两点 1.支持代理服务器切换 一种方法是修改注册表,不是太好的做法,而且,只能改全局设置,不能改局部(比如只让当前的webBrowser控件使用代理,而其他应用不用代理) 另外一个较好的方法,示 ...

  8. DevExpress WinForms v19.1新版亮点:Tree List等控件性能增强

    行业领先的.NET界面控件DevExpress v19.1终于正式发布,本站将以连载的形式介绍各版本新增内容.在本系列文章中将为大家介绍DevExpress WinForms v19.1中新增的一些控 ...

  9. BW:如何加载和生成自定义的层次结构,在不使用平面文件的SAP业务信息仓库

    介绍 通常情况下,报告需要在一个类似树的结构来显示数据.通过启用此特性在SAP BW层次结构.高级数据显示的层次结构的顶层节点.更详细的数据可以向下钻取到的层次结构中的下级节点的可视化. 考虑一个例子 ...

随机推荐

  1. java调用.net的webservice

    目录(?)[-] 一参考文献 二概述 三实例 注意点   一.参考文献 1. http://www.cnblogs.com/xuqifa100/archive/2007/12/13/993926.ht ...

  2. nyoj 光棍的yy

    655-光棍的yy 内存限制:64MB 时间限制:1000ms Special Judge: Noaccepted:2 submit:3 题目描述: yy经常遇见一个奇怪的事情,每当他看时间的时候总会 ...

  3. tomcat源码阅读之SingleThreadModel

    一.接口简介: 实现了SingleThreadModel接口的servlet类只能保证在同一时刻,只有一个线程执行该servlet实例的service方法,在tomcat实现中会创建多个servlet ...

  4. 教你如何阅读Oracle数据库官方文档

    < Ask Oracle官方原创 > Oracle 官方文档 数量庞大,而且往往没有侧重点,让oracle新手看起来很费力.但是,仍有很多Oracle使用者认为任何oracle学习资料都比 ...

  5. Visual Studio2010不能安装Silverlight4_Tools,提示语言不一致

    天在装Silverlight4_Tools时出现“必须先安装与 Silverlight Tools 4 语言版本相一致的 Visual Studio 2010.Visual Web Developer ...

  6. 打开Visual Studio 2012的解决方案 连接 Dynamics CRM 2011 的Connect to Dynamics CRM Server 在其工具下没有显示

    一.使用TFS 代码管理,发现Visual Studio 2012 菜单栏 工具下的Connect to Dynamics CRM Server 没有显示. 平常打开VS下的工具都会出现Connect ...

  7. 【android】Android ADB 端口占用问题解决方案

    解决ADB端口占用问题 方式一5037为adb默认端口,若5037端口被占用,查看占用端口的进程PIDC:\Users\wwx229495>netstat -aon|findstr 5037  ...

  8. java 装饰设计模式模式

    对已有功能进行增强 示例 已有的类    调用 增强后的类 调用  思考? 为什么要这么做呢? SuperPerson 继承 Person 可以达到同样的效果. 继承的写法,其中MyBuffer... ...

  9. java 抽象类 以及模块方法设计模式,接口

    模块方法设计模式: 可以实现多接口 接口可以继承接口 接口与接口之间可以多继承.类与类之间不行

  10. linux svn安装(转载)

    第一章 安装 1. 采用源文件编译安装.源文件共两个,为:subversion-1.6.1.tar.gz (subversion 源文件)subversion-deps-1.6.1.tar.gz (s ...