1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
|
PACKET schuelerjgstaendernDEFINES schuelerjgstbearbeiten,
schuelerjgstaenderungschuelerzeigen,
schuelerjgstaenderungfuerausgesuchteschuelerbearbeiten,
schuelerjgstaenderungspeichern,pruefungschuelerjgst:LET maskenname=
"ms schuelerjgst aendern",maskennameeingang="ms schuelerjgst aendern eingang"
,fnrname=2,fnrrufname=3,fnrgebdatum=4,fnrjgst=5,fnrhalbjahr=6,fnrzug=7,
fnrzugang=8,fnraktuellehjd=9,fnrneueshj1=10,fnrneuehjd1=11,fnrneueshj2=12,
fnrneuehjd2=13;LET schulhalbjahr="Schulhalbjahr";LET aktbestand="ls",
aktschuljahr="Schuljahr";LET meldunggibtsnicht=71,meldunglistenerstellung=7,
meldungkeineliste=68,meldungletzter=67,meldungspeicherung=50,
meldungkeinespeicherung=63,pruefemeldung=57;LET dateiname="Schülerliste";
FILE VAR f;TEXT VAR schuelertupel:="",zugangsicherung:="",schuelertid:="",
hjdtid:="";TEXT VAR akthalbjahr,jgstalt,zugalt,jgst,zug,jgsttext;LET
gesamtanzahlhalbjahre=12,laengehalbjahreseintrag=4;LET jgst05="05",jgst13=
"13";LET jgstufe10=10;LET oblitrenner="$",leer="",punkt=".";LET
anzschlfeldersu=3;BOOL VAR falschesdatum:=FALSE ;INT CONST gesamtzeilenlaenge
:=gesamtanzahlhalbjahre*laengehalbjahreseintrag;ROW anzschlfeldersuTEXT VAR
schluessel;TAG VAR maske;TEXT VAR ausgabezeile:="",halbjahrkuerzel:="";LET
logtextbeginn="Anw. 1.2.4 Änderung";PROC schuelerjgstbearbeiten:BOOL VAR
suexistiert:=FALSE ;falschesdatum:=FALSE ;systemdboff;reinitparsing;
schluesselbereitstellen;pruefeobnameexistiert(suexistiert);IF NOT
falschesdatumTHEN IF suexistiertTHEN schluessel(1):=wert(fnrsufamnames);
schluessel(2):=wert(fnrsurufnames);schluessel(3):=datumrekonversion(wert(
fnrsugebdatums));loeschedieerstellteobjektliste;standardstartproc(maskenname)
;bereiteaenderungvor;infeld(fnrjgst);standardnprocELSE standardmeldung(
meldunggibtsnicht,"");return(1)FI ELSE return(1)FI .END PROC
schuelerjgstbearbeiten;PROC schluesselbereitstellen:schluessel(1):=
standardmaskenfeld(fnrname);schluessel(2):=standardmaskenfeld(fnrrufname);
schluessel(3):=datumrekonversion(standardmaskenfeld(fnrgebdatum));END PROC
schluesselbereitstellen;PROC pruefeobnameexistiert(BOOL VAR suexist):TEXT
VAR datenbankwerte,schluesselwerte;inittupel(dnrschueler);
maskenwerteindatenbank;IF NOT falschesdatumTHEN search(ixsustatfamrufgeb,
FALSE );IF dbstatus=okTHEN saveupdateposition(dnrschueler);datenbankwerte:=
wert(fnrsurufnames)+datumrekonversion(wert(fnrsugebdatums));schluesselwerte:=
schluessel(2)+schluessel(3);suexist:=(wert(fnrsufamnames)=schluessel(1)CAND (
(schluessel(2)=leerAND schluessel(3)=leer)OR (pos(datenbankwerte,
schluesselwerte)=1)))ELSE suexist:=FALSE FI FI .END PROC
pruefeobnameexistiert;PROC bereiteaenderungvor:saveupdateposition(dnrschueler
);savetupel(dnrschueler,schuelertupel);schuelertid:=gettid;hjdtid:=wert(
fnrsutidakthjd);zugangsicherung:=wert(fnrsuartzugang);wertelesen;
fuelledbdateninfelder;fuellehjddateninfelder;infeld(1);standardfelderausgeben
;infeld(fnrjgst).wertelesen:akthalbjahr:=schulkenndatum(schulhalbjahr);.
fuelledbdateninfelder:jgstalt:=jgstaufber(wert(fnrsusgrpjgst));zugalt:=
compress(wert(fnrsusgrpzugtut));standardmaskenfeld(schluessel(1),fnrname);
standardmaskenfeld(schluessel(2),fnrrufname);standardmaskenfeld(schluessel(3)
,fnrgebdatum);standardmaskenfeld(akthalbjahr,fnrhalbjahr);standardmaskenfeld(
jgstalt,fnrjgst);standardmaskenfeld(zugalt,fnrzug);standardmaskenfeld(wert(
fnrsuartzugang),fnrzugang);.fuellehjddateninfelder:jgsttext:=jgstalt;
halbjahrkuerzel:=jgsttext+punkt+akthalbjahr;lieferehalbjahreszeile(
ausgabezeile,halbjahrkuerzel);standardmaskenfeld(ausgabezeile,fnraktuellehjd)
;IF jgstalt=jgst05THEN erhoehejgsttext(TRUE );halbjahrkuerzel:=jgsttext+punkt
+akthalbjahr;standardmaskenfeld(halbjahrkuerzel,fnrneueshj1);
lieferehalbjahreszeile(ausgabezeile,halbjahrkuerzel);standardmaskenfeld(
ausgabezeile,fnrneuehjd1);liefereleerzeileELIF jgstalt=jgst13THEN
erhoehejgsttext(FALSE );halbjahrkuerzel:=jgsttext+punkt+akthalbjahr;
standardmaskenfeld(halbjahrkuerzel,fnrneueshj1);lieferehalbjahreszeile(
ausgabezeile,halbjahrkuerzel);standardmaskenfeld(ausgabezeile,fnrneuehjd1);
liefereleerzeileELSE erhoehejgsttext(FALSE );halbjahrkuerzel:=jgsttext+punkt+
akthalbjahr;standardmaskenfeld(halbjahrkuerzel,fnrneueshj1);
lieferehalbjahreszeile(ausgabezeile,halbjahrkuerzel);standardmaskenfeld(
ausgabezeile,fnrneuehjd1);jgsttext:=jgstalt;erhoehejgsttext(TRUE );
halbjahrkuerzel:=jgsttext+punkt+akthalbjahr;standardmaskenfeld(
halbjahrkuerzel,fnrneueshj2);lieferehalbjahreszeile(ausgabezeile,
halbjahrkuerzel);standardmaskenfeld(ausgabezeile,fnrneuehjd2)FI .
liefereleerzeile:standardmaskenfeld(leereshj,fnrneueshj2);standardmaskenfeld(
leerezeile,fnrneuehjd2).leereshj:text(" ",laengehalbjahreseintrag).leerezeile
:text(" ",gesamtzeilenlaenge).END PROC bereiteaenderungvor;PROC
erhoehejgsttext(BOOL CONST erhoehen):INT VAR jgstint:=int(jgsttext);IF
erhoehenTHEN jgstintINCR 1ELSE jgstintDECR 1FI ;jgsttext:=jgstaufber(text(
jgstint))END PROC erhoehejgsttext;PROC loeschedieerstellteobjektliste:forget(
dateiname,quiet);END PROC loeschedieerstellteobjektliste;PROC
schuelerjgstaenderungschuelerzeigen:BOOL VAR listeexistiertnicht;
falschesdatum:=FALSE ;systemdboff;schluesselbereitstellen;
maskenwerteindatenbank;IF NOT falschesdatumTHEN standardmeldung(
meldunglistenerstellung,"");parsenooffields(5);objektlistestarten(
ixsustatfamrufgeb,schluessel(1),fnrsufamnames,TRUE ,listeexistiertnicht);IF
listeexistiertnichtTHEN reinitparsing;standardmeldung(meldungkeineliste,"");
return(1)ELSE datensatzlistenausgabe(PROC (INT CONST )suerfassungschueler,
TRUE ,BOOL PROC pruefungschuelerjgst)FI ELSE return(1)FI .END PROC
schuelerjgstaenderungschuelerzeigen;PROC maskenwerteindatenbank:putwert(
fnrsufamnames,schluessel(1));putwert(fnrsurufnames,schluessel(2));disablestop
;initmaske(maske,maskennameeingang);putwert(fnrsugebdatums,datumskonversion(
schluessel(3)));IF iserrorTHEN clearerror;meldeauffaellig(maske,157);infeld(
fnrgebdatum);falschesdatum:=TRUE ;enablestopELSE enablestop;putwert(
fnrsustatuss,aktbestand);FI END PROC maskenwerteindatenbank;BOOL PROC
pruefungschuelerjgst:wert(fnrsustatuss)=aktbestandEND PROC
pruefungschuelerjgst;PROC
schuelerjgstaenderungfuerausgesuchteschuelerbearbeiten:BOOL VAR ok,
kannbearbeitetwerden:=FALSE ;loeschedieerstellteobjektliste;
objektlistebeenden(dateiname,TRUE );reinitparsing;
holeerstenschluesselausdatei(ok);WHILE okREP pruefeobnameexistiert(ok);IF ok
THEN kannbearbeitetwerden:=TRUE ;ok:=FALSE ELSE
holenaechstenschluesselausdatei(ok)FI PER ;IF kannbearbeitetwerdenTHEN
standardstartproc(maskenname);bereiteaenderungvor;infeld(fnrjgst);
standardnprocELSE enter(2)FI .END PROC
schuelerjgstaenderungfuerausgesuchteschuelerbearbeiten;PROC
holeerstenschluesselausdatei(BOOL VAR ok):IF NOT exists(dateiname)THEN ok:=
FALSE ;LEAVE holeerstenschluesselausdateiFI ;f:=sequentialfile(input,
dateiname);holenaechstenschluesselausdatei(ok);END PROC
holeerstenschluesselausdatei;PROC holenaechstenschluesselausdatei(BOOL VAR ok
):TEXT VAR thesaurustext:="";INT VAR schluesselbeginn,schluesseltrennung,i;
IF eof(f)THEN ok:=FALSE ;loeschedieerstellteobjektlisteELSE getline(f,
thesaurustext);bestimmeschluesselausthesaurustext;ok:=TRUE FI .
bestimmeschluesselausthesaurustext:schluesselbeginn:=pos(thesaurustext,
oblitrenner);schluesseltrennung:=pos(thesaurustext,oblitrenner,
schluesselbeginn+1);FOR iFROM 1UPTO anzschlfeldersuREP IF schluesseltrennung>
0THEN schluessel(i):=subtext(thesaurustext,schluesselbeginn+1,
schluesseltrennung-1);schluesselbeginn:=schluesseltrennung;schluesseltrennung
:=pos(thesaurustext,oblitrenner,schluesselbeginn+1);ELSE schluessel(i):=
subtext(thesaurustext,schluesselbeginn+1);FI ;schluessel(3):=
datumrekonversion(schluessel(3));PER ;.END PROC
holenaechstenschluesselausdatei;PROC schuelerjgstaenderungspeichern(BOOL
CONST speichern):IF speichernTHEN INT VAR fehlerstatus:=0;
pruefeplausibilitaet(fehlerstatus);IF datenfehlerfreiTHEN standardmeldung(
meldungspeicherung,"");datenspeichern;
vorbereitendernaechstenschluesselbehandlungELSE fehlerbehandeln;return(1)FI
ELSE standardmeldung(meldungkeinespeicherung,"");
vorbereitendernaechstenschluesselbehandlungFI .datenfehlerfrei:fehlerstatus=0
.fehlerbehandeln:infeld(fehlerstatus).datenspeichern:logeintragvornehmen;
aenderungschreiben;halbjahresdatenloeschen(schluessel,jgstalt,jgst,
akthalbjahr).logeintragvornehmen:TEXT VAR eintrag:=logtextbeginn;eintragCAT
" """;eintragCAT schluessel(1);eintragCAT ", ";eintragCAT schluessel(2);
eintragCAT ", ";eintragCAT datumskonversion(schluessel(3));eintragCAT """";
logeintrag(eintrag).aenderungschreiben:IF jgstoderzuggeaendertTHEN
dbfelderfuellen;aenderunginhjdeintragen;restoreupdateposition(dnrschueler);
selupdate(dnrschueler);IF dbstatus<>0THEN restoretupel(dnrschueler,
schuelertupel)ELSE IF jgst<>jgstaltTHEN IF int(jgst)>=jgstufe10THEN
kurswahlserveraktualisieren(jgst,"","")FI ;IF int(jgstalt)>=jgstufe10THEN
kurswahlserveraktualisieren(jgstalt,"","")FI ;FI ;FI ;ELSE dbfelderfuellen;
replace(dnrschueler,schuelertid);FI .dbfelderfuellen:putwert(fnrsusgrpjgst,
jgst);putwert(fnrsusgrpzugtut,zug);putwert(fnrsuartzugang,standardmaskenfeld(
fnrzugang));.jgstoderzuggeaendert:jgst<>jgstaltCOR zug<>zugalt.
aenderunginhjdeintragen:IF hjdtid<>leerTHEN putwert(fnrhjdjgst,jgst);putwert(
fnrhjdkennung,zug);selupdate(dnrhalbjahresdaten);IF dbstatus=okTHEN putwert(
fnrsutidakthjd,gettid)FI FI .END PROC schuelerjgstaenderungspeichern;PROC
vorbereitendernaechstenschluesselbehandlung:IF exists(dateiname)THEN
holenaechstenschluesselauslisteELSE enter(2)FI .
holenaechstenschluesselausliste:BOOL VAR ok,kannbearbeitetwerden:=FALSE ;
holenaechstenschluesselausdatei(ok);WHILE okREP pruefeobnameexistiert(ok);IF
okTHEN kannbearbeitetwerden:=TRUE ;ok:=FALSE ELSE
holenaechstenschluesselausdatei(ok)FI PER ;IF kannbearbeitetwerdenTHEN
bereiteaenderungvor;return(1)ELSE behandleendederlistenabarbeitungFI .
behandleendederlistenabarbeitung:standardmeldung(meldungletzter,"");enter(3).
END PROC vorbereitendernaechstenschluesselbehandlung;PROC
pruefeplausibilitaet(INT VAR fstatus):INT VAR fmeld;LET fmeldbittefuellen=52,
fmeldnichtimbestand=55,bestandzugang="c02 zugang";fstatus:=0;standardmeldung(
pruefemeldung,"");IF NOT imschlbestand(standardmaskenfeld(fnrzugang),
bestandzugang)THEN fstatus:=fnrzugang;fmeld:=fmeldnichtimbestand;
behandledenplausifehlerFI ;jgst:=jgstaufber(standardmaskenfeld(fnrjgst));zug
:=compress(standardmaskenfeld(fnrzug));IF jgst=leerTHEN fstatus:=fnrjgst;
fmeld:=fmeldbittefuellen;behandledenplausifehlerFI ;IF zug=leerTHEN fstatus:=
fnrzug;fmeld:=fmeldbittefuellen;behandledenplausifehlerFI ;IF NOT
imbestandschuelergruppenTHEN fstatus:=fnrjgst;fmeld:=fmeldnichtimbestand;
behandledenplausifehlerFI .imbestandschuelergruppen:TEXT VAR schuljahr:=
schulkenndatum(aktschuljahr),halbjahr:=schulkenndatum(schulhalbjahr);INT VAR
dateinummer:=dnraktschuelergruppen;putwert(dateinummer+1,schuljahr);putwert(
dateinummer+2,halbjahr);putwert(dateinummer+3,jgst);putwert(dateinummer+4,zug
);search(dateinummer,TRUE );dbstatus=0.behandledenplausifehler:
standardmeldung(fmeld,"");LEAVE pruefeplausibilitaet.END PROC
pruefeplausibilitaet;END PACKET schuelerjgstaendern
|