Anmelden

View Full Version : Problem mit AS400-Befehl OVRPRTF



hartmuth
29-03-17, 10:50
Hallo, zusammen

Ich habe eine Anwendung, die eigentlich für wenige Fälle gedacht war, wo eben eine Spool-Datei in ein PDF konvertiert wird und auch mit OVRPRTF die Daten auf bestimmten Drucker gelenkt und CPI verändert werden.
Dabei wird Druck-Datei überschrieben und dann die betroffenen Daten aus einer Datenbank-datei in QSYSPRT kopiert.

Seit einiger Zeit , die Anwendung ist viel umfangreicher geworden als eben gedacht, passiert es fallweise , dass Befehl aus vorigen Aufruf "nachwirkt".

Wenn ich also z.b. aus interaktiver Sitzung eine Rg. drucke, passt es im allgemeinen.
Wenn ich hinterher noch eine drucke, kann es passieren, dass dort wo Fettdruck gewünscht, die Zeile tatsächlich doppelt kommt (über die Steuerzeichen sollte normalerweise dann beim Abbild ein Fettdruck entstehen). Auch kann es sein, dass die folgende Druck-Ausgabe auf jenem Drucker erfolgt, der bei der ersten Ausgabe gewählt wurde.
Alle Versuche mit div. Parametern haben nichts gefruchtet. Auch das Löschen DLTOVR hat zumindest bei den gestrigen Versuchen nicht das gewünschte ERgebnis gebracht.

Da Rechnungen häufig gedruckt werden müssen, und ich mit dem Problem schon mittlerweile zwei Wochen kämpfe, liegen überall schon die Nerven blank.

Abhilfe schafft nur, jede Rg. aus einer neuen Sitzung aufzurufen. Die erste Rg. funktioniert doch im allgemeinen wie vorgesehen.

Kann mir da jemand helfen. OVRPRTF enthält ja eine Fülle von Parametern. Irgendwo ist da etwas nicht stimmig.

Vielen Dank im Voraus

DKSPROFI
29-03-17, 11:34
Moin,

zeig doch mal Dein OVRPRTF.

mfg

DKSPROFI

KingofKning
29-03-17, 11:44
Alternativ die Jobs mit sbmjob laufen lassen. Dann hast Du immer wieder eine saubere Umgebung

GG 4812

hartmuth
29-03-17, 11:48
Es gibt mehrere, wie gesagt, leider
Ein "typischer" sieht so aus.

Mit OVRSCOPE(*JOB) wollte ich eigentlich die "Nachwirkungen" auf nächsten Programm-Aufruf verhindern

OVRPRTF FILE(QSYSPRT) DEV(HP2055OPT) CPI(15) +
OVRFLW(62) DRAWER(3) CTLCHAR(*FCFC) +
OUTQ(*DEV) FORMTYPE(*STD) COPIES(1) OVRSCOPE(*JOB)

Fuerchau
29-03-17, 11:54
Der OVRPRTF ist Ebenenbezogen als auch ACTGRP-relevant.
Die Parameter für die Druckausgabe selber spielen da keine Rolle.

OVRSCOPE

*ACTGRPDFN = die ACTGRP des Aufrufers
*JOB = Global, erklärt sich von selbst
*CALLLVL = nur ab dieser Ebene

Nun hängts halt davon ab, wie du den OVRPRTF aktivierst:
CLP = Ein CLP läuft immer in der *DFTACTGRP und kann daher keine Überschreibung auf *ACTGRP einer anderen ACTGRP (also eines ILE-Programmes) machen.
CLLE = alles ist möglich, wichtig ist, dass ACTGRP = *CALLER ist.
RPGLE = Läuft in ACTGRP und per QCMDEXC funktioniert das dann auch (nicht bei C-System()-Funktion!).

Problematisch ist da dann schon *CALLLVL, da häufig ein OVRPRTF aus dem Druckprogramm initiert wird und somit nach dem OVR der CALLLVL schon wieder verlassen wird.
Hier ist die Reihenfolge CLLE mit OVR->CALL RPGLE mit Druck schon wichtig.

Passend zum OVRPRTF muss natürlich auch der DLTOVR in der selben Ebene durchgeführt werden, sonst wird er nicht gefunden bzw. nicht gelöscht.

Passend dazu ist auchmit OPNSCOPE ggf. umzugehen.

Da OVR's generell mit übergeordneten Ebenen gemischt werden können, ist die Angabe SECURE ggf. erforderlich:
*YES = OVR's höherer Ebenen werden ignoriert
*NO = OVR's höherer Ebenen werden kombiniert

Per DSPJOB, Auswahl 15 können die Ebenen und Kombinationen von OVR's betrachtet werden.

Fuerchau
29-03-17, 11:59
Nachtrag:

a) Wieso arbeitest du mit QSYSPRT?
b) Wieso arbeitest du mit *FCFC?

Meist wird das doch nur nach einem CPYSPLF zur Wiederherstellung von Spools benötigt.
Zum Erstellen von PDF's und sonstigen Drucken würde ich dir auf jeden Fall eigene PRTF's (bei PDF mit der Art *AFPDS) empfehlen. Du hast dann viel mehr Möglichkeiten.

hartmuth
29-03-17, 12:05
Wie gewohnt eine perfekte Antwort. Vielen DANK schon mal. Jetzt sollte es selbst mir gelingen die funktionierende Anwendung zu schaffen.