PACKET lehrbefaehigungenlehrerweiselisteDEFINES
lehrerwlehrbeflidruckenoderzeigen:LET datenraum="datenraum",ausgkopflaenge=2,
ueberschriftenzeilen=2,anzahlparapheninlehrbef=300,neunfelder=9,niltext="",
blank=" ",null=0,strich="-",mnrbearbeitetwerden=352,mnrlistewirdgedruckt=58,
mnrauswahlnichtsinnvoll=56,mnrlistewirdaufbereiet=190;INT VAR zeilenzaehler,
druckzeilenzahl,anzahlparindateilehrbef,anzahlparindateilehrer,x,y,
eingabestatus;BOUND ROW anzahlparapheninlehrbefROW neunfelderTEXT VAR
datenauszweidateien;FILE VAR ausgabedatei;TEXT CONST ausgabedateiname:=
"Liste der Lehrbefähigungen",teiltextmeldung:=
"Lehrerparaphen mit den Anfangsbuchstaben:",spaltentext:=
"Lehrer Soll. Pfl. Lehrbefähigung Fach/Art",tasten:="vr",spaltenstrich:=60*
strich;TEXT VAR neueranfbuchstabe:="",anfbuchstabe:="",ueberschrift:=
"Liste der Lehrbefähigungen aller Lehrer",paraphe:="",aufbereitetezeile:="";
BOOL VAR ausgabedrucker:=FALSE ;LET AUSGKOPFDRUCK =ROW ausgkopflaengeTEXT ;
AUSGKOPFDRUCK VAR ausgkopfdruck;PROC lehrerwlehrbeflidruckenoderzeigen(INT
CONST nr):anzahlparindateilehrer:=int(records(dnrlehrer));SELECT nrOF CASE 1:
druckenoderbildschirmausgabeCASE 2:druckennachbildschirmausgabe;return(2);
forget(ausgabedateiname,quiet)CASE 3:rowimdatenraumloeschen;enter(2);forget(
ausgabedateiname,quiet)ENDSELECT .END PROC lehrerwlehrbeflidruckenoderzeigen;
PROC rowimdatenraumloeschen:forget(datenraum,quiet)END PROC
rowimdatenraumloeschen;PROC druckennachbildschirmausgabe:
lehrerwlehrbefdruckenEND PROC druckennachbildschirmausgabe;PROC
druckenoderbildschirmausgabe:LET fnrausgdrucker=2,fnrausgbild=3;IF
eingabenrichtigTHEN standardmeldung(mnrlistewirdaufbereiet,niltext);
datenauszweidateienholenundimrowablegen;ausgabedrucker:=(standardmaskenfeld(
fnrausgbild)=niltext);IF ausgabedruckerTHEN lehrerwlehrbefdrucken;return(1);
ELSE ausgabedatei:=sequentialfile(output,"Liste der Lehrbefähigungen");
lehrerwlehrbefaufbildschirmzeigenFI ;ELSE meldefehler;return(1)FI ;.
eingabenrichtig:standardpruefe(5,fnrausgdrucker,fnrausgbild,null,niltext,
eingabestatus);IF eingabestatus=0THEN TRUE ELSE FALSE FI .meldefehler:
standardmeldung(mnrauswahlnichtsinnvoll,niltext)END PROC
druckenoderbildschirmausgabe;PROC lehrerwlehrbefaufbildschirmzeigen:
datenausrowinshowdateischreiben;dateiaufbildschirmausgeben;END PROC
lehrerwlehrbefaufbildschirmzeigen;PROC lehrerwlehrbefdrucken:
druckdateimitrowdatenfuellendruckenundloeschen;rowimdatenraumloeschenEND
PROC lehrerwlehrbefdrucken;PROC
druckdateimitrowdatenfuellendruckenundloeschen:TEXT VAR zeile;INT VAR
zeilenanz:=1,x:=1;druckvorbereiten;variablenfuerdrucksetzen;initdruckkopf(
ueberschrift);initausgabekopfdruck;druckkopfschreiben;
spaltenueberschriftdrucken;setzemitseitennummern(TRUE );x:=1;zeilenzaehler:=1
;WHILE zeilenanz<=anzahlparindateilehrbefREP zeileaufbereiten;
ggfmeldunganfbuchstabe;neueranfbuchstabe:=anfbuchstabe;IF zeilenzaehler>
druckzeilenzahlTHEN seitenwechsel;spaltenueberschriftdrucken;zeilenzaehler:=0
;FI ;druckzeileschreiben(zeile);xINCR 1;zeilenanzINCR 1;zeilenzaehlerINCR 1;
PER ;standardmeldung(mnrlistewirdgedruckt,niltext);drucknachbereiten;.
ggfmeldunganfbuchstabe:IF anfbuchstabegeaendertTHEN meldunganfbuchstabeFI .
anfbuchstabegeaendert:anfbuchstabe<>neueranfbuchstabe.meldunganfbuchstabe:
LET markiert="#";standardmeldung(mnrbearbeitetwerden,teiltextmeldung+
neueranfbuchstabe+markiert);.variablenfuerdrucksetzen:druckzeilenzahl:=
drucklaenge(ueberschriftenzeilen)-ausgkopflaenge.zeileaufbereiten:y:=1;zeile
:=text(datenauszweidateien(x)(y),8);FOR yFROM 8UPTO neunfelderREP zeileCAT
text(datenauszweidateien(x)(y),6)PER ;FOR yFROM 2UPTO 7REP zeileCAT text(
datenauszweidateien(x)(y),7)PER ;anfbuchstabe:=(datenauszweidateien(x)(1))
SUB 1;END PROC druckdateimitrowdatenfuellendruckenundloeschen;PROC
initausgabekopfdruck:ausgkopfdruck(1):=spaltentext;ausgkopfdruck(2):=
spaltenstrichEND PROC initausgabekopfdruck;PROC spaltenueberschriftdrucken:
INT VAR l;FOR lFROM 1UPTO ausgkopflaengeREP druckzeileschreiben(ausgkopfdruck
(l))PER END PROC spaltenueberschriftdrucken;PROC
datenausrowinshowdateischreiben:putline(ausgabedatei,blank);putline(
ausgabedatei,spaltentext);putline(ausgabedatei,spaltenstrich);putline(
ausgabedatei,blank);FOR xFROM 1UPTO anzahlparindateilehrbefREP
zeileaufbereiten;aufbereitetezeileindateischreibenPER .zeileaufbereiten:y:=1;
aufbereitetezeile:=text(datenauszweidateien(x)(y),8);FOR yFROM 8UPTO
neunfelderREP aufbereitetezeileCAT text(datenauszweidateien(x)(y),6)PER ;FOR
yFROM 2UPTO 7REP aufbereitetezeileCAT text(datenauszweidateien(x)(y),7)PER ;.
aufbereitetezeileindateischreiben:putline(ausgabedatei,aufbereitetezeile);
aufbereitetezeile:=niltextEND PROC datenausrowinshowdateischreiben;PROC
dateiaufbildschirmausgeben:zeigedatei(ausgabedateiname,tasten);END PROC
dateiaufbildschirmausgeben;PROC datenauszweidateienholenundimrowablegen:
datenauszweidateien:=new(datenraum);lehrerdatenrowinitialisieren;inittupel(
ixlbpar);x:=0;y:=1;statleseschleife(ixlbpar,"","",fnrlbparaphe,fnrlbfach,
PROC holedatenausdateilehrbefaehigungeninsrow);anzahlparindateilehrbef:=x;
inittupel(dnrlehrer);x:=1;y:=1;statleseschleife(dnrlehrer,"","",fnrlparaphe,
fnrlfamname,PROC holedatenausdateilehrerinsrow);.lehrerdatenrowinitialisieren
:FOR xFROM 1UPTO anzahlparindateilehrerREP FOR yFROM 1UPTO neunfelderREP
datenauszweidateien(x)(y):=niltext;PER ;PER END PROC
datenauszweidateienholenundimrowablegen;PROC
holedatenausdateilehrbefaehigungeninsrow(BOOL VAR b):IF dbstatus<>0THEN b:=
TRUE ELSE IF paraphe<>wert(fnrlbparaphe)THEN xINCR 1;y:=1;paraphe:=wert(
fnrlbparaphe);datenauszweidateien(x)(y):=paraphe;FI ;yINCR 1;
datenauszweidateien(x)(y):=text(wert(fnrlbfach),2)+"/"+wert(fnrlbart);FI ;
END PROC holedatenausdateilehrbefaehigungeninsrow;PROC
holedatenausdateilehrerinsrow(BOOL VAR b):IF dbstatus<>0THEN b:=TRUE ELSE IF
wert(fnrlparaphe)=datenauszweidateien(x)(1)THEN datenauszweidateien(x)(8):=
wert(fnrlsollstd);datenauszweidateien(x)(9):=wert(fnrlpflichtstd);xINCR 1;FI
;FI ;END PROC holedatenausdateilehrerinsrow;PROC statleseschleife(INT CONST
indexnummer,TEXT CONST startschluessel1,startschluessel2,INT CONST feldnr1,
feldnr2,PROC (BOOL VAR )stataktion):vorbereitungen;leseschleife.
vorbereitungen:LET maxleseanzahl=10;BOOL VAR vorzeitigesende:=FALSE ;#INT
CONST maxblock:=maxfeldDIV zahlderfelder;#INT VAR anzahltupel;#INT CONST
maxanzahl:=(maxintDIV maxblock)*maxblock#.leseschleife:putwert(feldnr1,
startschluessel1);putwert(feldnr2,startschluessel2);search(indexnummer);IF
dbstatus=0THEN einleseschleifeFI .einleseschleife:zaehlen;WHILE NOT schluss
REP anzahltupel:=maxleseanzahl;multisucc(indexnummer,anzahltupel);
stackdurchlaufPER ;.stackdurchlauf:IF anzahltupel=0THEN dbstatus(1)ELSE
WHILE anzahltupel<>0REP lesen;zaehlen;IF vorzeitigesendeTHEN dbstatus(1);
anzahltupel:=0FI ;PER FI .schluss:dbstatus<>0.zaehlen:stataktion(
vorzeitigesende).lesen:multisucc;anzahltupelDECR 1;.END PROC statleseschleife
;END PACKET lehrbefaehigungenlehrerweiseliste;