有表:InStorageTB(入库)
ID(物料编码) Data(入库日期) Number(数量) Price(单价)Money(金额)
101 2015-11-15 500 5 2500
101 2015-11-30 400 5.5 2200
102 2015-11-30 300 1.5 450
101 2015-12-12 100 4.5 450
问题:
2015-12-01领出物料编码为101的700件,那么700件的出库成本价(先进先出法)为:500*5+200*5.5=3600
2015-12-04领出物料编码为101的300件,那么300件的出库成本价(先进先出法)为:200*5.5+100*4.5=1550
这样的数据是什么计算,最好是用LINQ,谢谢!
倒序一下不就可以了?存储过程或者读取出来用Lambda计算~
倒序不行,如果只领50件就不对了
2015-12-04领出物料编码为101的50件,那么50*5.5=275
入库的不一定是全部出库的。
@润物之音:
Select * from T WHERE Data <=2015-12-04 ORDER BY Data 然后在代码中循环rows,取出你所需要的数量。 var needCount = 50; var totalMoney = 0.0; foreach(row in rows) { if(row.Number >= needCount) { totalMoney += row.needCount * row.Price; needCount = 0; break; } else { totalMoney += row.Number * row.Price; needCount -= row.Number; } } if(needCount > 0) { //库存不足 }
@幻天芒:
对数据表InStorageTB(入库)2015-12-01出库是没问题,但到2015-12-04出库时就没法确保2015-12-01已经出库了700件?
@润物之音: 只需要从库存中读取就好了哇。对于这个出入库,会有三个表来存储,库存表,入库表,出库表。对于你出库来说,你需要修改的是库存表和出库表。我不确定你说的无法确保2015-12-01已经出库了。如果已经出库了,那么就应该操作库存表减去已经出去的数量。
@幻天芒:
谢谢!这个问题我也想了好久。今天终于有一点思路了!
能加你的QQ吗?我的QQ:191971159
我想让你帮设计数据库结构,如能抽空来帮一下,尽自己的能力给一点酬谢!
@润物之音: 哈哈~我Q:one zero two eight double three double two seven three.
你需要在设计一个出库表