Post Picking list in D365 F&O
Today, I am going to share with you about how to post Picking list for entire sales order or a particular sales order line.
Here we go for entire Sales order:-
Post Picking list for a sales order
To post picking list for an entire sales order, we need to pass SalesId to initialize data into Sales Parm tables.
/// <summary>
/// to post pick list for an item requirement.
/// </summary>
/// <param name = "_salesId"> SalesId is passed as parameter. </param>
/// <param name = "_inventTransId"> InventTransId is passed as parameter. </param>
public void postPickingList(SalesId _salesId, InventTransId _inventTransId)
{
SalesTable salesTable = salesTable::find(_salesId);
SalesFormLetter salesFormLetter;
SalesParmLine salesParmLine;
// below line is to post Picking list for a sales order
salesFormLetter = SalesFormLetter::construct(DocumentStatus::PickingList);
// If you want to post Picking list for a project sales order, comment above line and uncomment below line
//salesFormLetter = SalesFormLetter::construct(DocumentStatus::ProjectPickingList);
// Do the steps manually, which normally are done in method
salesFormLetter.salesTable(salesTable);
salesFormLetter.initParmSalesTable(salesFormLetter.salesTable());
salesFormLetter.transDate(DateTimeUtil::getSystemDate(DateTimeUtil::getUserPreferredTimeZone()));
salesFormLetter.specQty(SalesUpdate::All);
salesFormLetter.proforma(NoYes::No); //salesFormLetter.salesParmUpdate().Proforma);
salesFormLetter.printFormLetter(NoYes::No); //salesFormLetter.printFormLetter());
salesFormLetter.printCODLabel(NoYes::No);
salesFormLetter.printShippingLabel(NoYes::No);
salesFormLetter.usePrintManagement(false);
salesFormLetter.creditRemaining(salesFormLetter.creditRemaining());
salesFormLetter.createParmUpdateFromParmUpdateRecord(SalesFormletterParmData::initSalesParmUpdateFormletter(salesFormLetter.documentStatus(),
salesFormLetter.pack(),
true,
false,
false));
salesFormLetter.initParameters(salesFormLetter.salesParmUpdate(), Printout::Current);
salesFormLetter.initLinesQuery();
salesFormLetter.run();
}
Post Picking list for a sales order line (for a particular lot)
To post picking list for a particular lot (sales order line), we need to pass SalesId to initialize data into Sales Parm tables and then clear unwanted parm lines.
/// <summary>
/// to post pick list for an item requirement.
/// </summary>
/// <param name = "_salesId"> SalesId is passed as parameter. </param>
/// <param name = "_inventTransId"> InventTransId is passed as parameter. </param>
public void postPickingList(SalesId _salesId, InventTransId _inventTransId)
{
SalesTable salesTable = salesTable::find(_salesId);
SalesFormLetter salesFormLetter;
SalesParmLine salesParmLine;
// below line is to post Picking list for a sales order
salesFormLetter = SalesFormLetter::construct(DocumentStatus::PickingList);
// If you want to post Picking list for a project sales order, comment above line and uncomment below line
//salesFormLetter = SalesFormLetter::construct(DocumentStatus::ProjectPickingList);
// Do the steps manually, which normally are done in method
salesFormLetter.salesTable(salesTable);
salesFormLetter.initParmSalesTable(salesFormLetter.salesTable());
salesFormLetter.transDate(DateTimeUtil::getSystemDate(DateTimeUtil::getUserPreferredTimeZone()));
salesFormLetter.specQty(SalesUpdate::All);
salesFormLetter.proforma(NoYes::No); //salesFormLetter.salesParmUpdate().Proforma);
salesFormLetter.printFormLetter(NoYes::No); //salesFormLetter.printFormLetter());
salesFormLetter.printCODLabel(NoYes::No);
salesFormLetter.printShippingLabel(NoYes::No);
salesFormLetter.usePrintManagement(false);
salesFormLetter.creditRemaining(salesFormLetter.creditRemaining());
salesFormLetter.createParmUpdateFromParmUpdateRecord(SalesFormletterParmData::initSalesParmUpdateFormletter(salesFormLetter.documentStatus(),
salesFormLetter.pack(),
true,
false,
false));
salesFormLetter.initParameters(salesFormLetter.salesParmUpdate(), Printout::Current);
salesFormLetter.initLinesQuery();
// Delete unwanted records from SalesParmLine
while select forupdate salesParmLine
where salesParmLine.ParmId == salesFormLetter.parmId()
{
if (salesParmLine.InventTransId != _inventTransId)
{
salesParmLine.delete();
}
}
salesFormLetter.run();
}
Happy Daxing...
No comments:
Post a Comment