summaryrefslogtreecommitdiff
path: root/app/schulis/2.2.1/src/1.erf.schuelerdaten
blob: fb8696354a30f8a232212d1446603650dee03b41 (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
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
PACKET erfschuelerdatenDEFINES sustartunderfassungsbildschirmaufbauen,
suvonerfassungsbildschirmeinlesen,suanmeldungbearbeiten,suanmeldungeinfuegen,
suanmeldungzeigen,suanmeldungloeschen,suanmeldungloeschenausfuehren,
suanmeldungspeichern,suschuelerbsblaettern,sudatenimbildschirmkopieren,
suausgesuchtezurbearbeitung,suanmeldungausgesuchteloeschen,
suzurueckzumanfangsbildschirm,suerfassungswert,suerfassungschueler,
pruefungschueler:LET maskenstammname="ms erf schuelerdaten",maskennameeingang
="ms schuelerangabe",maskennamebearbeitung="ms bearb schuelerdaten";LET 
bestandneu5="n05",bestandneu11="n11",bestandneusonst="nso",bestandlaufschulj=
"ls",#bestandschuelergruppen="aktuelle Schülergruppen",#bestandschulen=
"Schulen",kuerzelzugangaktjgst="z";LET meldungloeschfrage=65,meldungloeschung
=83,meldungkeineloeschung=84,meldunggibtsschon=70,meldunggibtsnicht=71,
meldungletzter=67,meldungkeineliste=68,meldungspeicherung=80,meldungaenderung
=81,meldungkeineaenderung=82,meldunglistenerstellung=7,
meldungblaetterngehtnicht=72,meldungspeicherungfehlerhaft=73,
meldungloeschenfehlerhaft=74,meldungangabengenauer=129,meldungfalschesdatum=
157,meldungbittename=166,pruefemeldung=57;LET fmeldbittefuellen=52,
fmeldnichtimbestand=55,fmeldfalschesdatum=157,fmeldnumundbegrenzt=54,
fmeldbitteanderejgst=85,weiblich="w",maennlich="m",bestandstaaten=
"c02 staaten",bestandreligion="c02 relizugehoerigkeit",bestandzugang=
"c02 zugang";LET fbs1=1,fbs2=2,fbs3=3,fbs4=4,erstesfeldbeierfassungbs1=2,
erstesfeldbeierfassungbs2=2,erstesfeldbeierfassungbs3=3,
erstesfeldbeierfassungbs4=3,erstererfbildschirm=2,letztererfbildschirm=4;LET 
fnrname=2,fnrnamenszus=3,fnrgebname=4,fnrvornamen=5,fnrrufname=6,fnrsustr=7,
fnrsutelefon=8,fnrsuplzort=9,fnrwohntbei=10,fnrortsteil=11,fnrgebdat=12,
fnrgeschlecht=13,fnrstaatsan=14,fnrreligion=15,fnrverwandt=16,fnrerzname=17,
fnrerznamenszus=18,fnrerzvornamen=19,fnrerzstr=20,fnrerztelefon=21,
fnrerzplzort=22,fnrloeschfeld=23,fnrgebort=3,fnrkreisland=4,fnrmuttersprache=
5,fnraussiedler=6,fnreinschulung=7,fnrschulkuerzel=8,fnrletzteklasse=9,
fnreintrittsdatum=10,fnreintrittjgst=11,fnrsek2=12,fnrjgst=13,fnrzug=14,
fnrzugang=15,fnrneuerzug=16,fnrvermerk1=17,fnrabdatum=23,fnrabgrund=24,
fnrneueschule=25,fnrabschluss=26,fnrreligionunterricht=3,
fnrreligionabmelddatum=4,fnrreligionanmelddatum=5,fnrfremdsprache=6,
fnrkunstmusik=18,fnrag=19,fnrwpsek1=28,fnrauswahlanfang=2,fnrauswahlende=5,
fnrneuan5=2,fnrneuan11=3,fnrneusonst=4,fnrneulaufschulj=5,fnrparamname=6,
fnrparamrufname=7,fnrparamgebdat=8,fnrparambearbname=2,fnrparambearbrufname=3
,fnrparambearbgebdat=4,fnrerstesausgabefeld=2,fnrletztesausgabefeld=40,
fnrausgabename=2;LET zahldervermerke=6,maxlaengenamebeiaenderung=32,
maxlaengenamebeikeineaenderung=26;LET pruefartdatum=6,pruefartauswahl=5;LET 
satzeinfuegen=1,#satzaendern=2,#satzloeschen=3,satzneueschluessel=4;LET 
kennungerfassungsprogramm=1,kennungbearbeitungsprogramm=2,
kennungzeigeprogramm=3;LET leer="",leerzeichen=" ",oblitrenner="$",
kennzmeldungauffaellig="#";LET jgst05="05",jgst11="11",jgstufe5=5,jgstufe10=
10,jgstufe11=11,jgstufe13=13;LET bsanzahl=4,maxfelderzahl=100;LET 
anzschluesselsu=3;LET aktschuljahr="Schuljahr",akthalbjahr="Schulhalbjahr";
LET aendern=1,loeschen=2;BOOL VAR zurueckschreiben:=FALSE ;BOOL VAR 
neuerschueler,neuenschuelereinfuegen,neuerschuelerersteintrag;BOOL VAR 
zeigeprogramm:=FALSE ,mehrereloeschen:=FALSE ,feldschutzzumloeschengesetzt:=
FALSE ;FILE VAR f;INT VAR statussudatei:=0;INT VAR startpos;INT VAR 
programmnummer;INT VAR bs,bsdraussen,fnrfehlerfeld;ROW bsanzahlROW 
maxfelderzahlTEXT VAR erfassungsfeld;ROW bsanzahlTAG VAR maske;ROW bsanzahl
BOOL VAR maskegeholt;ROW anzschluesselsuTEXT VAR schluessel;ROW 
anzschluesselsuTEXT VAR alterschluessel;TEXT VAR dateiname:="Schülerliste",
hjdtid:="",diffdatentid:="";#schultypsich:="",verskennzsich:="";#TEXT VAR 
aktbestand,programmname,tupelsich;LET logtextbeginn1="Anw. 1.1.1 ",
logtextbeginn2="Anw. 1.2.2 ";BOOL PROC erfassungsprogramm:programmnummer=
kennungerfassungsprogrammEND PROC erfassungsprogramm;BOOL PROC 
bearbeitungsprogramm:programmnummer=kennungbearbeitungsprogrammEND PROC 
bearbeitungsprogramm;PROC sustartunderfassungsbildschirmaufbauen(INT CONST 
progrnr):IF progrnr=kennungzeigeprogrammTHEN programmnummer:=
kennungbearbeitungsprogramm;zeigeprogramm:=TRUE ELSE programmnummer:=progrnr;
zeigeprogramm:=FALSE FI ;startprozedur;erfassungsbildschirmaufbauen;
suvonerfassungsbildschirmeinlesen.END PROC 
sustartunderfassungsbildschirmaufbauen;PROC startprozedur:programmname:=text(
vergleichsknoten);reinitparsing;systemdboff;bildschirmeinitialisieren;
standardkopfmaskeausgeben(programmname);.END PROC startprozedur;PROC 
bildschirmeinitialisieren:FOR bsFROM 1UPTO bsanzahlREP maskegeholt(bs):=
FALSE PER ;bs:=1;maskeholen(bs);bsdraussen:=0.END PROC 
bildschirmeinitialisieren;PROC erfassungsbildschirmaufbauen:reinitparsing;
standardkopfmaskeaktualisieren(bstitel);erfassungsmaskeausgeben;
feldvorbelegungenbehandeln;felderausgeben.bstitel:IF bs>1THEN programmname+
" ("+text(bs-1)+".Bildschirm)"ELSE programmnameFI .erfassungsmaskeausgeben:
IF bs<>bsdraussenTHEN zeigemaske;bsdraussen:=bsFI .zeigemaske:show(maske(bs))
.felderausgeben:startpos:=fnrerstesausgabefeld;put(maske(bs),erfassungsfeld(
bs),startpos);IF zeigeprogrammCAND (bs<>fbs1)THEN feldschutzfuerallefelder;
startpos:=1ELSE startpos:=erstesfeldbeierfassung(bs)FI .
feldschutzfuerallefelder:INT VAR i;protect(maske(bs),1,FALSE );FOR iFROM 
fnrerstesausgabefeldUPTO fnrletztesausgabefeldREP protect(maske(bs),i,TRUE )
PER .END PROC erfassungsbildschirmaufbauen;PROC maskeholen(INT CONST maskennr
):initmaske(maske(maskennr),initmaskenname);maskegeholt(maskennr):=TRUE .
initmaskenname:IF erfassungsprogrammTHEN maskenstammname+text(maskennr)ELSE 
maskennamefuerbearbeitungFI .maskennamefuerbearbeitung:SELECT maskennrOF 
CASE 1:maskennameeingangCASE 2:maskenstammname+text(maskennr)CASE 3:
maskennamebearbeitung+text(maskennr)CASE 4:maskenstammname+text(maskennr)
OTHERWISE ""END SELECT .END PROC maskeholen;PROC feldvorbelegungenbehandeln:
SELECT bsOF CASE 1:bsfelderinitialisierenCASE 2:vorbelegungen2CASE 3:
vorbelegungen3CASE 4:vorbelegungen4END SELECT .vorbelegungen2:
vorbelegungneuerschueler2;loeschfeldverdecken.loeschfeldverdecken:LET 
rahmenzeichen="=";erfassungsfeld(bs)(fnrloeschfeld):=rahmenzeichen.
vorbelegungen3:vorbelegungname3;vorbelegungzugang;vorbelegungeintrittjgst;
feldschutzfuerfelderbeineuanmeldungen;.vorbelegungen4:vorbelegungname4.END 
PROC feldvorbelegungenbehandeln;PROC vorbelegungname3:TEXT VAR vor,zus,nach;
vor:=erfassungsfeld(fbs2)(fnrrufname)+leerzeichen;zus:=erfassungsfeld(fbs2)(
fnrnamenszus);IF zus<>leerTHEN zusCAT leerzeichenFI ;nach:=erfassungsfeld(
fbs2)(fnrname);erfassungsfeld(bs)(fnrausgabename):=text(vor+zus+nach,
laengefnrausgabename).laengefnrausgabename:length(maske(bs),fnrausgabename).
END PROC vorbelegungname3;PROC vorbelegungzugang:IF aktbestand<>
bestandlaufschuljTHEN erfassungsfeld(bs)(fnrzugang):=kuerzelzugangaktjgst;
protect(maske(bs),fnrzugang,TRUE )ELSE protect(maske(bs),fnrzugang,FALSE )FI 
.END PROC vorbelegungzugang;PROC vorbelegungname4:erfassungsfeld(bs)(
fnrausgabename):=erfassungsfeld(fbs3)(fnrausgabename).END PROC 
vorbelegungname4;PROC vorbelegungneuerschueler2:IF neuerschuelerersteintrag
THEN neuerschuelerersteintrag:=FALSE ;erfassungsfeld(fbs2)(fnrname):=
erfassungsfeld(fbs1)(fnrparamname);erfassungsfeld(fbs2)(fnrrufname):=
erfassungsfeld(fbs1)(fnrparamrufname);erfassungsfeld(fbs2)(fnrvornamen):=
erfassungsfeld(fbs1)(fnrparamrufname);erfassungsfeld(fbs2)(fnrgebdat):=
erfassungsfeld(fbs1)(fnrparamgebdat)FI .END PROC vorbelegungneuerschueler2;
PROC vorbelegungeintrittjgst:protect(maske(bs),fnrsek2,FALSE );protect(maske(
bs),fnreintrittjgst,FALSE );IF aktbestand=bestandneu5THEN erfassungsfeld(bs)(
fnreintrittjgst):=jgst05;protect(maske(bs),fnreintrittjgst,TRUE )ELIF 
aktbestand=bestandneu11THEN erfassungsfeld(bs)(fnreintrittjgst):=jgst11;
protect(maske(bs),fnreintrittjgst,TRUE );IF neuerschuelerTHEN 
eintrittinsek2vorbelegenFI FI .END PROC vorbelegungeintrittjgst;PROC 
eintrittinsek2vorbelegen:TEXT VAR schuljahr:=schulkenndatum(aktschuljahr);
schuljahr:=subtext(schuljahr,3,4);schuljahr:=schuljahr+text(int(schuljahr)+1)
;erfassungsfeld(bs)(fnrsek2):=schuljahr;protect(maske(bs),fnrsek2,TRUE ).END 
PROC eintrittinsek2vorbelegen;PROC feldschutzfuerfelderbeineuanmeldungen:IF 
aktbestand=bestandlaufschuljTHEN protect(maske(bs),fnrzug,FALSE );IF 
neuerschuelerTHEN protect(maske(bs),fnrjgst,FALSE )ELSE protect(maske(bs),
fnrjgst,TRUE )FI ELSE protect(maske(bs),fnrjgst,TRUE );protect(maske(bs),
fnrzug,TRUE )FI .END PROC feldschutzfuerfelderbeineuanmeldungen;PROC 
suvonerfassungsbildschirmeinlesen:get(maske(bs),erfassungsfeld(bs),startpos);
loeschemeldung(maske(bs)).END PROC suvonerfassungsbildschirmeinlesen;PROC 
suanmeldungbearbeiten:neuenschuelereinfuegen:=FALSE ;IF 
sinnvolleauswahlgetroffenTHEN bearbeitungvorbereitungbeginnenELSE startpos:=
fnrfehlerfeld;return(1)FI .bearbeitungvorbereitungbeginnen:IF 
namenangabenausreichendTHEN bearbeitungbeginnenELSE startpos:=fnrfehlerfeld;
return(1)FI .namenangabenausreichend:IF erfassungsprogrammTHEN 
namenangabenausreichendbeierfassungELSE 
namenangabenausreichendbeibearbeitungoderzeigenFI .bearbeitungbeginnen:
legeaktuellenbestandfest;BOOL VAR suexistiert:=FALSE ;schluesselbereitstellen
;pruefeobnameexistiert(suexistiert);IF suexistiertTHEN saveupdateposition(
dnrschueler);diffdatenlesen;schluessel(1):=wert(fnrsufamnames);schluessel(2)
:=wert(fnrsurufnames);schluessel(3):=datumrekonversion(wert(fnrsugebdatums));
loeschedieerstellteobjektliste;zurueckschreiben:=TRUE ;#
schuelerausstatwuerfelentfernen;dr10.05.88#bereiteaenderungvor;
suvonerfassungsbildschirmeinlesenELSE meldeauffaellig(maske(bs),
meldunggibtsnicht);IF erfassungsprogrammTHEN startpos:=fnrparamnameELSE 
startpos:=fnrparambearbnameFI ;return(1)FI .END PROC suanmeldungbearbeiten;
BOOL PROC sinnvolleauswahlgetroffen:fnrfehlerfeld:=0;IF erfassungsprogramm
THEN pruefe(pruefartauswahl,maske(bs),erfassungsfeld(fbs1),fnrauswahlanfang,
fnrauswahlende,0,leer,fnrfehlerfeld);IF fnrfehlerfeld=0THEN IF erfassungsfeld
(fbs1)(fnrparamgebdat)<>leerTHEN pruefe(pruefartdatum,maske(bs),
erfassungsfeld(fbs1),fnrparamgebdat,0,0,leer,fnrfehlerfeld);FI FI ;
fnrfehlerfeld=0ELSE IF erfassungsfeld(fbs1)(fnrparambearbgebdat)<>leerTHEN 
pruefe(pruefartdatum,maske(bs),erfassungsfeld(fbs1),fnrparambearbgebdat,0,0,
leer,fnrfehlerfeld);FI ;fnrfehlerfeld=0FI .END PROC sinnvolleauswahlgetroffen
;TEXT PROC suerfassungswert(INT CONST feldnr):IF (feldnr>maxfelderzahl)OR (
feldnr<1)THEN ""ELSE erfassungsfeld(bs)(feldnr)FI .END PROC suerfassungswert;
PROC schluesselbereitstellen:IF erfassungsprogrammTHEN schluessel(1):=
erfassungsfeld(fbs1)(fnrparamname);schluessel(2):=erfassungsfeld(fbs1)(
fnrparamrufname);schluessel(3):=erfassungsfeld(fbs1)(fnrparamgebdat)ELIF 
bearbeitungsprogrammTHEN schluessel(1):=erfassungsfeld(fbs1)(
fnrparambearbname);schluessel(2):=erfassungsfeld(fbs1)(fnrparambearbrufname);
schluessel(3):=erfassungsfeld(fbs1)(fnrparambearbgebdat)FI ;alterschluessel(1
):=schluessel(1);alterschluessel(2):=schluessel(2);alterschluessel(3):=
schluessel(3);END PROC schluesselbereitstellen;PROC pruefeobnameexistiert(
BOOL VAR suexist):TEXT VAR datenbankwerte,schluesselwerte;inittupel(
dnrschueler);putwert(fnrsufamnames,schluessel(1));putwert(fnrsurufnames,
schluessel(2));putwert(fnrsugebdatums,datumskonversion(schluessel(3)));
putwert(fnrsustatuss,aktbestand);IF neuenschuelereinfuegenTHEN search(
dnrschueler,FALSE )ELSE search(ixsustatfamrufgeb,FALSE );FI ;IF (NOT 
neuenschuelereinfuegenCAND dbstatus=okCAND wert(fnrsustatuss)=aktbestand)OR (
neuenschuelereinfuegenCAND dbstatus=ok)THEN datenbankwerte:=wert(
fnrsurufnames)+datumrekonversion(wert(fnrsugebdatums));schluesselwerte:=
schluessel(2)+schluessel(3);suexist:=(wert(fnrsufamnames)=schluessel(1)CAND (
(schluessel(2)=leerAND schluessel(3)=leer)OR (pos(datenbankwerte,
schluesselwerte)=1)))ELSE suexist:=FALSE FI .END PROC pruefeobnameexistiert;
PROC bereiteaenderungvor:savetupel(dnrschueler,tupelsich);neuerschueler:=
FALSE ;holemaskenfallsnotwendig;fuelledbdateninfelder;bs:=erstererfbildschirm
;erfassungsbildschirmaufbauen.fuelledbdateninfelder:INT VAR bsn;FOR bsnFROM 
erstererfbildschirmUPTO letztererfbildschirmREP holedbwerte(bsn)PER .END 
PROC bereiteaenderungvor;PROC holemaskenfallsnotwendig:IF NOT (maskegeholt(
erstererfbildschirm))THEN FOR bsFROM erstererfbildschirmUPTO 
letztererfbildschirmREP IF NOT maskegeholt(bs)THEN maskeholen(bs)FI ;PER FI .
END PROC holemaskenfallsnotwendig;PROC suanmeldungeinfuegen:
neuenschuelereinfuegen:=TRUE ;IF sinnvolleauswahlgetroffenTHEN 
neueintragbeginnenELSE startpos:=fnrfehlerfeld;return(1)FI .
neueintragbeginnen:legeaktuellenbestandfest;BOOL VAR suexistiert:=FALSE ;
schluesselbereitstellen;pruefeobnameexistiert(suexistiert);IF suexistiert
THEN meldeauffaellig(maske(bs),meldunggibtsschon);return(1)ELSE 
zurueckschreiben:=FALSE ;bereiteneueintragvor;
suvonerfassungsbildschirmeinlesenFI .bereiteneueintragvor:neuerschueler:=
TRUE ;neuerschuelerersteintrag:=TRUE ;holemaskenfallsnotwendig;bs:=
erstererfbildschirm;erfassungsbildschirmaufbauen.END PROC 
suanmeldungeinfuegen;PROC legeaktuellenbestandfest:IF bearbeitungsprogramm
THEN aktbestand:=bestandlaufschuljELIF erfassungsfeld(fbs1)(fnrneuan5)<>leer
THEN aktbestand:=bestandneu5ELIF erfassungsfeld(fbs1)(fnrneuan11)<>leerTHEN 
aktbestand:=bestandneu11ELIF erfassungsfeld(fbs1)(fnrneusonst)<>leerTHEN 
aktbestand:=bestandneusonstELIF erfassungsfeld(fbs1)(fnrneulaufschulj)<>leer
THEN aktbestand:=bestandlaufschuljFI .END PROC legeaktuellenbestandfest;PROC 
suanmeldungspeichern(BOOL CONST zuspeichern):BOOL VAR suexistiert;TEXT VAR 
schuelertupel:="";IF NOT zuspeichernTHEN IF neuerschuelerTHEN 
vorbereitendesnaechstenneuen;return(1)ELSE IF NOT zeigeprogrammTHEN melde(
maske(bs),meldungkeineaenderung,subtext(namefuermeldung,1,
maxlaengenamebeikeineaenderung)+kennzmeldungauffaellig)FI ;
vorbereitendernaechstenschluesselbehandlungFI ELSE speicherungstartenFI .
speicherungstarten:INT VAR fehlerstatus:=0;
pruefeobbeineuemschuelerschonvorhanden;IF datenfehlerfreiTHEN datenschreiben;
IF statussudatei<>0THEN melde(maske(bs),meldungspeicherungfehlerhaft,text(
statussudatei)+kennzmeldungauffaellig);#altenschuelerwiedereintragen;dr10.
05.88#return(1)ELIF neuerschuelerTHEN #schuelerinstatwuerfeleinfuegen;dr10.
05.88#vorbereitendesnaechstenneuen;return(1)ELSE #
schuelerinstatwuerfeleinfuegen;dr10.05.88#
vorbereitendernaechstenschluesselbehandlungFI ;ELSE fehlerbehandeln;return(1)
FI .pruefeobbeineuemschuelerschonvorhanden:IF falschesdatum(erfassungsfeld(
fbs2)(fnrgebdat))THEN fehlerstatus:=fnrgebdat;bs:=fbs2;
erfassungsbildschirmaufbauen;meldeauffaellig(maske(bs),meldungfalschesdatum);
ELSE schluessel(1):=erfassungsfeld(fbs2)(fnrname);schluessel(2):=
erfassungsfeld(fbs2)(fnrrufname);schluessel(3):=erfassungsfeld(fbs2)(
fnrgebdat);IF geaenderteschluesselfelderTHEN savetupel(dnrschueler,
schuelertupel);pruefeobnameexistiert(suexistiert);restoretupel(dnrschueler,
schuelertupel);IF suexistiertTHEN fehlerstatus:=fnrname;bs:=fbs2;
erfassungsbildschirmaufbauen;meldeauffaellig(maske(bs),meldunggibtsschon);
ELSE pruefeplausibilitaet(fehlerstatus);FI ELSE pruefeplausibilitaet(
fehlerstatus);FI FI .datenfehlerfrei:fehlerstatus=0.fehlerbehandeln:startpos
:=fehlerstatus.END PROC suanmeldungspeichern;PROC datenschreiben:
meldespeicherung;dbwertzuordnung;IF neuerschuelerTHEN logeintragvornehmen(
"Neueinfügen");neueneinfuegenELSE logeintragvornehmen("Änderung");
bearbeitetenschreibenFI ;.meldespeicherung:IF neuerschuelerTHEN melde(maske(
bs),meldungspeicherung,namefuermeldung+kennzmeldungauffaellig)ELSE melde(
maske(bs),meldungaenderung,subtext(namefuermeldung,1,
maxlaengenamebeiaenderung)+kennzmeldungauffaellig)FI .dbwertzuordnung:INT 
VAR bsn;IF neuerschuelerTHEN inittupel(dnrschueler)FI ;FOR bsnFROM 
erstererfbildschirmUPTO letztererfbildschirmREP setzedbwerte(bsn)PER ;.END 
PROC datenschreiben;TEXT PROC namefuermeldung:LET kennznametrenner=".";(
schluessel(2)SUB 1)+kennznametrenner+schluessel(1).END PROC namefuermeldung;
PROC logeintragvornehmen(TEXT CONST logergaenzung):TEXT VAR eintrag;IF 
erfassungsprogrammTHEN eintrag:=logtextbeginn1ELSE eintrag:=logtextbeginn2FI 
;eintragCAT logergaenzung;eintragCAT " """;eintragCAT schluessel(1);eintrag
CAT ", ";eintragCAT schluessel(2);eintragCAT ", ";eintragCAT datumskonversion
(schluessel(3));eintragCAT """";logeintrag(eintrag)END PROC 
logeintragvornehmen;PROC neueneinfuegen:diffdatentid:="";putwert(
fnrdddiffdatennr,unique(dnrdiffdaten));insert(dnrdiffdaten);IF dbstatus=ok
THEN search(dnrdiffdaten,TRUE );IF dbstatus=okTHEN diffdatentid:=gettid;FI 
ELSE fehlerprotokoll(dnrdiffdaten,satzeinfuegen);FI ;putwert(
fnrsudiffdatennrs,wert(fnrdddiffdatennr));putwert(fnrsustatuss,aktbestand);
putwert(fnrsutiddiffdaten,diffdatentid);insert(dnrschueler);statussudatei:=
dbstatus;evtlaenderungderkurswahldatenvollziehenEND PROC neueneinfuegen;PROC 
bearbeitetenschreiben:TEXT VAR sj:=schulkenndatum(aktschuljahr),hj:=
schulkenndatum(akthalbjahr);putwert(fnrsustatuss,aktbestand);
restoreupdateposition(dnrschueler);#update(dnrschueler);dr10.05.88#selupdate(
dnrschueler);statussudatei:=dbstatus;replace(dnrdiffdaten,wert(
fnrsutiddiffdaten));IF statussudatei=okCAND aktbestand=bestandlaufschuljTHEN 
neueklasseinhalbjahresdateneintragen(schluessel,sj,hj,wert(fnrsusgrpjgst),
wert(fnrsusgrpzugtut))FI ;IF statussudatei=okCAND geaenderteschluesselfelder
THEN hjddateiupdate(dnrhalbjahresdaten,satzneueschluessel);
evtlaenderungderkurswahldatenvollziehenFI END PROC bearbeitetenschreiben;
BOOL PROC geaenderteschluesselfelder:schluessel(1)<>alterschluessel(1)OR 
schluessel(2)<>alterschluessel(2)OR schluessel(3)<>alterschluessel(3)END 
PROC geaenderteschluesselfelder;PROC 
vorbereitendernaechstenschluesselbehandlung:IF exists(dateiname)THEN 
holenaechstenschluesselauslisteELSE zurueckschreiben:=FALSE ;
suzurueckzumanfangsbildschirm(2);FI .holenaechstenschluesselausliste:BOOL 
VAR ok,kannbearbeitetwerden:=FALSE ;holenaechstenmehrtlgschluesselausdatei(ok
);WHILE okREP pruefeobnameexistiert(ok);IF okTHEN saveupdateposition(
dnrschueler);diffdatenlesen;kannbearbeitetwerden:=TRUE ;ok:=FALSE ELSE 
holenaechstenmehrtlgschluesselausdatei(ok)FI PER ;IF kannbearbeitetwerden
THEN zurueckschreiben:=TRUE ;IF mehrereloeschenTHEN bereiteloeschenvor;return
(1)ELSE #schuelerausstatwuerfelentfernen;dr10.05.88#bereiteaenderungvor;
return(1)FI ELSE zurueckschreiben:=FALSE ;behandleendederlistenabarbeitungFI 
.behandleendederlistenabarbeitung:mehrereloeschen:=FALSE ;meldeauffaellig(
maske(bs),meldungletzter);suzurueckzumanfangsbildschirm(3).END PROC 
vorbereitendernaechstenschluesselbehandlung;PROC sudatenimbildschirmkopieren:
INT VAR curspos:=startpos;IF bs=fbs2THEN IF curspos=fnrrufnameTHEN 
erfassungsfeld(bs)(fnrrufname):=erfassungsfeld(bs)(fnrvornamen);put(maske(bs)
,erfassungsfeld(bs)(fnrrufname),fnrrufname)ELIF curspos=fnrerznameTHEN 
erfassungsfeld(bs)(fnrerzname):=erfassungsfeld(bs)(fnrname);put(maske(bs),
erfassungsfeld(bs)(fnrerzname),fnrerzname);erfassungsfeld(bs)(fnrerznamenszus
):=erfassungsfeld(bs)(fnrnamenszus);put(maske(bs),erfassungsfeld(bs)(
fnrerznamenszus),fnrerznamenszus);INT VAR i;FOR iFROM 0UPTO fnrerzplzort-
fnrerzstrREP erfassungsfeld(bs)(fnrerzstr+i):=erfassungsfeld(bs)(fnrsustr+i);
put(maske(bs),erfassungsfeld(bs)(fnrerzstr+i),fnrerzstr+i)PER ;FI ;startpos:=
cursposFI ;return(1).END PROC sudatenimbildschirmkopieren;PROC 
suanmeldungzeigen:BOOL VAR listeexistiertnicht;IF sinnvolleauswahlgetroffen
THEN listezeigenbeginnenELSE startpos:=fnrfehlerfeld;return(1)FI .
listezeigenbeginnen:schluesselbereitstellen;legeaktuellenbestandfest;
setzedbwerte(bs);meldeauffaellig(maske(bs),meldunglistenerstellung);
parsenooffields(5);putwert(fnrsustatuss,aktbestand);objektlistestarten(
ixsustatfamrufgeb,schluessel(1),fnrsufamnames,TRUE ,listeexistiertnicht);IF 
listeexistiertnichtTHEN reinitparsing;meldeauffaellig(maske(bs),
meldungkeineliste);return(1)ELSE bsdraussen:=0;datensatzlistenausgabe(PROC (
INT CONST )suerfassungschueler,TRUE ,BOOL PROC pruefungschueler)FI .END PROC 
suanmeldungzeigen;PROC suerfassungschueler(INT CONST n):LET namenlaenge=63,
trenner=", ";TEXT VAR identizeile,schluesselanhang:="";INT VAR i;identizeile
:=wert(fnrsufamnames)+trenner+wert(fnrsurufnames);identizeile:=text(
identizeile,namenlaenge)+wert(fnrsugebdatums);schluesselkoppeln;
setzeidentiwert(identizeilemitschluesselanhang).schluesselkoppeln:FOR iFROM 1
UPTO anzschluesselsuREP schluesselanhangCAT oblitrenner;schluesselanhangCAT 
wert(dnrschueler+i);PER .identizeilemitschluesselanhang:identizeile+
schluesselanhang.END PROC suerfassungschueler;BOOL PROC pruefungschueler:wert
(fnrsustatuss)=aktbestandEND PROC pruefungschueler;PROC 
suausgesuchtezurbearbeitung:behandlungderausgesuchten(aendern)END PROC 
suausgesuchtezurbearbeitung;PROC holeerstenmehrtlgschluesselausdatei(BOOL 
VAR ok):IF NOT exists(dateiname)THEN ok:=FALSE ;LEAVE 
holeerstenmehrtlgschluesselausdateiFI ;f:=sequentialfile(input,dateiname);
holenaechstenmehrtlgschluesselausdatei(ok);END PROC 
holeerstenmehrtlgschluesselausdatei;PROC 
holenaechstenmehrtlgschluesselausdatei(BOOL VAR ok):TEXT VAR thesaurustext:=
"";INT VAR schluesselbeginn:=0;INT VAR schluesseltrennung:=0;INT VAR i:=1;IF 
eof(f)THEN ok:=FALSE ;loeschedieerstellteobjektlisteELSE getline(f,
thesaurustext);bestimmeschluesselausthesaurustext;ok:=TRUE FI .
bestimmeschluesselausthesaurustext:schluesselbeginn:=pos(thesaurustext,
oblitrenner);schluesseltrennung:=pos(thesaurustext,oblitrenner,
schluesselbeginn+1);FOR iFROM 1UPTO anzschluesselsuREP IF schluesseltrennung>
0THEN schluessel(i):=subtext(thesaurustext,schluesselbeginn+1,
schluesseltrennung-1);schluesselbeginn:=schluesseltrennung;schluesseltrennung
:=pos(thesaurustext,oblitrenner,schluesselbeginn+1);ELSE schluessel(i):=
subtext(thesaurustext,schluesselbeginn+1);FI ;PER ;schluessel(3):=
datumrekonversion(schluessel(3));.END PROC 
holenaechstenmehrtlgschluesselausdatei;PROC loeschedieerstellteobjektliste:
forget(dateiname,quiet);END PROC loeschedieerstellteobjektliste;INT PROC 
erstesfeldbeierfassung(INT CONST bildschirmnummer):IF bildschirmnummer=fbs1
THEN erstesfeldbeierfassungbs1ELIF bildschirmnummer=fbs2THEN 
erstesfeldbeierfassungbs2ELIF bildschirmnummer=fbs3THEN 
erstesfeldbeierfassungbs3ELIF bildschirmnummer=fbs4THEN 
erstesfeldbeierfassungbs4ELSE 1FI .END PROC erstesfeldbeierfassung;PROC 
suschuelerbsblaettern(BOOL CONST vorwaerts):IF blaetternsinnlosTHEN 
meldeauffaellig(maske(bs),meldungblaetterngehtnicht)ELSE 
fuehreblaettervorgangdurch;FI ;return(1).blaetternsinnlos:(vorwaertsAND (bs=
letztererfbildschirm))OR (NOT vorwaertsAND (bs=erstererfbildschirm)).
fuehreblaettervorgangdurch:IF vorwaertsTHEN bsINCR 1ELSE bsDECR 1FI ;
erfassungsbildschirmaufbauen.END PROC suschuelerbsblaettern;PROC 
bsfelderinitialisieren:INT VAR bsnr;FOR bsnrFROM 1UPTO bsanzahlREP init(
erfassungsfeld(bsnr))PER .END PROC bsfelderinitialisieren;PROC 
vorbereitendesnaechstenneuen:bsfelderinitialisieren;bs:=erstererfbildschirm;
erfassungsbildschirmaufbauen.END PROC vorbereitendesnaechstenneuen;PROC 
suzurueckzumanfangsbildschirm(INT CONST schritte):bs:=1;IF zurueckschreiben
THEN #schuelerinstatwuerfeleinfuegendr10.05.88#FI ;IF 
feldschutzzumloeschengesetztTHEN feldschutzfuerallefelderaufheben;
feldschutzzumloeschengesetzt:=FALSE FI ;erfassungsbildschirmaufbauen;return(
schritte);.feldschutzfuerallefelderaufheben:INT VAR i;FOR iFROM 
fnrerstesausgabefeldUPTO fnrloeschfeld-1REP protect(maske(erstererfbildschirm
),i,FALSE )PER ;protect(maske(erstererfbildschirm),fnrloeschfeld,TRUE ).END 
PROC suzurueckzumanfangsbildschirm;PROC pruefeplausibilitaet(INT VAR fstatus)
:fstatus:=0;INT VAR fmeld;meldeauffaellig(maske(bs),pruefemeldung);pruefebs2;
IF fstatus<>0THEN fehlerausgabeELSE pruefebs3;IF fstatus<>0THEN fehlerausgabe
ELSE pruefebs4;IF fstatus<>0THEN fehlerausgabeFI FI FI .pruefebs2:IF 
erfassungsfeld(fbs2)(fnrname)=leerTHEN fstatus:=fnrname;bs:=fbs2;fmeld:=
fmeldbittefuellen;LEAVE pruefebs2FI ;IF erfassungsfeld(fbs2)(fnrrufname)=leer
THEN fstatus:=fnrrufname;bs:=fbs2;fmeld:=fmeldbittefuellen;LEAVE pruefebs2FI 
;IF erfassungsfeld(fbs2)(fnrgebdat)=leerTHEN fstatus:=fnrgebdat;bs:=fbs2;
fmeld:=fmeldbittefuellen;LEAVE pruefebs2ELSE IF falschesdatum(erfassungsfeld(
fbs2)(fnrgebdat))THEN fstatus:=fnrgebdat;bs:=fbs2;fmeld:=fmeldfalschesdatum;
LEAVE pruefebs2FI FI ;IF NOT ((erfassungsfeld(fbs2)(fnrgeschlecht)=weiblich)
OR (erfassungsfeld(fbs2)(fnrgeschlecht)=maennlich))THEN fstatus:=
fnrgeschlecht;bs:=fbs2;fmeld:=fmeldnichtimbestand;LEAVE pruefebs2FI ;IF 
erfassungsfeld(fbs2)(fnrstaatsan)<>leerTHEN IF NOT imschlbestand(
erfassungsfeld(fbs2)(fnrstaatsan),bestandstaaten)THEN fstatus:=fnrstaatsan;bs
:=fbs2;fmeld:=fmeldnichtimbestand;LEAVE pruefebs2FI FI ;IF erfassungsfeld(
fbs2)(fnrreligion)<>leerTHEN IF NOT imschlbestand(erfassungsfeld(fbs2)(
fnrreligion),bestandreligion)THEN fstatus:=fnrreligion;bs:=fbs2;fmeld:=
fmeldnichtimbestand;LEAVE pruefebs2FI FI .pruefebs3:INT CONST eintrittsjgst:=
int(erfassungsfeld(fbs3)(fnreintrittjgst));IF erfassungsfeld(fbs3)(
fnreintrittsdatum)=leerTHEN fstatus:=fnreintrittsdatum;bs:=fbs3;fmeld:=
fmeldbittefuellen;LEAVE pruefebs3ELSE IF falschesdatum(erfassungsfeld(fbs3)(
fnreintrittsdatum))THEN fstatus:=fnreintrittsdatum;bs:=fbs3;fmeld:=
fmeldfalschesdatum;LEAVE pruefebs3FI FI ;IF aktbestand=bestandneusonstTHEN 
IF erfassungsfeld(fbs3)(fnreintrittjgst)=leerTHEN fstatus:=fnreintrittjgst;bs
:=fbs3;fmeld:=fmeldbittefuellen;LEAVE pruefebs3FI ;IF eintrittsjgst<jgstufe5
COR eintrittsjgst>jgstufe13THEN fstatus:=fnreintrittjgst;bs:=fbs3;fmeld:=
fmeldnumundbegrenzt;LEAVE pruefebs3FI ;IF eintrittsjgst=jgstufe5COR 
eintrittsjgst=jgstufe11THEN fstatus:=fnreintrittjgst;bs:=fbs3;fmeld:=
fmeldbitteanderejgst;LEAVE pruefebs3FI FI ;IF erfassungsfeld(fbs3)(
fnrschulkuerzel)<>leerTHEN IF NOT imbestand(erfassungsfeld(fbs3)(
fnrschulkuerzel),bestandschulen)THEN fstatus:=fnrschulkuerzel;bs:=fbs3;fmeld
:=fmeldnichtimbestand;LEAVE pruefebs3FI FI ;IF aktbestand=bestandlaufschulj
THEN IF erfassungsfeld(fbs3)(fnrzugang)=leerTHEN fstatus:=fnrzugang;bs:=fbs3;
fmeld:=fmeldbittefuellen;LEAVE pruefebs3ELIF NOT imschlbestand(erfassungsfeld
(fbs3)(fnrzugang),bestandzugang)THEN fstatus:=fnrzugang;bs:=fbs3;fmeld:=
fmeldnichtimbestand;LEAVE pruefebs3FI ;FI ;IF bearbeitungsprogrammCAND 
erfassungsfeld(fbs3)(fnrneueschule)<>leerTHEN IF NOT imbestand(erfassungsfeld
(fbs3)(fnrneueschule),bestandschulen)THEN fstatus:=fnrneueschule;bs:=fbs3;
fmeld:=fmeldnichtimbestand;LEAVE pruefebs3FI FI ;IF bearbeitungsprogrammCAND 
erfassungsfeld(fbs3)(fnrabdatum)<>leerTHEN IF falschesdatum(erfassungsfeld(
fbs3)(fnrabdatum))THEN fstatus:=fnrabdatum;bs:=fbs3;fmeld:=fmeldfalschesdatum
;LEAVE pruefebs3FI FI ;IF aktbestand<>bestandlaufschuljTHEN LEAVE pruefebs3
FI ;TEXT VAR jgst:=erfassungsfeld(fbs3)(fnrjgst);TEXT VAR zug:=erfassungsfeld
(fbs3)(fnrzug);IF jgst=leerTHEN fstatus:=fnrjgst;bs:=fbs3;fmeld:=
fmeldbittefuellen;LEAVE pruefebs3FI ;IF zug=leerTHEN fstatus:=fnrzug;bs:=fbs3
;fmeld:=fmeldbittefuellen;LEAVE pruefebs3FI ;IF NOT imbestandschuelergruppen
THEN IF neuerschuelerTHEN fstatus:=fnrjgstELSE fstatus:=fnrzugFI ;bs:=fbs3;
fmeld:=fmeldnichtimbestand;LEAVE pruefebs3FI .pruefebs4:IF erfassungsfeld(
fbs4)(fnrreligionabmelddatum)<>leerTHEN IF falschesdatum(erfassungsfeld(fbs4)
(fnrreligionabmelddatum))THEN fstatus:=fnrreligionabmelddatum;bs:=fbs4;fmeld
:=fmeldfalschesdatum;LEAVE pruefebs4FI FI ;IF erfassungsfeld(fbs4)(
fnrreligionanmelddatum)<>leerTHEN IF falschesdatum(erfassungsfeld(fbs4)(
fnrreligionanmelddatum))THEN fstatus:=fnrreligionanmelddatum;bs:=fbs4;fmeld:=
fmeldfalschesdatum;LEAVE pruefebs4FI FI ;.fehlerausgabe:
erfassungsbildschirmaufbauen;meldeauffaellig(maske(bs),fmeld).END PROC 
pruefeplausibilitaet;BOOL PROC imbestandschuelergruppen:TEXT VAR schuljahr:=
schulkenndatum(aktschuljahr),halbjahr:=schulkenndatum(akthalbjahr);INT VAR 
dateinummer:=dnraktschuelergruppen;putwert(dateinummer+1,schuljahr);putwert(
dateinummer+2,halbjahr);putwert(dateinummer+3,erfassungsfeld(fbs3)(fnrjgst));
putwert(dateinummer+4,erfassungsfeld(fbs3)(fnrzug));search(dateinummer,TRUE )
;dbstatus=0END PROC imbestandschuelergruppen;BOOL PROC falschesdatum(TEXT 
CONST pruefdatum):LET falschertag="00";datum(pruefdatum)=nildatumCOR subtext(
pruefdatum,1,2)=falschertag.END PROC falschesdatum;PROC setzedbwerte(INT 
CONST bsnr):INT VAR lv,verm;SELECT bsnrOF CASE fbs1:setzedbwertevonbs1CASE 
fbs2:setzedbwertevonbs2CASE fbs3:setzedbwertevonbs3CASE fbs4:
setzedbwertevonbs4END SELECT ;IF neuenschuelereinfuegenTHEN putwert(
fnrsutidakthjd,leer)ELSE putwert(fnrsutidakthjd,hjdtid)FI .setzedbwertevonbs1
:IF NOT bearbeitungsprogrammTHEN putwert(fnrsufamnames,erfassungsfeld[bsnr][
fnrparamname]);putwert(fnrsurufnames,erfassungsfeld[bsnr][fnrparamrufname]);
putwert(fnrsugebdatums,datumskonversion(erfassungsfeld[bsnr][fnrparamgebdat])
);ELSE putwert(fnrsufamnames,erfassungsfeld[bsnr][fnrparambearbname]);putwert
(fnrsurufnames,erfassungsfeld[bsnr][fnrparambearbrufname]);putwert(
fnrsugebdatums,datumskonversion(erfassungsfeld[bsnr][fnrparambearbgebdat]));
FI .setzedbwertevonbs2:putwert(fnrsufamnames,erfassungsfeld[bsnr][fnrname]);
putwert(fnrsunamenszusatzs,erfassungsfeld[bsnr][fnrnamenszus]);putwert(
fnrsugebnames,erfassungsfeld[bsnr][fnrgebname]);putwert(fnrsuvornames,
erfassungsfeld[bsnr][fnrvornamen]);putwert(fnrsurufnames,erfassungsfeld[bsnr]
[fnrrufname]);putwert(fnrsustrnrs,erfassungsfeld[bsnr][fnrsustr]);putwert(
fnrsutelnrs,erfassungsfeld[bsnr][fnrsutelefon]);putwert(fnrsuplzorts,
erfassungsfeld[bsnr][fnrsuplzort]);putwert(fnrsuwohntbei,erfassungsfeld[bsnr]
[fnrwohntbei]);putwert(fnrsuortsteils,erfassungsfeld[bsnr][fnrortsteil]);
putwert(fnrsugebdatums,datumskonversion(erfassungsfeld[bsnr][fnrgebdat]));
putwert(fnrsugeschlechts,erfassungsfeld[bsnr][fnrgeschlecht]);putwert(
fnrsustaatsangs,erfassungsfeld[bsnr][fnrstaatsan]);putwert(fnrsureligionsz,
erfassungsfeld[bsnr][fnrreligion]);putwert(fnrsuverhes,erfassungsfeld[bsnr][
fnrverwandt]);putwert(fnrsufamnamee,erfassungsfeld[bsnr][fnrerzname]);putwert
(fnrsunamenszusatze,erfassungsfeld[bsnr][fnrerznamenszus]);putwert(
fnrsuvornamee,erfassungsfeld[bsnr][fnrerzvornamen]);putwert(fnrsustrnre,
erfassungsfeld[bsnr][fnrerzstr]);putwert(fnrsutelnre,erfassungsfeld[bsnr][
fnrerztelefon]);putwert(fnrsuplzorte,erfassungsfeld[bsnr][fnrerzplzort]);.
setzedbwertevonbs3:putwert(fnrsugeborts,erfassungsfeld[bsnr][fnrgebort]);
putwert(fnrsugebkreiss,erfassungsfeld[bsnr][fnrkreisland]);putwert(
fnrsumuttersprache,erfassungsfeld[bsnr][fnrmuttersprache]);putwert(
fnrsuspaetaus,erfassungsfeld[bsnr][fnraussiedler]);putwert(fnrsujahreinschul,
erfassungsfeld[bsnr][fnreinschulung]);putwert(fnrsuskennlschule,
erfassungsfeld[bsnr][fnrschulkuerzel]);putwert(fnrsuklasselschule,
erfassungsfeld[bsnr][fnrletzteklasse]);putwert(fnrsueintrittsdats,
datumskonversion(erfassungsfeld[bsnr][fnreintrittsdatum]));putwert(
fnrsujgsteintr,jgstaufber(erfassungsfeld[bsnr][fnreintrittjgst]));putwert(
fnrsueintrittinsek,erfassungsfeld[bsnr][fnrsek2]);putwert(fnrsusgrpjgst,
jgstaufber(erfassungsfeld[bsnr][fnrjgst]));putwert(fnrsusgrpzugtut,
erfassungsfeld[bsnr][fnrzug]);putwert(fnrsuartzugang,erfassungsfeld[bsnr][
fnrzugang]);putwert(fnrsuneuerzugtut,erfassungsfeld[bsnr][fnrneuerzug]);FOR 
vermFROM 0UPTO zahldervermerke-1REP putwert(fnrsuvermerk1+verm,erfassungsfeld
[bsnr][fnrvermerk1+verm])PER ;IF bearbeitungsprogrammTHEN putwert(
fnrsuabgdats,datumskonversion(erfassungsfeld[bsnr][fnrabdatum]));putwert(
fnrsuabggrund,erfassungsfeld[bsnr][fnrabgrund]);putwert(fnrsuskennnschule,
erfassungsfeld[bsnr][fnrneueschule]);putwert(fnrsuabschluss,erfassungsfeld[
bsnr][fnrabschluss]);FI .setzedbwertevonbs4:putwert(fnrddreliunter,
erfassungsfeld[bsnr][fnrreligionunterricht]);putwert(fnrddreliunter+1,
datumskonversion(erfassungsfeld[bsnr][fnrreligionabmelddatum]));putwert(
fnrddreliunter+2,datumskonversion(erfassungsfeld[bsnr][fnrreligionanmelddatum
]));FOR lvFROM 0UPTO 11REP putwert(fnrdd1fremdfach+lv,erfassungsfeld[bsnr][
fnrfremdsprache+lv]);PER ;putwert(fnrddkunstmusik,erfassungsfeld[bsnr][
fnrkunstmusik]);FOR lvFROM 0UPTO 8REP putwert(fnrddagthema1+lv,erfassungsfeld
[bsnr][fnrag+lv]);PER ;FOR lvFROM 0UPTO 7REP putwert(fnrddfach091a+lv,
erfassungsfeld[bsnr][fnrwpsek1+lv]);PER .END PROC setzedbwerte;PROC 
holedbwerte(INT CONST bsnr):INT VAR lv,verm;SELECT bsnrOF CASE fbs1:
holedbwertevonbs1CASE fbs2:holedbwertevonbs2CASE fbs3:holedbwertevonbs3CASE 
fbs4:holedbwertevonbs4END SELECT ;hjdtid:=wert(fnrsutidakthjd);.
holedbwertevonbs1:IF NOT bearbeitungsprogrammTHEN erfassungsfeld[bsnr][
fnrparamname]:=wert(fnrsufamnames);erfassungsfeld[bsnr][fnrparamrufname]:=
wert(fnrsurufnames);erfassungsfeld[bsnr][fnrparamgebdat]:=wert(fnrsugebdatums
);ELSE erfassungsfeld[bsnr][fnrparambearbname]:=wert(fnrsufamnames);
erfassungsfeld[bsnr][fnrparambearbrufname]:=wert(fnrsurufnames);
erfassungsfeld[bsnr][fnrparambearbgebdat]:=wert(fnrsugebdatums);FI .
holedbwertevonbs2:erfassungsfeld[bsnr][fnrname]:=wert(fnrsufamnames);
erfassungsfeld[bsnr][fnrnamenszus]:=wert(fnrsunamenszusatzs);erfassungsfeld[
bsnr][fnrgebname]:=wert(fnrsugebnames);erfassungsfeld[bsnr][fnrvornamen]:=
wert(fnrsuvornames);erfassungsfeld[bsnr][fnrrufname]:=wert(fnrsurufnames);
erfassungsfeld[bsnr][fnrsustr]:=wert(fnrsustrnrs);erfassungsfeld[bsnr][
fnrsutelefon]:=wert(fnrsutelnrs);erfassungsfeld[bsnr][fnrsuplzort]:=wert(
fnrsuplzorts);erfassungsfeld[bsnr][fnrwohntbei]:=wert(fnrsuwohntbei);
erfassungsfeld[bsnr][fnrortsteil]:=wert(fnrsuortsteils);erfassungsfeld[bsnr][
fnrgebdat]:=datumrekonversion(wert(fnrsugebdatums));erfassungsfeld[bsnr][
fnrgeschlecht]:=wert(fnrsugeschlechts);erfassungsfeld[bsnr][fnrstaatsan]:=
wert(fnrsustaatsangs);erfassungsfeld[bsnr][fnrreligion]:=wert(fnrsureligionsz
);erfassungsfeld[bsnr][fnrverwandt]:=wert(fnrsuverhes);erfassungsfeld[bsnr][
fnrerzname]:=wert(fnrsufamnamee);erfassungsfeld[bsnr][fnrerznamenszus]:=wert(
fnrsunamenszusatze);erfassungsfeld[bsnr][fnrerzvornamen]:=wert(fnrsuvornamee)
;erfassungsfeld[bsnr][fnrerzstr]:=wert(fnrsustrnre);erfassungsfeld[bsnr][
fnrerztelefon]:=wert(fnrsutelnre);erfassungsfeld[bsnr][fnrerzplzort]:=wert(
fnrsuplzorte);alteschluesselsichern.alteschluesselsichern:alterschluessel(1)
:=erfassungsfeld[bsnr][fnrname];alterschluessel(2):=erfassungsfeld[bsnr][
fnrrufname];alterschluessel(3):=erfassungsfeld[bsnr][fnrgebdat];.
holedbwertevonbs3:TEXT VAR einjgst:=wert(fnrsujgsteintr),aktjgst:=wert(
fnrsusgrpjgst);erfassungsfeld[bsnr][fnrgebort]:=wert(fnrsugeborts);
erfassungsfeld[bsnr][fnrkreisland]:=wert(fnrsugebkreiss);erfassungsfeld[bsnr]
[fnrmuttersprache]:=wert(fnrsumuttersprache);erfassungsfeld[bsnr][
fnraussiedler]:=wert(fnrsuspaetaus);erfassungsfeld[bsnr][fnreinschulung]:=
textnichtnull(wert(fnrsujahreinschul));erfassungsfeld[bsnr][fnrschulkuerzel]
:=wert(fnrsuskennlschule);erfassungsfeld[bsnr][fnrletzteklasse]:=wert(
fnrsuklasselschule);erfassungsfeld[bsnr][fnreintrittsdatum]:=
datumrekonversion(wert(fnrsueintrittsdats));erfassungsfeld[bsnr][
fnreintrittjgst]:=jgstaufber(einjgst);erfassungsfeld[bsnr][fnrsek2]:=
textnichtnull(wert(fnrsueintrittinsek));erfassungsfeld[bsnr][fnrjgst]:=
jgstaufber(aktjgst);erfassungsfeld[bsnr][fnrzug]:=wert(fnrsusgrpzugtut);
erfassungsfeld[bsnr][fnrzugang]:=wert(fnrsuartzugang);erfassungsfeld[bsnr][
fnrneuerzug]:=wert(fnrsuneuerzugtut);FOR vermFROM 0UPTO zahldervermerke-1REP 
erfassungsfeld[bsnr][fnrvermerk1+verm]:=wert(fnrsuvermerk1+verm)PER ;IF 
bearbeitungsprogrammTHEN erfassungsfeld[bsnr][fnrabdatum]:=datumrekonversion(
wert(fnrsuabgdats));erfassungsfeld[bsnr][fnrabgrund]:=wert(fnrsuabggrund);
erfassungsfeld[bsnr][fnrneueschule]:=wert(fnrsuskennnschule);erfassungsfeld[
bsnr][fnrabschluss]:=wert(fnrsuabschluss);FI .holedbwertevonbs4:
erfassungsfeld[bsnr][fnrreligionunterricht]:=wert(fnrddreliunter);
erfassungsfeld[bsnr][fnrreligionabmelddatum]:=datumrekonversion(wert(
fnrddreliunter+1));erfassungsfeld[bsnr][fnrreligionanmelddatum]:=
datumrekonversion(wert(fnrddreliunter+2));FOR lvFROM 0UPTO 11REP 
erfassungsfeld[bsnr][fnrfremdsprache+lv]:=wert(fnrdd1fremdfach+lv);PER ;
erfassungsfeld[bsnr][fnrkunstmusik]:=wert(fnrddkunstmusik);FOR lvFROM 0UPTO 8
REP erfassungsfeld[bsnr][fnrag+lv]:=wert(fnrddagthema1+lv);PER ;FOR lvFROM 0
UPTO 7REP erfassungsfeld[bsnr][fnrwpsek1+lv]:=wert(fnrddfach091a+lv);PER .
END PROC holedbwerte;PROC suanmeldungloeschen:IF sinnvolleauswahlgetroffen
THEN loeschenvorbereitungbeginnenELSE startpos:=fnrfehlerfeld;return(1)FI .
loeschenvorbereitungbeginnen:IF namenangabenausreichendTHEN loeschenbeginnen
ELSE startpos:=fnrfehlerfeld;return(1)FI .namenangabenausreichend:IF 
erfassungsprogrammTHEN namenangabenausreichendbeierfassungELSE 
namenangabenausreichendbeibearbeitungoderzeigenFI .loeschenbeginnen:
legeaktuellenbestandfest;BOOL VAR suexistiert:=FALSE ;schluesselbereitstellen
;pruefeobnameexistiert(suexistiert);IF suexistiertTHEN saveupdateposition(
dnrschueler);diffdatenlesen;schluessel(1):=wert(fnrsufamnames);schluessel(2)
:=wert(fnrsurufnames);schluessel(3):=datumrekonversion(wert(fnrsugebdatums));
loeschedieerstellteobjektliste;zurueckschreiben:=FALSE ;bereiteloeschenvor;
suvonerfassungsbildschirmeinlesenELSE meldeauffaellig(maske(bs),
meldunggibtsnicht);IF erfassungsprogrammTHEN startpos:=fnrparamnameELSE 
startpos:=fnrparambearbnameFI ;return(1)FI .END PROC suanmeldungloeschen;
PROC bereiteloeschenvor:bereiteaenderungvor;
feldschutzfuerallefelderausserloeschfeldsetzen;meldeauffaellig(maske(bs),
meldungloeschfrage);startpos:=fnrloeschfeldEND PROC bereiteloeschenvor;PROC 
feldschutzfuerallefelderausserloeschfeldsetzen:INT VAR i;FOR iFROM 
fnrerstesausgabefeldUPTO fnrloeschfeld-1REP protect(maske(bs),i,TRUE )PER ;
protect(maske(erstererfbildschirm),fnrloeschfeld,FALSE );
feldschutzzumloeschengesetzt:=TRUE .END PROC 
feldschutzfuerallefelderausserloeschfeldsetzen;PROC 
suanmeldungloeschenausfuehren(BOOL CONST zuloeschen):IF zuloeschenTHEN melde(
maske(bs),meldungloeschung,namefuermeldung+kennzmeldungauffaellig);
logeintragvornehmen("Entfernen");schuelerloeschen;IF dbstatus<>0THEN melde(
maske(bs),meldungloeschenfehlerhaft,text(dbstatus)+kennzmeldungauffaellig);#
altenschuelerwiedereintragen;dr10.05.88#return(1)ELSE 
vorbereitendernaechstenschluesselbehandlungFI ELSE melde(maske(bs),
meldungkeineloeschung,namefuermeldung+kennzmeldungauffaellig);
vorbereitendernaechstenschluesselbehandlungFI .schuelerloeschen:
hjddateiupdate(dnrhalbjahresdaten,satzloeschen);diffdatenloeschen;delete(
dnrschueler);evtlaenderungderkurswahldatenvollziehen.diffdatenloeschen:IF 
wert(fnrsudiffdatennrs)<>""THEN putwert(fnrdddiffdatennr,wert(
fnrsudiffdatennrs));search(dnrdiffdaten,TRUE );IF dbstatus=okTHEN delete(
dnrdiffdaten)FI FI .END PROC suanmeldungloeschenausfuehren;PROC 
suanmeldungausgesuchteloeschen:behandlungderausgesuchten(loeschen)END PROC 
suanmeldungausgesuchteloeschen;PROC behandlungderausgesuchten(INT CONST 
wasistzutun):BOOL VAR ok,kannbearbeitetwerden:=FALSE ;
loeschedieerstellteobjektliste;objektlistebeenden(dateiname,TRUE );
reinitparsing;holeerstenmehrtlgschluesselausdatei(ok);WHILE okREP 
pruefeobnameexistiert(ok);IF okTHEN saveupdateposition(dnrschueler);
diffdatenlesen;kannbearbeitetwerden:=TRUE ;ok:=FALSE ELSE 
holenaechstenmehrtlgschluesselausdatei(ok)FI PER ;IF kannbearbeitetwerden
THEN zurueckschreiben:=TRUE ;IF wasistzutun=aendernTHEN #
schuelerausstatwuerfelentfernen;dr10.05.88#bereiteaenderungvorELSE 
bereiteloeschenvor;mehrereloeschen:=TRUE FI ;
suvonerfassungsbildschirmeinlesenELSE zurueckschreiben:=FALSE ;
suzurueckzumanfangsbildschirm(2)FI .END PROC behandlungderausgesuchten;BOOL 
PROC namenangabenausreichendbeierfassung:IF erfassungsfeld(fbs1)(fnrparamname
)=leerTHEN meldeauffaellig(maske(bs),meldungbittename);fnrfehlerfeld:=
fnrparamname;FALSE ELIF erfassungsfeld(fbs1)(fnrparamrufname)=leerCAND 
erfassungsfeld(fbs1)(fnrparamgebdat)<>leerTHEN meldeauffaellig(maske(bs),
meldungangabengenauer);fnrfehlerfeld:=fnrparamrufname;FALSE ELSE TRUE FI .
END PROC namenangabenausreichendbeierfassung;BOOL PROC 
namenangabenausreichendbeibearbeitungoderzeigen:IF erfassungsfeld(fbs1)(
fnrparambearbname)=leerTHEN meldeauffaellig(maske(bs),meldungbittename);
fnrfehlerfeld:=fnrparambearbname;FALSE ELIF erfassungsfeld(fbs1)(
fnrparambearbrufname)=leerCAND erfassungsfeld(fbs1)(fnrparambearbgebdat)<>
leerTHEN meldeauffaellig(maske(bs),meldungangabengenauer);fnrfehlerfeld:=
fnrparambearbrufname;FALSE ELSE TRUE FI .END PROC 
namenangabenausreichendbeibearbeitungoderzeigen;PROC hjddateiupdate(INT 
CONST dateinummer,wasistzutun):LET stackgroesse=6;INT VAR anzahltupel:=
stackgroesse;inittupel(dateinummer);putwert(dateinummer+1,alterschluessel(1))
;putwert(dateinummer+2,alterschluessel(2));putwert(dateinummer+3,
datumskonversion(alterschluessel(3)));multisearchforward(dateinummer,
anzahltupel);WHILE anzahltupel>0REP multisucc;IF gleicherschuelerTHEN SELECT 
wasistzutunOF CASE satzloeschen:datenloeschenCASE satzneueschluessel:
schluesselfelderaendernENDSELECT ;anzahltupelDECR 1;IF anzahltupel=0THEN 
nachlesenFI ;ELSE LEAVE hjddateiupdateFI PER .gleicherschueler:
alterschluessel(1)=wert(dateinummer+1)CAND alterschluessel(2)=wert(
dateinummer+2)CAND alterschluessel(3)=datumrekonversion(wert(dateinummer+3)).
datenloeschen:delete(dateinummer);fehlerprotokoll(dateinummer,satzloeschen).
schluesselfelderaendern:putwert(dateinummer+1,schluessel(1));putwert(
dateinummer+2,schluessel(2));putwert(dateinummer+3,datumskonversion(
schluessel(3)));#update(dateinummer);dr10.05.88#selupdate(dateinummer);
fehlerprotokoll(dateinummer,satzneueschluessel);putwert(dateinummer+1,
alterschluessel(1));putwert(dateinummer+2,alterschluessel(2));putwert(
dateinummer+3,datumskonversion(alterschluessel(3)));.nachlesen:anzahltupel:=
stackgroesse;multisucc(dateinummer,anzahltupel).END PROC hjddateiupdate;PROC 
fehlerprotokoll(INT CONST dateinummer,wasausdrucken):TEXT CONST fehlerdatei:=
"Fehlerprotokoll";ROW 4TEXT VAR fehlerwobei:=ROW 4TEXT :(
"Einfügen in die Datei ","Ändern in der Datei ","Löschen in der Datei ",
"Ändern der Schlüsselfelder der Datei ");IF dbstatus<>okTHEN FILE VAR f:=
sequentialfile(output,fehlerdatei);putline(f,
"Fehlerprotokoll zur Bearbeitung des Schülers:");putline(f,schluessel(2)+
leerzeichen+schluessel(1)+", geboren am "+datumskonversion(schluessel(3)));
putline(f,leer);putline(f,"Fehler beim "+fehlerwobei[wasausdrucken]+name(
dateinummer));print(fehlerdatei);forget(fehlerdatei,quiet);FI END PROC 
fehlerprotokoll;PROC diffdatenlesen:readtid(dnrdiffdaten,wert(
fnrsutiddiffdaten))END PROC diffdatenlesen;PROC 
evtlaenderungderkurswahldatenvollziehen:IF dbstatus=0THEN IF aktbestand=
bestandlaufschuljTHEN IF intwert(fnrsusgrpjgst)>=jgstufe10THEN 
kurswahlserveraktualisieren(wert(fnrsusgrpjgst),"","")FI ELIF aktbestand=
bestandneu11THEN kurswahlserveraktualisieren(text(jgstufe10),"","")ELIF 
aktbestand=bestandneusonstTHEN IF intwert(fnrsujgsteintr)>jgstufe10THEN 
kurswahlserveraktualisieren(text(intwert(fnrsujgsteintr)-1),"","")FI FI ;FI 
END PROC evtlaenderungderkurswahldatenvollziehen;END PACKET erfschuelerdaten