1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
|
PACKET listenweiseergverskonfDEFINES bearbeitungergverskonf,
ergverskonfnichtspeichern,ergverskonfspeichern:LET tofather=1,tograndfather=2
,jgst5=5,jgst13=13,leerejgst=" ",maxfach=3,niltext="",blank=" ",
namenstrenner=", ",unterstrich="_",null=0,leererzug=" ",meldtrenner="#";
LET nachpruefling="n",versetzter="vs",wiederholer="wf";LET schuljahrkey=
"Schuljahr",schulhalbjahrkey="Schulhalbjahr";LET maxschueler=15,erstesfeld=2,
felderprozeile=4,schuelerproseite=16,laengefach=2;LET gwklasse=1;LET
meldbestleer=59,meldnichtspeichern=63,meldplausi=57,meldwarten=69,
meldspeicherung=132,meldspeicherfehler=131,meldfalscheauswahl=56,
meldtransaktionsfehler=138,meldfalscheeingabe1=136,meldfalscheeingabe2=137,
meldungueltigesfach=149;LET pruefartgrenzen=3;LET fnrjgst=2,fnrtutor=3,
fnrklasse=2,fnrname=3,fnrvers=4,fnrnachprfaecher=5;LET einejgst=2,eineklasse=
3;LET standardanfang=1,standardeinstieg=4;LET allespruefen=1,einejgstpruefen=
2,eineklassepruefen=3;LET anzkenndaten=3,sek2min=11,laufbestand="ls";LET
logtextbeginn="Anw. 1.4.4 Versetzungen für ",logtextalleklassen=
"alle Klassen";BOOL VAR nochwelcheda,alleklassen;INT VAR waspruefen:=0;INT
VAR laengeklasse,laengename,laengenachprfaecher,bestandindex,laengevers,
schuelerzahl,aktuellesfeld;ROW schuelerproseiteROW anzkenndatenTEXT VAR
kenndatum;ROW schuelerproseiteTEXT VAR altedaten;TEXT VAR schuelertid:="",
hjdtid:="";TEXT VAR versetzungszeichen:="";TEXT VAR startkey1,startkey2,
sicherungstupel,vergleichsjgst,zulaessigekuerzel,schuljahr,schulhalbjahr,
gueltigejgst,gueltigerzug;TEXT VAR fachkatalog:="";LET trenner="�";PROC
bearbeitungergverskonf:reinitparsing;eingangsbildschirmpruefen;IF
eingangsbildschirmokTHEN initialisierungenvornehmen;naechsteportionlesen;IF
keinemehrdaTHEN bestandleermelden;enter(tofather)ELSE standardnprocFI ELSE
eingangsmaskenfehler;return(tofather)FI .eingangsbildschirmpruefen:INT VAR
pruefstatus:=null;startkey1:=niltext;startkey2:=niltext;vergleichsjgst:=
niltext;alleklassen:=FALSE ;IF standardmaskenfeld(fnrjgst)<>niltextTHEN
standardpruefe(pruefartgrenzen,fnrjgst,jgst5,jgst13,niltext,pruefstatus);IF
pruefstatus=nullTHEN startkey1:=jgstaufber(standardmaskenfeld(fnrjgst));
vergleichsjgst:=startkey1;startkey2:=standardmaskenfeld(fnrtutor);IF
standardmaskenfeld(fnrtutor)=niltextTHEN bestandindex:=einejgstELSE
bestandindex:=eineklasseFI FI ELIF standardmaskenfeld(fnrtutor)<>niltextTHEN
pruefstatus:=fnrtutorELSE alleklassen:=TRUE FI .eingangsbildschirmok:
pruefstatus=null.initialisierungenvornehmen:plausipruefungvorbereiten;
bestandsetzen;standardstartproc(maske(vergleichsknoten));laengenfestlegen;IF
waspruefen=einejgstpruefenCAND sek2THEN startebildschirmblock(ixsustatjgst,
maxschueler);ELSE startebildschirmblock(ixsustatjgstzug,maxschueler);FI .sek2
:int(startkey1)>=sek2min.bestandsetzen:bestimmebestand;setzestartkeys;
pruefebestand.bestimmebestand:schuljahr:=schulkenndatum(schuljahrkey);
schulhalbjahr:=schulkenndatum(schulhalbjahrkey);IF alleklassenTHEN
alleklassensetzenELSE SELECT bestandindexOF CASE einejgst:bestandjgstCASE
eineklasse:bestandklasseEND SELECT FI ;.alleklassensetzen:waspruefen:=
allespruefen;infeld(fnrjgst).bestandjgst:waspruefen:=einejgstpruefen;infeld(
fnrjgst).bestandklasse:waspruefen:=eineklassepruefen;infeld(fnrtutor).
setzestartkeys:inittupel(dnrschueler);putwert(fnrsustatuss,laufbestand);
putwert(fnrsusgrpjgst,startkey1);putwert(fnrsusgrpzugtut,startkey2);.
pruefebestand:IF waspruefen=einejgstpruefenCAND sek2THEN search(ixsustatjgst,
FALSE )ELSE search(ixsustatjgstzug,FALSE )FI ;IF dbstatus<>nullCOR (NOT
pruefungspeziell(waspruefen))THEN bestandleermelden;return(tofather);LEAVE
bearbeitungergverskonfELSE nochwelcheda:=TRUE FI .laengenfestlegen:
laengeklasse:=standardfeldlaenge(fnrklasse);laengename:=standardfeldlaenge(
fnrname);laengevers:=standardfeldlaenge(fnrvers);laengenachprfaecher:=
standardfeldlaenge(fnrnachprfaecher).plausipruefungvorbereiten:
standardmeldung(meldwarten,niltext);zulaessigekuerzel:=nachpruefling+
versetzter+wiederholer+blank.naechsteportionlesen:blocklesenundausgeben.
keinemehrda:NOT nochwelcheda.bestandleermelden:infeld(fnrjgst);
standardmeldung(meldbestleer,niltext).eingangsmaskenfehler:standardmeldung(
meldfalscheauswahl,niltext);infeld(pruefstatus).END PROC
bearbeitungergverskonf;PROC ergverskonfnichtspeichern:nichtspeichernmelden;
startkeyssetzen;neuerblock.nichtspeichernmelden:standardmeldung(
meldnichtspeichern,niltext);pause(10).startkeyssetzen:restoretupel(
dnrschueler,sicherungstupel);#dr02.05.88#changeindex.END PROC
ergverskonfnichtspeichern;PROC ergverskonfspeichern:BOOL VAR hjdgefunden:=
FALSE ;pruefeplausibilitaet;IF dateninordnungTHEN speicherungdurchfuehren;
startkeyssetzen;neuerblockELSE eingabefehler;return(tofather)FI .
pruefeplausibilitaet:standardmeldung(meldplausi,niltext);BOOL VAR
dateninordnung:=TRUE ,richtigesverskz,ungueltigefachangaben:=FALSE ,
fachfehler:=FALSE ;INT VAR versfeld:=felderprozeile;FOR suindFROM 1UPTO
schuelerzahlREP pruefezeile;IF NOT dateninordnungTHEN LEAVE
pruefeplausibilitaetFI ;versfeldINCR felderprozeilePER .pruefezeile:TEXT VAR
gefundenesverskz:=standardmaskenfeld(versfeld);richtigesverskz:=
gefundenesverskz=niltextOR (pos(zulaessigekuerzel,gefundenesverskz)>null);IF
richtigesverskzTHEN pruefefachangabenzuverskz;IF ungueltigefachangabenTHEN
dateninordnung:=FALSE FI ELSE dateninordnung:=FALSE FI .
pruefefachangabenzuverskz:IF gefundenesverskz<>nachprueflingTHEN IF NOT
keineeingabenTHEN ungueltigefachangaben:=TRUE FI ELSE pruefefachangaben;IF
fachfehlerTHEN ungueltigefachangaben:=TRUE FI FI .pruefefachangaben:IF
fachkatalog=niltextTHEN holeaktuellenfachkatalogFI ;TEXT VAR fachangaben:=
standardmaskenfeld(versfeld+1);INT VAR lenfachang:=length(fachangaben);INT
VAR fachanzahl:=(lenfachang+1)DIV laengefach;INT VAR i;TEXT VAR fach;FOR i
FROM 0UPTO fachanzahl-1REP fach:=subtext(fachangaben,i*laengefach+1,i*
laengefach+laengefach);changeall(fach,unterstrich,niltext);fach:=compress(
fach);IF fach<>niltextCAND fachungueltig(fach)THEN fachfehler:=TRUE FI UNTIL
fachfehlerPER .keineeingaben:BOOL VAR b:=TRUE ;INT VAR lv;TEXT VAR t:=
standardmaskenfeld(versfeld+1);FOR lvFROM 1UPTO length(t)REP b:=(tSUB lv)=
unterstrichUNTIL NOT bPER ;b.speicherungdurchfuehren:vorbereiten;
logeintragvornehmen;aendernschleife;kurzwarten.logeintragvornehmen:TEXT VAR
eintrag:=logtextbeginn;IF alleklassenTHEN eintragCAT logtextalleklassenELSE
eintragCAT startkey1;eintragCAT startkey2FI ;logeintrag(eintrag).kurzwarten:
pause(10).vorbereiten:gueltigejgst:=vergleichsjgst;gueltigerzug:=startkey2;.
aendernschleife:INT VAR suind;INT VAR zahlderaenderungen:=null;INT VAR
satzindex:=felderprozeile-1;FOR suindFROM 1UPTO schuelerzahlREP
behandleschuelersatz;satzindexINCR felderprozeilePER .behandleschuelersatz:
IF vergleichsjgst=niltextTHEN gueltigejgstneubestimmenFI ;IF startkey2=
niltextTHEN gueltigenzugneubestimmenFI ;IF datenveraendertTHEN
fuehreaenderungaus;meldevollzugFI .gueltigejgstneubestimmen:TEXT VAR
pruefjgst:=subtext(standardmaskenfeld(satzindex-1),1,2);IF pruefjgst<>
leerejgstTHEN gueltigejgst:=pruefjgstFI ;.gueltigenzugneubestimmen:TEXT VAR
pruefzug:=subtext(standardmaskenfeld(satzindex-1),3,6);IF pruefzug<>leererzug
THEN gueltigerzug:=pruefzugFI .datenveraendert:altedaten(suind)<>(
standardmaskenfeld(satzindex+1)+standardmaskenfeld(satzindex+2)).
fuehreaenderungaus:lesenvorbereiten;lesen;hjdgefunden:=dbstatus=ok;IF
dbstatus=okTHEN saveupdateposition(dnrhalbjahresdaten);hjdtid:=gettid;
versetzungszeichen:=wert(fnrhjdversetzung);zurueckschreiben;ELSE
versetzungszeichen:=niltext;neuensatzankoppelnFI .lesenvorbereiten:
zahlderaenderungenINCR 1;schluesselfuerhjdsetzen(dnrhalbjahresdaten,kenndatum
[suind],schuljahr,schulhalbjahr,gueltigejgst);.lesen:search(
dnrhalbjahresdaten,TRUE );.zurueckschreiben:IF datenaenderungTHEN
transaktionsfehlerELSE schreibtransaktionFI .datenaenderung:(
versetzungsergebnis+nachpruefungsfaecher)<>altedaten(suind).
versetzungsergebnis:wert(fnrhjdversetzung).transaktionsfehler:standardmeldung
(meldtransaktionsfehler,niltext);return(tofather);infeld(suind*felderprozeile
);LEAVE ergverskonfspeichern.schreibtransaktion:setzedaten;
vorhandenensatzaendern.setzedaten:setzeverskz;setzefaecherdaten.setzeverskz:
putwert(fnrhjdversetzung,standardmaskenfeld(satzindex+1)).setzefaecherdaten:
INT VAR fachindanfang:=1,fachindende:=2;INT VAR fachind;TEXT VAR
eingegebenenpfaecher:=standardmaskenfeld(satzindex+2);TEXT VAR einzelfach;
FOR fachindFROM 0UPTO maxfach-1REP einzelfach:=subtext(eingegebenenpfaecher,
fachindanfang,fachindende);IF einzelfach<>laengefach*unterstrichTHEN
changeall(einzelfach,unterstrich,niltext);putwert(fnrhjdnachfach1+fachind,
compress(einzelfach))ELSE putwert(fnrhjdnachfach1+fachind,niltext)FI ;
fachindanfangINCR laengefach;fachindendeINCR laengefach;PER .
vorhandenensatzaendern:IF standardmaskenfeld(satzindex+1)<>versetzungszeichen
THEN restoreupdateposition(dnrhalbjahresdaten);#update(dnrhalbjahresdaten);
dr10.05.88#selupdate(dnrhalbjahresdaten)ELSE replace(dnrhalbjahresdaten,
hjdtid)FI .neuensatzankoppeln:setzedaten;putwert(fnrhjdkennung,compress(
gueltigerzug));insert(dnrhalbjahresdaten);hjdtid:=gettid;.meldevollzug:TEXT
VAR meldungstext;IF dbstatus=0THEN IF NOT hjdgefundenTHEN
neueshjdtidinschuelerdateieintragen(satzindex+1);FI ;#dr04.05.88hjdtid:=
gettid;neueshjdtidinschuelerdateieintragen(satzindex+1);##dr10.05.88
eventuellinstatwuerfelaendern(satzindex+1);#meldungstext:=compress(
standardmaskenfeld(satzindex))+meldtrenner;standardmeldung(meldspeicherung,
meldungstext)ELSE meldungstext:=text(dbstatus)+meldtrenner;meldungstextCAT
compress(standardmaskenfeld(satzindex));meldungstextCAT meldtrenner;
standardmeldung(meldspeicherfehler,meldungstext);return(tofather);LEAVE
ergverskonfspeichernFI ;infeld(satzindex+1).startkeyssetzen:restoretupel(
dnrschueler,sicherungstupel);#dr02.05.88#changeindex.eingabefehler:IF NOT
richtigesverskzTHEN standardmeldung(meldfalscheeingabe1,standardmaskenfeld(
versfeld)+meldtrenner);infeld(versfeld)ELIF fachfehlerTHEN standardmeldung(
meldungueltigesfach,fach+meldtrenner);infeld(versfeld+1)ELSE standardmeldung(
meldfalscheeingabe2,niltext);infeld(versfeld+1)FI .END PROC
ergverskonfspeichern;PROC neuerblock:blocklesenundausgeben;IF nochwelcheda
THEN return(tofather)ELSE enter(tograndfather)FI .END PROC neuerblock;PROC
blocklesenundausgeben:parsenooffields(fnrhjdnachfach3-dnrhalbjahresdaten);
vorbereiten;initgruppenwechsel;gewuenschteszeigen;nachbereiten;reinitparsing.
vorbereiten:IF NOT nochwelchedaTHEN reinitparsing;LEAVE blocklesenundausgeben
FI ;standardmeldung(meldwarten,niltext);schuelerzahl:=null;aktuellesfeld:=
erstesfeld.gewuenschteszeigen:parsenooffields(12);#dr04.05.88#bildschirmblock
(PROC datenzeigen,BOOL PROC (INT CONST )pruefungspeziell,waspruefen);
reinitparsing#dr04.05.88#.nachbereiten:nochwelcheda:=(schuelerzahl>null);IF
nochwelchedaTHEN savetupel(dnrschueler,sicherungstupel);#dr02.05.88#
restlichezeilenloeschen;infeld(standardanfang);standardfelderausgebenELSE
LEAVE blocklesenundausgebenFI ;infeld(standardeinstieg).
restlichezeilenloeschen:INT VAR zeilenzaehler;INT VAR zeilenfeld:=(
schuelerzahl*felderprozeile)+1;FOR zeilenzaehlerFROM schuelerzahlUPTO
maxschuelerREP loeschezeilePER .loeschezeile:INT VAR zeilenincr;FOR
zeilenincrFROM 1UPTO felderprozeileREP zeilenfeldINCR 1;standardmaskenfeld(
standardfeldlaenge(zeilenfeld)*blank,zeilenfeld);feldschutz(zeilenfeld)PER .
END PROC blocklesenundausgeben;PROC namezeigen:namenretten;standardmaskenfeld
(text(schuelername+namenstrenner+schuelervorname,laengename),aktuellesfeld);
aktuellesfeldINCR 1.namenretten:TEXT VAR schuelername,schuelervorname;
schuelername:=wert(fnrsufamnames);schuelervorname:=wert(fnrsurufnames);
kenndatum[schuelerzahl][1]:=schuelername;kenndatum[schuelerzahl][2]:=
schuelervorname;kenndatum[schuelerzahl][3]:=datumrekonversion(wert(
fnrsugebdatums));.END PROC namezeigen;PROC datenzeigen:BOOL VAR neuerstellen
:=FALSE ;zeigen;merken.zeigen:vorbereiten;alteklassezeigen;namezeigen;
halbjahresdatensuchen;versetzungsdatenzeigen.vorbereiten:schuelerzahlINCR 1;
TEXT VAR merkdaten:=niltext.alteklassezeigen:TEXT CONST alteklasse:=
jgstaufber(wert(fnrsusgrpjgst))+wert(fnrsusgrpzugtut);gruppenwechsel(
alteklasse,gwklasse,laengeklasse,1,aktuellesfeld).halbjahresdatensuchen:
inittupel(dnrhalbjahresdaten);#schluesselfuerhjdsetzen(dnrhalbjahresdaten,
kenndatum[schuelerzahl],schuljahr,schulhalbjahr,startkey1);search(
dnrhalbjahresdaten,TRUE );neuerstellen:=dbstatus<>ok##dr04.05.88#IF wert(
fnrsutidakthjd)<>niltext#neudr04.05.88#THEN disablestop;readtid(
dnrhalbjahresdaten,wert(fnrsutidakthjd));IF iserrorTHEN clearerror;
neuerstellen:=TRUE ELSE neuerstellen:=FALSE FI ;enablestopELSE neuerstellen:=
TRUE FI .versetzungsdatenzeigen:versetzunginmaske;feldfreigeben;
nachprfaecherinmaske;feldfreigeben.versetzunginmaske:TEXT VAR versetzungskz:=
niltext;IF NOT neuerstellenTHEN versetzungskz:=wert(fnrhjdversetzung);FI ;
merkdatenCAT versetzungskz;standardmaskenfeld(versetzungskz,aktuellesfeld).
nachprfaecherinmaske:TEXT VAR nachprfaecher:=niltext;IF NOT neuerstellenTHEN
nachprfaecher:=nachpruefungsfaecher;FI ;merkdatenCAT nachprfaecher;
standardmaskenfeld(nachprfaecher,aktuellesfeld).feldfreigeben:feldfrei(
aktuellesfeld);aktuellesfeldINCR 1.merken:altedaten(schuelerzahl):=merkdaten.
END PROC datenzeigen;TEXT PROC nachpruefungsfaecher:TEXT VAR nfaecher:=
niltext;INT VAR fachind;FOR fachindFROM 0UPTO maxfach-1REP IF wert(
fnrhjdnachfach1+fachind)=niltextTHEN nfaecherCAT (laengefach*unterstrich)
ELSE nfaecherCAT text(wert(fnrhjdnachfach1+fachind),laengefach);FI PER ;
nfaecherEND PROC nachpruefungsfaecher;PROC feldloeschen(INT CONST laenge):
standardmaskenfeld(laenge*blank,aktuellesfeld)END PROC feldloeschen;BOOL
PROC pruefungspeziell(INT CONST wasistzutun):BOOL VAR b:=FALSE ;SELECT
wasistzutunOF CASE allespruefen:pruefungalleklassen(b)CASE einejgstpruefen:
pruefungeinejgst(b)CASE eineklassepruefen:pruefungeineklasse(b)END SELECT ;b
END PROC pruefungspeziell;PROC pruefungalleklassen(BOOL VAR bool):bool:=(wert
(fnrsustatuss)=laufbestand)END PROC pruefungalleklassen;PROC pruefungeinejgst
(BOOL VAR bool):bool:=(wert(fnrsustatuss)=laufbestandCAND jgstaufber(wert(
fnrsusgrpjgst))=startkey1)END PROC pruefungeinejgst;PROC pruefungeineklasse(
BOOL VAR bool):bool:=(wert(fnrsustatuss)=laufbestandCAND jgstaufber(wert(
fnrsusgrpjgst))=startkey1CAND wert(fnrsusgrpzugtut)=startkey2)END PROC
pruefungeineklasse;PROC neueshjdtidinschuelerdateieintragen(INT CONST nr):IF
standardmaskenfeld(nr)<>versetzungszeichenTHEN inittupel(dnrschueler);putwert
(fnrsufamnames,wert(fnrhjdfamnames));putwert(fnrsurufnames,wert(
fnrhjdrufnames));putwert(fnrsugebdatums,wert(fnrhjdgebdats));search(
dnrschueler,TRUE );IF dbstatus=okTHEN schuelertid:=gettid;putwert(
fnrsutidakthjd,hjdtid);replace(dnrschueler,schuelertid)FI FI END PROC
neueshjdtidinschuelerdateieintragen;BOOL PROC fachungueltig(TEXT CONST objekt
):pos(fachkatalog,trenner+objekt+trenner)=0END PROC fachungueltig;PROC
fachcat(BOOL VAR b):fachkatalogCAT wert(dnrfaecher+1)+trenner;END PROC
fachcat;PROC holeaktuellenfachkatalog:fachkatalog:=trenner;statleseschleife(
dnrfaecher,"","",dnrfaecher+1,dnrfaecher+1,PROC fachcat);END PROC
holeaktuellenfachkatalog;#dr10.05.88PROC eventuellinstatwuerfelaendern(INT
CONST nummer):IF standardmaskenfeld(nummer)<>versetzungszeichenTHEN
kuerzelsummeeinsrunter(statnrversetzung,jgstaufber(gueltigejgst),compress(
gueltigerzug),compress(laufbestand),compress(versetzungszeichen));
kuerzelsummeeinsrauf(statnrversetzung,jgstaufber(gueltigejgst),compress(
gueltigerzug),compress(laufbestand),compress(standardmaskenfeld(nummer)));FI
END PROC eventuellinstatwuerfelaendern;#END PACKET listenweiseergverskonf
|