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