Dynamics AX Blog - Beiträge vom 27 April 2020
Kommissionierliste für bestimmte Positionen eines Verkaufsauftrages erstellenIch kenne keine Möglichkeit, wie man eine Kommissionierliste nur für bestimmte Auftragspositionen per Code erstellt. Deshalb nutze ich in dem folgenden Code-Beispiel folgenden Ansatz: Ich erstelle die Kommissionierliste mit Hilfe des SalesFormLetter-Frameworks und lösche vor dem entscheidenden Schritt (dem Ausführen der run()-Methode) jene Einträge in der Tabelle SalesParmLine, die ich nicht benötigte. static void createSalesPickingListSingleLine(Args _args) { SalesTable salesTable = salesTable::find("001862"); // Sales order container inventTransIdCon = ["014015", "014016"]; // LOT-IDs to pick SalesFormLetter salesFormLetter; SalesParmLine salesParmLine; salesFormLetter = SalesFormLetter::construct(DocumentStatus::PickingList); // Do the steps manually, which normally are done in method // salesFormLetter.update() salesFormLetter.salesTable(salesTable); salesFormLetter.initParmSalesTable(salesFormLetter.salesTable()); salesFormLetter.transDate(systemDateGet()); salesFormLetter.specQty(SalesUpdate::All); salesFormLetter.proforma(salesFormLetter.salesParmUpdate().Proforma); salesFormLetter.printFormLetter(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 in SalesParmLine while select forupdate salesParmLine where salesParmLine.ParmId == salesFormLetter.parmId() { if (conFind(inventTransIdCon, salesParmLine.InventTransId) == 0) { salesParmLine.delete(); } } // Let's go salesFormLetter.run(); }
|
Kommissionierliste für alle Positionen eines Verkaufsauftrages erstellenstatic void createSalesPickingList(Args _args) { SalesTable salesTable = SalesTable::find("000752"); SalesFormLetter salesFormLetter; salesFormLetter = SalesFormLetter::construct(DocumentStatus::PickingList); salesFormLetter.update(salesTable, systemDateGet(), SalesUpdate::All); }
|
|
|
|
|
|
|
Das nachstehende Code-Beispiel zeigt. wie man per Code eine Erfassung für eine Kommissionierliste buchen kann (in der Annahme daß beispielsweise alle notwendigen Informationen wie Entnahmelagerplatz usw. bereits eingetragen wurden).