app/schulis/2.2.1/src/1.listenweise erg vers konf

Raw file
Back to index

PACKET listenweiseergverskonfDEFINES bearbeitungergverskonf,
ergverskonfnichtspeichern,ergverskonfspeichern:LET tofather=1,tograndfather=2
,jgst5=5,jgst13=13,leerejgst="  ",maxfach=3,niltext="",blank=" ",
namenstrenner=", ",unterstrich="_",null=0,leererzug="    ",meldtrenner="#";
LET nachpruefling="n",versetzter="vs",wiederholer="wf";LET schuljahrkey=
"Schuljahr",schulhalbjahrkey="Schulhalbjahr";LET maxschueler=15,erstesfeld=2,
felderprozeile=4,schuelerproseite=16,laengefach=2;LET gwklasse=1;LET 
meldbestleer=59,meldnichtspeichern=63,meldplausi=57,meldwarten=69,
meldspeicherung=132,meldspeicherfehler=131,meldfalscheauswahl=56,
meldtransaktionsfehler=138,meldfalscheeingabe1=136,meldfalscheeingabe2=137,
meldungueltigesfach=149;LET pruefartgrenzen=3;LET fnrjgst=2,fnrtutor=3,
fnrklasse=2,fnrname=3,fnrvers=4,fnrnachprfaecher=5;LET einejgst=2,eineklasse=
3;LET standardanfang=1,standardeinstieg=4;LET allespruefen=1,einejgstpruefen=
2,eineklassepruefen=3;LET anzkenndaten=3,sek2min=11,laufbestand="ls";LET 
logtextbeginn="Anw. 1.4.4 Versetzungen für ",logtextalleklassen=
"alle Klassen";BOOL VAR nochwelcheda,alleklassen;INT VAR waspruefen:=0;INT 
VAR laengeklasse,laengename,laengenachprfaecher,bestandindex,laengevers,
schuelerzahl,aktuellesfeld;ROW schuelerproseiteROW anzkenndatenTEXT VAR 
kenndatum;ROW schuelerproseiteTEXT VAR altedaten;TEXT VAR schuelertid:="",
hjdtid:="";TEXT VAR versetzungszeichen:="";TEXT VAR startkey1,startkey2,
sicherungstupel,vergleichsjgst,zulaessigekuerzel,schuljahr,schulhalbjahr,
gueltigejgst,gueltigerzug;TEXT VAR fachkatalog:="";LET trenner="�";PROC 
bearbeitungergverskonf:reinitparsing;eingangsbildschirmpruefen;IF 
eingangsbildschirmokTHEN initialisierungenvornehmen;naechsteportionlesen;IF 
keinemehrdaTHEN bestandleermelden;enter(tofather)ELSE standardnprocFI ELSE 
eingangsmaskenfehler;return(tofather)FI .eingangsbildschirmpruefen:INT VAR 
pruefstatus:=null;startkey1:=niltext;startkey2:=niltext;vergleichsjgst:=
niltext;alleklassen:=FALSE ;IF standardmaskenfeld(fnrjgst)<>niltextTHEN 
standardpruefe(pruefartgrenzen,fnrjgst,jgst5,jgst13,niltext,pruefstatus);IF 
pruefstatus=nullTHEN startkey1:=jgstaufber(standardmaskenfeld(fnrjgst));
vergleichsjgst:=startkey1;startkey2:=standardmaskenfeld(fnrtutor);IF 
standardmaskenfeld(fnrtutor)=niltextTHEN bestandindex:=einejgstELSE 
bestandindex:=eineklasseFI FI ELIF standardmaskenfeld(fnrtutor)<>niltextTHEN 
pruefstatus:=fnrtutorELSE alleklassen:=TRUE FI .eingangsbildschirmok:
pruefstatus=null.initialisierungenvornehmen:plausipruefungvorbereiten;
bestandsetzen;standardstartproc(maske(vergleichsknoten));laengenfestlegen;IF 
waspruefen=einejgstpruefenCAND sek2THEN startebildschirmblock(ixsustatjgst,
maxschueler);ELSE startebildschirmblock(ixsustatjgstzug,maxschueler);FI .sek2
:int(startkey1)>=sek2min.bestandsetzen:bestimmebestand;setzestartkeys;
pruefebestand.bestimmebestand:schuljahr:=schulkenndatum(schuljahrkey);
schulhalbjahr:=schulkenndatum(schulhalbjahrkey);IF alleklassenTHEN 
alleklassensetzenELSE SELECT bestandindexOF CASE einejgst:bestandjgstCASE 
eineklasse:bestandklasseEND SELECT FI ;.alleklassensetzen:waspruefen:=
allespruefen;infeld(fnrjgst).bestandjgst:waspruefen:=einejgstpruefen;infeld(
fnrjgst).bestandklasse:waspruefen:=eineklassepruefen;infeld(fnrtutor).
setzestartkeys:inittupel(dnrschueler);putwert(fnrsustatuss,laufbestand);
putwert(fnrsusgrpjgst,startkey1);putwert(fnrsusgrpzugtut,startkey2);.
pruefebestand:IF waspruefen=einejgstpruefenCAND sek2THEN search(ixsustatjgst,
FALSE )ELSE search(ixsustatjgstzug,FALSE )FI ;IF dbstatus<>nullCOR (NOT 
pruefungspeziell(waspruefen))THEN bestandleermelden;return(tofather);LEAVE 
bearbeitungergverskonfELSE nochwelcheda:=TRUE FI .laengenfestlegen:
laengeklasse:=standardfeldlaenge(fnrklasse);laengename:=standardfeldlaenge(
fnrname);laengevers:=standardfeldlaenge(fnrvers);laengenachprfaecher:=
standardfeldlaenge(fnrnachprfaecher).plausipruefungvorbereiten:
standardmeldung(meldwarten,niltext);zulaessigekuerzel:=nachpruefling+
versetzter+wiederholer+blank.naechsteportionlesen:blocklesenundausgeben.
keinemehrda:NOT nochwelcheda.bestandleermelden:infeld(fnrjgst);
standardmeldung(meldbestleer,niltext).eingangsmaskenfehler:standardmeldung(
meldfalscheauswahl,niltext);infeld(pruefstatus).END PROC 
bearbeitungergverskonf;PROC ergverskonfnichtspeichern:nichtspeichernmelden;
startkeyssetzen;neuerblock.nichtspeichernmelden:standardmeldung(
meldnichtspeichern,niltext);pause(10).startkeyssetzen:restoretupel(
dnrschueler,sicherungstupel);#dr02.05.88#changeindex.END PROC 
ergverskonfnichtspeichern;PROC ergverskonfspeichern:BOOL VAR hjdgefunden:=
FALSE ;pruefeplausibilitaet;IF dateninordnungTHEN speicherungdurchfuehren;
startkeyssetzen;neuerblockELSE eingabefehler;return(tofather)FI .
pruefeplausibilitaet:standardmeldung(meldplausi,niltext);BOOL VAR 
dateninordnung:=TRUE ,richtigesverskz,ungueltigefachangaben:=FALSE ,
fachfehler:=FALSE ;INT VAR versfeld:=felderprozeile;FOR suindFROM 1UPTO 
schuelerzahlREP pruefezeile;IF NOT dateninordnungTHEN LEAVE 
pruefeplausibilitaetFI ;versfeldINCR felderprozeilePER .pruefezeile:TEXT VAR 
gefundenesverskz:=standardmaskenfeld(versfeld);richtigesverskz:=
gefundenesverskz=niltextOR (pos(zulaessigekuerzel,gefundenesverskz)>null);IF 
richtigesverskzTHEN pruefefachangabenzuverskz;IF ungueltigefachangabenTHEN 
dateninordnung:=FALSE FI ELSE dateninordnung:=FALSE FI .
pruefefachangabenzuverskz:IF gefundenesverskz<>nachprueflingTHEN IF NOT 
keineeingabenTHEN ungueltigefachangaben:=TRUE FI ELSE pruefefachangaben;IF 
fachfehlerTHEN ungueltigefachangaben:=TRUE FI FI .pruefefachangaben:IF 
fachkatalog=niltextTHEN holeaktuellenfachkatalogFI ;TEXT VAR fachangaben:=
standardmaskenfeld(versfeld+1);INT VAR lenfachang:=length(fachangaben);INT 
VAR fachanzahl:=(lenfachang+1)DIV laengefach;INT VAR i;TEXT VAR fach;FOR i
FROM 0UPTO fachanzahl-1REP fach:=subtext(fachangaben,i*laengefach+1,i*
laengefach+laengefach);changeall(fach,unterstrich,niltext);fach:=compress(
fach);IF fach<>niltextCAND fachungueltig(fach)THEN fachfehler:=TRUE FI UNTIL 
fachfehlerPER .keineeingaben:BOOL VAR b:=TRUE ;INT VAR lv;TEXT VAR t:=
standardmaskenfeld(versfeld+1);FOR lvFROM 1UPTO length(t)REP b:=(tSUB lv)=
unterstrichUNTIL NOT bPER ;b.speicherungdurchfuehren:vorbereiten;
logeintragvornehmen;aendernschleife;kurzwarten.logeintragvornehmen:TEXT VAR 
eintrag:=logtextbeginn;IF alleklassenTHEN eintragCAT logtextalleklassenELSE 
eintragCAT startkey1;eintragCAT startkey2FI ;logeintrag(eintrag).kurzwarten:
pause(10).vorbereiten:gueltigejgst:=vergleichsjgst;gueltigerzug:=startkey2;.
aendernschleife:INT VAR suind;INT VAR zahlderaenderungen:=null;INT VAR 
satzindex:=felderprozeile-1;FOR suindFROM 1UPTO schuelerzahlREP 
behandleschuelersatz;satzindexINCR felderprozeilePER .behandleschuelersatz:
IF vergleichsjgst=niltextTHEN gueltigejgstneubestimmenFI ;IF startkey2=
niltextTHEN gueltigenzugneubestimmenFI ;IF datenveraendertTHEN 
fuehreaenderungaus;meldevollzugFI .gueltigejgstneubestimmen:TEXT VAR 
pruefjgst:=subtext(standardmaskenfeld(satzindex-1),1,2);IF pruefjgst<>
leerejgstTHEN gueltigejgst:=pruefjgstFI ;.gueltigenzugneubestimmen:TEXT VAR 
pruefzug:=subtext(standardmaskenfeld(satzindex-1),3,6);IF pruefzug<>leererzug
THEN gueltigerzug:=pruefzugFI .datenveraendert:altedaten(suind)<>(
standardmaskenfeld(satzindex+1)+standardmaskenfeld(satzindex+2)).
fuehreaenderungaus:lesenvorbereiten;lesen;hjdgefunden:=dbstatus=ok;IF 
dbstatus=okTHEN saveupdateposition(dnrhalbjahresdaten);hjdtid:=gettid;
versetzungszeichen:=wert(fnrhjdversetzung);zurueckschreiben;ELSE 
versetzungszeichen:=niltext;neuensatzankoppelnFI .lesenvorbereiten:
zahlderaenderungenINCR 1;schluesselfuerhjdsetzen(dnrhalbjahresdaten,kenndatum
[suind],schuljahr,schulhalbjahr,gueltigejgst);.lesen:search(
dnrhalbjahresdaten,TRUE );.zurueckschreiben:IF datenaenderungTHEN 
transaktionsfehlerELSE schreibtransaktionFI .datenaenderung:(
versetzungsergebnis+nachpruefungsfaecher)<>altedaten(suind).
versetzungsergebnis:wert(fnrhjdversetzung).transaktionsfehler:standardmeldung
(meldtransaktionsfehler,niltext);return(tofather);infeld(suind*felderprozeile
);LEAVE ergverskonfspeichern.schreibtransaktion:setzedaten;
vorhandenensatzaendern.setzedaten:setzeverskz;setzefaecherdaten.setzeverskz:
putwert(fnrhjdversetzung,standardmaskenfeld(satzindex+1)).setzefaecherdaten:
INT VAR fachindanfang:=1,fachindende:=2;INT VAR fachind;TEXT VAR 
eingegebenenpfaecher:=standardmaskenfeld(satzindex+2);TEXT VAR einzelfach;
FOR fachindFROM 0UPTO maxfach-1REP einzelfach:=subtext(eingegebenenpfaecher,
fachindanfang,fachindende);IF einzelfach<>laengefach*unterstrichTHEN 
changeall(einzelfach,unterstrich,niltext);putwert(fnrhjdnachfach1+fachind,
compress(einzelfach))ELSE putwert(fnrhjdnachfach1+fachind,niltext)FI ;
fachindanfangINCR laengefach;fachindendeINCR laengefach;PER .
vorhandenensatzaendern:IF standardmaskenfeld(satzindex+1)<>versetzungszeichen
THEN restoreupdateposition(dnrhalbjahresdaten);#update(dnrhalbjahresdaten);
dr10.05.88#selupdate(dnrhalbjahresdaten)ELSE replace(dnrhalbjahresdaten,
hjdtid)FI .neuensatzankoppeln:setzedaten;putwert(fnrhjdkennung,compress(
gueltigerzug));insert(dnrhalbjahresdaten);hjdtid:=gettid;.meldevollzug:TEXT 
VAR meldungstext;IF dbstatus=0THEN IF NOT hjdgefundenTHEN 
neueshjdtidinschuelerdateieintragen(satzindex+1);FI ;#dr04.05.88hjdtid:=
gettid;neueshjdtidinschuelerdateieintragen(satzindex+1);##dr10.05.88
eventuellinstatwuerfelaendern(satzindex+1);#meldungstext:=compress(
standardmaskenfeld(satzindex))+meldtrenner;standardmeldung(meldspeicherung,
meldungstext)ELSE meldungstext:=text(dbstatus)+meldtrenner;meldungstextCAT 
compress(standardmaskenfeld(satzindex));meldungstextCAT meldtrenner;
standardmeldung(meldspeicherfehler,meldungstext);return(tofather);LEAVE 
ergverskonfspeichernFI ;infeld(satzindex+1).startkeyssetzen:restoretupel(
dnrschueler,sicherungstupel);#dr02.05.88#changeindex.eingabefehler:IF NOT 
richtigesverskzTHEN standardmeldung(meldfalscheeingabe1,standardmaskenfeld(
versfeld)+meldtrenner);infeld(versfeld)ELIF fachfehlerTHEN standardmeldung(
meldungueltigesfach,fach+meldtrenner);infeld(versfeld+1)ELSE standardmeldung(
meldfalscheeingabe2,niltext);infeld(versfeld+1)FI .END PROC 
ergverskonfspeichern;PROC neuerblock:blocklesenundausgeben;IF nochwelcheda
THEN return(tofather)ELSE enter(tograndfather)FI .END PROC neuerblock;PROC 
blocklesenundausgeben:parsenooffields(fnrhjdnachfach3-dnrhalbjahresdaten);
vorbereiten;initgruppenwechsel;gewuenschteszeigen;nachbereiten;reinitparsing.
vorbereiten:IF NOT nochwelchedaTHEN reinitparsing;LEAVE blocklesenundausgeben
FI ;standardmeldung(meldwarten,niltext);schuelerzahl:=null;aktuellesfeld:=
erstesfeld.gewuenschteszeigen:parsenooffields(12);#dr04.05.88#bildschirmblock
(PROC datenzeigen,BOOL PROC (INT CONST )pruefungspeziell,waspruefen);
reinitparsing#dr04.05.88#.nachbereiten:nochwelcheda:=(schuelerzahl>null);IF 
nochwelchedaTHEN savetupel(dnrschueler,sicherungstupel);#dr02.05.88#
restlichezeilenloeschen;infeld(standardanfang);standardfelderausgebenELSE 
LEAVE blocklesenundausgebenFI ;infeld(standardeinstieg).
restlichezeilenloeschen:INT VAR zeilenzaehler;INT VAR zeilenfeld:=(
schuelerzahl*felderprozeile)+1;FOR zeilenzaehlerFROM schuelerzahlUPTO 
maxschuelerREP loeschezeilePER .loeschezeile:INT VAR zeilenincr;FOR 
zeilenincrFROM 1UPTO felderprozeileREP zeilenfeldINCR 1;standardmaskenfeld(
standardfeldlaenge(zeilenfeld)*blank,zeilenfeld);feldschutz(zeilenfeld)PER .
END PROC blocklesenundausgeben;PROC namezeigen:namenretten;standardmaskenfeld
(text(schuelername+namenstrenner+schuelervorname,laengename),aktuellesfeld);
aktuellesfeldINCR 1.namenretten:TEXT VAR schuelername,schuelervorname;
schuelername:=wert(fnrsufamnames);schuelervorname:=wert(fnrsurufnames);
kenndatum[schuelerzahl][1]:=schuelername;kenndatum[schuelerzahl][2]:=
schuelervorname;kenndatum[schuelerzahl][3]:=datumrekonversion(wert(
fnrsugebdatums));.END PROC namezeigen;PROC datenzeigen:BOOL VAR neuerstellen
:=FALSE ;zeigen;merken.zeigen:vorbereiten;alteklassezeigen;namezeigen;
halbjahresdatensuchen;versetzungsdatenzeigen.vorbereiten:schuelerzahlINCR 1;
TEXT VAR merkdaten:=niltext.alteklassezeigen:TEXT CONST alteklasse:=
jgstaufber(wert(fnrsusgrpjgst))+wert(fnrsusgrpzugtut);gruppenwechsel(
alteklasse,gwklasse,laengeklasse,1,aktuellesfeld).halbjahresdatensuchen:
inittupel(dnrhalbjahresdaten);#schluesselfuerhjdsetzen(dnrhalbjahresdaten,
kenndatum[schuelerzahl],schuljahr,schulhalbjahr,startkey1);search(
dnrhalbjahresdaten,TRUE );neuerstellen:=dbstatus<>ok##dr04.05.88#IF wert(
fnrsutidakthjd)<>niltext#neudr04.05.88#THEN disablestop;readtid(
dnrhalbjahresdaten,wert(fnrsutidakthjd));IF iserrorTHEN clearerror;
neuerstellen:=TRUE ELSE neuerstellen:=FALSE FI ;enablestopELSE neuerstellen:=
TRUE FI .versetzungsdatenzeigen:versetzunginmaske;feldfreigeben;
nachprfaecherinmaske;feldfreigeben.versetzunginmaske:TEXT VAR versetzungskz:=
niltext;IF NOT neuerstellenTHEN versetzungskz:=wert(fnrhjdversetzung);FI ;
merkdatenCAT versetzungskz;standardmaskenfeld(versetzungskz,aktuellesfeld).
nachprfaecherinmaske:TEXT VAR nachprfaecher:=niltext;IF NOT neuerstellenTHEN 
nachprfaecher:=nachpruefungsfaecher;FI ;merkdatenCAT nachprfaecher;
standardmaskenfeld(nachprfaecher,aktuellesfeld).feldfreigeben:feldfrei(
aktuellesfeld);aktuellesfeldINCR 1.merken:altedaten(schuelerzahl):=merkdaten.
END PROC datenzeigen;TEXT PROC nachpruefungsfaecher:TEXT VAR nfaecher:=
niltext;INT VAR fachind;FOR fachindFROM 0UPTO maxfach-1REP IF wert(
fnrhjdnachfach1+fachind)=niltextTHEN nfaecherCAT (laengefach*unterstrich)
ELSE nfaecherCAT text(wert(fnrhjdnachfach1+fachind),laengefach);FI PER ;
nfaecherEND PROC nachpruefungsfaecher;PROC feldloeschen(INT CONST laenge):
standardmaskenfeld(laenge*blank,aktuellesfeld)END PROC feldloeschen;BOOL 
PROC pruefungspeziell(INT CONST wasistzutun):BOOL VAR b:=FALSE ;SELECT 
wasistzutunOF CASE allespruefen:pruefungalleklassen(b)CASE einejgstpruefen:
pruefungeinejgst(b)CASE eineklassepruefen:pruefungeineklasse(b)END SELECT ;b
END PROC pruefungspeziell;PROC pruefungalleklassen(BOOL VAR bool):bool:=(wert
(fnrsustatuss)=laufbestand)END PROC pruefungalleklassen;PROC pruefungeinejgst
(BOOL VAR bool):bool:=(wert(fnrsustatuss)=laufbestandCAND jgstaufber(wert(
fnrsusgrpjgst))=startkey1)END PROC pruefungeinejgst;PROC pruefungeineklasse(
BOOL VAR bool):bool:=(wert(fnrsustatuss)=laufbestandCAND jgstaufber(wert(
fnrsusgrpjgst))=startkey1CAND wert(fnrsusgrpzugtut)=startkey2)END PROC 
pruefungeineklasse;PROC neueshjdtidinschuelerdateieintragen(INT CONST nr):IF 
standardmaskenfeld(nr)<>versetzungszeichenTHEN inittupel(dnrschueler);putwert
(fnrsufamnames,wert(fnrhjdfamnames));putwert(fnrsurufnames,wert(
fnrhjdrufnames));putwert(fnrsugebdatums,wert(fnrhjdgebdats));search(
dnrschueler,TRUE );IF dbstatus=okTHEN schuelertid:=gettid;putwert(
fnrsutidakthjd,hjdtid);replace(dnrschueler,schuelertid)FI FI END PROC 
neueshjdtidinschuelerdateieintragen;BOOL PROC fachungueltig(TEXT CONST objekt
):pos(fachkatalog,trenner+objekt+trenner)=0END PROC fachungueltig;PROC 
fachcat(BOOL VAR b):fachkatalogCAT wert(dnrfaecher+1)+trenner;END PROC 
fachcat;PROC holeaktuellenfachkatalog:fachkatalog:=trenner;statleseschleife(
dnrfaecher,"","",dnrfaecher+1,dnrfaecher+1,PROC fachcat);END PROC 
holeaktuellenfachkatalog;#dr10.05.88PROC eventuellinstatwuerfelaendern(INT 
CONST nummer):IF standardmaskenfeld(nummer)<>versetzungszeichenTHEN 
kuerzelsummeeinsrunter(statnrversetzung,jgstaufber(gueltigejgst),compress(
gueltigerzug),compress(laufbestand),compress(versetzungszeichen));
kuerzelsummeeinsrauf(statnrversetzung,jgstaufber(gueltigejgst),compress(
gueltigerzug),compress(laufbestand),compress(standardmaskenfeld(nummer)));FI 
END PROC eventuellinstatwuerfelaendern;#END PACKET listenweiseergverskonf