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 erstellen
static 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).
static void pickingListRegistration(Args _args) { WMSPickingRouteID pickingRouteID = "00061"; // Route id to be picked List list = new List(Types::String); list.addEnd(pickingRouteID); WMSPickingRoute::finishMulti(list.pack()); wmsDeliverPickedItems::checkDeliverPickedItems(pickingRouteID, list.pack()); }