Hi,
Thanks for the reply. I have tried two approaches to manually create PurchParmLine for Registered items, but I am still stuck.
Code Set 1: I looped through WMSJournalTrans. The code runs, but no Product Receipt is created and no error message appears.
Code Set 2: I joined PurchLine with InventTrans (Status: Registered). This time it triggers an error.
The Error Message:
"The state of the source document or source document line could not be updated."
Code Set 3: no Product Receipt is created and no error message appears.
Code Set 1 (No Error, No Receipt):
WMSJournalTable wmsJournalTable = WMSJournalTable::find(JournalId);
WMSJournalTrans wmsJournalTrans;
PurchTable purchTable;
PurchFormLetter_PackingSlip purchFormLetter;
PurchFormletterParmData purchFormLetterParmData;
PurchParmUpdate purchParmUpdate;
PurchParmTable purchParmTable;
PurchParmLine purchParmLine;
PurchLine purchLine;
DocumentStatus v_DocumentStatus = DocumentStatus::PackingSlip;
try
{
ttsbegin;
purchTable = PurchTable::find(wmsJournalTable.inventTransRefId);
if (!purchTable.RecId)
throw error("PurchTable not found from journal reference.");
purchFormLetterParmData = PurchFormletterParmData::newData(v_DocumentStatus, VersioningUpdateType::Initial);
purchFormLetterParmData.parmOnlyCreateParmUpdate(true);
purchFormLetterParmData.createData(false);
purchParmUpdate = purchFormLetterParmData.parmParmUpdate();
purchParmTable.clear();
purchParmTable.initValue();
purchParmTable.TransDate = today();
purchParmTable.Num = wmsJournalTable.packingSlip;
purchParmTable.Ordering = v_DocumentStatus;
purchParmTable.PurchId = purchTable.PurchId;
purchParmTable.ParmId = purchParmUpdate.ParmId;
purchParmTable.insert();
while select wmsJournalTrans
where wmsJournalTrans.journalId == wmsJournalTable.journalId
&& wmsJournalTrans.inventTransRefId == purchTable.PurchId
{
purchLine = PurchLine::findInventTransId(wmsJournalTrans.InventTransId);
if (purchLine.RecId)
{
purchParmLine.clear();
purchParmLine.initFromPurchLine(purchLine);
purchParmLine.ParmId = purchParmTable.ParmId;
purchParmLine.TableRefId = purchParmTable.TableRefId;
purchParmLine.InventDimId = wmsJournalTrans.inventDimId;
purchParmLine.ReceiveNow = wmsJournalTrans.qty;
purchParmLine.setQty(v_DocumentStatus, false, true);
purchParmLine.setLineAmount();
purchParmLine.insert();
}
}
purchFormLetter = PurchFormLetter::construct(v_DocumentStatus);
purchFormLetter.transDate(systemDateGet());
purchFormLetter.specQty(PurchUpdate::Recorded);
purchFormLetter.purchTable(purchTable);
purchFormLetter.parmId(purchParmTable.ParmId);
purchFormLetter.purchParmUpdate(purchFormLetterParmData.parmParmUpdate());
purchFormLetter.run();
ttscommit;
}
catch (Exception::Error)
{
ttsabort;
throw;
}
Code Set 2 (Triggering "Source document state" Error):
public static void postProductReceiptX(PurchId purchId ,Num packingSlipId)
{
PurchFormLetter purchFormLetter;
PurchFormletterParmData purchFormLetterParmData;
PurchParmUpdate purchParmUpdate;
PurchParmTable purchParmTable;
PurchParmLine purchParmLine;
PurchTable purchTable = PurchTable::find(purchId);
PurchLine purchLine;
InventTrans inventTrans;
InventTransOrigin inventTransOrigin;
ttsBegin;
purchFormLetterParmData = PurchFormletterParmData::newData(DocumentStatus::PackingSlip, VersioningUpdateType::Initial);
purchFormLetterParmData.parmOnlyCreateParmUpdate(true);
purchFormLetterParmData.createData(false);
purchParmUpdate = purchFormLetterParmData.parmParmUpdate();
purchParmTable.clear();
purchParmTable.initValue();
purchParmTable.TransDate = today();
purchParmTable.Ordering = DocumentStatus::PackingSlip;
purchParmTable.Num = packingSlipId;
purchParmTable.PurchId = purchTable.PurchId;
purchParmTable.ParmId = purchParmUpdate.ParmId;
purchParmTable.insert();
while select purchLine join inventTrans join inventTransOrigin
where purchLine.PurchId == purchTable.PurchId
&& inventTransOrigin.InventTransId == purchLine.InventTransId
&& inventTrans.InventTransOrigin == inventTransOrigin.RecId
&& inventTrans.StatusReceipt == StatusReceipt::Registered
{
purchParmLine.clear();
purchParmLine.initFromPurchLine(purchLine);
purchParmLine.ReceiveNow = inventTrans.Qty;
purchParmLine.InventDimId = inventTrans.inventDimId;
purchParmLine.ParmId = purchParmTable.ParmId;
purchParmLine.TableRefId = purchParmTable.TableRefId;
purchParmLine.setQty(DocumentStatus::PackingSlip, false, true);
purchParmLine.setLineAmount();
purchParmLine.insert();
}
purchFormLetter = PurchFormLetter::construct(DocumentStatus::PackingSlip);
purchFormLetter.specQty(PurchUpdate::Recorded);
purchFormLetter.purchTable(purchTable);
purchFormLetter.parmId(purchParmTable.ParmId);
purchFormLetter.purchParmUpdate(purchFormLetterParmData.parmParmUpdate());
purchFormLetter.run();
ttsCommit;
}
Code Set 3
public void purchReceiptOnePO(PurchId _purchId, Num _packingSlipId)
{
PurchTable purchTable;
purchTable = PurchTable::find(_purchId);
PurchFormLetter purchFormLetter;
purchFormLetter = purchFormLetter::construct(DocumentStatus::PackingSlip);
purchFormLetter.showQueryForm(false);
purchFormLetter.update(purchTable, _packingSlipId, today(), PurchUpdate::Recorded, AccountOrder::None, false, false);
}