PACKET schuelerjgstaendernDEFINES schuelerjgstbearbeiten, schuelerjgstaenderungschuelerzeigen, schuelerjgstaenderungfuerausgesuchteschuelerbearbeiten, schuelerjgstaenderungspeichern,pruefungschuelerjgst:LET maskenname= "ms schuelerjgst aendern",maskennameeingang="ms schuelerjgst aendern eingang" ,fnrname=2,fnrrufname=3,fnrgebdatum=4,fnrjgst=5,fnrhalbjahr=6,fnrzug=7, fnrzugang=8,fnraktuellehjd=9,fnrneueshj1=10,fnrneuehjd1=11,fnrneueshj2=12, fnrneuehjd2=13;LET schulhalbjahr="Schulhalbjahr";LET aktbestand="ls", aktschuljahr="Schuljahr";LET meldunggibtsnicht=71,meldunglistenerstellung=7, meldungkeineliste=68,meldungletzter=67,meldungspeicherung=50, meldungkeinespeicherung=63,pruefemeldung=57;LET dateiname="Schülerliste"; FILE VAR f;TEXT VAR schuelertupel:="",zugangsicherung:="",schuelertid:="", hjdtid:="";TEXT VAR akthalbjahr,jgstalt,zugalt,jgst,zug,jgsttext;LET gesamtanzahlhalbjahre=12,laengehalbjahreseintrag=4;LET jgst05="05",jgst13= "13";LET jgstufe10=10;LET oblitrenner="$",leer="",punkt=".";LET anzschlfeldersu=3;BOOL VAR falschesdatum:=FALSE ;INT CONST gesamtzeilenlaenge :=gesamtanzahlhalbjahre*laengehalbjahreseintrag;ROW anzschlfeldersuTEXT VAR schluessel;TAG VAR maske;TEXT VAR ausgabezeile:="",halbjahrkuerzel:="";LET logtextbeginn="Anw. 1.2.4 Änderung";PROC schuelerjgstbearbeiten:BOOL VAR suexistiert:=FALSE ;falschesdatum:=FALSE ;systemdboff;reinitparsing; schluesselbereitstellen;pruefeobnameexistiert(suexistiert);IF NOT falschesdatumTHEN IF suexistiertTHEN schluessel(1):=wert(fnrsufamnames); schluessel(2):=wert(fnrsurufnames);schluessel(3):=datumrekonversion(wert( fnrsugebdatums));loeschedieerstellteobjektliste;standardstartproc(maskenname) ;bereiteaenderungvor;infeld(fnrjgst);standardnprocELSE standardmeldung( meldunggibtsnicht,"");return(1)FI ELSE return(1)FI .END PROC schuelerjgstbearbeiten;PROC schluesselbereitstellen:schluessel(1):= standardmaskenfeld(fnrname);schluessel(2):=standardmaskenfeld(fnrrufname); schluessel(3):=datumrekonversion(standardmaskenfeld(fnrgebdatum));END PROC schluesselbereitstellen;PROC pruefeobnameexistiert(BOOL VAR suexist):TEXT VAR datenbankwerte,schluesselwerte;inittupel(dnrschueler); maskenwerteindatenbank;IF NOT falschesdatumTHEN search(ixsustatfamrufgeb, FALSE );IF dbstatus=okTHEN saveupdateposition(dnrschueler);datenbankwerte:= wert(fnrsurufnames)+datumrekonversion(wert(fnrsugebdatums));schluesselwerte:= schluessel(2)+schluessel(3);suexist:=(wert(fnrsufamnames)=schluessel(1)CAND ( (schluessel(2)=leerAND schluessel(3)=leer)OR (pos(datenbankwerte, schluesselwerte)=1)))ELSE suexist:=FALSE FI FI .END PROC pruefeobnameexistiert;PROC bereiteaenderungvor:saveupdateposition(dnrschueler );savetupel(dnrschueler,schuelertupel);schuelertid:=gettid;hjdtid:=wert( fnrsutidakthjd);zugangsicherung:=wert(fnrsuartzugang);wertelesen; fuelledbdateninfelder;fuellehjddateninfelder;infeld(1);standardfelderausgeben ;infeld(fnrjgst).wertelesen:akthalbjahr:=schulkenndatum(schulhalbjahr);. fuelledbdateninfelder:jgstalt:=jgstaufber(wert(fnrsusgrpjgst));zugalt:= compress(wert(fnrsusgrpzugtut));standardmaskenfeld(schluessel(1),fnrname); standardmaskenfeld(schluessel(2),fnrrufname);standardmaskenfeld(schluessel(3) ,fnrgebdatum);standardmaskenfeld(akthalbjahr,fnrhalbjahr);standardmaskenfeld( jgstalt,fnrjgst);standardmaskenfeld(zugalt,fnrzug);standardmaskenfeld(wert( fnrsuartzugang),fnrzugang);.fuellehjddateninfelder:jgsttext:=jgstalt; halbjahrkuerzel:=jgsttext+punkt+akthalbjahr;lieferehalbjahreszeile( ausgabezeile,halbjahrkuerzel);standardmaskenfeld(ausgabezeile,fnraktuellehjd) ;IF jgstalt=jgst05THEN erhoehejgsttext(TRUE );halbjahrkuerzel:=jgsttext+punkt +akthalbjahr;standardmaskenfeld(halbjahrkuerzel,fnrneueshj1); lieferehalbjahreszeile(ausgabezeile,halbjahrkuerzel);standardmaskenfeld( ausgabezeile,fnrneuehjd1);liefereleerzeileELIF jgstalt=jgst13THEN erhoehejgsttext(FALSE );halbjahrkuerzel:=jgsttext+punkt+akthalbjahr; standardmaskenfeld(halbjahrkuerzel,fnrneueshj1);lieferehalbjahreszeile( ausgabezeile,halbjahrkuerzel);standardmaskenfeld(ausgabezeile,fnrneuehjd1); liefereleerzeileELSE erhoehejgsttext(FALSE );halbjahrkuerzel:=jgsttext+punkt+ akthalbjahr;standardmaskenfeld(halbjahrkuerzel,fnrneueshj1); lieferehalbjahreszeile(ausgabezeile,halbjahrkuerzel);standardmaskenfeld( ausgabezeile,fnrneuehjd1);jgsttext:=jgstalt;erhoehejgsttext(TRUE ); halbjahrkuerzel:=jgsttext+punkt+akthalbjahr;standardmaskenfeld( halbjahrkuerzel,fnrneueshj2);lieferehalbjahreszeile(ausgabezeile, halbjahrkuerzel);standardmaskenfeld(ausgabezeile,fnrneuehjd2)FI . liefereleerzeile:standardmaskenfeld(leereshj,fnrneueshj2);standardmaskenfeld( leerezeile,fnrneuehjd2).leereshj:text(" ",laengehalbjahreseintrag).leerezeile :text(" ",gesamtzeilenlaenge).END PROC bereiteaenderungvor;PROC erhoehejgsttext(BOOL CONST erhoehen):INT VAR jgstint:=int(jgsttext);IF erhoehenTHEN jgstintINCR 1ELSE jgstintDECR 1FI ;jgsttext:=jgstaufber(text( jgstint))END PROC erhoehejgsttext;PROC loeschedieerstellteobjektliste:forget( dateiname,quiet);END PROC loeschedieerstellteobjektliste;PROC schuelerjgstaenderungschuelerzeigen:BOOL VAR listeexistiertnicht; falschesdatum:=FALSE ;systemdboff;schluesselbereitstellen; maskenwerteindatenbank;IF NOT falschesdatumTHEN standardmeldung( meldunglistenerstellung,"");parsenooffields(5);objektlistestarten( ixsustatfamrufgeb,schluessel(1),fnrsufamnames,TRUE ,listeexistiertnicht);IF listeexistiertnichtTHEN reinitparsing;standardmeldung(meldungkeineliste,""); return(1)ELSE datensatzlistenausgabe(PROC (INT CONST )suerfassungschueler, TRUE ,BOOL PROC pruefungschuelerjgst)FI ELSE return(1)FI .END PROC schuelerjgstaenderungschuelerzeigen;PROC maskenwerteindatenbank:putwert( fnrsufamnames,schluessel(1));putwert(fnrsurufnames,schluessel(2));disablestop ;initmaske(maske,maskennameeingang);putwert(fnrsugebdatums,datumskonversion( schluessel(3)));IF iserrorTHEN clearerror;meldeauffaellig(maske,157);infeld( fnrgebdatum);falschesdatum:=TRUE ;enablestopELSE enablestop;putwert( fnrsustatuss,aktbestand);FI END PROC maskenwerteindatenbank;BOOL PROC pruefungschuelerjgst:wert(fnrsustatuss)=aktbestandEND PROC pruefungschuelerjgst;PROC schuelerjgstaenderungfuerausgesuchteschuelerbearbeiten:BOOL VAR ok, kannbearbeitetwerden:=FALSE ;loeschedieerstellteobjektliste; objektlistebeenden(dateiname,TRUE );reinitparsing; holeerstenschluesselausdatei(ok);WHILE okREP pruefeobnameexistiert(ok);IF ok THEN kannbearbeitetwerden:=TRUE ;ok:=FALSE ELSE holenaechstenschluesselausdatei(ok)FI PER ;IF kannbearbeitetwerdenTHEN standardstartproc(maskenname);bereiteaenderungvor;infeld(fnrjgst); standardnprocELSE enter(2)FI .END PROC schuelerjgstaenderungfuerausgesuchteschuelerbearbeiten;PROC holeerstenschluesselausdatei(BOOL VAR ok):IF NOT exists(dateiname)THEN ok:= FALSE ;LEAVE holeerstenschluesselausdateiFI ;f:=sequentialfile(input, dateiname);holenaechstenschluesselausdatei(ok);END PROC holeerstenschluesselausdatei;PROC holenaechstenschluesselausdatei(BOOL VAR ok ):TEXT VAR thesaurustext:="";INT VAR schluesselbeginn,schluesseltrennung,i; IF eof(f)THEN ok:=FALSE ;loeschedieerstellteobjektlisteELSE getline(f, thesaurustext);bestimmeschluesselausthesaurustext;ok:=TRUE FI . bestimmeschluesselausthesaurustext:schluesselbeginn:=pos(thesaurustext, oblitrenner);schluesseltrennung:=pos(thesaurustext,oblitrenner, schluesselbeginn+1);FOR iFROM 1UPTO anzschlfeldersuREP IF schluesseltrennung> 0THEN schluessel(i):=subtext(thesaurustext,schluesselbeginn+1, schluesseltrennung-1);schluesselbeginn:=schluesseltrennung;schluesseltrennung :=pos(thesaurustext,oblitrenner,schluesselbeginn+1);ELSE schluessel(i):= subtext(thesaurustext,schluesselbeginn+1);FI ;schluessel(3):= datumrekonversion(schluessel(3));PER ;.END PROC holenaechstenschluesselausdatei;PROC schuelerjgstaenderungspeichern(BOOL CONST speichern):IF speichernTHEN INT VAR fehlerstatus:=0; pruefeplausibilitaet(fehlerstatus);IF datenfehlerfreiTHEN standardmeldung( meldungspeicherung,"");datenspeichern; vorbereitendernaechstenschluesselbehandlungELSE fehlerbehandeln;return(1)FI ELSE standardmeldung(meldungkeinespeicherung,""); vorbereitendernaechstenschluesselbehandlungFI .datenfehlerfrei:fehlerstatus=0 .fehlerbehandeln:infeld(fehlerstatus).datenspeichern:logeintragvornehmen; aenderungschreiben;halbjahresdatenloeschen(schluessel,jgstalt,jgst, akthalbjahr).logeintragvornehmen:TEXT VAR eintrag:=logtextbeginn;eintragCAT " """;eintragCAT schluessel(1);eintragCAT ", ";eintragCAT schluessel(2); eintragCAT ", ";eintragCAT datumskonversion(schluessel(3));eintragCAT """"; logeintrag(eintrag).aenderungschreiben:IF jgstoderzuggeaendertTHEN dbfelderfuellen;aenderunginhjdeintragen;restoreupdateposition(dnrschueler); selupdate(dnrschueler);IF dbstatus<>0THEN restoretupel(dnrschueler, schuelertupel)ELSE IF jgst<>jgstaltTHEN IF int(jgst)>=jgstufe10THEN kurswahlserveraktualisieren(jgst,"","")FI ;IF int(jgstalt)>=jgstufe10THEN kurswahlserveraktualisieren(jgstalt,"","")FI ;FI ;FI ;ELSE dbfelderfuellen; replace(dnrschueler,schuelertid);FI .dbfelderfuellen:putwert(fnrsusgrpjgst, jgst);putwert(fnrsusgrpzugtut,zug);putwert(fnrsuartzugang,standardmaskenfeld( fnrzugang));.jgstoderzuggeaendert:jgst<>jgstaltCOR zug<>zugalt. aenderunginhjdeintragen:IF hjdtid<>leerTHEN putwert(fnrhjdjgst,jgst);putwert( fnrhjdkennung,zug);selupdate(dnrhalbjahresdaten);IF dbstatus=okTHEN putwert( fnrsutidakthjd,gettid)FI FI .END PROC schuelerjgstaenderungspeichern;PROC vorbereitendernaechstenschluesselbehandlung:IF exists(dateiname)THEN holenaechstenschluesselauslisteELSE enter(2)FI . holenaechstenschluesselausliste:BOOL VAR ok,kannbearbeitetwerden:=FALSE ; holenaechstenschluesselausdatei(ok);WHILE okREP pruefeobnameexistiert(ok);IF okTHEN kannbearbeitetwerden:=TRUE ;ok:=FALSE ELSE holenaechstenschluesselausdatei(ok)FI PER ;IF kannbearbeitetwerdenTHEN bereiteaenderungvor;return(1)ELSE behandleendederlistenabarbeitungFI . behandleendederlistenabarbeitung:standardmeldung(meldungletzter,"");enter(3). END PROC vorbereitendernaechstenschluesselbehandlung;PROC pruefeplausibilitaet(INT VAR fstatus):INT VAR fmeld;LET fmeldbittefuellen=52, fmeldnichtimbestand=55,bestandzugang="c02 zugang";fstatus:=0;standardmeldung( pruefemeldung,"");IF NOT imschlbestand(standardmaskenfeld(fnrzugang), bestandzugang)THEN fstatus:=fnrzugang;fmeld:=fmeldnichtimbestand; behandledenplausifehlerFI ;jgst:=jgstaufber(standardmaskenfeld(fnrjgst));zug :=compress(standardmaskenfeld(fnrzug));IF jgst=leerTHEN fstatus:=fnrjgst; fmeld:=fmeldbittefuellen;behandledenplausifehlerFI ;IF zug=leerTHEN fstatus:= fnrzug;fmeld:=fmeldbittefuellen;behandledenplausifehlerFI ;IF NOT imbestandschuelergruppenTHEN fstatus:=fnrjgst;fmeld:=fmeldnichtimbestand; behandledenplausifehlerFI .imbestandschuelergruppen:TEXT VAR schuljahr:= schulkenndatum(aktschuljahr),halbjahr:=schulkenndatum(schulhalbjahr);INT VAR dateinummer:=dnraktschuelergruppen;putwert(dateinummer+1,schuljahr);putwert( dateinummer+2,halbjahr);putwert(dateinummer+3,jgst);putwert(dateinummer+4,zug );search(dateinummer,TRUE );dbstatus=0.behandledenplausifehler: standardmeldung(fmeld,"");LEAVE pruefeplausibilitaet.END PROC pruefeplausibilitaet;END PACKET schuelerjgstaendern