Dynamics AX Blog - Dynamics AX 2012 - Seite 17

RSS-Feed dieser Version
Lieferschein per Code druckenDer nachstehende Job demonstriert, wie man in Dynamics AX 2012 einen vorhandenen (Ausgangs-)Lieferschein per Code (nach-)drucken kann. Im Beispiel erfolgt die Ausgabe am Bildschirm.
static void printSalesPackingSlipThroughCode(Args _args)
{
SalesPackingSlipJournalPrint salesPackingSlipJournalPrint;
Set set = new Set(Types::Record);
SRSPrintDestinationSettings srsPrintDestinationSettings;
// Add record
set.add(CustPackingSlipJour::findRecId(5637161120));
// Set printer settings
srsPrintDestinationSettings = new SRSPrintDestinationSettings();
srsPrintDestinationSettings.fileFormat(SRSReportFileFormat::Screen);
// Initalize
salesPackingSlipJournalPrint = SalesPackingSlipJournalPrint::construct();
salesPackingSlipJournalPrint.parmPrintFormletter(NoYes::Yes);
salesPackingSlipJournalPrint.parmUsePrintManagement(false);
salesPackingSlipJournalPrint.parmPrinterSettingsFormLetter(srsPrintDestinationSettings.pack());
// Print
salesPackingSlipJournalPrint.printJournal(set);
}
Ändert man die Parameter der SRSPrintDestinationSettings kann man den Bericht natürlich auch an einen Drucker senden, eine Datei erstellen oder den Bericht per Mail versenden.
static void printSalesPackingSlipThroughCode(Args _args)
{
SalesPackingSlipJournalPrint salesPackingSlipJournalPrint;
Set set = new Set(Types::Record);
SRSPrintDestinationSettings srsPrintDestinationSettings;
// Add record
set.add(CustPackingSlipJour::findRecId(5637161120));
// Set printer settings
srsPrintDestinationSettings = new SRSPrintDestinationSettings();
srsPrintDestinationSettings.fileFormat(SRSReportFileFormat::PDF);
srsPrintDestinationSettings.fileName(@'c:\temp\packingslip.pdf');
srsPrintDestinationSettings.printMediumType(SRSPrintMediumType::File);
srsPrintDestinationSettings.numberOfCopies(1);
srsPrintDestinationSettings.overwriteFile(true);
// Initalize
salesPackingSlipJournalPrint = SalesPackingSlipJournalPrint::construct();
salesPackingSlipJournalPrint.parmPrintFormletter(NoYes::Yes);
salesPackingSlipJournalPrint.parmUsePrintManagement(false);
salesPackingSlipJournalPrint.parmPrinterSettingsFormLetter(srsPrintDestinationSettings.pack());
// Print
salesPackingSlipJournalPrint.printJournal(set);
}
Weiters kann man auf diese Art & Weise auch mehrere Lieferscheine auf einmal drucken, dazu muss man lediglich die entsprechenden CustPackingSlipJour-Datensätze dem Set "set" hinzufügen:
...
// Add record
set.add(CustPackingSlipJour::findRecId(5637155842));
set.add(CustPackingSlipJour::findRecId(5637145354));
...
Wer den Lieferschein zusätzlich noch im Druckarchiv speichern möchte, kann dies durch folgende Zeile erreichen:
...
srsPrintDestinationSettings.parmPrintToArchive(true);
... |
Primäre Adresse per Code anlegenDie nachstehenden Zeilen Code zeigen ein Beispiel, wie man per X++ eine (primäre) Adresse für eine vorhandene Partei im Globalen Adressbuch erstellen kann. Primär wird sie allerdings nur dann, wenn es noch keine primäre Adresse gibt!
static void createPartyAddress(Args _args)
{
DirPartyTable dirPartyTable = DirPartyTable::findByNum("???100000");
DirParty dirParty;
DirPartyPostalAddressView dirPartyPostalAddressView;
// Create instance of dirParty
dirParty = DirParty::constructFromCommon(dirPartyTable, DirUtility::getCurrentDateTime(), dirPartyTable.partyType());
// Create primary address
dirPartyPostalAddressView.LocationName = "Office";
dirPartyPostalAddressView.City = "Vienna";
dirPartyPostalAddressView.Street = "Kärtnerring";
dirPartyPostalAddressView.StreetNumber = "18";
dirPartyPostalAddressView.CountryRegionId = "AUT";
dirPartyPostalAddressView.IsPrimary = NoYes::Yes;
dirParty.createOrUpdatePostalAddress(dirPartyPostalAddressView);
} |
Auftragsbestätigung per Code druckenDer nachstehende Job demonstriert, wie man in Dynamics AX 2012 eine vorhandene Auftragsbestätigung per Code (nach-)drucken kann. Im Beispiel erfolgt die Ausgabe am Bildschirm. static void printSalesConfirmThroughCode(Args _args)
{ SalesConfirmJournalPrint salesConfirmJournalPrint; Set set = new Set(Types::Record); SRSPrintDestinationSettings srsPrintDestinationSettings; // Add record set.add(CustConfirmJour::findRecId(5637155842)); // Set printer settings srsPrintDestinationSettings = new SRSPrintDestinationSettings(); srsPrintDestinationSettings.fileFormat(SRSReportFileFormat::Screen); // Initalize salesConfirmJournalPrint = SalesConfirmJournalPrint::construct(); salesConfirmJournalPrint.parmPrintFormletter(NoYes::Yes); salesConfirmJournalPrint.parmUsePrintManagement(false); salesConfirmJournalPrint.parmPrinterSettingsFormLetter(srsPrintDestinationSettings.pack()); salesConfirmJournalPrint.printJournal(set); } |
Bestellung per Code druckenDer nachstehende Job demonstriert, wie man in Dynamics AX 2012 eine vorhandene Bestellung per Code (nach-)drucken kann. Im Beispiel erfolgt die Ausgabe am Bildschirm. static void printPurchaseOrderThroughCode(Args _args)
{ PurchPurchOrderJournalPrint purchPurchOrderJournalPrint; Set set = new Set(Types::Record); SRSPrintDestinationSettings srsPrintDestinationSettings; // Add record set.add(VendPurchOrderJour::findRecId(5637179849)); // Set printer settings srsPrintDestinationSettings = new SRSPrintDestinationSettings(); srsPrintDestinationSettings.fileFormat(SRSReportFileFormat::Screen); // Initalize purchPurchOrderJournalPrint = PurchPurchOrderJournalPrint::construct(); purchPurchOrderJournalPrint.parmPrintFormletter(NoYes::Yes); purchPurchOrderJournalPrint.parmUsePrintManagement(false); purchPurchOrderJournalPrint.parmPrinterSettingsFormLetter(srsPrintDestinationSettings.pack()); purchPurchOrderJournalPrint.printJournal(set); } |
Rechnung per Code druckenDer nachstehende Job demonstriert, wie man in Dynamics AX 2012 eine vorhandene Rechnung/Ausgangsrechnung per Code (nach-)drucken kann. Im Beispiel erfolgt die Ausgabe am Bildschirm. static void printSalesInvoiceThroughCode(Args _args)
{ SalesInvoiceJournalPrint salesInvoiceJournalPrint; Set set = new Set(Types::Record); SRSPrintDestinationSettings srsPrintDestinationSettings; // Add record set.add(CustInvoiceJour::findRecId(5637188088)); // Set printer settings srsPrintDestinationSettings = new SRSPrintDestinationSettings(); srsPrintDestinationSettings.fileFormat(SRSReportFileFormat::Screen); // Initalize salesInvoiceJournalPrint = SalesInvoiceJournalPrint::construct(); salesInvoiceJournalPrint.parmPrintFormletter(NoYes::Yes); salesInvoiceJournalPrint.parmUsePrintManagement(false); salesInvoiceJournalPrint.parmPrinterSettingsFormLetter(srsPrintDestinationSettings.pack()); salesInvoiceJournalPrint.printJournal(set); } |
Lagerbestandsabfrage mit Gruppierung nach bestimmten DimensionenUnter Verwendung der Klasse InventDimOnhand kann man sich den Lagerbestand von Artikel und/oder bestimmten Lagerungsdimensionen ermitteln. Im folgenden Job wird der Bestand für einen bestimmten Artikel und einen bestimmten Lagerplatz ermittelt. Dabei wird je Farbe gruppiert.
static void getInventOnhandExample(Args _args)
{
ItemId itemId;
InventDimOnHand inventDimOnHand;
InventDimParm inventDimParmOnHandLevel;
InventDimOnHandIterator inventDimOnHandIterator;
InventDimOnHandMember inventDimOnHandMember;
InventDim inventDim;
InventDim inventDimCriteria;
InventDimParm inventDimParmCriteria;
// Item: Query specific item
itemId = "DMO003";
// inventDimCriteria: Apply ranges
inventDimCriteria.wmsLocationId = "12-1";
inventDimCriteria.InventBatchId = "DMOBatch001";
// inventDimParmCriteria: should values from inventDimCriteria be used?
inventDimParmCriteria.ItemIdFlag = false;
inventDimParmCriteria.InventSiteIdFlag = false;
inventDimParmCriteria.InventLocationIdFlag = false;
inventDimParmCriteria.wmsLocationIdFlag = true; // wmsLocationId from inventDimCriteria will be used
inventDimParmCriteria.wmsPalletIdFlag = false;
inventDimParmCriteria.InventBatchIdFlag = false; // inventBatchId from inventDimCriteria will not be used
inventDimParmCriteria.InventSerialIdFlag = false;
inventDimParmCriteria.ConfigIdFlag = false;
inventDimParmCriteria.InventSizeIdFlag = false;
inventDimParmCriteria.InventColorIdFlag = false;
inventDimParmCriteria.InventStyleIdFlag = false;
// inventDimParmOnHandLevel: Which dimensions should be used to group for?
// inventDimParmOnHandLevel necessary for inventDimOnHandLevel::DimParm
inventDimParmOnHandLevel.ItemIdFlag = true; // necessary
inventDimParmOnHandLevel.InventSiteIdFlag = false;
inventDimParmOnHandLevel.InventLocationIdFlag = false;
inventDimParmOnHandLevel.wmsLocationIdFlag = false;
inventDimParmOnHandLevel.wmsPalletIdFlag = false;
inventDimParmOnHandLevel.InventBatchIdFlag = false;
inventDimParmOnHandLevel.InventSerialIdFlag = false;
inventDimParmOnHandLevel.ConfigIdFlag = false;
inventDimParmOnHandLevel.InventSizeIdFlag = false;
inventDimParmOnHandLevel.InventColorIdFlag = true; // group by color
inventDimParmOnHandLevel.InventStyleIdFlag = false;
inventDimOnHand = InventDimOnHand::newAvailPhysical(itemId,
inventDimCriteria,
inventDimParmCriteria,
InventDimOnHandLevel::DimParm,
inventDimParmOnHandLevel);
inventDimOnHandIterator = inventDimOnHand.onHandIterator();
while (inventDimOnHandIterator.more())
{
inventDimOnHandMember = inventDimOnHandIterator.value();
inventDim = InventDim::find(inventDimOnHandMember.parmInventDimId());
info(con2Str([ inventDimOnHandMember.parmItemId(),
inventDim.InventSiteId,
inventDim.InventLocationId,
inventDim.wmsLocationId,
inventDim.wmsPalletId,
inventDim.InventBatchId,
inventDim.InventSerialId,
inventDim.ConfigId,
inventDim.InventSizeId,
inventDim.InventColorId,
inventDim.InventStyleId,
inventDimOnHandMember.parmInventQty()]));
inventDimOnHandIterator.next();
}
}
Das Ergebnis des obigen Jobs ist folgendes Infolog: DMO003,,,12-1,,,,,,Cherry,,54 |
|
|
|
|
|
|
Mit Hilfe der folgenden Zeilen möchte ich zeigen, wie man eine Rechnung/Ausgangsrechnung per Code buchen kann.
Wer etwas mehr Kontrolle über die zu buchenden Daten haben möchte, sollte sich die verfügbaren Parameter der salesFormLetter.update() näher ansehen.
static void postSalesInvoice(Args _args) { SalesTable salesTable = SalesTable::find("000747"); SalesFormLetter salesFormLetter; salesFormLetter = SalesFormLetter::construct(DocumentStatus::Invoice); salesFormLetter.update(salesTable, systemDateGet(), SalesUpdate::All); }