加权平均成本计算中,“双O”问题的解决方案
编辑导语:加权平均是一种常见的动态成本算法,在它的算法框架下,当库存=0时,可能会造成“双O”问题,这种情况下要怎么办呢?本文作者就这个问题进行分析,提出了解决办法,一起来看一下吧。
加权平均或移动加权平均,是一种常见的动态成本算法。用每次采购入库成本和在库成本加权平均,更新为新成本。加权平均成本计算公式:
(入库产品的成本+在库产品的成本)/(入库产品数量+在库产品数量)
在此算法框架下,有一些特例。比如:当库存=0时,产品成本价是否也应该=0 ?
情况1
如果产品成本价=0,出现了无采购价格的入库时(比如退货入库),会造成入库成本计算=0的问题。
不管是基于算法还是基于常识,我们都很容易发现这个结论并不妥当。但是加权平均和先进先出不同,并不依赖完整的历史出入库流水去获取退货产品的成本价。
所以在这种情况下(库存=0,产品单价不能等于0,而是应该保持加权计算为0之前的非零数值),这样即可合理解决非采购入库的入库成本计算问题。
情况2
按照1的推理分析,库存=0时,成本价不应等于0。这时出现另一个特例,采购入库供应商赠送的产品(采购单价=0),这时成本应该等于多少?这种情况就是“双O”问题——加权平均产品,在库存为0时,入库0成本的产品。
注意,这种情况下没有完美解。两种算法:
- 产品成本加权平均计算=0,本次入库产生的加权平均成本正确。但如果这时出现退货入库(无成本价来源的入库),则会造成退货入库产品成本也=0(错误)。
- 产品成本保持最后的非0值,和本次入库的加权平均计算冲突(错误)。
能不能找出一个彻底的方法解决呢?当然可以,只要在加权平均算法基础上增加对历史出入库流水的数据调用,永远避免出现无成本来源的入库,即可解决这个问题。但是这样一来,加权平均算法的逻辑便捷就会消失。
根据各种情况出现的概率,把错误出现概率最低的情况排除掉,然后选定方案。
虽然不完美,但是经过这种分析和比较,咱们距离完美又接近了一步。
一如微积分中引入的极限概念(如果我们想把全体实数视为一条连续的线,这些数字都必须是实数。尽管它们可能只是现实的近似值,但却行之有效),引入一个假定条件,明确问题的边界,把出错概率降至最低,也是业务逻辑中常用的分析方法。
最后的结论,加权平均计算为0的情况,分析: 在库成本=0(库存=0)且入库成本=0(采购单价/成本=0),双0逻辑。
处理方法,目前分为两类:
- 采购入库、直接入库时,直接更新产品表成本字段=0
- 其他类型:装配入库、sku转化入库、订单退货入库等,不更新产品表成本字段(保持原值)
本文由 @糨酱紫 原创发布于人人都是产品经理。未经许可,禁止转载
题图来自Unsplash,基于CC0协议