mard里记载的是当前库存的数量,但是期间并不一定是当月。比如你物料4月一整月都没有库存数量变化(没收没发),那么5月初你看mard里的条目期间数还是4月而非5月。
当 某个期间发生货物移动的时候,系统在更新mard数据的之前(这个表是实时更新的),会检查此笔业务过账期间和mard里对应记录的期间是否一致,也就是 看这是不是本期间第一笔移动。如果是,copy表mard里对应记录到mardh,然后把mard记录改成当期(也可能是先删后建),然后再作更新数量数 据的操作。如果不是第一笔记录,也就是mard期间和mseg期间一致,则不作copy记录只更新mard数量。
这样处理貌似减少了冗余数据,不过给编程取历史库存增加了很大的工作量,个人觉得不算明智之举。
库存方面的表
mbew mbewh
mard--查主库存 mardh--主库存历史记录
mslb--特殊库存O mkol--特殊库存K/M mska--特殊库存E msku--特殊库存V/W
mcha mchb
无论移动平均价(Moving Average Price MAP)是否有更改,MBEWH表都会更新。
MBEWH表记录了MBEW表的历史数据,而MBEW是物料评估(Material Valuation)表。
MBEW表记录了当前的物料价格,当物料价格被重估(比如更新物料当前移动平均价)时,SAP系统会将当前价格写入MBEWH表中,而将新价格写入MBEW中。
当前的价格总是记录在表MBEW中,当某一期间(Period)的第一项操作更新了物料数量或价值,则SAP系统会向表MBEWH写入一条记录,以第一项操作之前的余额、价格控制为标准。
在MBEWH表中代表上一期间记录的数字储存在“当前期间”LFMON字段中。
例:当在3期间发生第一笔过账(比如收货),则系统会在MBEWH表中的“当前期间”LFMON字段写入数字2,数量和价值更新到“总库存(Total Stock)”和“总价值(Total Value)”字段,并且等于发生在3期间的数量和价值。
若在连续几个期间内未发生过账,则表MBEWH不会为每个期间创建记录。
表MBEW、MBEWH与MCHBH的区别:
MBEW:查看当前账期的移动平均价
MBEWH:查看历史账期的移动平均价
表MBEWH记录了所有的库存价值,而表MCHBH则只代表了未限制库存的价值。
如何查看当前移动平均价:
事务代码:S_P00_07000139
每次物料重估后的最新移动平均价。
用户/客户有几百种“历史库存报表需求”的理由,而且是可以查任意时间的。
可惜的是,SAP系统并没有现成的所谓的History Stock,其实也没有必要,这违背了数据库设计的冗余规则。
我看到过的SAP系统中关于“历史库存报表”或“时点库存报表”的方案无外乎有两种:
一、使用作业的办法,定期(一般是每天)抓取作业执行时刻的库存信息,存储在自定义表格中;
二,查询业务单据或物料凭证的明细,再累计出待查时刻的余额。
方法一的好处在于,查询历史数据速度较快。但是,这相当的占用存储资源;
其二,我们不能保证这定期的作业的确定性,硬件维护、系统性能都可能使这预定的“时刻”出现偏差,如果某一次没能抓取该时刻的库存,对整个报表来说,是数据的缺失;
其三,最初设计的抓取数据的方式、方法,极有可能在新需求的压力下被修改,或者被推翻,这仍然不能满足需要。
方法二的好处在于,它解决了上一个方案的第二和第三个问题。不过,这个报表运行起来就像回到了石器时代。这对于业务数据量大的SAP系统的影响是致命的,因为它不但失去了
用户的信任,更可怕的是它会动摇管理层的信心。
或许有第三个方案,有人会想到信息记录(LIS),SAP有一大堆积于LIS的库存分析报表,不过,用过的人都知道,它极不可信。这种报表成就了日常对数的用户与支持者或实施者
之间旷日持久的拉锯战,虽然OSS里面有若干针对LIS报表的修正方案。
我在一次对数的过程中尝试了第四种方案,那就是带H的月累表:MARCH、MARDH、MBEWH等。分析了一下这些表格的更新逻辑,它不是将每一种物料每一个期间都更新到表中的。
然后,摸索出一条使用标准程序来获得历史库存的途径。相关TCODE是,MB5B、MB51,不使用MB5T。

文章详细阐述了SAP系统中库存管理的相关表格,如MBEW、MBEWH和MCHBH,以及它们在处理历史库存、移动平均价和库存更新时的逻辑。讨论了查看和获取历史库存的多种方法,包括定期抓取库存信息和查询业务单据,以及这两种方法的优缺点。同时,提到了库存报表的需求和SAP系统对此的应对策略。
最低0.47元/天 解锁文章
454

被折叠的 条评论
为什么被折叠?



