PACKET listenweiseergnachprDEFINES bearbeitungergnachpr, ergnachprnichtspeichern,ergnachprspeichern:LET tofather=1,tograndfather=2, jgst5=5,jgst13=13,niltext="",blank=" ",namenstrenner=", ",null=0,punkt=".", meldtrenner="#";LET jgstufe10=10;LET einejgst=2,eineklasse=3;LET geaendertersatz="x",kznachpruefung="n",dreizehnnachprsatz="N";LET standardanfang=1,standardeinstieg=2,abstandzumnamen=2;LET maxschueler=15, erstesfeld=5,felderprozeile=6,schuelerproseite=16;LET gwklasse=1;LET bestandengrenzeeinstellig=4,bestandengrenzezweistellig="05",minnoteeinstellig =1,maxnoteeinstellig=6,minnotezweistellig="00",maxnotezweistellig="15", leernote="";LET meldbestleer=59,meldnichtspeichern=63,meldwarten=69, meldspeicherung=132,meldspeicherfehler=131,meldfalschesfach=147, meldungueltigenote=148,meldfalschesg=134,meldfehlendesfach=52, meldtransaktionsfehler=138,meldplausi=57,meldfalscheauswahl=56, meldzugtutorfehlt=52;LET pruefartgrenzen=3;LET fnrjgst=2,fnrtutor=3,fnrklasse =2,fnrname=3,fnrbetr=4,fnrfach=5,fnrnote=6,fnrzug=7;LET schuljahrkey= "Schuljahr",anfangschuljahrkey="Anfang Schulhalbjahr",halbjahr1="1",halbjahr2 ="2",bestandlaufsj="ls",bestandabgegangene="abg";LET allespruefen=1, einejgstpruefen=2,eineklassepruefen=3;LET anzkenndaten=3,sek2min=11;LET logtextbeginn="Anw. 1.4.9 Nachprüfungen für ",logtextalleklassen= "alle Klassen";BOOL VAR nochwelcheda,alleklassen;INT VAR waspruefen, laengeklasse,laengename,laengebetr,laengefach,laengenote,laengezugtutor, bestandindex,schuelerzahl,aktuellesfeld;ROW schuelerproseiteTEXT VAR name; ROW schuelerproseiteTEXT VAR rufname;ROW schuelerproseiteTEXT VAR gebdatum; ROW schuelerproseiteBOOL VAR dreizehner;ROW schuelerproseiteTEXT VAR altedaten;ROW schuelerproseiteTEXT VAR npfaecher;ROW anzkenndatenTEXT VAR key ;TEXT VAR startkey1,startkey2,aktschuljahr,schuljahr,schulhalbjahr,hjdtupel, schuelertupel,sichtupel;PROC bearbeitungergnachpr: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;alleklassen:=FALSE ; IF standardmaskenfeld(fnrjgst)<>niltextTHEN standardpruefe(pruefartgrenzen, fnrjgst,jgst5,jgst13,niltext,pruefstatus);IF pruefstatus=nullTHEN startkey1:= jgstaufber(standardmaskenfeld(fnrjgst));startkey2:=standardmaskenfeld( fnrtutor);IF standardmaskenfeld(fnrtutor)=niltextTHEN bestandindex:=einejgst ELSE bestandindex:=eineklasseFI FI ELIF standardmaskenfeld(fnrtutor)<>niltext THEN pruefstatus:=fnrtutorELSE alleklassen:=TRUE FI .eingangsbildschirmok: pruefstatus=null.initialisierungenvornehmen:plausipruefungvorbereiten; bestandsetzen;standardstartproc(maske(vergleichsknoten));laengenfestlegen;IF waspruefen=einejgstpruefenAND sek2THEN startebildschirmblock( ixhjdsjhjverjgstkenn,maxschueler);ELSE startebildschirmblock(ixhjdsjhjverjgst ,maxschueler);FI .sek2:int(startkey1)>=sek2min.bestandsetzen:bestimmebestand; setzestartkeys;pruefebestand.bestimmebestand:aktschuljahr:=schulkenndatum( schuljahrkey);schuljahr:=subtext(aktschuljahr,1,2);schuljahr:=text(int( schuljahr)-1)+schuljahr;schulhalbjahr:=halbjahr2;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:putwert(fnrhjdsj,schuljahr);putwert(fnrhjdhj,schulhalbjahr); putwert(fnrhjdjgst,startkey1);putwert(fnrhjdkennung,startkey2);putwert( fnrhjdversetzung,kznachpruefung).pruefebestand:search(ixhjdsjhjverjgstkenn, FALSE );IF dbstatus<>nullOR (NOT pruefungspeziell(waspruefen))THEN bestandleermelden;return(tofather);LEAVE bearbeitungergnachprELSE nochwelcheda:=TRUE FI .laengenfestlegen:laengeklasse:=standardfeldlaenge( fnrklasse);laengename:=standardfeldlaenge(fnrname);laengebetr:= standardfeldlaenge(fnrbetr);laengefach:=standardfeldlaenge(fnrfach); laengenote:=standardfeldlaenge(fnrnote);laengezugtutor:=standardfeldlaenge( fnrzug).plausipruefungvorbereiten:standardmeldung(meldwarten,niltext);. naechsteportionlesen:blocklesenundausgeben.keinemehrda:NOT nochwelcheda. bestandleermelden:infeld(fnrjgst);standardmeldung(meldbestleer,niltext). eingangsmaskenfehler:standardmeldung(meldfalscheauswahl,niltext);infeld( pruefstatus).END PROC bearbeitungergnachpr;PROC ergnachprnichtspeichern: nichtspeichernmelden;startkeyssetzen;neuerblock.nichtspeichernmelden: standardmeldung(meldnichtspeichern,niltext);pause(10).startkeyssetzen: restoretupel(dnrhalbjahresdaten,hjdtupel);changeindex.END PROC ergnachprnichtspeichern;PROC ergnachprspeichern:BOOL VAR halbjahresdateninzwischengeaendert,schuelerdateninzwischengeaendert;TEXT VAR altejgst:="",alterzug:="",neuejgst:="";pruefeplausibilitaet;IF dateninordnung THEN speicherungdurchfuehren;startkeyssetzen;neuerblockELSE eingabefehler; return(tofather)FI .pruefeplausibilitaet:standardmeldung(meldplausi,niltext); BOOL VAR dateninordnung:=TRUE ;INT VAR satzindex:=erstesfeld;INT VAR fehlernr ;TEXT VAR fehlertext:=niltext;FOR suindFROM 1UPTO schuelerzahlREP pruefezeile ;IF NOT dateninordnungTHEN LEAVE pruefeplausibilitaetFI ;satzindexINCR felderprozeilePER .pruefezeile:dateninordnung:=allesfreiCOR allesrichtig. allesrichtig:((noterichtig)CAND (schuelergrupperichtig))CAND (fachrichtig). noterichtig:((NOT fehlendertutor)CAND (gueltigenote))CAND (NOT fehlendesfach) .fehlendertutor:fehlernr:=meldzugtutorfehlt;aktuellesfeld:=satzindex+2; sitzengebliebenCAND keintutor.sitzengeblieben:IF length(eingegebenenote)=1 THEN int(eingegebenenote)>bestandengrenzeeinstelligELSE eingegebenenote< bestandengrenzezweistelligFI .eingegebenenote:standardmaskenfeld(satzindex+1) .gueltigenote:fehlernr:=meldungueltigenote;aktuellesfeld:=satzindex+1;TEXT VAR pruefungsnote:=eingegebenenote;noteimbereich.noteimbereich:pruefungsnote= leernoteOR (notenichtzukleinCAND notenichtzugross).notenichtzuklein:IF length (pruefungsnote)=1THEN int(pruefungsnote)>=minnoteeinstelligELSE pruefungsnote >=minnotezweistelligFI .notenichtzugross:IF length(pruefungsnote)=1THEN int( pruefungsnote)<=maxnoteeinstelligELSE pruefungsnote<=maxnotezweistelligFI . fehlendesfach:fehlernr:=meldfehlendesfach;aktuellesfeld:=satzindex;bestanden CAND keinfach.bestanden:NOT sitzengeblieben.schuelergrupperichtig:fehlernr:= meldfalschesg;aktuellesfeld:=satzindex+2;fehlertext:=standardmaskenfeld( aktuellesfeld)+meldtrenner;keintutorCOR schuelergruppeimbestand. schuelergruppeimbestand:#????#putwert(fnrsgrpsj,aktschuljahr);putwert( fnrsgrphj,halbjahr1);putwert(fnrsgrpjgst,schuelergruppenschluessel);putwert( fnrsgrpkennung,eingegebenertutor);search(dnraktschuelergruppen,TRUE ); dbstatus=null.schuelergruppenschluessel:IF bestandenCAND NOT dreizehnernachprueflingTHEN jahrgangsstufeeinshoeherELSE bisherigejahrgangsstufeFI .bisherigejahrgangsstufe:subtext(altedaten(suind),1 ,2).jahrgangsstufeeinshoeher:jgstaufber(text(int(bisherigejahrgangsstufe)+1)) .eingegebenertutor:standardmaskenfeld(satzindex+2).fachrichtig:fehlernr:= meldfalschesfach;aktuellesfeld:=satzindex;fehlertext:=npfaecher(suind)+ meldtrenner;keinfachCOR ausdemvorgegebenenbereich.ausdemvorgegebenenbereich: pos(fehlertext,eingegebenesfach)>null.eingegebenesfach:standardmaskenfeld( satzindex).allesfrei:(keintutorCAND keinfach)CAND keinenote.keintutor: eingegebenertutor=niltextCOR eingegebenertutor="abg.".keinenote: standardmaskenfeld(satzindex+1)=niltext.keinfach:eingegebenesfach=niltext. speicherungdurchfuehren:logeintragvornehmen;aendernschleife;kurzwarten. logeintragvornehmen:TEXT VAR eintrag:=logtextbeginn;IF alleklassenTHEN eintragCAT logtextalleklassenELSE eintragCAT startkey1;eintragCAT startkey2 FI ;logeintrag(eintrag).kurzwarten:pause(10).aendernschleife:INT VAR suind; INT VAR zahlderaenderungen:=null;satzindex:=erstesfeld-abstandzumnamen;FOR suindFROM 1UPTO schuelerzahlREP behandleschuelersatz;satzindexINCR felderprozeilePER .behandleschuelersatz:IF datenveraendertTHEN aenderungvorbereiten;IF zwischenzeitlichgeaendertTHEN transaktionsfehlerELSE dateninpuffersetzen;schreibtransaktion;meldevollzugFI ;FI ;.datenveraendert: subtext(altedaten(suind),laengeklasse+1)<>jetzigedaten.jetzigedaten:INT VAR datenfeldanfang:=satzindex+abstandzumnamen;standardmaskenfeld(datenfeldanfang )+standardmaskenfeld(datenfeldanfang+1)+standardmaskenfeld(datenfeldanfang+2) .aenderungvorbereiten:lesenvorbereiten;lesen.lesenvorbereiten: zahlderaenderungenINCR 1;key(1):=name(suind);key(2):=rufname(suind);key(3):= datumrekonversion(gebdatum(suind));schluesselfuerhjddateisetzen. schluesselfuerhjddateisetzen:schluesselfuerhjdsetzen(dnrhalbjahresdaten,key, schuljahr,halbjahr2,"").lesen:search(dnrhalbjahresdaten,TRUE ); halbjahresdateninzwischengeaendert:=(dbstatus<>ok);IF dbstatus=okTHEN saveupdateposition(dnrhalbjahresdaten);savetupel(dnrhalbjahresdaten,sichtupel );altejgst:=jgstaufber(wert(fnrhjdjgst));schluesselfuerschuelerdateisetzen; search(dnrschueler,TRUE );schuelerdateninzwischengeaendert:=(dbstatus<>ok); IF dbstatus=okTHEN alterzug:=wert(fnrsusgrpzugtut);saveupdateposition( dnrschueler);savetupel(dnrschueler,schuelertupel)FI FI . zwischenzeitlichgeaendert:halbjahresdateninzwischengeaendertOR schuelerdateninzwischengeaendert.transaktionsfehler:standardmeldung( meldtransaktionsfehler,niltext);return(tofather);infeld(satzindex+ abstandzumnamen);LEAVE ergnachprspeichern.dateninpuffersetzen:IF jetzigedaten =niltextTHEN noteundfachsetzen;schuelerdatenaendernELIF nichtbestandenTHEN nichtbestandenneuELSE notenfachundneuerzugFI ;neuerzugtutorloeschen. schuelerdatenaendern:putwert(fnrsustatuss,bestandlaufsj);IF dreizehnernachprueflingTHEN putwert(fnrsusgrpjgst,text(jgst13));putwert( fnrsuartzugang,dreizehnnachprsatz)ELSE neuejgst:=jgstaufber(text(int(altejgst )+1));putwert(fnrsusgrpjgst,neuejgst);putwert(fnrsusgrpzugtut,wert( fnrhjdkennung));putwert(fnrsuartzugang,kznachpruefung)FI .nichtbestanden: datenfeldanfang:=satzindex+abstandzumnamen;IF length(standardmaskenfeld( datenfeldanfang+1))=1THEN int(standardmaskenfeld(datenfeldanfang+1))> bestandengrenzeeinstelligELSE standardmaskenfeld(datenfeldanfang+1)< bestandengrenzezweistelligFI .notenfachundneuerzug:noteundfachsetzen;IF dreizehnernachprueflingTHEN dreizehnerabmeldenELSE neuejgst:=jgstaufber(text( int(altejgst)+1));putwert(fnrsusgrpjgst,neuejgst);putwert(fnrsuartzugang, kznachpruefung);neuerzugsetzenFI .noteundfachsetzen:TEXT VAR fach:= standardmaskenfeld(datenfeldanfang);TEXT VAR note:=standardmaskenfeld( datenfeldanfang+1);putwert(fnrhjdnachfach,fach);putwert(fnrhjdnacherg,note). dreizehnernachpruefling:dreizehner(suind).dreizehnerabmelden:putwert( fnrsustatuss,bestandabgegangene);putwert(fnrsuabgdats,schulkenndatum( anfangschuljahrkey)).neuerzugsetzen:TEXT VAR neuerzug;neuerzug:= standardmaskenfeld(datenfeldanfang+2);IF neuerzug<>niltextTHEN IF neuerzug<> alterzugTHEN putwert(fnrsusgrpzugtut,neuerzug);FI ELSE IF jgstaufber(wert( fnrsusgrpjgst))=altejgstTHEN putwert(fnrsusgrpzugtut,wert(fnrhjdkennung))FI FI ;zuginakthjdaendern.zuginakthjdaendern:savetupel(dnrhalbjahresdaten, sichtupel);neueklasseinhalbjahresdateneintragen(key,aktschuljahr,halbjahr1, neuejgst,neuerzug);IF dbstatus=okTHEN putwert(fnrsutidakthjd,gettid)FI ; restoretupel(dnrhalbjahresdaten,sichtupel).nichtbestandenneu: noteundfachsetzen;setzezugang;savetupel(dnrhalbjahresdaten,sichtupel); setzejgstrunter;halbjahresdatenbearbeiten;restoretupel(dnrhalbjahresdaten, sichtupel).setzezugang:putwert(fnrsuartzugang,geaendertersatz). setzejgstrunter:neuejgst:=jgstaufber(text(int(altejgst)));neuerzug:= standardmaskenfeld(datenfeldanfang+2);putwert(fnrsusgrpjgst,neuejgst);putwert (fnrsusgrpzugtut,neuerzug);putwert(fnrsustatuss,bestandlaufsj);. halbjahresdatenbearbeiten:IF NOT dreizehnernachprueflingTHEN nachfolgendehjdsloeschen;FI .nachfolgendehjdsloeschen:halbjahresdatenloeschen (PROC (INT CONST )succ,key,halbjahr2,int(neuejgst),FALSE );. neuerzugtutorloeschen:putwert(fnrsuneuerzugtut,niltext).schreibtransaktion: restoreupdateposition(dnrhalbjahresdaten);selupdate(dnrhalbjahresdaten);IF dbstatus<>okTHEN restoretupel(dnrschueler,schuelertupel)ELSE restoreupdateposition(dnrschueler);selupdate(dnrschueler);IF dbstatus<>ok THEN restoretupel(dnrschueler,schuelertupel)ELSE IF int(neuejgst)=int( altejgst)THEN evtlkurswahldatenfuerwiederholerbehandelnFI ;FI FI . evtlkurswahldatenfuerwiederholerbehandeln:IF int(neuejgst)>=jgstufe10THEN kurswahlserveraktualisieren(neuejgst,"","")FI ;IF (int(neuejgst)+1)>= jgstufe10THEN kurswahlserveraktualisieren(text(int(neuejgst)+1),"","")FI . meldevollzug:TEXT VAR meldungstext;IF dbstatus=0THEN 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 ergnachprspeichernFI ;infeld(satzindex+abstandzumnamen).startkeyssetzen: restoretupel(dnrhalbjahresdaten,hjdtupel);changeindex.eingabefehler: standardmeldung(fehlernr,fehlertext);infeld(aktuellesfeld).END PROC ergnachprspeichern;PROC neuerblock:blocklesenundausgeben;IF nochwelchedaTHEN return(tofather)ELSE enter(tograndfather)FI .END PROC neuerblock;PROC blocklesenundausgeben:vorbereiten;initgruppenwechsel;gewuenschteszeigen; nachbereiten.vorbereiten:IF NOT nochwelchedaTHEN LEAVE blocklesenundausgeben FI ;standardmeldung(meldwarten,niltext);schuelerzahl:=null;aktuellesfeld:= standardeinstieg.gewuenschteszeigen:bildschirmblock(PROC datenzeigen,BOOL PROC (INT CONST )pruefungspeziell,waspruefen).nachbereiten:nochwelcheda:=( schuelerzahl>null);IF nochwelchedaTHEN savetupel(dnrhalbjahresdaten,hjdtupel) ;restlichezeilenloeschen;infeld(standardanfang);standardfelderausgebenELSE LEAVE blocklesenundausgebenFI ;infeld(erstesfeld).restlichezeilenloeschen: INT VAR zeilenzaehler;INT VAR zeilenfeld:=(schuelerzahl*felderprozeile)+1; FOR zeilenzaehlerFROM schuelerzahlUPTO schuelerproseite-1REP loeschezeilePER .loeschezeile:INT VAR zeilenincr;FOR zeilenincrFROM 1UPTO felderprozeileREP zeilenfeldINCR 1;standardmaskenfeld(standardfeldlaenge(zeilenfeld)*blank, zeilenfeld);feldschutz(zeilenfeld)PER ;.END PROC blocklesenundausgeben;PROC datenzeigen:TEXT VAR merkdaten:=niltext;zaehlen;zeigenundmerken.zaehlen: schuelerzahlINCR 1.zeigenundmerken:altejgstzeigen;namezeigen;aktjgstzeigen; fachzeigen;npfaechermerken;notezeigen;neuerzugtutorzeigen.altejgstzeigen:IF dreizehnerzurnachpruefungTHEN aenderungsetzenELSE neusetzenFI ; betreffendeszeigen.dreizehnerzurnachpruefung:intwert(fnrhjdjgst)=jgst13. aenderungsetzen:BOOL VAR satzgeaendert:=TRUE ;.neusetzen:satzgeaendert:= FALSE ;.betreffendeszeigen:TEXT VAR alteklasse:=jgstaufber(wert(fnrhjdjgst))+ wert(fnrhjdkennung);dreizehner(schuelerzahl):=satzgeaendert; standardmaskenfeld(text(alteklasse,laengeklasse),aktuellesfeld);merkdaten:= text(alteklasse,laengeklasse);gruppenwechsel(alteklasse,gwklasse,laengeklasse ,1,aktuellesfeld);.namezeigen:namenretten;standardmaskenfeld(text( schuelername+namenstrenner+schuelervorname,laengename),aktuellesfeld); aktuellesfeldINCR 1.namenretten:TEXT VAR schuelername,schuelervorname; schuelername:=wert(fnrhjdfamnames);schuelervorname:=wert(fnrhjdrufnames);name (schuelerzahl):=schuelername;rufname(schuelerzahl):=schuelervorname;gebdatum( schuelerzahl):=wert(fnrhjdgebdats).aktjgstzeigen:TEXT VAR aktklasse:=niltext; schluesselfuerschuelerdateisetzen;search(dnrschueler,TRUE );IF dbstatus=ok THEN aktklasse:=jgstaufber(wert(fnrsusgrpjgst))+wert(fnrsusgrpzugtut)FI ; standardmaskenfeld(aktklasse,aktuellesfeld);aktuellesfeldINCR 1.fachzeigen: TEXT VAR fach:=niltext,faecher:=niltext;fach:=wert(fnrhjdnachfach);merkdaten CAT fach;standardmaskenfeld(fach,aktuellesfeld);feldfrei(aktuellesfeld); aktuellesfeldINCR 1.npfaechermerken:INT VAR fachind;FOR fachindFROM fnrhjdnachfach1UPTO fnrhjdnachfach1+2REP faecherCAT wert(fachind);faecherCAT namenstrenner;PER ;npfaecher(schuelerzahl):=faecher.notezeigen:TEXT VAR note; note:=wert(fnrhjdnacherg);merkdatenCAT note;standardmaskenfeld(note, aktuellesfeld);feldfrei(aktuellesfeld);aktuellesfeldINCR 1. neuerzugtutorzeigen:#????#TEXT VAR tutor;IF wert(fnrsustatuss)= bestandabgegangeneTHEN tutor:=bestandabgegangene+punktELSE tutor:=niltext;# wert(fnrsusgrpzugtut);15.07.87dr#FI ;merkdatenCAT tutor;standardmaskenfeld( tutor,aktuellesfeld);altedaten(schuelerzahl):=merkdaten;feldfrei( aktuellesfeld);aktuellesfeldINCR 1.END PROC datenzeigen;PROC schluesselfuerschuelerdateisetzen:inittupel(dnrschueler);putwert( fnrsufamnames,wert(fnrhjdfamnames));putwert(fnrsurufnames,wert(fnrhjdrufnames ));putwert(fnrsugebdatums,wert(fnrhjdgebdats));.END PROC schluesselfuerschuelerdateisetzen;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 (fnrhjdsj)=schuljahrCAND wert(fnrhjdhj)=schulhalbjahrCAND wert( fnrhjdversetzung)=kznachpruefung)END PROC pruefungalleklassen;PROC pruefungeinejgst(BOOL VAR bool):bool:=(wert(fnrhjdsj)=schuljahrCAND wert( fnrhjdhj)=schulhalbjahrCAND wert(fnrhjdversetzung)=kznachpruefungCAND jgstaufber(wert(fnrhjdjgst))=startkey1)END PROC pruefungeinejgst;PROC pruefungeineklasse(BOOL VAR bool):bool:=(wert(fnrhjdsj)=schuljahrCAND wert( fnrhjdhj)=schulhalbjahrCAND wert(fnrhjdversetzung)=kznachpruefungCAND jgstaufber(wert(fnrhjdjgst))=startkey1CAND wert(fnrhjdkennung)=startkey2)END PROC pruefungeineklasse;END PACKET listenweiseergnachpr