PDA

View Full Version : Print im SDA



Robi
09-07-01, 10:44
Hallo Kollegen,
Wer weiß eine Lösung für folgendes Problem:
Wenn ich im DSPF die PRINT-Taste einschalte,
bleiben alle geänderten BS-Inhalte erhalten, ich muß nur 1 mal Grundstellung drücken.
Das ist OK
Wenn ich bei Print eine Bezugszahl ansetze, um den Druck selbst zu übernehmen kommen geänderte Felder mit ihren alten Inhalten zurück. Nur wenn vor dem drücken der Print-taste Dat.Frei betätigt wird, bleibt der BS-Inhalt unverändert

Vielen Dank für Jede Hilfe
Robi

PS.: Ich muß den Druck selber übernehmen, da ich vom Green-Screen beim Drucken von Window's keine Rahmen bekomme

LGALF
09-07-01, 16:12
ich habe einen kurztest durchgeführt
Test-Datei
PRINT(71 'Drucktaste')
R T01 (Satz)
OVERLAY
PUTRETAIN
letzter bs inhalt blieb bestehen.
= zusätzlich schlüsselfeld auf record-ebene
überlagerungs-schlüsselwörter overlay=j
putretain=j

ich arbeite sonst immer nur mit print auf
datei-ebene ohne bezugszahlen

hoffenlich hilf´s m.f.g. Alf


[Dieser Beitrag wurde von LGALF am 09. Juli 2001 editiert.]

Robi
09-07-01, 17:25
Danke, das geht tatsächlich . Es ist bei uns nur so, das wir mit PUTOVR und OVRDTA arbeiten um das übertragungsvolumen gering zu halten (Bezugszahlengesteuert) PUTRETAIN und putovr vertragen sich aber nicht. Na mal sehn was ich über diese Schlüsselwörter rausbekomme, vieleicht schaffen wir sie ja ab nochmal Danke,
Robi

Sven Schneider
09-07-01, 18:18
Im Prinzip funktioniert PRINT(01) wie eine CAXX-Taste (Funktionsabruftaste), d.h. es werden nach dem Verlassen von EXFMT/READ keine Daten aus dem DSPF-Record an das Programm zurückgegeben, genauer READ wird einfach nicht ausgeführt.
(Im Gegensatz zu einer CFXX-Taste)

Wird PRINT ohne Bezugszahl benutzt, bekommst Du auch keine Steuerung an das Programm zurück, d.h. OS/400 verarbeitet PRINT selber.

Problemlösung :

Trennung von EXFMT in WRITE/READ.
Rücksprung zwischen WRITE und READ nach Verarbeitung der PRINT(01)-Routine.
Im Prinzip bedeutet dies, der Satz wird nicht erneut geschrieben und die alten Daten bleiben erhalten.
Gleiche Vorgehensweise bei Programmierung einer eigenen Hilferoutine mit z.B. HELP(01).


[Dieser Beitrag wurde von Sven Schneider am 09. Juli 2001 editiert.]

[Dieser Beitrag wurde von Sven Schneider am 09. Juli 2001 editiert.]

Robi
10-07-01, 07:50
Hallo Sven
Was du schreibst ist leider nicht die Lösung

Wenn im DSPF nicht die Entertaste gedrückt wird kommen keine geänderten Daten aus dem DSPF.
Das Programm, das den BS-Inhalt druckt, druckt zwar die Änderungen aber der erneute Write zeigt Sie nicht an.
(es sei denn, ich berüchsichtige den Tipp von LGALF)

LGALF
10-07-01, 08:37
ohne putretain (mit putovr) habe ich z.b. im
cl folgendes probiert:

== ausgabe bildschirm
sndrcvf (wie exfmt)
==
wenn print-taste (bezugszahl) an - dann
rcvf rcdfmt(T01) wait(*yes)
(read)lesen bildschirm mit erzwungener aktion
z.b. datenfreigabe


[Dieser Beitrag wurde von LGALF am 10. Juli 2001 editiert.]

Sven Schneider
10-07-01, 18:30
Mißverständnis :

An das Programm werden die Daten natürlich nicht übergeben. Daten werden lediglich bei Datenfreigabe und CFXX-Tasten übergeben. (Habe ich auch so geschrieben)

Bei der erneuten Anzeige des Records bleiben aber so die eingegebenen Werte (vor dem Betätigen der PRINT-Taste) erhalten.

Übrigens kein erneutes WRITE nach der Verarbeitung der PRINT-Routine, sondern nur READ !!!
Ein erneutes WRITE auf das DSPF-Record würde die Felder aus dem Programmpuffer überschreiben.

Also bei PRINT(01) im DSPF :

WRITE RECORD1
*IN01 DOUEQ*OFF
READ RECORD1 99
*IN01 IFEQ *ON
EXSR PRINT
ENDIF
ENDDO

Siehe vorhergehendes Posting von LGALF.
Das CLP geht im Prinzip genauso vor.

[Dieser Beitrag wurde von Sven Schneider am 10. Juli 2001 editiert.]

Robi
11-07-01, 01:51
Stimmt, hab mich vom Debugger irritieren lassen, der Feldwert kommt nicht zurück, aber wenn ich anschl. nur einen read mache stehen die geänderten Daten noch auf dem Schirm.
Sorry + Danke
Robi