首先,我们要对库存帐有个概念
假设初始库存数量为5,然后进了一批货,数量为10,那么进货后,库存数量就变成15了;
假设初始库存成本总金额为50,然后进了一批货,进货总成本为100,那么进货后,库存成本总金额就是150了;
也就是说,不论是库存数量,还是库存成本总额,都会满足
期初±发生=期末
所以无论是以下那种计算方式,最终都必须满足这个原则
I.计算方式概述
一、先进先出
先进先出法是以先购入的存货应先发出这一实物流转假设为前提,对发出存货进行计价的方法。采用这种方法,先购入的存货成本在后购入存货成本之前转出,据此确定发出存货和期末存货成本。
此处要引入“批次库存”的概念,使用此种方式时,零售商需要对每一批进货单独计算存量、单独记录成本,形成一张批次库存记录表,比如(以下均以一个商品在一个库存管理地点为例)
批次号 | 批次入库时间 | 批次进货量 | 批次存量 | 批次进价 |
---|---|---|---|---|
1 | 2021-08-01 | 10 | 6 | 5 |
此时库存成本金额即为 批次1的存量*批次1的进价
假设此时又进了一批货,则批次库存记录表变为
批次号 | 批次入库时间 | 批次进货量 | 批次存量 | 批次进价 |
---|---|---|---|---|
1 | 2021-08-01 | 10 | 6 | 5 |
2 | 2021-08-02 | 15 | 15 | 6 |
这两个批次合计的库存存量为批次1的存量+批次2的存量,库存成本金额即为 批次1的存量*批次1的进价+批次2的存量*批次2的进价
当一个商品在一个库存管理地点上存在多个存货批次时,出货先出较早的批次,扣减对应批次的存量,假设上面这个例子售出2个,则批次库存记录表变为
批次号 | 批次入库时间 | 批次进货量 | 批次存量 | 批次进价 |
---|---|---|---|---|
1 | 2021-08-01 | 10 | 4 | 5 |
2 | 2021-08-02 | 15 | 15 | 6 |
此时减少的库存成本为 售出数量*批次1的进价
当较早批次存量不够扣减时,按时间顺序扣减下一个批次,比如在上面的基础上再调出10个
批次号 | 批次入库时间 | 批次进货量 | 批次存量 | 批次进价 |
---|---|---|---|---|
1 | 2021-08-01 | 10 | 0 | 5 |
2 | 2021-08-02 | 15 | 9 | 6 |
此时减少的库存成本为 批次1减少的数量*批次1的进价+批次2减少的数量*批次2的进价
另外,由于有了这个批次库存记录表作为依据,因此也可以进行人工指定批次的出货、高价先出、低价先出等方式,此时可以不遵从先进先出的原则。
二、加权平均
1.全月加权平均
加权平均法,又称全月一次加权平均法,是指以本月全部进货数量加月初存货数量作为权数,去除当月全部进货成本加本月初存货成本,计算出存货的加权单位成本,以此为基础计算当月发出存货的成本和期末存货成本的一种方法。
公式为:
加权平均单价=(期初结存存货实际成本+本期收入存货实际成本)/(期初结存存货数量+本期收入存货数量)
本期发出存货实际成本=本期发出存货数量*加权平均单价
这里描述的按“全月”,其实只是泛指,在很多公司的确是有按自然月作为期间来进行数据的统计,但是不排除还存在按半月、一周、甚至一天来进行统计的。
如果把这个统计时间放到每一次进货时,则成了移动加权平均
2.移动加权平均
移动加权平均法。它是指在每次进货以后,立即为存货计算出新的平均单位成本,作为下次发货计价基础的一种方法。
公式为:
加权平均单价=(收入存货前结存存货实际成本+本期收入存货实际成本)/(收入存货前结存存货数量+本期收入存货数量)
本期发出存货实际成本=本期发出存货数量*加权平均单价
移动加权平均的库存管理只需要一张这样的表格
存量 | 成本单价 |
---|---|
5 | 4 |
库存成本金额即为 存量*成本单价
一个商品在一个库存管理机构只需要一条数据记录库存
假设进了一批货,数量10,进价6,则存量变为5+10=15,成本单价变为(5*4+10*6)/(5+10)=5.3333
库存表数据变化为
存量 | 成本单价 |
---|---|
15 | 5.3333 |
假设售出2个,则库存表数据变化为
存量 | 成本单价 |
---|---|
13 | 5.3333 |
II、比较
先看下智库一篇文章中的比较
https://doc.mbalib.com/view/045ab9d0f6d91258ded36c013a3bc2a1.html
其中“对收发货较频繁的企业不适用”这条是没有说明根据的,因此此条不能作为缺点,另外我再进行一些补充:
1.比较移动加权平均和全月加权平均两种方式,可以发现,移动加权平均成本变化的及时性更高,全月加权平均的出货价格按1个月算一次的话,一次进货造成的价格变动最长可能滞后2个月才开始影响出货成本。也就是说,全月加权平均不能及时准确的体现出货成本,需要一个期间结束后才能进行统计,与之相关的一些指标,比如利润额/率、周转率等也是无法进行迅速地跟踪的。
2.移动加权平均成本法,统计商品库存成本更为高效,因为先进先出法依赖的批次库存表,可能存在很多个批次,需要对每个批次的存量成本进行计算后再求和,而移动平均成本法的库存表只有一条记录。而且为了防止批次库存表数据量一直增长,一般会考虑将已消耗完的批次归档,从此表中移除。并且在进行库存扣减计算时,移动加权平均法可以快速找到对应的成本单价,而先进先出法要进行相对复杂的查找,甚至可能还要找到多个批次的成本价。
3.移动加权平均法由于在计算时使用了除法,会导致计算出来的平均成本出现小数的情况,大多数情况都是除不尽的,而且业务软件系统中数值也有小数位数控制,所以只能四舍五入。几乎每次计算都会有一点偏差,导致总进货成本-总存货成本<>总出货成本,这部分需要定期进行处理,有两种方式
A.当差异累计到某个值的时候(比如足以使小数点后最后一位数发生变化),重算平均成本,即
新成本单价=(存量*成本单价+差异额)/存量
这种方式有一定的滞后性,但工作量小
B.根据差异产生成本调整的单据,即把差异合理化
4.普通的移动加权平均成本是不考虑商品货源的,只基于商品和库存管理地点来进行管理,若出货原因是退回给供应商,刚好库存存量中有两个供应商的货,又刚好两个供应商的供货进价差异比较大,那么普通的移动加权平均成本作为退货价是有可能发生争议的。
5.所有库存成本计算方式,目前都没考虑存量为0时还能继续出货的情况。
所以下面开始对此进行分析
III.存量为0时出库
这里我们先看下这种场景是怎么出现的,比如
供应商把货发给零售商的卖场,卖场员工点完数后直接上架销售,但还没来得及或者是忘了在业务系统中做收货确认,此时业务系统中的存量即为0。由于顾客此时可以拿到商品,以顾客为优先时,应该是可以将这笔商品售出的。
对于库存存量为0仍要继续出货的,一般有两种方式,强制记账或等待记账,
强制记账即存量可以减成负数,即所谓的负库存;
等待记账则为挂起这笔交易,等存量增加了,再对存量进行扣减。
先进先出法的批次库存管理,如果没有任何一个有库存的批次,直接出货,则无法得到对应的出货成本,所以大多数情况下不允许进行存量为0时的出货。假设非要进行强制记账,则只能定个规则,补全批次库存表中的所有信息,比如供应商、批次进价。也可以把最后一个存量为0的批次减成负数,但对上面举例的那个场景会造成影响,因为若之后再补入库,无法对其进行冲正。
移动加权平均法的库存管理,强制出货是可以得到对应的出货成本的,因为其库存只有一条记录,没有选择。
另外,在存量可能为负数时,如果完全按照移动加权平均成本的计算公式来计算,可能会出现一些异常
加权平均单价=(收入存货前结存存货实际成本+本期收入存货实际成本)/(收入存货前结存存货数量+本期收入存货数量)
举个例子
初始数量为-5,成本单价为5,
然后进货数量5,进价单价10
按照上面的公式,则新的成本单价为
((-5*5)+(5*10))/(-5+5)
=25/0
除数为0无法计算
再举个例子
初始数量为-5,成本单价为10,
然后进货数量为10,进价单价为4,
按公式,则新的成本单价为
((-5*10)+(10*4))/(-5+10)
=-10/5=-2
单价为负数也不合理
所以,需要有一些特殊的方式来进行处理,我们先找找现有市面上的业务软件系统是怎么处理这个负数的情况的
在网上搜索 “移动加权平均成本”+“负数” ,可以看到 管家婆、用友等软件均有此现象
而ORACLE公司的RMS(RETEK)软件系统中,对此是有自带的特殊处理的,在业务规则允许存量为负数的情况下,可以避免除数为0,也可以避免产生负数的成本单价。
我们先回到发生此问题的场景:
进了一批货,未在业务软件中执行收货操作,直接实物上架且售出了,之后再在业务软件中补收货操作
如果这个场景要变成正常情况,那么应该是先收货再售出
模拟一下数据的变化
期初
存量 | 成本单价 | 总成本 |
---|---|---|
0 | 5 | 0 |
收货5个,进价单价为10
存量 | 成本单价 | 总成本 |
---|---|---|
5 | 10 | 50 |
售出 5个
存量 | 成本单价 | 总成本 |
---|---|---|
0 | 10 | 0 |
按总成本金额的变化上看,期初为0,然后进货50,再然后售出50,最后期末为0,此时成本单价为10。
假设我们调整售出和收货的顺序,如果能得到上面一样的结果,则说明算法是正确的。
模拟先售出再收货的情况
期初
存量 | 成本单价 | 总成本 |
---|---|---|
0 | 5 | 0 |
售出 5个
存量 | 成本单价 | 总成本 |
---|---|---|
-5 | 5 | -25 |
收货5个,进价单价为10
存量 | 成本单价 | 总成本 |
---|---|---|
0 | X | 25 |
继续看总成本金额的变化,期初为0,售出25,进货50,最后期末为25,成本单价未知。和正常的结果是有差异的,那么就要想办法让数据符合上面的结果。
首先,存量为0,那么无论成本单价是多少,总成本必然为0,
存量 | 成本单价 | 总成本 |
---|---|---|
0 | X | 0 |
然后,正常结果最后成本单价为10,那么我们也变成10
存量 | 成本单价 | 总成本 |
---|---|---|
0 | 10 | 0 |
会发现 期初0-售出25+进货50=25 <>期末0
仔细对比可以发现,两种方式售出的总成本不一样,前者售出50,而后者只售出25,那么我们将后者的售出成本再增加25后,即可得到和前面完全一致的结果,即
期初为0,然后进货50,再然后售出25+25,最后期末为0,此时成本单价为10(注意此处增加售出成本时,数量不发生任何变化)
整理一下,可以得到几个关于移动加权平均成本的规则
1.在存货数量小于等于0时,增加存货,新的成本单价应为此次增加存货的单价;
2.在存货数量小于等于0时,增加存货,如果成本单价发生变化,则要产生对应的调整售出成本的数据。
本篇完。
想了解更多有关批次成本和移动加权平均成本的内容,另外可参考我另一篇文章
《零售商各业务单据对库存的影响》