summaryrefslogtreecommitdiff
path: root/app/schulis/2.2.1/src/1.listenweise erg vers konf
blob: 83ce515be6370cbbfe98dd01b68925029fc033fc (plain)
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