View Full Version : Seitenanzeige im Subfile
Bitverdreher
16-04-09, 07:15
Hallo zusammen,
wenn ich in einem dynamisch gefüllten Subfile ein paarmal vorwärts blättere, dann rückwärts blättere und Datenfreigabe drücke, dann wird immer die Subfileseite angezeigt, die nach dem letzten Vorwärtsblättern gefüllt (und angezeigt) wurde.
Ich möchte aber, daß die jeweils aktuell angezeigte Seite auch nach Datenfreigabe angezeigt bleibt.
Was muß ich tun, damit nach dem Rückwärtsblättern, die Steuerung nicht durch das System sondern wieder durch das Programm erfolgt?
Gibt es eine Möglichkeit ähnlich wie bei den Funktionstasten (*INKx) zu prüfen, ob die Datenfreigabetaste gedrückt wurde?
vielen Dank für eure Hilfe.
Das Drücken von Enter löst einen READ/EXFMT immer aus.
Durch SFLCSRRRN(&CSRFIELD) kannst du die aktuelle Satznummer nach Enter gemeldet bekommen, durch SFLRCDNBR(CURSOR) setzt du den anzuzeigenden Satz.
Wenn du SFLRCDNBR(CURSOR) bereits verwendest, so ist dies die Ursache für die Positionierung nach Enter.
Diese Steuerung verwendet man normalerweise zur Fehlerpositionierung.
Bitverdreher
27-04-09, 07:23
vielen Dank für den Tip. Ich hatte zwar SFLCSRRRN im Subfile definiert aber den zurückgegebenen Wert nicht in die Subfile-Recordnumber gestellt.
Aber Achtung:
Steht der Cursor bei Freigabe nicht in der Subfile wird 0 (*zero) zurückgemeldet.
Wenn du dies nicht berücksichtigst stürzt dein Programm ab.
In der INFDS gibts aber irgendwo die Nr. des 1. Satzes der aktuellen Seite.
Bitverdreher
30-04-09, 13:49
Aber Achtung:
Steht der Cursor bei Freigabe nicht in der Subfile wird 0 (*zero) zurückgemeldet.
Wenn du dies nicht berücksichtigst stürzt dein Programm ab.
vielen Dank für die Info, hab beim Testen natürlich einen Absturz provoziert :)
In der INFDS gibts aber irgendwo die Nr. des 1. Satzes der aktuellen Seite.
die Satznummer des ersten Satzes der Subfileseite erhält man übrigens aus der INFDS Stelle 378 - 379
Aber Achtung:
Steht der Cursor bei Freigabe nicht in der Subfile wird 0 (*zero) zurückgemeldet.
Wenn du dies nicht berücksichtigst stürzt dein Programm ab.
Blöde Frage von mir: Wie berücksichtige ich dass? Wie muss ich das anders Definieren oder abfragen?
Ich hab ein Display mit Abfragedatum im CTL und ein Subfile zur Anzeige. Es stürzt ab, wenn das Subfile leer ist, aber wie verhinder ich dass nun?
Vielen Dank für die Antwort!!
dschroeder
24-07-23, 10:24
Hallo,
ich weiß nicht, ob ich deine Frage korrekt verstanden habe. Aber ich denke, grundsätzlich geht folgendes:
Dein Programm füllt die SFL. Dabei zählst du mit, wie viele Sätze in die SFL gefüllt werden. (Ist kein Aufwand, du musst ja sowieso die Subfile-Record-Nr. hochzählen).
Abhängig davon, ob die SFL Sätze enthält, schaltest du SFLDSP auf *ON oder *OFF. Außerdem setzt die Record-Nr. für die Positionierung auf 0, wenn deine SFL keine Sätze enthält.
LG, Dieter
Hallo Dieter,
soweit ist es richtig, was du denkst.
Allerdings setzte ich den SFLDSP nicht abhängig davon, ob ich Subfile Sätze habe oder nicht.
Also ich SFL Steuerung gelernt habe, wurde uns beigebracht, dass SFLDSPCTL, SFLDSP und SFLCLR im Display mit den selben indikatoren immer zusammenhängen müssen, wobei der SFLCLR das N davor bekommt:
A 65 SFLDSPCTL
A 65 SFLDSP
A N65 SFLCLR
Und ich dann im Programm vor dem schreiben des Subfile einmal alles cleare:
if nRRN = 0;
nRRN = 1;
write Sfl1;
endIf;
SflClr = *OFF;
write CTL1;
SflClr = *ON;
SflClr ist hier mit der 65 von der INDDS des Display belegt.
Ich hatte jetzt einfach in das Display CTL noch SFLCSRRRN(&Var1) gepackt, beiden Hidden Felder VAR1 5S 0 und VAR2 4S 0 und VAR2 SFLRCDNBR(CURSOR) als funktion hinzugefügt. So wie ich es im Netz gefunden hatte und dann das ganze so eingebaut bevor ich das Display anzeige:
if Var1 > 0;
Var2 = Var1 ;
else;
Var2 = 1 ;
EndIf;
write HEADER;
write FOOTER;
exfmt CTL1;
Das funktionierte auch alles super, bis keine Daten gefunden werden (Suche mit Datum über eine Datei und habe fürs Wochenende bisher keine Einträge) und das SFL leer bleibt. Dann stürzt mir das Programm beim EXFMT CTL1 ab.
Dass es abstürzt wenn keine Daten fürs Subfile da sind, wusste ich auch bis vorhin nicht, da ich mit SFLCSRRRN und SFLRCDNBR zum ersten mal arbeite.
Die Frage ist jetzt, wie fange ich diesen Fehler ab?
dschroeder
24-07-23, 11:37
Guck doch zunächst mal im Joblog, weshalb das Programm abstürzt.
Wenn eine Subfile leer ist, musst du die SFLDSP auf aus setzen.
Dann wird SFLRCDNBR ignoriert.
I.d.R. hast du SFLDSP und SFLDSPCTL getrennt per BZ.
Somit kannst du steuern, ob die SFL sichtbar ist oder nicht.