PACKET unterrichtsverteilunglistenDEFINES unterrichtsverteilungspezielleteile :LET AUSGFELD =ROW ausgfeldlaengeTEXT ,AUSGKOPF =ROW ausgkopflaengeTEXT , AUSGKOPFDRUCK =ROW ausgkopflaengeTEXT ;AUSGFELD VAR ausgfeld;AUSGKOPF VAR ausgkopf;AUSGKOPFDRUCK VAR ausgkopfdruck;LET maskeunterrichtsverteilung= "ms liste unterrichtsverteilung eingang",ausgfeldlaenge=1, anzahlderobjekteprobildschirm=17,ueberschriftenzeilen=2,ausgkopflaenge=2, spaltentrenner=" ",zweierspaltenbreite=2,viererspaltenbreite=4, fuenferspaltenbreite=5,achterspaltenbreite=8,neunerspaltenbreite=9, zehnerspaltenbreite=10,unterrichtsverteilunganfpos=2,niltext="",blank=" ", null=0,strich="-",mnrfachfalsch=305,mnrjgstfalsch=305,mnrbearbeitetwerden=352 ,mnrparapheungueltig=344,mnrauswahlnichtsinnvoll=56;TEXT VAR neueranfbuchstabe,teiltextmeldung,unterrichtsverteilungueberschrift:="", schuljahr,halbjahr,altejahrgangsstufe:="",alteparaphe:="",altekopplung:="", altesfach,gewaehltejgst,gewaehlteparaphe,gewaehltesfach,bearbeitungsschuljahr ,bearbeitungshalbjahr,jahrgangsstufe:="",fach,kennung,kopplung,paraphe, wochenstdn,klassengruppe1,klassengruppe2,klassengruppe3,klassengruppe4, raumgruppe1,raumgruppe2,anfbuchstabe,auswahlnichtsinnvoll;TEXT CONST unterstreichung:=bildbreite*"-",leerzeile:=bildbreite*blank,textueb1:= "Jgst. ",textueb2:="Fach Kenng. ",textueb3:="Paraphe ",textueb4:="Kopplung " ,textueb5:="Wstd. Klassengruppen Räume ";TEXT VAR textueberschrift :="";INT VAR eingabestatus,bildanfang,spalte2druckbreite,druckzeilenzahl, aktuelleindexnr:=dnrlehrveranstaltungen,feldnr,jgsthilfsvar;INT CONST groesstejgst:=13,kleinstejgst:=5;BOOL VAR geplanteshjgewaehlt,erstezeile:= FALSE ,sortjgstalle,sortjgstbest,sortparaphenalle,sortparaphebest, sortkopplungen,sortfaecher,sortbestfach;BOOL PROC multistop:BOOL VAR b;IF dbstatus=okTHEN IF sortjgstalleXOR sortparaphenalleXOR sortkopplungenXOR sortfaecherTHEN b:=bearbeitungshalbjahr=wert(fnrlvhj)ELIF sortjgstbestTHEN b :=gewaehltejgst=wert(fnrlvjgst)AND bearbeitungshalbjahr=wert(fnrlvhj)ELIF sortparaphebestTHEN b:=gewaehlteparaphe=wert(fnrlvparaphe)AND bearbeitungshalbjahr=wert(fnrlvhj)ELIF sortbestfachTHEN b:=text( gewaehltesfach,2)=text(wert(fnrlvfachkennung),2)AND bearbeitungshalbjahr=wert (fnrlvhj)FI ;ELSE b:=FALSE FI ;bEND PROC multistop;BOOL PROC multistopsim: setzebestandende(FALSE );BOOL VAR b:=multistop;setzebestandende(NOT b);bEND PROC multistopsim;PROC unterrichtsverteilungspezielleteile(INT CONST nr): SELECT nrOF CASE 1:unterrichtsverteilungdialogvorbereitenCASE 2: unterrichtsverteilungeingabenrichtigCASE 3: unterrichtsverteilunglistenvorbereitenCASE 4: unterrichtsverteilungdruckvorbereitenCASE 5:unterrichtsverteilungseitedrucken CASE 6:unterrichtsverteilungbildschirmvorbereitenCASE 7: unterrichtsverteilungseitezeigenENDSELECT .END PROC unterrichtsverteilungspezielleteile;PROC unterrichtsverteilungdialogvorbereiten:unterrichtsverteilungueberschrift:= text(vergleichsknoten);setzeanfangswerte(maskeunterrichtsverteilung, unterrichtsverteilunganfpos)END PROC unterrichtsverteilungdialogvorbereiten; PROC unterrichtsverteilungeingabenrichtig:LET fnrlehrveranstgn=2, fnrlehrveranstgnjgst=3,fnrkopplungen=4,fnrparaphen=5,fnrbestparaphe=6, fnrfaecher=7,fnrfach=8,fnraktuelleshj=9,fnrausgbild=10,fnrausgdrucker=11; sortjgstalle:=FALSE ;sortjgstbest:=FALSE ;sortparaphenalle:=FALSE ; sortparaphebest:=FALSE ;sortkopplungen:=FALSE ;sortfaecher:=FALSE ; sortbestfach:=FALSE ;IF ausgabemediumkorrektgewaehltTHEN setzeausgabedrucker( standardmaskenfeld(fnrausgbild)=niltext);geplanteshjgewaehlt:= standardmaskenfeld(fnraktuelleshj)=niltext; sortierartpruefenundmerkenbzwfehlermeldungausgeben;ELSE meldefehlerauswahldruckerbildschirm;setzeeingabetest(FALSE )FI . ausgabemediumkorrektgewaehlt:standardpruefe(5,fnrausgbild,fnrausgdrucker,null ,niltext,eingabestatus);eingabestatus=0. sortierartpruefenundmerkenbzwfehlermeldungausgeben:IF (standardmaskenfeld( fnrkopplungen)=niltextAND standardmaskenfeld(fnrparaphen)=niltextAND standardmaskenfeld(fnrbestparaphe)=niltextAND standardmaskenfeld(fnrfaecher)= niltextAND standardmaskenfeld(fnrfach)=niltext)THEN IF standardmaskenfeld( fnrlehrveranstgn)=niltextTHEN meldefehler;setzeeingabetest(FALSE )ELSE sortierungnachlehrveranstaltungenweiterpruefenFI ;ELSE IF NOT ( standardmaskenfeld(fnrlehrveranstgn)=niltextAND standardmaskenfeld( fnrlehrveranstgnjgst)=niltext)THEN meldefehler;setzeeingabetest(FALSE )ELSE sortierungnachkopplungenparaphenoderfaechernpruefenFI ;FI . sortierungnachlehrveranstaltungenweiterpruefen:IF standardmaskenfeld( fnrlehrveranstgnjgst)=niltextTHEN sortjgstalle:=TRUE ;setzeeingabetest(TRUE ) ELSE IF jgstkorrektTHEN sortjgstbest:=TRUE ;setzeeingabetest(TRUE )ELSE meldefehlerjgst;setzeeingabetest(FALSE )FI ;FI ;. sortierungnachkopplungenparaphenoderfaechernpruefen:IF standardmaskenfeld( fnrkopplungen)<>niltextTHEN IF standardmaskenfeld(fnrparaphen)=niltextAND standardmaskenfeld(fnrbestparaphe)=niltextAND standardmaskenfeld(fnrfaecher)= niltextAND standardmaskenfeld(fnrfach)=niltextTHEN sortkopplungen:=TRUE ; setzeeingabetest(TRUE )ELSE meldefehler;setzeeingabetest(FALSE )FI ;ELSE IF standardmaskenfeld(fnrparaphen)<>niltextTHEN IF standardmaskenfeld(fnrfaecher )=niltextAND standardmaskenfeld(fnrfach)=niltextTHEN weiterepruefungzursortierungparaphenELSE meldefehler;setzeeingabetest(FALSE ) FI ;ELSE IF standardmaskenfeld(fnrfaecher)<>niltextTHEN IF standardmaskenfeld (fnrparaphen)=niltextAND standardmaskenfeld(fnrbestparaphe)=niltextTHEN weiterepruefungzursortierungfaecherELSE meldefehler;setzeeingabetest(FALSE ) FI ;FI ;FI ;FI ;.weiterepruefungzursortierungparaphen:IF standardmaskenfeld( fnrbestparaphe)=niltextTHEN sortparaphenalle:=TRUE ;setzeeingabetest(TRUE ) ELSE gewaehlteparaphe:=standardmaskenfeld(fnrbestparaphe);IF paraphekorrekt THEN sortparaphebest:=TRUE ;setzeeingabetest(TRUE )FI ;FI ;. weiterepruefungzursortierungfaecher:IF standardmaskenfeld(fnrfach)=niltext THEN sortfaecher:=TRUE ;setzeeingabetest(TRUE )ELSE gewaehltesfach:= standardmaskenfeld(fnrfach);IF fachkorrektTHEN sortbestfach:=TRUE ; setzeeingabetest(TRUE )FI ;FI ;.meldefehlerauswahldruckerbildschirm:infeld( fnrausgbild);standardmeldung(mnrauswahlnichtsinnvoll,niltext).meldefehler: meldungstext(mnrauswahlnichtsinnvoll,auswahlnichtsinnvoll);standardmeldung( auswahlnichtsinnvoll,niltext).jgstkorrekt:gewaehltejgst:=standardmaskenfeld( fnrlehrveranstgnjgst);jgsthilfsvar:=int(gewaehltejgst);IF NOT lastconversionokTHEN LEAVE jgstkorrektWITH FALSE FI ;IF jgsthilfsvar<10THEN gewaehltejgst:=text(jgsthilfsvar);FI ;jgsthilfsvar<=groesstejgstAND jgsthilfsvar>=kleinstejgst.paraphekorrekt:inittupel(dnrlehrer);putwert( fnrlparaphe,gewaehlteparaphe);search(dnrlehrer,TRUE );dbstatus=ok.fachkorrekt :inittupel(dnrfaecher);putwert(fnrffach,gewaehltesfach);search(dnrfaecher, TRUE );dbstatus=ok.fehlerfalscheparaphe:standardmeldung(mnrparapheungueltig, niltext);infeld(fnrbestparaphe);.meldefehlerjgst:standardmeldung( mnrjgstfalsch,niltext);infeld(fnrlehrveranstgnjgst);.END PROC unterrichtsverteilungeingabenrichtig;PROC unterrichtsverteilunglistenvorbereiten:BOOL VAR b;initspalten; setzespaltentrenner(spaltentrenner);bearbeitungshalbjahr:=schulkenndatum( "Schulhalbjahr");bearbeitungsschuljahr:=schulkenndatum("Schuljahr");IF geplanteshjgewaehltTHEN geplanteshjundsjberechnen(bearbeitungshalbjahr, bearbeitungsschuljahr);FI ;inittupel(dnrlehrveranstaltungen);setzeidentiwert( "");initobli(anzahlderobjekteprobildschirm);putwert(fnrlvsj, bearbeitungsschuljahr);putwert(fnrlvhj,bearbeitungshalbjahr);IF sortjgstalle XOR sortjgstbestTHEN sortierungnachprimärindexvorbereitenELIF sortkopplungen THEN sortierungnachsekindexlvkopplungvorbereitenELIF sortfaecherOR sortbestfachTHEN sortierungnachsekindexlvfachvorbereitenELSE sortierungnachsekindexlvparaphevorbereitenFI ;objektlistestarten( aktuelleindexnr,bearbeitungsschuljahr,feldnr,TRUE ,b);setzebestandende(NOT multistopCOR b);.sortierungnachprimärindexvorbereiten:setzescanstartwert(""); setzescanendewert("�");textueberschrift:=(textueb1+textueb2+textueb4+2*blank+ textueb3+blank+textueb5);aktuelleindexnr:=dnrlehrveranstaltungen;IF sortjgstbestTHEN putwert(fnrlvjgst,gewaehltejgst);feldnr:=fnrlvfachkennung; ELSE feldnr:=fnrlvjgst;setzescanendewert("255");FI ;. sortierungnachsekindexlvkopplungvorbereiten:textueberschrift:=(textueb4+ textueb1+textueb2+2*blank+textueb3+2*blank+textueb5);aktuelleindexnr:= ixlvsjhjkopp;feldnr:=fnrlvkopplung;. sortierungnachsekindexlvparaphevorbereiten:textueberschrift:=(textueb3+ textueb1+textueb2+textueb4+2*blank+textueb5);aktuelleindexnr:=ixlvsjhjpar;IF sortparaphebestTHEN putwert(fnrlvparaphe,gewaehlteparaphe);feldnr:= fnrlvfachkennung;ELSE feldnr:=fnrlvparapheFI ;. sortierungnachsekindexlvfachvorbereiten:textueberschrift:=(textueb2+textueb1+ textueb4+textueb3+2*blank+textueb5);aktuelleindexnr:=ixlvsjhjkenn;IF sortbestfachTHEN feldnr:=fnrlvfachkennung;putwert(fnrlvfachkennung, gewaehltesfach);setzescanstartwert(gewaehltesfach);setzescanendewert(text( gewaehltesfach,2)+code(255));ELSE feldnr:=fnrlvfachkennung;FI ;END PROC unterrichtsverteilunglistenvorbereiten;PROC unterrichtsverteilungbildschirmvorbereiten:LET fnrausganf=2; unterrichtsverteilungueberschrift:="Unterrichtsverteilung im Schuljahr "+( text(bearbeitungsschuljahr,2)+"/"+text(bearbeitungsschuljahr,2,3)+", "+ bearbeitungshalbjahr+". Halbjahr");standardkopfmaskeaktualisieren( unterrichtsverteilungueberschrift);bildanfang:=fnrausganf; setzebildanfangsposition(bildanfang);INT VAR i;setzespaltenbreite(bildbreite) ;spaltenweise(textueberschrift);ausgfeld(1):=zeile;ausgfeld(1)IN ausgabepos; erhoeheausgabeposumeins;spaltenweise(length(textueberschrift)*strich); ausgfeld(1):=zeile;ausgfeld(1)IN ausgabepos;erhoeheausgabeposumeins; setzebildanfangsposition(4);spaltendefinierenEND PROC unterrichtsverteilungbildschirmvorbereiten;PROC unterrichtsverteilungseitezeigen:altejahrgangsstufe:=niltext;alteparaphe:= niltext;altekopplung:=niltext;altesfach:=niltext;blaettern(PROC (INT CONST ) unterrichtsverteilungzeigen,aktion,TRUE ,TRUE ,BOOL PROC multistop)END PROC unterrichtsverteilungseitezeigen;PROC unterrichtsverteilungzeigen(INT CONST x ):unterrichtsverteilungholen;unterrichtsverteilungaufbereitenbild; unterrichtsverteilungaufbildschirm;END PROC unterrichtsverteilungzeigen;PROC unterrichtsverteilungaufbereitenbild:IF sortkopplungenTHEN kopplungausgeben; spaltenweise(jahrgangsstufe);spaltenweise(fach);spaltenweise(kennung); spaltenweise(blank);spaltenweise(paraphe);ELIF sortjgstalleXOR sortjgstbest THEN jahrgangsstufeausgeben;spaltenweise(fach);spaltenweise(kennung); spaltenweise(kopplung);spaltenweise(paraphe);ELIF sortparaphenalleXOR sortparaphebestTHEN parapheausgeben;spaltenweise(blank);spaltenweise( jahrgangsstufe);spaltenweise(fach);spaltenweise(kennung);spaltenweise( kopplung);ELIF sortfaecherXOR sortbestfachTHEN fachausgeben;spaltenweise( kennung);spaltenweise(jahrgangsstufe);spaltenweise(kopplung);spaltenweise( paraphe);FI ;spaltenweise(wochenstdn);spaltenweise(blank);spaltenweise( klassengruppe1);spaltenweise(klassengruppe2);spaltenweise(klassengruppe3); spaltenweise(klassengruppe4);spaltenweise(raumgruppe1);spaltenweise( raumgruppe2);.jahrgangsstufeausgeben:IF altejahrgangsstufe<>jahrgangsstufe THEN spaltenweise(jahrgangsstufe);altejahrgangsstufe:=jahrgangsstufe;ELSE spaltenweise(blank)FI ;.parapheausgeben:IF alteparaphe<>parapheTHEN spaltenweise(paraphe);alteparaphe:=parapheELSE spaltenweise(blank)FI ;. fachausgeben:IF altesfach<>fachTHEN spaltenweise(fach);altesfach:=fachELSE spaltenweise(blank)FI ;.kopplungausgeben:IF altekopplung<>kopplungTHEN spaltenweise(kopplung);altekopplung:=kopplung;ELSE spaltenweise(blank)FI ; END PROC unterrichtsverteilungaufbereitenbild;PROC unterrichtsverteilungaufbildschirm:INT VAR i;FOR iFROM 1UPTO ausgfeldlaenge REP ausgfeld(i):=zeile;ausgfeld(i)IN ausgabepos;erhoeheausgabeposumeins;PER ; END PROC unterrichtsverteilungaufbildschirm;PROC unterrichtsverteilungdruckvorbereiten:setzebestandende(FALSE );anfbuchstabe:= " ";druckvorbereiten;variablenfuerdrucksetzen; unterrichtsverteilungueberschrift:="Unterrichtsverteilung im Schuljahr "+( text(bearbeitungsschuljahr,2)+"/"+text(bearbeitungsschuljahr,2,3)+", "+ bearbeitungshalbjahr+". Halbjahr");initdruckkopf(zentriert( unterrichtsverteilungueberschrift,druckbreite),zentriert(length( unterrichtsverteilungueberschrift)*strich,druckbreite));spaltendefinieren; initausgabekopfdruck;inittupel(dnrlehrveranstaltungen);putwert(fnrlvsj, bearbeitungsschuljahr);putwert(fnrlvhj,bearbeitungshalbjahr);IF sortjgstbest THEN putwert(fnrlvjgst,gewaehltejgst);ELIF sortparaphebestTHEN putwert( fnrlvparaphe,gewaehlteparaphe);ELIF sortbestfachTHEN putwert(fnrlvfachkennung ,gewaehltesfach);FI ;lesenvorbereitendruck(PROC (INT CONST ,BOOL PROC ,INT VAR )scanforward,BOOL PROC multistopsim);.variablenfuerdrucksetzen: druckzeilenzahl:=drucklaenge(ueberschriftenzeilen)-ausgkopflaenge.END PROC unterrichtsverteilungdruckvorbereiten;PROC initausgabekopfdruck:ausgkopfdruck (1):=textueberschrift;ausgkopfdruck(2):=unterstreichungEND PROC initausgabekopfdruck;PROC unterrichtsverteilungseitedrucken: unterrichtsverteilungueberschriftdrucken;altejahrgangsstufe:=niltext; alteparaphe:=niltext;altekopplung:=niltext;altesfach:=niltext;erstezeile:= TRUE ;seitedrucken(PROC (INT VAR )unterrichtsverteilungdrucken, druckzeilenzahl,ausgfeldlaenge,BOOL PROC multistopsim);seitenwechsel.END PROC unterrichtsverteilungseitedrucken;PROC unterrichtsverteilungueberschriftdrucken:INT VAR i;druckkopfschreiben;FOR i FROM 1UPTO ausgkopflaengeREP druckzeileschreiben(ausgkopfdruck(i))PER END PROC unterrichtsverteilungueberschriftdrucken;PROC unterrichtsverteilungdrucken(INT VAR zeilenzaehler):LET markiert="#"; unterrichtsverteilungholen;ggflmeldunganfbuchstabe;IF NOT (erstezeile)AND (( sortjgstalleAND altejahrgangsstufe<>jahrgangsstufe)XOR (sortkopplungenAND altekopplung<>kopplung)XOR (sortparaphenalleAND alteparaphe<>paraphe)XOR ( sortfaecherAND altesfach<>fach))THEN leerzeileindruckdateiFI ; unterrichtsverteilungaufbereitendruck;zeilenzaehlerINCR ausgfeldlaenge; unterrichtsverteilungindruckdatei;erstezeile:=FALSE .leerzeileindruckdatei: ausgfeld(1):=text(blank,druckbreite);druckzeileschreiben(ausgfeld(1)); zeilenzaehlerINCR ausgfeldlaenge;.ggflmeldunganfbuchstabe:IF anfbuchstabegeaendertTHEN meldunganfbuchstabeFI .anfbuchstabegeaendert:IF sortjgstalleXOR sortjgstbestTHEN neueranfbuchstabe:=jahrgangsstufeSUB 1; teiltextmeldung:="Jgst "ELIF sortparaphenalleXOR sortparaphebestTHEN neueranfbuchstabe:=parapheSUB 1;teiltextmeldung:= "Paraphen mit Anfangsbuchstaben: "ELIF sortkopplungenTHEN neueranfbuchstabe:= kopplungSUB 1;teiltextmeldung:="Kopplungen mit Anfangsbuchstaben: "ELIF sortfaecherXOR sortbestfachTHEN neueranfbuchstabe:=fach;teiltextmeldung:= "Fach: "FI ;anfbuchstabe<>neueranfbuchstabe.meldunganfbuchstabe: standardmeldung(mnrbearbeitetwerden,teiltextmeldung+neueranfbuchstabe+ markiert);anfbuchstabe:=neueranfbuchstabe.END PROC unterrichtsverteilungdrucken;PROC unterrichtsverteilungaufbereitendruck: unterrichtsverteilungaufbereitenbild;ausgfeld(1):=zeile;END PROC unterrichtsverteilungaufbereitendruck;PROC unterrichtsverteilungindruckdatei: INT VAR i;FOR iFROM 1UPTO ausgfeldlaengeREP druckzeileschreiben(ausgfeld(1)) PER END PROC unterrichtsverteilungindruckdatei;PROC spaltendefinieren: initspalten;setzespaltentrenner(spaltentrenner);IF sortkopplungenTHEN setzespaltenbreite(neunerspaltenbreite);setzespaltenbreite( fuenferspaltenbreite);setzespaltenbreite(zweierspaltenbreite); setzespaltenbreite(achterspaltenbreite);setzespaltenbreite( zweierspaltenbreite);setzespaltenbreite(achterspaltenbreite);ELIF sortjgstalleXOR sortjgstbestTHEN setzespaltenbreite(fuenferspaltenbreite); setzespaltenbreite(zweierspaltenbreite);setzespaltenbreite( neunerspaltenbreite);setzespaltenbreite(zehnerspaltenbreite); setzespaltenbreite(achterspaltenbreite);ELIF sortparaphenalleXOR sortparaphebestTHEN setzespaltenbreite(viererspaltenbreite); setzespaltenbreite(zweierspaltenbreite);setzespaltenbreite( fuenferspaltenbreite);setzespaltenbreite(zweierspaltenbreite); setzespaltenbreite(neunerspaltenbreite);setzespaltenbreite( zehnerspaltenbreite);ELIF sortfaecherXOR sortbestfachTHEN setzespaltenbreite( viererspaltenbreite);setzespaltenbreite(achterspaltenbreite); setzespaltenbreite(viererspaltenbreite);setzespaltenbreite( neunerspaltenbreite);setzespaltenbreite(neunerspaltenbreite);FI ; setzespaltenbreite(viererspaltenbreite);setzespaltenbreite( zweierspaltenbreite);setzespaltenbreite(viererspaltenbreite); setzespaltenbreite(viererspaltenbreite);setzespaltenbreite( viererspaltenbreite);setzespaltenbreite(fuenferspaltenbreite); setzespaltenbreite(viererspaltenbreite);setzespaltenbreite( viererspaltenbreite);END PROC spaltendefinieren;PROC unterrichtsverteilungholen:TEXT VAR fachkennung;halbjahr:=wert(fnrlvhj); jahrgangsstufe:=text(intwert(fnrlvjgst),2);fachkennung:=wert(fnrlvfachkennung );fach:=text(fachkennung,2);kennung:=subtext(fachkennung,3,6);kopplung:=wert( fnrlvkopplung);paraphe:=wert(fnrlvparaphe);wochenstdn:=text(intwert( fnrlvwochenstd),2);klassengruppe1:=wert(fnrlvklgrp1);klassengruppe2:=wert( fnrlvklgrp2);klassengruppe3:=wert(fnrlvklgrp3);klassengruppe4:=wert( fnrlvklgrp4);raumgruppe1:=wert(fnrlvraumgrp1);raumgruppe2:=wert(fnrlvraumgrp2 );END PROC unterrichtsverteilungholen;END PACKET unterrichtsverteilunglisten