计算FIFO库存,向内,向外和向前关闭Sql Server中的库存

时间:2014-12-26 21:55:11

标签: sql sql-server

我正在使用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&结束日期和预期结果基于以上数据

enter image description here

开放:数据应该从日期开始,即给定1,例如@fromDate< 2013年4月1日。 向内:两个期间的总产品之间即总和(数量) 向外:两个时期之间 总之,我需要两个时期之间所有产品的月度库存。

请帮助我,我试图从6个月以上获得此报告

现在我几乎完成了我的外向率问题。如果我根据FIFO获得外向率,那么我的问题将解决。 我有书面的商店程序,它返回开放数量,费率&值。 通过此链接https://www.simple-talk.com/sql/performance/set-based-speed-phreakery-the-fifo-stock-inventory-sql-problem/。 除了loanRate之外,其他很容易计算。

inwardQty = sum(Quantity)其中transectionType ='IN'和@startDate与@EndDate之间的TransDate

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

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

outwardQty = sum(Quantity)其中transectionType ='Out'和@startDate与@EndDate之间的TransDate

outWardRate = ?? - 这里我遇到了问题,如何获得outwardRate掩盖FIFO方法

OutwardValue = outwardQty * outWardRate

ClosingQty =(opningQty + inwardQty) - outwardQty

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

ClosingValue =(OpningValue + InwardValue) - OutwardValue

1 个答案:

答案 0 :(得分:0)

进入库存控制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日期初余额。做出决定并坚持下去。现在,货物的价值。要获得快速报告,您可以选择使用Qty On Hand * Value。但是,从真实的会计报告角度来看总账,您的价值是基于购买时的实际价值。因此,从1月17日开始,1月1日的库存日期为14.59,剩余价值将为2,并且从2月1日开始是10月17日。

我自己可以追溯到1987年与各种会计系统合作,我已经找到了类似的方法,但是我会表达自己个人对这些方法的偏好,因为看起来你正在寻找一个系统的答案你无论如何都试图建立在别人的工作基础上。这是表格的简化版本

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

现在,在ItemActivity中 - 再次,缩写(非常类似于除QtyAvail之外的其他内容)

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

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

因此,就像可能跨越2个(或更多)未触及的购买库存盘点的期初余额的样本场景一样,您可以拥有类似的多个购买批量货物,这些货物不会在给定日期之前为您的剩余余额出售/时间。那么......价格和价值与账面价值相比是多少。

对于仓库经理的快速审查,他们可能想要多少和最新的价格,很棒。然而,真正的会计bean计数器希望真正的VALUE基于相应的公司购买价格的AT数量,并且它们是完全不同的数字......类似地适用于COST-OF-GOODs-SOLD计算。经理只关心你以Y价出售X许多。会计师必须在基于FIFO的购买价格条目中花费多少X来为公司付出代价。

库存是一个需要处理的大动物,你肯定希望将来能够使用它,而不仅仅是获得报告的快速解决方案。