简体   繁体   English

如何在基于交易的库存管理中初始化所有零件的库存?

[英]How can I initialize inventory for all parts in transaction-based inventory management?

I have a database that tracks a set of consumable assets and compares on-hand inventory to a forecast of orders for the coming month. 我有一个数据库,该数据库跟踪一组消耗性资产,并将现有库存与下个月的订单预测进行比较。 It handles finding the on-hand inventory by taking a sum of deposits and withdrawals for each part (when parts are used or new parts are received from a vendor, they are checked in and out). 它通过对每个零件进行充值和取款的总和来处理现有库存(当使用零件或从供应商处收到新零件时,将其检入和检出)。

My gap analysis query takes the input parameters Month and Year and returns the gap between on-hand and forecast. 我的差距分析查询采用输入参数Month和Year,并返回现有和预测之间的差距。 This works great for inventory parts that have already had a transaction on them, but parts that haven't been "initialized" into my transaction table will not appear in the gap analysis. 这对已经进行交易的库存零件非常有用,但是尚未“初始化”到我的交易表中的零件将不会出现在缺口分析中。

Is it advisable to just write an append query to add a 0-sum transaction for each part to the transactions table? 明智的做法是只编写一个追加查询,以将每个部分的0和交易添加到事务表中? This seems a little dirty but it may work, but I was wondering if there is a more elegant or best-practice way to do this. 这似乎有点脏,但可能会起作用,但是我想知道是否有更优雅或最佳实践的方法。

This is my qryGapAnalysis SQL; 这是我的qryGapAnalysis SQL; fair warning, I just use the Access query design so it's disgusting but it may be helpful. 公平的警告,我只是使用Access查询设计,所以这很令人恶心,但可能会有所帮助。

SELECT tblInventory.electrodeID, tblJobs.ForecastYear, 
tblJobs.ForecastMonth, tblJobs.jobNumber, tblJobs.Part, tblJobs.partQty, 
tblInventory.partsPerElectrode, [Qty In]-[Qty Out] AS OnHand, 
IIf(Round(([partQty]/[partsPerElectrode])-Sum([Qty In]-[Qty 
Out]))>0,Round(([partQty]/[partsPerElectrode])-Sum([Qty In]-[Qty Out])),0) 
AS Need
FROM ((tblParts INNER JOIN tblInventory ON tblParts.[Part #] = tblInventory. 
[partID]) INNER JOIN tblJobs ON tblParts.[Part #] = tblJobs.Part) INNER JOIN 
tblTransactions ON tblInventory.electrodeID = tblTransactions.Electrode
GROUP BY tblInventory.electrodeID, tblJobs.ForecastYear, 
tblJobs.ForecastMonth, tblJobs.jobNumber, tblJobs.Part, tblJobs.partQty, 
tblInventory.partsPerElectrode, [Qty In]-[Qty Out], tblInventory.electrodeID
HAVING (((tblJobs.ForecastYear)=Forms!frmGapAnalysisParameters!ComboYear) 
And ((tblJobs.ForecastMonth)=Forms!frmGapAnalysisParameters!ComboMonth));

Try something like this: 尝试这样的事情:

select a.electrodeID, b.* from 
    (select b.* from tblParts a INNER JOIN tblInventory b ON tblParts.[Part #] = tblInventory)a 
    left join 
    (SELECT tblInventory.electrodeID, tblJobs.ForecastYear, 
    tblJobs.ForecastMonth, tblJobs.jobNumber, tblJobs.Part, tblJobs.partQty, 
    tblInventory.partsPerElectrode, [Qty In]-[Qty Out] AS OnHand, 
    IIf(Round(([partQty]/[partsPerElectrode])-Sum([Qty In]-[Qty 
    Out]))>0,Round(([partQty]/[partsPerElectrode])-Sum([Qty In]-[Qty Out])),0) 
    AS Need
    FROM ((tblParts INNER JOIN tblInventory ON tblParts.[Part #] = tblInventory. 
    [partID]) INNER JOIN tblJobs ON tblParts.[Part #] = tblJobs.Part) INNER JOIN 
    tblTransactions ON tblInventory.electrodeID = tblTransactions.Electrode
    GROUP BY tblInventory.electrodeID, tblJobs.ForecastYear, 
    tblJobs.ForecastMonth, tblJobs.jobNumber, tblJobs.Part, tblJobs.partQty, 
    tblInventory.partsPerElectrode, [Qty In]-[Qty Out], tblInventory.electrodeID
    HAVING (((tblJobs.ForecastYear)=Forms!frmGapAnalysisParameters!ComboYear) 
    And ((tblJobs.ForecastMonth)=Forms!frmGapAnalysisParameters!ComboMonth))) b on a.electrodeID=b.electrodeID

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM