在AX 2009中,如果净需求的需求日期已过,可以通过以下代码示例解决:
static void ResolveNetRequirementDemandDatePassed(Args _args)
{
InventTransferJour inventTransferJour;
InventTrans inventTrans;
Qty qtyRemaining;
// 获取净需求
while select * from inventTransferJour
where inventTransferJour.Status == InventTransferStatus::Waiting
{
while select * from inventTrans
where inventTrans.TransferId == inventTransferJour.TransferId &&
inventTrans.Status == InventTransStatus::Waiting &&
inventTrans.InventDimId == inventTransferJour.InventDimId &&
inventTrans.ItemId == inventTransferJour.ItemId &&
inventTrans.NetReq > 0 &&
inventTrans.DlvDate < systemDateGet()
{
// 获取剩余数量
qtyRemaining = inventTrans.NetReq - inventTrans.QtyShipped;
if (qtyRemaining > 0)
{
// 创建新的交易行
inventTrans.clear();
inventTrans.initValue();
inventTrans.TransferId = inventTransferJour.TransferId;
inventTrans.InventDimId = inventTransferJour.InventDimId;
inventTrans.ItemId = inventTransferJour.ItemId;
inventTrans.NetReq = qtyRemaining;
inventTrans.DlvDate = systemDateGet() + 1;
inventTrans.insert();
// 更新原始交易行的数量
inventTrans.QtyShipped += qtyRemaining;
inventTrans.update();
info("已解决净需求 - 需求日期已过:交易行 " + inventTrans.RecId);
}
}
}
}
这个示例代码通过循环遍历所有待处理的库存转移单(InventTransferJour
),然后再循环遍历与之相关的库存转移交易行(InventTrans
)。在满足一定条件的情况下(净需求大于0且需求日期已过),创建新的交易行来解决净需求。
请注意,这只是一个示例代码,并且可能需要根据实际情况进行修改和适应。在实际应用中,请确保对代码进行适当的测试和验证。