app/schulis/2.2.1/src/1.listen.klassenbuch

Raw file
Back to index

PACKET klassenbuchlistenDEFINES klabulispezielleteile:LET nildatumdb=
"01.01.00",niltext="",blank=" ",mittestrich="-",null=0,slspalte3breite=16,
slanzspaltentrenner=2,ausgkopflaenge=3,ausgfeldlaenge=3,maxanzproseite=50,
AUSGFELD =ROW ausgfeldlaengeTEXT ,AUSGKOPF =ROW ausgkopflaengeTEXT ,SPEICHER 
=ROW maxanzproseiteTEXT ,klabulieingangsmaske="ms liste klabuch eingang",
klabulianfpos=2,#dnrschueler=2,fnrsufamnames=3,fnrsurufnames=4,fnrsugebdatums
=5,fnrsustatuss=6,fnrsusgrpjgst=7,fnrsusgrpzugtut=8,fnrsugeschlechts=12,
fnrsunamenszusatzs=21,fnrsustrnrs=24,fnrsuplzorts=25,dbiplz=--,fnrsutelnrs=26
,fnrsutidiffdaten=52,dnrdiffdaten=53,fnrddreliunter=67,fnrddreliunteranmeld=
69,fnrddreliunterabmeld=68,fnrddkunstmusik=70,fnrddfach091a=71,fnrddfach091b=
72,fnrddfach092a=73,fnrddfach092b=74,fnrddfach101a=75,fnrddfach101b=76,
fnrddfach102a=77,fnrddfach102b=78,fnrhjdfamnames=89,fnrhjdrufnames=90,
fnrhjdgebdats=91,fnrhjdhj=93,fnrhjdjgst=94,fnrhjdfach=113,fnrhjdkursart=114,
dnrfaecher=141,fnrffach=142,fnrffachbez=143,ixhjdfamrufgebjgsthj=276,
ixsustatjgstzug=255,#mnrlistewirdgedruckt=58,mnrbearbeitetwird=100,
mnrauswahlnichtsinnvoll=56;INT VAR slspalte1breite,slspalte2breite,
druckzeilenzahlgrund,druckzeilenzahl,druckzeilenzahlrest,zaehler,anzzaehler,
indexspeicher,eingabestatus,aktuelleindexnr;TEXT VAR vordruck,
vordruckueberarbsl,vordruckueberarbsr,klabuliueberschrift,
auswahlnichtsinnvoll,listewirdgedruckt,bearbeitetwird,startjahr,startzug,
schuelername,schuelerrufname,schuelernamenszus,jahrgang,zug,schuelerstrasse,
schuelerort,schuelertelefon,schuelergebdat,schuelergeschlecht,schuelerreliunt
,schuelersprachen,schuelermusfach,schuelerwpffach,schuelerkursfachbez,
schuelerkursartbez,zaehleraufber,lehrer,puffer1,puffer2,druckstrich;AUSGFELD 
VAR ausgfeld;AUSGKOPF VAR slausgkopf,srausgkopf;SPEICHER VAR speicher;FILE 
VAR f,g;BOOL VAR einjahrgang,alle,elementsek1,neueklasse:=FALSE ;BOOL PROC 
multistopsim:BOOL VAR b:=FALSE ;IF wert(fnrsustatuss)="ls"THEN IF startjahr<>
""THEN b:=wert(fnrsusgrpjgst)=startjahr;IF bCAND startzug<>""THEN b:=wert(
fnrsusgrpzugtut)=startzugFI ELSE #b:=dbstatus=ok;#b:=wert(fnrsustatuss)="ls"
FI ;FI ;setzebestandende(NOT b);bEND PROC multistopsim;PROC 
klabulispezielleteile(INT CONST nr):SELECT nrOF CASE 1:
klabulidialogvorbereiten;CASE 2:klabulieingabenrichtig;CASE 3:
klabulilistenvorbereiten;CASE 4:klabulidruckvorbereiten;CASE 5:
klabuliseitedrucken;ENDSELECT .END PROC klabulispezielleteile;PROC 
klabulidialogvorbereiten:klabuliueberschrift:=text(vergleichsknoten);
setzeanfangswerte(klabulieingangsmaske,klabulianfpos).END PROC 
klabulidialogvorbereiten;PROC klabulieingabenrichtig:LET fnrjgst=2,fnrzug=3;
alle:=FALSE ;einjahrgang:=FALSE ;reinitparsing;zug:=standardmaskenfeld(fnrzug
);jahrgang:=standardmaskenfeld(fnrjgst);IF standardmaskenfeld(fnrjgst)=
niltextTHEN IF zug=niltextTHEN alle:=TRUE ;setzeausgabedrucker(TRUE );
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)
;setzeausgabedrucker(TRUE );setzeeingabetest(TRUE )FI FI .meldefehler:
meldungstext(mnrauswahlnichtsinnvoll,auswahlnichtsinnvoll);standardmeldung(
auswahlnichtsinnvoll,niltext).END PROC klabulieingabenrichtig;PROC 
klabulilistenvorbereiten:BOOL VAR b;startjahr:=jahrgang;startzug:=zug;
aktuelleindexnr:=ixsustatjgstzug;inittupel(dnrschueler);initobli(9);
setzeidentiwert("");putwert(fnrsusgrpjgst,startjahr);putwert(fnrsusgrpzugtut,
startzug);putwert(fnrsustatuss,"ls");#objektlistestarten(aktuelleindexnr,"",
fnrsusgrpjgst,TRUE ,b);#objektlistestarten(aktuelleindexnr,"",fnrsustatuss,
TRUE ,b);setzebestandende(NOT multistopsim)END PROC klabulilistenvorbereiten;
PROC klabulidruckvorbereiten:LET vordr="vordruck klassenbuchliste",manager=
"anschreiben server";setzemitseitennummern(FALSE );zaehler:=null;neueklasse:=
TRUE ;druckvorbereiten;variablenfuerdrucksetzen;holemeldungen;inittupel(
dnrschueler);putwert(fnrsusgrpjgst,startjahr);putwert(fnrsusgrpzugtut,
startzug);putwert(fnrsustatuss,"ls");lesenvorbereitendruck(PROC (INT CONST ,
BOOL PROC ,INT VAR )scanforward,BOOL PROC multistopsim);
vordruckvommanagerholen;ueberschriftenvorbereiten;initspalten;
ausgabekoepfevorbereiten;ausgfeld(3):=druckstrich.holemeldungen:meldungstext(
mnrbearbeitetwird,bearbeitetwird).variablenfuerdrucksetzen:druckstrich:=
druckbreite*mittestrich;slspalte2breite:=(druckbreite-slanzspaltentrenner-
slspalte3breite)DIV 2;slspalte1breite:=druckbreite-slanzspaltentrenner-
slspalte2breite-slspalte3breite;druckzeilenzahlgrund:=drucklaenge-
ausgkopflaenge.vordruckvommanagerholen:vordruck:=vordr;forget(vordruck,quiet)
;fetch(vordruck,/manager).END PROC klabulidruckvorbereiten;PROC 
ueberschriftenvorbereiten:LET swischuledatum=511,swiuebzeile=512,
vordrueberarbsl="vordruck ueberarbeitet sl",vordrueberarbsr=
"vordruck ueberarbeitet sr",beginnsek2=11,uebteil1sek1="Klasse: ",
uebteil1sek2="Tutorenkurs: ",ueb1teil2sek1="   Klassenlehrer: ",ueb1teil2sek2
="   Tutor: ",ueb2teil2="Schuljahr ";jahrgangundzugholen;elementsek1bestimmen
;#puffer1:=wert();#setzesonderwerteschulkenndaten;#putwert(,puffer1);#
vordruckfuellenfuerueberschrift1;vordruckfuellenfuerueberschrift2;
verbleibendedruckzeilenzahlbestimmen.jahrgangundzugholen:jahrgang:=wert(
fnrsusgrpjgst);zug:=wert(fnrsusgrpzugtut).elementsek1bestimmen:elementsek1:=
FALSE ;IF int(jahrgang)<beginnsek2THEN elementsek1:=TRUE FI .
vordruckfuellenfuerueberschrift1:setzesonderwert(swischuledatum,
aufbereiteteschuledatum);setzesonderwert(swiuebzeile,aufbereiteteklasselehrer
);vordruckueberarbsl:=vordrueberarbsl;forget(vordruckueberarbsl,quiet);
briefalternative(vordruck,vordruckueberarbsl);f:=sequentialfile(input,
vordruckueberarbsl).vordruckfuellenfuerueberschrift2:setzesonderwert(
swischuledatum,aufbereiteteschuledatum);setzesonderwert(swiuebzeile,
aufbereiteteklasseschuljahr);vordruckueberarbsr:=vordrueberarbsr;forget(
vordruckueberarbsr,quiet);briefalternative(vordruck,vordruckueberarbsr);g:=
sequentialfile(input,vordruckueberarbsr).aufbereiteteschuledatum:puffer1:=
sonderwert(501);puffer2:=sonderwert(502);puffer2+(druckbreite-length(puffer2)
-length(puffer1))*blank+puffer1.aufbereiteteklasselehrer:klassenlehrer(lehrer
,jahrgang,zug);puffer2:=jahrgang+blank+zug;IF int(jahrgang)<11THEN 
uebteil1sek1+puffer2+ueb1teil2sek1+lehrerELSE uebteil1sek2+puffer2+
ueb1teil2sek2+lehrerFI .aufbereiteteklasseschuljahr:puffer1:=ueb2teil2+
sonderwert(505);puffer2:=jahrgang+blank+zug;IF int(jahrgang)<11THEN puffer2:=
uebteil1sek1+puffer2ELSE puffer2:=uebteil1sek2+puffer2FI ;puffer2+(
druckbreite-length(puffer2)-length(puffer1))*blank+puffer1.
verbleibendedruckzeilenzahlbestimmen:druckzeilenzahl:=druckzeilenzahlgrund-
max(lines(f),lines(g));druckzeilenzahl:=min((maxanzproseiteDIV (
ausgfeldlaenge-1))*ausgfeldlaenge,druckzeilenzahl).END PROC 
ueberschriftenvorbereiten;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 ausgabekoepfevorbereiten:LET name=
"    Familienname",strasse="Straße Hausnummer",telefon="Telefonnummer",
nrrufname="Nr.   Rufname Namenszusatz",ort="Plz Ort";ausgabekopfslvorbelegen;
ausgabekopfsrvorbelegen.ausgabekopfslvorbelegen:hilfsfeldervorbelegen;
spaltenweise(name);spaltenweise(strasse);spaltenweise(telefon);slausgkopf(1)
:=zeile;spaltenweise(nrrufname);spaltenweise(ort);spaltenweise(blank);
slausgkopf(2):=zeile;slausgkopf(3):=druckstrich.hilfsfeldervorbelegen:
setzespaltenbreite(slspalte1breite);setzespaltenbreite(slspalte2breite);
setzespaltenbreite(slspalte3breite).END PROC ausgabekoepfevorbereiten;PROC 
ausgabekopfsrvorbelegen:LET srkopft1="    Geburts-  J/M  ",srkopft2=
"Nr.   datum        ",srkopf1t1="Unterr.   Sprachen  musisches  Wahlpflicht-"
,srkopf1t2="Religion            Fach       fächer",srkopf2t1="Fächer",
srkopf2t2="Kurskennungen";IF elementsek1THEN srausgkopf(1):=srkopft1+
srkopf1t1;srausgkopf(2):=srkopft2+srkopf1t2ELSE srausgkopf(1):=srkopft1+
srkopf2t1;srausgkopf(2):=srkopft2+srkopf2t2FI ;srausgkopf(3):=druckstrich.
END PROC ausgabekopfsrvorbelegen;PROC klabuliseitedrucken:
speicherrechteseiteloeschen;klabulislueberschriftdrucken;anzzaehler:=null;
seitedrucken(PROC (INT VAR )schuelerdatendrucken,druckzeilenzahl,
ausgfeldlaenge,PROC bestandendesimulierenbeiklassenwechsel,BOOL PROC 
multistopsim);IF neueklasseTHEN simuliertesendezuruecknehmen;
neuelistevorbereitenELSE IF NOT bestandendeTHEN rechteseitedrucken;
seitenwechselFI FI .speicherrechteseiteloeschen:FOR indexspeicherFROM 1UPTO 
maxanzproseiteREP speicher(indexspeicher):=niltextPER ;indexspeicher:=null.
simuliertesendezuruecknehmen:setzebestandende(FALSE ).neuelistevorbereiten:
leereschuelereintragen;rechteseitedrucken;meldelistewirdgedruckt;
drucknachbereiten;druckvorbereiten;zaehler:=null;ueberschriftenvorbereiten.
meldelistewirdgedruckt:meldungstext(mnrlistewirdgedruckt,listewirdgedruckt);
standardmeldung(listewirdgedruckt,niltext).END PROC klabuliseitedrucken;PROC 
klabulislueberschriftdrucken:INT VAR i;input(f);WHILE NOT eof(f)REP getline(f
,ausgfeld(1));druckzeileschreiben(ausgfeld(1));PER ;druckzeileschreiben(
druckstrich);FOR iFROM 1UPTO ausgkopflaengeREPEAT druckzeileschreiben(
slausgkopf(i))END REPEAT ;druckzeilenzahlrest:=druckzeilenzahl.END PROC 
klabulislueberschriftdrucken;PROC bestandendesimulierenbeiklassenwechsel:IF 
bestandendeTHEN leereschuelereintragen;rechteseitedrucken;neueklasse:=FALSE 
ELSE nochklassezubearbeiten;IF neueklasseTHEN setzebestandende(TRUE )FI ;FI .
nochklassezubearbeiten:IF alleTHEN neueklasse:=int(jahrgang)<>int(wert(
fnrsusgrpjgst));IF neueklasseTHEN ausgabekopfsrvorbelegenFI ;neueklasse:=
neueklasseOR (zug<>wert(fnrsusgrpzugtut));ELSE neueklasse:=zug<>wert(
fnrsusgrpzugtut)FI .END PROC bestandendesimulierenbeiklassenwechsel;PROC 
schuelerdatendrucken(INT VAR zeilenzaehler):LET markiert="#";
schuelerdatenholen;ggflmeldungklasse;zaehlerINCR 1;anzzaehlerINCR 1;
schuelerdatenaufbereiten;zeilenzaehlerINCR ausgfeldlaenge;
schuelerdatenindruckdatei.ggflmeldungklasse:IF zaehler=nullTHEN 
standardmeldung(bearbeitetwird,jahrgang+blank+zug+markiert)FI .END PROC 
schuelerdatendrucken;PROC schuelerdatenholen:LET weiblich="w",maennlich="m",
junge="J",maedchen="M",anzsprachen=4,prosprache=3;INT VAR i,j;schuelername:=
wert(fnrsufamnames);schuelerrufname:=2*blank+wert(fnrsurufnames);
schuelernamenszus:=wert(fnrsunamenszusatzs);jahrgang:=wert(fnrsusgrpjgst);zug
:=wert(fnrsusgrpzugtut);schuelerstrasse:=wert(fnrsustrnrs);schuelerort:=wert(
fnrsuplzorts);schuelertelefon:=wert(fnrsutelnrs);schuelergebdat:=wert(
fnrsugebdatums);IF wert(fnrsugeschlechts)=weiblichTHEN schuelergeschlecht:=
maedchenELIF wert(fnrsugeschlechts)=maennlichTHEN schuelergeschlecht:=junge
ELSE schuelergeschlecht:=blankFI ;IF elementsek1THEN 
diffdatenholenundaufbereitenELSE schuelerkursfachbez:=niltext;
schuelerkursartbez:=niltext;kursdatenholenundaufbereitenFI .
diffdatenholenundaufbereiten:INT VAR difstatus:=0;inittupel(dnrdiffdaten);IF 
wert(fnrsutiddiffdaten)<>""THEN disablestop;readtid(dnrdiffdaten,wert(
fnrsutiddiffdaten));IF iserrorTHEN clearerror;difstatus:=1FI ;enablestopFI ;
IF difstatus=0THEN schuelersprachen:=niltext;sprachenaufbereiten;
schuelerreliunt:=wert(fnrddreliunter);schuelermusfach:=wert(fnrddkunstmusik);
schuelerwpffach:=niltext;IF jahrgang="09"THEN wpf9aufbereitenELIF jahrgang=
"10"THEN wpf10aufbereitenFI FI .sprachenaufbereiten:FOR iFROM 0UPTO 
anzsprachen-1REP j:=(3*i)+55;puffer1:=wert(j);schuelersprachen:=
schuelersprachen+puffer1+(prosprache-length(puffer1))*blankPER .
wpf9aufbereiten:puffer1:=wert(fnrddfach091a);schuelerwpffach:=puffer1+(5-
length(puffer1))*blank;puffer1:=wert(fnrddfach091b);schuelerwpffach:=
schuelerwpffach+puffer1+(5-length(puffer1))*blank;puffer1:=wert(fnrddfach092a
);schuelerwpffach:=schuelerwpffach+puffer1+(5-length(puffer1))*blank;puffer1
:=wert(fnrddfach092b);schuelerwpffach:=schuelerwpffach+puffer1+(5-length(
puffer1))*blank.wpf10aufbereiten:puffer1:=wert(fnrddfach101a);schuelerwpffach
:=puffer1+(5-length(puffer1))*blank;puffer1:=wert(fnrddfach101b);
schuelerwpffach:=schuelerwpffach+puffer1+(5-length(puffer1))*blank;puffer1:=
wert(fnrddfach102a);schuelerwpffach:=schuelerwpffach+puffer1+(5-length(
puffer1))*blank;puffer1:=wert(fnrddfach102b);schuelerwpffach:=schuelerwpffach
+puffer1+(5-length(puffer1))*blank.kursdatenholenundaufbereiten:putwert(
fnrhjdfamnames,schuelername);putwert(fnrhjdrufnames,compress(schuelerrufname)
);putwert(fnrhjdgebdats,schuelergebdat);putwert(fnrhjdjgst,jahrgang);putwert(
fnrhjdhj,schulkenndatum("Schulhalbjahr"));search(ixhjdfamrufgebjgsthj,TRUE );
pause(5);IF dbstatus=okTHEN kursartzuweisenFI .#dr31.03.88kursartzuweisen:
TEXT VAR suchbegriff:="";FOR iFROM 1UPTO (length(wert(fnrhjdfach))DIV 2)REP 
puffer1:=wert(fnrhjdkursart)SUB i;schuelerkursartbez:=schuelerkursartbez+
puffer1+(2-length(puffer1))*blank;suchbegriff:=subtext(wert(fnrhjdfach),(2*i)
-1,2*i);suchbegriff:=compress(suchbegriff);putwert(fnrffach,suchbegriff);
search(dnrfaecher,TRUE );IF dbstatus=okTHEN puffer1:=wert(fnrffachbez);
schuelerkursfachbez:=schuelerkursfachbez+puffer1+(3-length(puffer1))*blank;
FI ;PER .#kursartzuweisen:TEXT VAR suchbegriff:="";FOR iFROM 1UPTO (length(
wert(fnrhjdfach))DIV 2)REP suchbegriff:=subtext(wert(fnrhjdfach),(2*i)-1,2*i)
;suchbegriff:=compress(suchbegriff);putwert(fnrffach,suchbegriff);search(
dnrfaecher,TRUE );IF dbstatus=okTHEN puffer1:=wert(fnrffach);
schuelerkursfachbez:=schuelerkursfachbez+text(puffer1,3);puffer1:=wert(
fnrhjdkursart)SUB i;schuelerkursartbez:=schuelerkursartbez+text(puffer1,3);
ELSE schuelerkursfachbez:=schuelerkursfachbez+(3*blank);schuelerkursartbez:=
schuelerkursartbez+(3*blank);FI ;PER .END PROC schuelerdatenholen;PROC 
schuelerdatenaufbereiten:zaehleraufbereiten;schreibenrnamestrassetelnr;
schreiberufnameort;datenfuerrechteseitespeichern.schreibenrnamestrassetelnr:
spaltenweise(zaehleraufber+2*blank+schuelername);spaltenweise(schuelerstrasse
);spaltenweise(schuelertelefon);ausgfeld(1):=zeile.schreiberufnameort:
spaltenweise(4*blank+schuelerrufname+blank+schuelernamenszus);spaltenweise(
schuelerort);spaltenweise(blank);ausgfeld(2):=zeile.
datenfuerrechteseitespeichern:indexspeicherINCR 1;speicher(indexspeicher):=
zaehleraufber+2*blank+aufbgebdat+3*blank+schuelergeschlecht;IF elementsek1
THEN speicher(indexspeicher):=speicher(indexspeicher)+6*blank+aufbreliunt+5*
blank+schuelersprachen+4*blank+aufbmusfach+6*blank+schuelerwpffach;
indexspeicherINCR 1ELSE speicher(indexspeicher):=speicher(indexspeicher)+3*
blank+schuelerkursfachbez;indexspeicherINCR 1;speicher(indexspeicher):=19*
blank+schuelerkursartbezFI .aufbgebdat:IF schuelergebdat=niltextTHEN 8*blank
ELSE schuelergebdatFI .aufbreliunt:IF schuelerreliunt=niltextOR (reliabmeld
AND NOT relianmeld)THEN 2*blankELSE schuelerreliuntFI .reliabmeld:wert(
fnrddabmeldedatreli)<>nildatumdb.relianmeld:wert(fnrddanmeldedatreli)<>
nildatumdb.aufbmusfach:IF schuelermusfach=niltextTHEN 2*blankELSE 
schuelermusfachFI .END PROC schuelerdatenaufbereiten;PROC 
schuelerdatenindruckdatei:INT VAR i;FOR iFROM 1UPTO ausgfeldlaengeREP 
druckzeileschreiben(ausgfeld(i))PER ;druckzeilenzahlrestDECR ausgfeldlaenge.
END PROC schuelerdatenindruckdatei;PROC leereschuelereintragen:INT VAR 
leereschuelermoeglich,i;indexspeicherINCR 1;moeglicheschuelereintragen.
moeglicheschuelereintragen:leereschuelermoeglich:=druckzeilenzahlrestDIV 
ausgfeldlaenge;FOR iFROM 1UPTO leereschuelermoeglichREP zaehlerINCR 1;
zaehleraufbereiten;ausgfeld(1):=text(zaehleraufber,druckbreite);ausgfeld(2):=
text(blank,druckbreite);schuelerdatenindruckdatei;
leerenschuelerfuerrechteseitespeichernPER .
leerenschuelerfuerrechteseitespeichern:anzzaehlerINCR 1;speicher(
indexspeicher):=text(zaehleraufber,druckbreite);indexspeicherINCR 2.END PROC 
leereschuelereintragen;PROC rechteseitedrucken:INT VAR i,j;seitenwechsel;
klabulisrueberschriftdrucken;FOR iFROM 1UPTO anzzaehlerREP j:=2*i;ausgfeld(1)
:=speicher(j-1);ausgfeld(2):=speicher(j);schuelerdatenindruckdateiPER .END 
PROC rechteseitedrucken;PROC klabulisrueberschriftdrucken:INT VAR i;input(g);
WHILE NOT eof(g)REP getline(g,ausgfeld(1));druckzeileschreiben(ausgfeld(1));
PER ;druckzeileschreiben(druckstrich);FOR iFROM 1UPTO ausgkopflaengeREPEAT 
druckzeileschreiben(srausgkopf(i))END REPEAT .END PROC 
klabulisrueberschriftdrucken;PROC zaehleraufbereiten:LET zaehlerzweistellig=
10;IF zaehler<zaehlerzweistelligTHEN zaehleraufber:=blankELSE zaehleraufber:=
niltextFI ;zaehleraufber:=zaehleraufber+text(zaehler).END PROC 
zaehleraufbereiten;END PACKET klassenbuchlisten;