summaryrefslogtreecommitdiff
path: root/app/schulis/2.2.1/src/4.konsistenzpruefung
blob: bd95a945d522dbad55192b2ae14d622bdbe52e03 (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
PACKET konsistenzpruefungDEFINES konsistenzpruefungstarten,
konsistenzpruefungprotokolldrucken:INT VAR fnrgeplhj:=2,fnrakthj:=3;LET 
meldnrinbearbeitung=352,meldnrstundenplanwirdaufbereitet=357,meldnrbasisalt=
377;LET anschreibenserver="anschreiben server";LET fehlerzeilendatei=
"fehlerliste konsistenzpruefung";FILE VAR fehldat;LET protname=
"Protokoll zur Konsistenzprüfung";FILE VAR prot;LET sachgebietraum=
"c02 raeume",sachgebietaufsichtsorte="c02 aufsichtsorte";LET schuljahr=
"Schuljahr",schulhalbjahr="Schulhalbjahr",schulname="Schulname",schulort=
"Schulort";LET ueberschrift="Konsistenzprüfung zum Stundenplan",untertitel1=
"Stundenplan zum Schuljahr ",texthalbjahr=". Halbjahr",untertitel2=
"Prüfung am ",anfangstext="Folgende Inkonsistenzen wurden festgestellt: ";
LET strich="-",schraegstrich="/",blank=" ",kennzhell="#",fall="Fall ",
doppelpunkt=":",ersatzzeichen="#",awtrenner="#";LET jgst05="05",jgst13="13";
LET kennzzeitrastersperrung="x",leerraum="    ";LET laengekennung=4,
laengeraum=4,laengeklassengruppe=4,laengesugruppe=6,laengeparaphe=4,
laengefach=2,laengekopplung=8,laengelv=8,laengeorte=4,laengeaufsichtszeit=3;
LET kennungkopplung="K",kennungparaphe="P",kennunglv="L",kennungraum="R";LET 
maxlehrer=255;LET erstestunde=1,letztestunde=66;LET bezugfach="f",
bezugsugruppe="s",bezugparaphe="l",bezugraum="r",bezugkopplung="k",
bezugtextfach="Fach",bezugtextsugruppe="Schülergruppe",bezugtextparaphe=
"Paraphe",bezugtextraum="Raum",bezugtextkopplung="Kopplung";TEXT VAR aktsj:=
"",akthj:="",gewsj,gewhj;TEXT VAR auszeile,zeile,suchfall;TEXT VAR 
klassengruppe,raumgruppe,jgst,fach,paraphe,lv,raum,ort,aufsichtszeit,kopplung
,neuekopplung,neueparaphe;TEXT VAR gueltigeschuelergruppen,
gueltigeklassengruppen,gueltigeraumgruppen,gueltigeraeume,gueltigefaecher,
gueltigeparaphen,gueltigelv,gueltigekopplungen,gueltigeaufsichtszeiten,
gueltigeaufsichtsorte;TEXT VAR fehlerhafteklassengruppen,
fehlerhafteraumgruppen,fehlerhaftelv;TEXT VAR zeitrasterleiste;INT VAR 
ifehler,ilehrer;ROW maxlehrerINT VAR lehrersollstd;ROW maxlehrerINT VAR 
lehreriststd;INT VAR posraum,poslv,posparaphe;INT VAR izeit;PROC 
konsistenzpruefungstarten:INT VAR fnrfehler:=0;standardpruefe(5,fnrgeplhj,
fnrakthj,0,"",fnrfehler);IF fnrfehler<>0THEN infeld(fnrfehler);return(1)ELSE 
pruefungstartenFI .pruefungstarten:IF aktsj=""THEN aktsj:=schulkenndatum(
schuljahr);akthj:=schulkenndatum(schulhalbjahr)FI ;gewsj:=aktsj;gewhj:=akthj;
IF standardmaskenfeld(fnrgeplhj)<>""THEN geplanteshjundsjberechnen(gewhj,
gewsj);FI ;protokollvorbereiten;ausgabekopfaufbereiten;
pruefungklassengruppendurchfuehren;pruefungraumgruppendurchfuehren;
pruefunglehrveranstaltungendurchfuehren;
pruefunglehrerstundenzahlendurchfuehren;pruefungzeitwuenschedurchfuehren;
pruefungstundenplandurchfuehren;pruefungaufsichtsplandurchfuehren;
ausgabefussaufbereiten;zeigedatei(protname,"").protokollvorbereiten:forget(
fehlerzeilendatei,quiet);fetch(fehlerzeilendatei,/anschreibenserver);fehldat
:=sequentialfile(modify,fehlerzeilendatei);forget(protname,quiet);prot:=
sequentialfile(output,protname);ifehler:=0.ausgabekopfaufbereiten:putline(
prot,schulkenndatum(schulname));putline(prot,schulkenndatum(schulort));line(
prot);putline(prot,20*blank+ueberschrift);putline(prot,20*blank+length(
ueberschrift)*strich);line(prot);auszeile:=untertitel1;auszeileCAT subtext(
gewsj,1,2);auszeileCAT schraegstrich;auszeileCAT subtext(gewsj,3,4);auszeile
CAT ", ";auszeileCAT gewhj;auszeileCAT texthalbjahr;putline(prot,auszeile);
auszeile:=untertitel2;auszeileCAT date;auszeileCAT blank;auszeileCAT 
timeofday;putline(prot,auszeile);line(prot);line(prot);putline(prot,
anfangstext);line(prot).ausgabefussaufbereiten:line(prot);IF ifehler=0THEN 
putline(prot,20*blank+"keine")ELSE putline(prot,20*blank+20*strich)FI .END 
PROC konsistenzpruefungstarten;PROC pruefungklassengruppendurchfuehren:
standardmeldung(meldnrinbearbeitung,name(dnrklassengruppen)+kennzhell);
holegueltigeschuelergruppen;gueltigeklassengruppen:="";
fehlerhafteklassengruppen:="";inittupel(dnrklassengruppen);statleseschleife(
dnrklassengruppen,"","",fnrkgklassengrp,fnrkgklassengrp,PROC 
klassengruppelesenundpruefen)END PROC pruefungklassengruppendurchfuehren;
PROC holegueltigeschuelergruppen:gueltigeschuelergruppen:="";inittupel(
dnraktschuelergruppen);statleseschleife(dnraktschuelergruppen,gewsj,gewhj,
fnrsgrpsj,fnrsgrphj,PROC schuelergruppelesen)END PROC 
holegueltigeschuelergruppen;PROC schuelergruppelesen(BOOL VAR b):IF dbstatus
<>0OR wert(fnrsgrpsj)<>gewsjOR wert(fnrsgrphj)<>gewhjTHEN b:=TRUE ELSE 
gueltigeschuelergruppenCAT jgstzweistellig(intwert(fnrsgrpjgst));
gueltigeschuelergruppenCAT text(wert(fnrsgrpkennung),laengekennung)FI END 
PROC schuelergruppelesen;PROC klassengruppelesenundpruefen(BOOL VAR b):TEXT 
VAR sugruppe,sugruppen;INT VAR possugruppe,laengesugruppen;IF dbstatus<>0
THEN b:=TRUE ELSE klassengruppe:=wert(fnrkgklassengrp);gueltigeklassengruppen
CAT text(klassengruppe,laengeklassengruppe);sugruppen:=wert(fnrkgschuelergrp)
;laengesugruppen:=length(sugruppen);possugruppe:=1;WHILE possugruppe<
laengesugruppenREP sugruppe:=subtext(sugruppen,possugruppe,possugruppe+
laengesugruppe-1);IF suchpos(gueltigeschuelergruppen,sugruppe,laengesugruppe)
=0AND sugruppeistnichtjgstTHEN fehlerprotokollieren(1,klassengruppe+awtrenner
+sugruppe+awtrenner);fehlerhafteklassengruppenCAT text(klassengruppe,
laengeklassengruppe)FI ;possugruppeINCR laengesugruppePER ;FI .
sugruppeistnichtjgst:subtext(sugruppe,3,6)<>"    ".END PROC 
klassengruppelesenundpruefen;PROC pruefungraumgruppendurchfuehren:
standardmeldung(meldnrinbearbeitung,name(dnrraumgruppen)+kennzhell);
holegueltigeraeume;gueltigeraumgruppen:="";fehlerhafteraumgruppen:="";
inittupel(dnrraumgruppen);statleseschleife(dnrraumgruppen,"","",fnrrgraumgrp,
fnrrgraumgrp,PROC raumgruppelesenundpruefen)END PROC 
pruefungraumgruppendurchfuehren;PROC holegueltigeraeume:gueltigeraeume:="";
inittupel(dnrschluessel);statleseschleife(dnrschluessel,sachgebietraum,"",
fnrschlsachgebiet,fnrschlschluessel,PROC raumlesen);END PROC 
holegueltigeraeume;PROC raumlesen(BOOL VAR b):IF dbstatus<>0COR wert(
fnrschlsachgebiet)>sachgebietraumTHEN b:=TRUE ELSE gueltigeraeumeCAT text(
wert(fnrschlschluessel),laengeraum)FI END PROC raumlesen;PROC 
raumgruppelesenundpruefen(BOOL VAR b):TEXT VAR alleraeume;INT VAR 
laengeraeume;IF dbstatus<>0THEN b:=TRUE ELSE raumgruppe:=wert(fnrrgraumgrp);
gueltigeraumgruppenCAT text(raumgruppe,laengeraum);alleraeume:=wert(
fnrrgraeume);laengeraeume:=length(alleraeume);posraum:=1;WHILE posraum<
laengeraeumeREP raum:=subtext(alleraeume,posraum,posraum+laengeraum-1);IF 
suchpos(gueltigeraeume,raum,laengeraum)=0THEN fehlerprotokollieren(2,
raumgruppe+awtrenner+raum+awtrenner);fehlerhafteraumgruppenCAT text(
raumgruppe,laengeraum)FI ;posraumINCR laengeraumPER ;FI .END PROC 
raumgruppelesenundpruefen;PROC pruefunglehrveranstaltungendurchfuehren:
standardmeldung(meldnrinbearbeitung,name(dnrlehrveranstaltungen)+kennzhell);
holegueltigeparaphen;holegueltigefaecher;gueltigelv:="";fehlerhaftelv:="";
gueltigekopplungen:="";inittupel(dnrlehrveranstaltungen);statleseschleife(
dnrlehrveranstaltungen,gewsj,gewhj,fnrlvsj,fnrlvhj,PROC lvlesenundpruefen)
END PROC pruefunglehrveranstaltungendurchfuehren;PROC holegueltigeparaphen:
gueltigeparaphen:="";ilehrer:=0;inittupel(dnrlehrer);statleseschleife(
dnrlehrer,"","",fnrlparaphe,fnrlparaphe,PROC paraphelesen);END PROC 
holegueltigeparaphen;PROC paraphelesen(BOOL VAR b):IF dbstatus<>0THEN b:=
TRUE ELSE gueltigeparaphenCAT text(wert(fnrlparaphe),laengeparaphe);ilehrer
INCR 1;lehrersollstd(ilehrer):=intwert(fnrlsollstd);lehreriststd(ilehrer):=0
FI END PROC paraphelesen;PROC holegueltigefaecher:gueltigefaecher:="";
inittupel(dnrfaecher);statleseschleife(dnrfaecher,"","",fnrffach,fnrffach,
PROC fachlesen);END PROC holegueltigefaecher;PROC fachlesen(BOOL VAR b):IF 
dbstatus<>0THEN b:=TRUE ELSE gueltigefaecherCAT text(wert(fnrffach),
laengefach)FI END PROC fachlesen;PROC lvlesenundpruefen(BOOL VAR b):IF 
dbstatus<>0OR wert(fnrlvhj)<>gewhjOR wert(fnrlvsj)<>gewsjTHEN b:=TRUE ELSE 
lvdatenpruefenFI .lvdatenpruefen:jgst:=jgstzweistellig(intwert(fnrlvjgst));
paraphe:=text(wert(fnrlvparaphe),laengeparaphe);fach:=subtext(wert(
fnrlvfachkennung),1,2);lv:=jgst+wert(fnrlvfachkennung);gueltigelvCAT text(lv,
laengelv);gueltigekopplungenCAT text(wert(fnrlvkopplung),laengekopplung);IF 
suchpos(gueltigefaecher,fach,laengefach)=0THEN fehlerprotokollieren(3,lv+
awtrenner+fach+awtrenner);fehlerhaftelvCAT text(lv,laengelv)FI ;posparaphe:=
suchpos(gueltigeparaphen,paraphe,laengeparaphe);IF posparaphe=0THEN 
fehlerprotokollieren(4,lv+awtrenner+paraphe+awtrenner);fehlerhaftelvCAT text(
lv,laengelv)ELSE lehrerstundenaufsummierenFI ;INT VAR fnrklgrp;FOR fnrklgrp
FROM fnrlvklgrp1UPTO fnrlvklgrp4REP klassengruppe:=wert(fnrklgrp);IF 
klassengruppe<>""THEN IF suchpos(gueltigeschuelergruppen,jgst+klassengruppe,
laengesugruppe)=0THEN IF intwert(fnrlvjgst)>0THEN IF jgst<>klassengruppeTHEN 
pruefeobgueltigeklassengruppeFI ELIF klassengruppeistkeinejgstTHEN 
pruefeobgueltigeklassengruppeFI FI ;FI ;PER ;INT VAR fnrraumgrp;FOR 
fnrraumgrpFROM fnrlvraumgrp1UPTO fnrlvraumgrp2REP raum:=wert(fnrraumgrp);IF 
raum<>""THEN raum:=text(raum,laengeraum);IF suchpos(gueltigeraeume,raum,
laengeraum)=0THEN IF suchpos(gueltigeraumgruppen,raum,laengeraum)=0THEN 
fehlerprotokollieren(7,lv+awtrenner+raum+awtrenner)ELIF suchpos(
fehlerhafteraumgruppen,raum,laengeraum)>0THEN fehlerprotokollieren(8,lv+
awtrenner+raum+awtrenner)FI FI ;FI ;PER ;.klassengruppeistkeinejgst:
jgstaufber(klassengruppe)<jgst05OR jgstaufber(klassengruppe)>jgst13.
pruefeobgueltigeklassengruppe:IF suchpos(gueltigeklassengruppen,klassengruppe
,laengeklassengruppe)=0THEN fehlerprotokollieren(5,lv+awtrenner+klassengruppe
+awtrenner)ELIF suchpos(fehlerhafteklassengruppen,klassengruppe,
laengeklassengruppe)>0THEN fehlerprotokollieren(6,lv+awtrenner+klassengruppe+
awtrenner)FI .lehrerstundenaufsummieren:ilehrer:=((posparaphe-1)DIV 
laengeparaphe)+1;lehreriststd(ilehrer):=lehreriststd(ilehrer)+intwert(
fnrlvwochenstd).END PROC lvlesenundpruefen;PROC 
pruefunglehrerstundenzahlendurchfuehren:standardmeldung(meldnrinbearbeitung,
name(dnrlehrer)+kennzhell);ilehrer:=1;posparaphe:=1;WHILE posparaphe<length(
gueltigeparaphen)REP IF lehreriststd(ilehrer)>lehrersollstd(ilehrer)THEN 
fehlerprotokollieren(9,subtext(gueltigeparaphen,posparaphe,posparaphe+
laengeparaphe-1)+awtrenner);FI ;ilehrerINCR 1;posparapheINCR laengeparaphe
PER .END PROC pruefunglehrerstundenzahlendurchfuehren;PROC 
pruefungzeitwuenschedurchfuehren:standardmeldung(meldnrinbearbeitung,name(
dnrzeitwuensche)+kennzhell);inittupel(dnrzeitwuensche);statleseschleife(
dnrzeitwuensche,gewsj,gewhj,fnrzwsj,fnrzwhj,PROC zeitwuenschelesenundpruefen)
END PROC pruefungzeitwuenschedurchfuehren;PROC zeitwuenschelesenundpruefen(
BOOL VAR b):IF dbstatus<>0OR wert(fnrzwhj)<>gewhjOR wert(fnrzwsj)<>gewsjTHEN 
b:=TRUE ELSE zeitwunschpruefenFI .zeitwunschpruefen:INT VAR bezuglaenge:=0;
TEXT VAR bezug,bezugsobjekt,bezugtext,bezugmenge;bezug:=wert(fnrzwbezug);IF 
bezug=bezugfachTHEN bezuglaenge:=laengefach;bezugtext:=bezugtextfach;
bezugmenge:=gueltigefaecherELIF bezug=bezugsugruppeTHEN bezuglaenge:=
laengesugruppe;bezugtext:=bezugtextsugruppe;bezugmenge:=
gueltigeschuelergruppenELIF bezug=bezugparapheTHEN bezuglaenge:=laengeparaphe
;bezugtext:=bezugtextparaphe;bezugmenge:=gueltigeparaphenELIF bezug=bezugraum
THEN bezuglaenge:=laengeraum;bezugtext:=bezugtextraum;bezugmenge:=
gueltigeraeumeELIF bezug=bezugkopplungTHEN bezuglaenge:=laengekopplung;
bezugtext:=bezugtextkopplung;bezugmenge:=gueltigekopplungenELSE LEAVE 
zeitwunschpruefenFI ;bezugsobjekt:=text(wert(fnrzwbezugsobjekt),bezuglaenge);
IF suchpos(bezugmenge,bezugsobjekt,bezuglaenge)=0THEN delete(dnrzeitwuensche)
;fehlerprotokollieren(10,bezugsobjekt+awtrenner+bezugtext+awtrenner)FI END 
PROC zeitwuenschelesenundpruefen;PROC pruefungstundenplandurchfuehren:INT 
VAR fstatusstuplan;BOOL VAR ok;stundenplanhalbjahrsetzen(gewhj,gewsj);
standardmeldung(meldnrstundenplanwirdaufbereitet,"");
stundenplanbasisundstundenplanholen(fstatusstuplan);IF fstatusstuplan=8THEN 
standardmeldung(meldnrbasisalt,"")FI ;IF fstatusstuplan=0OR fstatusstuplan=8
THEN pruefestundenplan;stundenplanreorganisierenundsichern(fstatusstuplan)
ELSE stundenplanfehlerbehandelnFI .stundenplanfehlerbehandeln:putline(prot,
"*** Der Stundenplan wurde nicht geprüft. ***").pruefestundenplan:TEXT VAR 
lvderzeit,paraphenderzeit,kopplungenderzeit,raeumederzeit;holezeitraster;
standardmeldung(meldnrinbearbeitung,"Stundenplan"+kennzhell);FOR izeitFROM 
erstestundeUPTO letztestundeREP lvderzeit:=datenderzeit(izeit,kennunglv);IF 
lvderzeit<>""THEN pruefeallelvderzeitFI PER .pruefeallelvderzeit:IF (
zeitrasterleisteSUB izeit)=kennzzeitrastersperrungTHEN poslv:=1;WHILE poslv<
length(lvderzeit)REP lv:=subtext(lvderzeit,poslv,poslv+laengelv-1);
planeintragloeschen(izeit,lv,ok);fehlerprotokollieren(18,tagstunde(izeit,
TRUE )+awtrenner+lv+awtrenner);poslvINCR laengelvPER ELSE 
weiterepruefungenzulvFI .weiterepruefungenzulv:paraphenderzeit:=datenderzeit(
izeit,kennungparaphe);kopplungenderzeit:=datenderzeit(izeit,kennungkopplung);
raeumederzeit:=datenderzeit(izeit,kennungraum);poslv:=1;WHILE poslv<length(
lvderzeit)REP lv:=subtext(lvderzeit,poslv,poslv+laengelv-1);IF suchpos(
gueltigelv,lv,laengelv)=0THEN planeintragloeschen(izeit,lv,ok);
fehlerprotokollieren(11,paramlvzeit)ELIF suchpos(fehlerhaftelv,lv,laengelv)>0
THEN fehlerprotokollieren(12,paramlvzeit)ELSE inhaltspruefungzueintragFI ;
poslvINCR laengelvPER .inhaltspruefungzueintrag:posparaphe:=((poslv-1)DIV 2)+
1;paraphe:=subtext(paraphenderzeit,posparaphe,posparaphe+laengeparaphe-1);
neueparaphe:=datenzurlv(kennungparaphe,lv);IF neueparaphe<>parapheTHEN IF 
suchpos(paraphenderzeit,neueparaphe,laengeparaphe)>0THEN fehlerprotokollieren
(14,paramparaphenwechsel)ELSE fehlerprotokollieren(13,paramparaphenwechsel);
posraum:=posparaphe;raum:=subtext(raeumederzeit,posraum,posraum+laengeraum-1)
;IF raum<>leerraumTHEN IF suchpos(gueltigeraeume,raum,laengeraum)=0THEN raum
:=leerraum;fehlerprotokollieren(15,paramlvzeit)FI ;FI ;planeintragvornehmen(
izeit,lv,raum,ok);FI ELSE posraum:=posparaphe;raum:=subtext(raeumederzeit,
posraum,posraum+laengeraum-1);IF raum<>leerraumTHEN IF suchpos(gueltigeraeume
,raum,laengeraum)=0THEN raum:=leerraum;fehlerprotokollieren(15,paramlvzeit);
planeintragvornehmen(izeit,lv,raum,ok);FI ;FI ;kopplung:=subtext(
kopplungenderzeit,poslv,poslv+laengekopplung-1);neuekopplung:=datenzurlv(
kennungkopplung,lv);IF neuekopplung<>kopplungTHEN fehlerprotokollieren(16,
paramkopplungswechsel);planeintragvornehmen(izeit,lv,raum,ok);kopplung:=
neuekopplungFI ;FI ;IF schuelergruppenschnittbeizeit(izeit,kennungkopplung,
kopplung,"")THEN fehlerprotokollieren(17,paramlvzeit)FI .END PROC 
pruefungstundenplandurchfuehren;TEXT PROC paramlvzeit:TEXT VAR param:=lv;
paramCAT awtrenner;paramCAT tagstunde(izeit,TRUE );paramCAT awtrenner;param
END PROC paramlvzeit;TEXT PROC paramparaphenwechsel:TEXT VAR param:=
paramlvzeit;paramCAT paraphe;paramCAT awtrenner;paramCAT neueparaphe;param
CAT awtrenner;paramEND PROC paramparaphenwechsel;TEXT PROC 
paramkopplungswechsel:TEXT VAR param:=paramlvzeit;paramCAT kopplung;paramCAT 
awtrenner;paramCAT neuekopplung;paramCAT awtrenner;paramEND PROC 
paramkopplungswechsel;PROC holezeitraster:zeitrasterleiste:=letztestunde*
blank;inittupel(dnrzeitraster);statleseschleife(dnrzeitraster,gewsj,gewhj,
fnrzrsj,fnrzrhj,PROC erstellezeitrasterleiste);END PROC holezeitraster;PROC 
erstellezeitrasterleiste(BOOL VAR b):IF wert(fnrzrsj)<>gewsjCOR wert(fnrzrhj)
<>gewhjCOR dbstatus<>0THEN b:=TRUE ELSE IF wert(fnrzrkennungteil)=
kennzzeitrastersperrungTHEN replace(zeitrasterleiste,intwert(fnrzrtagstunde),
kennzzeitrastersperrung)FI FI END PROC erstellezeitrasterleiste;PROC 
pruefungaufsichtsplandurchfuehren:standardmeldung(meldnrinbearbeitung,name(
dnraufsichtsplan)+kennzhell);holegueltigeaufsichtsorte;
holegueltigeaufsichtszeiten;inittupel(dnraufsichtsplan);statleseschleife(
dnraufsichtsplan,gewsj,gewhj,fnrapsj,fnraphj,PROC aufsichtenlesenundpruefen)
END PROC pruefungaufsichtsplandurchfuehren;PROC holegueltigeaufsichtsorte:
gueltigeaufsichtsorte:="";inittupel(dnrschluessel);statleseschleife(
dnrschluessel,sachgebietaufsichtsorte,"",fnrschlsachgebiet,fnrschlschluessel,
PROC aufsichtsortlesen);END PROC holegueltigeaufsichtsorte;PROC 
aufsichtsortlesen(BOOL VAR b):IF dbstatus<>0COR wert(fnrschlsachgebiet)>
sachgebietaufsichtsorteTHEN b:=TRUE ELSE gueltigeaufsichtsorteCAT text(wert(
fnrschlschluessel),laengeorte)FI END PROC aufsichtsortlesen;PROC 
holegueltigeaufsichtszeiten:gueltigeaufsichtszeiten:="";inittupel(
dnraufsichtszeiten);statleseschleife(dnraufsichtszeiten,gewsj,gewhj,fnrazsj,
fnrazhj,PROC aufsichtszeitlesen)END PROC holegueltigeaufsichtszeiten;PROC 
aufsichtszeitlesen(BOOL VAR b):IF dbstatus<>0OR wert(fnrazsj)<>gewsjOR wert(
fnrazhj)<>gewhjTHEN b:=TRUE ELSE gueltigeaufsichtszeitenCAT text(wert(
fnrazaufsichtszeit),laengeaufsichtszeit)FI END PROC aufsichtszeitlesen;PROC 
aufsichtenlesenundpruefen(BOOL VAR b):IF dbstatus<>0OR wert(fnraphj)<>gewhj
OR wert(fnrapsj)<>gewsjTHEN b:=TRUE ELSE aufsichtsplandatenpruefenFI .
aufsichtsplandatenpruefen:aufsichtszeit:=text(wert(fnrapaufsichtszeit),
laengeaufsichtszeit);IF suchpos(gueltigeaufsichtszeiten,aufsichtszeit,
laengeaufsichtszeit)=0THEN delete(dnraufsichtsplan);fehlerprotokollieren(19,
aufsichtszeit+awtrenner)ELSE ort:=text(wert(fnrapaufsichtsort),laengeorte);
IF suchpos(gueltigeaufsichtsorte,ort,laengeorte)=0THEN fehlerprotokollieren(
20,aufsichtszeit+awtrenner+ort+awtrenner)FI ;paraphe:=text(wert(fnrapparaphe)
,laengeparaphe);IF suchpos(gueltigeparaphen,paraphe,laengeparaphe)=0THEN 
fehlerprotokollieren(21,aufsichtszeit+awtrenner+ort+awtrenner)FI ;FI END 
PROC aufsichtenlesenundpruefen;PROC konsistenzpruefungprotokolldrucken(BOOL 
CONST drucken):IF druckenTHEN print(protname)FI ;forget(protname,quiet);enter
(2)END PROC konsistenzpruefungprotokolldrucken;PROC fehlerprotokollieren(INT 
CONST fallnr,TEXT CONST aktwerte):TEXT VAR aktuellerwert;INT VAR awpos,
awendepos,epos;LET maxfehler=100;IF ifehler>maxfehlerTHEN LEAVE 
fehlerprotokollierenELIF ifehler=maxfehlerTHEN putline(prot,
"keine weitere Fehlerprotokollierung");ifehlerINCR 1;LEAVE 
fehlerprotokollierenFI ;suchfall:=fall;suchfallCAT text(fallnr);suchfallCAT 
doppelpunkt;toline(fehldat,1);col(fehldat,1);WHILE NOT eof(fehldat)REP 
downety(fehldat,suchfall);readrecord(fehldat,zeile);IF pos(zeile,suchfall)=1
THEN down(fehldat);behandlefallELSE col(fehldat,col(fehldat)+1)FI PER .
behandlefall:ifehlerINCR 1;auszeile:=text(ifehler);auszeileCAT ") ";INT VAR 
praefixlaenge:=length(auszeile);awpos:=1;WHILE NOT eof(fehldat)REP readrecord
(fehldat,zeile);IF pos(zeile,fall)>0THEN line(prot);LEAVE behandlefallFI ;
ersetzeevtlersatzzeichendurchaktuellewerte;auszeileCAT zeile;putline(prot,
auszeile);down(fehldat);auszeile:=praefixlaenge*blankPER .
ersetzeevtlersatzzeichendurchaktuellewerte:epos:=pos(zeile,ersatzzeichen);
WHILE epos>0REP awendepos:=pos(aktwerte,awtrenner,awpos);aktuellerwert:=
subtext(aktwerte,awpos,awendepos-1);awpos:=awendepos+1;change(zeile,
ersatzzeichen,aktuellerwert);epos:=pos(zeile,ersatzzeichen,epos+length(
aktuellerwert));PER .END PROC fehlerprotokollieren;INT PROC suchpos(TEXT 
CONST quelle,suchtext,INT CONST laenge):INT VAR findpos:=pos(quelle,suchtext)
;WHILE findpos>0REP IF findposMOD laenge=1THEN LEAVE suchposWITH findposELSE 
findpos:=pos(quelle,suchtext,findpos+1);FI PER ;findposEND PROC suchpos;TEXT 
PROC jgstzweistellig(INT CONST intjgst):IF intjgst=0THEN "00"ELIF intjgst>4
AND intjgst<10THEN "0"+text(intjgst)ELSE text(intjgst)FI END PROC 
jgstzweistellig;END PACKET konsistenzpruefung