SAP MM 进销存报表优化小记
SAP MM 进销存报表优化小记
笔者刚刚加入SY项目,就接到了SY集团上海总部SAP运维部门负责人的工作分配,说是有一只进销存报表,需要做一个优化,可能是需要重新设计重新开发。
笔者研究了他们现行进销存报表,也与内部顾问了解了一下这个报表的一些情况,得知该报表有2个硬伤,第一个是性能超级慢,基本不堪使用,查询日期范围,即使是昨天到今天2天,报表依旧会跑死,报ABAP Runtime Error;第二个是期末库存金额与财务科目余额表里的库存金额对不上。性能慢是因为报表功能过于复杂,从报表第一版程序到现在,被改了无数次,增加了很多逻辑;既要能按批次来查询进销存,还要能按照storage location来查询;既要查询库存数量,还要计算金额,面积;而其面积的计算,又涉及到物料主数据和批次主数据里的classification视图数据;加上客户系统里的工厂代码超过40个,日积月累,货物移动方面的数据量巨大。诸多原因导致该报表处于被弃用的状态,而交给我的任务是救活这张报表!
为了实现这个优化,找到性能慢的原因以及库存余额与科目余额表不一致的问题,笔者找了开发同事帮忙分析代码,发现其性能慢在查询批次进销存数据的时候,耗时太多;同时,抓取期初库存余额的时候,仅仅考虑到了货物移动带来的库存价值的变化,却未能考虑到非货物移动比如修改物料成本价,比如发票校验导致的库存价值的变化。这是导致库存余额跟科目表余额差异的原因。
找到了原因,笔者开始了报表优化的设计。把报表功能缩小,不再支持按批次进销存查询,只在工厂级别(不考虑storage location级别)的进销存;同时采用顺推方式得到期末余额,现根据MBEWH/MSEG/MKPF/BSIM表里抓取到期初余额,然后抓取查询日期范围内货物移动以及其它事务代码导致的库存变化数据,计算出期末余额。特别去BSIM表里抓取到非货物移动导致的库存价值变化的数据,笔者总结了,需要去BSIM表里抓取凭证类型为ML/PR/RE等的财务凭证里的金额,按借方和贷方汇总,计入指定查询日期范围内货物移动的库存差异金额栏位,这个栏位参与计算期末余额。
- Document type=ML (ML结算)
Document number: 2100000186
看BKPF数据,
没有物料凭证号的。
- Document type: PR (价格更改), 财务凭证号:2200000087
看BKPF表数据,
也是没有物料凭证号的。
3,Document type: RE(发票总额),2500000049
看财务凭证,是一张发票校验对应的财务凭证,有一笔库存差异计入了库存科目里,如下图:
这种发票后2张后续的财务凭证,
看物料分类帐数据,凭证号:1005446306
就一个物料有库存价值修改的。而物料分类帐凭证,是不在BSIM里出现的。
也就是说,如果一张发票校验,因为价格差异导致库存变动的话,它对应的财务凭证会出现在BSIM表里。
同时笔者上网查询资料得知,很多项目里,都因为没有考虑到这BSIM表里这三种财务凭证里的金额,导致进销存报表余额与科目余额表数据不一致。看这样子这是项目实践中常见问题之一。
相信这次对症下药的报表优化,能取得成功。
2018-6-18 写于无锡市新吴区