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
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
|
PACKET erfaufsichtszeitenDEFINES aufsichtszeitenveraendern,
aufsichtszeitenspeichern,aufsichtszeitenzeileentfernen,
aufsichtszeitenzeileeinfuegen,aufsichtszeitenuebernehmen,
aufsichtszeitenkopieren:LET niltext="",titelanfang="Aufsichtszeiten für das "
,titelmitte=". Halbjahr ",trennerfuerschuljahr="/",null=0,eins=1;LET
fnrfueruebernehmen=2,fnrfuergeplbearb=3,fnrabtagfuergepl=4,fnrfueraktbearb=5,
fnrabtagfuerakt=6,fnrcursorruhepos=7,allewochentagsbezeichnungen=
"MODIMIDOFRSAMoDiMiDoFrSamodimidofrsa",maske="ms aufsichtszeiten",
fnrwochentag=2,fnrerstebezeichnung=3,felderprozeile=5,offsetstundevor=1,
offsetstundenach=2,offsetbeginnuhr=3,offsetendeuhr=4,fnrerstesfeldletztezeile
=73,fnrletztesfeld=77,erstestundeamtag=1,stundenprowochentag=12,
stundenamsamstag=6,stelledestages=100,datensaetzepromaske=15;LET
textschuljahr="Schuljahr",textschulhalbjahr="Schulhalbjahr";LET
meldungfeldleerlassen=390,meldungzeilezutief=391,meldungmindeinestunde=392,
meldungspeicherung=50,meldungfalschezeitangabe=54,meldungeingabesinnlos=56,
meldungplausi=57,meldungdatenfehlen=68,meldungspeicherfehler=73,
meldungfrageuebernehmen=300,meldunguebernehmen=301,meldungzeitangabezulang=
341,meldungfalschezeitfolge=342,meldungfalschetagesbez=385,
meldungstdnachfolgend=386;TEXT VAR schuljahr:=niltext,halbjahr:=niltext;BOOL
VAR datenvorhanden;INT VAR tagnr;LET nummerfürmo=1,kürzelfürmo="Mo",
nummerfürdi=2,kürzelfürdi="Di",nummerfürmi=3,kürzelfürmi="Mi",nummerfürdo=4,
kürzelfürdo="Do",nummerfürfr=5,kürzelfürfr="Fr",nummerfürsa=6,kürzelfürsa=
"Sa";ROW datensaetzepromaskeTEXT VAR alteaufsichtszeiten;INT VAR aktindex;
PROC aufsichtszeitenzeileeinfuegen:INT VAR i,cursorfeld:=infeld;IF cursorfeld
>=fnrerstesfeldletztezeileTHEN standardmeldung(meldungzeilezutief,niltext);
ELSE cursorfeld:=cursorfeld-((cursorfeld-fnrerstebezeichnung)MOD
felderprozeile)+felderprozeile;FOR iFROM fnrletztesfeldDOWNTO cursorfeld+
felderprozeileREP standardmaskenfeld(standardmaskenfeld(i-felderprozeile),i)
PER ;FOR iFROM cursorfeldUPTO cursorfeld+offsetendeuhrREP standardmaskenfeld(
niltext,i)PER ;FI ;return(1);END PROC aufsichtszeitenzeileeinfuegen;PROC
aufsichtszeitenzeileentfernen:INT VAR i,cursorfeld:=infeld;cursorfeld:=
cursorfeld-((cursorfeld-fnrerstebezeichnung)MOD felderprozeile);FOR iFROM
cursorfeldUPTO cursorfeld+offsetendeuhrREP standardmaskenfeld(niltext,i)PER ;
infeld(cursorfeld);return(1);END PROC aufsichtszeitenzeileentfernen;PROC
aufsichtszeitenveraendern:INT VAR aktfnr;pruefeplausidereingangsmaske;
setzeschulhalbjahrindenmaskekopf;holealledatendestages;infeld(fnrwochentag);
standardfelderausgeben;infeld(fnrerstebezeichnung);standardnproc.
pruefeplausidereingangsmaske:IF standardmaskenfeld(fnrfueruebernehmen)<>
niltextOR NOT (standardmaskenfeld(fnrfuergeplbearb)<>niltextXOR
standardmaskenfeld(fnrfueraktbearb)<>niltext)THEN standardmeldung(
meldungeingabesinnlos,niltext);IF standardmaskenfeld(fnrfueruebernehmen)=
niltextTHEN infeld(fnrfuergeplbearb)ELSE infeld(fnrfueruebernehmen)FI ;return
(1);LEAVE aufsichtszeitenveraendernFI ;IF standardmaskenfeld(fnrfuergeplbearb
)=niltextTHEN aktfnr:=fnrabtagfuergeplELSE aktfnr:=fnrabtagfueraktFI ;IF
standardmaskenfeld(aktfnr)<>niltextTHEN standardmeldung(meldungfeldleerlassen
,niltext);infeld(aktfnr);return(1);LEAVE aufsichtszeitenveraendernFI ;IF
standardmaskenfeld(fnrfuergeplbearb)=niltextTHEN aktfnr:=fnrabtagfueraktELSE
aktfnr:=fnrabtagfuergeplFI ;IF standardmaskenfeld(aktfnr)=niltextTHEN tagnr:=
nummerfürmo;ELSE tagnr:=pos(allewochentagsbezeichnungen,standardmaskenfeld(
aktfnr));IF tagnr=0THEN standardmeldung(meldungfalschetagesbez,niltext);
infeld(aktfnr);return(1);LEAVE aufsichtszeitenveraendernFI ;tagnr:=(tagnrMOD
12)DIV 2+1;FI .setzeschulhalbjahrindenmaskekopf:schuljahr:=schulkenndatum(
textschuljahr);halbjahr:=schulkenndatum(textschulhalbjahr);IF
standardmaskenfeld(fnrfuergeplbearb)<>niltextTHEN geplanteshjundsjberechnen(
halbjahr,schuljahr)FI ;standardstartproc(maske);
standardkopfmaskeaktualisieren(titelanfang+halbjahr+titelmitte+text(schuljahr
,2)+trennerfuerschuljahr+subtext(schuljahr,3)).END PROC
aufsichtszeitenveraendern;PROC aufsichtszeitenspeichern(BOOL CONST speichern)
:INT VAR fehlerstatus:=null,aktfnr,aznr,beginn,ende,letztestd,i;IF speichern
THEN pruefeplausibilitaet;IF fehlerstatus<>nullTHEN infeld(fehlerstatus);
return(1);LEAVE aufsichtszeitenspeichernFI ;speicherungdurchfuehren;FI ;IF
tagnr<nummerfürsaTHEN tagnrINCR 1;holealledatendestages;infeld(fnrwochentag);
standardfelderausgeben;infeld(fnrerstebezeichnung);return(1)ELSE enter(2)FI .
pruefeplausibilitaet:standardmeldung(meldungplausi,niltext);aktfnr:=
fnrerstebezeichnung-1;FOR iFROM 1UPTO datensaetzepromaskeREP aktfnrINCR 1;IF
(standardmaskenfeld(aktfnr)<>niltextCOR standardmaskenfeld(aktfnr+
offsetbeginnuhr)<>niltextCOR standardmaskenfeld(aktfnr+offsetendeuhr)<>
niltext)CAND standardmaskenfeld(aktfnr+offsetstundevor)=niltextCAND
standardmaskenfeld(aktfnr+offsetstundenach)=niltextTHEN standardmeldung(
meldungmindeinestunde,niltext);fehlerstatus:=aktfnr+offsetstundevor;LEAVE
pruefeplausibilitaetFI ;IF tagnr=nummerfürsaTHEN letztestd:=stundenamsamstag
ELSE letztestd:=stundenprowochentagFI ;aktfnrINCR 1;IF standardmaskenfeld(
aktfnr)<>niltextTHEN standardpruefe(2,aktfnr,null,null,niltext,fehlerstatus);
IF fehlerstatus<>0THEN LEAVE pruefeplausibilitaetFI ;standardpruefe(3,aktfnr,
erstestundeamtag,letztestd,niltext,fehlerstatus);IF fehlerstatus<>0THEN
LEAVE pruefeplausibilitaetFI ;FI ;beginn:=int(standardmaskenfeld(aktfnr));
aktfnrINCR 1;IF standardmaskenfeld(aktfnr)<>niltextTHEN standardpruefe(2,
aktfnr,null,null,niltext,fehlerstatus);IF fehlerstatus<>0THEN LEAVE
pruefeplausibilitaetFI ;standardpruefe(3,aktfnr,erstestundeamtag,letztestd,
niltext,fehlerstatus);IF fehlerstatus<>0THEN LEAVE pruefeplausibilitaetFI ;
FI ;ende:=int(standardmaskenfeld(aktfnr));IF beginn>0AND ende>0AND ende<>
beginn+1THEN standardmeldung(meldungstdnachfolgend,niltext);fehlerstatus:=
aktfnr-1;LEAVE pruefeplausibilitaetFI ;aktfnrINCR 1;beginn:=int(
standardmaskenfeld(aktfnr));IF falschezeitangabe(beginn,aktfnr,fehlerstatus)
THEN LEAVE pruefeplausibilitaetFI ;aktfnrINCR 1;ende:=int(standardmaskenfeld(
aktfnr));IF falschezeitangabe(ende,aktfnr,fehlerstatus)THEN LEAVE
pruefeplausibilitaetFI ;IF beginn>endeAND ende>0THEN standardmeldung(
meldungfalschezeitfolge,niltext);fehlerstatus:=aktfnr-1;LEAVE
pruefeplausibilitaetFI PER .speicherungdurchfuehren:standardmeldung(
meldungspeicherung,niltext);aktfnr:=fnrerstebezeichnung;aznr:=1;
suchenächstenichtleerezeile;WHILE aktfnr<=fnrerstesfeldletztezeileREP infeld(
aktfnr);fülleprimärindexfelder;search(dnraufsichtszeiten,true);
füllerestlichedbfelder;IF dbstatus<>nullTHEN insert(dnraufsichtszeiten)ELSE
update(dnraufsichtszeiten)FI ;speicherfehlerabfangen;aktfnrINCR
felderprozeile;aznrINCR 1;suchenächstenichtleerezeile;PER ;dbstatus(0);WHILE
dbstatus=0CAND aznr<=datensaetzepromaskeREP fülleprimärindexfelder;delete(
dnraufsichtszeiten);aznrINCR 1;PER .suchenächstenichtleerezeile:WHILE aktfnr
<=fnrerstesfeldletztezeileCAND zeileistleerREP aktfnrINCR felderprozeilePER .
zeileistleer:standardmaskenfeld(aktfnr)+standardmaskenfeld(aktfnr+
offsetbeginnuhr)+standardmaskenfeld(aktfnr+offsetendeuhr)+standardmaskenfeld(
aktfnr+offsetstundevor)+standardmaskenfeld(aktfnr+offsetstundenach)=niltext.
fülleprimärindexfelder:putwert(fnrazsj,schuljahr);putwert(fnrazhj,halbjahr);
putintwert(fnrazaufsichtszeit,tagnr*stelledestages+aznr);.
füllerestlichedbfelder:putwert(fnrazbezeichnung,standardmaskenfeld(aktfnr));
IF standardmaskenfeld(aktfnr+offsetstundevor)=niltextTHEN putintwert(
fnraztagstdvor,null)ELSE putintwert(fnraztagstdvor,(tagnr-1)*
stundenprowochentag+int(standardmaskenfeld(aktfnr+offsetstundevor)))FI ;IF
standardmaskenfeld(aktfnr+offsetstundenach)=niltextTHEN putintwert(
fnraztagstdnach,null)ELSE putintwert(fnraztagstdnach,(tagnr-1)*
stundenprowochentag+int(standardmaskenfeld(aktfnr+offsetstundenach)))FI ;
putwert(fnrazbeginnuhr,standardmaskenfeld(aktfnr+offsetbeginnuhr));putwert(
fnrazendeuhr,standardmaskenfeld(aktfnr+offsetendeuhr)).speicherfehlerabfangen
:IF dbstatus<>nullTHEN standardmeldung(meldungspeicherfehler,niltext);return(
1);LEAVE aufsichtszeitenspeichernFI .END PROC aufsichtszeitenspeichern;PROC
aufsichtszeitenkopieren:INT VAR i,altetagnr;aktindex:=null;altetagnr:=tagnr;
tagnr:=nummerfürmo;inittupel(dnraufsichtszeiten);statleseschleife(
dnraufsichtszeiten,schuljahr,halbjahr,fnrazsj,fnrazhj,PROC fuellenurmaske);
FOR iFROM aktindex*felderprozeile+fnrerstebezeichnungUPTO fnrletztesfeldREP
standardmaskenfeld(niltext,i)PER ;tagnr:=altetagnr;infeld(fnrerstebezeichnung
);return(1);END PROC aufsichtszeitenkopieren;PROC aufsichtszeitenuebernehmen(
BOOL CONST hauptaktion):TEXT VAR geplhj,geplsj;INT VAR i,j,altetagnr;IF NOT
hauptaktionTHEN prüfeobeingangsmaskerichtigangekreuzt;schuljahr:=
schulkenndatum(textschuljahr);halbjahr:=schulkenndatum(textschulhalbjahr);
tagnr:=nummerfürmo;fuelledenpuffermitdenaufsichtszeiten;IF datenvorhanden
THEN standardmeldung(meldungfrageuebernehmen,niltext);feldschutz(
fnrfueruebernehmen);feldschutz(fnrfuergeplbearb);feldschutz(fnrabtagfuergepl)
;feldschutz(fnrfueraktbearb);feldschutz(fnrabtagfuerakt);feldfrei(
fnrcursorruhepos);infeld(fnrcursorruhepos);standardnproc;ELSE standardmeldung
(meldungdatenfehlen,niltext);infeld(fnrfueruebernehmen);return(1)FI ELSE
standardmeldung(meldunguebernehmen,niltext);geplhj:=halbjahr;geplsj:=
schuljahr;geplanteshjundsjberechnen(geplhj,geplsj);WHILE datenvorhandenREP
löschealletagebiszumvorliegenden;speicheredenvorliegendentag;tagnrINCR 1;
fuelledenpuffermitdenaufsichtszeiten;PER ;löscheallerestlichentage;enter(2)
FI .prüfeobeingangsmaskerichtigangekreuzt:IF standardmaskenfeld(
fnrfueruebernehmen)=niltextOR standardmaskenfeld(fnrfuergeplbearb)<>niltext
OR standardmaskenfeld(fnrfueraktbearb)<>niltextTHEN standardmeldung(
meldungeingabesinnlos,niltext);infeld(fnrfueruebernehmen);return(1);LEAVE
aufsichtszeitenuebernehmenFI ;IF standardmaskenfeld(fnrabtagfuergepl)<>
niltextTHEN standardmeldung(meldungfeldleerlassen,niltext);infeld(
fnrabtagfuergepl);return(1);LEAVE aufsichtszeitenuebernehmenFI ;IF
standardmaskenfeld(fnrabtagfuerakt)<>niltextTHEN standardmeldung(
meldungfeldleerlassen,niltext);infeld(fnrabtagfuerakt);return(1);LEAVE
aufsichtszeitenuebernehmenFI ;.fuelledenpuffermitdenaufsichtszeiten:aktindex
:=null;datenvorhanden:=FALSE ;altetagnr:=tagnr;inittupel(dnraufsichtszeiten);
statleseschleife(dnraufsichtszeiten,schuljahr,halbjahr,fnrazsj,fnrazhj,PROC
fuellenurpuffer);.löschealletagebiszumvorliegenden:FOR iFROM altetagnrUPTO
tagnr-1REP löschedateneinestagesPER .löschedateneinestages:j:=1;dbstatus(0);
WHILE dbstatus=0CAND j<=datensaetzepromaskeREP putwert(fnrazsj,geplsj);
putwert(fnrazhj,geplhj);putintwert(fnrazaufsichtszeit,i*stelledestages+j);
delete(dnraufsichtszeiten);jINCR 1;PER .speicheredenvorliegendentag:i:=1;
WHILE i<=aktindexREP fülleprimärindexfelder;search(dnraufsichtszeiten,true);
füllerestlichedbfelder;IF dbstatus<>nullTHEN insert(dnraufsichtszeiten)ELSE
update(dnraufsichtszeiten)FI ;speicherfehlerabfangen;iINCR 1;PER ;WHILE
dbstatus=0CAND i<=datensaetzepromaskeREP fülleprimärindexfelder;delete(
dnraufsichtszeiten);iINCR 1;PER .fülleprimärindexfelder:putwert(fnrazsj,
geplsj);putwert(fnrazhj,geplhj);putintwert(fnrazaufsichtszeit,tagnr*
stelledestages+i);.füllerestlichedbfelder:restoretupel(dnraufsichtszeiten,
alteaufsichtszeiten(i));putwert(fnrazsj,geplsj);putwert(fnrazhj,geplhj);.
speicherfehlerabfangen:IF dbstatus<>nullTHEN standardmeldung(
meldungspeicherfehler,niltext);infeld(fnrfueruebernehmen);return(2);LEAVE
aufsichtszeitenuebernehmenFI .löscheallerestlichentage:FOR iFROM altetagnr
UPTO nummerfürsaREP löschedateneinestagesPER .END PROC
aufsichtszeitenuebernehmen;PROC holealledatendestages:TEXT VAR tag;INT VAR i;
setzewochentagindiemaske;holegewünschtentagindiemaske.
setzewochentagindiemaske:SELECT tagnrOF CASE nummerfürmo:tag:=kürzelfürmo
CASE nummerfürdi:tag:=kürzelfürdiCASE nummerfürmi:tag:=kürzelfürmiCASE
nummerfürdo:tag:=kürzelfürdoCASE nummerfürfr:tag:=kürzelfürfrCASE nummerfürsa
:tag:=kürzelfürsaEND SELECT ;standardmaskenfeld(tag,fnrwochentag).
holegewünschtentagindiemaske:aktindex:=null;inittupel(dnraufsichtszeiten);
statleseschleife(dnraufsichtszeiten,schuljahr,halbjahr,fnrazsj,fnrazhj,PROC
fuellenurmaske);FOR iFROM aktindex*felderprozeile+fnrerstebezeichnungUPTO
fnrletztesfeldREP standardmaskenfeld(niltext,i)PER ;.END PROC
holealledatendestages;PROC fuellenurmaske(BOOL VAR b):INT VAR feldnr,stunde;
IF wert(fnrazsj)>schuljahrCOR wert(fnrazhj)>halbjahrCOR intwert(
fnrazaufsichtszeit)>tagnr*stelledestages+datensaetzepromaskeCOR dbstatus<>0
THEN b:=TRUE ELSE IF intwert(fnrazaufsichtszeit)>tagnr*stelledestagesTHEN
aktindexINCR eins;feldnr:=fnrerstebezeichnung+(aktindex-1)*felderprozeile;
standardmaskenfeld(wert(fnrazbezeichnung),feldnr);feldnrINCR 1;stunde:=
intwert(fnraztagstdvor);IF stunde>0THEN stunde:=(stunde-1)MOD
stundenprowochentag+1;standardmaskenfeld(text(stunde),feldnr);ELSE
standardmaskenfeld(niltext,feldnr);FI ;feldnrINCR 1;stunde:=intwert(
fnraztagstdnach);IF stunde>0THEN stunde:=(stunde-1)MOD stundenprowochentag+1;
standardmaskenfeld(text(stunde),feldnr);ELSE standardmaskenfeld(niltext,
feldnr);FI ;feldnrINCR 1;standardmaskenfeld(wert(fnrazbeginnuhr),feldnr);
feldnrINCR 1;standardmaskenfeld(wert(fnrazendeuhr),feldnr);FI FI END PROC
fuellenurmaske;PROC fuellenurpuffer(BOOL VAR b):IF wert(fnrazsj)>schuljahr
COR wert(fnrazhj)>halbjahrCOR (datenvorhandenCAND intwert(fnrazaufsichtszeit)
>tagnr*stelledestages+datensaetzepromaske)COR dbstatus<>0THEN b:=TRUE ELSE
IF intwert(fnrazaufsichtszeit)>tagnr*stelledestagesTHEN IF NOT datenvorhanden
THEN datenvorhanden:=TRUE ;tagnr:=intwert(fnrazaufsichtszeit)DIV
stelledestagesFI ;aktindexINCR eins;savetupel(dnraufsichtszeiten,
alteaufsichtszeiten(aktindex));FI FI END PROC fuellenurpuffer;BOOL PROC
falschezeitangabe(INT CONST zeit,fnr,INT VAR status):IF standardmaskenfeld(
fnr)=niltextTHEN LEAVE falschezeitangabeWITH FALSE FI ;IF length(
standardmaskenfeld(fnr))>4THEN standardmeldung(meldungzeitangabezulang,
niltext);status:=fnr;LEAVE falschezeitangabeWITH TRUE FI ;standardpruefe(2,
fnr,null,null,niltext,status);IF status<>nullTHEN LEAVE falschezeitangabe
WITH TRUE FI ;IF zeit<nullOR zeitMOD 100>59OR zeitDIV 100>24THEN
standardmeldung(meldungfalschezeitangabe,niltext);status:=fnr;TRUE ELSE
FALSE FI END PROC falschezeitangabe;END PACKET erfaufsichtszeiten;
|