最近帮人做了一个仓库管理的模型,本来是打算用库存表,在入库/出库操作时,同步更新库存表,考虑模型的数据量不是很大,于是采用动态计算的方式来生成采购计划。
在物料表中,有字段记录物料的最低安全库存/最高安全库存,由于时间的关系,设计时并没有真正考虑最高安全库存,特此说明一下。
数据库为MS SQL Server,在2000/2008上测试通过。
为了简化设计难度,增加脚本的可读性,计算过程分成两步,第一步进行汇总:
SELECT p.ItemRef, p.ItemName, p.Price, p.LowerQTY, p.UpperQTY, p.SecurityQTY, p.UOMs_Ref, ISNULL(o.OutQTY, 0) AS OutQTY, ISNULL(i.InQTY, 0) AS InQTY,
ISNULL(i.InQTY, 0) - ISNULL(o.OutQTY, 0) AS BalanceQTY, dbo.UOMs.UOMName
FROM dbo.Products AS p INNER JOIN
dbo.UOMs ON p.UOMs_Ref = dbo.UOMs.Ref LEFT OUTER JOIN
dbo.vInQTY AS i ON p.ItemRef = i.ItemRef LEFT OUTER JOIN
dbo.vOutQTY AS o ON p.ItemRef = o.ItemRef
第二步根据安全库存设置计算采购计划:
SELECT dbo.vStockSum.ItemRef, dbo.vStockSum.ItemName, dbo.vStockSum.LowerQTY, dbo.vStockSum.UpperQTY, dbo.vStockSum.SecurityQTY, dbo.vStockSum.BalanceQTY,
dbo.vStockSum.BalanceQTY - dbo.vStockSum.LowerQTY AS L, ABS(dbo.vStockSum.BalanceQTY - dbo.vStockSum.LowerQTY) AS PurchasePlan,
dbo.vStockSum.UOMs_Ref, dbo.UOMs.UOMName
FROM dbo.vStockSum INNER JOIN
dbo.UOMs ON dbo.vStockSum.UOMs_Ref = dbo.UOMs.Ref
WHERE (dbo.vStockSum.BalanceQTY - dbo.vStockSum.LowerQTY < 0)
没有评论:
发表评论