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);
}

In AX 3.0 sieht die Logik ähnlich aus, lediglich die Tabelle salesPrintSetup gibt es dort nicht 

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');
       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);
}

Aktualisiert am 11.03.2009 und 23.03.2010

Dieser Beitrag bezieht sich auf die Versionen:
Dynamics AX 2009, Dynamics AX 4.0, Axapta 3.0

Alexander Zach 07.04.2009 14:38 | #1

Danke für dieses Codebeispiel: Copy, Paste, und funkioniert.

tadd 02.12.2010 11:12 | #2

thanks

Thomas 28.07.2011 17:40 | #3

Wie umgehst du die Einstellungen in der Druckerverwaltung, z.B. beim Debitor? Z.B. kann es sein, dass Rechnung Kopie und Original auf 0 ist, aber per code soll so etwas verschicket werden.

Heinz Schweda 01.08.2011 18:26 | #4

Tja, eine solche Einstellungen in der Druckerverwaltung wäre für den obigen Code tatsächlich ein Problem. Der funktioniert dann nämlich nicht!

Ich habe mir den Code im Report SalesInvoice (Methoden init & fetch) kurz angesehen, und wenn ich den richtig verstanden habe, gibt es in einem solchen Fall keinerlei Möglichkeit, den Beleg zu drucken. Zumindest nicht ohne eine entsprechende Codeanpassung.

Ludwig Stieglbrunner 30.09.2013 16:40 | #5

Gibt es die Möglichkeit in AX 2009 Rechnungen oder Lieferscheine mittels eines Codes per Email zu versenden? Das Format sollte natürlich PDF sein und der Name der Rechnung sollter eindeutig sein.

Heinz Schweda 05.10.2013 13:50 | #6

Hallo Ludwig, da gibt es sogar mehrere Möglichkeiten die alle ihre Vor- und Nachteile haben.

Die einfachste Variante ist den oben beschriebenen Job um folgende Funktionsaufrufe zu erweitern:

printJobSettings.mailTo("empfaenger@domain.net");
printJobSettings.mailSubject("Betreff");

Dann wird des jeweilige Dokument als Datei gespeichert und anschließend dem lokalen (!) Mail-Client zum Versenden übergeben.

Alternativ dazu kann man das Dokument wie im Job beschrieben als Datei speichern und anschließend mit zusätzlichem Programmcode an einen SMTP-Server übergeben. In folgendem Blog-Beitrag habe ich dies für AX 2012 schon mal beschrieben, dieser ist allerdings auch für AX 2009 gleichermassen gültig:

http://www.schweda.net/blog_ax.php?bid=454

Hoffe, das hilft dir weiter!
LG Heinz

 
 

 

 
 
 
Beiträge des aktuellen Monats
November 2024
MoDiMiDoFrSaSo
 123
45678910
11121314151617
18192021222324
252627282930 
 
© 2006-2024 Heinz Schweda | Impressum | Kontakt | English version | Mobile Version
Diese Webseite verwendet Cookies, um Benutzern einen besseren Service anzubieten. Wenn Sie weiterhin auf der Seite bleiben, stimmen Sie der Verwendung von Cookies zu.  Mehr dazu