[gelöst] Druckdialog bei rekursiven Reportaufruf

14. Februar 2008 18:26

Ein Ausdruck soll direkt hintereinander zweimal gedruckt werden, einmal auf den "Drucker ihrer Wahl" und ein zweites mal auf einen vordefinierten "Kontrolldrucker".

Da beim Druck die verschiedenen Druckoptionen (mit Logo, zus. Druckzeilen, ...) natürlich auf beiden Ausdrucken identisch seien sein sollen, wird wir folgt verfahren:
Es wird an den Standard-Report ein DataItem angefügt, welches nach dem Druck eines Dokuments eine Codeunit aufruft (mit Zwischenspeicherung der Druckoptionen), welche wiederum den selben Report nochmal aufruft (also rekursiv).
Durch die Speicherung der Druckoptionen (und ein paar weiterer Kennzeichen) erkennt der Report ob er sich im ersten oder zweiten Druck befindet. Somit wird vermieden, dass er sich wieder und wieder aufruft und somit endlos läuft.

Das klappt auch alles recht gut, beide Audrucke werden korrekt erzeugt, aber:

Beim ersten Aufruf des Report in einer Navision-Session läuft alles nach Standard, aber beim zweiten (und weiteren) Aufruf wird der Dialog zur Auswahl des Druckers in den Hintergrund gestellt!?
Dieser Dialog ist in der Taskleiste zu sehen, aber nicht zu aktivieren. Er "poppt" kurz auf und verschwindet wieder in den Hintergrund.
Läuft Navision nicht im Vollbild und man sieht den Dialog, kann man auch kein OK o.ä. bestätigen.


Einzige Möglichkeit ist das Navision-Hauptfenster zu minimieren, der Druck-Dialog zu bedienen und das Navision-Hauptfenster wieder zu maximieren.

Kennt jemand eine Möglichkeit dem Dialog den Focus zu geben, damit man auch beim zweiten Druck "normal" arbeiten kann?

Gruß

Stephan


[Anm.: läuft unter 4.x und 5.x identisch]
Zuletzt geändert von stephan.bosau am 3. April 2008 10:53, insgesamt 1-mal geändert.

14. Februar 2008 19:15

Brauchst du beim zweiten Aufruf die RequestForm überhaupt?
Wenn nicht, dann schalte sie über die Report-Eigenschaft USEREQUESTFORM doch einfach aus.

Edit: Quatsch, geht ja um die Druckerauswahl und nicht um die RequestForm - aber lässt sich dieses Fenster nicht darüber (oder über eine andere Eigenschaft) steuern ...?

15. Februar 2008 10:26

Der zweite Druck braucht weder Request-Form noch Druckerauswahl und wird über REPORT.RUNMODAL("Report ID",FALSE,FALSE,"Table ID") aufgerufen.
Der Drucker für den zweiten Druck wird vorher über die "Report Selection" gesetzt.

Der Ablauf funktioniert soweit auch, lediglich der Focus auf's aktive Fenster wird seitens Navision nicht richtig gesetzt. :-(

Besten Dank.

15. Februar 2008 10:29

Wieso RUNMODAL statt RUN? Gerade wenn nichts mehr aufpoppen soll, gehört hier eher ein RUN hin.

15. Februar 2008 12:53

Natalie hat geschrieben:Wieso RUNMODAL statt RUN? Gerade wenn nichts mehr aufpoppen soll, gehört hier eher ein RUN hin.


Egal ob RUN oder RUNMODAL, die Druckerauswahl verhält sich leider identisch.

15. Februar 2008 13:10

Wird Report2 wirklich über die "Systemvariable" REPORT.x angesprochen oder verwendest du eine Reportvariable? Möglicherweise macht das einen Unterschied?

16. Februar 2008 09:43

Sowohl als auch, hab' beide Varianten getestet. Das Ergebnis ist immer gleich.

16. Februar 2008 12:45

Warum lässt du den Report eigentlich sich selber aufrufen :?:
Den gleichen Spaß kannst du doch auch erreichen, wenn du beide REports aus einer Funktion heraus aufrufst.

1. Report als Variable und ne Funktion mit GetPrintOptions() und SetPrintOptions() in dem Report hast du ja eh schon im Prinzip
2. Report starten und nach Durchlauf die Einstellungen / Filter über GetPrintOptions() auslesen. Diese Einstellungen dann über SetPrintOptions an die zweite Instanz weiterreichen. Bei der zweiten Instanz kannst du dann noch mitgeben, auf welchen Drucker das gute Stück drucken soll

16. Februar 2008 18:24

@garak: Das Übergeben der Variablen ist kein Problem.
Es soll nur sichergestellt werden, dass grundsätzlich zweimal gedruckt wird (wie o.a.).
D.h. wenn ich in einer Codeunit (o.ä.) in einer Funktion den Report zweimal aufrufe wäre das ok, wenn der Report aber direkt aufrufen wird, wäre in der Lösung der zweite Druck nicht sichergestellt.

16. Februar 2008 18:38

stephan.bosau hat geschrieben:D.h. wenn ich in einer Codeunit (o.ä.) in einer Funktion den Report zweimal aufrufe wäre das ok, wenn der Report aber direkt aufrufen wird, wäre in der Lösung der zweite Druck nicht sichergestellt.


Dies ist jetzt mehr so ne Schnapsidee, aber: Wenn rekursive Reportaufrufe nicht funktionieren, könntest du doch Report Nr. 2 als PDF erzeugen und dieses PDF drucken. Nachteil (wenn ich mich richtig erinnere): Das PDF ist geöffnet und muss danach zudem wieder von dir gelöscht werden.

17. Februar 2008 10:12

@Natalie: Prinzipiell funktioniert die "rekursive Lösung" ja, nur das der Focus auf die Druckerauswahl halt nicht gesetzt wird (könnte/müßte man zur Not mit leben).
Wir hatten auch schon mal an 'ne Lösung via PDF gedacht, Problem ist nur, dass der Druck-Dialog vom ersten Druck erzeugt wird, beim zweiten Druck wird eh' keine Druckauswahl gestartet, sprich an dem Problem wird sich nichts ändern.

Man könnte (z.B. mit FreePDF) eine PDF-Datei erzeugen, die parallel (vom Tool aus) gedruckt wird und an vorgebener Stelle auch gespeichert wird.
Diese Datei könnte dann nochmal separat gedruckt werden.
"Unschön" an dieser Lösung ist, dass die ganzen Einstellungen hierfür nicht in Navision, sondern im PDF-Tool hinterlegt sind.
Also dezentral auf den Clients :-(

13. März 2008 10:38

Ich habe aktuell das selbe Proble, dass der Druckdialog in den Hintergrund verschwindet, bei mir konnte ich das Problem lösen indem ich das Report Propertie "ShowPrintStatus" auf Nein gesetzt habe.

3. April 2008 10:52

@bigdarki: SUPER- das tut's ! :-D
Besten Dank!