PACKET erfabmeldedatenDEFINES suabmeldedatenbearbeiten, suabmeldedatenspeichern,suausgesuchteabmeldedatenbearbeiten, schuelerlistezeigen,pruefungschuelerab:LET maskennameeingang= "ms schuelerangabe",maskenstammname="ms erf abmeldedaten",aktbestand="ls", bestandschulen="Schulen",fnrname=2,fnrrufname=3,fnrgebdatum=4,fnrjgst=5, fnrzug=6,fnrabdatum=7,fnrabgrund=8,fnrneueschule=9,fnrabschluss=10, meldunglistenerstellung=7,meldungspeicherung=50,pruefemeldung=57, meldungkeineaenderung=63,meldungletzter=67,meldungkeineliste=68, meldunggibtsnicht=71,meldungspeicherungfehlerhaft=73,meldungfalschesdatum=157 ;LET leer="",oblitrenner="$";LET anzschluessel=3;#A nzahlderamP rimärschlüselbeteiligtenF elder#BOOL VAR falschesdatum:=FALSE ;FILE VAR f; ROW anzschluesselTEXT VAR schluessel;#24.03.87#TAG VAR maske;TEXT VAR dateiname:="Schülerliste",schuelertid:="";TEXT VAR abdatumsicherung, abgrundsicherung,abschlusssicherung;LET logtextbeginn= "Anw. 1.3.1 Änderung """;PROC bearbeitunginitialisieren:forget(dateiname, quiet).END PROC bearbeitunginitialisieren;PROC suabmeldedatenbearbeiten:BOOL VAR sudatenexistieren;falschesdatum:=FALSE ;systemdboff;reinitparsing; bearbeitunginitialisieren;schluessel(1):=standardmaskenfeld(fnrname); schluessel(2):=standardmaskenfeld(fnrrufname);schluessel(3):= datumrekonversion(standardmaskenfeld(fnrgebdatum));pruefeobsudatenexistieren( sudatenexistieren);IF NOT falschesdatumTHEN IF sudatenexistierenTHEN schluessel(1):=wert(fnrsufamnames);schluessel(2):=wert(fnrsurufnames); schluessel(3):=datumrekonversion(wert(fnrsugebdatums));standardstartproc( maskenstammname);bereiteaenderungvor;standardnproc;ELSE standardmeldung( meldunggibtsnicht,"");return(1)FI ;ELSE return(1)FI .END PROC suabmeldedatenbearbeiten;PROC bereiteaenderungvor:saveupdateposition( dnrschueler);schuelertid:=gettid;holedbwerteinmaske;abdatumsicherung:=wert( fnrsuabgdats);abgrundsicherung:=wert(fnrsuabggrund);abschlusssicherung:=wert( fnrsuabschluss);infeld(fnrname);standardfelderausgeben;infeld(fnrabdatum). END PROC bereiteaenderungvor;PROC holedbwerteinmaske:standardmaskenfeld(wert( fnrsufamnames),fnrname);standardmaskenfeld(wert(fnrsurufnames),fnrrufname); standardmaskenfeld(datumrekonversion(wert(fnrsugebdatums)),fnrgebdatum); standardmaskenfeld(jgstaufber(wert(fnrsusgrpjgst)),fnrjgst); standardmaskenfeld(wert(fnrsusgrpzugtut),fnrzug);standardmaskenfeld( datumrekonversion(wert(fnrsuabgdats)),fnrabdatum);standardmaskenfeld(wert( fnrsuabggrund),fnrabgrund);standardmaskenfeld(wert(fnrsuskennnschule), fnrneueschule);standardmaskenfeld(wert(fnrsuabschluss),fnrabschluss)END PROC holedbwerteinmaske;PROC pruefeobsudatenexistieren(BOOL VAR suexist):TEXT VAR datenbankwerte,schluesselwerte;inittupel(dnrschueler);maskenwerteindatenbank; IF NOT falschesdatumTHEN search(ixsustatfamrufgeb);IF dbstatus=okTHEN 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 pruefeobsudatenexistieren;PROC maskenwerteindatenbank:putwert(fnrsufamnames, schluessel(1));putwert(fnrsurufnames,schluessel(2));disablestop;initmaske( maske,maskennameeingang);putwert(fnrsugebdatums,datumskonversion(schluessel(3 )));IF iserrorTHEN clearerror;standardmeldung(meldungfalschesdatum,"");infeld (fnrgebdatum);falschesdatum:=TRUE ;enablestop;ELSE enablestop;putwert( fnrsustatuss,aktbestand);FI ;END PROC maskenwerteindatenbank;PROC suabmeldedatenspeichern(BOOL CONST zuspeichern):IF zuspeichernTHEN bereitespeicherungvorELSE standardmeldung(meldungkeineaenderung,""); vorbereitendernaechstendatenbehandlungFI .bereitespeicherungvor:INT VAR fehlerstatus:=0;pruefeplausibilitaet(fehlerstatus);IF datenfehlerfreiTHEN datenschreiben;vorbereitendernaechstendatenbehandlungELSE fehlerbehandeln; return(1)FI .datenfehlerfrei:fehlerstatus=0.fehlerbehandeln:infeld( fehlerstatus).datenschreiben:meldespeicherung;datenindatenbankspeichern. meldespeicherung:standardmeldung(meldungspeicherung,""). datenindatenbankspeichern:logeintragvornehmen;setzedbwerte; abmeldedatenschreiben.logeintragvornehmen:TEXT VAR eintrag:=logtextbeginn; eintragCAT schluessel(1);eintragCAT ", ";eintragCAT schluessel(2);eintragCAT ", ";eintragCAT datumskonversion(schluessel(3));eintragCAT """";logeintrag( eintrag).setzedbwerte:putwert(fnrsuabggrund,standardmaskenfeld(fnrabgrund)); putwert(fnrsuskennnschule,standardmaskenfeld(fnrneueschule));putwert( fnrsuabschluss,standardmaskenfeld(fnrabschluss));putwert(fnrsuabgdats, datumskonversion(standardmaskenfeld(fnrabdatum)));.abmeldedatenschreiben:IF abdatumsicherung<>wert(fnrsuabgdats)THEN restoreupdateposition(dnrschueler); selupdate(dnrschueler);ELSE replace(dnrschueler,schuelertid)FI ;IF dbstatus<> 0THEN standardmeldung(meldungspeicherungfehlerhaft,"")#dr11.05.88ELIF grundgeaendertTHEN grundinstatraumaendernELIF abschlussgeaendertTHEN abschlussinstatraumaendern#FI .#drgrundgeaendert:11.05.88abgrundsicherung<> wert(fnrsuabggrund).abschlussgeaendert:abschlusssicherung<>wert( fnrsuabschluss).grundinstatraumaendern:kuerzelaendern(statnrabgrund, abgrundsicherung,wert(fnrsuabggrund)).abschlussinstatraumaendern: kuerzelaendern(statnrabschluss,abschlusssicherung,wert(fnrsuabschluss)).#END PROC suabmeldedatenspeichern;PROC vorbereitendernaechstendatenbehandlung:IF exists(dateiname)THEN holenaechstenschluesselauslisteELSE enter(2)FI . holenaechstenschluesselausliste:BOOL VAR ok,kannbearbeitetwerden:=FALSE ; holenaechstenmehrtlgschluesselausdatei(ok);WHILE okREP pruefeobsudatenexistieren(ok);IF okTHEN kannbearbeitetwerden:=TRUE ;ok:= FALSE ELSE holenaechstenmehrtlgschluesselausdatei(ok)FI PER ;IF kannbearbeitetwerdenTHEN bereiteaenderungvor;return(1)ELSE behandleendederthesaurusabarbeitungFI .behandleendederthesaurusabarbeitung: standardmeldung(meldungletzter,"");enter(3).END PROC vorbereitendernaechstendatenbehandlung;PROC schuelerlistezeigen:BOOL VAR keineliste;schluessel(1):=standardmaskenfeld(fnrname);schluessel(2):= standardmaskenfeld(fnrrufname);schluessel(3):=datumrekonversion( standardmaskenfeld(fnrgebdatum));falschesdatum:=FALSE ;systemdboff; parsenooffields(5);maskenwerteindatenbank;IF NOT falschesdatumTHEN objektlistestarten(ixsustatfamrufgeb,schluessel(1),fnrsufamnames,TRUE , keineliste);IF keinelisteTHEN reinitparsing;standardmeldung(meldungkeineliste ,"");return(1)ELSE standardmeldung(meldunglistenerstellung,""); datensatzlistenausgabe(PROC (INT CONST )suerfassungschueler,TRUE ,BOOL PROC pruefungschuelerab)FI ELSE return(1)FI END PROC schuelerlistezeigen;BOOL PROC pruefungschuelerab:wert(fnrsustatuss)=aktbestandEND PROC pruefungschuelerab;PROC suausgesuchteabmeldedatenbearbeiten:BOOL VAR ok, kannbearbeitetwerden:=FALSE ;bearbeitunginitialisieren;objektlistebeenden( dateiname,TRUE );reinitparsing;holeerstenmehrtlgschluesselausdatei(ok);WHILE okREP pruefeobsudatenexistieren(ok);IF okTHEN kannbearbeitetwerden:=TRUE ;ok :=FALSE ELSE holenaechstenmehrtlgschluesselausdatei(ok)FI PER ;IF kannbearbeitetwerdenTHEN standardstartproc(maskenstammname); bereiteaenderungvor;standardnprocELSE enter(2)FI .END PROC suausgesuchteabmeldedatenbearbeiten;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, anzschlfelder:=anzkey(dnrschueler);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 anzschlfelderREP IF schluesseltrennung>0 THEN 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;PROC pruefeplausibilitaet(INT VAR fstatus):LET pruefartdatum=5,fmeldnichtimbestand =55,bestandabgangsgrund="c02 abgang",bestandabschluss="c02 abschluss";fstatus :=0;standardmeldung(pruefemeldung,"");IF standardmaskenfeld(fnrabgrund)<>leer THEN IF NOT imschlbestand(standardmaskenfeld(fnrabgrund),bestandabgangsgrund) THEN fstatus:=fnrabgrund;standardmeldung(fmeldnichtimbestand,"");LEAVE pruefeplausibilitaetFI ;FI ;IF standardmaskenfeld(fnrneueschule)<>leerTHEN IF NOT imbestand(standardmaskenfeld(fnrneueschule),bestandschulen)THEN fstatus:=fnrneueschule;standardmeldung(fmeldnichtimbestand,"");LEAVE pruefeplausibilitaetFI ;FI ;IF standardmaskenfeld(fnrabschluss)<>leerTHEN IF NOT imschlbestand(standardmaskenfeld(fnrabschluss),bestandabschluss)THEN fstatus:=fnrabschluss;standardmeldung(fmeldnichtimbestand,"");LEAVE pruefeplausibilitaetFI ;FI ;IF standardmaskenfeld(fnrabdatum)<>leerTHEN standardpruefe(pruefartdatum,fnrabdatum,0,0,"",fstatus);FI ;END PROC pruefeplausibilitaet;#dr11.05.88PROC kuerzelaendern(INT CONST statnr,TEXT CONST alterwert,neuerwert):kuerzelsummeeinsrunter(statnr,jgstaufber(wert( fnrsusgrpjgst)),compress(wert(fnrsusgrpzugtut)),aktbestand,alterwert); kuerzelsummeeinsrauf(statnr,jgstaufber(wert(fnrsusgrpjgst)),compress(wert( fnrsusgrpzugtut)),aktbestand,neuerwert)END PROC kuerzelaendern;#END PACKET erfabmeldedaten