app/schulis/2.2.1/src/4.konsistenzpruefung

Raw file
Back to index

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