先进先出成本计算
Posted
技术标签:
【中文标题】先进先出成本计算【英文标题】:FIFO Cost Calculation 【发布时间】:2013-10-25 00:05:42 【问题描述】:纳什卡拉姆,
我正在使用带有 H2 数据库的 Java Swing 开发零售 POS 应用程序。为了计算成本,我需要帮助。
我有以下表格 采购表 销售表 FIFO成本表我的要求是计算每件售出物品的平均成本,并将其放入 FIFOCost 表中。
只要在销售表中发生插入,就可以通过编程方式插入值到 FIFOCost 表中。但是,如果几周或几个月后购买和销售表中发生任何更新(如编辑商品或其数量)(这需要 FIFOCost 表,也需要更新,数据量很大)
目前,我正在通过程序本身来完成。我正在寻找一种解决方案,使用递归等高级工具,在数据库本身中进行少量编程和更多工作。
【问题讨论】:
Purchase
表的用途是什么?获取FIFOCost
表中的AvgCost
的算法是什么?
Purchase 表的目的是存储购买数据。 FIFOCost 表中的 AvgCost 列显示了每个 SaleTable 插入的采购表中的平均成本。
【参考方案1】:
您需要在购买表中添加 QtySold 列,并在每次销售时遍历以下算法:
qty_left = sale_qty
tot_cost = 0;
while qty_left > 0
fetch oldest row where qty_sold < qty
if qty_left + qty_sold < qty
then
set qty_sold = qty_sold + qty_left
tot_cost = tot_cost + (Purchase.Cost * qty_left)
qty_left = 0
else
qty_at_this_cost = qty - qty_sold
set qty_sold = qty
tot_cost = tot_cost + (Purchase.cost * qty_at_this_cost)
qty_left = qty_left - qty_at_this_cost
avg_cost = tot_cost / sale_qty
虽然使用递归 SQL 可以做到这一点,但它既不高效也不可读。
您可能会说服您的用户使用更合理、更容易计算移动平均成本的方法。
即每次您购买新股票时,您都会计算 MVC = ((当前库存 * MVC) + (新库存 * 新成本)) / (当前库存 + 新库存)
这很相似,但它平均了所有购买的成本。
【讨论】:
【参考方案2】:您需要在某个地方跟踪手头的库存。发生销售时,您将要做几件事:查看已售商品数量与现有库存量。例如,让我们看一下第二次销售,487。您以 16.00 美元的价格卖出了 10 个苹果。您的函数的第一部分将查询 Item = Apple 和 OnHand >= 0 的位置。它将首先到达项目 101,其 OH 为 5。计算使用这 5 个项目在每个 11.00 销售的商品成本并更新手头库存为 0。然后您必须再次查询以查找 Item = Apple,并且 onHand >= 0,然后使用 Item 195 中的 5,将该商品销售成本添加到您在第一部分计算的数字中,并且更新该项目的现有库存。
【讨论】:
以上是关于先进先出成本计算的主要内容,如果未能解决你的问题,请参考以下文章