目前新需求:整车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. 实现多线程的方式之实现Callable接口

    package com.hls.juc; import java.util.concurrent.Callable;import java.util.concurrent.ExecutionExcep ...

  2. python 网络编程要点

    From http://www.zhihu.com/question/19854853 Python网络编程是一个很大的范畴,个人感觉需要掌握的点有:1. 如何使用Python来创建socket, 如 ...

  3. RabbitMQ 知识点

    mac下 rabbitmq 安装: brew命令 brew install rabbitmq 注意: rabbitmq的安装目录: /usr/local/Cellar/rabbitmq/3.6.6 r ...

  4. FormData 知识点

    通过FormData对象可以组装一组用 XMLHttpRequest发送请求的键/值对.它可以更灵活方便的发送表单数据,因此可以独立于表单使用. 如果你把表单的编码类型设置为multipart/for ...

  5. css 通用兄弟选择器( ~ )

    stylus设置兄弟元素样式: 鼠标浮动在 .video-li 元素上时,.video-li 兄弟中 .video-info 下的 .word 显示. .video-li &:hover ~ ...

  6. gitlab怎么删除创建的项目

    在gitlab新建了一个项目,怎么将此项目删除呢?打开这个工程,点击右上角的“settings”拉到最下面,有个show them to me,点击~在下拉选项的最后,有个remove框,点击即可以彻 ...

  7. POJ2392 Space Elevator

    题目:http://poj.org/problem?id=2392 一定要先按高度限制由小到大排序! 不然就相当于指定了一个累加的顺序,在顺序中是不能做到“只放后面的不放前面的”这一点的! 数组是四十 ...

  8. JS判断IP的正则表达式

    <html> <head> <title>最简洁的IP判断正则表达式</title> <meta http-equiv="Content ...

  9. JSP中的MVC

    如下图

  10. spring mvc 工作原理

    SpringMVC的工作原理图: SpringMVC流程 1.  用户发送请求至前端控制器DispatcherServlet. 2.  DispatcherServlet收到请求调用HandlerMa ...