Ich habe des Ă–fteren mal die Anforderung umsetzen mĂĽssen, dass ein Report nach ganz anderen Kriterien als von Navision unterstĂĽtzt mal auf dem einen, mal auf dem anderen Drucker ausgegeben werden muss.
Dazu habe ich (m)eine SingleInstance-Codeunit "GlobalVariableManagement" (welche ich in so ziemlich jeder Datenbank habe) um zwei Funktionen erweitert:
- Code: Alles auswählen
SetSpecialPrinter(NewPrinterName : Text[250])
Printername := NewPrinterName;
GetSpecialPrinter() : NewPrinterName : Text[250]
NewPrinterName := PrinterName;
PrinterName := ''; // Unbedingt löschen!
In der Codeunit 1 frage ich dann in der Funktion FindPrinter meine SI-Codeunit, ob ein abweichender Drucker verwendet werden soll:
- Code: Alles auswählen
FindPrinter(ReportID : Integer) : Text[250]
CLEAR(PrinterSelection);
// > TL4.00:02 >>>
"Printer Name" := GlobalVarMgt.GetSpecialPrinter;
IF "Printer Name" = '' THEN
// < TL4.00:02 <<<
IF NOT PrinterSelection.GET(USERID,ReportID) THEN
[...]
Somit kann ich jederzeit vor dem Reportaufruf festlegen, auf welchem Drucker der Report herauskommen soll.
Verwendungsmöglichkeiten dafür gibt es unglaublich viele, man muss seiner Phantasie nur freien Lauf lassen.
Nehmen wir mal an, wir wollen Berichte lagerortabhängig ausgeben, so erweitert man einfach die Tabelle Location um ein Feld "Printer Name", welches eine TableRelation zur Tabelle Printer.ID hat.
Wenn nun ein Ausdruck beim Freigeben von Aufträgen in dem jeweiligen Lager ankommen soll, so übergibt man den hinterlegten Drucker an die SI-Codeunit und setzt somit die Einstellungen in der Tabelle "Printer Selection" einmalig ausser Kraft.