PACKET abgemlistenDEFINES abgemlispezielleteile:LET niltext="",blank=" ", mittestrich="-",null=0,ueberschriftenzeilen=1,spalte1breite=7,spalte3breite=8 ,spalte4breite=8,spalte5breite=7,anzspaltentrenner=4,ausgkopflaenge=3, ausgfeldlaenge=2,AUSGFELD =ROW ausgfeldlaengeTEXT ,AUSGKOPF =ROW ausgkopflaengeTEXT ,abgemlieingangsmaske="mu liste einfach eingang", abgemlianfpos=2,mnrbearbeitetwirdjgst=106,#ixsustatabgdat=260,dnrschueler=2, fnrsufamnames=3,fnrsurufnames=4,fnrsugebdatums=5,fnrsustatuss=6,fnrsusgrpjgst =7,fnrsusgrpzugtut=8,fnrsunamenszusatzs=21,fnrsuabgdats=16,fnrsuabggrund=17, fnrsuabschluss=18,#anfangsj="Anfang Schulhalbjahr",endesj= "Ende Schulhalbjahr";INT CONST spalte2bildbreite:=bildbreite- anzspaltentrenner-spalte1breite-spalte3breite-spalte4breite-spalte5breite; INT VAR spalte2druckbreite,druckzeilenzahl,aktuelleindexnr,bildanf, eingabestatus,breite;TEXT VAR abgemliueberschrift,bearbeitetwirdjgst, schuljahr,jahr1,jahr2,schuelername,schuelerrufname,schuelernamenszus, schuelerjgst,schuelerzug,schuelergebdat,schuelerabdat,schuelerabgrund, schuelerabqual,jgst,neuejgst,startwert,klasse,neueklasse,anfangsdatum:="", endedatum:="";TEXT VAR druckstrich;TEXT CONST bildstrich:=bildbreite* mittestrich;AUSGFELD VAR ausgfeld;AUSGKOPF VAR ausgkopf;BOOL VAR ersteraufbildschirm,klassegeaendert:=FALSE ;BOOL PROC multistop:BOOL VAR b:=( date(wert(fnrsuabgdats))>=date(anfangsdatum))CAND (date(wert(fnrsuabgdats))<= date(endedatum))CAND (wert(fnrsustatuss)="ls");bEND PROC multistop;BOOL PROC multistopdruck:BOOL VAR b:=multistop;setzebestandende(NOT b);bENDPROC multistopdruck;PROC abgemlispezielleteile(INT CONST nr):SELECT nrOF CASE 1: abgemlidialogvorbereitenCASE 2:abgemlieingabenrichtigCASE 3: abgemlilistenvorbereitenCASE 4:abgemlidruckvorbereitenCASE 5: abgemliseitedruckenCASE 6:abgemlibildschirmvorbereitenCASE 7: abgemliseitezeigenENDSELECT .END PROC abgemlispezielleteile;PROC abgemlidialogvorbereiten:abgemliueberschrift:=text(vergleichsknoten); setzeanfangswerte(abgemlieingangsmaske,abgemlianfpos)END PROC abgemlidialogvorbereiten;PROC abgemlieingabenrichtig:LET fnrausgdrucker=2, fnrausgbild=3;standardpruefe(5,fnrausgdrucker,fnrausgbild,null,niltext, eingabestatus);IF eingabestatus<>0THEN infeld(eingabestatus);setzeeingabetest (FALSE )ELSE setzeausgabedrucker(standardmaskenfeld(fnrausgbild)=niltext); setzeeingabetest(TRUE )FI .END PROC abgemlieingabenrichtig;PROC abgemlilistenvorbereiten:BOOL VAR b:=FALSE ;LET schluessel="Schuljahr"; aktuellesschuljahrermitteln;aktuelleindexnr:=ixsustatabgdat;startwert:="ls"; inittupel(dnrschueler);initobli(8);parsenooffields(21);setzeidentiwert(""); putwert(fnrsustatuss,startwert);putwert(fnrsuabgdats,anfangsdatum);# objektlistestarten(aktuelleindexnr,"",3,TRUE ,b);#objektlistestarten( aktuelleindexnr,"",fnrsuabgdats,TRUE ,b);setzebestandende(NOT multistopOR b). aktuellesschuljahrermitteln:schuljahr:=schulkenndatum(schluessel);jahr1:= subtext(schuljahr,1,2);jahr2:=subtext(schuljahr,3,4);anfangsdatum:= schulkenndatum(anfangsj);endedatum:=schulkenndatum(endesj).END PROC abgemlilistenvorbereiten;PROC abgemlibildschirmvorbereiten:LET fnrausganf=2; standardkopfmaskeaktualisieren(abgemliueberschrift);breite:=bildbreite; initspalten;setzespaltenbreiten(spalte2bildbreite);initausgabekopf(bildstrich );bildanf:=fnrausganf;INT VAR i;FOR iFROM 1UPTO ausgkopflaengeREPEAT ausgkopf (i)IN bildanf;bildanfINCR 1END REPEAT ;klasse:=niltext; setzebildanfangsposition(bildanf).END PROC abgemlibildschirmvorbereiten;PROC abgemliseitezeigen:ersteraufbildschirm:=TRUE ;setzescanendewert(endedatum); setzescanstartwert(anfangsdatum);blaettern(PROC (INT CONST )schuelerzeigen, aktion,TRUE ,TRUE ,BOOL PROC multistop);setzescanendewert("�"); setzescanstartwert("�")END PROC abgemliseitezeigen;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 abgemlidruckvorbereiten:LET uebteil1="Liste der im Schuljahr ",uebteil2=" abgemeldeten Schüler";TEXT VAR ueberschrift;jgst:=niltext;klasse:=niltext;druckvorbereiten; variablenfuerdrucksetzen;ueberschriftvorbereitendruck;initdruckkopf(zentriert (ueberschrift,druckbreite));breite:=druckbreite;initspalten; setzespaltenbreiten(spalte2druckbreite);initausgabekopf(druckstrich); holemeldung;inittupel(dnrschueler);putwert(fnrsustatuss,startwert);putwert( fnrsuabgdats,anfangsdatum);lesenvorbereitendruck(PROC (INT CONST ,BOOL PROC , INT VAR )scanforward,BOOL PROC multistopdruck).holemeldung:meldungstext( mnrbearbeitetwirdjgst,bearbeitetwirdjgst).variablenfuerdrucksetzen: druckstrich:=druckbreite*mittestrich;spalte2druckbreite:=druckbreite- anzspaltentrenner-spalte1breite-spalte3breite-spalte4breite-spalte5breite; druckzeilenzahl:=drucklaenge(ueberschriftenzeilen)-ausgkopflaenge. ueberschriftvorbereitendruck:ueberschrift:=uebteil1+aufbereitetesschuljahr+ uebteil2.aufbereitetesschuljahr:"19"+jahr1+"/"+jahr2.END PROC abgemlidruckvorbereiten;PROC abgemliseitedrucken:abgemliueberschriftdrucken; seitedrucken(PROC (INT VAR )schuelerdrucken,druckzeilenzahl,ausgfeldlaenge, BOOL PROC multistopdruck);seitenwechsel.END PROC abgemliseitedrucken;PROC abgemliueberschriftdrucken:druckkopfschreiben;INT VAR i;FOR iFROM 1UPTO ausgkopflaengeREPEAT druckzeileschreiben(ausgkopf(i))END REPEAT .END PROC abgemliueberschriftdrucken;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 setzespaltenbreiten(INT CONST spalte2breite): setzespaltenbreite(spalte1breite);setzespaltenbreite(spalte2breite); setzespaltenbreite(spalte3breite);setzespaltenbreite(spalte4breite); setzespaltenbreite(spalte5breite);END PROC setzespaltenbreiten;PROC initausgabekopf(TEXT CONST strich):LET jgst="Jgst.",klasse=" Kl.",name= "Familienname",rufname=" Rufname",geb="Geburts-",abg="Abgangs-",datum= "datum",grund="Grund",qual=" Qual.";spaltenweise(jgst);spaltenweise(name); spaltenweise(geb);spaltenweise(abg);spaltenweise(grund);ausgkopf(1):=zeile; spaltenweise(klasse);spaltenweise(rufname);spaltenweise(datum);spaltenweise( datum);spaltenweise(qual);ausgkopf(2):=zeile;ausgkopf(3):=strich;END PROC initausgabekopf;PROC schuelerholen:schuelername:=wert(fnrsufamnames); schuelerrufname:=wert(fnrsurufnames);schuelernamenszus:=wert( fnrsunamenszusatzs);schuelerjgst:=wert(fnrsusgrpjgst);schuelerzug:=wert( fnrsusgrpzugtut);schuelergebdat:=wert(fnrsugebdatums);schuelerabdat:=wert( fnrsuabgdats);schuelerabgrund:=wert(fnrsuabggrund);schuelerabqual:=wert( fnrsuabschluss);neueklasse:=schuelerjgst+schuelerzug;klassegeaendert:=klasse <>neueklasse;klasse:=neueklasse.END PROC schuelerholen;PROC schueleraufbereiten:LET minus="-";schreibenameabdaten;schreiberufname. schreibenameabdaten:spaltenweise(aufbschuelerklasse);spaltenweise( aufbschuelername);spaltenweise(schuelergebdat);spaltenweise(schuelerabdat); spaltenweise(blank+aufbschuelerabgrund+blank+aufbschuelerabqual);ausgfeld(1) :=zeile.schreiberufname:ausgfeld(2):=text(aufbrufname,breite). aufbschuelerklasse:IF klassegeaendertTHEN schuelerjgst+blank+schuelerzugELSE spalte1breite*blankFI .aufbschuelername:IF schuelernamenszus=niltextTHEN schuelernameELSE schuelernamenszus+blank+schuelernameFI .aufbschuelerabqual: IF schuelerabqual=niltextTHEN minusELSE schuelerabqualFI .aufbschuelerabgrund :IF schuelerabgrund=niltextTHEN minusELSE schuelerabgrundFI .aufbrufname:( spalte1breite+3)*blank+schuelerrufname.END PROC schueleraufbereiten;END PACKET abgemlisten;