我正在开具收据期间进行调整。
public void CreateAdjustment()
{
try
{
INAdjustmentEntry iNAdjustmentEntryEntry = PXGraph.CreateInstance<INAdjustmentEntry>();
INRegister iNRegister = new INRegister();
iNRegister = iNAdjustmentEntryEntry.adjustment.Insert();
iNRegister.Status = INDocStatus.Balanced;
iNRegister.ExtRefNbr = Base.CurrentDocument.Current.ExtRefNbr == null ? " " : Base.CurrentDocument.Current.ExtRefNbr;
iNRegister.TranDesc = Base.CurrentDocument.Current.TranDesc == null ? " " : Base.CurrentDocument.Current.TranDesc;
iNRegister.Hold = false;
INSetup iNSetup = PXSelect<INSetup>.Select(Base);
INSetupExt iNSetupExt = iNSetup.GetExtension<INSetupExt>();
iNRegister = iNAdjustmentEntryEntry.adjustment.Update(iNRegister);
iNAdjustmentEntryEntry.adjustment.Current = iNRegister;
iNAdjustmentEntryEntry.adjustment.SetValueExt<INRegisterExt.usrReasonCode>(iNRegister, iNSetupExt.UsrAutoGenAdjustmentFromAdjustments);
// iNAdjustmentEntryEntry.Save.PressButton();
foreach (INTran item in Base.transactions.Select())
{
INTran iNTran = iNAdjustmentEntryEntry.transactions.Insert();
iNTran.InventoryID = item.InventoryID;
iNTran.ReasonCode = iNSetupExt.UsrAutoGenAdjustmentFromAdjustments;
iNTran.LocationID = item.LocationID;
iNTran.SiteID = item.SiteID;
iNTran.Qty = 0;
var rowExt = Base.transactions.Cache.GetExtension<INTranExt>(item);
if (rowExt.UsrNewUnitCost == null)
{
rowExt.UsrNewUnitCost = 0;
}
iNTran.TranCost = item.Qty * (rowExt.UsrNewUnitCost - item.UnitCost);
iNTran.UnitCost = item.UnitCost;
iNAdjustmentEntryEntry.transactions.Update(iNTran);
}
iNAdjustmentEntryEntry.Save.PressButton();
iNAdjustmentEntryEntry.release.PressButton();
}
catch (Exception ex)
{
PXTrace.WriteError("JVD2StepTransfersWithExtraAdjustments CreateAdjustment: " + ex.Message);
}
}
保存有效,但当我最后按下释放按钮时,出现以下错误:
我认为该文档需要进行后台处理,以便它知道其处于平衡状态,但我不知道该怎么做。
我不会手动设置工作流程状态。我过去已经很好地插入了 IAdjustments。你的代码和我的代码之间的区别在于我完成了文档,然后将其从保留状态中删除,保存并释放。
//insert document and lines
register.Hold = false;
register = adjGraph.adjustment.Update(register);
adjGraph.Save.Press();
adjGraph.release.Press();