现在的位置: 首页 > 综合 > 正文

订单追溯程序

2013年08月19日 ⁄ 综合 ⁄ 共 1767字 ⁄ 字号 评论关闭

这个程序怎么说了,正常的项目上绝对不会出现的。明明是按库存生产却要做一个排产的报表,把订单一一追溯,做成按单生产的效果。起初对PP完全不懂,做完这个程序,也了解了那么一点。不过此程序也还在测试中,问题一堆,是极为浓缩版的排产。

1. 报表功能

说是报表其实已经超越了报表的范围,可以将每一个销售订单或者生产订单产生的需求列出来,占用了多少可用可用库存,要计划生产多少。计划交货的日期等等。如果生产完了之后报表还要把相应的需求删除掉!并把对应的生产订单和之前产生需求的订单关联起来!乍听起来似乎此报表十分强大,不知道又没人做过类似的程序。下面是做此次程序学到的东西。

2 销售订单需求

如果让我把每一个销售订单和生产订单产生的需求记录下来,这个程序就太夸张了。对于销售订单的需求在VBBE中会有记录,一个销售订单计划行确认了多少都存在vbbe中,如果创建了交货单之后此需求便会删除。所以根据销售订单的数量和vbbe中的数量,相减即可。

3. 生产订单需求

生产订单需求全部存在RESB中,不过有些是以计划订单的形式存在,有些是以生产订单。计划订单对应的是BOM下层的物料。不能直接用,因为下层物料的需求会合并。这个时候需要BOM展开函数去求。

4.可用库存

可用库存之前业务顾问给了我一个逻辑,我发现此逻辑非常复杂!甚至把生产订单还作为可用库存。简而言之就是用CO09中的累积ATP数量作为可用库存,其实可以用函数求出。一个非常强大的函数,参数之多令人发指。AVAILABILITY_CHECK。

5. 安全库存

安全库存从表MDKP中读取,PLWRK是工厂,EISBE为安全库存。

6. 下层需求计算

下层需求的计算是通过上层物料的计划生产数量然后按照BOM展开的比率依次展开,BOM展开用的函数。CS_BOM_EXPL_MAT_V2可以展开BOM,并且展开之后他是依次向下展开的,这样算比例的时候非常好计算。

LOOP AT lt_stp INTO ls_stp.
    l_index = sy-tabix.
"第一层要乘以相应的数量
IF ls_stp-stufe = 1.
      ls_stp-menge = u_number * ls_stp-menge.
ENDIF.
IF ls_stp-stufe > ls_last_stp-stufe AND ls_stp-stufe 1.
      ls_stp-menge = ls_stp-menge * ls_last_stp-menge.
ENDIF.
    ls_last_stp = ls_stp.
MODIFY lt_stp FROM ls_stp INDEX l_index.
ENDLOOP.

7. 删除生产订单

排产完了如果删除了之前的生产订单,我的自建表里关系还维护着。于是又做了一个增强,SMOD中的PPCO0001,它在生产订单保存时会做检查,我写了一段代码在保存生产订单时判断此订单是否被删除,如果被删除则删除相应表里的记录。

8. 感想

由于做此程序的时候需求是随着我做程序不断的加深,所以程序被改的很乱,以至于代码看起来非常丑陋。做此程序我有许多感想,一个ABAPER一定要非常了解业务才行。此报表我第一次做客户根本不满意,因为换了一个业务顾问,需求文档都没有。我猜着需求去做的,怎么可能做的出来了。当然这也是开发和业务容易吵架的一个地方,业务顾问就没有讲清楚,或者自己都没有想清楚,就让开发去做,怎么可能做的让客户满意。最后责任谁来承担了?我相信很多项目上都会碰到这个问题。这个一定需要有明确的需求文档,屏幕有几个屏幕,每一个字段在不同输入下有什么效果。这个程序的需求文档就没有说,我每次总是让顾问测试完了,按他说的改。对于简单的需求还好,一旦复杂,改起来非常浪费时间。两个team吵架也在所难免。

9. 其他有关此程序

创建和修改生产订单 http://blog.csdn.net/donkey2004112103/archive/2009/11/14/4811158.aspx

读取生产订单状态 http://blog.csdn.net/donkey2004112103/archive/2009/11/14/4811126.aspx

性能调优 http://blog.csdn.net/donkey2004112103/archive/2009/11/12/4801467.aspx

抱歉!评论已关闭.