PDA

View Full Version : Zwei Subfiles, falsche RCDNBR



hg2008
17-01-08, 09:12
Hallo zusammen,

ich habe ein großes Problem und hoffe, dass mir jemand helfen kann:

Ich habe ein COBOL-Programm mit zwei Subfiles geschrieben. Das PGM an sich funktioniert tadellos. Leider scheint es so, dass im unteren SFL die Satznummer nicht erkannt wird, bzw. nicht richtig gefüllt wird. Ich habe im DSPF zwei Formate (K1 ist oben, K2 ist unten) und in beiden Formaten jeweils ein Feld SFLRCDNBR angegeben. Für das K1-Format funktioniert das, nur wenn ich im K2-Format runterblättere und anschließend wieder hoch, so springt der Subfile jedesmal wieder zur zuletzt gelesenen Seite zurück. Die I-O-Feedback-Area hat das richtige Format (K2), aber die RCDNBR ist nicht richtig gefüllt. Weiß jemand, wie ich das lösen kann, bzw. habe ich mich überhaupt verständlich ausgedrückt?

Wenn Fragen sind, einfach melden.

Ich bin dankbar für jede Hilfe!

Viele Grüße,

hg2008

Fuerchau
17-01-08, 09:21
Die I-O-Feedback liefert natürlich nur die Daten des zuletzt gelesenen Formates.
Das Problem ist hier ggf., welches Format du einliest.

Andererseits könntest du das Blättern ja vom System selber vornehmen lassen, so dass dein Programm gar nicht aktiv werden muss (keine BZ bei ROLLUP/DOWN).

hg2008
17-01-08, 09:32
Hallo fuerchau,

danke für die Antwort.

Ich lese das richtige Format, bzw. sollte es so sein, denn in der FB-Area steht ja auch das richtige Format drin. Oder wie meintest Du das?

Und ich habe gar keine BZ gesetzt für Rollup/Rolldown.

Hast Du vielleicht noch andere Ideen?

Danke schonmal! :)

Fuerchau
17-01-08, 10:10
Für 2 Subfiles hast du doch 2 aktive Formate auf dem Display.

Beim Read kannst du jedoch nur 1 Format angeben.
Besser wäre es hier, beim Read kein Format anzugeben, so dass der IO-Feedback sowohl das Format in dem der Cursor gerade steht als auch die dazugehörenden Info's liefert.

Bei der Ausgabe darfst du allerdings nur das Format ausgeben, dass du auch gelesen hast.
Da dir über das andere Format keine aktuellen Info's hast, kannst du dieses auch nicht refreshen.

hg2008
17-01-08, 10:24
Hm, also ich lese immer den gesamten Bildschirm ohne Formatangabe.

Allerdings schreibe ich auch immer beide Formate, da sonst das eine nicht mit ausgegeben wird, bzw. überlagert wird.

Ich mache das folgendermaßen: befinde ich mich im unteren SFL, schreibe ich zuerst das obere Format und anschließend das untere, dann folgt der read über den kompletten Bildschirm. Befinde ich mich oben, schreibe ich zuerst das untere Format und dann das obere und der read wieder im Anschluss.

Könnte es also daran liegen? Aber wie lasse ich dann quasi immer beide Formate angezeigt, also dass keines überlagert wird? :confused:

Fuerchau
17-01-08, 10:39
Gib beide Formate nur beim 1. Mal überhaupt aus.
Ansonsten nur das jeweilige aktive Format, das andere bleibt ja stehen (durch OVERLAY).

hg2008
17-01-08, 11:58
Ja, also das würde theoretisch funktionieren, aber trotz OVERLAY und ASSUME wird immer das gerade nicht aktive Format überschrieben.

Hier sind die Keywords, die ich im K1-Format stehen habe:

A R KK110K1 SFLCTL(KK110S1)
A*%%TS SD 20071212 102838 REL-V5R4M0 5722-WDS
A SFLSIZ(0005)
A SFLPAG(0004)
A ROLLUP
A KEEP
A RTNCSRLOC(&FK1XRCD &FK1XFLD)
A CSRLOC(FK1HZEILE FK1HPOS)
A ASSUME
A OVERLAY
A PUTOVR
A PROTECT
A 05 SFLDSP
A 05 SFLDSPCTL
A 07 SFLEND
A FK1RELNR 4S 0H SFLRCDNBR

Und hier das K2-Format:

A R KK110K2 SFLCTL(KK110S2)
A*%%TS SD 20071211 150525 REL-V5R4M0 5722-WDS
A SFLSIZ(0005)
A SFLPAG(0004)
A ROLLUP
A KEEP
A RTNCSRLOC(&FK2XRCD &FK2XFLD)
A CSRLOC(FK2HZEILE FK2HPOS)
A ASSUME
A OVERLAY
A PUTOVR
A PROTECT
A 05 SFLDSP
A 05 SFLDSPCTL
A 07 SFLEND
A FK2RELNR 4S 0H SFLRCDNBR


Vielleicht habe ich hier ja auch einen Fehler drin?

Danke nochmal für Deine Hilfe!

Fuerchau
17-01-08, 13:50
ASSUME und PUTOVR sind unnötig.

Wichtig ist, dass sich die Formate garantiert nicht überlappen, auch nicht mit Zeilenüberlauf (Feld bis letzte Spalte, dadurch Ende-Attribut in Folgezeile).
ROLLUP ist unnötig, wenn du die SFL's immer komplett füllst.

CSRLOC würde ich auch nicht verwenden (zu statisch), für die Subfile-Sätze kannst du eine Variable mit SFLRCDNBR(CURSOR) definieren, die genau auf die Zeile positioniert.

PROTECT darf nicht verwendet werden, da alle Eingabefelder, die nicht zum ausgegebenen Format gehören, automatisch gesperrt werden.
PROTECT (Protect) keyword for display files (http://publib.boulder.ibm.com/infocenter/iseries/v5r4/topic/rzakc/rzakcmstdfptect.htm)

hg2008
18-01-08, 07:41
Tja, also jetzt bleiben beide Formate stehen, wenn ich blättere, aber wenn ich dann Enter drücke (ohne was ausgewählt zu haben), dann wird auch wieder das jeweils andere Format ausgeblendet. Drücke ich F5, so positioniert das SFL wieder ganz oben. Es ist zum Verrücktwerden! :o

hg2008
18-01-08, 10:29
Also - ich wollte mich nochmal kurz zurückmelden: Du hast mir mit Deinen Tipps wirklich sehr geholfen. Ich habe jetzt beide SFLs aktiv, d.h. ich kann in beiden etwas eingeben, das konnte ich vorher nicht (gleichzeitig).

Das mit dem Positionieren habe ich vorerst so gelöst, dass ich nach jeder Aktion einfach wieder am Anfang aufsetze - das ist zumindest einheitlich. Irgendwie klappt das nämlich immer noch nicht.

Auf jeden Fall erstmal ein großes Dankeschön an Dich! :)