我们的软件采用先出先出算法,但在实际应用中,碰到下面一个问题。入库时,客户的入库金额是按实际支付金额入库的(这种情况很常见,付供应商一笔整数)比如:
某日购进一批矿泉水,数量9600瓶,采购单价0.65元,共支付金额 6200元(实际支付金额),在我们的系统中,此笔业务会重算单价,6200/9600=0.6458(4位小数),系统按9600、0.6458记录入批次库存。这样就造成了实际支付金额与成本金额的差异:实际成本6200,批次成本金额9600*0.6458=6199.68,虽然只差几角钱,但如果一张单采购数量比较大的情况下,差别还是蛮大的,我们碰到过客户最大一张单差别近千元的情况,月累计误差可上万元。现客户要求一分钱都不能差,我们该如何解决这个问题。
因为单价的原因,这笔业务在出库时,最终的出库成本也只有6199.68元,这样就与入库不平衡,客户不允许这种情况的发生。
我的想法,批次库存中除保留单价、数量外,还保存金额。系统建立一个批次库存表,记录每笔业务的入库数量、入库金额、入库成本价、已出数量、已出金额,在商品出库时,如果出库数量小于批次库存结余数量,则按入库成本价出库,如果此次出库会将结余数量出完,则要考虑加上调整金额,保证这个批次的出库总金额与入库金额一致。例:
对应刚才业务,批次库存为:结余数量9600 成本价0.6458 入库金额6200 批次号1111
第一次出库:数量4800 出库成本价0.6458 出库金额 3099.84,此笔业务完成后,1111批次库存为:结余数量4800 成本价0.6458 入库金额6200 结余金额 6200-3099.84=3100.16
第二次出库:数量4800 出库成本价0.6459 出库金额3100.16(注意此处,因为此笔业务发生后,1111批次的库存将出完,所以不能使用0.6458出库,否则会造成差异0.6458*4800+0.6458*4800=6199.68,而实际入库金额为6200,所以此笔出库金额应为6200-0.6458*4800=3100.16)
我认为采用这样的解决方法,能保证数据的平衡,不知道在具体业务中是否可行,向各位请教,谢谢。
解决这个问题应该没有那么复杂吧?!
导致你这个成本问题的原因有两个:1、0.65*9600=6240,但是实际结算金额却是6200,其中的40元被你的批量采购给折掉了;2、就算是折后结算金额为6200,成本为0.64583333333,而你系统的精度为万分位级(小数点后4为)成了0.6458,使得差额较大。
所以,就有了2个解决办法:1、采购数据分解:按照0.65*9600=6240的6240元作为入库金额,而折下的40元作为业外收入划入收入,这样成本比较工整;2、加大成本的核算精度,当然这样会使带给服务器更多的负担。
个人见解,请前辈们指正!