Dynamics AX Blog - Dynamics AX 2009 - report

RSS-Feed dieser Version
Druckeinstellungen und Filterkriterien eines Reports vorbelegen II
08.05.2011Microsoft Dynamics AX (Axapta)
|
Druckeinstellungen und Filterkriterien eines Reports vorbelegen
08.12.2010Microsoft Dynamics AX (Axapta)
In einem früheren Beitrag habe ich ja schon demonstriert, wie man einen Report in Dynamics AX per Code aufruft, und diesem dabei einen Query übergibt. Der folgende Code erweitert diesen Aufruf um die Druckeinstellungen (printJobSettings), sodaß es nun möglich ist, einen Report vollautomatisch mit vorgegebenen Filterkriterien und definierten Druckeinstellungen aus X++ heraus aufzurufen. |
Eingeblendete Dimensionen in Reports abfragen
17.11.2010Microsoft Dynamics AX (Axapta)
In manchen Berichten ist es möglich, Lagerdimensionen über den Dialog ein- bzw. auszublenden. Um im Bericht selbst abzufragen, ob eine bestimmte Dimension eingeblendet wurde, kann man den unten stehenden Code verwenden, der eine Instanz der Klasse InventReport_OnHand voraussetzt. Dieser fragt zum Beispiel ab, ob die Palettennummer eingeblendet wurde, if(InventReport_OnHand.parmInventDimParm().WMSPalletIdFlag))
// ...do something
|
Druckoptionen von Berichten können nicht geändert werden
04.06.2010Microsoft Dynamics AX (Axapta)
In Dynamics AX 2009 scheint es einen kleinen Bug zu geben, der bei Reports, welche über eine von RunBaseReport abgeleitete Klasse gestartet werden, dazu führt, daß sich die Druckoptionen nicht ändern lassen. Um diesen Bug zu umgehen, kann man die Methode dialogUpdatePrinterSettings, wie in nachstehendem Beispiel beschrieben, überschreiben. public void dialogUpdatePrinterSettings(Dialog dialog)
{ ; // --> (1) Workaround to update printJobSettings and dialog this.printJobSettings().unpackPrintJobSettings(this.reportRun().packPrintJobSettings()); // <-- (1) super(dialog); } Update 27.12.2010 |
PageFooter sind nicht immer dort, wo sie sein sollten
04.12.2009Microsoft Dynamics AX (Axapta)
Ich kenne kein einziges AX-Projekt, in dem nicht zumindest einer der Berichte Auftragsbestätigung, Ausgangslieferschein oder Ausgangsrechnung angepasst worden sind. Und deshalb stolpere ich auch immer wieder über das selbe Problem: Man erweitert einen Bericht (Report) um einen PageFooter, der aber nicht auf jeder Seite angedruckt werden soll. |
Temporäre Tabelle in einem Report verwenden
26.01.2009Microsoft Dynamics AX (Axapta)
Um eine temporäre Tabelle in einem Report zu verwenden, kann diese in der fetch-Methode mit Daten befüllt werden. public boolean fetch() { boolean ret = true; QueryRun localQuery = new QueryRun(this); ; localQuery.setRecord(TmpCustVendTrans::custTransBalanceCurrency("200030", true, "EUR")); // Befüllt die Tabelle mit den Salden eines Debitors while (localQuery.next()) { TmpCustVendTrans = localQuery.get(TableNum(TmpCustVendTrans)); element.send(TmpCustVendTrans); } return ret; } Die Variable TmpCustVendTrans ist dabei in der classDeclaration des Reports deklariert. |
Dynamics AX: Rechnungen per Code druckenÜber nachstehenden Code kann ganz einfach jederzeit eine Verkaufsrechnung nachträglich ausgedruckt werden. Durch leichte Modifikationen des Codes gilt dies auch für sämtliche anderen verkaufs- und einkaufsseitigen Dokumente. Hier ein kurzes Beispiel unter AX 2009 static void PrintSalesInvoice(Args _args) { custInvoiceJour custInvoiceJour; SalesFormLetter salesFormLetter = SalesFormLetter::construct(DocumentStatus::Invoice, false); PrintJobSettings printJobSettings = new PrintJobSettings(); Args args = new Args(); boolean prompt = true; boolean printIt = true; ; if (prompt) { // Auswahl des Benutzers über Dialog printIt = printJobSettings.printerSettings('SysPrintForm'); } else { // Printjobsettings per Code steuern printJobSettings.setTarget(PrintMedium::File); printJobSettings.format(PrintFormat::PDF); printJobSettings.fileName(@'c:\temp\myfile.pdf'); } if (!printIt) { return; // Benutzerabbruch } salesFormLetter.updatePrinterSettingsFormLetter(printJobSettings.packPrintJobSettings()); select firstOnly custInvoiceJour where custInvoiceJour.salesid == '100001'; args.record(custInvoiceJour); args.caller(salesFormLetter); new MenuFunction(menuitemoutputstr(SalesInvoice), MenuItemType::Output).run(args); } Nachstehend ein Code-Beispiel unter AX 4.0 static void PrintSalesInvoice(Args _args) { custInvoiceJour custInvoiceJour; SalesFormLetter salesFormLetter = SalesFormLetter::construct(DocumentStatus::Invoice, false); PrintJobSettings printJobSettings = new PrintJobSettings(); Args args = new Args(); boolean prompt = true; boolean printIt = true; salesPrintSetup salesPrintSetup; ; if (prompt) { // Auswahl des Benutzers über Dialog printJobSettings = new PrintJobSettings(salesPrintSetup.PrintJobSettings); printIt = printJobSettings.printerSettings('SysPrintForm'); salesPrintSetup.PrintJobSettings = printJobSettings.packPrintJobSettings(); } else { // Printjobsettings per Code steuern printJobSettings.setTarget(PrintMedium::File); printJobSettings.format(PrintFormat::PDF); printJobSettings.fileName(@'c:\temp\myfile.pdf'); } if (!printIt) { return; // Benutzerabbruch } salesFormLetter.updatePrinterSettingsFormLetter(printJobSettings.packPrintJobSettings()); select firstOnly custInvoiceJour where custInvoiceJour.salesid == '100001'; args.record(custInvoiceJour); args.caller(salesFormLetter); new MenuFunction(menuitemoutputstr(SalesInvoice), MenuItemType::Output).run(args); } |
|
|
|
|
|
|
Wie startet man einen Bericht, bei dem eine von RunBaseReport abgeleitete Klasse vorgeschalten ist, per X++ und gibt diesem Bericht bereits den Query und die Druckeinstellungen vor?
Wer sich diese Frage schon einmal stellen musste, für den liefert dieser Blogbeitrag vielleicht einen Lösungsansatz:
Obiger Code instanziiert ein Objekt der Klasse custReport, deren wesentliche Methoden wie folgt aussehen: