目前新需求:整车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. .net 拆分字符串成数数组 包含使用空格 逗号 回车 换行符等

    简单的代码如下: public static string[] GetProductList(string inputstring)        {            char[] split ...

  2. 在函数内部定义的函数 this 指向 undefined

    在函数内部定义的函数 this 指向 undefined 以下这个 this 就是指向 undefined. 但在非 strict 模式下是指向 window <script> 'use ...

  3. 【转】每天一个linux命令(52):ifconfig命令

    原文网址:http://www.cnblogs.com/peida/archive/2013/02/27/2934525.html 许多windows非常熟悉ipconfig命令行工具,它被用来获取网 ...

  4. java 多线程之:yield() 方法

    yield()介绍 yield()的作用是让步.它能让当前线程由"运行状态"进入到"就绪状态",从而让其它具有相同优先级的等待线程获取执行权:但是,并不能保证在 ...

  5. go get中的...

    go get命令是go自带的包下载工具. 如果配置了GOPATH,下载的文件放置于GOPATH/src下面 例如 $ go get github.com/garyburd/redigo/redis $ ...

  6. axis2开发webservice总结

    需求环境:对接方公司提供wsdl文件,我方按照该wsdl文件开发服务端. 配置axis2开发环境,网上教程很多,不再啰嗦.环境搭好后执行wsdl2java -uri file:///C:/Users/ ...

  7. vmware :Ubuntu 12.04添加新硬盘

    http://blog.csdn.net/hanpengyu/article/details/7475645 一.VMware新增磁盘的设置步骤 (建议:在设置虚拟的时候,不要运行虚拟机的系统,不然添 ...

  8. sql 判断 数据库 表 字段 是否存在

    select * From master.dbo.sysdatabases where name='数据库名'select * from sysobjects where id = object_id ...

  9. 【Hibernate学习笔记-6.1】无连接表的N-1关联(单向)

    作者:ssslinppp       1. 摘要 主要讲解N-1关系表的设计,N:从表,1:主表: 从表(N)中使用外键关联到主表(1),单向的: 场景: 许多人(N)可以住在同一个地方(1),知道人 ...

  10. spring boot学习(3) SpringBoot 之MVC 支持

    第一节:@RequestMapping 配置url 映射   第二节:@Controller 处理http 请求 转发到一个页面,以前是转发到jsp页面,现在使用freemarker: 在pom.xm ...