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
|