【问题标题】:FIFO Cost Calculation先进先出成本计算
【发布时间】:2013-10-25 00:05:42
【问题描述】:

纳什卡拉姆,

我正在使用带有 H2 数据库的 Java Swing 开发零售 POS 应用程序。为了计算成本,我需要帮助。

先进先出成本计算

  • 我有以下表格
  • 采购表

  • 销售表

  • FIFO成本表

我的要求是计算每件售出物品的平均成本,并将其放入 FIFOCost 表中。

只要在销售表中发生插入,就可以通过编程方式插入值到 FIFOCost 表中。但是,如果几周或几个月后购买和销售表中发生任何更新(如编辑商品或其数量)(这需要 FIFOCost 表,也需要更新,数据量很大)

目前,我正在通过程序本身来完成。我正在寻找一种解决方案,使用递归等高级工具,在数据库本身中进行少量编程和更多工作。

【问题讨论】:

  • Purchase 表的用途是什么?获取FIFOCost表中的AvgCost的算法是什么?
  • Purchase 表的目的是存储购买数据。 FIFOCost 表中的 AvgCost 列显示了每个 SaleTable 插入的采购表中的平均成本。

标签: java sql database h2


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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-11
      • 1970-01-01
      • 2013-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-15
      • 1970-01-01
      相关资源
      最近更新 更多