PDA

View Full Version : Subfile bleibt in der Anzeige



Seiten : [1] 2

Hubert
08-05-20, 07:24
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

Fuerchau
08-05-20, 08:10
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.

Hubert
08-05-20, 08:45
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.

Fuerchau
08-05-20, 08:58
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.

Hubert
08-05-20, 09:22
Ja, INDARA ist auf Dateiebene angegeben.

Was genau soll ich am Listoutput prüfen? Vom Displayfile oder vom Programm?

Fuerchau
08-05-20, 11:47
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

Hubert
12-05-20, 15:28
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.

Fuerchau
13-05-20, 08:01
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.

Hubert
13-05-20, 09:26
Klasse, das hat funktioniert. Jetzt ist der Bereich vom SFL leer und die Fehlmeldung wird auch angezeigt.

Vielen Dank

mk
14-05-20, 07:05
Hi,

lange her, aber ich meine das man mit dem Schlüsselwort ERASE eine einfache und gute Screensteuerung erreichen kann.