Hi All,
I written a code now its creating packing slip for each sales order seperately, but i need to generate a single packing slip for all the sales order.These sales orders are for same customer only.Where to i modify the code.Pls anyone help me on this.
Thanks in advance
class ITCommercialInvoicePackingSlip { public static boolean check; public static void main(Args _args) { ITCommercialInvoicePackingSlip iTCommercialInvoicePackingSliploc = new ITCommercialInvoicePackingSlip(); // boolean get = iTCommercialInvoicePackingSliploc.validate(_args); //if(get == true) iTCommercialInvoicePackingSliploc.validate1(_args); if(check == true) { SalesFormLetter_PackingSlip salesFormLetter_PackingSlip; salesFormLetter salesFormLetter; salesFormletterParmData salesFormLetterParmData; SalesParmTable salesParmTable; SalesParmLine salesParmLine; salesLine salesLine, salesLineUpd; salesParmUpdate salesParmUpdate; SalesTable salestable; ITCommercialOverview iTCommercialOverview,iTCommercialOverviewloc,iTCommercialOverviewupdate; ITCommercialInvoiceLine iTCommercialInvoiceLine,iTCommercialInvoiceLineloc,iTCommercialInvoiceLineCheck,iTCommercialInvoiceLineUpdate; CustPackingSlipJour custPackingSlipJour,custPackingSlipJourloc; CustPackingSlipTrans custPackingSlipTrans; // TransDate PackingSlipDate = //str2Date(dataContract.parmPackinSlipDate(), 213); RecId recid = _args.record().RecId; select iTCommercialOverview // where iTCommercialOverview.Status == ITCommercialInvoiceStatus::Open where iTCommercialOverview.RecId == recid; // { //salestable= SalesTable::find(iTCommercialOverview.salesid, true); //if(!salestable) //{ if(iTCommercialOverview.SalesId == "Multiple") { while select iTCommercialInvoiceLineloc where iTCommercialInvoiceLineloc.CommercialInvoice == iTCommercialOverview.CommercialInvoice if(iTCommercialInvoiceLineCheck.SalesId!=iTCommercialInvoiceLineloc.SalesId) { salestable= SalesTable::find(iTCommercialInvoiceLineloc.salesid, true); iTCommercialInvoiceLineCheck.SalesId = iTCommercialInvoiceLineloc.SalesId; if (iTCommercialOverview && iTCommercialOverview.Status == ITCommercialInvoiceStatus::Open) { ttsbegin; salesFormLetterParmData = salesFormletterParmData::newData(DocumentStatus::PackingSlip, VersioningUpdateType::Initial); salesFormLetterParmData.parmOnlyCreateParmUpdate(true); salesFormLetterParmData.createData(false); salesParmUpdate = salesFormLetterParmData.parmParmUpdate(); salesParmTable.clear(); salesParmTable.TransDate = iTCommercialOverview.InvoiceDate; 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.InventSiteId = salesTable.InventSiteId; salesParmTable.ParmId = salesParmUpdate.ParmId; salesParmTable.insert(); while select iTCommercialInvoiceLine where iTCommercialInvoiceLine.CommercialInvoice == iTCommercialOverview.CommercialInvoice { salesline = SalesLine::find(iTCommercialInvoiceLine.SalesId,iTCommercialInvoiceLine.LineNum); salesParmLine.InitFromsalesLine(salesLine); salesParmLine.DeliverNow = iTCommercialInvoiceLine.SalesQty; salesParmLine.ParmId = salesParmTable.ParmId; salesParmLine.TableRefId = salesParmTable.TableRefId; salesParmLine.LineNum = iTCommercialInvoiceLine.LineNum; salesParmLine.LineAmount = iTCommercialInvoiceLine.LineAmount; salesParmLine.ITNetWeight = iTCommercialInvoiceLine.NetWeight; salesParmLine.setQty(DocumentStatus::PackingSlip, false, true); salesParmLine.insert(); } salesFormLetter_PackingSlip = salesFormLetter::construct(DocumentStatus::PackingSlip); salesFormLetter_PackingSlip.transDate(today()); salesFormLetter_PackingSlip.proforma(false); salesFormLetter_PackingSlip.specQty(salesUpdate::PackingSlip); salesFormLetter_PackingSlip.salesTable(salestable); salesFormLetter_PackingSlip.parmId(salesParmTable.ParmId); salesFormLetter_PackingSlip.sumBy(AccountOrder::Account); //salesFormLetter.update(salesTable,systemDateGet(),SalesUpdate::PackingSlip,AccountOrder::Account,NoYes::No, NoYes::No, NoYes::No); salesFormLetter_PackingSlip.salesParmUpdate(salesFormLetterParmData.parmParmUpdate()); salesFormLetter_PackingSlip.run(); // salesFormLetter.update(salesTable,systemDateGet(),SalesUpdate::PackingSlip,AccountOrder::None,NoYes::No, NoYes::No, NoYes::No); if (salesFormLetter_PackingSlip.parmJournalRecord().TableId == tableNum(custPackingSlipJour)) { custPackingSlipJour = salesFormLetter_PackingSlip.parmJournalRecord(); while select forupdate custPackingSlipTrans where custPackingSlipTrans.SalesId == custPackingSlipJour.SalesId && custPackingSlipTrans.PackingSlipId == custPackingSlipJour.PackingSlipId { custPackingSlipTrans.CommercialInvoice = iTCommercialOverview.CommercialInvoice; custPackingSlipTrans.CommercialDate = iTCommercialOverview.InvoiceDate; custPackingSlipTrans.update(); } select forupdate custPackingSlipJourloc where custPackingSlipJourloc.RecId == custPackingSlipJour.RecId; custPackingSlipJourloc.CommercialInvoice = iTCommercialOverview.CommercialInvoice; custPackingSlipJourloc.CommercialDate = iTCommercialOverview.InvoiceDate; custPackingSlipJourloc.update(); info(strFmt('Sales Order -%1 delivered with packing slip :%2 ',custPackingSlipJourloc.SalesId,custPackingSlipJourloc.PackingSlipId)); select forupdate iTCommercialOverviewupdate where iTCommercialOverviewupdate.CommercialInvoice == iTCommercialOverview.CommercialInvoice; iTCommercialOverviewupdate.Status = ITCommercialInvoiceStatus::Delivered; iTCommercialOverviewupdate.PakcingSlipNo = custPackingSlipJour.PackingSlipId; iTCommercialOverviewupdate.PackingSlipDate = custPackingSlipJour.DeliveryDate; iTCommercialOverviewupdate.update(); while select forupdate iTCommercialInvoiceLineUpdate where iTCommercialInvoiceLineUpdate.CommercialInvoice ==iTCommercialOverview.CommercialInvoice { select custPackingSlipTrans where custPackingSlipTrans.SalesId == iTCommercialInvoiceLineUpdate.SalesId && custPackingSlipTrans.ItemId == iTCommercialInvoiceLineUpdate.ItemId && custPackingSlipTrans.PackingSlipId == custPackingSlipJour.PackingSlipId; iTCommercialInvoiceLineUpdate.DeliveredQty = custPackingSlipTrans.Qty; iTCommercialInvoiceLineUpdate.update(); } } ttscommit; } } } // } else { salestable= SalesTable::find(iTCommercialOverview.salesid, true); if (iTCommercialOverview && iTCommercialOverview.Status == ITCommercialInvoiceStatus::Open) { ttsbegin; salesFormLetterParmData = salesFormletterParmData::newData(DocumentStatus::PackingSlip, VersioningUpdateType::Initial); salesFormLetterParmData.parmOnlyCreateParmUpdate(true); salesFormLetterParmData.createData(false); salesParmUpdate = salesFormLetterParmData.parmParmUpdate(); salesParmTable.clear(); salesParmTable.TransDate = iTCommercialOverview.InvoiceDate; 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.InventSiteId = salesTable.InventSiteId; salesParmTable.ParmId = salesParmUpdate.ParmId; salesParmTable.insert(); while select iTCommercialInvoiceLine where iTCommercialInvoiceLine.CommercialInvoice == iTCommercialOverview.CommercialInvoice { salesline = SalesLine::find(iTCommercialInvoiceLine.SalesId,iTCommercialInvoiceLine.LineNum); salesParmLine.InitFromsalesLine(salesLine); salesParmLine.DeliverNow = iTCommercialInvoiceLine.SalesQty; salesParmLine.ParmId = salesParmTable.ParmId; salesParmLine.TableRefId = salesParmTable.TableRefId; salesParmLine.LineNum = iTCommercialInvoiceLine.LineNum; salesParmLine.LineAmount = iTCommercialInvoiceLine.LineAmount; salesParmLine.ITNetWeight = iTCommercialInvoiceLine.NetWeight; salesParmLine.setQty(DocumentStatus::PackingSlip, false, true); salesParmLine.insert(); } salesFormLetter_PackingSlip = salesFormLetter::construct(DocumentStatus::PackingSlip); salesFormLetter_PackingSlip.transDate(today()); salesFormLetter_PackingSlip.proforma(false); salesFormLetter_PackingSlip.specQty(salesUpdate::PackingSlip); salesFormLetter_PackingSlip.salesTable(salestable); //salesFormLetter_PackingSlip.acc(salestable); salesFormLetter_PackingSlip.parmId(salesParmTable.ParmId); salesFormLetter_PackingSlip.salesParmUpdate(salesFormLetterParmData.parmParmUpdate()); salesFormLetter_PackingSlip.run(); // salesFormLetter.update(salesTable,systemDateGet(),SalesUpdate::PackingSlip,AccountOrder::None,NoYes::No, NoYes::No, NoYes::No); if (salesFormLetter_PackingSlip.parmJournalRecord().TableId == tableNum(custPackingSlipJour)) { custPackingSlipJour = salesFormLetter_PackingSlip.parmJournalRecord(); while select forupdate custPackingSlipTrans where custPackingSlipTrans.SalesId == custPackingSlipJour.SalesId && custPackingSlipTrans.PackingSlipId == custPackingSlipJour.PackingSlipId { custPackingSlipTrans.CommercialInvoice = iTCommercialOverview.CommercialInvoice; custPackingSlipTrans.CommercialDate = iTCommercialOverview.InvoiceDate; custPackingSlipTrans.update(); } select forupdate custPackingSlipJourloc where custPackingSlipJourloc.RecId == custPackingSlipJour.RecId; custPackingSlipJourloc.CommercialInvoice = iTCommercialOverview.CommercialInvoice; custPackingSlipJourloc.CommercialDate = iTCommercialOverview.InvoiceDate; custPackingSlipJourloc.update(); info(strFmt('Sales Order -%1 delivered with packing slip :%2 ',custPackingSlipJourloc.SalesId,custPackingSlipJourloc.PackingSlipId)); select forupdate iTCommercialOverviewupdate where iTCommercialOverviewupdate.CommercialInvoice == iTCommercialOverview.CommercialInvoice; iTCommercialOverviewupdate.Status = ITCommercialInvoiceStatus::Delivered; iTCommercialOverviewupdate.PakcingSlipNo = custPackingSlipJour.PackingSlipId; iTCommercialOverviewupdate.PackingSlipDate = custPackingSlipJour.DeliveryDate; iTCommercialOverviewupdate.update(); while select forupdate iTCommercialInvoiceLineUpdate where iTCommercialInvoiceLineUpdate.CommercialInvoice ==iTCommercialOverview.CommercialInvoice { select custPackingSlipTrans where custPackingSlipTrans.SalesId == iTCommercialInvoiceLineUpdate.SalesId && custPackingSlipTrans.ItemId == iTCommercialInvoiceLineUpdate.ItemId && custPackingSlipTrans.PackingSlipId == custPackingSlipJour.PackingSlipId; iTCommercialInvoiceLineUpdate.DeliveredQty = custPackingSlipTrans.Qty; iTCommercialInvoiceLineUpdate.update(); } } ttscommit; } } FormDataSource fds; Object calleform; calleform = _args.caller(); fds = _args.record().datasource(); if(calleform) { fds.refresh(); fds.research(true); } } } public boolean validate(Args args) { boolean ret = true; RecId recid = args.record().RecId; iTCommercialOverview iTCommercialOverviewCheck; ITCommercialInvoiceLine iTCommercialInvoiceLine; InventTrans inventTrans; SalesLine salesLine; select iTCommercialOverviewCheck where iTCommercialOverviewCheck.RecId == recid; while select iTCommercialInvoiceLine where iTCommercialInvoiceLine.CommercialInvoice == iTCommercialOverviewCheck.CommercialInvoice { salesline = SalesLine::find(iTCommercialInvoiceLine.SalesId,iTCommercialInvoiceLine.LineNum); select inventTrans where inventTrans.ItemId == salesline.ItemId && inventTrans.StatusIssue == StatusIssue::ReservPhysical && inventTrans.Qty == -iTCommercialInvoiceLine.SalesQty; if(!inventTrans) { info(strFmt('Order Number %1, Line Number %2, Item %3 is not reserved•The posting should not be initiated until the full quantities reserved.' ,iTCommercialInvoiceLine.SalesId,iTCommercialInvoiceLine.LineNum,iTCommercialInvoiceLine.ItemId)); ret = false; } if(salesline.RemainSalesPhysical < iTCommercialInvoiceLine.SalesQty) { info(strFmt('Order Number %1, Line Number %2, Item %3 Qty difference ' ,iTCommercialInvoiceLine.SalesId,iTCommercialInvoiceLine.LineNum,iTCommercialInvoiceLine.ItemId,iTCommercialInvoiceLine.SalesQty - salesline.RemainSalesPhysical )); ret = false; } } return ret; } public void validate1(Args args) { check = true; RecId recid = args.record().RecId; iTCommercialOverview iTCommercialOverviewCheck; ITCommercialInvoiceLine iTCommercialInvoiceLine; InventTrans inventTrans; SalesLine salesLine; select iTCommercialOverviewCheck where iTCommercialOverviewCheck.RecId == recid; while select iTCommercialInvoiceLine where iTCommercialInvoiceLine.CommercialInvoice == iTCommercialOverviewCheck.CommercialInvoice { salesline = SalesLine::find(iTCommercialInvoiceLine.SalesId,iTCommercialInvoiceLine.LineNum); //select inventTrans // where inventTrans.ItemId == salesline.ItemId // && inventTrans.StatusIssue == StatusIssue::ReservPhysical // && inventTrans.Qty == -iTCommercialInvoiceLine.SalesQty; //if(!inventTrans) //{ // info(strFmt('Order Number %1, Line Number %2, Item %3 is not reserved•The posting should not be initiated until the full quantities reserved.' // ,iTCommercialInvoiceLine.SalesId,iTCommercialInvoiceLine.LineNum,iTCommercialInvoiceLine.ItemId)); // check = false; //} real qtycheck; qtycheck = salesLine.reservedPhysical(); if(qtycheck < iTCommercialInvoiceLine.SalesQty) { info(strFmt('Order Number %1, Line Number %2, Item %3 is not reserved•The posting should not be initiated until the full quantities reserved.' ,iTCommercialInvoiceLine.SalesId,iTCommercialInvoiceLine.LineNum,iTCommercialInvoiceLine.ItemId)); check = false; } if(salesline.RemainSalesPhysical < iTCommercialInvoiceLine.SalesQty) { info(strFmt('Order Number %1, Line Number %2, Item %3 Qty difference ' ,iTCommercialInvoiceLine.SalesId,iTCommercialInvoiceLine.LineNum,iTCommercialInvoiceLine.ItemId,iTCommercialInvoiceLine.SalesQty - salesline.RemainSalesPhysical )); check = false; } } // return ret; } }
Hi Mohit,
Thanks for the reply, I already referred this blog and standard class but dont know how to change my code can you pls help me on this.
Hi, Please check this thread. Although, it doesn't have code to create single packing slip but its point you to look at standard logic to investigate.
community.dynamics.com/.../create-sales-packing-slip-for-a-list-of-sales-order-with-x
André Arnaud de Cal...
291,971
Super User 2025 Season 1
Martin Dráb
230,846
Most Valuable Professional
nmaenpaa
101,156