Anmelden

View Full Version : CPF5011 Fehlermeldung



tarkusch
26-05-14, 15:45
Hallo,

ich hätte gerne vor Abarbeitung des Subfiles ermittelt wie oft die Auswahl "E" vorkommt um gewisse Felder zu sperren.

DOU %Eof(TEST1D);
IF S2AUSW = 'E';
I += 1;
ENDIF;
*IN14 = *ON;
Update FmtS2;
*IN14 = *OFF;

READC(E) FMTS2;
ENDDO;

// Anschließend echte Verarbeitung
DOU %Eof(TEST1D);
:
IF S2AUSW = 'E';
S2#RCC = S2#REC;
EXSR ScreenFMTF1;
ENDIF;
:
S2AUSW = *BLANKS;
Update FmtS2;
READC(E) FMTS2;
ENDDO;



Denn Bildschirmfile wandle ich auch mit RSTDSP *YES
*IN14 = Sflnextchange

Aber trotzdem bekomme ich die Fehlermeldung:


Weitere Nachrichteninformationen

Nachrichten-ID . . . . : CPF5011 Bewertung . . . . . . : 30
Nachrichtenart . . . . : Senderkopie
Sendedatum . . . . . . : 14.05.26 Sendezeit . . . . . . : 15:28:37

Nachricht . . . : Teildatei durch GET für Datei TEST1D in Bibliothek
H_TUSROBJ ändern.
Ursache . . . . : Vor GET wurden keine Änderungen vorgenommen. Die vorherige
Operation prüfen.
Fehlerbeseitigung: Die Reihenfolge der Programmoperationen ändern. Neu
kompilieren. Den Befehl wiederholen.
Auswahlmöglichkeiten . . . . . . . . . . . . . . . . . . . . . . . . . :
I -- Die Anforderung wird ignoriert. Die Steuerung wird an den Benutzer
zurückgegeben.
C -- Die Anforderung wird abgebrochen. Abbruchnachricht CPF5104 wird
gesendet.
Ende


Wie kann ich sonst die Anzahl des Auswahl im Subfile ermitteln?

Danke schon mal im Voraus für die Hilfe

Fuerchau
26-05-14, 15:52
Nach einem READC ist der Status der Änderung eines SFL-Satzes weg.
Erst nach einem erneuten EXFMT des CTL-Formates kann wieder READC verwendet werden.
Wenn also READC einmal EOF geliefert hat, meldet der nächste READC den CPF-Fehler.

"Komfortable" Programme arbeiten hier mit einer "Bestätigungssubfile".
D.h., per READC werden die Sätze mit der 1. gefunden Auswahl in eine 2. SFL kopiert, diese dann angezeigt und nach Bestätigung dann verarbeitet (siehe z.B. WRKSPLF).

Die Anzeige kann natürlich auch unterbleiben und die 2. SFL einfach per READ verarbeitet werden.

Alternativ kannst du dir auch eine Tabelle mit den Satz-Nr'n merken und dies dann per CHAIN SFLSATZ abarbeiten.

AG1965_2
26-05-14, 16:10
*IN14 wird wohl das DSPATR(MDT) bedingen, wenn man den Satz damit updatet, dann liest den READC auch wieder.
Und ad Fehler: Das Subfile unterscheidet sich von einer normalen Datei in der Hinsicht nicht - man muss einen Satz lesen, bevor man ihn updaten kann. Und das sagt die Meldung.
Wenn Du zwischen dem ENDDO von oben und dem UPDATE in der zweiten Schleife wirklich kein Lesen hast, ist das die Ursache.

tarkusch
26-05-14, 16:24
Ich hatte das READC vor der 2. Dountil-Schleife vergessen.
Nun funktioniert es.

Danke vielmals.

Mein Sfl sieht wie folgt aus


A R FMTS2 SFL
A 14 SFLNXTCHG
A S2#REC 4S 0H
A S2AUSW 1A B 6 2


Was ist mit DSPATR(MDT) bedingen gemeint bzw. wie wäre das umzusetzen?

Danke

AG1965_2
26-05-14, 16:33
Gerne.
DSPATR(MDT) ist genau das Gleiche wie SFLNXTCHG, nur eine andere Schreibweise.
Beide setzen das MDT - Modified Data Tag - den "Datenänderungsanzeiger", was dazu führt, dass Du den Satz mit READC nochmal lesen kannst.

Fuerchau
26-05-14, 17:37
MDT ist ein Attribut auf Feldebene.
Ohne SFLNXTCHG mit BZ gibt's keinen READC!
Beim WRITE mit BZ *ON wird der Satz als geändert markiert, ohne eben nicht.