PACKET versetzlistenDEFINES verslispezielleteile:LET schluesselwiederholer= "w";INT CONST mnrbearbeitetwirdjgst:=106,nurimzweitenhj:=193;TEXT VAR bearbeitetwirdjgst:="",aktuellesschuljahr:="",endewertjgst:="",startwertjgst :="";LET niltext="",nildatum="01.01.00",blank=" ",mittestrich="-",null=0, komma=",",ueberschriftenzeilen=2,spalte1breitesek1=5,spalte3breitesek1=32, spalte1breitesek2=8,spalte3breitesek2=25,anzspaltentrenner=2,spaltentrenner= ":",ausgkopflaenge=3,ausgfeldlaenge=1,AUSGFELD =ROW ausgfeldlaengeTEXT , AUSGKOPF =ROW ausgkopflaengeTEXT ,verslieingangsmaske= "ms liste versetz nachpr eingang",verslianfpos=2;INT CONST spalte2bildbreitesek1:=bildbreite-anzspaltentrenner-spalte1breitesek1- spalte3breitesek1,spalte2bildbreitesek2:=bildbreite-anzspaltentrenner- spalte1breitesek2-spalte3breitesek2;INT VAR spalte2druckbreite, druckzeilenzahl,bildanf,eingabestatus,breite;TEXT VAR versliueberschrift, jahr1,jahr2,schuelername,schuelerrufname,schuelernamenszus,schuelerjgst, schuelerzug,schuelerabdat,ortsteil,erstesprache,religionsunt,kuodermu,jgst, neuejgst,klasse,neueklasse;TEXT VAR druckstrich;TEXT CONST bildstrich:= bildbreite*mittestrich;AUSGFELD VAR ausgfeld;AUSGKOPF VAR ausgkopf;BOOL VAR sek1,sek2,ersteraufbildschirm,klassegeaendert:=FALSE ;PROC verslispezielleteile(INT CONST nr):SELECT nrOF CASE 1:verslidialogvorbereiten CASE 2:verslieingabenrichtigCASE 3:verslilistenvorbereitenCASE 4: verslidruckvorbereitenCASE 5:versliseitedruckenCASE 6: verslibildschirmvorbereitenCASE 7:versliseitezeigenENDSELECT .END PROC verslispezielleteile;PROC verslidialogvorbereiten:versliueberschrift:=text( vergleichsknoten);setzeanfangswerte(verslieingangsmaske,verslianfpos); reinitparsingEND PROC verslidialogvorbereiten;PROC verslieingabenrichtig:LET fnrsek1=2,fnrsek2=3,fnrjgst=4,fnrausgdrucker=5,fnrausgbild=6, auswahlnichtsinnvoll=56;IF int(schulkenndatum("Schulhalbjahr"))=1THEN standardmeldung(nurimzweitenhj,"2.#");setzeeingabetest(FALSE )ELSE wohinpruefenFI .wohinpruefen:standardpruefe(5,fnrausgdrucker,fnrausgbild,null ,niltext,eingabestatus);IF eingabestatus<>0THEN infeld(eingabestatus); setzeeingabetest(FALSE )ELSE waspruefenFI .waspruefen:sek1:=FALSE ;sek2:= FALSE ;jgst:="";IF standardmaskenfeld(fnrjgst)=niltextTHEN standardpruefe(5, fnrsek1,fnrsek2,null,niltext,eingabestatus);IF eingabestatus<>0THEN infeld( eingabestatus);setzeeingabetest(FALSE )ELSE sek1:=standardmaskenfeld(fnrsek2) =niltext;sek2:=NOT sek1;setzeausgabedrucker(standardmaskenfeld(fnrausgbild)= niltext);setzeeingabetest(TRUE )FI ;ELSE IF (standardmaskenfeld(fnrsek1)= niltext)AND (standardmaskenfeld(fnrsek2)=niltext)THEN standardpruefe(3, fnrjgst,5,13,niltext,eingabestatus);IF eingabestatus<>0THEN infeld( eingabestatus);setzeeingabetest(FALSE )ELSE jgst:=zweistellig( standardmaskenfeld(fnrjgst));setzeausgabedrucker(standardmaskenfeld( fnrausgbild)=niltext);setzeeingabetest(TRUE )FI ;ELSE meldefehler;infeld( fnrsek1);setzeeingabetest(FALSE )FI ;FI .meldefehler:standardmeldung( auswahlnichtsinnvoll,niltext).END PROC verslieingabenrichtig;PROC verslilistenvorbereiten:BOOL VAR b;LET schluessel="Schuljahr"; aktuellesschuljahrermitteln;startwertjgstbestimmen;inittupel( dnrhalbjahresdaten);initobli(16);setzeidentiwert("");startwertesetzen; objektlistestarten(ixhjdversjhjjgstkenn,"",fnrhjdjgst,TRUE ,b); setzebestandende(NOT multistopniverCOR b).aktuellesschuljahrermitteln: aktuellesschuljahr:=schulkenndatum(schluessel);jahr1:=subtext( aktuellesschuljahr,1,2);jahr2:=subtext(aktuellesschuljahr,3,4). startwertjgstbestimmen:endewertjgst:=endeberechnung;startwertjgst:= anfangsberechnung;.anfangsberechnung:IF sek1THEN "05"ELIF sek2THEN "11"ELSE jgstFI .endeberechnung:IF sek1THEN "11"ELIF sek2THEN "14"ELSE text(int(jgst)+ 1)FI .startwertesetzen:putwert(fnrhjdversetzung,schluesselwiederholer); putwert(fnrhjdjgst,startwertjgst);putwert(fnrhjdsj,aktuellesschuljahr); putintwert(fnrhjdhj,2).END PROC verslilistenvorbereiten;BOOL PROC multistopniver:BOOL VAR b;b:=wiederholerundrichtigesdatumCAND int(wert( fnrhjdjgst))>=int(startwertjgst)CAND int(wert(fnrhjdjgst))<#=#int( endewertjgst);b.wiederholerundrichtigesdatum:wert(fnrhjdversetzung)= schluesselwiederholerCAND wert(fnrhjdsj)=aktuellesschuljahrCAND wert(fnrhjdhj )="2".ENDPROC multistopniver;BOOL PROC multistopniversim:BOOL VAR b:= multistopniver;setzebestandende(NOT b);bENDPROC multistopniversim;PROC verslibildschirmvorbereiten:LET fnrausganf=2;standardkopfmaskeaktualisieren( versliueberschrift);breite:=bildbreite;initspalten;setzespaltentrenner( spaltentrenner);IF elementsek1THEN setzespaltenbreitensek1( spalte2bildbreitesek1);initausgabekopfsek1(bildstrich)ELSE setzespaltenbreitensek2(spalte2bildbreitesek2);initausgabekopfsek2(bildstrich )FI ;bildanf:=fnrausganf;INT VAR i;FOR iFROM 1UPTO ausgkopflaengeREPEAT ausgkopf(i)IN bildanf;bildanfINCR 1END REPEAT ;klasse:=niltext; setzebildanfangsposition(bildanf).END PROC verslibildschirmvorbereiten;PROC versliseitezeigen:setzescanstartwert(startwertjgst);setzescanendewert( endewertjgstpluseinsbeigleichheit);blaettern(PROC (INT CONST )schuelerzeigen, aktion,TRUE ,TRUE ,BOOL PROC multistopniver);setzescanstartwert(""); setzescanendewert("�").endewertjgstpluseinsbeigleichheit:IF startwertjgst= endewertjgstTHEN text(int(endewertjgst)+1)ELSE endewertjgstFI .END PROC versliseitezeigen;PROC schuelerzeigen(INT CONST x):schuelerholen;IF ersteraufbildschirmTHEN klassegeaendert:=TRUE ;ersteraufbildschirm:=FALSE FI ;schueleraufbereiten;schueleraufbildschirm.END PROC schuelerzeigen;PROC schueleraufbildschirm:INT VAR i;FOR iFROM 1UPTO ausgfeldlaengeREPEAT ausgfeld (i)IN ausgabepos;erhoeheausgabeposumeinsEND REPEAT .END PROC schueleraufbildschirm;PROC verslidruckvorbereiten:LET uebteil11= "Liste der nicht versetzten Schüler, ",uebteil12="Sek.I",uebteil13="Sek.II", uebteil14="Jgst. ",uebteil2="Schuljahr: ";TEXT VAR ueberschrift1, ueberschrift2;ueberschriftvorbereitendruck;jgst:=niltext;klasse:=niltext; druckvorbereiten;variablenfuerdrucksetzen;initdruckkopf(ueberschrift1, ueberschrift2);breite:=druckbreite;initspalten;setzespaltentrenner( spaltentrenner);IF elementsek1THEN setzespaltenbreitensek1(spalte2druckbreite );initausgabekopfsek1(druckstrich)ELSE setzespaltenbreitensek2( spalte2druckbreite);initausgabekopfsek2(druckstrich)FI ;holemeldungen; setzewerte;lesenvorbereitendruck(PROC (INT CONST ,BOOL PROC ,INT VAR ) scanforward,BOOL PROC multistopniversim).holemeldungen:meldungstext( mnrbearbeitetwirdjgst,bearbeitetwirdjgst).setzewerte:inittupel( dnrhalbjahresdaten);putwert(fnrhjdversetzung,schluesselwiederholer);putwert( fnrhjdjgst,startwertjgst);putwert(fnrhjdsj,aktuellesschuljahr);putintwert( fnrhjdhj,2).ueberschriftvorbereitendruck:ueberschrift1:=uebteil11;IF sek1 THEN ueberschrift1:=ueberschrift1+uebteil12ELSE IF sek2THEN ueberschrift1:= ueberschrift1+uebteil13ELSE ueberschrift1:=ueberschrift1+uebteil14+jgstFI ; FI ;ueberschrift2:=uebteil2+aufbereitetesschuljahr.aufbereitetesschuljahr: "19"+jahr1+"/"+jahr2.variablenfuerdrucksetzen:druckstrich:=druckbreite* mittestrich;spalte2druckbreite:=druckbreite-anzspaltentrenner;IF elementsek1 THEN spalte2druckbreite:=spalte2druckbreite-spalte1breitesek1- spalte3breitesek1ELSE spalte2druckbreite:=spalte2druckbreite- spalte1breitesek2-spalte3breitesek2FI ;druckzeilenzahl:=drucklaenge( ueberschriftenzeilen)-ausgkopflaenge.END PROC verslidruckvorbereiten;PROC versliseitedrucken:versliueberschriftdrucken;seitedrucken(PROC (INT VAR ) schuelerdrucken,druckzeilenzahl,ausgfeldlaenge,BOOL PROC multistopniversim); seitenwechsel.END PROC versliseitedrucken;PROC versliueberschriftdrucken: druckkopfschreiben;INT VAR i;FOR iFROM 1UPTO ausgkopflaengeREPEAT druckzeileschreiben(ausgkopf(i))END REPEAT .END PROC versliueberschriftdrucken;PROC schuelerdrucken(INT VAR zeilenzaehler):LET markiert="#";schuelerholen;IF zeilenzaehler=nullTHEN klassegeaendert:=TRUE FI ;ggflmeldungjgst;schueleraufbereiten;zeilenzaehlerINCR ausgfeldlaenge; schuelerindruckdatei.ggflmeldungjgst:IF jgstgeaendertTHEN zwischenmeldungFI . jgstgeaendert:neuejgst:=schuelerjgst;jgst<>neuejgst.zwischenmeldung: standardmeldung(bearbeitetwirdjgst,neuejgst+markiert);jgst:=neuejgst;END PROC schuelerdrucken;PROC schuelerindruckdatei:INT VAR i;FOR iFROM 1UPTO ausgfeldlaengeREPEAT druckzeileschreiben(ausgfeld(i))END REPEAT .END PROC schuelerindruckdatei;PROC setzespaltenbreitensek1(INT CONST spalte2breitesek1 ):setzespaltenbreite(spalte1breitesek1);setzespaltenbreite(spalte2breitesek1) ;setzespaltenbreite(spalte3breitesek1);END PROC setzespaltenbreitensek1;PROC setzespaltenbreitensek2(INT CONST spalte2breitesek2):setzespaltenbreite( spalte1breitesek2);setzespaltenbreite(spalte2breitesek2);setzespaltenbreite( spalte3breitesek2);END PROC setzespaltenbreitensek2;PROC initausgabekopfsek1( TEXT CONST strich):LET jgst="Jgst.",zug=" Zug",name="Name",rest1= "Orts-:Rel.: L : KU : Klasse",rest2="teil :unt.: F : MU :Wunsch:neu"; spaltenweise(jgst);spaltenweise(blank);spaltenweise(rest1);ausgkopf(1):=zeile ;spaltenweise(zug);spaltenweise(name);spaltenweise(rest2);ausgkopf(2):=zeile; ausgkopf(3):=strich;END PROC initausgabekopfsek1;PROC initausgabekopfsek2( TEXT CONST strich):LET jgst="Jgst.",tutor=" Tutor",name="Name",rest1= "Abmeldung";spaltenweise(jgst);spaltenweise(blank);spaltenweise(blank); ausgkopf(1):=zeile;spaltenweise(tutor);spaltenweise(name);spaltenweise(rest1) ;ausgkopf(2):=zeile;ausgkopf(3):=strich;END PROC initausgabekopfsek2;PROC schuelerholen:sucheschueler;schuelername:=wert(fnrsufamnames);schuelerrufname :=wert(fnrsurufnames);schuelernamenszus:=wert(fnrsunamenszusatzs); schuelerjgst:=wert(fnrhjdjgst);schuelerzug:=wert(fnrhjdkennung);schuelerabdat :=wert(fnrsuabgdats);IF elementsek1THEN ortsteil:=wert(fnrsuortsteils); erstesprache:=wert(fnrdd1fremdfach);religionsunt:=wert(fnrddreliunter); kuodermu:=wert(fnrddkunstmusik)FI ;neueklasse:=schuelerjgst+schuelerzug; klassegeaendert:=klasse<>neueklasse;klasse:=neueklasse.sucheschueler: uebernehmewerte;search(dnrschueler,TRUE );IF dbstatus=okTHEN readtid( dnrdiffdaten,zugriff(fnrsutiddiffdaten))ELSE inittupel(dnrdiffdaten)FI . uebernehmewerte:putwert(fnrsufamnames,wert(fnrhjdfamnames));putwert( fnrsurufnames,wert(fnrhjdrufnames));putwert(fnrsugebdatums,wert(fnrhjdgebdats )).END PROC schuelerholen;PROC schueleraufbereiten:LET abgemsek1="abgem.", abgemsek2="abgemeldet";schreibeklassenamerest.schreibeklassenamerest: spaltenweise(aufbschuelerklasse);spaltenweise(aufbschuelername);spaltenweise( aufbrest);ausgfeld(1):=zeile.aufbschuelerklasse:IF klassegeaendertTHEN schuelerjgst+blank+schuelerzugELSE blankFI .aufbschuelername:IF schuelernamenszus=niltextTHEN schuelername+komma+blank+schuelerrufnameELSE schuelernamenszus+blank+schuelername+komma+blank+schuelerrufnameFI .aufbrest: IF elementsek1THEN ganzerrestsek1ELSE abmeldungsek2FI .ganzerrestsek1:blank+ text(ortsteil,3)+blank+spaltentrenner+blank+text(religionsunt,2)+blank+ spaltentrenner+blank+text(erstesprache,1)+blank+spaltentrenner+blank+text( kuodermu,2)+blank+spaltentrenner+abmeldungsek1.abmeldungsek1:IF ( schuelerabdat=niltext)OR (schuelerabdat=nildatum)THEN text(blank,6)+ spaltentrennerELSE abgemsek1+spaltentrenner+blank+mittestrichFI . abmeldungsek2:IF (schuelerabdat=niltext)OR (schuelerabdat=nildatum)THEN blank ELSE abgemsek2FI .END PROC schueleraufbereiten;BOOL PROC elementsek1:sek1COR int(startwertjgst)<11ENDPROC elementsek1;END PACKET versetzlisten;