存货成本确定方法-进价计算设计

考虑到oc博客现在仍未能将文中markdown显示实现,姑且给出有道与笔记的链接,其中公式类均可在这里显示正确.

1 存货成本计算的问题描述

首先说明下本文讲述的重点,即存货数据库模型的单位成本/进价计算,其数种常见方法,优劣点及适用范围.

要讲这个问题,首先要说明下,何谓存货成本,其财务定义所含甚广,包含存货所耗费的总成本,包括采购成本,定货成本,存储成本,缺货成本等.

实际在开发系统时,核心内容当然不可能包括这么多,模型设计得这么复杂.或者说,对复杂逻辑的设计,应将之拆解为几个低耦合的简单逻辑模型.本文所述的,也是库存成本核心关注的内容,即仅仅考虑购买销售过程的采购成本,如果涉及生产,则将生产成本的获取方法单独放在另一个模型中去计算.

关于数据库的设计,所用到的核心数据库表,仍是库存日志表:t_stock_log,关于该表的具体设计,请参考商品库存模型-逻辑设计小议.

2 常用计算方法

本质上来说,成本计算最难,也是最核心的,即发出货物的成本计算.因为进货成本必定是已知的.以下为4种目前国内常用到的计算方法.

2.1 先进先出法(first-in,first-out,FIFO)

顾名思义,先进先出法在实际理解上应是没有任何困难,但正如财务定义上所述的"工作量比较繁琐",设计为系统,也是不论从算法效率还是逻辑代码看均十分复杂.

事实上,本文此前所述的商品库存模型一文,即是比较严谨的运用了先进先出法.读者单从已表现出的sql便可看出有多复杂,主要体现在:

No.难点说明
1非零保证要做到需要比较复杂的计要保证事实上的每个时刻的历史库存数量均非负
2对于已形成单据的某条明细数量,可能因为价格问题需要拆分开.由此可能需要改变原本主单据的明细构成,而重构时机也需把握一般来讲,审批完成时是必须要重构的,但在保存时,有时可能也有保存的需求

第2点在此举一个简单的例子说明:

日期批次数量
1月5日a50
3月15日b80

譬如某商品进货情况如上表,在5月20日需要出货该商品共100件,按照先进先出原则,即需将之拆分为50件10元批次与50件12元批次,如此则可能需要将原单据明细记录改为两条.

其他难点与解决策略,在商品库存模型一文中均已有论述,在此不再赘述.不过该文考虑的是,对于相同商品相同时间点/批次,可能产生不同价格的进货情形,实例在很多种情况下,也可通过将时间点细化或区分相同时间点的不同批次,而在相同批次内不允许存在不同价格的情况,改善第二点的解决难度,且也能满足大多数系统使用情况.

有先进先出法,理论上也有后进先出法,不过此法在国内由于某些原因是不允许使用的,在此略过不叙.

深入了解参考财务定义.

2.2 加权算术平均法(The Weighted Arithmetic Average)

其计算公式如下:

y = \Sigma (x_{i} \times w_{i}) \div \Sigma (w_{i})

xi代表某批次进货单位成本; wi代表某批次进货数量;

如果是用库存日志法,在计算价格的时候相对比较容易,且不需考虑分批次问题(但同样需要考虑历史库存非负问题):

select store_code,p_code,...,
sum(in_price*add_count)/sum(add_count) as average_price 
from t_stock_log 
where condition
group by sth
-- 此处group by的是批次,在某些特殊情况下,也可将范围扩大

该法在系统设计上的优点包括:计算逻辑相对简单,在where的condition范围限制严苛的情况下,计算量也不会很大;

缺点和所有加权平均法一样,即由于金额最小值一般取到分,最后核销完先前批次的时候,可能存在由于除不尽导致的几分钱的盈余和亏损,实际来看这影响微乎其微,但在系统系统设计的时候需要考虑对这种情况的处理.

深入了解参考财务定义.

2.3 月末一次加权平均法/全月一次加权平均法(monthly weighted average method)

客观而言,目前接触到的客户还没有哪个是要用这种存货成本计算方法的.该方法的计算公式如下:

y = \frac{m_{s}+\Sigma(x_{p} \times w_{p})}{w_{s}+\Sigma (w_{p})}

ms代表期初结存材料成本;
ws代表期初结存数量;
xp代表本月内某批次进货单位成本;
wp代表本月内某批次进货数量;

这种计算方法对于系统设计的最大缺点,就是不利于核算的即时性.即不论如何设计,只能得到此前月份的准确成本核算,而使用系统往往就是为了及时性,两者可说是互相矛盾,故而设计进价计算基本不会考虑这种方法.

深入了解参考财务定义.

2.4 具体辨认/个别计价法

从名字上即可看出,这类出货的成本计算,是逐一辨认各批发货和期末存货所属的购进批别或生产批别,分别计算.

一般而言,在当前系统计算越来越自动化的今天,个别计价法除了在对不能替代使用的存货,以及为特定项目专门购入或制造的存货,如固定资产,珠宝外,就仅作为其他计算方法的一个补充了.

以系统设计的角度讲,譬如说某公司销售手机,客户想要某个型号手机的微订制版本,而正由于是微订制,该公司出于某种考虑未将该批手机与该型号其他手机从系统上区分开,但这两种手机又必然是不同的存货单位成本,此时就可考虑从系统上设置补充调整进价,以实现个别进价法了.

3 存货成本方案的选择

从以上四种方案综合来看,先进先出法或加权算术平均法是比较适合的两种核心方案.具体选择哪种,则需要与客户沟通来确定.

如果客户没有特别想法,个人的话建议采用加权算术平均法,此法不需考虑拆分明细,计算逻辑与计算量相对也比较简单,且有一定的容错率.

转载于:https://my.oschina.net/yangyishe/blog/2872105

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值