PACKET klassenlistenDEFINES klalispezielleteile:LET niltext="",blank=" ", mittestrich="-",null=0,komma=",",stern="*",ueb1teil1="Klassenliste",ueb1teil2 =" für Klasse ",ueb1teil3="Klassenlehrer: ",ueb2teil1="Tutorenkursliste", ueb2teil21=" für Jahrgangsstufe ",ueb2teil22=" für den Kurs ",ueb2teil3= "Tutor: ",ueb3="n der Jahrgangsstufe ",ueberschriftenzeilen=2, spalte1druckbreite=3,spalte2bildbreite=7,anzspaltentrenner=1,ausgkopflaenge=2 ,ausgfeldlaenge=1,AUSGFELDDRUCK =ROW ausgfeldlaengeTEXT ,AUSGFELDBILD =ROW ausgfeldlaengeTEXT ,AUSGKOPFDRUCK =ROW ausgkopflaengeTEXT ,AUSGKOPFBILD =ROW ausgkopflaengeTEXT ,klalieingangsmaske="ms liste klassen eingang",klalianfpos =2,nr="Nr.",name="Name, Rufname",sternvolljaehrig= " ( * entspricht volljährig )",klasse="Klasse",altervolljaehrig=18, mnrbearbeitetwird=100,mnrlistewirdgedruckt=58,mnrauswahlnichtsinnvoll=56;INT CONST spalte1bildbreite:=bildbreite-anzspaltentrenner-spalte2bildbreite;INT VAR spalte2druckbreite,druckzeilenzahlmax,druckzeilenzahl,bildanf,zaehler, vergldatum,aktuelleindexnr,eingabestatus;TEXT VAR klaliueberschrift, schuelername,schuelerrufname,schuelernamenszus,schuelergebdat, schuelernameaufber,zaehleraufber,ueberschrift1,ueberschrift2,lehrer,jahrgang, zug,startjgst,startzug,bearbeitetwird,listewirdgedruckt,auswahlnichtsinnvoll; TEXT VAR druckstrich;TEXT CONST bildstrich:=bildbreite*mittestrich; AUSGFELDDRUCK VAR ausgfelddruck;AUSGFELDBILD VAR ausgfeldbild;AUSGKOPFDRUCK VAR ausgkopfdruck;AUSGKOPFBILD VAR ausgkopfbild;BOOL VAR einjahrgang,alle, voll,neueklasse;BOOL PROC multistop:BOOL VAR b;IF startjgst<>""THEN IF einjahrgangTHEN b:=wert(fnrsusgrpjgst)=startjgst;ELSE b:=wert(fnrsusgrpjgst)= startjgstAND wert(fnrsusgrpzugtut)=startzug;FI ELSE b:=wert(fnrsustatuss)= "ls";FI ;bEND PROC multistop;BOOL PROC multistopsim:BOOL VAR b:=multistop; setzebestandende(NOT b);bENDPROC multistopsim;PROC klalispezielleteile(INT CONST nr):SELECT nrOF CASE 1:klalidialogvorbereitenCASE 2: klalieingabenrichtigCASE 3:klalilistenvorbereitenCASE 4:klalidruckvorbereiten CASE 5:klaliseitedruckenCASE 6:klalibildschirmvorbereitenCASE 7: klaliseitezeigenENDSELECT .END PROC klalispezielleteile;PROC klalidialogvorbereiten:klaliueberschrift:=text(vergleichsknoten); setzeanfangswerte(klalieingangsmaske,klalianfpos).END PROC klalidialogvorbereiten;PROC klalieingabenrichtig:LET fnrjgst=2,fnrzug=3, fnrvoll=4,fnrausgdrucker=5,fnrausgbild=6;alle:=FALSE ;einjahrgang:=FALSE ; voll:=FALSE ;standardpruefe(5,fnrausgdrucker,fnrausgbild,null,niltext, eingabestatus);IF eingabestatus<>0THEN infeld(eingabestatus);setzeeingabetest (FALSE )ELSE zug:=standardmaskenfeld(fnrzug);jahrgang:=standardmaskenfeld( fnrjgst);IF standardmaskenfeld(fnrjgst)=niltextTHEN IF zug=niltextTHEN alle:= TRUE ;voll:=(standardmaskenfeld(fnrvoll)<>niltext);setzeausgabedrucker( standardmaskenfeld(fnrausgbild)=niltext);setzeeingabetest(TRUE )ELSE meldefehler;infeld(fnrzug);setzeeingabetest(FALSE )FI ELSE standardpruefe(3, fnrjgst,5,13,niltext,eingabestatus);IF eingabestatus<>0THEN infeld( eingabestatus);setzeeingabetest(FALSE )ELSE jahrgang:=zweistellig( standardmaskenfeld(fnrjgst));einjahrgang:=(zug=niltext);voll:=( standardmaskenfeld(fnrvoll)<>niltext);setzeausgabedrucker(standardmaskenfeld( fnrausgbild)=niltext);setzeeingabetest(TRUE )FI FI FI .meldefehler: meldungstext(mnrauswahlnichtsinnvoll,auswahlnichtsinnvoll);standardmeldung( auswahlnichtsinnvoll,niltext).END PROC klalieingabenrichtig;PROC klalilistenvorbereiten:BOOL VAR b:=FALSE ;startjgst:=jahrgang;startzug:=zug; neueklasse:=FALSE ;aktuelleindexnr:=ixsustatjgstzug;inittupel(dnrschueler); initobli(17);parsenooffields(19);setzeidentiwert("");putwert(fnrsustatuss, "ls");putwert(fnrsusgrpjgst,startjgst);putwert(fnrsusgrpzugtut,startzug); vergldatum:=vergleichsdatum(altervolljaehrig);#objektlistestarten( aktuelleindexnr,"",fnrsustatuss,TRUE ,b);#objektlistestarten(aktuelleindexnr, "",staticfield,TRUE ,b);setzebestandende(NOT multistopCOR b).staticfield:IF startjgst=niltextTHEN fnrsusgrpjgstELSE IF startzug=niltextTHEN fnrsusgrpzugtutELSE dnrschueler+1FI FI .END PROC klalilistenvorbereiten;PROC klalibildschirmvorbereiten:LET fnrausganf=2;ueberschriftvorbereitenbild; standardkopfmaskeaktualisieren(ueberschrift1);initspalten;initausgabekopfbild ;bildanf:=fnrausganf;INT VAR i;FOR iFROM 1UPTO ausgkopflaengeREPEAT ausgkopfbild(i)IN bildanf;bildanfINCR 1END REPEAT ;setzebildanfangsposition( bildanf).END PROC klalibildschirmvorbereiten;PROC ueberschriftvorbereitenbild :LET aufein="",aufaus=" ";IF alleTHEN ueberschrift1:=klaliueberschriftELSE IF einjahrgangTHEN IF int(jahrgang)<11THEN ueberschrift1:=ueb1teil1ELSE ueberschrift1:=ueb2teil1FI ;ueberschrift1:=ueberschrift1+ueb3+aufein+jahrgang +aufausELSE IF int(jahrgang)<11THEN ueberschrift1:=ueb1teil1+ueb1teil2ELSE ueberschrift1:=ueb2teil1+ueb2teil22FI ;ueberschrift1:=ueberschrift1+aufein+ jahrgang+blank+wert(fnrsusgrpzugtut)+aufausFI FI ;END PROC ueberschriftvorbereitenbild;PROC initausgabekopfbild:IF einjahrgangOR alle THEN hilfsfeldervorbelegen;ausgkopfbild(1):=zeileELSE ausgkopfbild(1):=text( name,bildbreite)FI ;ausgkopfbild(2):=bildstrich.hilfsfeldervorbelegen: setzespaltenbreite(spalte1bildbreite);setzespaltenbreite(spalte2bildbreite); IF vollTHEN spaltenweise(name+sternvolljaehrig)ELSE spaltenweise(name)FI ; spaltenweise(klasse).END PROC initausgabekopfbild;PROC klaliseitezeigen: blaettern(PROC (INT CONST )schuelerdatenzeigen,aktion,TRUE ,TRUE ,BOOL PROC multistop)END PROC klaliseitezeigen;PROC schuelerdatenzeigen(INT CONST x): schuelerdatenholen;schuelerdatenaufbereitenbild;schuelerdatenaufbildschirm. END PROC schuelerdatenzeigen;PROC schuelerdatenaufbereitenbild: schuelernameaufbereiten;IF alleOR einjahrgangTHEN schreibenamerufnameklasse ELSE schreibenamerufnameFI .schreibenamerufnameklasse:spaltenweise( schuelernameaufber);spaltenweise(jahrgang+blank+wert(fnrsusgrpzugtut)); ausgfeldbild(1):=zeile.schreibenamerufname:ausgfeldbild(1):=text( schuelernameaufber,bildbreite).END PROC schuelerdatenaufbereitenbild;PROC schuelerdatenaufbildschirm:INT VAR i;FOR iFROM 1UPTO ausgfeldlaengeREPEAT ausgfeldbild(i)IN ausgabepos;erhoeheausgabeposumeinsEND REPEAT .END PROC schuelerdatenaufbildschirm;PROC klalidruckvorbereiten:zaehler:=null; neueklasse:=TRUE ;druckvorbereiten;variablenfuerdrucksetzen;druckzeilenzahl:= druckzeilenzahlmax;IF vollTHEN druckzeilenzahl:=druckzeilenzahl-2FI ; holemeldung;inittupel(dnrschueler);putwert(fnrsusgrpjgst,startjgst);putwert( fnrsusgrpzugtut,startzug);putwert(fnrsustatuss,"ls");lesenvorbereitendruck( PROC (INT CONST ,BOOL PROC ,INT VAR )scanforward,BOOL PROC multistopsim); ueberschriftvorbereitendruck;initdruckkopf(ueberschrift1,ueberschrift2); initspalten;initausgabekopfdruck.variablenfuerdrucksetzen:druckstrich:= druckbreite*mittestrich;spalte2druckbreite:=druckbreite-anzspaltentrenner- spalte1druckbreite;druckzeilenzahlmax:=drucklaenge(ueberschriftenzeilen)- ausgkopflaenge.holemeldung:meldungstext(mnrbearbeitetwird,bearbeitetwird). END PROC klalidruckvorbereiten;PROC ueberschriftvorbereitendruck:IF int( jahrgang)<11THEN ueberschrift1:=ueb1teil1+ueb1teil2+wert(fnrsusgrpjgst)+blank +wert(fnrsusgrpzugtut);ueberschrift2:=ueb1teil3ELSE ueberschrift1:=ueb2teil1+ ueb2teil21+jahrgang;ueberschrift2:=ueb2teil3FI ;klassenlehrer(lehrer,jahrgang ,wert(fnrsusgrpzugtut));ueberschrift2:=ueberschrift2+lehrer;END PROC ueberschriftvorbereitendruck;PROC klassenlehrer(TEXT VAR lehrer,TEXT CONST jahrgang,TEXT CONST zug):putwert(fnrsgrpsj,schulkenndatum("Schuljahr")); putwert(fnrsgrphj,schulkenndatum("Schulhalbjahr"));putwert(fnrsgrpjgst, jahrgang);putwert(fnrsgrpkennung,zug);search(dnraktschuelergruppen,TRUE );IF dbstatus=okTHEN putwert(fnrlparaphe,wert(fnrsgrplehrer));search(dnrlehrer, TRUE );IF dbstatus=okTHEN lehrer:=wert(fnrlfamname)ELSE lehrer:=""FI ;ELSE lehrer:=""FI END PROC klassenlehrer;PROC initausgabekopfdruck: hilfsfeldervorbelegen;ausgkopfdruck(1):=zeile;ausgkopfdruck(2):=druckstrich. hilfsfeldervorbelegen:setzespaltenbreite(spalte1druckbreite); setzespaltenbreite(spalte2druckbreite);spaltenweise(nr);spaltenweise(name). END PROC initausgabekopfdruck;PROC klaliseitedrucken:LET kommentar= "* Schüler ist am Tag der Listenerstellung volljährig"; klaliueberschriftdrucken;seitedrucken(PROC (INT VAR )schuelerdatendrucken, druckzeilenzahl,ausgfeldlaenge,PROC bestandendesimulierenbeiklassenwechsel, BOOL PROC multistopsim);ggflkommentarzeile;IF neueklasseTHEN simuliertesendezuruecknehmen;neuelistevorbereitenELSE seitenwechselFI . ggflkommentarzeile:IF vollTHEN kommentarzeiledruckenFI .kommentarzeiledrucken :ausgfelddruck(1):=text(niltext,druckbreite);druckzeileschreiben( ausgfelddruck(1));ausgfelddruck(1):=text(kommentar,druckbreite); druckzeileschreiben(ausgfelddruck(1)).simuliertesendezuruecknehmen: setzebestandende(FALSE ).neuelistevorbereiten:meldelistewirdgedruckt; drucknachbereiten;druckvorbereiten;zaehler:=null;schuelerdatenholen; ueberschriftvorbereitendruck;initdruckkopf(ueberschrift1,ueberschrift2). meldelistewirdgedruckt:meldungstext(mnrlistewirdgedruckt,listewirdgedruckt); standardmeldung(listewirdgedruckt,niltext).END PROC klaliseitedrucken;PROC klaliueberschriftdrucken:druckkopfschreiben;INT VAR i;FOR iFROM 1UPTO ausgkopflaengeREPEAT druckzeileschreiben(ausgkopfdruck(i))END REPEAT .END PROC klaliueberschriftdrucken;PROC schuelerdatendrucken(INT VAR zeilenzaehler ):LET markiert="#";schuelerdatenholen;ggflmeldungklasse;zaehlerINCR 1; schuelerdatenaufbereitendruck;zeilenzaehlerINCR ausgfeldlaenge; schuelerdatenindruckdatei.ggflmeldungklasse:IF zaehler=nullTHEN standardmeldung(bearbeitetwird,jahrgang+blank+zug+markiert)FI .END PROC schuelerdatendrucken;PROC schuelerdatenaufbereitendruck:zaehleraufbereiten; schuelernameaufbereiten;schreibenrnamerufname.zaehleraufbereiten:IF zaehler< 10THEN zaehleraufber:=blankELSE zaehleraufber:=niltextFI ;zaehleraufber:= zaehleraufber+text(zaehler).schreibenrnamerufname:spaltenweise(zaehleraufber) ;spaltenweise(schuelernameaufber);ausgfelddruck(1):=zeile;END PROC schuelerdatenaufbereitendruck;PROC schuelerdatenindruckdatei: druckzeileschreiben(ausgfelddruck(1)).END PROC schuelerdatenindruckdatei; PROC bestandendesimulierenbeiklassenwechsel:IF bestandendeTHEN neueklasse:= FALSE ELSE nochklassezubearbeiten;IF neueklasseTHEN setzebestandende(TRUE ) FI ;FI .nochklassezubearbeiten:neueklasse:=zug<>wert(fnrsusgrpzugtut);IF alle THEN neueklasse:=neueklasseOR (int(jahrgang)<>int(wert(fnrsusgrpjgst)))FI . END PROC bestandendesimulierenbeiklassenwechsel;PROC schuelernameaufbereiten: schuelernameaufber:=niltext;IF schuelernamenszus<>niltextTHEN schuelernameaufber:=schuelernamenszus+blankFI ;schuelernameaufber:= schuelernameaufber+schuelername+komma+blank+schuelerrufname;IF vollCAND ( schuelergebdat<>niltext)CAND volljaehrig(datum(schuelergebdat))THEN schuelernameaufber:=schuelernameaufber+blank+sternFI ;END PROC schuelernameaufbereiten;BOOL PROC volljaehrig(INT CONST geburtstag): geburtstag<=vergldatumEND PROC volljaehrig;PROC schuelerdatenholen: schuelername:=wert(fnrsufamnames);schuelerrufname:=wert(fnrsurufnames); schuelernamenszus:=wert(fnrsunamenszusatzs);schuelergebdat:=wert( fnrsugebdatums);jahrgang:=wert(fnrsusgrpjgst);zug:=wert(fnrsusgrpzugtut).END PROC schuelerdatenholen;END PACKET klassenlisten;