summaryrefslogtreecommitdiff
path: root/app/schulis/2.2.1/src/2.kurszuordnung und umwahl fuer einzelne schueler sek2
blob: 2c44f7d5e26f8bc82a1bd7554e0a62d8a4ea282f (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
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
PACKET kurszuordnungundumwahlfuereinzelneschuelersek2DEFINES 
kurszuordnungundumwahlsek2anfang,kurszuordnungundumwahlbearbeiten,
kurszuordnungundumwahlspeichern,kurszuordnungundumwahlkurselisten,
kurszuordnungundumwahlkopieren,kurszuordnungundumwahlrechtehaelfte,
kurszuordnungundumwahllinkehaelfte,kurszuordnungundumwahlvorwaerts,
kurszuordnungundumwahlrueckwaerts,kurszuordnungundumwahlbeenden,
kurszuordnungundumwahllistezeigen,kurszuordnungundumwahllisteblaettern,
kurszuordnungundumwahllistebearbeiten,kurszuordnungundumwahllistebeenden:LET 
artbestand="c02 art lehrveranstaltung",abiklbestand="c02 abitur klausur",
kuwa2sperre="Kurswahl-2 ",eingangsmaske=
"ms kurszuordnung und umwahl sek2 eingang",bearbmaske=
"ms kurszuordnung und umwahl sek2 bearb",listenmaske="mu objektliste",
schuljahr="Schuljahr",halbjahr="Schulhalbjahr",laengefake=6,laengefakeartkl=9
,laengevname=15,laengeplbleinesbs=36,laengekurseeinesbs=42,laengefamname=30,
laengegebdat=8,laengename=53,einganggewjgst=2,einganggewhj=3,eingangaktjgst=4
,eingangaktneue=5,eingangfamname=6,eingangrufname=7,eingangdatum=8,bearbname=
2,bearbfaecher=3,bearbkurse=42,meldungwarten=69,meldungpraezisieren=129,
meldungpruefen=329,meldungspeichern=50,meldungnspeichern=63,
meldungfeldfuellen=52,meldungfalschejgst=404,meldungfalscheshj=405,
meldungandereauswahl=318,meldunglistezeigen=7,meldungkeineschueler=423,
meldungserverfehler=416,meldungkeinblaettern=72,meldungfalschesfach=310,
meldungfalscheart=311,meldungunbeklv=360,meldungblockschnitt=424,
meldungspfehler=419,meldungparallelanw=425,meldungfalscheartzk=434,
meldungunbekannt=126,trenner="�",leerespraefix="         ",leererblock="   ",
leerebloecke="      ",ausgzeichen="#",namenstrenner=", ",kzdoppeltbelegt=
"  *   ",kzfaecher="F",kznurneue="N",kzname="N",kzohneneue="O",kzkurse="K",
kzalle="A",kzart="A",kzstd="S",kzplbl="P",kzfaplbl="FP",kzfakeartkl="FKAk",
logtext1="Anw. 2.3.1 Umwahl ",text1=" """,text2=""" ",punkt=".",komma=", ",
ersteslistenfeld=2,erstesfachfeld=3,ersteskursfeld=42,anzbearbeingfelder=13,
anzlistenfelder=18,anzbearbzeilen=12,anzfeldereingang=8;TEXT VAR gewsj,aktsj
:="0000",akthj,gewjgst,gewhj,aktjgst,aktneue,aktwahl,aktname,aktvname,
aktgebdatum,aktfaecher,aktartkl,aktkurse,aktschueler,schuelergruppe,
schuelerliste,aktblock,alleplanbloecke:="",faecherbloecke,wahldaten,fach,art,
klausur,kennung,fehlerblock,allearten:=trenner,allefaecher:=trenner,block12,
block1,block2,alleklausurbez:="",praefix,kurse,pruefbloecke:=trenner,
logmeldung;INT VAR i,j,letztepos:=2,fstat:=0,aktlistennr,fachfeld:=
erstesfachfeld,artfeld:=16,klfeld:=17,kursfeld:=ersteskursfeld,aktplblindex:=
1,anfpos,aktbsseite:=1,letztesfeld,listenpos:=1,aktindex,ersterindex:=
ersterschueler;ROW anzbearbeingfelderROW 4TEXT VAR bearbrow;ROW 
anzfeldereingangTEXT VAR eingangrow;ROW anzlistenfelderTEXT VAR aktliste;
BOOL VAR listenbearbeitung:=FALSE ,rechtsscrollen:=FALSE ,sperreok,
kopierfunktion:=FALSE ,scrollen:=FALSE ;WINDOW VAR w;initroweingang;
initrowbearb;PROC initroweingang:FOR iFROM 2UPTO anzfeldereingangREP 
eingangrow(i):=""PER ;END PROC initroweingang;PROC initrowbearb:INT VAR i;
FOR iFROM 1UPTO anzbearbeingfelderREP bearbrow(i):=ROW 4TEXT :("","","","")
PER ;END PROC initrowbearb;PROC kurszuordnungundumwahlsek2anfang:aktplblindex
:=1;standardstartproc(eingangsmaske);gibeingangaus;infeld(1);
standardfelderausgeben;infeld(letztepos);standardnproc.gibeingangaus:FOR i
FROM 2UPTO anzfeldereingangREP standardmaskenfeld(eingangrow(i),i);IF 
eingangrow(i)<>""THEN letztepos:=iFI PER .END PROC 
kurszuordnungundumwahlsek2anfang;PROC kurszuordnungundumwahlbearbeiten:
listenbearbeitung:=FALSE ;kopierfunktion:=FALSE ;schuelerliste:="";
standardmeldung(meldungwarten,"");merkeeingang;aktname:=eingangrow(
eingangfamname);aktvname:=eingangrow(eingangrufname);aktgebdatum:=konvdatum(
eingangrow(eingangdatum));prueffeld2bis5;IF fstat<>0THEN LEAVE 
kurszuordnungundumwahlbearbeitenFI ;kurswahlinitialisieren(aktjgst,gewjgst,
gewhj,schuelergruppe,gewsj);kurswahlbasisholen(fstat);IF fstat<>0THEN 
meldungausgeben(meldungserverfehler,einganggewjgst,1);LEAVE 
kurszuordnungundumwahlbearbeitenELIF letzterschueler<ersterschuelerTHEN 
meldungausgeben(meldungkeineschueler,einganggewjgst,1);LEAVE 
kurszuordnungundumwahlbearbeitenFI ;kurswahlsperresetzen(kuwa2sperre,sperreok
);IF NOT sperreokTHEN meldungausgeben(meldungparallelanw,einganggewjgst,1);
LEAVE kurszuordnungundumwahlbearbeitenFI ;prueffeld6bis8;standardstartproc(
bearbmaske);standardkopfmaskeaktualisieren("Kurszuordnung für jetzige Jgst. "
+aktjgst+" in "+gewjgst+"."+gewhj);aktbsseite:=1;aktplblindex:=1;
schuelerbearbeiten;standardnproc.prueffeld6bis8:FOR iFROM eingangfamnameUPTO 
eingangdatumREP IF standardmaskenfeld(i)=""THEN meldungausgeben(
meldungfeldfuellen,i,1);kurswahlsperrebeenden(kuwa2sperre);LEAVE 
kurszuordnungundumwahlbearbeitenFI PER ;pruefexistschueler.pruefexistschueler
:aktfaecher:=wahldatenzumschueler(aktname,aktvname,aktgebdatum,kzfaecher);IF 
dbstatus<>0THEN meldungausgeben(meldungunbekannt,eingangfamname,1);
kurswahlsperrebeenden(kuwa2sperre);LEAVE kurszuordnungundumwahlbearbeitenFI .
END PROC kurszuordnungundumwahlbearbeiten;PROC schuelerbearbeiten:INT VAR 
kurspos,rowindex:=1;aktschueler:=aktname+namenstrenner+aktvname+namenstrenner
+aktgebdatum;initrowbearb;ermittlefaecherartklkurse;standardmaskenfeld(text(
aktschueler,laengename),bearbname);zeigplanblockkurszuordnung.
ermittlefaecherartklkurse:fachfeld:=erstesfachfeld;artfeld:=16;klfeld:=17;
kursfeld:=ersteskursfeld;kurspos:=1;aktfaecher:="";aktartkl:="";aktkurse:="";
rowindex:=1;aktwahl:=wahldatenzumschueler(aktname,aktvname,aktgebdatum,
kzfakeartkl);IF dbstatus=1COR aktwahl=""THEN aktwahl:="";initrowbearb;FOR j
FROM 1UPTO anzbearbeingfelderREP standardmaskenfeld("",fachfeld);
standardmaskenfeld("",artfeld);standardmaskenfeld("",klfeld);
standardmaskenfeld("",kursfeld);fachfeldINCR 1;artfeldINCR 2;klfeldINCR 2;
kursfeldINCR 1;PER ;ELSE gibwahlausFI .gibwahlaus:WHILE kurspos<length(
aktwahl)REP fach:=subtext(aktwahl,kurspos,kurspos+1);kennung:=subtext(aktwahl
,kurspos+2,kurspos+5);aktfaecherCAT fach;aktkurseCAT kennung;fach:=compress(
fach);kennung:=compress(kennung);art:=compress(subtext(aktwahl,kurspos+6,
kurspos+7));klausur:=compress(aktwahlSUB (kurspos+8));standardmaskenfeld(fach
,fachfeld);standardmaskenfeld(art,artfeld);standardmaskenfeld(klausur,klfeld)
;standardmaskenfeld(kennung,kursfeld);bearbrow(rowindex):=ROW 4TEXT :(fach,
art,klausur,kennung);IF rowindex<anzbearbeingfelderTHEN rowindexINCR 1FI ;
fachfeldINCR 1;artfeldINCR 2;klfeldINCR 2;kursfeldINCR 1;kursposINCR 
laengefakeartklPER ;IF rowindex<anzbearbeingfelderTHEN FOR jFROM rowindex
UPTO anzbearbeingfelderREP standardmaskenfeld("",fachfeld);standardmaskenfeld
("",artfeld);standardmaskenfeld("",klfeld);standardmaskenfeld("",kursfeld);
bearbrow(rowindex):=ROW 4TEXT :("","","","");IF rowindex<anzbearbeingfelder
THEN rowindexINCR 1;fachfeldINCR 1;artfeldINCR 2;klfeldINCR 2;kursfeldINCR 1;
FI PER FI .zeigplanblockkurszuordnung:alleplanbloecke:=
alleplanblockbezeichner;scrollen:=length(alleplanbloecke)>laengeplbleinesbs;
zeigbearbdaten(aktplblindex).END PROC schuelerbearbeiten;PROC zeigbearbdaten(
INT CONST planblocknr):INT VAR blockpos:=planblocknr*3-2;pruefbloecke:=
trenner;faecherbloecke:=wahldatenzumschueler(aktname,aktvname,aktgebdatum,
kzfaplbl);rechtsscrollen:=FALSE ;FOR iFROM 1UPTO anzbearbzeilenREP aktblock:=
subtext(alleplanbloecke,blockpos,blockpos+2);IF aktblock=""THEN scrollen:=
FALSE ;standardmaskenfeld("",i*4+51);standardmaskenfeld("",i*4+52);
standardmaskenfeld("",i*4+53);standardmaskenfeld("",i*4+54)ELSE 
standardmaskenfeld(konvplanblock(aktblock),i*4+51);standardmaskenfeld(
planblockdaten(aktblock,kzstd),i*4+52);standardmaskenfeld("",i*4+53);
ermittlemoeglichekurse;blockposINCR 3;FI ;PER ;
kurszuordnungundumwahlkopierenvorbereiten;infeld(erstesfachfeld).END PROC 
zeigbearbdaten;PROC ermittlemoeglichekurse:TEXT VAR kurse:=planblockdaten(
aktblock,kzkurse),ausgabekurse;INT VAR kurspos:=1,berhilfe:=aktbsseite*
laengekurseeinesbs;IF length(kurse)>berhilfeTHEN rechtsscrollen:=TRUE ;FI ;
kurse:=subtext(kurse,berhilfe-laengekurseeinesbs+1,berhilfe);konvkurse;
standardmaskenfeld(ausgabekurse,i*4+54).konvkurse:ausgabekurse:="";kurspos:=1
;WHILE kurspos<length(kurse)REP ausgabekurseCAT subtext(kurse,kurspos,kurspos
+1);ausgabekurseCAT " ";ausgabekurseCAT subtext(kurse,kurspos+2,kurspos+5);
kursposINCR 6PER .END PROC ermittlemoeglichekurse;TEXT PROC konvplanblock(
TEXT CONST planblock):INT VAR blnr:=int(text(planblock,2));IF blnr<10THEN "0"
+text(blnr)+(planblockSUB 3)ELSE planblockFI END PROC konvplanblock;TEXT 
PROC konvdatum(TEXT CONST datumohnepunkte):text(datumohnepunkte,2)+"."+
subtext(datumohnepunkte,3,4)+"."+subtext(datumohnepunkte,5)END PROC konvdatum
;PROC kurszuordnungundumwahlspeichern(BOOL CONST speichern):BOOL VAR 
aenderung:=FALSE ;TEXT VAR std,fa,ke;IF speichernTHEN 
pruefundspeicheraenderungen;ELSE standardmeldung(meldungnspeichern,"");FI ;
naechsterbildschirm.naechsterbildschirm:IF listenbearbeitungTHEN IF listenpos
>length(schuelerliste)THEN kurswahlsperrebeenden(kuwa2sperre);enter(3)ELSE 
kopierfunktion:=FALSE ;IF naechsterschuelerTHEN infeld(1);schuelerbearbeiten;
return(1)ELSE kurswahlsperrebeenden(kuwa2sperre);enter(3)FI FI ;ELSE 
kurswahlsperrebeenden(kuwa2sperre);enter(2)FI .pruefundspeicheraenderungen:
standardmeldung(meldungpruefen,"");fachfeld:=erstesfachfeld;artfeld:=16;
klfeld:=17;kursfeld:=ersteskursfeld;aenderung:=FALSE ;wahldaten:="";FOR i
FROM 1UPTO anzbearbeingfelderREP infeld(fachfeld);fach:=standardmaskenfeld(
fachfeld);art:=standardmaskenfeld(artfeld);klausur:=standardmaskenfeld(klfeld
);kennung:=standardmaskenfeld(kursfeld);block12:=kursdaten(text(fach,2)+
kennung,kzplbl);IF fach<>bearbrow(i)(1)COR art<>bearbrow(i)(2)COR klausur<>
bearbrow(i)(3)COR kennung<>bearbrow(i)(4)THEN aenderung:=TRUE FI ;IF fach<>""
THEN IF art=""CAND kennung=""THEN meldungfeldfuellenausgebenELSE prueffachFI 
ELIF art<>""COR kennung<>""THEN meldungfeldfachfuellenausgeben;LEAVE 
kurszuordnungundumwahlspeichernFI ;IF art<>""THEN pruefartFI ;IF kennung<>""
THEN pruefkennung;pruefartzumkurs;IF block12<>leerebloeckeTHEN 
pruefkursueberschneidungFI FI ;IF fach<>""THEN wahldatenCAT text(klausur,1);
wahldatenCAT text(art,2);wahldatenCAT text(fach,2);wahldatenCAT text(kennung,
4);wahldatenCAT text(block12,6)FI ;fachfeldINCR 1;artfeldINCR 2;klfeldINCR 2;
kursfeldINCR 1PER ;IF aenderungTHEN standardmeldung(meldungspeichern,"");
schuelerwahleintragen(aktname,aktvname,aktgebdatum,wahldaten);IF dbstatus<>0
THEN meldungausgeben(meldungspfehler,bearbfaecher,1);LEAVE 
kurszuordnungundumwahlspeichernELSE logbucheintragvornehmen;kurswahl2sichern(
fstat)FI FI .prueffach:IF allefaecher=trennerTHEN holepruefdatenFI ;IF pos(
allefaecher,trenner+fach+trenner)=0THEN meldungausgeben(meldungfalschesfach,
fachfeld,1);LEAVE kurszuordnungundumwahlspeichernFI .pruefart:IF pos(
allearten,trenner+art+trenner)=0THEN meldungausgeben(meldungfalscheart,
artfeld,1);LEAVE kurszuordnungundumwahlspeichernFI .pruefkennung:std:=
compress(kursdaten(text(fach,2)+text(kennung,4),kzart));IF dbstatus<>0THEN 
standardmeldung(meldungunbeklv,text(fach,2)+kennung+ausgzeichen);infeld(
kursfeld);return(1);LEAVE kurszuordnungundumwahlspeichernFI .pruefartzumkurs:
IF art<>""CAND std<>artCAND std<>""THEN meldungfalscheartausgeben;LEAVE 
kurszuordnungundumwahlspeichernFI .pruefkursueberschneidung:TEXT VAR kuform;
block1:=text(block12,3);block2:=subtext(block12,4);FOR jFROM 1UPTO i-1REP fa
:=standardmaskenfeld(erstesfachfeld+j-1);ke:=standardmaskenfeld(
ersteskursfeld+j-1);kuform:=text(text(fa,2)+ke,laengefake);IF fa<>""CAND ke<>
""THEN IF kuform<>text(text(fach,2)+kennung,laengefake)THEN IF 
planblockschnitt(kuform)THEN meldungblockschnittausgeben;LEAVE 
kurszuordnungundumwahlspeichernFI FI FI PER ;FOR jFROM i+1UPTO 
anzbearbeingfelderREP fa:=standardmaskenfeld(erstesfachfeld+j-1);ke:=
standardmaskenfeld(ersteskursfeld+j-1);kuform:=text(text(fa,2)+ke,laengefake)
;IF fa<>""CAND ke<>""THEN IF kuform<>text(text(fach,2)+kennung,laengefake)
THEN IF planblockschnitt(kuform)THEN meldungblockschnittausgeben;LEAVE 
kurszuordnungundumwahlspeichernFI FI FI PER .meldungfeldfuellenausgeben:
meldungausgeben(meldungfeldfuellen,artfeld,1).meldungfeldfachfuellenausgeben:
meldungausgeben(meldungfeldfuellen,fachfeld,1).meldungfalscheartausgeben:
standardmeldung(meldungfalscheartzk,text(fach,2)+kennung+ausgzeichen+std+
ausgzeichen);infeld(artfeld);return(1).meldungblockschnittausgeben:
standardmeldung(meldungblockschnitt,compress(fehlerblock)+ausgzeichen);infeld
(kursfeld);return(1).END PROC kurszuordnungundumwahlspeichern;BOOL PROC 
naechsterschueler:aktindex:=int(subtext(schuelerliste,listenpos,listenpos+2))
;belegeglobalevariablen(aktindex);listenposINCR 4;aktname<>""END PROC 
naechsterschueler;BOOL PROC planblockschnitt(TEXT CONST andererkurs):TEXT 
VAR bl1,bl2,bl12;IF compress(andererkurs)=""THEN LEAVE planblockschnittWITH 
FALSE ELIF block1=leererblockCAND block2=leererblockTHEN LEAVE 
planblockschnittWITH FALSE FI ;bl12:=kursdaten(andererkurs,kzplbl);IF 
dbstatus=1THEN LEAVE planblockschnittWITH FALSE FI ;IF bl12=leerebloeckeTHEN 
LEAVE planblockschnittWITH FALSE FI ;IF block1<>leererblockTHEN bl1:=text(
bl12,3);IF block1ganzerblockCOR bl1ganzerblockTHEN block1:=text(block1,2);bl1
:=text(bl12,2);ELSE bl1:=text(bl12,3)FI ;IF block1=bl1COR block1=bl2THEN 
fehlerblock:=block1;LEAVE planblockschnittWITH TRUE FI ;FI ;IF block2<>
leererblockTHEN bl2:=subtext(bl12,4);IF block2ganzerblockCOR bl2ganzerblock
THEN block2:=text(block2,2);bl2:=subtext(bl12,4,5)ELSE bl2:=subtext(bl12,4)
FI ;IF block2=bl1COR block2=bl2THEN fehlerblock:=block2;LEAVE 
planblockschnittWITH TRUE FI ;FI ;FALSE .block1ganzerblock:(block1SUB 3)=" ".
bl1ganzerblock:(bl1SUB 3)=" ".block2ganzerblock:(block2SUB 3)=" ".
bl2ganzerblock:(bl2SUB 3)=" ".END PROC planblockschnitt;PROC holepruefdaten:
allefaecher:=trenner;allearten:=trenner;inittupel(dnrfaecher);
statleseschleife(dnrfaecher,"","",fnrffach,fnrffach,PROC sammleallefaecher);
inittupel(dnrschluessel);statleseschleife(dnrschluessel,artbestand,"",
fnrschlsachgebiet,fnrschlschluessel,PROC sammleallearten)END PROC 
holepruefdaten;PROC sammleallefaecher(BOOL VAR b):allefaecherCAT wert(
fnrffach);allefaecherCAT trennerEND PROC sammleallefaecher;PROC 
sammleallearten(BOOL VAR b):IF wert(fnrschlsachgebiet)>artbestandCOR dbstatus
<>0THEN b:=TRUE ELSE alleartenCAT wert(fnrschlschluessel);alleartenCAT 
trenner;alleartenCAT text(wert(fnrschlschluessel),2);alleartenCAT trennerFI 
END PROC sammleallearten;PROC kurszuordnungundumwahlkurselisten:TEXT VAR 
kursliste,liste,ausgabeart;INT VAR aktfeld;kursliste:="";aktfeld:=infeld;w:=
startwindow(20,23,77,1);liste:="";standardmeldung(meldunglistezeigen,"");#IF 
menuedraussen08.02.91THEN reorganizescreenFI ;#fuelleliste;infeld(1);
standardfelderausgeben;open(w);auskunfterteilung(liste,w,FALSE );
reorganizescreen;setlasteditvalues;infeld(aktfeld);return(1).fuelleliste:
holklausurkuerzel;listeCAT "Zusammensetzung der Kurse";listeCAT 
auskunftstextende;listeCAT " ";listeCAT auskunftstextende;listeCAT 
"Fach Art Kurs  Schüler Klausur";listeCAT auskunftstextende;listeCAT 
"               ges.    ";FOR iFROM 1UPTO 6REP IF (alleklausurbezSUB i)<>""
THEN listeCAT text((alleklausurbezSUB i),5)FI PER ;listeCAT auskunftstextende
;listeallerkurse.holklausurkuerzel:IF alleklausurbez=""THEN statleseschleife(
dnrschluessel,abiklbestand,"",fnrschlsachgebiet,fnrschlschluessel,PROC 
sammlealleabikl)FI .listeallerkurse:belegefachart;betrachtekurse;anfpos:=1;
praefix:=text(fach,5)+text(ausgabeart,4);WHILE anfpos<length(kursliste)REP 
listeCAT praefix;IF praefix<>""THEN praefix:=leerespraefixFI ;kennung:=
subtext(kursliste,anfpos,anfpos+3);listeCAT text(kennung,6);listeCAT text(
anzahlschuelermitwahl(fach,kennung,"",""),3);listeCAT " ";FOR iFROM 1UPTO 6
REP IF (alleklausurbezSUB i)<>""THEN listeCAT text(anzahlschuelermitwahl(fach
,kennung,ausgabeart,(alleklausurbezSUB i)),5)FI PER ;listeCAT 
auskunftstextende;anfposINCR 4PER ;listeCAT auskunftstextende.betrachtekurse:
anfpos:=1;kursliste:="";kurse:=allekurse;WHILE anfpos<>0REP anfpos:=pos(kurse
,fach,anfpos);IF anfposMOD 10=1THEN IF subtext(kurse,anfpos,anfpos+1)=text(
fach,2)CAND subtext(kurse,anfpos+8,anfpos+9)=text(art,2)THEN kurslisteCAT 
subtext(kurse,anfpos+2,anfpos+5)FI FI ;IF anfpos<>0THEN anfposINCR 1FI PER ;
IF kursliste=""THEN ausgabeart:="";ermittleallekursezumfachELSE ausgabeart:=
artFI .ermittleallekursezumfach:anfpos:=1;kursliste:="";WHILE anfpos<>0REP 
anfpos:=pos(kurse,fach,anfpos);IF anfposMOD 10=1THEN IF subtext(kurse,anfpos,
anfpos+1)=fachTHEN kurslisteCAT subtext(kurse,anfpos+2,anfpos+5)FI FI ;IF 
anfpos<>0THEN anfposINCR 1FI PER .belegefachart:aktfeld:=infeld;IF aktfeld>2
CAND aktfeld<16THEN fach:=standardmaskenfeld(aktfeld);art:=standardmaskenfeld
(((aktfeld-2)*2-1)+15)ELIF aktfeld>15CAND aktfeld<42THEN fach:=
standardmaskenfeld(aktfeldDIV 2-5);IF aktfeldMOD 2=0THEN art:=
standardmaskenfeld(aktfeld)ELSE art:=standardmaskenfeld(aktfeld-1)FI ELSE 
fach:=standardmaskenfeld(aktfeld-39);art:=standardmaskenfeld((aktfeld-39)*2+
10)FI ;art:=compress(art).END PROC kurszuordnungundumwahlkurselisten;PROC 
kurszuordnungundumwahllistebeenden:kurswahlsperrebeenden(kuwa2sperre);enter(2
)END PROC kurszuordnungundumwahllistebeenden;PROC sammlealleabikl(BOOL VAR b)
:IF wert(fnrschlsachgebiet)>abiklbestandCOR dbstatus<>0THEN b:=TRUE ELSE 
alleklausurbezCAT wert(fnrschlschluessel)FI END PROC sammlealleabikl;PROC 
kurszuordnungundumwahlkopierenvorbereiten:TEXT VAR fa,ke,f,k,aktplbl;INT VAR 
z;TEXT VAR var:="",neuerkurseintrag:="";IF pruefbloecke=trennerTHEN 
ermittlegezeigtebloecke;FI ;FOR jFROM 1UPTO anzbearbeingfelderREP fa:=
standardmaskenfeld(bearbfaecher+j-1);ke:=standardmaskenfeld(bearbkurse+j-1);
IF altedatenleerundneuedatenTHEN neuedateneintragenELIF 
altedatenundneuedatenleerTHEN altedatenloeschenELIF altedatenundneuedaten
THEN altedatenloeschenundneuedateneintragenFI ;bearbrow(j)(1):=fa;bearbrow(j)
(4):=kePER ;standardfelderausgeben.altedatenleerundneuedaten:bearbrow(j)(4)=
""CAND fa<>""CAND ke<>"".altedatenundneuedatenleer:bearbrow(j)(1)<>""CAND 
bearbrow(j)(4)<>""CAND ke="".altedatenundneuedaten:bearbrow(j)(1)<>""CAND 
bearbrow(j)(4)<>""CAND fa<>""CAND ke<>"".ermittlegezeigtebloecke:aktplbl:=
subtext(alleplanbloecke,aktplblindex*3-2,(aktplblindex+anzbearbzeilen-1)*3);
pruefbloecke:=trenner;FOR jFROM 1UPTO length(aktplbl)DIV 3REP pruefbloecke
CAT subtext(aktplbl,j*3-2,j*3);pruefbloeckeCAT trennerPER .neuedateneintragen
:faecherbloecke:=kursdaten(text(fa,2)+ke,kzplbl);IF faecherbloecke=
leerebloeckeTHEN LEAVE neuedateneintragenFI ;aktplbl:=text(faecherbloecke,3);
IF aktplbl<>leererblockTHEN i:=pos(pruefbloecke,trenner+aktplbl+trenner);IF i
>0THEN i:=iDIV 4+1;tragneuenkurseinFI FI ;aktplbl:=subtext(faecherbloecke,4);
IF aktplbl<>leererblockTHEN i:=pos(pruefbloecke,trenner+aktplbl+trenner);IF i
>0THEN i:=iDIV 4+1;tragneuenkurseinFI FI .tragneuenkursein:IF 
standardmaskenfeld(i*4+53)<>""CAND standardmaskenfeld(i*4+53)<>text(fa,2)+
text(ke,4)THEN standardmaskenfeld(kzdoppeltbelegt,i*4+53)ELSE 
standardmaskenfeld(text(fa,2)+text(ke,4),i*4+53)FI .altedatenloeschen:
loescheintrag.altedatenloeschenundneuedateneintragen:IF bearbrow(j)(1)<>fa
COR bearbrow(j)(4)<>keTHEN loescheintragFI ;neuedateneintragen.loescheintrag:
faecherbloecke:=kursdaten(text(bearbrow(j)(1),2)+bearbrow(j)(4),kzplbl);IF 
faecherbloecke=leerebloeckeTHEN LEAVE loescheintragFI ;aktplbl:=text(
faecherbloecke,3);IF aktplbl<>leererblockTHEN i:=pos(pruefbloecke,trenner+
aktplbl+trenner);IF i>0THEN i:=iDIV 4+1;IF standardmaskenfeld(i*4+53)=
kzdoppeltbelegtTHEN traganderenkurseinELSE standardmaskenfeld("",i*4+53)FI 
FI FI ;aktplbl:=subtext(faecherbloecke,4);IF aktplbl<>leererblockTHEN i:=pos(
pruefbloecke,trenner+aktplbl+trenner);IF i>0THEN i:=iDIV 4+1;IF 
standardmaskenfeld(i*4+53)=kzdoppeltbelegtTHEN traganderenkurseinELSE 
standardmaskenfeld("",i*4+53)FI FI FI .traganderenkursein:neuerkurseintrag:=
"";FOR zFROM 1UPTO j-1REP f:=standardmaskenfeld(bearbfaecher+z-1);IF f<>""
THEN k:=standardmaskenfeld(bearbkurse+z-1);IF k<>""THEN var:=text(f,2)+k;var
:=kursdaten(var,kzplbl);IF text(var,3)=aktplblCOR subtext(var,4)=aktplblTHEN 
IF neuerkurseintrag=""THEN neuerkurseintrag:=text(f,2)+text(k,4)ELSE 
standardmaskenfeld(kzdoppeltbelegt,i*4+53);LEAVE traganderenkurseinFI FI FI 
FI PER ;FOR zFROM j+1UPTO anzbearbeingfelderREP f:=standardmaskenfeld(
bearbfaecher+z-1);IF f<>""THEN k:=standardmaskenfeld(bearbkurse+z-1);IF k<>""
THEN var:=text(f,2)+k;var:=kursdaten(var,kzplbl);IF text(var,3)=aktplblCOR 
subtext(var,4)=aktplblTHEN IF neuerkurseintrag=""THEN neuerkurseintrag:=text(
f,2)+text(k,4)ELSE standardmaskenfeld(kzdoppeltbelegt,i*4+53);LEAVE 
traganderenkurseinFI FI FI FI PER ;IF neuerkurseintrag=""THEN 
standardmaskenfeld("",i*4+53)ELSE tragkursausehemdoppelbeleinFI .
tragkursausehemdoppelbelein:standardmaskenfeld(neuerkurseintrag,i*4+53).END 
PROC kurszuordnungundumwahlkopierenvorbereiten;PROC 
kurszuordnungundumwahlkopieren:kopierfunktion:=TRUE ;
kurszuordnungundumwahlkopierenvorbereiten;kopierfunktion:=FALSE ;return(1)
END PROC kurszuordnungundumwahlkopieren;PROC 
kurszuordnungundumwahlrechtehaelfte:INT VAR blockpos:=aktplblindex*3-2,
aktfeld:=infeld;IF rechtsscrollenTHEN aktbsseiteINCR 1;
zeigweiteremoeglichekurseELSE letztesfeld:=infeld;meldungausgeben(
meldungkeinblaettern,letztesfeld,1)FI .zeigweiteremoeglichekurse:FOR iFROM 1
UPTO anzbearbzeilenREP aktblock:=subtext(alleplanbloecke,blockpos,blockpos+2)
;IF aktblock=""THEN standardmaskenfeld("",i*4+54)ELSE ermittlemoeglichekurse;
blockposINCR 3;FI ;PER ;infeld(1);standardfelderausgeben;infeld(aktfeld);
return(1).END PROC kurszuordnungundumwahlrechtehaelfte;PROC 
kurszuordnungundumwahllinkehaelfte:INT VAR blockpos:=aktplblindex*3-2,aktfeld
:=infeld;IF aktbsseite<>1THEN rechtsscrollen:=TRUE ;aktbsseiteDECR 1;
zeigweiteremoeglichekurseELSE letztesfeld:=infeld;meldungausgeben(
meldungkeinblaettern,letztesfeld,1)FI .zeigweiteremoeglichekurse:FOR iFROM 1
UPTO anzbearbzeilenREP aktblock:=subtext(alleplanbloecke,blockpos,blockpos+2)
;IF aktblock=""THEN standardmaskenfeld("",i*4+54)ELSE ermittlemoeglichekurse;
blockposINCR 3;FI ;PER ;infeld(1);standardfelderausgeben;infeld(aktfeld);
return(1).END PROC kurszuordnungundumwahllinkehaelfte;PROC 
kurszuordnungundumwahlvorwaerts:INT VAR aktfeld:=infeld;IF scrollenTHEN 
aktplblindexINCR anzbearbzeilen;zeigbearbdaten(aktplblindex);infeld(aktfeld);
return(1)ELSE letztesfeld:=infeld;meldungausgeben(meldungkeinblaettern,
letztesfeld,1)FI END PROC kurszuordnungundumwahlvorwaerts;PROC 
kurszuordnungundumwahlrueckwaerts:INT VAR aktfeld:=infeld;IF aktplblindex>1
THEN scrollen:=TRUE ;aktplblindexDECR anzbearbzeilen;zeigbearbdaten(
aktplblindex);infeld(aktfeld);return(1)ELSE letztesfeld:=infeld;
meldungausgeben(meldungkeinblaettern,letztesfeld,1)FI END PROC 
kurszuordnungundumwahlrueckwaerts;PROC kurszuordnungundumwahlbeenden:
kurswahlsperrebeenden(kuwa2sperre);IF listenbearbeitungTHEN enter(3)ELSE 
enter(2)FI END PROC kurszuordnungundumwahlbeenden;BOOL PROC datumkorrekt:
standardpruefe(6,eingangdatum,1,1,"",fstat);fstat=0END PROC datumkorrekt;
PROC prueffeld2bis5:fstat:=0;IF aktsj="0000"THEN aktsj:=schulkenndatum(
schuljahr);akthj:=schulkenndatum(halbjahr)FI ;gewjgst:=eingangrow(
einganggewjgst);gewhj:=eingangrow(einganggewhj);aktjgst:=eingangrow(
eingangaktjgst);aktneue:=eingangrow(eingangaktneue);prueffeld2;prueffeld3;
prueffeld4und5;prueffeld4;IF fstat=1THEN LEAVE prueffeld2bis5FI ;prueffeld5.
prueffeld2:i:=int(gewjgst);IF gewjgst=""THEN meldungausgeben(
meldungfeldfuellen,einganggewjgst,1);LEAVE prueffeld2bis5ELIF i<11COR i>14
THEN meldungausgeben(meldungfalschejgst,einganggewjgst,1);LEAVE 
prueffeld2bis5FI .prueffeld3:i:=int(gewhj);IF gewhj=""THEN meldungausgeben(
meldungfeldfuellen,einganggewhj,1);LEAVE prueffeld2bis5ELIF i<1COR i>2THEN 
meldungausgeben(meldungfalscheshj,einganggewhj,1);LEAVE prueffeld2bis5FI .
prueffeld4und5:IF aktjgst=""CAND aktneue=""THEN meldungausgeben(
meldungpraezisieren,eingangaktjgst,1);LEAVE prueffeld2bis5ELIF aktjgst=""
CAND aktneue<>""THEN schuelergruppe:=kznurneueELIF aktjgst<>""CAND aktneue=""
THEN schuelergruppe:=kzohneneueELSE schuelergruppe:=kzalleFI .prueffeld4:i:=
int(aktjgst);IF i<10COR i>14THEN meldungausgeben(meldungfalschejgst,
einganggewjgst,1)ELIF i>int(gewjgst)THEN meldungausgeben(meldungandereauswahl
,einganggewjgst,1)ELIF i=int(gewjgst)THEN IF gewhj="1"CAND akthj="2"THEN 
meldungausgeben(meldungandereauswahl,einganggewhj,1)FI FI .prueffeld5:i:=int(
aktneue);IF aktneue<>""CAND aktjgst<>""THEN IF i-1<>int(aktjgst)THEN 
meldungausgeben(meldungandereauswahl,eingangaktneue,1)FI ELIF aktneue<>""
CAND aktjgst=""THEN IF i<11COR i>14THEN meldungausgeben(meldungfalschejgst,
eingangaktneue,1)ELIF i+1>int(gewjgst)THEN meldungausgeben(
meldungandereauswahl,eingangaktneue,1)ELIF i-1=int(gewjgst)THEN IF gewhj="1"
CAND akthj="2"THEN meldungausgeben(meldungandereauswahl,einganggewhj,1)FI FI 
FI .END PROC prueffeld2bis5;PROC kurszuordnungundumwahllistezeigen:
standardmeldung(meldungwarten,"");merkeeingang;prueffeld2bis5;IF fstat<>0
THEN LEAVE kurszuordnungundumwahllistezeigenELSE standardmeldung(
meldunglistezeigen,"");kurswahlinitialisieren(aktjgst,gewjgst,gewhj,
schuelergruppe,gewsj);kurswahlbasisholen(fstat);IF fstat<>0THEN 
meldungausgeben(meldungserverfehler,einganggewjgst,1);LEAVE 
kurszuordnungundumwahllistezeigenELIF letzterschueler<ersterschuelerTHEN 
meldungausgeben(meldungkeineschueler,einganggewjgst,1);LEAVE 
kurszuordnungundumwahllistezeigenFI ;kurswahlsperresetzen(kuwa2sperre,
sperreok);IF NOT sperreokTHEN letztesfeld:=infeld;meldungausgeben(
meldungparallelanw,letztesfeld,1);LEAVE kurszuordnungundumwahllistezeigenFI ;
suchindices;zeigelisteFI .zeigeliste:schuelerliste:=trenner;standardstartproc
(listenmaske);zeigliste(ersterindex);standardnproc.END PROC 
kurszuordnungundumwahllistezeigen;PROC zeigliste(INT CONST zeilennr):
aktlistennr:=zeilennr;infeld(ersteslistenfeld);FOR iFROM 1UPTO 
anzlistenfelderREP aktname:=wahldatenzumindex(zeilennr+i-1,kzname);changeall(
aktname,trenner,namenstrenner);standardmaskenfeld(aktname,i*2+1);IF pos(
schuelerliste,trenner+text(aktlistennr+i-1,3)+trenner)>0THEN 
standardmaskenfeld("x",i*2);aktliste(i):="x"ELSE standardmaskenfeld("",i*2);
aktliste(i):=""FI PER ;infeld(1);standardfelderausgeben;infeld(
ersteslistenfeld).END PROC zeigliste;PROC suchindices:TEXT VAR aktname;
aktname:=eingangrow(eingangfamname);IF aktname=""THEN ersterindex:=
ersterschuelerELSE vergleichnamenFI .vergleichnamen:aktname:=text(aktname,
laengefamname);aktnameCAT trenner;aktnameCAT text(eingangrow(eingangrufname),
laengevname);aktnameCAT trenner;aktnameCAT text(eingangrow(eingangdatum),
laengegebdat);aktnameCAT trenner;FOR iFROM ersterschuelerUPTO letzterschueler
REP IF wahldatenzumindex(i,kzname)>=aktnameTHEN ersterindex:=i;LEAVE 
suchindicesFI PER ;ersterindex:=letzterschueler.END PROC suchindices;PROC 
kurszuordnungundumwahllisteblaettern(INT CONST aktion):INT VAR 
ersterschuelerletzterbs,aktfeld:=infeld;IF aktion=1THEN IF aktlistennr<>
ersterschuelerTHEN analysierekennzeichnungen;ersterindex:=ersterschueler;
zeigliste(ersterindex);return(1)ELSE fehlermeldungaktionnichtmöglichFI ELIF 
aktion=2THEN ersterschuelerletzterbs:=letzterschueler-anzlistenfelder+1;IF 
aktlistennr<ersterschuelerletzterbsCOR aktlistennr>ersterschuelerletzterbs
THEN analysierekennzeichnungen;zeigliste(ersterschuelerletzterbs);return(1)
ELIF aktlistennr=ersterschuelerletzterbsTHEN fehlermeldungaktionnichtmöglich
FI ELIF aktion=3THEN IF aktlistennr>=letzterschueler-anzlistenfelder+1THEN 
fehlermeldungaktionnichtmöglichELSE analysierekennzeichnungen;zeigliste(
aktlistennr+anzlistenfelder);return(1)FI ELIF aktion=4THEN IF aktlistennr=
ersterindexTHEN fehlermeldungaktionnichtmöglichELSE analysierekennzeichnungen
;IF (aktlistennr-anzlistenfelder+1)<ersterindexTHEN zeigliste(ersterindex)
ELSE zeigliste(aktlistennr-anzlistenfelder)FI ;return(1)FI FI .
fehlermeldungaktionnichtmöglich:meldungausgeben(meldungkeinblaettern,aktfeld,
1);LEAVE kurszuordnungundumwahllisteblaettern.END PROC 
kurszuordnungundumwahllisteblaettern;PROC analysierekennzeichnungen:FOR i
FROM 1UPTO anzlistenfelderREP IF standardmaskenfeld(i*2)<>aktliste(i)THEN 
schuelerlisteCAT text(aktlistennr+i-1,3);schuelerlisteCAT trennerFI PER .END 
PROC analysierekennzeichnungen;PROC kurszuordnungundumwahllistebearbeiten:
listenpos:=1;listenbearbeitung:=TRUE ;kopierfunktion:=FALSE ;
analysierekennzeichnungen;IF schuelerliste=trennerTHEN kurswahlsperrebeenden(
kuwa2sperre);enter(2);LEAVE kurszuordnungundumwahllistebearbeitenELSE 
schuelerliste:=subtext(schuelerliste,2)FI ;standardstartproc(bearbmaske);
standardkopfmaskeaktualisieren("Kurszuordnung für jetzige Jgst. "+aktjgst+
" in "+gewjgst+"."+gewhj);aktbsseite:=1;aktplblindex:=1;aktindex:=int(subtext
(schuelerliste,listenpos,listenpos+2));belegeglobalevariablen(aktindex);
schuelerbearbeiten;standardnproc;listenposINCR 4.END PROC 
kurszuordnungundumwahllistebearbeiten;PROC belegeglobalevariablen(INT CONST 
index):TEXT VAR iddaten:=wahldatenzumindex(index,kzname);INT VAR trenner1pos
:=pos(iddaten,trenner),trenner2pos:=pos(iddaten,trenner,trenner1pos+1);IF 
dbstatus=0THEN aktname:=text(iddaten,trenner1pos-1);aktvname:=subtext(iddaten
,trenner1pos+1,trenner2pos-1);aktgebdatum:=subtext(iddaten,trenner2pos+1);
ELSE aktname:="";aktvname:="";aktgebdatum:=""FI ;eingangrow(eingangfamname):=
aktname;eingangrow(eingangrufname):=aktvname;eingangrow(eingangdatum):=
datumrekonversion(aktgebdatum)END PROC belegeglobalevariablen;PROC 
meldungausgeben(INT CONST meldung,gewfeld,gewruecksprung):fstat:=1;
standardmeldung(meldung,"");infeld(gewfeld);return(gewruecksprung)END PROC 
meldungausgeben;PROC merkeeingang:FOR iFROM 2UPTO anzfeldereingangREP 
eingangrow(i):=standardmaskenfeld(i)PER END PROC merkeeingang;PROC 
logbucheintragvornehmen:logmeldung:=logtext1;logmeldungCAT gewjgst;logmeldung
CAT punkt;logmeldungCAT gewhj;logmeldungCAT text1;logmeldungCAT aktname;
logmeldungCAT komma;logmeldungCAT aktvname;logmeldungCAT komma;logmeldungCAT 
aktgebdatum;logmeldungCAT text2;logeintrag(logmeldung)END PROC 
logbucheintragvornehmen;END PACKET 
kurszuordnungundumwahlfuereinzelneschuelersek2