PACKET erfschuelerdatenDEFINES sustartunderfassungsbildschirmaufbauen, suvonerfassungsbildschirmeinlesen,suanmeldungbearbeiten,suanmeldungeinfuegen, suanmeldungzeigen,suanmeldungloeschen,suanmeldungloeschenausfuehren, suanmeldungspeichern,suschuelerbsblaettern,sudatenimbildschirmkopieren, suausgesuchtezurbearbeitung,suanmeldungausgesuchteloeschen, suzurueckzumanfangsbildschirm,suerfassungswert,suerfassungschueler, pruefungschueler:LET maskenstammname="ms erf schuelerdaten",maskennameeingang ="ms schuelerangabe",maskennamebearbeitung="ms bearb schuelerdaten";LET bestandneu5="n05",bestandneu11="n11",bestandneusonst="nso",bestandlaufschulj= "ls",#bestandschuelergruppen="aktuelle Schülergruppen",#bestandschulen= "Schulen",kuerzelzugangaktjgst="z";LET meldungloeschfrage=65,meldungloeschung =83,meldungkeineloeschung=84,meldunggibtsschon=70,meldunggibtsnicht=71, meldungletzter=67,meldungkeineliste=68,meldungspeicherung=80,meldungaenderung =81,meldungkeineaenderung=82,meldunglistenerstellung=7, meldungblaetterngehtnicht=72,meldungspeicherungfehlerhaft=73, meldungloeschenfehlerhaft=74,meldungangabengenauer=129,meldungfalschesdatum= 157,meldungbittename=166,pruefemeldung=57;LET fmeldbittefuellen=52, fmeldnichtimbestand=55,fmeldfalschesdatum=157,fmeldnumundbegrenzt=54, fmeldbitteanderejgst=85,weiblich="w",maennlich="m",bestandstaaten= "c02 staaten",bestandreligion="c02 relizugehoerigkeit",bestandzugang= "c02 zugang";LET fbs1=1,fbs2=2,fbs3=3,fbs4=4,erstesfeldbeierfassungbs1=2, erstesfeldbeierfassungbs2=2,erstesfeldbeierfassungbs3=3, erstesfeldbeierfassungbs4=3,erstererfbildschirm=2,letztererfbildschirm=4;LET fnrname=2,fnrnamenszus=3,fnrgebname=4,fnrvornamen=5,fnrrufname=6,fnrsustr=7, fnrsutelefon=8,fnrsuplzort=9,fnrwohntbei=10,fnrortsteil=11,fnrgebdat=12, fnrgeschlecht=13,fnrstaatsan=14,fnrreligion=15,fnrverwandt=16,fnrerzname=17, fnrerznamenszus=18,fnrerzvornamen=19,fnrerzstr=20,fnrerztelefon=21, fnrerzplzort=22,fnrloeschfeld=23,fnrgebort=3,fnrkreisland=4,fnrmuttersprache= 5,fnraussiedler=6,fnreinschulung=7,fnrschulkuerzel=8,fnrletzteklasse=9, fnreintrittsdatum=10,fnreintrittjgst=11,fnrsek2=12,fnrjgst=13,fnrzug=14, fnrzugang=15,fnrneuerzug=16,fnrvermerk1=17,fnrabdatum=23,fnrabgrund=24, fnrneueschule=25,fnrabschluss=26,fnrreligionunterricht=3, fnrreligionabmelddatum=4,fnrreligionanmelddatum=5,fnrfremdsprache=6, fnrkunstmusik=18,fnrag=19,fnrwpsek1=28,fnrauswahlanfang=2,fnrauswahlende=5, fnrneuan5=2,fnrneuan11=3,fnrneusonst=4,fnrneulaufschulj=5,fnrparamname=6, fnrparamrufname=7,fnrparamgebdat=8,fnrparambearbname=2,fnrparambearbrufname=3 ,fnrparambearbgebdat=4,fnrerstesausgabefeld=2,fnrletztesausgabefeld=40, fnrausgabename=2;LET zahldervermerke=6,maxlaengenamebeiaenderung=32, maxlaengenamebeikeineaenderung=26;LET pruefartdatum=6,pruefartauswahl=5;LET satzeinfuegen=1,#satzaendern=2,#satzloeschen=3,satzneueschluessel=4;LET kennungerfassungsprogramm=1,kennungbearbeitungsprogramm=2, kennungzeigeprogramm=3;LET leer="",leerzeichen=" ",oblitrenner="$", kennzmeldungauffaellig="#";LET jgst05="05",jgst11="11",jgstufe5=5,jgstufe10= 10,jgstufe11=11,jgstufe13=13;LET bsanzahl=4,maxfelderzahl=100;LET anzschluesselsu=3;LET aktschuljahr="Schuljahr",akthalbjahr="Schulhalbjahr"; LET aendern=1,loeschen=2;BOOL VAR zurueckschreiben:=FALSE ;BOOL VAR neuerschueler,neuenschuelereinfuegen,neuerschuelerersteintrag;BOOL VAR zeigeprogramm:=FALSE ,mehrereloeschen:=FALSE ,feldschutzzumloeschengesetzt:= FALSE ;FILE VAR f;INT VAR statussudatei:=0;INT VAR startpos;INT VAR programmnummer;INT VAR bs,bsdraussen,fnrfehlerfeld;ROW bsanzahlROW maxfelderzahlTEXT VAR erfassungsfeld;ROW bsanzahlTAG VAR maske;ROW bsanzahl BOOL VAR maskegeholt;ROW anzschluesselsuTEXT VAR schluessel;ROW anzschluesselsuTEXT VAR alterschluessel;TEXT VAR dateiname:="Schülerliste", hjdtid:="",diffdatentid:="";#schultypsich:="",verskennzsich:="";#TEXT VAR aktbestand,programmname,tupelsich;LET logtextbeginn1="Anw. 1.1.1 ", logtextbeginn2="Anw. 1.2.2 ";BOOL PROC erfassungsprogramm:programmnummer= kennungerfassungsprogrammEND PROC erfassungsprogramm;BOOL PROC bearbeitungsprogramm:programmnummer=kennungbearbeitungsprogrammEND PROC bearbeitungsprogramm;PROC sustartunderfassungsbildschirmaufbauen(INT CONST progrnr):IF progrnr=kennungzeigeprogrammTHEN programmnummer:= kennungbearbeitungsprogramm;zeigeprogramm:=TRUE ELSE programmnummer:=progrnr; zeigeprogramm:=FALSE FI ;startprozedur;erfassungsbildschirmaufbauen; suvonerfassungsbildschirmeinlesen.END PROC sustartunderfassungsbildschirmaufbauen;PROC startprozedur:programmname:=text( vergleichsknoten);reinitparsing;systemdboff;bildschirmeinitialisieren; standardkopfmaskeausgeben(programmname);.END PROC startprozedur;PROC bildschirmeinitialisieren:FOR bsFROM 1UPTO bsanzahlREP maskegeholt(bs):= FALSE PER ;bs:=1;maskeholen(bs);bsdraussen:=0.END PROC bildschirmeinitialisieren;PROC erfassungsbildschirmaufbauen:reinitparsing; standardkopfmaskeaktualisieren(bstitel);erfassungsmaskeausgeben; feldvorbelegungenbehandeln;felderausgeben.bstitel:IF bs>1THEN programmname+ " ("+text(bs-1)+".Bildschirm)"ELSE programmnameFI .erfassungsmaskeausgeben: IF bs<>bsdraussenTHEN zeigemaske;bsdraussen:=bsFI .zeigemaske:show(maske(bs)) .felderausgeben:startpos:=fnrerstesausgabefeld;put(maske(bs),erfassungsfeld( bs),startpos);IF zeigeprogrammCAND (bs<>fbs1)THEN feldschutzfuerallefelder; startpos:=1ELSE startpos:=erstesfeldbeierfassung(bs)FI . feldschutzfuerallefelder:INT VAR i;protect(maske(bs),1,FALSE );FOR iFROM fnrerstesausgabefeldUPTO fnrletztesausgabefeldREP protect(maske(bs),i,TRUE ) PER .END PROC erfassungsbildschirmaufbauen;PROC maskeholen(INT CONST maskennr ):initmaske(maske(maskennr),initmaskenname);maskegeholt(maskennr):=TRUE . initmaskenname:IF erfassungsprogrammTHEN maskenstammname+text(maskennr)ELSE maskennamefuerbearbeitungFI .maskennamefuerbearbeitung:SELECT maskennrOF CASE 1:maskennameeingangCASE 2:maskenstammname+text(maskennr)CASE 3: maskennamebearbeitung+text(maskennr)CASE 4:maskenstammname+text(maskennr) OTHERWISE ""END SELECT .END PROC maskeholen;PROC feldvorbelegungenbehandeln: SELECT bsOF CASE 1:bsfelderinitialisierenCASE 2:vorbelegungen2CASE 3: vorbelegungen3CASE 4:vorbelegungen4END SELECT .vorbelegungen2: vorbelegungneuerschueler2;loeschfeldverdecken.loeschfeldverdecken:LET rahmenzeichen="=";erfassungsfeld(bs)(fnrloeschfeld):=rahmenzeichen. vorbelegungen3:vorbelegungname3;vorbelegungzugang;vorbelegungeintrittjgst; feldschutzfuerfelderbeineuanmeldungen;.vorbelegungen4:vorbelegungname4.END PROC feldvorbelegungenbehandeln;PROC vorbelegungname3:TEXT VAR vor,zus,nach; vor:=erfassungsfeld(fbs2)(fnrrufname)+leerzeichen;zus:=erfassungsfeld(fbs2)( fnrnamenszus);IF zus<>leerTHEN zusCAT leerzeichenFI ;nach:=erfassungsfeld( fbs2)(fnrname);erfassungsfeld(bs)(fnrausgabename):=text(vor+zus+nach, laengefnrausgabename).laengefnrausgabename:length(maske(bs),fnrausgabename). END PROC vorbelegungname3;PROC vorbelegungzugang:IF aktbestand<> bestandlaufschuljTHEN erfassungsfeld(bs)(fnrzugang):=kuerzelzugangaktjgst; protect(maske(bs),fnrzugang,TRUE )ELSE protect(maske(bs),fnrzugang,FALSE )FI .END PROC vorbelegungzugang;PROC vorbelegungname4:erfassungsfeld(bs)( fnrausgabename):=erfassungsfeld(fbs3)(fnrausgabename).END PROC vorbelegungname4;PROC vorbelegungneuerschueler2:IF neuerschuelerersteintrag THEN neuerschuelerersteintrag:=FALSE ;erfassungsfeld(fbs2)(fnrname):= erfassungsfeld(fbs1)(fnrparamname);erfassungsfeld(fbs2)(fnrrufname):= erfassungsfeld(fbs1)(fnrparamrufname);erfassungsfeld(fbs2)(fnrvornamen):= erfassungsfeld(fbs1)(fnrparamrufname);erfassungsfeld(fbs2)(fnrgebdat):= erfassungsfeld(fbs1)(fnrparamgebdat)FI .END PROC vorbelegungneuerschueler2; PROC vorbelegungeintrittjgst:protect(maske(bs),fnrsek2,FALSE );protect(maske( bs),fnreintrittjgst,FALSE );IF aktbestand=bestandneu5THEN erfassungsfeld(bs)( fnreintrittjgst):=jgst05;protect(maske(bs),fnreintrittjgst,TRUE )ELIF aktbestand=bestandneu11THEN erfassungsfeld(bs)(fnreintrittjgst):=jgst11; protect(maske(bs),fnreintrittjgst,TRUE );IF neuerschuelerTHEN eintrittinsek2vorbelegenFI FI .END PROC vorbelegungeintrittjgst;PROC eintrittinsek2vorbelegen:TEXT VAR schuljahr:=schulkenndatum(aktschuljahr); schuljahr:=subtext(schuljahr,3,4);schuljahr:=schuljahr+text(int(schuljahr)+1) ;erfassungsfeld(bs)(fnrsek2):=schuljahr;protect(maske(bs),fnrsek2,TRUE ).END PROC eintrittinsek2vorbelegen;PROC feldschutzfuerfelderbeineuanmeldungen:IF aktbestand=bestandlaufschuljTHEN protect(maske(bs),fnrzug,FALSE );IF neuerschuelerTHEN protect(maske(bs),fnrjgst,FALSE )ELSE protect(maske(bs), fnrjgst,TRUE )FI ELSE protect(maske(bs),fnrjgst,TRUE );protect(maske(bs), fnrzug,TRUE )FI .END PROC feldschutzfuerfelderbeineuanmeldungen;PROC suvonerfassungsbildschirmeinlesen:get(maske(bs),erfassungsfeld(bs),startpos); loeschemeldung(maske(bs)).END PROC suvonerfassungsbildschirmeinlesen;PROC suanmeldungbearbeiten:neuenschuelereinfuegen:=FALSE ;IF sinnvolleauswahlgetroffenTHEN bearbeitungvorbereitungbeginnenELSE startpos:= fnrfehlerfeld;return(1)FI .bearbeitungvorbereitungbeginnen:IF namenangabenausreichendTHEN bearbeitungbeginnenELSE startpos:=fnrfehlerfeld; return(1)FI .namenangabenausreichend:IF erfassungsprogrammTHEN namenangabenausreichendbeierfassungELSE namenangabenausreichendbeibearbeitungoderzeigenFI .bearbeitungbeginnen: legeaktuellenbestandfest;BOOL VAR suexistiert:=FALSE ;schluesselbereitstellen ;pruefeobnameexistiert(suexistiert);IF suexistiertTHEN saveupdateposition( dnrschueler);diffdatenlesen;schluessel(1):=wert(fnrsufamnames);schluessel(2) :=wert(fnrsurufnames);schluessel(3):=datumrekonversion(wert(fnrsugebdatums)); loeschedieerstellteobjektliste;zurueckschreiben:=TRUE ;# schuelerausstatwuerfelentfernen;dr10.05.88#bereiteaenderungvor; suvonerfassungsbildschirmeinlesenELSE meldeauffaellig(maske(bs), meldunggibtsnicht);IF erfassungsprogrammTHEN startpos:=fnrparamnameELSE startpos:=fnrparambearbnameFI ;return(1)FI .END PROC suanmeldungbearbeiten; BOOL PROC sinnvolleauswahlgetroffen:fnrfehlerfeld:=0;IF erfassungsprogramm THEN pruefe(pruefartauswahl,maske(bs),erfassungsfeld(fbs1),fnrauswahlanfang, fnrauswahlende,0,leer,fnrfehlerfeld);IF fnrfehlerfeld=0THEN IF erfassungsfeld (fbs1)(fnrparamgebdat)<>leerTHEN pruefe(pruefartdatum,maske(bs), erfassungsfeld(fbs1),fnrparamgebdat,0,0,leer,fnrfehlerfeld);FI FI ; fnrfehlerfeld=0ELSE IF erfassungsfeld(fbs1)(fnrparambearbgebdat)<>leerTHEN pruefe(pruefartdatum,maske(bs),erfassungsfeld(fbs1),fnrparambearbgebdat,0,0, leer,fnrfehlerfeld);FI ;fnrfehlerfeld=0FI .END PROC sinnvolleauswahlgetroffen ;TEXT PROC suerfassungswert(INT CONST feldnr):IF (feldnr>maxfelderzahl)OR ( feldnr<1)THEN ""ELSE erfassungsfeld(bs)(feldnr)FI .END PROC suerfassungswert; PROC schluesselbereitstellen:IF erfassungsprogrammTHEN schluessel(1):= erfassungsfeld(fbs1)(fnrparamname);schluessel(2):=erfassungsfeld(fbs1)( fnrparamrufname);schluessel(3):=erfassungsfeld(fbs1)(fnrparamgebdat)ELIF bearbeitungsprogrammTHEN schluessel(1):=erfassungsfeld(fbs1)( fnrparambearbname);schluessel(2):=erfassungsfeld(fbs1)(fnrparambearbrufname); schluessel(3):=erfassungsfeld(fbs1)(fnrparambearbgebdat)FI ;alterschluessel(1 ):=schluessel(1);alterschluessel(2):=schluessel(2);alterschluessel(3):= schluessel(3);END PROC schluesselbereitstellen;PROC pruefeobnameexistiert( BOOL VAR suexist):TEXT VAR datenbankwerte,schluesselwerte;inittupel( dnrschueler);putwert(fnrsufamnames,schluessel(1));putwert(fnrsurufnames, schluessel(2));putwert(fnrsugebdatums,datumskonversion(schluessel(3))); putwert(fnrsustatuss,aktbestand);IF neuenschuelereinfuegenTHEN search( dnrschueler,FALSE )ELSE search(ixsustatfamrufgeb,FALSE );FI ;IF (NOT neuenschuelereinfuegenCAND dbstatus=okCAND wert(fnrsustatuss)=aktbestand)OR ( neuenschuelereinfuegenCAND dbstatus=ok)THEN 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 .END PROC pruefeobnameexistiert; PROC bereiteaenderungvor:savetupel(dnrschueler,tupelsich);neuerschueler:= FALSE ;holemaskenfallsnotwendig;fuelledbdateninfelder;bs:=erstererfbildschirm ;erfassungsbildschirmaufbauen.fuelledbdateninfelder:INT VAR bsn;FOR bsnFROM erstererfbildschirmUPTO letztererfbildschirmREP holedbwerte(bsn)PER .END PROC bereiteaenderungvor;PROC holemaskenfallsnotwendig:IF NOT (maskegeholt( erstererfbildschirm))THEN FOR bsFROM erstererfbildschirmUPTO letztererfbildschirmREP IF NOT maskegeholt(bs)THEN maskeholen(bs)FI ;PER FI . END PROC holemaskenfallsnotwendig;PROC suanmeldungeinfuegen: neuenschuelereinfuegen:=TRUE ;IF sinnvolleauswahlgetroffenTHEN neueintragbeginnenELSE startpos:=fnrfehlerfeld;return(1)FI . neueintragbeginnen:legeaktuellenbestandfest;BOOL VAR suexistiert:=FALSE ; schluesselbereitstellen;pruefeobnameexistiert(suexistiert);IF suexistiert THEN meldeauffaellig(maske(bs),meldunggibtsschon);return(1)ELSE zurueckschreiben:=FALSE ;bereiteneueintragvor; suvonerfassungsbildschirmeinlesenFI .bereiteneueintragvor:neuerschueler:= TRUE ;neuerschuelerersteintrag:=TRUE ;holemaskenfallsnotwendig;bs:= erstererfbildschirm;erfassungsbildschirmaufbauen.END PROC suanmeldungeinfuegen;PROC legeaktuellenbestandfest:IF bearbeitungsprogramm THEN aktbestand:=bestandlaufschuljELIF erfassungsfeld(fbs1)(fnrneuan5)<>leer THEN aktbestand:=bestandneu5ELIF erfassungsfeld(fbs1)(fnrneuan11)<>leerTHEN aktbestand:=bestandneu11ELIF erfassungsfeld(fbs1)(fnrneusonst)<>leerTHEN aktbestand:=bestandneusonstELIF erfassungsfeld(fbs1)(fnrneulaufschulj)<>leer THEN aktbestand:=bestandlaufschuljFI .END PROC legeaktuellenbestandfest;PROC suanmeldungspeichern(BOOL CONST zuspeichern):BOOL VAR suexistiert;TEXT VAR schuelertupel:="";IF NOT zuspeichernTHEN IF neuerschuelerTHEN vorbereitendesnaechstenneuen;return(1)ELSE IF NOT zeigeprogrammTHEN melde( maske(bs),meldungkeineaenderung,subtext(namefuermeldung,1, maxlaengenamebeikeineaenderung)+kennzmeldungauffaellig)FI ; vorbereitendernaechstenschluesselbehandlungFI ELSE speicherungstartenFI . speicherungstarten:INT VAR fehlerstatus:=0; pruefeobbeineuemschuelerschonvorhanden;IF datenfehlerfreiTHEN datenschreiben; IF statussudatei<>0THEN melde(maske(bs),meldungspeicherungfehlerhaft,text( statussudatei)+kennzmeldungauffaellig);#altenschuelerwiedereintragen;dr10. 05.88#return(1)ELIF neuerschuelerTHEN #schuelerinstatwuerfeleinfuegen;dr10. 05.88#vorbereitendesnaechstenneuen;return(1)ELSE # schuelerinstatwuerfeleinfuegen;dr10.05.88# vorbereitendernaechstenschluesselbehandlungFI ;ELSE fehlerbehandeln;return(1) FI .pruefeobbeineuemschuelerschonvorhanden:IF falschesdatum(erfassungsfeld( fbs2)(fnrgebdat))THEN fehlerstatus:=fnrgebdat;bs:=fbs2; erfassungsbildschirmaufbauen;meldeauffaellig(maske(bs),meldungfalschesdatum); ELSE schluessel(1):=erfassungsfeld(fbs2)(fnrname);schluessel(2):= erfassungsfeld(fbs2)(fnrrufname);schluessel(3):=erfassungsfeld(fbs2)( fnrgebdat);IF geaenderteschluesselfelderTHEN savetupel(dnrschueler, schuelertupel);pruefeobnameexistiert(suexistiert);restoretupel(dnrschueler, schuelertupel);IF suexistiertTHEN fehlerstatus:=fnrname;bs:=fbs2; erfassungsbildschirmaufbauen;meldeauffaellig(maske(bs),meldunggibtsschon); ELSE pruefeplausibilitaet(fehlerstatus);FI ELSE pruefeplausibilitaet( fehlerstatus);FI FI .datenfehlerfrei:fehlerstatus=0.fehlerbehandeln:startpos :=fehlerstatus.END PROC suanmeldungspeichern;PROC datenschreiben: meldespeicherung;dbwertzuordnung;IF neuerschuelerTHEN logeintragvornehmen( "Neueinfügen");neueneinfuegenELSE logeintragvornehmen("Änderung"); bearbeitetenschreibenFI ;.meldespeicherung:IF neuerschuelerTHEN melde(maske( bs),meldungspeicherung,namefuermeldung+kennzmeldungauffaellig)ELSE melde( maske(bs),meldungaenderung,subtext(namefuermeldung,1, maxlaengenamebeiaenderung)+kennzmeldungauffaellig)FI .dbwertzuordnung:INT VAR bsn;IF neuerschuelerTHEN inittupel(dnrschueler)FI ;FOR bsnFROM erstererfbildschirmUPTO letztererfbildschirmREP setzedbwerte(bsn)PER ;.END PROC datenschreiben;TEXT PROC namefuermeldung:LET kennznametrenner=".";( schluessel(2)SUB 1)+kennznametrenner+schluessel(1).END PROC namefuermeldung; PROC logeintragvornehmen(TEXT CONST logergaenzung):TEXT VAR eintrag;IF erfassungsprogrammTHEN eintrag:=logtextbeginn1ELSE eintrag:=logtextbeginn2FI ;eintragCAT logergaenzung;eintragCAT " """;eintragCAT schluessel(1);eintrag CAT ", ";eintragCAT schluessel(2);eintragCAT ", ";eintragCAT datumskonversion (schluessel(3));eintragCAT """";logeintrag(eintrag)END PROC logeintragvornehmen;PROC neueneinfuegen:diffdatentid:="";putwert( fnrdddiffdatennr,unique(dnrdiffdaten));insert(dnrdiffdaten);IF dbstatus=ok THEN search(dnrdiffdaten,TRUE );IF dbstatus=okTHEN diffdatentid:=gettid;FI ELSE fehlerprotokoll(dnrdiffdaten,satzeinfuegen);FI ;putwert( fnrsudiffdatennrs,wert(fnrdddiffdatennr));putwert(fnrsustatuss,aktbestand); putwert(fnrsutiddiffdaten,diffdatentid);insert(dnrschueler);statussudatei:= dbstatus;evtlaenderungderkurswahldatenvollziehenEND PROC neueneinfuegen;PROC bearbeitetenschreiben:TEXT VAR sj:=schulkenndatum(aktschuljahr),hj:= schulkenndatum(akthalbjahr);putwert(fnrsustatuss,aktbestand); restoreupdateposition(dnrschueler);#update(dnrschueler);dr10.05.88#selupdate( dnrschueler);statussudatei:=dbstatus;replace(dnrdiffdaten,wert( fnrsutiddiffdaten));IF statussudatei=okCAND aktbestand=bestandlaufschuljTHEN neueklasseinhalbjahresdateneintragen(schluessel,sj,hj,wert(fnrsusgrpjgst), wert(fnrsusgrpzugtut))FI ;IF statussudatei=okCAND geaenderteschluesselfelder THEN hjddateiupdate(dnrhalbjahresdaten,satzneueschluessel); evtlaenderungderkurswahldatenvollziehenFI END PROC bearbeitetenschreiben; BOOL PROC geaenderteschluesselfelder:schluessel(1)<>alterschluessel(1)OR schluessel(2)<>alterschluessel(2)OR schluessel(3)<>alterschluessel(3)END PROC geaenderteschluesselfelder;PROC vorbereitendernaechstenschluesselbehandlung:IF exists(dateiname)THEN holenaechstenschluesselauslisteELSE zurueckschreiben:=FALSE ; suzurueckzumanfangsbildschirm(2);FI .holenaechstenschluesselausliste:BOOL VAR ok,kannbearbeitetwerden:=FALSE ;holenaechstenmehrtlgschluesselausdatei(ok );WHILE okREP pruefeobnameexistiert(ok);IF okTHEN saveupdateposition( dnrschueler);diffdatenlesen;kannbearbeitetwerden:=TRUE ;ok:=FALSE ELSE holenaechstenmehrtlgschluesselausdatei(ok)FI PER ;IF kannbearbeitetwerden THEN zurueckschreiben:=TRUE ;IF mehrereloeschenTHEN bereiteloeschenvor;return (1)ELSE #schuelerausstatwuerfelentfernen;dr10.05.88#bereiteaenderungvor; return(1)FI ELSE zurueckschreiben:=FALSE ;behandleendederlistenabarbeitungFI .behandleendederlistenabarbeitung:mehrereloeschen:=FALSE ;meldeauffaellig( maske(bs),meldungletzter);suzurueckzumanfangsbildschirm(3).END PROC vorbereitendernaechstenschluesselbehandlung;PROC sudatenimbildschirmkopieren: INT VAR curspos:=startpos;IF bs=fbs2THEN IF curspos=fnrrufnameTHEN erfassungsfeld(bs)(fnrrufname):=erfassungsfeld(bs)(fnrvornamen);put(maske(bs) ,erfassungsfeld(bs)(fnrrufname),fnrrufname)ELIF curspos=fnrerznameTHEN erfassungsfeld(bs)(fnrerzname):=erfassungsfeld(bs)(fnrname);put(maske(bs), erfassungsfeld(bs)(fnrerzname),fnrerzname);erfassungsfeld(bs)(fnrerznamenszus ):=erfassungsfeld(bs)(fnrnamenszus);put(maske(bs),erfassungsfeld(bs)( fnrerznamenszus),fnrerznamenszus);INT VAR i;FOR iFROM 0UPTO fnrerzplzort- fnrerzstrREP erfassungsfeld(bs)(fnrerzstr+i):=erfassungsfeld(bs)(fnrsustr+i); put(maske(bs),erfassungsfeld(bs)(fnrerzstr+i),fnrerzstr+i)PER ;FI ;startpos:= cursposFI ;return(1).END PROC sudatenimbildschirmkopieren;PROC suanmeldungzeigen:BOOL VAR listeexistiertnicht;IF sinnvolleauswahlgetroffen THEN listezeigenbeginnenELSE startpos:=fnrfehlerfeld;return(1)FI . listezeigenbeginnen:schluesselbereitstellen;legeaktuellenbestandfest; setzedbwerte(bs);meldeauffaellig(maske(bs),meldunglistenerstellung); parsenooffields(5);putwert(fnrsustatuss,aktbestand);objektlistestarten( ixsustatfamrufgeb,schluessel(1),fnrsufamnames,TRUE ,listeexistiertnicht);IF listeexistiertnichtTHEN reinitparsing;meldeauffaellig(maske(bs), meldungkeineliste);return(1)ELSE bsdraussen:=0;datensatzlistenausgabe(PROC ( INT CONST )suerfassungschueler,TRUE ,BOOL PROC pruefungschueler)FI .END PROC suanmeldungzeigen;PROC suerfassungschueler(INT CONST n):LET namenlaenge=63, trenner=", ";TEXT VAR identizeile,schluesselanhang:="";INT VAR i;identizeile :=wert(fnrsufamnames)+trenner+wert(fnrsurufnames);identizeile:=text( identizeile,namenlaenge)+wert(fnrsugebdatums);schluesselkoppeln; setzeidentiwert(identizeilemitschluesselanhang).schluesselkoppeln:FOR iFROM 1 UPTO anzschluesselsuREP schluesselanhangCAT oblitrenner;schluesselanhangCAT wert(dnrschueler+i);PER .identizeilemitschluesselanhang:identizeile+ schluesselanhang.END PROC suerfassungschueler;BOOL PROC pruefungschueler:wert (fnrsustatuss)=aktbestandEND PROC pruefungschueler;PROC suausgesuchtezurbearbeitung:behandlungderausgesuchten(aendern)END PROC suausgesuchtezurbearbeitung;PROC holeerstenmehrtlgschluesselausdatei(BOOL VAR ok):IF NOT exists(dateiname)THEN ok:=FALSE ;LEAVE holeerstenmehrtlgschluesselausdateiFI ;f:=sequentialfile(input,dateiname); holenaechstenmehrtlgschluesselausdatei(ok);END PROC holeerstenmehrtlgschluesselausdatei;PROC holenaechstenmehrtlgschluesselausdatei(BOOL VAR ok):TEXT VAR thesaurustext:= "";INT VAR schluesselbeginn:=0;INT VAR schluesseltrennung:=0;INT VAR i:=1;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 anzschluesselsuREP 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 ;PER ;schluessel(3):= datumrekonversion(schluessel(3));.END PROC holenaechstenmehrtlgschluesselausdatei;PROC loeschedieerstellteobjektliste: forget(dateiname,quiet);END PROC loeschedieerstellteobjektliste;INT PROC erstesfeldbeierfassung(INT CONST bildschirmnummer):IF bildschirmnummer=fbs1 THEN erstesfeldbeierfassungbs1ELIF bildschirmnummer=fbs2THEN erstesfeldbeierfassungbs2ELIF bildschirmnummer=fbs3THEN erstesfeldbeierfassungbs3ELIF bildschirmnummer=fbs4THEN erstesfeldbeierfassungbs4ELSE 1FI .END PROC erstesfeldbeierfassung;PROC suschuelerbsblaettern(BOOL CONST vorwaerts):IF blaetternsinnlosTHEN meldeauffaellig(maske(bs),meldungblaetterngehtnicht)ELSE fuehreblaettervorgangdurch;FI ;return(1).blaetternsinnlos:(vorwaertsAND (bs= letztererfbildschirm))OR (NOT vorwaertsAND (bs=erstererfbildschirm)). fuehreblaettervorgangdurch:IF vorwaertsTHEN bsINCR 1ELSE bsDECR 1FI ; erfassungsbildschirmaufbauen.END PROC suschuelerbsblaettern;PROC bsfelderinitialisieren:INT VAR bsnr;FOR bsnrFROM 1UPTO bsanzahlREP init( erfassungsfeld(bsnr))PER .END PROC bsfelderinitialisieren;PROC vorbereitendesnaechstenneuen:bsfelderinitialisieren;bs:=erstererfbildschirm; erfassungsbildschirmaufbauen.END PROC vorbereitendesnaechstenneuen;PROC suzurueckzumanfangsbildschirm(INT CONST schritte):bs:=1;IF zurueckschreiben THEN #schuelerinstatwuerfeleinfuegendr10.05.88#FI ;IF feldschutzzumloeschengesetztTHEN feldschutzfuerallefelderaufheben; feldschutzzumloeschengesetzt:=FALSE FI ;erfassungsbildschirmaufbauen;return( schritte);.feldschutzfuerallefelderaufheben:INT VAR i;FOR iFROM fnrerstesausgabefeldUPTO fnrloeschfeld-1REP protect(maske(erstererfbildschirm ),i,FALSE )PER ;protect(maske(erstererfbildschirm),fnrloeschfeld,TRUE ).END PROC suzurueckzumanfangsbildschirm;PROC pruefeplausibilitaet(INT VAR fstatus) :fstatus:=0;INT VAR fmeld;meldeauffaellig(maske(bs),pruefemeldung);pruefebs2; IF fstatus<>0THEN fehlerausgabeELSE pruefebs3;IF fstatus<>0THEN fehlerausgabe ELSE pruefebs4;IF fstatus<>0THEN fehlerausgabeFI FI FI .pruefebs2:IF erfassungsfeld(fbs2)(fnrname)=leerTHEN fstatus:=fnrname;bs:=fbs2;fmeld:= fmeldbittefuellen;LEAVE pruefebs2FI ;IF erfassungsfeld(fbs2)(fnrrufname)=leer THEN fstatus:=fnrrufname;bs:=fbs2;fmeld:=fmeldbittefuellen;LEAVE pruefebs2FI ;IF erfassungsfeld(fbs2)(fnrgebdat)=leerTHEN fstatus:=fnrgebdat;bs:=fbs2; fmeld:=fmeldbittefuellen;LEAVE pruefebs2ELSE IF falschesdatum(erfassungsfeld( fbs2)(fnrgebdat))THEN fstatus:=fnrgebdat;bs:=fbs2;fmeld:=fmeldfalschesdatum; LEAVE pruefebs2FI FI ;IF NOT ((erfassungsfeld(fbs2)(fnrgeschlecht)=weiblich) OR (erfassungsfeld(fbs2)(fnrgeschlecht)=maennlich))THEN fstatus:= fnrgeschlecht;bs:=fbs2;fmeld:=fmeldnichtimbestand;LEAVE pruefebs2FI ;IF erfassungsfeld(fbs2)(fnrstaatsan)<>leerTHEN IF NOT imschlbestand( erfassungsfeld(fbs2)(fnrstaatsan),bestandstaaten)THEN fstatus:=fnrstaatsan;bs :=fbs2;fmeld:=fmeldnichtimbestand;LEAVE pruefebs2FI FI ;IF erfassungsfeld( fbs2)(fnrreligion)<>leerTHEN IF NOT imschlbestand(erfassungsfeld(fbs2)( fnrreligion),bestandreligion)THEN fstatus:=fnrreligion;bs:=fbs2;fmeld:= fmeldnichtimbestand;LEAVE pruefebs2FI FI .pruefebs3:INT CONST eintrittsjgst:= int(erfassungsfeld(fbs3)(fnreintrittjgst));IF erfassungsfeld(fbs3)( fnreintrittsdatum)=leerTHEN fstatus:=fnreintrittsdatum;bs:=fbs3;fmeld:= fmeldbittefuellen;LEAVE pruefebs3ELSE IF falschesdatum(erfassungsfeld(fbs3)( fnreintrittsdatum))THEN fstatus:=fnreintrittsdatum;bs:=fbs3;fmeld:= fmeldfalschesdatum;LEAVE pruefebs3FI FI ;IF aktbestand=bestandneusonstTHEN IF erfassungsfeld(fbs3)(fnreintrittjgst)=leerTHEN fstatus:=fnreintrittjgst;bs :=fbs3;fmeld:=fmeldbittefuellen;LEAVE pruefebs3FI ;IF eintrittsjgstjgstufe13THEN fstatus:=fnreintrittjgst;bs:=fbs3;fmeld:= fmeldnumundbegrenzt;LEAVE pruefebs3FI ;IF eintrittsjgst=jgstufe5COR eintrittsjgst=jgstufe11THEN fstatus:=fnreintrittjgst;bs:=fbs3;fmeld:= fmeldbitteanderejgst;LEAVE pruefebs3FI FI ;IF erfassungsfeld(fbs3)( fnrschulkuerzel)<>leerTHEN IF NOT imbestand(erfassungsfeld(fbs3)( fnrschulkuerzel),bestandschulen)THEN fstatus:=fnrschulkuerzel;bs:=fbs3;fmeld :=fmeldnichtimbestand;LEAVE pruefebs3FI FI ;IF aktbestand=bestandlaufschulj THEN IF erfassungsfeld(fbs3)(fnrzugang)=leerTHEN fstatus:=fnrzugang;bs:=fbs3; fmeld:=fmeldbittefuellen;LEAVE pruefebs3ELIF NOT imschlbestand(erfassungsfeld (fbs3)(fnrzugang),bestandzugang)THEN fstatus:=fnrzugang;bs:=fbs3;fmeld:= fmeldnichtimbestand;LEAVE pruefebs3FI ;FI ;IF bearbeitungsprogrammCAND erfassungsfeld(fbs3)(fnrneueschule)<>leerTHEN IF NOT imbestand(erfassungsfeld (fbs3)(fnrneueschule),bestandschulen)THEN fstatus:=fnrneueschule;bs:=fbs3; fmeld:=fmeldnichtimbestand;LEAVE pruefebs3FI FI ;IF bearbeitungsprogrammCAND erfassungsfeld(fbs3)(fnrabdatum)<>leerTHEN IF falschesdatum(erfassungsfeld( fbs3)(fnrabdatum))THEN fstatus:=fnrabdatum;bs:=fbs3;fmeld:=fmeldfalschesdatum ;LEAVE pruefebs3FI FI ;IF aktbestand<>bestandlaufschuljTHEN LEAVE pruefebs3 FI ;TEXT VAR jgst:=erfassungsfeld(fbs3)(fnrjgst);TEXT VAR zug:=erfassungsfeld (fbs3)(fnrzug);IF jgst=leerTHEN fstatus:=fnrjgst;bs:=fbs3;fmeld:= fmeldbittefuellen;LEAVE pruefebs3FI ;IF zug=leerTHEN fstatus:=fnrzug;bs:=fbs3 ;fmeld:=fmeldbittefuellen;LEAVE pruefebs3FI ;IF NOT imbestandschuelergruppen THEN IF neuerschuelerTHEN fstatus:=fnrjgstELSE fstatus:=fnrzugFI ;bs:=fbs3; fmeld:=fmeldnichtimbestand;LEAVE pruefebs3FI .pruefebs4:IF erfassungsfeld( fbs4)(fnrreligionabmelddatum)<>leerTHEN IF falschesdatum(erfassungsfeld(fbs4) (fnrreligionabmelddatum))THEN fstatus:=fnrreligionabmelddatum;bs:=fbs4;fmeld :=fmeldfalschesdatum;LEAVE pruefebs4FI FI ;IF erfassungsfeld(fbs4)( fnrreligionanmelddatum)<>leerTHEN IF falschesdatum(erfassungsfeld(fbs4)( fnrreligionanmelddatum))THEN fstatus:=fnrreligionanmelddatum;bs:=fbs4;fmeld:= fmeldfalschesdatum;LEAVE pruefebs4FI FI ;.fehlerausgabe: erfassungsbildschirmaufbauen;meldeauffaellig(maske(bs),fmeld).END PROC pruefeplausibilitaet;BOOL PROC imbestandschuelergruppen:TEXT VAR schuljahr:= schulkenndatum(aktschuljahr),halbjahr:=schulkenndatum(akthalbjahr);INT VAR dateinummer:=dnraktschuelergruppen;putwert(dateinummer+1,schuljahr);putwert( dateinummer+2,halbjahr);putwert(dateinummer+3,erfassungsfeld(fbs3)(fnrjgst)); putwert(dateinummer+4,erfassungsfeld(fbs3)(fnrzug));search(dateinummer,TRUE ) ;dbstatus=0END PROC imbestandschuelergruppen;BOOL PROC falschesdatum(TEXT CONST pruefdatum):LET falschertag="00";datum(pruefdatum)=nildatumCOR subtext( pruefdatum,1,2)=falschertag.END PROC falschesdatum;PROC setzedbwerte(INT CONST bsnr):INT VAR lv,verm;SELECT bsnrOF CASE fbs1:setzedbwertevonbs1CASE fbs2:setzedbwertevonbs2CASE fbs3:setzedbwertevonbs3CASE fbs4: setzedbwertevonbs4END SELECT ;IF neuenschuelereinfuegenTHEN putwert( fnrsutidakthjd,leer)ELSE putwert(fnrsutidakthjd,hjdtid)FI .setzedbwertevonbs1 :IF NOT bearbeitungsprogrammTHEN putwert(fnrsufamnames,erfassungsfeld[bsnr][ fnrparamname]);putwert(fnrsurufnames,erfassungsfeld[bsnr][fnrparamrufname]); putwert(fnrsugebdatums,datumskonversion(erfassungsfeld[bsnr][fnrparamgebdat]) );ELSE putwert(fnrsufamnames,erfassungsfeld[bsnr][fnrparambearbname]);putwert (fnrsurufnames,erfassungsfeld[bsnr][fnrparambearbrufname]);putwert( fnrsugebdatums,datumskonversion(erfassungsfeld[bsnr][fnrparambearbgebdat])); FI .setzedbwertevonbs2:putwert(fnrsufamnames,erfassungsfeld[bsnr][fnrname]); putwert(fnrsunamenszusatzs,erfassungsfeld[bsnr][fnrnamenszus]);putwert( fnrsugebnames,erfassungsfeld[bsnr][fnrgebname]);putwert(fnrsuvornames, erfassungsfeld[bsnr][fnrvornamen]);putwert(fnrsurufnames,erfassungsfeld[bsnr] [fnrrufname]);putwert(fnrsustrnrs,erfassungsfeld[bsnr][fnrsustr]);putwert( fnrsutelnrs,erfassungsfeld[bsnr][fnrsutelefon]);putwert(fnrsuplzorts, erfassungsfeld[bsnr][fnrsuplzort]);putwert(fnrsuwohntbei,erfassungsfeld[bsnr] [fnrwohntbei]);putwert(fnrsuortsteils,erfassungsfeld[bsnr][fnrortsteil]); putwert(fnrsugebdatums,datumskonversion(erfassungsfeld[bsnr][fnrgebdat])); putwert(fnrsugeschlechts,erfassungsfeld[bsnr][fnrgeschlecht]);putwert( fnrsustaatsangs,erfassungsfeld[bsnr][fnrstaatsan]);putwert(fnrsureligionsz, erfassungsfeld[bsnr][fnrreligion]);putwert(fnrsuverhes,erfassungsfeld[bsnr][ fnrverwandt]);putwert(fnrsufamnamee,erfassungsfeld[bsnr][fnrerzname]);putwert (fnrsunamenszusatze,erfassungsfeld[bsnr][fnrerznamenszus]);putwert( fnrsuvornamee,erfassungsfeld[bsnr][fnrerzvornamen]);putwert(fnrsustrnre, erfassungsfeld[bsnr][fnrerzstr]);putwert(fnrsutelnre,erfassungsfeld[bsnr][ fnrerztelefon]);putwert(fnrsuplzorte,erfassungsfeld[bsnr][fnrerzplzort]);. setzedbwertevonbs3:putwert(fnrsugeborts,erfassungsfeld[bsnr][fnrgebort]); putwert(fnrsugebkreiss,erfassungsfeld[bsnr][fnrkreisland]);putwert( fnrsumuttersprache,erfassungsfeld[bsnr][fnrmuttersprache]);putwert( fnrsuspaetaus,erfassungsfeld[bsnr][fnraussiedler]);putwert(fnrsujahreinschul, erfassungsfeld[bsnr][fnreinschulung]);putwert(fnrsuskennlschule, erfassungsfeld[bsnr][fnrschulkuerzel]);putwert(fnrsuklasselschule, erfassungsfeld[bsnr][fnrletzteklasse]);putwert(fnrsueintrittsdats, datumskonversion(erfassungsfeld[bsnr][fnreintrittsdatum]));putwert( fnrsujgsteintr,jgstaufber(erfassungsfeld[bsnr][fnreintrittjgst]));putwert( fnrsueintrittinsek,erfassungsfeld[bsnr][fnrsek2]);putwert(fnrsusgrpjgst, jgstaufber(erfassungsfeld[bsnr][fnrjgst]));putwert(fnrsusgrpzugtut, erfassungsfeld[bsnr][fnrzug]);putwert(fnrsuartzugang,erfassungsfeld[bsnr][ fnrzugang]);putwert(fnrsuneuerzugtut,erfassungsfeld[bsnr][fnrneuerzug]);FOR vermFROM 0UPTO zahldervermerke-1REP putwert(fnrsuvermerk1+verm,erfassungsfeld [bsnr][fnrvermerk1+verm])PER ;IF bearbeitungsprogrammTHEN putwert( fnrsuabgdats,datumskonversion(erfassungsfeld[bsnr][fnrabdatum]));putwert( fnrsuabggrund,erfassungsfeld[bsnr][fnrabgrund]);putwert(fnrsuskennnschule, erfassungsfeld[bsnr][fnrneueschule]);putwert(fnrsuabschluss,erfassungsfeld[ bsnr][fnrabschluss]);FI .setzedbwertevonbs4:putwert(fnrddreliunter, erfassungsfeld[bsnr][fnrreligionunterricht]);putwert(fnrddreliunter+1, datumskonversion(erfassungsfeld[bsnr][fnrreligionabmelddatum]));putwert( fnrddreliunter+2,datumskonversion(erfassungsfeld[bsnr][fnrreligionanmelddatum ]));FOR lvFROM 0UPTO 11REP putwert(fnrdd1fremdfach+lv,erfassungsfeld[bsnr][ fnrfremdsprache+lv]);PER ;putwert(fnrddkunstmusik,erfassungsfeld[bsnr][ fnrkunstmusik]);FOR lvFROM 0UPTO 8REP putwert(fnrddagthema1+lv,erfassungsfeld [bsnr][fnrag+lv]);PER ;FOR lvFROM 0UPTO 7REP putwert(fnrddfach091a+lv, erfassungsfeld[bsnr][fnrwpsek1+lv]);PER .END PROC setzedbwerte;PROC holedbwerte(INT CONST bsnr):INT VAR lv,verm;SELECT bsnrOF CASE fbs1: holedbwertevonbs1CASE fbs2:holedbwertevonbs2CASE fbs3:holedbwertevonbs3CASE fbs4:holedbwertevonbs4END SELECT ;hjdtid:=wert(fnrsutidakthjd);. holedbwertevonbs1:IF NOT bearbeitungsprogrammTHEN erfassungsfeld[bsnr][ fnrparamname]:=wert(fnrsufamnames);erfassungsfeld[bsnr][fnrparamrufname]:= wert(fnrsurufnames);erfassungsfeld[bsnr][fnrparamgebdat]:=wert(fnrsugebdatums );ELSE erfassungsfeld[bsnr][fnrparambearbname]:=wert(fnrsufamnames); erfassungsfeld[bsnr][fnrparambearbrufname]:=wert(fnrsurufnames); erfassungsfeld[bsnr][fnrparambearbgebdat]:=wert(fnrsugebdatums);FI . holedbwertevonbs2:erfassungsfeld[bsnr][fnrname]:=wert(fnrsufamnames); erfassungsfeld[bsnr][fnrnamenszus]:=wert(fnrsunamenszusatzs);erfassungsfeld[ bsnr][fnrgebname]:=wert(fnrsugebnames);erfassungsfeld[bsnr][fnrvornamen]:= wert(fnrsuvornames);erfassungsfeld[bsnr][fnrrufname]:=wert(fnrsurufnames); erfassungsfeld[bsnr][fnrsustr]:=wert(fnrsustrnrs);erfassungsfeld[bsnr][ fnrsutelefon]:=wert(fnrsutelnrs);erfassungsfeld[bsnr][fnrsuplzort]:=wert( fnrsuplzorts);erfassungsfeld[bsnr][fnrwohntbei]:=wert(fnrsuwohntbei); erfassungsfeld[bsnr][fnrortsteil]:=wert(fnrsuortsteils);erfassungsfeld[bsnr][ fnrgebdat]:=datumrekonversion(wert(fnrsugebdatums));erfassungsfeld[bsnr][ fnrgeschlecht]:=wert(fnrsugeschlechts);erfassungsfeld[bsnr][fnrstaatsan]:= wert(fnrsustaatsangs);erfassungsfeld[bsnr][fnrreligion]:=wert(fnrsureligionsz );erfassungsfeld[bsnr][fnrverwandt]:=wert(fnrsuverhes);erfassungsfeld[bsnr][ fnrerzname]:=wert(fnrsufamnamee);erfassungsfeld[bsnr][fnrerznamenszus]:=wert( fnrsunamenszusatze);erfassungsfeld[bsnr][fnrerzvornamen]:=wert(fnrsuvornamee) ;erfassungsfeld[bsnr][fnrerzstr]:=wert(fnrsustrnre);erfassungsfeld[bsnr][ fnrerztelefon]:=wert(fnrsutelnre);erfassungsfeld[bsnr][fnrerzplzort]:=wert( fnrsuplzorte);alteschluesselsichern.alteschluesselsichern:alterschluessel(1) :=erfassungsfeld[bsnr][fnrname];alterschluessel(2):=erfassungsfeld[bsnr][ fnrrufname];alterschluessel(3):=erfassungsfeld[bsnr][fnrgebdat];. holedbwertevonbs3:TEXT VAR einjgst:=wert(fnrsujgsteintr),aktjgst:=wert( fnrsusgrpjgst);erfassungsfeld[bsnr][fnrgebort]:=wert(fnrsugeborts); erfassungsfeld[bsnr][fnrkreisland]:=wert(fnrsugebkreiss);erfassungsfeld[bsnr] [fnrmuttersprache]:=wert(fnrsumuttersprache);erfassungsfeld[bsnr][ fnraussiedler]:=wert(fnrsuspaetaus);erfassungsfeld[bsnr][fnreinschulung]:= textnichtnull(wert(fnrsujahreinschul));erfassungsfeld[bsnr][fnrschulkuerzel] :=wert(fnrsuskennlschule);erfassungsfeld[bsnr][fnrletzteklasse]:=wert( fnrsuklasselschule);erfassungsfeld[bsnr][fnreintrittsdatum]:= datumrekonversion(wert(fnrsueintrittsdats));erfassungsfeld[bsnr][ fnreintrittjgst]:=jgstaufber(einjgst);erfassungsfeld[bsnr][fnrsek2]:= textnichtnull(wert(fnrsueintrittinsek));erfassungsfeld[bsnr][fnrjgst]:= jgstaufber(aktjgst);erfassungsfeld[bsnr][fnrzug]:=wert(fnrsusgrpzugtut); erfassungsfeld[bsnr][fnrzugang]:=wert(fnrsuartzugang);erfassungsfeld[bsnr][ fnrneuerzug]:=wert(fnrsuneuerzugtut);FOR vermFROM 0UPTO zahldervermerke-1REP erfassungsfeld[bsnr][fnrvermerk1+verm]:=wert(fnrsuvermerk1+verm)PER ;IF bearbeitungsprogrammTHEN erfassungsfeld[bsnr][fnrabdatum]:=datumrekonversion( wert(fnrsuabgdats));erfassungsfeld[bsnr][fnrabgrund]:=wert(fnrsuabggrund); erfassungsfeld[bsnr][fnrneueschule]:=wert(fnrsuskennnschule);erfassungsfeld[ bsnr][fnrabschluss]:=wert(fnrsuabschluss);FI .holedbwertevonbs4: erfassungsfeld[bsnr][fnrreligionunterricht]:=wert(fnrddreliunter); erfassungsfeld[bsnr][fnrreligionabmelddatum]:=datumrekonversion(wert( fnrddreliunter+1));erfassungsfeld[bsnr][fnrreligionanmelddatum]:= datumrekonversion(wert(fnrddreliunter+2));FOR lvFROM 0UPTO 11REP erfassungsfeld[bsnr][fnrfremdsprache+lv]:=wert(fnrdd1fremdfach+lv);PER ; erfassungsfeld[bsnr][fnrkunstmusik]:=wert(fnrddkunstmusik);FOR lvFROM 0UPTO 8 REP erfassungsfeld[bsnr][fnrag+lv]:=wert(fnrddagthema1+lv);PER ;FOR lvFROM 0 UPTO 7REP erfassungsfeld[bsnr][fnrwpsek1+lv]:=wert(fnrddfach091a+lv);PER . END PROC holedbwerte;PROC suanmeldungloeschen:IF sinnvolleauswahlgetroffen THEN loeschenvorbereitungbeginnenELSE startpos:=fnrfehlerfeld;return(1)FI . loeschenvorbereitungbeginnen:IF namenangabenausreichendTHEN loeschenbeginnen ELSE startpos:=fnrfehlerfeld;return(1)FI .namenangabenausreichend:IF erfassungsprogrammTHEN namenangabenausreichendbeierfassungELSE namenangabenausreichendbeibearbeitungoderzeigenFI .loeschenbeginnen: legeaktuellenbestandfest;BOOL VAR suexistiert:=FALSE ;schluesselbereitstellen ;pruefeobnameexistiert(suexistiert);IF suexistiertTHEN saveupdateposition( dnrschueler);diffdatenlesen;schluessel(1):=wert(fnrsufamnames);schluessel(2) :=wert(fnrsurufnames);schluessel(3):=datumrekonversion(wert(fnrsugebdatums)); loeschedieerstellteobjektliste;zurueckschreiben:=FALSE ;bereiteloeschenvor; suvonerfassungsbildschirmeinlesenELSE meldeauffaellig(maske(bs), meldunggibtsnicht);IF erfassungsprogrammTHEN startpos:=fnrparamnameELSE startpos:=fnrparambearbnameFI ;return(1)FI .END PROC suanmeldungloeschen; PROC bereiteloeschenvor:bereiteaenderungvor; feldschutzfuerallefelderausserloeschfeldsetzen;meldeauffaellig(maske(bs), meldungloeschfrage);startpos:=fnrloeschfeldEND PROC bereiteloeschenvor;PROC feldschutzfuerallefelderausserloeschfeldsetzen:INT VAR i;FOR iFROM fnrerstesausgabefeldUPTO fnrloeschfeld-1REP protect(maske(bs),i,TRUE )PER ; protect(maske(erstererfbildschirm),fnrloeschfeld,FALSE ); feldschutzzumloeschengesetzt:=TRUE .END PROC feldschutzfuerallefelderausserloeschfeldsetzen;PROC suanmeldungloeschenausfuehren(BOOL CONST zuloeschen):IF zuloeschenTHEN melde( maske(bs),meldungloeschung,namefuermeldung+kennzmeldungauffaellig); logeintragvornehmen("Entfernen");schuelerloeschen;IF dbstatus<>0THEN melde( maske(bs),meldungloeschenfehlerhaft,text(dbstatus)+kennzmeldungauffaellig);# altenschuelerwiedereintragen;dr10.05.88#return(1)ELSE vorbereitendernaechstenschluesselbehandlungFI ELSE melde(maske(bs), meldungkeineloeschung,namefuermeldung+kennzmeldungauffaellig); vorbereitendernaechstenschluesselbehandlungFI .schuelerloeschen: hjddateiupdate(dnrhalbjahresdaten,satzloeschen);diffdatenloeschen;delete( dnrschueler);evtlaenderungderkurswahldatenvollziehen.diffdatenloeschen:IF wert(fnrsudiffdatennrs)<>""THEN putwert(fnrdddiffdatennr,wert( fnrsudiffdatennrs));search(dnrdiffdaten,TRUE );IF dbstatus=okTHEN delete( dnrdiffdaten)FI FI .END PROC suanmeldungloeschenausfuehren;PROC suanmeldungausgesuchteloeschen:behandlungderausgesuchten(loeschen)END PROC suanmeldungausgesuchteloeschen;PROC behandlungderausgesuchten(INT CONST wasistzutun):BOOL VAR ok,kannbearbeitetwerden:=FALSE ; loeschedieerstellteobjektliste;objektlistebeenden(dateiname,TRUE ); reinitparsing;holeerstenmehrtlgschluesselausdatei(ok);WHILE okREP pruefeobnameexistiert(ok);IF okTHEN saveupdateposition(dnrschueler); diffdatenlesen;kannbearbeitetwerden:=TRUE ;ok:=FALSE ELSE holenaechstenmehrtlgschluesselausdatei(ok)FI PER ;IF kannbearbeitetwerden THEN zurueckschreiben:=TRUE ;IF wasistzutun=aendernTHEN # schuelerausstatwuerfelentfernen;dr10.05.88#bereiteaenderungvorELSE bereiteloeschenvor;mehrereloeschen:=TRUE FI ; suvonerfassungsbildschirmeinlesenELSE zurueckschreiben:=FALSE ; suzurueckzumanfangsbildschirm(2)FI .END PROC behandlungderausgesuchten;BOOL PROC namenangabenausreichendbeierfassung:IF erfassungsfeld(fbs1)(fnrparamname )=leerTHEN meldeauffaellig(maske(bs),meldungbittename);fnrfehlerfeld:= fnrparamname;FALSE ELIF erfassungsfeld(fbs1)(fnrparamrufname)=leerCAND erfassungsfeld(fbs1)(fnrparamgebdat)<>leerTHEN meldeauffaellig(maske(bs), meldungangabengenauer);fnrfehlerfeld:=fnrparamrufname;FALSE ELSE TRUE FI . END PROC namenangabenausreichendbeierfassung;BOOL PROC namenangabenausreichendbeibearbeitungoderzeigen:IF erfassungsfeld(fbs1)( fnrparambearbname)=leerTHEN meldeauffaellig(maske(bs),meldungbittename); fnrfehlerfeld:=fnrparambearbname;FALSE ELIF erfassungsfeld(fbs1)( fnrparambearbrufname)=leerCAND erfassungsfeld(fbs1)(fnrparambearbgebdat)<> leerTHEN meldeauffaellig(maske(bs),meldungangabengenauer);fnrfehlerfeld:= fnrparambearbrufname;FALSE ELSE TRUE FI .END PROC namenangabenausreichendbeibearbeitungoderzeigen;PROC hjddateiupdate(INT CONST dateinummer,wasistzutun):LET stackgroesse=6;INT VAR anzahltupel:= stackgroesse;inittupel(dateinummer);putwert(dateinummer+1,alterschluessel(1)) ;putwert(dateinummer+2,alterschluessel(2));putwert(dateinummer+3, datumskonversion(alterschluessel(3)));multisearchforward(dateinummer, anzahltupel);WHILE anzahltupel>0REP multisucc;IF gleicherschuelerTHEN SELECT wasistzutunOF CASE satzloeschen:datenloeschenCASE satzneueschluessel: schluesselfelderaendernENDSELECT ;anzahltupelDECR 1;IF anzahltupel=0THEN nachlesenFI ;ELSE LEAVE hjddateiupdateFI PER .gleicherschueler: alterschluessel(1)=wert(dateinummer+1)CAND alterschluessel(2)=wert( dateinummer+2)CAND alterschluessel(3)=datumrekonversion(wert(dateinummer+3)). datenloeschen:delete(dateinummer);fehlerprotokoll(dateinummer,satzloeschen). schluesselfelderaendern:putwert(dateinummer+1,schluessel(1));putwert( dateinummer+2,schluessel(2));putwert(dateinummer+3,datumskonversion( schluessel(3)));#update(dateinummer);dr10.05.88#selupdate(dateinummer); fehlerprotokoll(dateinummer,satzneueschluessel);putwert(dateinummer+1, alterschluessel(1));putwert(dateinummer+2,alterschluessel(2));putwert( dateinummer+3,datumskonversion(alterschluessel(3)));.nachlesen:anzahltupel:= stackgroesse;multisucc(dateinummer,anzahltupel).END PROC hjddateiupdate;PROC fehlerprotokoll(INT CONST dateinummer,wasausdrucken):TEXT CONST fehlerdatei:= "Fehlerprotokoll";ROW 4TEXT VAR fehlerwobei:=ROW 4TEXT :( "Einfügen in die Datei ","Ändern in der Datei ","Löschen in der Datei ", "Ändern der Schlüsselfelder der Datei ");IF dbstatus<>okTHEN FILE VAR f:= sequentialfile(output,fehlerdatei);putline(f, "Fehlerprotokoll zur Bearbeitung des Schülers:");putline(f,schluessel(2)+ leerzeichen+schluessel(1)+", geboren am "+datumskonversion(schluessel(3))); putline(f,leer);putline(f,"Fehler beim "+fehlerwobei[wasausdrucken]+name( dateinummer));print(fehlerdatei);forget(fehlerdatei,quiet);FI END PROC fehlerprotokoll;PROC diffdatenlesen:readtid(dnrdiffdaten,wert( fnrsutiddiffdaten))END PROC diffdatenlesen;PROC evtlaenderungderkurswahldatenvollziehen:IF dbstatus=0THEN IF aktbestand= bestandlaufschuljTHEN IF intwert(fnrsusgrpjgst)>=jgstufe10THEN kurswahlserveraktualisieren(wert(fnrsusgrpjgst),"","")FI ELIF aktbestand= bestandneu11THEN kurswahlserveraktualisieren(text(jgstufe10),"","")ELIF aktbestand=bestandneusonstTHEN IF intwert(fnrsujgsteintr)>jgstufe10THEN kurswahlserveraktualisieren(text(intwert(fnrsujgsteintr)-1),"","")FI FI ;FI END PROC evtlaenderungderkurswahldatenvollziehen;END PACKET erfschuelerdaten