Options

Optimized Print control for Reports through CU 1 ...

PidiPidi Member Posts: 35
In standard Navision a report can be assigned to a Printer, and that´s it. If you want to print to different printers with one Report without getting a printer selection window, you´ll have a problem with Navision.

Maybe the follwing may appear trivial to some of you, but maybe not for all. What I wanted, is a code like the following:

DefPrintMode.SetPrinter('My_Printer');
REPORT.RUN(Report::MyReport,FALSE,FALSE,Record);

DefPrintMode.SetPrinter('My_Other_Printer');
REPORT.RUN(Report::MyReport,FALSE,FALSE,Record);

and it´s possible. What you need is a modification of one of the functions within CU1. The german name of that function is "Drucker holen", which means "Get printer" (2nd function within CU1). What you although need is a Single instance CU, which you can easily create by setting the single instance property of that CU to YES. Such a SI-CU gives you a way, to pass a value from any object to any other object without using a table. By that its more global than a Global, but still local to the running client.

Here are the 2 functions within that SI-CU:

// SelectedPrinter is a Global to that CU!

SetPrinter(PrinterName : Code[30])
SelectedPrinter := PrinterName;

GetPrinter() Drucker : Code[30]
tmp_PrinterName := SelectedPrinter;
CLEAR(SelectedPrinter);
EXIT(tmp_PrinterName);

The second function clears the value set by SetPrinter, when it´s retrieved. This is only, that if a printer for a report is defined, it will be valid only once -> see CU 1 code below.

The basic idea for the CU1 function is this:

// Get printer - if defined -
// from Sincgle instance CU, and delete within there

DefinedPrinter := DefPrinter.GetPrinter();

IF DefinedPrinter <> '' THEN BEGIN
// If a Printer was specified, use it, otherwise use standard method ...
... very similar to standard code, but using "DefinedPrinter"
instead of lookup to printer def. table
END ELSE BEGIN
... standard code
getting printer from printer def. table
END;

The standard code of this CU1 function does a pretty trivial job - it looks for the defined Printer within table 78 and then loops through the table with all available printers on that workstation (table 2000000039). If it can find the defined printer, it returns its ID, otherwise it returns a blank, and the report will use the system printer.

By the way: Modifications to that loop can be interesting, if you got different printers on different WS for the same job, which do habe the same base name, like BILL_IT, BILL_WH ...

Where we had 4 reports with the same layout for 4 printer assignments in the past, we now got only one left.

Pidi
Michael Peters
Bos Fod GmbH Düsseldorf
+49 2132 139-0
Sign In or Register to comment.