PDA

View Full Version : refresh subfile



_MG_
12-07-17, 08:28
Hallo zusammen,

Ich habe ein kleines Problem mit einem Programm was mit einem subfile arbeitet
Wenn ich die Auswahl L treffe wird der aktuelle Satz gelöscht und das Programm beendet.

Ich hätte jedoch gerne dass das Programm weiterhin läuft, den Satz aus der Physischen Datei löscht und anschließend das Subfile neu befüllt.

Bei meinem Versuch bekomme ich die Meldung das versucht wird ein doppelten Satz zu schreiben. --> Nehme stark an er meint die RRN.
..Obwohl ich vorher ein clear auf das SFL und den SFLCTL mache scheint er die irgendwo noch stehen zu haben.

Hätte jemand eine Idee?

Grüße

Fuerchau
12-07-17, 09:50
Aus dieser klaren Beschreibung heraus kann ich halt nur Vermutungen anstellen.
Eine Subfile neu aufzubauen geht natürlich ganz einfach.
Man setze die Bezugszahl des SFLCLR und schreibe das CTL-Format.
Anschließend füllt man die SFL so wie beim 1. Mal auch, also mit dem Feld aus SFLRNR (RPG) bei 1 beginnend.
Wo dein Fehler nun tatsächlich ist, kann ich mangels Code leider nicht feststellen.

_MG_
12-07-17, 11:34
Habe leider grade kein Zugriff auf den Code.
Ich denke aber ich habe einen Fehler in der Logik, da ich noch nicht genau weiss wie sich das alles verhält.

Das Programm macht folgendes:
#####
SFL: MZEILE
SFLCTL: MKSATZ

Ich lese die physische in einer Schleife bis kein Satz mehr gefunden wird.
Schleifenbeginn
In jedem Lauf der Schleife wird die RRN +1 gesetzt, die Werte initialisiert und am Ende geschieht ein write MZEILE
Schleifenende

Dann:
write Kopf vom dspf
write Fuß vom dspf
EXFMT MKSATZ

Nächste Schleife
READC MZEILE (bis keine Sätze mehr oder die Eingabe geschah)
Wenn Auswahl L --> Chain auf Physische und löschen.
Schleifen ende
######
Bis hier funktioniert das. Mein Problem ist jetzt gebe ich L ein und drücke Enter bleibt das Bild so wie es ist; Sprich der gelöschte Satz wird weiter angezeigt. Auch mit dem L in der Auswahl.
Somit habe ich das Programm weiter geschrieben: Folgender Lösungsansatz:
#####
Wenn L seton 53 (SFLCLR)
clear MKSATZ
clear Fuß
clear Kopf
setoff 53

RRN = 0

Geh zu Schleife 1

Und dann kommt eben beim Schreiben in die MZEILE der Fehler doppelter Satz. Als wie die Sätze wurden nicht gelöscht.

Die Frage ist stimmt überhaupt die Logik des Ansatz.

SORRY für das Chaos, war jetzt aus dem Kopf geschrieben

Grüße

dschroeder
12-07-17, 12:47
Es reicht nicht, die Bezugszahl SFLCLR anzuschalten. Du musst danach auch einen write auf den Control-Satz machen. Sonst wirkt die Bezugszahl nicht.
Ich weiß nicht, ob das write in deinen Unterroutinen drinsteht.

Fuerchau
12-07-17, 13:59
Das Problem ist die Reihenfolge der Anweisungen:
Wenn L seton 53 (SFLCLR)
clear MKSATZ

Da nun IN53 in MKSATZ definiert ist, setzt der "Clear MKSATZ" ebenso IN53 wieder auf OFF, so dass der Write MKSATZ dann eben kein SFLCLR ausführt.

_MG_
12-07-17, 14:57
Konnte es eben testen.

klappt wie gewünscht..wieder etwas mehr Verständnis erlangt, danke :-)

Gute Restwoche noch!