先进先出成本计算

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,将该商品销售成本添加到您在第一部分计算的数字中,并且更新该项目的现有库存。

【讨论】:

以上是关于先进先出成本计算的主要内容,如果未能解决你的问题,请参考以下文章

页面调度先进先出算法(FIFO) 用C语言描述 欢迎高手前来挑战

根据销售日期的先进先出定价计算利润

栈、队列中“先进先出”,“后进先出”的含义

先进先出算法(FIFO)——页面置换

lifo和fifo的优缺点

队列Queue FIFO先进先出 栈Stack FILO先进后出