主页 > 超兔理念 > 加权平均成本计算中,“双〇”问题的解决方案

加权平均成本计算中,“双〇”问题的解决方案

加权平均或移动加权平均,是一种常见的动态成本算法。用每次采购入库成本和在库成本加权平均,更新为新成本。加权平均成本计算公式:(入库产品的成本+在库产品的成本)/(入库产品数量+在库产品数量)。

在此算法框架下,有一些特例。比如:当库存=0时,产品成本价是否也应该=0 ?

我们来看情况1:如果产品成本价=0,出现了无采购价格的入库时(比如退货入库),会造成入库成本计算=0的问题。不管是基于算法还是基于常识,我们都很容易发现这个结论并不妥当。但是加权平均和先进先出不同,并不依赖完整的历史出入库流水去获取退货产品的成本价;所以在这种情况下(库存=0,产品单价不能等于0,而是应该保持加权计算为0之前的非零数值),这样即可合理解决非采购入库的入库成本计算问题。

继续看情况2:按照1的推理分析,库存=0时,成本价不应等于0。这时出现另一个特例,采购入库供应商赠送的产品(采购单价=0),这时成本应该等于多少?这种情况就是“双〇”问题:加权平均产品,在库存为0时,入库0成本的产品。注意,这种情况下没有完美解。两种算法:

算法1:产品成本加权平均计算=0;本次入库产生的加权平均成本正确。但如果这时出现退货入库(无成本价来源的入库),则会造成退货入库产品成本也=0(错误);

算法2:产品成本保持最后的非0值,和本次入库的加权平均计算冲突(错误)。

能不能找出一个彻底的方法解决呢?当然可以,只要在加权平均算法基础上增加对历史出入库流水的数据调用,永远避免出现:无成本来源的入库,即可解决这个问题。但是这样一来,加权平均算法的逻辑便捷就会消失。

根据各种情况出现的概率,把错误出现概率最低的情况排除掉,然后选定方案。虽然不完美,但是经过这种分析和比较,咱们距离完美又接近了一步。一如微积分中引入的极限概念(如果我们想把全体实数视为一条连续的线,这些数字都必须是实数。尽管它们可能只是现实的近似值,但却行之有效),引入一个假定条件,明确问题的边界,把出错概率降至最低,也是业务逻辑中常用的分析方法。

最后的结论,加权平均计算为0的情况,分析如下:

即:在库成本=0(库存=0)且 入库成本=0(采购单价/成本=0),双0逻辑。

处理方法,目前分为两类:

1)采购入库、直接入库时,直接更新产品表成本字段=0;

2)其他类型:装配入库、sku转化入库、订单退货入库等,不更新产品表成本字段(保持原值)。