I don't see TableRefId field in SalesParmPackingSlipTrackingInformation table. i am able to insert record in SalesParmPackingSlipTrackingInformation table only post packing slip execution. looks like salesFormLetter_PackingSlip.run(); this method is overriding the SalesParmPackingSlipTrackingInformation table. more over after posting packing slip, TableRefId is not matching between salesParmtable and SalesParmPackingSlipTrackingInformation.
here is my complete code:
InventTrackingRegisterTrans InventTrackingRegisterTrans;
InventTrackingRegisterTransform formcontroller;
SalesFormLetter_Packingslip salesFormLetter_PackingSlip;
salesFormLetter salesFormLetter;
salesFormletterParmData salesFormLetterParmData;
SalesParmTable salesParmTable;
SalesParmLine salesParmLine;
salesLine salesLine ,salesLineUpd;
salesParmUpdate salesParmUpdate;
SalesTable salestable;
CustPackingSlipJour custPackingSlipJour;
MSE_SalesOrderPackingListPostStatus salesOrderPackingListPostStatus;
List salesOrderReceiptList;
ListIterator lineIterator;
MSE_SalesOrderLines salesOrderLine;
SalesParmPackingSlipTrackingInformation salesParmTrackingInfo;
int fromLine;
str errorMsg;
str dataareaid;
boolean postStatus;
salestable= SalesTable::find(salestable.SalesId, true);
TransDate PackingSlipDate = salesOrderPackingList.paramPackinSlipDate();
salesOrderPackingListPostStatus = new MSE_SalesOrderPackingListPostStatus();
try
{
dataareaid = subStr(salesOrderPackingList.parmSalesOrderNumber(),0,3);
changecompany(dataareaid)
salestable = salestable::find(salesOrderPackingList.parmSalesOrderNumber());
if(!salestable)
{
postStatus = false;
throw error(strFmt("Cannot find Sales Order: %1",salesOrderPackingList.parmSalesOrderNumber()));
}
fromLine = Global::infologLine();
this.validatesalesOrderPackingList(salesOrderPackingList);
if(salestable && salestable.SalesStatus == SalesStatus::Backorder)
{
ttsbegin;
salesFormLetterParmData = salesFormletterParmData::newData(DocumentStatus::PackingSlip, VersioningUpdateType::Initial);
salesFormLetterParmData.parmOnlyCreateParmUpdate(true);
salesFormLetterParmData.createData(false);
salesParmUpdate = salesFormLetterParmData.parmParmUpdate();
salesParmTable.clear();
salesParmTable.TransDate = PackingSlipDate;
salesParmTable.Ordering = DocumentStatus::PackingSlip;
salesParmTable.ParmJobStatus = ParmJobStatus::Waiting;
salesParmTable.salesId = salesTable.salesId;
salesParmTable.salesName = salesTable.salesName;
salesParmTable.DeliveryName = salesTable.DeliveryName;
salesParmTable.DeliveryPostalAddress = salesTable.DeliveryPostalAddress;
salesParmTable.CustAccount = salesTable.CustAccount;
salesParmTable.CurrencyCode = salesTable.CurrencyCode;
salesParmTable.InvoiceAccount = salesTable.InvoiceAccount;
salesParmTable.ParmId = salesParmUpdate.ParmId;
salesParmTable.insert();
salesOrderReceiptList = salesOrderPackingList.parmSalesOrderLines();
lineIterator = new ListIterator(salesOrderReceiptList);
while (lineIterator.more())
{
changecompany(dataareaid)
salesOrderLine = lineIterator.value();
salesLine.clear();
salesLine = SalesLine::find(salesOrderPackingList.parmSalesOrderNumber(),salesOrderLine.parmSalesLineNumber());
if(!salesLine)
{
postStatus = false;
throw error(strFmt("Cannot find Sales line number %1 for Sales order: %2",salesOrderLine.parmSalesLineNumber(),salesOrderPackingList.parmSalesOrderNumber()));
}
salesParmLine.InitFromsalesLine(salesLine);
salesParmLine.DeliverNow = salesOrderLine.parmQtyToReceive();
salesParmLine.ParmId = salesParmTable.ParmId;
salesParmLine.TableRefId = salesParmTable.TableRefId;
salesParmLine.setQty(DocumentStatus::PackingSlip, false, true);
salesParmLine.setLineAmount(salesLine);
salesParmLine.insert();
Args arg = new Args();
Common salesLineRec = salesParmLine;
arg.record(salesLineRec);
formcontroller = InventTrackingRegisterTransForm::construct(arg);
for(int i =0 ; i<=salesParmLine.DeliverNow;i++)
{
formController.insertSerialNumber("XXXXX"+int2Str(i));
}
lineIterator.next();
}
salesFormLetter_PackingSlip = salesFormLetter::construct(DocumentStatus::PackingSlip);
salesFormLetter_PackingSlip.transDate(PackingSlipDate);
salesFormLetter_PackingSlip.proforma(false);
salesFormLetter_PackingSlip.specQty(salesUpdate::All);
salesFormLetter_PackingSlip.salesTable(salesTable);
salesFormLetter_PackingSlip.parmId(salesParmTable.ParmId);
salesFormLetter_PackingSlip.salesParmUpdate(salesFormLetterParmData.parmParmUpdate());
salesFormLetter_PackingSlip.run();
salesParmTrackingInfo.SalesParmId = salesParmTable.ParmId;
salesParmTrackingInfo.SalesParmTableRefId = salesParmTable.TableRefId;
salesParmTrackingInfo.TrackingNumber = "TRACKXXX";
salesParmTrackingInfo.TrackingURL = "www.TrackURLXXX.com";
salesParmTrackingInfo.insert();
if (salesFormLetter_PackingSlip.parmJournalRecord().TableId == tableNum(custPackingSlipJour))
{
custPackingSlipJour = salesFormLetter_PackingSlip.parmJournalRecord();
info(custPackingSlipJour.PackingSlipId);
}
postStatus = true;
ttscommit;
}
}
catch(Exception::Error)
{
ttsAbort;
errorMsg = MSEPurchOrderService::getInfoLogMessages(fromLine);
postStatus = false;
salesOrderPackingListPostStatus.parmMessage(errorMsg);
}
salesOrderPackingListPostStatus.parmPosted(postStatus);
return salesOrderPackingListPostStatus;