【问题标题】:calculating FIFO inventory opning ,inward,outward & closing Stock in Sql Server在 Sql Server 中计算 FIFO 库存打开、向内、向外和关闭库存
【发布时间】:2014-12-26 21:55:11
【问题描述】:

我使用的是 sql server 2008。

我将 envetory 计算为 FIFO 方法,就像在计数中一样。

我有多个表输出的视图,所以创建示例表

 create table #StockView 
( 
StoreId int, 
ProductId int, 
TranDate Date, 
TransectionType varchar(5), 
Quantity numeric(18,3), 
UnitCost numeric(18,2) 
)
insert into #StockView  select  1   ,   512 ,   '2013-03-30 '   ,   'IN'    ,   1870,   35.57   
insert into #StockView  select  1   ,   512 ,   '2013-04-05 '   ,   'OUT'   ,   500 ,   0
insert into #StockView  select  1   ,   512 ,   '2013-04-05 '   ,   'OUT'   ,   150 ,   0
insert into #StockView  select  1   ,   512 ,   '2013-04-15 '   ,   'OUT'   ,   15  ,   0
insert into #StockView  select  1   ,   512 ,   '2013-04-23 '   ,   'OUT'   ,   125 ,   0
insert into #StockView  select  1   ,   512 ,   '2013-04-25 '   ,   'OUT'   ,   40  ,   0
insert into #StockView  select  1   ,   512 ,   '2013-04-26 '   ,   'OUT'   ,   734 ,   0
insert into #StockView  select  1   ,   512 ,   '2013-05-15 '   ,   'IN'    ,   1520,   35  
insert into #StockView  select  1   ,   512 ,   '2013-05-15 '   ,   'IN'    ,   1520,   35  
insert into #StockView  select  1   ,   512 ,   '2013-05-23 '   ,   'OUT'   ,   40  ,   0
insert into #StockView  select  1   ,   512 ,   '2013-06-05 '   ,   'OUT'   ,   70  ,   0
insert into #StockView  select  1   ,   512 ,   '2013-06-06 '   ,   'OUT'   ,   50  ,   0
insert into #StockView  select  1   ,   512 ,   '2013-06-07 '   ,   'OUT'   ,   286 ,   0
insert into #StockView  select  1   ,   512 ,   '2013-06-10 '   ,   'OUT'   ,   50  ,   0
insert into #StockView  select  1   ,   512 ,   '2013-06-11 '   ,   'OUT'   ,   41  ,   0
insert into #StockView  select  1   ,   512 ,   '2013-06-15 '   ,   'OUT'   ,   150 ,   0
insert into #StockView  select  1   ,   512 ,   '2013-06-17 '   ,   'OUT'   ,   700 ,   0
insert into #StockView  select  1   ,   512 ,   '2013-06-21 '   ,   'OUT'   ,   433 ,   0
insert into #StockView  select  1   ,   512 ,   '2013-06-25 '   ,   'OUT'   ,   20  ,   0
insert into #StockView  select  1   ,   512 ,   '2013-06-26 '   ,   'OUT'   ,   25  ,   0

select * from #StockView

StoreId ProductId TranDate  TransectionType Quantity    UnitCost
1   512 2013-03-30                  IN      1870.000    35.57
1   512 2013-04-05                  OUT     500.000     0.00
1   512 2013-04-05                  OUT     150.000     0.00
1   512 2013-04-15                  OUT     15.000      0.00
1   512 2013-04-23                  OUT     125.000     0.00
1   512 2013-04-25                  OUT     40.000      0.00
1   512 2013-04-26                  OUT     734.000     0.00
1   512 2013-05-15                  IN      1520.000    35.00
1   512 2013-05-15                  IN      1520.000    35.00
1   512 2013-05-23                 OUT      40.000      0.00
1   512 2013-06-05                 OUT      70.000      0.00
1   512 2013-06-06                 OUT      50.000      0.00
1   512 2013-06-07                 OUT      286.000     0.00
1   512 2013-06-10                 OUT      50.000      0.00
1   512 2013-06-11                 OUT      41.000      0.00
1   512 2013-06-15                 OUT      150.000     0.00
1   512 2013-06-17                 OUT      700.000     0.00
1   512 2013-06-21                 OUT      433.000     0.00
1   512 2013-06-25                 OUT      20.000      0.00
1   512 2013-06-26                 OUT      25.000      0.00

请通过 https://www.simple-talk.com/sql/performance/set-based-speed-phreakery-the-fifo-stock-inventory-sql-problem/ 或者 calculate closing Stock Quantity,price & value by FIFO

上面的链接给出了可用库存或期末库存及其价值,但我正在寻找接受商店代码、产品 ID、fromDate 和结束日期的商店程序或函数,并且预期输出基于上述数据是

opening : 数据应该在日期之前,即给定 1,例如 @fromDate

请帮助我,因为我正在尝试获得这份报告,因为超过 6 个月

现在我几乎完成了,只是我在外向率方面遇到了问题。如果我根据 FIFO 获得外向费率,那么我的问题就会解决。 我已经编写了返回开放数量、费率和价值的商店程序。 通过此链接https://www.simple-talk.com/sql/performance/set-based-speed-phreakery-the-fifo-stock-inventory-sql-problem/。 除了outwardRate,其他都很容易计算。

inwardQty = sum(Quantity) where transectionType = 'IN' and TransDate 在@startDate 和@EndDate 之间

inwardRate = sum(inwardQty * UnitCost)/ Sum(inwardQty)

inwardValue = sum(inwardQty) * (sum(inwardQty * UnitCost)/ Sum(inwardQty) )

outwardQty = sum(Quantity) where transectionType = 'Out' and TransDate 在@startDate 和@EndDate 之间

outWardRate = ?? -- 这里我遇到了问题,如何根据 FIFO 方法获取外向速率

OutwardValue=outwardQty *outWardRate

ClosingQty = (opningQty + inwardQty)-outwardQty

ClosingRate = ((OpningValue + InwardValue) - OutwardValue) / ((opningQty + inwardQty ) - outsideQty)

ClosingValue = (OpningValue + InwardValue) - OutwardValue

【问题讨论】:

  • 你是如何对 Opning 进行分类的,因为表中没有这样的条目,为什么 2014-04-01 to 2014-04-30 向内为零,它有 IN 条目
  • 感谢您的回复,在 4 月 3 月关闭数据到来之前 4 月 opning。如果在 4 月份检查数据没有任何内部产品,这就是它为零的原因。我有编辑图像,我计算了 3 月和 4 月的数据,请检查一下。如果您有任何疑问请询问。并使用我的名字@naweez 开始您的评论,以便我得到暗示。

标签: sql sql-server


【解决方案1】:

无论提供何种下降链接,进入库存控制 FIFO(或 LIFO 或任何使用的方法)从来都没有您想象的那么容易。

您引用了您感兴趣的日期,例如一个范围,但必须根据这些值计算期初库存,并且您必须在正确反映库存价值的同时确定期初“每个价格”是多少。请考虑以下内容。

Jan 1  Begin 20  @ 14.59
Feb 1  Buy   10  @ 17.28
Feb 3  Sell  18  @ 22.79  (selling price)
Mar 1  Buy   25  @ 18.34
Mar 3  Sell   9  @ 24.00
Apr 1  Buy   15  @ 16.95
Apr 3  Sell  12  @ 24.00 
May 1  Buy   10  @ 16.24

因此,您要求为上述库存项目提供 3 月 1 日至 6 月 1 日的报告。期初存货为 12(期初存货加上 3 月 1 日之前的任何购买减去销售额)。但是,您在 2 月 1 日最近一次购买的是 10 件,但还剩 12 件。那么您决定使用什么来确定价格值……最近的 2 月 1 日?或它所基于的 1 月 1 日期初余额。做出决定并坚持下去。现在,商品的价值。对于快速报告,您可以选择现有数量 * 价值。但是,从真正的会计报告角度到总帐,您的价值基于购买某物时的实际价值。因此,在 1 月 1 日开盘存货日期 14.59 和 10 数量(从 2 月 1 日 @ 17.28)时剩余的值将是 2。

自 1987 年以来,我自己曾使用过各种会计系统,我发现应用了类似的方法,但我会表达我个人对所接触到的方法的偏好,因为看起来你正在寻找一个系统的答案无论如何,都在尝试基于其他人的工作进行构建。这是表格的简化版本

物品(通用库存物品、整体描述、尺寸、制造、其他标准物品) ItemActivity(处理每个项目/商店的采购、销售、退货、库存调整) ItemSerials(itemActivity 条目的子级别,如果此类项目已序列化,以便在出售和从库存中取出时可以明确地从库存计数中删除)

现在,在 ItemActivity - 同样,缩写(非常类似于您所拥有的,除了 QtyAvail)

ID,  StoreID, ItemID, TransType, ActivityDate, Qty, Price, QtyAvail

这里的关键部分是 QtyAvail,它仅基于商品的购买数量。当物品被售出时,系统应该转到商店/物品的行和(FIFO),作为 QtyAvail > 0 的购买可用的 FIRST ENTRY 并开始应用每个相应行中的那些,直到计数全部用完。如果最近一次销售的数量超过了 QtyAvail 的数量,则需要减少一个条目的数量,然后在列表中查找下一个 QtyAvail,直到将所有已售数量都计算在内。

因此,与可能跨越 2 个(或更多)未触及的采购库存计数的期初余额的示例场景一样,您可能在给定日期有类似的多个已购买的商品未售出剩余余额/时间。所以也是......价格和价值与账面价值是多少。

为了让仓库经理快速查看,他们可能想要多少和最新价格,太好了。但是,真正的会计 bean-counters 想要基于公司各自购买价格的真实价值,它们是完全不同的数字......同样适用于 COST-OF-GOODs-SOLD 计算。经理只关心你以 Y 的价格卖了 X 多。会计师必须进一步了解,在基于 FIFO 的采购价格条目中,公司花费了多少 X。

库存是一个需要处理的大野兽,您绝对希望将来能够处理它,而不仅仅是为了获得报告的快速解决方案。

【讨论】:

  • 我已经在这张桌子上工作了这么多,现在我几乎完成了,只是我在外向率方面遇到了问题。如果我根据 FIFO 获得外向费率,那么我的问题就会解决。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-01-14
  • 2011-11-11
  • 1970-01-01
  • 1970-01-01
  • 2013-05-01
  • 2019-05-10
  • 1970-01-01
相关资源
最近更新 更多