Farseer

导航

Axapta物流模块深度历险(四)

Inventory Closing
这篇文章中的部分内容Axapta的标准教程中没有介绍,是我跟踪代码后的理解,如果有哥们不幸Google到这篇文章的话,请加以验证,俺也不能确保这篇文章的内容是正确的,虽然俺“自以为是”。
为什么要closing?
如果在库房维组中没有指定采用标准单价,在进行交易时,Axapta总是采用平均单价,计算公式如下:
1.不包含physical值(可以在库房维组设定的地方指定,Include Physical Value不勾选),则为
Total Financial Cost Amount / Total Posted Quantity.
如果查看数据库表的话,实际上就是用InventSum(这张表存放料品在各个库房维组的当前onhand信息)中的postedValue / postedQty.
2.包含physical值(勾选库房维组中的Include Physical Value)
(Total Financial Cost Amount+Physical Value)/(postedQty+Received -Deducted)
InventSum这张表在物流模块中至关重要,理解了这张表每个字段的含义对理解其他的内容会有很大的帮助,以下是我的理解:
Axapta的库存值分为physical和financial,就是说做了财务过账和没有做财务过账两种。
1.postedQty:已经做了财务过账的数量,这时对应与InventTrans中的交易记录为Purchased(Receipt)或者Sold(Issue)
2.postedValue:已经做了财务过账的值
3.physicalInvent:当前库房某个维组的料品数量,这些料品中有的是已经财务过账的,有的没有财务过账
4.availphysical:当前库房某个维组的可用的料品数量,这些料品中有的是已经财务过账的,有的没有财务过账
        3和4之间的差别在于在库房中的料品数量不一定都可用,因为有些料品可能针对某些销售订单做了物理预留,这部分数量将属于不可用数量。
5.physicalValue:这个字段存放的是已经在库房中但还没有财务过账的值。
显然这样的计算方式并不能代表料品的真实价格。
Axapta通过Inventory Closing来调整交易记录并生成凭证分录,在Inventrans表(所有的库房交易都会记录在该表中)中用字段CostAmountAdjustment来记录调整的金额,在界面上显示的交易对应的cost amount就是用过账金额costamountposted减去该金额来表示,具体的调整信息在表inventsettlement中保存,生成的分录在ledgertrans中(其实所有过账信息都会记录在ledgertrans中).
在Inventory Model Group中指定了五种Inventory Model,也是在Inventory Closing时所可能遵从的逻辑。
1.FIFO(First In First Out)
根据库房交易的时间,从最早的时间开始用料品的收货冲抵发货。
2006年1月1日,用10块钱购买了一个料品
2006年1月2日,用15块钱购买了另一个料品
这时平均单价为(10+15)/2 = 12.50
2006年1月3日,卖掉了一个其中一个料品,在发生交易的时候,采用的价格是12.5,在库房closing的时候,按照FIFO的逻辑,这次交易的成本将被调整为10块钱。
2.LIFO(Last In First Out)  LIFO Date
根据库房交易的时间,从最迟的时间开始用料品的收货冲抵发货。
LIFO和LIFO Date的区别是:LIFO不考虑交易时间的因素,发生在后面的收货可以冲抵前面的发货,而LIFO Date考虑交易时间的因素,必须用前面的收货冲抵后面的发货,LIFO Date不允许物理负库存。
2006年1月10日,用10块钱购买了一个料品
2006年1月12日,用15块钱购买了另一个料品
2006年1月8日,卖了其中一个料品
如果采用LIFO,则用2006年1月12日的收货冲抵发货,价格为15块钱。
如果采用LIFO Date,由于收入在支出后发生,不能用这个收货冲抵,只能用1月8日之前的收货冲抵。
3.Weighted Average & Date Weighted Average  加权平均
根据发货交易发生的时间,计算当时的料品成本,料品的收货按比例冲抵出货。
冲抵的最小数量可以在两个地方设置:
1.Inventory Management Parameter->General
2.Item Form->Other
其中如果2设置了,会覆盖1的设置,如果1,2均未设置,则系统默认为零。
若2006年1月10日,用10块钱购买了一个料品
若2006年1月12日,用15块钱购买了另一个料品
若2006年1月15日,以8块钱的价格下了采购订单,采购一个料品,入库日期为2006年1月20日
按照Weighted Average :
若2006年1月11日卖出料品,则成本单价为10块钱
若2006年1月13日卖出料品,则成本单价为12.5块钱    (10+15)/2
若2006年1月16日卖出料品,则成本单价为12.5块钱    (10+15)/2
按照Date Weighted Average
若2006年1月11日卖出料品,则成本单价为10块钱
若2006年1月13日卖出料品,则成本单价为12.5块钱    (10+15)/2
若2006年1月16日卖出料品,则成本单价为11块钱       (10+15+8)/3
由上例子可以看出,Weighted Average和Date Weighted Average的区别在于后者在计算成本单价的时候考虑了发货日期时还没有入库的产品。
上面是从业务上介绍的库房关帐逻辑,具体的计算方式接下来用分析代码的方式阐述。

posted on 2006-08-01 08:18  佛西亚  阅读(1079)  评论(2编辑  收藏  举报