View Full Version : Subfile bleibt in der Anzeige
Guten Morgen,
auch mit ausgeschaltetem SFLDSP bleibt eine Subfile beim nächsten WXFMT auf dem Bildschirm.
Die Kontrollsatz Defi
R LISTECTL SFLCTL(LISTESFL)
SFLSIZ(0098)
SFLPAG(0005)
CA03
CF06
CA12
RTNCSRLOC(&RCDFMT &RCDFLD &RCDPOS)
CSRLOC(POSY POSX)
OVERLAY
90 SFLDSP
91 SFLDSPCTL
92 SFLCLR
99 SFLEND(*MORE)
RCDFMT 10A H
RCDFLD 10A H
RCDPOS 4S 0H
POSY 3S 0H
POSX 3S 0H
RCDNR1 4S 0H SFLRCDNBR(CURSOR)
Die Bezugszahlen habe ich im Programm benamst
d INDPTR S * INZ(%ADDR(*IN))
D BEZUGSZ ds based(IndPtr)
d SFLDSP 90 90
d SFLDSPCTL 91 91
d SFLCLR 92 92
D MSGALARM 96 96
D MSGSFLEND 97 97
D SFLEND 99 99
Vor dem nächsten EXFMT rufe ich eine Prozedur auf:
p SFLClear b
d pi
/FREE
sfldspctl = *off;
sfldsp = *off;
sflclr = *on;
RCDNR1 = 0;
CTLHEADA = ND;
write Listectl;
sfldspctl = *on;
sflclr = *off;
/END-FREE
p SFLclear e
Kann mir jemand erklären, warum das Subfile trotzdem stehen bleibt?
Herzlichen Dank im Voraus
Hubert
Nun ja, die Ausgaben werden gepuffert. D.h., dass die Wirkung erst mit dem nächsten Read oder EXFMT eintritt.
Was dein Programm also nach dem Aufruf macht ist entscheidend.
Wenn dann noch alte Daten angezeigt werden schein dein SFLCLR nicht zu wirken.
Wenn SFLDSP = *OFF ist, sollte es doch grundsätzlich nicht angezeigt werden oder irre ich mich da?
Das Programm ist im Grunde sehr simpel:
sflclear();
write fuss;
EXFMT Listectl;
dow Taste <> F03
and Taste <> F12;
exsr clrmsg;
msgid = CheckHeader(CTLWENR
:CTLAKNR
:CTLKOMM
:CTLPOS
);
if msgid <> 'OK';
sflclear();
exsr sndmsg;
else;
sflfill(CTLWENR
:CTLAKNR
:CTLKOMM
:CTLPOS
:CTLPOS
);
if RCDNR1 = 0;
sflclear();
else;
CTLHEADA = WH;
sfldsp = *on;
rcdnr1 = 1;
CTLHEADA = WH;
endif;
endif;
write fuss;
dump;
exfmt Listectl;
SFLProcess();
enddo;
Den DUMP habe ich zum Testen eingebaut. Bei der Anzeige nach dem SFLCLEAR sieht die BZ-Datenstruktur so aus:
BEZUGSZ DS
MSGALARM CHAR(1) '0'
MSGSFLEND CHAR(1) '0'
SFLCLR CHAR(1) '0'
SFLDSP CHAR(1) '0'
SFLDSPCTL CHAR(1) '1'
SFLEND CHAR(1) '1'
Das sollte doch eigentlich dazu führen, dass die Subfile nicht angezeigt wird.
Hast du in der DSPF auf Dateiebene auch INDARA gesetzt?
Prüfe mal den Listoutput. Ggf. stimmt dein Bezug zwischen Satzformat und IN-Struktur nicht.
Ja, INDARA ist auf Dateiebene angegeben.
Was genau soll ich am Listoutput prüfen? Vom Displayfile oder vom Programm?
Was die BZ's angeht, so schau mal nach "Programmieren ohne BZ" von Birgitta.
Irgendwas ist mit deinen Definitionen der BZ's nicht i.O. da dein SFLCLR nicht wirkt.
Sonst wären da die Daten nämlich auch weg.
http://newsolutions.de/forum-systemi-as400-i5-iseries/attachment.php?attachmentid=561&d=1586353811
Die Anleitung von Brigitta nutze ich schon lange. Ich habe jetzt etwas rumprobiert (RPG heißt doch: Raten Programmieren Glauben) :rolleyes:
Das Displayfile besteht aus drei Teilen
Verwalten Etikettensätze (AET003PF)
WE-Nr. . . . . : BBBBBBB AK . . . . . . . . : B
Kommission . . : BBBBB Position . . . . . : BB
Aus WE-Nr. AK Komm. Pos. Maße
Kunde
0 0000000 0 00000 00 000000000000000000000000000
000000000000000000000 000000000000000000000
0 0000000 0 00000 00 000000000000000000000000000
000000000000000000000 000000000000000000000
0 0000000 0 00000 00 000000000000000000000000000
000000000000000000000 000000000000000000000
0 0000000 0 00000 00 000000000000000000000000000
000000000000000000000 000000000000000000000
0 0000000 0 00000 00 000000000000000000000000000
000000000000000000000 000000000000000000000
Weitere ...
00000000000000000000000000000000000000000000000000 000000000000000000000000
Rot ist der Kopf, schwarz das Subfile und Blau der Fuß mit den Angaben zu Funktionstasten.
Wenn ich den Fuß ohne OVERLAY lasse, wird das Subfile richtigerweise nicht angezeigt, wenn SFLDSP = *OFF. Allerdings wird dann auch das MSGSFL nicht angezeigt. Wenn im Fuß OVERLAY angegeben wird, wird das MSGSFL angezeigt, wenn ein Fehler auftritt, aber das Subfile bleibt bei SFLDSP = *OFF stehen. Ich weiß nicht mehr weiter.
Das ist der Fluch von Overlay.
Dabei wird nur das ausgegeben, was angegeben ist, der Rest bleibt immer bestehen.
Mach einfach ein leeres Satzformat ohne Overlay, dass den Bildschirm halt löscht und den Rest dann mit Overlay.
Da ich nicht mit MSGSFL arbeite, kann ich das Problem nicht nachvollziehen.
Übrigens:
Niemand sagt, dass das SFLCTL über der SFL stehen muss, es geht auch umgekehrt:
Also ein Kopfformat ohne Overlay und das Fußformat als SFLCTL mit Overlay.
Allerdings funktioniert dies nur, wenn im Kopf keine Eingabefelder vorhanden sind.
Wie das mit mehreren aktiven Eingabeformaten funktioniert, ist eine ander Geschichte.
Klasse, das hat funktioniert. Jetzt ist der Bereich vom SFL leer und die Fehlmeldung wird auch angezeigt.
Vielen Dank
Hi,
lange her, aber ich meine das man mit dem Schlüsselwort ERASE eine einfache und gute Screensteuerung erreichen kann.