[re-open] Reihenfolge von Druckjobs

20. November 2008 12:23

Hallo zusammen,

ich möchte sowohl Navisionreports als auch PDF-Dokumente in einer vordefinierten Reihenfolge durch einen Report ausdrucken lassen.
Problem ist nun, dass beim Drucker zunächst die Navisionreports ankommen und erst danach die PDF Dokumente. Die Reihenfolge geht verloren
Hier ein Beispiel:

Code:
REPORT.RUN(Berichtsauswahl."Bericht ID",FALSE, FALSE,Fertigungsauftrag1);

SHELL('C:\Programme\Adobe\Acrobat 6.0\Acrobat\Acrobat.exe',STRSUBSTNO('/p /h "%1"',dateiName1));

REPORT.RUN(Berichtsauswahl."Bericht ID",FALSE, FALSE,Fertigungsauftrag2);

SHELL('C:\Programme\Adobe\Acrobat 6.0\Acrobat\Acrobat.exe',STRSUBSTNO('/p /h "%1"',dateiName2));


In dem Beispiel sollte in folgender Reihenfolge gedruckt werden: 1.NavBericht, 2. PDF, 3.NavBericht, 4. PDF

Jetzt suche ich nach einer Möglichkeit die Reihenfolge des Aufrufs einzuhalten.


Schönen Gruß und Danke

Gregor
Zuletzt geändert von se3p am 2. Dezember 2008 18:06, insgesamt 3-mal geändert.

Re: Reihenfolge von Druckjobs

20. November 2008 17:53

Nur geraten: Könnte es vielleicht helfen, wenn du zwischen die Aufrufe mittels SLEEP ein paar "Bedenkpausen" einbaust?

Re: Reihenfolge von Druckjobs

20. November 2008 22:56

Hallo se3p,

ich würde das ganze über einen PDF-Drucker lösen, der meine Navision-Audrucke zunächst in eine PDF-Datei ausgibt. Danach kannst du dann alle Dateien in der gewünschten Reihenfolge ausdrucken.

Gruß, Fiddi

Re: Reihenfolge von Druckjobs

21. November 2008 13:01

Hallo Natalie, hallo Fiddi,

vielen Dank schon mal für die Beiträge.

Der Vorschlag die Navision-Ausdrucke zunächst auch in eine PDF-Datei auszugeben wird wohl funktionieren. Insgesamt möchte ich mir diesen Weg eher als Notlösung aufheben, weil ich dann doch einiges an Programmierarbeit leisten muss, um dann die Reihenfolge und alles sicherzustellen.

Darum habe ich den Tipp mit dem Sleepbefehl aufgegriffen. Mit einem Sleep(1000) nach jedem PDF-Druck klappt es bis jetzt recht gut. Ich habe nur etwas Bedenken mit der Verlässlichkeit. Wird es auch immer klappen oder gibt es Konstellationen wo es nicht geht?

Noch ein Ansatz von mir: Der Shell-Befehl zum Ausdrucken der PDF Dateien liefert -1 zurück, wenn der Befehl ausgeführt wurde. Kann ich da nicht igendwie nutzen? Ich habe folgenden Code als Diskussionsgrundlage:

Code:
Temp1 := 99;
Temp1 := SHELL('C:\Programme\Adobe\Acrobat 6.0\Acrobat\Acrobat.exe',STRSUBSTNO('/p /h "%1"',dateiName1));WHILE Temp1 = 99 DO BEGIN
WHILE Temp1 = 99 DO BEGIN
  SLEEP(100);
END;


Problem: Er läuft scheinbar in eine Endlosschleife.

Gruß Gregor

Re: Reihenfolge von Druckjobs

21. November 2008 13:56

Wenn ich deinen Quelltext umformatiere (und ein fehlendes END hinzufüge), sieht er so aus:

Code:
Temp1 := 99;
Temp1 := SHELL('C:\Programme\Adobe\Acrobat 6.0\Acrobat\Acrobat.exe',STRSUBSTNO('/p /h "%1"',dateiName1));
WHILE Temp1 = 99 DO BEGIN
  WHILE Temp1 = 99 DO BEGIN
    SLEEP(100);
  END;
END;


Was wolltest du mit den ZWEI While-Schleifen erreichen?
Abgesehen davon glaube ich, dass dir die Idee hier nichts weiter hilft. In die WHILEs läuft der Quelltext ohnehin erst dann, wenn der SHELL-Befehl abgeschlossen ist. Egal welchen Wert Temp1 dann zugewiesen bekommen hat, er wird keinen anderen bekommen! Egal wie oft dann noch ein SLEEP kommt.

Re: Reihenfolge von Druckjobs

21. November 2008 14:05

ja, das mit den 2 while-Schleifen war ein Versehen. Sorry. Es sollte nur eine sein.

Mit dem Rückgabewert von dem Shell-Befehl kann ich demnach nichts anfangen. Sehe ich das richtig?

Re: Reihenfolge von Druckjobs

21. November 2008 14:32

se3p hat geschrieben:Mit dem Rückgabewert von dem Shell-Befehl kann ich demnach nichts anfangen. Sehe ich das richtig?

Denke leider ja ...

Re: Reihenfolge von Druckjobs

21. November 2008 15:17

Hallo se3p,

im Zusammenhang mit deiner Ausgangsfrage sehe ich auch keine Verwendung für den Rückgabewert der Shell- Funktion. Du kannst aber die -1 des Rückgabewertes sehr wohl verwenden. z.B. um die Anzahl der korrekt ausgedruckten PDF- zu zählen.

z.B.:
Code:
AnzahlGedruckt:=0;

for i:=1 to 100 do
  AnzahlGedruckt -=SHELL('C:\Programme\Adobe\Acrobat 6.0\Acrobat\Acrobat.exe',STRSUBSTNO('/p /h "%1"',dateiName1));

message('%1 von 100 Dateien gedruckt',AnzahlGedruckt);


Um Fragen vorzubeugen: '-=' weil SHELL -1 bei korrekter Ausführung zurückgibt und - mal - = + ergibt.

Gruß, Fiddi

Re: [gelöst] Reihenfolge von Druckjobs

2. Dezember 2008 18:06

Der Punkt beschäftigt mich weiterhin. Ich habe einen Interessanten Ansatz unter VB gefunden. Dabei wird die Shell-Funktion erweitert und so ein Warten erzwungen:

http://vb-tec.de/xshell.htm

Jetzt stellt sich mir natürlich die Frage, wie ich das in Navision umsetzen kann. Wie kann ich auf die kernel32.dll zugreifen?

Gruß Gregor