目前新需求:整车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. oracle 以及 sql server mysql 空值默认值修改

    在SQL Server Oracle MySQL当数据库中查出某值为NULL怎么办? 1.MSSQL: ISNULL() 语法 ISNULL ( check_expression , replacem ...

  2. 如何构建 MVC&AJax&JSon示例

    背景: 博客中将构建一个小示例,用于演示在ASP.NET MVC4项目中,如何使用JQuery Ajax. 直接查看JSon部分 步骤: 1,添加控制器(HomeController)和动作方法(In ...

  3. 【转】每天一个linux命令(12):more命令

    原文网址:http://www.cnblogs.com/peida/archive/2012/11/02/2750588.html more命令,功能类似 cat ,cat命令是整个文件的内容从上到下 ...

  4. AppBox下调用HighCharts画曲线

    例子见本博文件下载. 注意                xAxis: {                    categories: [<%= xAxisCategories %>], ...

  5. java成员内部类

    java成员内部类依赖于外部类而存在,故创建内部类需要首先创建其关联的外部类. public class Test { public static void main(String args[]) { ...

  6. golang panic的捕获

    panic发生时, 会导致进程挂掉.为了处理panic, 可以使用recover捕获,然后处理. 下面以下标引用越界问题为例进行说明. 正常情况下,代码中如果出现下标越界,会直接触发panic, 导致 ...

  7. gcc gdb调试 (三)

    编写代码过程中少不了调试.在windows下面,我们有visual studio工具.在linux下面呢,实际上除了gdb工具之外,你没有别的选择.那么,怎么用gdb进行调试呢?我们可以一步一步来试试 ...

  8. <<精通正在表达式>> 书评

     IT产业新技术日新月异,令人目不暇给,然而在这其中,真正称得上伟大东西的却寥寥无几.1998年,被誉为“软件世界的爱迪生”,发明了BSD. TCP/IP.csh.vi和NFS的SUN首席科学家Bil ...

  9. jquery easyUI 时间格式

    今天用到了jquery easyUI datetime-box, 显示的是英文格式的,作为国人看着很不爽, 看了下度娘,原来引入个/locale/easyui-lang-zh_CN.js这个js 就o ...

  10. SpringMVC的注解方式配置

    SpringMVC支持使用注解方式配置,比配置文件方式更加灵活易用,是SpringMVC使用的主流模式. 1.在配置文件中开启SpringMVC的注解 <!-- 开启包扫描 --> < ...