summaryrefslogtreecommitdiff
path: root/app/schulis/2.2.1/src/2.schueler zu kursen zuordnen
blob: 32187e490f533c8828470d89a042705da51dfd33 (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
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
PACKET schuelerzukursenzuordnenDEFINES schuelerkursenzuordnenabbruch,
schuelerkursenzuordnenanfang,schuelerkursenzuordnenpruefuebernahme,
schuelerkursenzuordnenuebernahme,schuelerkursenzuordnenpruefung,
schuelerkursenzuordnenspeichern,schuelerkursenzuordnenkopieren,
schuelerkursenzuordnenlisten:LET server="kurswahl server",kuwa2sperre=
"Kurswahl-2 ",anzschuelerbs=15,laengefakeartkl=9,laengekurs=6,laengedseintrag
=15,az="#",trenner1="$",trenner2="�",maskeeingang=
"ms schueler zu kursen zuordnen eingang",maskebearb=
"ms schueler zu kursen zuordnen bearb",stdzeigbloecke=
"1  2  3  4  5  6  7  8  9  10 11 ",leerewahldaten="                      ",
leereweiterewahldaten="    ",kzname="N",kzkurse="K",kznurneue="N",kzohneneue=
"O",kzalle="A",kennungplanbl="P",kennungfapl="FP",kennungfaartkl="FAk",
kennungfakeartkl="FKAk",kennungfake="FK",kennungkeinkurs=" -  ",
kennungkeinfach=" *  ",meldungbearbwird=352,meldungfeldleeren=390,
meldungunbeklv=360,meldungfeldfuellen=52,meldungschonkurs=424,
meldungbittewarten=69,meldungfalscherwert=55,meldungspeicherfehler=364,
meldungjgstfalsch=404,meldungjgstfehlt=172,meldunghjfalsch=405,meldungpruefen
=329,meldungspeichern=50,meldungnspeichern=63,meldungandereauswahl=318,
meldungunzulauswahl=56,meldungserverfehler=376,meldunglistezeigen=7,
meldungparallelanw=425,meldungkeinedaten=68,meldungkeinekopfunktion=318,
logtext1="Anw. 2.2.2 ",logtext2=" für akt. ",text1="Kurszuordnung ",text2=
"Kurse übernehmen ",text3=" nach ",punkt=".",felderstername=7,
felderstekennung=9,feldletztekennung=65,anzfeldereingang=36;INT VAR i,j,z;
INT VAR letztepos:=2,ijgst,ihj,fstat,aktpos:=1,aktfeld,pos1,pos2,blockpos,
suchab,jgst1,jgst2,findpos,feld,blpos,kopzeile,aktzeile,anfpos,anzkurse,
anzsch,endpos,anzschueler,fapos,saktpos,ssuchab;TEXT VAR aktjgst,akthj:="",
gewjgst,gewhj,zusjgst,zushj,gewsj,alleplblbez,alleschueler1:="",alleschueler2
:="",wahl,neuewahldaten,weiterewahldaten,wahldaten,alleschueler:="",
zeigbloecke,fach:="",art:="",kennungdesschuelers,name,kennungjetzt,
kennungvorher,planbloecke,aktfeldinh,t,nname,vname,gdat,ausgabe:="",block,
vorz,blockbez,aktkennung,liste:="",kurse,kurs,kennung,kursliste,fakennung,
fawahl,sname,logmeldung,klkz,klwahl;ROW anzfeldereingangTEXT VAR eingangrow;
ROW anzschuelerbsROW 4TEXT VAR schueler;BOOL VAR zusspaltezeigen:=FALSE ,
belegungpruefen:=FALSE ,sperreok,speicherungsfehler:=FALSE ,bewertung,
klausurkz:=FALSE ;WINDOW VAR w;PROC schuelerkursenzuordnenpruefuebernahme:IF 
menuedraussenTHEN reorganizescreenFI END PROC 
schuelerkursenzuordnenpruefuebernahme;PROC schuelerkursenzuordnenuebernahme(
BOOL CONST uebernehmen):merkeeingangbs;IF uebernehmenTHEN standardmeldung(
meldungbittewarten,"");aktpos:=1;gewjgst:=eingangrow(2);gewhj:=eingangrow(3);
ijgst:=int(gewjgst);ihj:=int(gewhj);zusjgst:=eingangrow(35);zushj:=eingangrow
(36);IF akthj=""THEN akthj:=schulkenndatum("Schulhalbjahr")FI ;prueffeld2und3
;prueffeld4;prueffeld5;prueffeld634;prueffeld3536;datenholen;
betrachtealleschueler;logmeldung:=text2;logmeldungCAT zusjgst;logmeldungCAT 
punkt;logmeldungCAT zushj;logmeldungCAT text3;logmeldungCAT gewjgst;
logmeldungCAT punkt;logmeldungCAT gewhj;logbucheintragvornehmen(logmeldung);
kurswahlsperrebeenden(kuwa2sperre)FI ;enter(2).prueffeld2und3:IF gewjgst=""
THEN fehlermeldungausgeben(2,meldungjgstfehlt,1);LEAVE 
schuelerkursenzuordnenuebernahmeELIF gewhj=""THEN fehlermeldungausgeben(2,
meldunghjfalsch,1);LEAVE schuelerkursenzuordnenuebernahmeELIF jgstfalsch(
gewjgst,"11")THEN fehlermeldungausgeben(2,meldungjgstfalsch,1);LEAVE 
schuelerkursenzuordnenuebernahmeELIF ihj<1COR ihj>2THEN fehlermeldungausgeben
(3,meldunghjfalsch,1);LEAVE schuelerkursenzuordnenuebernahmeFI .prueffeld4:
aktfeldinh:=eingangrow(4);IF aktfeldinh=""THEN IF eingangrow(5)=""THEN 
fehlermeldungausgeben(4,meldungandereauswahl,1);LEAVE 
schuelerkursenzuordnenuebernahmeELSE LEAVE prueffeld4FI ELIF jgstfalsch(
gewjgst,aktfeldinh)THEN fehlermeldungausgeben(4,meldungunzulauswahl,1);LEAVE 
schuelerkursenzuordnenuebernahmeELIF int(aktfeldinh)=ijgstTHEN pruefhjELIF 
aktfeldinh="10"CAND akthj="1"THEN fehlermeldungausgeben(4,
meldungandereauswahl,1);LEAVE schuelerkursenzuordnenuebernahmeFI .pruefhj:IF 
gewhj="1"CAND akthj="2"THEN fehlermeldungausgeben(3,meldungandereauswahl,1);
LEAVE schuelerkursenzuordnenuebernahmeFI .prueffeld5:aktfeldinh:=eingangrow(5
);IF aktfeldinh=""THEN LEAVE prueffeld5ELIF aktfeldinh<>""CAND eingangrow(4)
<>""THEN IF int(aktfeldinh)<>int(eingangrow(4))+1THEN fehlermeldungausgeben(5
,meldungunzulauswahl,1);LEAVE schuelerkursenzuordnenuebernahmeFI ELIF int(
aktfeldinh)>ijgstTHEN fehlermeldungausgeben(5,meldungunzulauswahl,1);LEAVE 
schuelerkursenzuordnenuebernahmeFI .prueffeld634:FOR iFROM 6UPTO 34REP IF 
standardmaskenfeld(i)<>""THEN fehlermeldungausgeben(i,meldungfeldleeren,1);
LEAVE schuelerkursenzuordnenuebernahmeFI PER .prueffeld3536:zusjgst:=
eingangrow(35);zushj:=eingangrow(36);IF zusjgst=""THEN fehlermeldungausgeben(
35,meldungjgstfehlt,1);LEAVE schuelerkursenzuordnenuebernahmeELIF zushj=""
THEN fehlermeldungausgeben(36,meldunghjfalsch,1);LEAVE 
schuelerkursenzuordnenuebernahmeELIF zusjgst=gewjgstCAND zushj=gewhjTHEN 
fehlermeldungausgeben(35,meldungandereauswahl,1);LEAVE 
schuelerkursenzuordnenuebernahmeELIF jgstfalsch(zusjgst,"11")THEN 
fehlermeldungausgeben(35,meldungjgstfalsch,1);LEAVE 
schuelerkursenzuordnenuebernahmeELIF zushj<>"1"CAND zushj<>"2"THEN 
fehlermeldungausgeben(36,meldunghjfalsch,1);LEAVE 
schuelerkursenzuordnenuebernahmeFI .datenholen:IF NOT exists(/server)THEN 
fehlermeldungausgeben(letztepos,meldungserverfehler,1);LEAVE 
schuelerkursenzuordnenuebernahmeFI ;IF eingangrow(4)=""THEN t:=kznurneue;
aktjgst:=text(int(eingangrow(5))-1)ELIF eingangrow(5)=""THEN t:=kzohneneue;
aktjgst:=eingangrow(4)ELSE t:=kzalle;aktjgst:=eingangrow(4)FI ;
kurswahlinitialisieren(aktjgst,gewjgst,gewhj,t,gewsj);kurswahlbasisholen(
fstat);erweitertekurswahlbasisholen(zusjgst,zushj,fstat);kurswahlsperresetzen
(kuwa2sperre,sperreok);IF NOT sperreokTHEN fehlermeldungausgeben(infeld,
meldungparallelanw,1);LEAVE schuelerkursenzuordnenuebernahmeFI .
betrachtealleschueler:FOR iFROM ersterschuelerUPTO letzterschuelerREP 
wahldaten:=wahldatenzumindex(i,kzkurse);name:=wahldatenzumindex(i,kzname);
pos1:=pos(name,trenner2,1)-1;pos2:=pos(name,trenner2,pos1+2)-1;nname:=subtext
(name,1,pos1);vname:=subtext(name,pos1+2,pos2);gdat:=subtext(name,pos2+2,pos2
+9);standardmeldung(meldungbearbwird,vname+" "+nname+az);weiterewahldaten:=
weiterewahldatenzumschueler(nname,vname,gdat,kennungfakeartkl);
betrachtekennungen;kurswahl2sichern(fstat)PER .betrachtekennungen:pos1:=1;
neuewahldaten:="";WHILE pos1<length(wahldaten)REP wahl:=subtext(wahldaten,
pos1,pos1+laengedseintrag-1);kennungjetzt:=subtext(wahl,6,9);fach:=subtext(
wahl,4,5);art:=subtext(wahl,2,3);kennungvorher:=kennungvonfach(TRUE );IF 
kennungjetzt<>kennungvorherTHEN planbloecke:=kursdaten(fach+kennungvorher,
kennungplanbl);IF dbstatus=0THEN neuewahldatenCAT text(wahl,1);neuewahldaten
CAT art;neuewahldatenCAT fach;neuewahldatenCAT kennungvorher;neuewahldaten
CAT planbloeckeELSE neuewahldatenCAT wahlFI ELSE neuewahldatenCAT wahlFI ;
pos1INCR laengedseintragPER ;IF wahldaten<>neuewahldatenTHEN 
schuelerwahleintragen(nname,vname,gdat,neuewahldaten)FI .END PROC 
schuelerkursenzuordnenuebernahme;PROC schuelerkursenzuordnenanfang:
standardstartproc(maskeeingang);gibeingangaus;standardfelderausgeben;infeld(
letztepos);standardnproc.gibeingangaus:FOR iFROM 2UPTO anzfeldereingangREP 
standardmaskenfeld(eingangrow(i),i);IF eingangrow(i)<>""THEN letztepos:=iFI 
PER .END PROC schuelerkursenzuordnenanfang;PROC 
schuelerkursenzuordnenpruefung:standardmeldung(meldungbittewarten,"");
merkeeingangbs;aktpos:=1;gewjgst:=eingangrow(2);gewhj:=eingangrow(3);ijgst:=
int(gewjgst);ihj:=int(gewhj);IF akthj=""THEN akthj:=schulkenndatum(
"Schulhalbjahr")FI ;prueffeld2und3;prueffeld4;prueffeld5;prueffeld6und7;
prueffeld8bis13;prueffeld3536;datenholen;betrachtebelegung;
planblockbezpruefen;schueleraufzeigen.betrachtebelegung:FOR iFROM 14UPTO 23
REP IF eingangrow(i)<>""THEN planblockvorzpruefen;planblockbez15bis23pruefen;
belegungpruefen:=TRUE ;LEAVE betrachtebelegungFI ;PER ;belegungpruefen:=
FALSE .prueffeld2und3:IF gewjgst=""THEN fehlermeldungausgeben(2,
meldungjgstfehlt,1);LEAVE schuelerkursenzuordnenpruefungELIF gewhj=""THEN 
fehlermeldungausgeben(2,meldunghjfalsch,1);LEAVE 
schuelerkursenzuordnenpruefungELIF jgstfalsch(gewjgst,"11")THEN 
fehlermeldungausgeben(2,meldungjgstfalsch,1);LEAVE 
schuelerkursenzuordnenpruefungELIF ihj<1COR ihj>2THEN fehlermeldungausgeben(3
,meldunghjfalsch,1);LEAVE schuelerkursenzuordnenpruefungFI .prueffeld4:
aktfeldinh:=eingangrow(4);IF aktfeldinh=""THEN IF eingangrow(5)=""THEN 
fehlermeldungausgeben(4,meldungandereauswahl,1);LEAVE 
schuelerkursenzuordnenpruefungELSE LEAVE prueffeld4FI ELIF jgstfalsch(gewjgst
,aktfeldinh)THEN fehlermeldungausgeben(4,meldungunzulauswahl,1);LEAVE 
schuelerkursenzuordnenpruefungELIF int(aktfeldinh)=ijgstTHEN pruefhjELIF 
aktfeldinh="10"CAND akthj="1"THEN fehlermeldungausgeben(4,
meldungandereauswahl,1);LEAVE schuelerkursenzuordnenpruefungFI .pruefhj:IF 
gewhj="1"CAND akthj="2"THEN fehlermeldungausgeben(3,meldungandereauswahl,1);
LEAVE schuelerkursenzuordnenpruefungFI .prueffeld5:aktfeldinh:=eingangrow(5);
IF aktfeldinh=""THEN LEAVE prueffeld5ELIF aktfeldinh<>""CAND eingangrow(4)<>
""THEN IF int(aktfeldinh)<>int(eingangrow(4))+1THEN fehlermeldungausgeben(5,
meldungunzulauswahl,1);LEAVE schuelerkursenzuordnenpruefungFI ELIF int(
aktfeldinh)>ijgstTHEN fehlermeldungausgeben(5,meldungunzulauswahl,1);LEAVE 
schuelerkursenzuordnenpruefungFI .prueffeld6und7:zusjgst:=eingangrow(6);zushj
:=eingangrow(7);IF zusjgst=""CAND zushj<>""THEN fehlermeldungausgeben(6,
meldungjgstfehlt,1);LEAVE schuelerkursenzuordnenpruefungELIF zushj=""CAND 
zusjgst<>""THEN fehlermeldungausgeben(7,meldunghjfalsch,1);LEAVE 
schuelerkursenzuordnenpruefungELIF zushj=""CAND zusjgst=""THEN 
zusspaltezeigen:=FALSE ELIF zusjgst=gewjgstCAND zushj=gewhjTHEN 
fehlermeldungausgeben(6,meldungandereauswahl,1);LEAVE 
schuelerkursenzuordnenpruefungELIF jgstfalsch(gewjgst,"11")THEN 
fehlermeldungausgeben(6,meldungjgstfalsch,1);LEAVE 
schuelerkursenzuordnenpruefungELIF ihj<1COR ihj>2THEN fehlermeldungausgeben(7
,meldunghjfalsch,1);LEAVE schuelerkursenzuordnenpruefungELIF jgstfalsch(
gewjgst,zusjgst)THEN fehlermeldungausgeben(6,meldungandereauswahl,1);LEAVE 
schuelerkursenzuordnenpruefungELSE zusspaltezeigen:=TRUE FI .prueffeld8bis13:
klkz:=compress(eingangrow(10));klausurkz:=klkz<>"";FOR iFROM 8UPTO 13REP IF 
eingangrow(i)<>""THEN LEAVE prueffeld8bis13FI PER ;fehlermeldungausgeben(8,
meldungfeldfuellen,1);LEAVE schuelerkursenzuordnenpruefung.prueffeld3536:IF 
eingangrow(35)<>""COR eingangrow(36)<>""THEN fehlermeldungausgeben(35,
meldungandereauswahl,1);LEAVE schuelerkursenzuordnenpruefungFI .
planblockvorzpruefen:IF planblockvorzfalsch(14)COR planblockvorzfalsch(16)
COR planblockvorzfalsch(18)COR planblockvorzfalsch(20)COR planblockvorzfalsch
(22)THEN kurswahlsperrebeenden(kuwa2sperre);LEAVE 
schuelerkursenzuordnenpruefungFI .datenholen:IF NOT exists(/server)THEN 
fehlermeldungausgeben(letztepos,meldungserverfehler,1);LEAVE 
schuelerkursenzuordnenpruefungFI ;IF eingangrow(4)=""THEN t:=kznurneue;
aktjgst:=text(int(eingangrow(5))-1)ELIF eingangrow(5)=""THEN t:=kzohneneue;
aktjgst:=eingangrow(4)ELSE t:=kzalle;aktjgst:=eingangrow(4)FI ;
kurswahlinitialisieren(aktjgst,gewjgst,gewhj,t,gewsj);kurswahlbasisholen(
fstat);IF zusspaltezeigenTHEN erweitertekurswahlbasisholen(zusjgst,zushj,
fstat);FI ;kurswahlsperresetzen(kuwa2sperre,sperreok);IF sperreokTHEN 
alleplblbez:=alleplanblockbezeichnerELSE fehlermeldungausgeben(infeld,
meldungparallelanw,1);LEAVE schuelerkursenzuordnenpruefungFI .
planblockbez15bis23pruefen:IF planblockbezfalsch(eingangrow(15))THEN 
fehlermeldungausgeben(15,meldungfalscherwert,1);kurswahlsperrebeenden(
kuwa2sperre);LEAVE schuelerkursenzuordnenpruefungELIF planblockbezfalsch(
eingangrow(17))THEN fehlermeldungausgeben(17,meldungfalscherwert,1);
kurswahlsperrebeenden(kuwa2sperre);LEAVE schuelerkursenzuordnenpruefungELIF 
planblockbezfalsch(eingangrow(19))THEN fehlermeldungausgeben(19,
meldungfalscherwert,1);kurswahlsperrebeenden(kuwa2sperre);LEAVE 
schuelerkursenzuordnenpruefungELIF planblockbezfalsch(eingangrow(21))THEN 
fehlermeldungausgeben(21,meldungfalscherwert,1);kurswahlsperrebeenden(
kuwa2sperre);LEAVE schuelerkursenzuordnenpruefungELIF planblockbezfalsch(
eingangrow(23))THEN fehlermeldungausgeben(23,meldungfalscherwert,1);
kurswahlsperrebeenden(kuwa2sperre);LEAVE schuelerkursenzuordnenpruefungFI .
planblockbezpruefen:zeigbloecke:="";FOR iFROM 24UPTO 34REP IF 
planblockbezfalsch(eingangrow(i))THEN fehlermeldungausgeben(i,
meldungfalscherwert,1);kurswahlsperrebeenden(kuwa2sperre);LEAVE 
schuelerkursenzuordnenpruefungFI ;IF eingangrow(i)<>""THEN zeigbloeckeCAT 
konvblock(eingangrow(i))FI ;PER .END PROC schuelerkursenzuordnenpruefung;
BOOL PROC planblockbezfalsch(TEXT CONST anwblock):suchab:=1;IF anwblock=""
THEN FALSE ELSE block:=text(anwblock,3);WHILE pos(alleplblbez,block,suchab)<>
0REP j:=pos(alleplblbez,block,suchab);IF jMOD 3=1THEN LEAVE 
planblockbezfalschWITH FALSE ELSE suchab:=j+1FI PER ;TRUE FI END PROC 
planblockbezfalsch;BOOL PROC planblockvorzfalsch(INT CONST feld):t:=(
eingangrow(feld)SUB 1);IF t<>""THEN IF eingangrow(feld+1)=""THEN 
fehlermeldungausgeben(feld+1,meldungfeldfuellen,1);TRUE ELIF NOT (t="-"COR t=
"+")THEN fehlermeldungausgeben(feld,meldungfalscherwert,1);TRUE ELSE FALSE 
FI ELIF eingangrow(feld+1)<>""THEN fehlermeldungausgeben(feld,
meldungfeldfuellen,1);TRUE ELSE FALSE FI END PROC planblockvorzfalsch;PROC 
fehlermeldungausgeben(INT CONST feld,meldung,ruecksprung):infeld(feld);
standardmeldung(meldung,"");return(ruecksprung)END PROC fehlermeldungausgeben
;BOOL PROC jgstfalsch(TEXT CONST jgst,abjgst):jgst1:=int(jgst);jgst2:=int(
abjgst);jgst1<jgst2COR jgst1>13END PROC jgstfalsch;PROC initbspuffer:FOR i
FROM 1UPTO anzschuelerbsREP schueler(i)(1):="";schueler(i)(2):="";schueler(i)
(3):="";schueler(i)(4):=""PER END PROC initbspuffer;PROC schueleraufzeigen:
fach:=text(eingangrow(8),2);art:=text(eingangrow(9),2);holschueler;IF 
alleschueler=""THEN meldungkeineschueler;kurswahlsperrebeenden(kuwa2sperre)
ELSE zeigbearbschirm;standardnprocFI .zeigbearbschirm:standardstartproc(
maskebearb);standardkopfmaskeaktualisieren("Kurszuordnung für jetzige Jgst. "
+aktjgst+" in "+gewjgst+"."+gewhj);ausgabe:=fach;ausgabeCAT art;ausgabeCAT 
text(eingangrow(10),1);IF eingangrow(11)<>""THEN ausgabeCAT "+";ausgabeCAT 
text(eingangrow(11),2);ausgabeCAT text(eingangrow(12),2);ausgabeCAT text(
eingangrow(13),1);ELSE ausgabeCAT "      "FI ;standardmaskenfeld(ausgabe,2);
ausgabe:=" ";ausgabeCAT text(eingangrow(14),1);ausgabeCAT konvblock(
eingangrow(15));ausgabeCAT text(eingangrow(16),1);ausgabeCAT konvblock(
eingangrow(17));ausgabeCAT text(eingangrow(18),1);ausgabeCAT konvblock(
eingangrow(19));ausgabeCAT text(eingangrow(20),1);ausgabeCAT konvblock(
eingangrow(21));ausgabeCAT text(eingangrow(22),1);ausgabeCAT konvblock(
eingangrow(23));standardmaskenfeld(ausgabe,3);IF zusspaltezeigenTHEN 
standardmaskenfeld(eingangrow(6)+"."+eingangrow(7),4);ELSE standardmaskenfeld
("    ",4);FI ;standardmaskenfeld(fach,5);IF zeigbloecke=""THEN zeigbloecke:=
stdzeigbloecke;standardmaskenfeld(stdzeigbloecke,6)ELSE standardmaskenfeld(
text(zeigbloecke,33),6)FI ;zeigschueler.meldungkeineschueler:
fehlermeldungausgeben(14,meldungkeinedaten,1).holschueler:alleschueler:="";
alleschueler1:=schuelermitwahl(fach,"",art,eingangrow(10));IF eingangrow(11)
<>""THEN alleschueler2:=schuelermitwahl(eingangrow(11),"",eingangrow(12),
eingangrow(13));schuelervergleichELSE alleschueler2:="";IF belegungpruefen
THEN pruefbelegungallerschuelerELSE alleschueler:=alleschueler1;anzschueler:=
anzahlschuelermitwahl(fach,"",art,eingangrow(10))FI ;FI .
pruefbelegungallerschueler:saktpos:=1;ssuchab:=2;alleschueler:="";anzschueler
:=0;WHILE saktpos<>0REP saktpos:=pos(alleschueler1,trenner1,ssuchab);IF 
saktpos<>0THEN sname:=subtext(alleschueler1,ssuchab,saktpos-1);IF 
richtigebelegung(sname)THEN alleschuelerCAT trenner1+sname;anzschuelerINCR 1
FI ;ssuchab:=saktpos+1FI PER ;sname:=subtext(alleschueler1,ssuchab);IF 
richtigebelegung(sname)THEN alleschuelerCAT trenner1+sname;anzschuelerINCR 1
FI .END PROC schueleraufzeigen;PROC zeigschueler:aktfeld:=felderstername;
initbspuffer;FOR iFROM 1UPTO anzschuelerbsREP wahldaten:="";weiterewahldaten
:="";kennungdesschuelers:="";standardmaskenfeld(schuelername,aktfeld);
standardmaskenfeld(text(wahldaten,22),aktfeld+3);standardmaskenfeld(
weiterewahldaten,aktfeld+1);IF kennungdesschuelers=leereweiterewahldatenTHEN 
standardmaskenfeld("",aktfeld+2)ELSE standardmaskenfeld(kennungdesschuelers,
aktfeld+2)FI ;aktfeldINCR 4PER ;infeld(1);standardfelderausgeben;infeld(9).
END PROC zeigschueler;TEXT PROC schuelername:findpos:=pos(alleschueler,
trenner1,aktpos+1);IF findpos>0THEN name:=subtext(alleschueler,aktpos+2,
findpos-1);aktpos:=findposELIF aktpos=length(alleschueler)THEN name:=""ELSE 
name:=subtext(alleschueler,aktpos+2);aktpos:=length(alleschueler)FI ;
bereitenameauf(name)END PROC schuelername;TEXT PROC bereitenameauf(TEXT 
CONST name):ausgabe:=name;change(ausgabe,trenner2,", ");ausgabe:=text(ausgabe
,pos(ausgabe,trenner2)-1);wahldatenaufbereiten(name);text(ausgabe,23)END 
PROC bereitenameauf;PROC wahldatenaufbereiten(TEXT CONST name):TEXT VAR 
zblock;IF name=""THEN wahldaten:=leerewahldaten;weiterewahldaten:=
leereweiterewahldatenELSE pos1:=pos(name,trenner2,1)-1;pos2:=pos(name,
trenner2,pos1+2)-1;nname:=subtext(name,1,pos1);vname:=subtext(name,pos1+2,
pos2);gdat:=subtext(name,pos2+2,pos2+9);kennungdesschuelers:=kennungvonfach(
FALSE );IF kennungdesschuelers=kennungkeinfachCOR kennungdesschuelers=
kennungkeinkursTHEN kennungdesschuelers:=""FI ;schueler(i)(1):=nname;schueler
(i)(2):=vname;schueler(i)(3):=gdat;schueler(i)(4):=kennungdesschuelers;
ermittlewahldaten;ermittleweiterewahldatenFI .ermittlewahldaten:wahl:=
wahldatenzumschueler(nname,vname,gdat,kennungfake);blockpos:=1;WHILE blockpos
<length(zeigbloecke)REP zblock:=subtext(zeigbloecke,blockpos,blockpos+2);IF 
schuelerinplanblock(nname,vname,gdat,zblock)THEN wahldatenCAT 
fachvomplanblock(zblock);ELSE wahldatenCAT "  "FI ;blockposINCR 3PER .
ermittleweiterewahldaten:IF zusspaltezeigenTHEN weiterewahldaten:=
kennungvonfach(TRUE )ELSE weiterewahldaten:=leereweiterewahldatenFI .END 
PROC wahldatenaufbereiten;TEXT PROC kennungvonfach(BOOL CONST inweiterendaten
):fapos:=1;fawahl:="";IF inweiterendatenTHEN fawahl:=
weiterewahldatenzumschueler(nname,vname,gdat,kennungfakeartkl)ELSE fawahl:=
wahldatenzumschueler(nname,vname,gdat,kennungfakeartkl)FI ;IF fawahl=""THEN 
leereweiterewahldatenELSE betrachteallefaecherFI .betrachteallefaecher:WHILE 
fapos<length(fawahl)REP IF subtext(fawahl,fapos,fapos+1)=fachCAND subtext(
fawahl,fapos+6,fapos+7)=artTHEN fakennung:=subtext(fawahl,fapos+2,fapos+5);
IF fakennung=leereweiterewahldatenTHEN LEAVE betrachteallefaecherWITH 
kennungkeinkursELSE LEAVE betrachteallefaecherWITH compress(fakennung)FI 
ELSE faposINCR laengefakeartklFI PER ;kennungkeinfach.END PROC kennungvonfach
;TEXT PROC fachvomplanblock(TEXT CONST block):TEXT VAR plbld:=planblockdaten(
block,kzkurse),k;blpos:=1;WHILE blpos<LENGTH wahlREP k:=subtext(wahl,blpos,
blpos+laengekurs-1);IF kurseingetragen(plbld,k)THEN LEAVE fachvomplanblock
WITH text(k,2)ELSE blposINCR laengekursFI PER ;"  "END PROC fachvomplanblock;
BOOL PROC kurseingetragen(TEXT CONST quelle,teilmuster):INT VAR suchab:=1,
aktpos;WHILE pos(quelle,teilmuster,suchab)<>0REP aktpos:=pos(quelle,
teilmuster,suchab);IF aktposMOD laengekurs=1THEN LEAVE kurseingetragenWITH 
TRUE ELSE suchab:=aktpos+1FI PER ;FALSE END PROC kurseingetragen;PROC 
schuelervergleich:saktpos:=1;ssuchab:=2;anzschueler:=0;WHILE saktpos<>0REP 
saktpos:=pos(alleschueler1,trenner1,ssuchab);IF saktpos<>0THEN sname:=subtext
(alleschueler1,ssuchab,saktpos-1);IF pos(alleschueler2,sname)>0THEN IF 
belegungpruefenTHEN IF richtigebelegung(sname)THEN alleschuelerCAT trenner1+
sname;anzschuelerINCR 1FI ELSE alleschuelerCAT trenner1+sname;anzschueler
INCR 1FI FI ;ssuchab:=saktpos+1FI PER ;sname:=subtext(alleschueler1,ssuchab);
IF pos(alleschueler2,sname)>0THEN IF belegungpruefenTHEN IF richtigebelegung(
sname)THEN alleschuelerCAT trenner1+sname;anzschuelerINCR 1FI ELSE 
alleschuelerCAT trenner1+sname;anzschuelerINCR 1FI FI .END PROC 
schuelervergleich;BOOL PROC richtigebelegung(TEXT CONST name):bewertung:=
TRUE ;pos1:=pos(name,trenner2,2)-1;pos2:=pos(name,trenner2,pos1+2)-1;nname:=
subtext(name,2,pos1);vname:=subtext(name,pos1+2,pos2);gdat:=subtext(name,pos2
+2,pos2+9);feld:=12;FOR iFROM 1UPTO 5REP feldINCR 2;vorz:=eingangrow(feld);
IF vorz<>""THEN blockbez:=eingangrow(feld+1);block:=konvblock(blockbez);IF 
vorz="-"THEN bewertung:=NOT schuelerinplanblock(nname,vname,gdat,block)ELSE 
bewertung:=schuelerinplanblock(nname,vname,gdat,block)FI ;IF NOT bewertung
THEN LEAVE richtigebelegungWITH FALSE FI FI ;PER ;bewertungEND PROC 
richtigebelegung;PROC schuelerkursenzuordnenspeichern(BOOL CONST speichern):
speicherungsfehler:=FALSE ;IF speichernTHEN pruefkennungen;speicherkennungen;
logmeldung:=text1;logmeldungCAT gewjgst;logmeldungCAT punkt;logmeldungCAT 
gewhj;logbucheintragvornehmen(logmeldung);kurswahl2sichern(i);ELSE 
standardmeldung(meldungnspeichern," ")FI ;naechsterbildschirm.pruefkennungen:
standardmeldung(meldungpruefen," ");j:=felderstekennung;FOR iFROM 1UPTO 
anzschuelerbsREP kennung:=standardmaskenfeld(j);infeld(j);IF kennung<>""THEN 
IF schueler(i)(1)=""THEN fehlermeldungkeinschuelerFI ;planbloecke:=compress(
kursdaten(fach+kennung,kennungplanbl));IF dbstatus<>0THEN 
fehlermeldungunbekkennungELIF planbloecke<>""CAND kennung<>schueler(i)(4)
THEN pruefplanbloeckeFI FI ;jINCR 4PER .pruefplanbloecke:prueferstenblock;IF 
length(planbloecke)>3THEN pruefzweitenblockFI .prueferstenblock:IF 
schuelerinplanblock(schueler(i)(1),schueler(i)(2),schueler(i)(3),text(
planbloecke,3))THEN fehlermeldungschonkursblock1FI .pruefzweitenblock:IF 
schuelerinplanblock(schueler(i)(1),schueler(i)(2),schueler(i)(3),subtext(
planbloecke,4))THEN fehlermeldungschonkursblock2FI .
fehlermeldungschonkursblock1:infeld((i-1)*4+9);standardmeldung(
meldungschonkurs,text(planbloecke,3)+az);return(1);LEAVE 
schuelerkursenzuordnenspeichern.fehlermeldungschonkursblock2:infeld((i-1)*4+9
);standardmeldung(meldungschonkurs,subtext(planbloecke,4)+az);return(1);
LEAVE schuelerkursenzuordnenspeichern.fehlermeldungkeinschueler:
fehlermeldungausgeben((i-1)*4+9,meldungfeldleeren,1);LEAVE 
schuelerkursenzuordnenspeichern.fehlermeldungunbekkennung:infeld((i-1)*4+9);
standardmeldung(meldungunbeklv,fach+kennung+az);return(1);LEAVE 
schuelerkursenzuordnenspeichern.speicherkennungen:standardmeldung(
meldungspeichern," ");j:=felderstekennung;FOR iFROM 1UPTO anzschuelerbsREP 
kennung:=standardmaskenfeld(j);infeld(j);IF kennung<>schueler(i)(4)THEN IF 
NOT klausurkzTHEN ermittleklkennzFI ;schuelerwahlaendern(schueler(i)(1),
schueler(i)(2),schueler(i)(3),fach,schueler(i)(4),art,fach,kennung,art,klkz);
IF dbstatus<>0THEN speicherungsfehler:=TRUE FI ;FI ;jINCR 4PER ;IF 
speicherungsfehlerTHEN kurswahlserveraktualisieren(aktjgst,gewjgst,gewhj)FI .
naechsterbildschirm:kurswahl0holen(fstat);kurswahl1holen(fstat);IF aktpos<
length(alleschueler)CAND NOT speicherungsfehlerTHEN zeigschueler;return(1);
IF speicherungsfehlerTHEN standardmeldung(meldungspeicherfehler,"");FI ELSE 
kurswahlsperrebeenden(kuwa2sperre);enter(2);IF speicherungsfehlerTHEN 
standardmeldung(meldungspeicherfehler,"");infeld(letztepos)FI FI .END PROC 
schuelerkursenzuordnenspeichern;PROC ermittleklkennz:klwahl:=
wahldatenzumschueler(schueler(i)(1),schueler(i)(2),schueler(i)(3),
kennungfaartkl);z:=1;WHILE z<LENGTH (klwahl)REP IF subtext(klwahl,z,z+3)=fach
+artTHEN klkz:=klwahlSUB z+4;LEAVE ermittleklkennzELSE zINCR 5FI PER ;klkz:=
""END PROC ermittleklkennz;PROC schuelerkursenzuordnenabbruch:
kurswahlsperrebeenden(kuwa2sperre);enter(2)END PROC 
schuelerkursenzuordnenabbruch;PROC schuelerkursenzuordnenkopieren:kopzeile:=
infeld;aktzeile:=kopzeile+4;aktkennung:=standardmaskenfeld(kopzeile);IF 
kopzeile=feldletztekennungTHEN fehlermeldungkeinkopELSE WHILE aktzeile<=
feldletztekennungCAND schueler((aktzeile-5)DIV 4)(1)<>""REP 
standardmaskenfeld(aktkennung,aktzeile);aktzeileINCR 4PER ;infeld(kopzeile+4)
;standardfelderausgeben;infeld(kopzeile+4);FI ;return(1).fehlermeldungkeinkop
:standardmeldung(meldungkeinekopfunktion,"").END PROC 
schuelerkursenzuordnenkopieren;PROC schuelerkursenzuordnenlisten:kursliste:=
"";aktfeld:=infeld;w:=startwindow(35,23,77,1);liste:="";standardmeldung(
meldunglistezeigen,"");IF menuedraussenTHEN reorganizescreenFI ;fuelleliste;
infeld(1);standardfelderausgeben;open(w);auskunfterteilung(liste,w,FALSE );
reorganizescreen;setlasteditvalues;infeld(aktfeld);return(1).fuelleliste:
listeCAT "Anzahl Schüler wie ausgewählt";listeCAT auskunftstextende;listeCAT 
text(anzschueler);listeCAT auskunftstextende;listeCAT " ";listeCAT 
auskunftstextende;listeCAT "Fach     gewählt     Kurszahl/-größe";listeCAT 
auskunftstextende;listeCAT fach;listeCAT " ";listeCAT art;listeCAT "     ";
listeCAT gewaehlteschueler;listeCAT "     ";listeCAT anzahlkurse;listeCAT 
kursgroesse;listeCAT auskunftstextende;listeCAT " ";listeCAT 
auskunftstextende;listeCAT "Kurse    Planblock   Schüler";listeCAT 
auskunftstextende;listeallerkurse.listeallerkurse:anfpos:=1;WHILE anfpos<
length(kursliste)REP listeCAT fach+" ";kennung:=subtext(kursliste,anfpos,
anfpos+3);listeCAT kennung;listeCAT "  ";kurs:=kursdaten(fach+kennung,
kennungplanbl);IF kurs=""THEN listeCAT "            "ELSE listeCAT text(int(
text(kurs,3)),2);listeCAT "  ";listeCAT text(int(subtext(kurs,4)),2);liste
CAT "      ";FI ;listeCAT text(anzahlschuelermitwahl(fach,kennung,"",""));
listeCAT auskunftstextende;anfposINCR 4PER .gewaehlteschueler:anzsch:=
anzahlschuelermitwahl(fach,"",art,"");text(text(anzsch),6).kursgroesse:text(
anzschDIV anzkurse).anzahlkurse:kurse:=allekurse;suchanfang;suchende;IF 
anfpos=0THEN "0        "ELSE kurse:=subtext(kurse,anfpos,endpos);
betrachtekurse;text(text(anzkurse),10)FI .betrachtekurse:anzkurse:=0;anfpos:=
1;kursliste:="";WHILE anfpos<length(kurse)REP IF subtext(kurse,anfpos,anfpos+
1)=fachCAND subtext(kurse,anfpos+8,anfpos+9)=artTHEN anzkurseINCR 1;kursliste
CAT subtext(kurse,anfpos+2,anfpos+5);FI ;anfposINCR 10PER .suchanfang:anfpos
:=pos(kurse,fach,1);WHILE anfpos<>0REP IF (anfposMOD 10)=1CAND subtext(kurse,
anfpos+8,anfpos+9)=artTHEN LEAVE suchanfangELSE anfpos:=pos(kurse,fach,anfpos
+1)FI ;PER .suchende:findpos:=pos(kurse,fach,anfpos+1);IF anfpos<>0THEN 
endpos:=anfpos+9;WHILE findpos<>0REP IF (findposMOD 10)=1CAND subtext(kurse,
findpos+8,findpos+9)=artTHEN endpos:=findpos+9FI ;findpos:=pos(kurse,fach,
findpos+1)PER ;ELSE endpos:=0FI .END PROC schuelerkursenzuordnenlisten;TEXT 
PROC konvblock(TEXT CONST blockbez):INT VAR block;IF blockbez<>""THEN block:=
int(text(blockbez,2));IF block<10THEN "0"+text(block)+text(blockbezSUB 3,1)
ELSE text(block)+text(blockbezSUB 3,1)FI ELSE "   "FI END PROC konvblock;
PROC initrow:FOR iFROM 2UPTO anzfeldereingangREP eingangrow(i):=""PER END 
PROC initrow;PROC merkeeingangbs:FOR iFROM 2UPTO anzfeldereingangREP 
eingangrow(i):=standardmaskenfeld(i)PER .END PROC merkeeingangbs;PROC 
logbucheintragvornehmen(TEXT CONST escfunktion):logeintrag(logtext1+
escfunktion+logtext2+aktjgst)END PROC logbucheintragvornehmen;initrow;END 
PACKET schuelerzukursenzuordnen;