首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Sql Server中计算FIFO库存的期初、入库、出库和期末库存

在Sql Server中计算FIFO库存的期初、入库、出库和期末库存
EN

Stack Overflow用户
提问于 2014-12-27 05:55:11
回答 1查看 2.7K关注 0票数 0

我正在使用sql server 2008。

我是用先进先出的方法来计算的,就像理货一样。

我有视图,其中有多个表输出,因此创建示例表格如下

代码语言:javascript
运行
复制
 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和结束日期,预期输出是基于以上数据的

打开:数据应该在起始日期之前,即给定1例如@fromDate < 2013-04-01。向内:两个周期之间的总产量,即总和(数量)向外:简而言之,在两个周期之间,我需要两个周期之间所有产品的月度库存。

请帮帮我,我想要这份报告已经超过6个月了

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

inwardQty =sum(数量) where transectionType = 'IN‘,@startDate和@EndDate之间的TransDate

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

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

outwardQty =sum(数量) where transectionType = 'Out‘,@startDate和@EndDate之间的TransDate

outWardRate = ??--在这里我遇到了问题,如何获得outwardRate编码的先进先出方法

OutwardValue= outwardQty *outWardRate

ClosingQty =( opningQty + inwardQty )- outwardQty

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

ClosingValue = (OpningValue + InwardValue) - OutwardValue

EN

回答 1

Stack Overflow用户

发布于 2014-12-27 22:16:44

进入库存控制先进先出( FIFO )(或后进先出( LIFO )或任何使用的方法)从来都不像你想象的那么容易,无论提供了哪些下行链接。

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

代码语言:javascript
运行
复制
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日的期初余额,它是基于最多的。做出决定并坚持下去。现在,来看看商品的价值。对于快速报告,您只需选择Qty On Hand * Value即可。然而,从总账的真实会计报告角度来看,您的价值是基于购买某物时的实际价值。因此,在1月1日的期初库存日期14.59的剩余数量为2,而2月1@ 17.28的剩余数量为10。

早在1987年,我就使用过各种会计系统,我发现也应用了类似的方法,但我会表达我个人对暴露在其中的方法的偏好,因为看起来你正在寻找一个系统的答案,你无论如何都是试图基于别人的工作来构建一个系统。这是表的简化版本

项目(通用库存项目,总体描述,大小,制造,其他标准) ItemActivity (处理每个项目/商店的采购,销售,退货,库存调整) ItemSerials (如果这些项目被序列化,则为itemActivity条目的子级,以便在出售和从库存中取出时可以明确地从库存计数中删除)

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

代码语言:javascript
运行
复制
ID,  StoreID, ItemID, TransType, ActivityDate, Qty, Price, QtyAvail

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

因此,就像期初余额的示例场景一样,期初余额可能跨越2个(或更多)未触及的采购库存计数,从而形成期初余额,您可以在给定的日期/时间具有类似的多个未售出的商品。所以那也..。价格和价值与账面价值相比是什么?

对于仓库经理的快速查看,他们可能想要多少和最新价格,太好了。然而,真正的会计计帐员想要的是基于公司各自收购价格的真实价值,它们是完全不同的数字……同样适用于商品销售成本的计算。经理只关心你是否以Y的价格卖出了X个。会计人员必须走额外的水平,多少X在基于先进先出的采购价格进入它花费了公司。

库存是一头需要处理的大野兽,你肯定需要在未来处理它的下降处理,而不仅仅是为了获得报告的快速答案解决方案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27662361

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档