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 eintrittsjgst<jgstufe5
COR eintrittsjgst>jgstufe13THEN 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