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;