Dieser Beitrag bezieht sich auf die Version:
Dynamics AX 2012
Dynamics AX 2012
Wenn ich diesen Code so ausführe und dabei die DeliverNow quantity änder wird sie beim buchen zurück geändert auf die ursprüngliche mänge warum ist das so? |
|
|
|
|
|
|
|
Dieser Beitrag bezieht sich auf die Version:
Dynamics AX 2012
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Mit Hilfe des folgenden Code ist es möglich eine Verkaufsrechnung für einen bestimmten Auftrag zu buchen und dabei nur ausgewählte Auftragspositionen zu verarbeiten.
Der Trick dabei ist, sich über die Standardfunktionalität über die Methode initLinesQuery() die Tabelle SalesParmLine aufbauen zu lassen und vor dem eigentlichen Buchungsvorgang diese Datensätze zu modifizieren. Beispielsweise indem man ganze Datensätze aus der SalesParmLine löscht.
static void createSalesInvoiceSelectLines(Args _args) { SalesTable salesTable = SalesTable::find('001562'); SalesFormLetter salesFormLetter; SalesParmLine salesParmLine; setPrefix(funcName()); salesFormLetter = SalesFormLetter::construct(DocumentStatus::Invoice); // 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(); while select forupdate salesParmLine where salesParmLine.ParmId == salesFormLetter.parmId() { setPrefix(#PrefixField(salesParmLine, InventTransId)); // ...Modify record/Delete record... } // Let's go if (salesFormLetter.validate(null)) { salesFormLetter.run(); } }