0

纳马斯卡拉姆,

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

先进先出成本计算

  • 我有以下表格
  • 采购表

在此处输入图像描述

  • 销售表

在此处输入图像描述

  • 先进先出成本表

在此处输入图像描述

我的要求是将每个已售商品的平均成本计算到 FIFOCost 表中。

每当在销售表中发生插入时,可以以编程方式将值插入到 FIFOCost 表中。但是,当几周或几个月后购买和销售表中发生任何更新(如编辑项目或其数量)时(这需要 FIFOCost 表,也需要更新,具有大量数据)

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

4

2 回答 2

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 = ((Current Stock * MVC) + (New Stock * New Cost)) / (Current Stock + New Stock)

这是相似的,但它平均了所有购买的成本。

于 2013-10-29T06:57:33.910 回答
0

您需要在某个地方跟踪手头的库存。发生销售时,您将做几件事:查看已售商品数量与手头库存量。例如,让我们看一下第二次销售,487。您以 16.00 美元的价格卖出了 10 个苹果。您的函数的第一部分将查询 Item = Apple 和 OnHand >= 0 的位置。它将首先到达项目 101,其 OH 为 5。计算使用这 5 个项目在每个 11.00 销售的商品成本并更新现有库存为 0。然后您必须再次查询以查找 Item = Apple,并且 onHand >= 0,然后使用 Item 195 中的 5,将该商品销售成本添加到您在第一部分计算的数字中,并且更新该项目的现有库存。

于 2013-10-25T00:44:08.450 回答