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
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
|
PACKET planefaecherangebotDEFINES fachangpruefuebern,fachangpruefbearb,
fachangmodbldsch,fachangstdvproc,fachanguebern,fachangspeichern:LET sj=
"Schuljahr",hj="Schulhalbjahr",art="c02 art lehrveranstaltung",eingmaske=
"ms erf faecherangebot",bearbmaske="ms bearb faecherangebot",
kennzeichnunggeplant="geplant",maxzahl=99,minzahl=0,bearbzl=19,jgstfeldnr=10,
meldg0=56,meldg1=300,meldg3=302,meldg4=303,meldg5=304,meldg6=305,meldg7=306,
meldg8=307,meldg9=308,meldg11=310,meldg12=311,meldg10=318,meldg13=315,meldg14
=312,meldg15=313,meldg16=314,meldg17=69,meldg18=57,meldg19=50,trenner="�";
ROW 10TEXT VAR eingbldsch;ROW bearbzlINT VAR dbsatzbsnr;ROW bearbzlSTRUCT (
TEXT fach,TEXT art,TEXT wstd,TEXT anz)VAR bearbbldsch;ROW bearbzlSTRUCT (
TEXT fach,TEXT art,TEXT wstd,TEXT anz,)VAR dbinh;INT VAR i,j,k,letztepos:=2,
status,zeignr:=1,z1dbnr:=1,nzaehler:=0,ersteeinfuegezeile:=1,bszeiger:=1,
dbzeiger:=1,letztejgst:=1,anzbssaetze,anzdbsaetze,letztebearbzeile:=0;TEXT
VAR fa:="",ar:="",ws:="",an:="",tupel:="",fachkatalog,artkatalog,
maskenkopferg:="";INT VAR aktzeile:=0;TEXT VAR aktschhj:="0",aktschj:="0",
geplschhj:="0",geplschj:="0";BOOL VAR okay:=TRUE ,rueck,istfehler,neu:=FALSE
,dbfa2,bldfa2,f2:=FALSE ,f3:=FALSE ,f6:=FALSE ,modifsatzgeprueft:=FALSE ,
keinescn:=TRUE ,saetzeunveraendert;PROC holeaktdaten:statleseschleife(
dnrfaecher,"","",fnrffach,fnrffach,PROC fachcat);statleseschleife(
dnrschluessel,art,"",fnrschlsachgebiet,fnrschlschluessel,PROC artcat)END
PROC holeaktdaten;PROC holeakthj:aktschhj:=schulkenndatum(hj);aktschj:=
schulkenndatum(sj);geplschhj:=aktschhj;geplschj:=aktschj;
geplanteshjundsjberechnen(geplschhj,geplschj);maskenkopferg:=text(
vergleichsknoten)+" "+geplschhj+". "+text(geplschj,2)+"/"+subtext(geplschj,3)
END PROC holeakthj;PROC initrows:fachkatalog:=trenner;artkatalog:=trenner;
FOR iFROM 1UPTO 10REP eingbldsch(i):=""PER ;FOR iFROM 1UPTO bearbzlREP
bearbbldsch(i).fach:="";bearbbldsch(i).art:="";bearbbldsch(i).wstd:="";
bearbbldsch(i).anz:="";dbsatzbsnr(i):=0;dbinh(i).fach:="";dbinh(i).art:="";
dbinh(i).wstd:="";dbinh(i).anz:="";PER ;END PROC initrows;PROC
fachangpruefuebern:merkeeingsch;f2:=FALSE ;f3:=FALSE ;f6:=FALSE ;okay:=TRUE ;
fall1;fall2;fall3;fall6;fall9;IF okayTHEN merkeeingsch;standardmeldung(meldg1
,"");standardnprocELSE IF NOT rueckTHEN fachangzurueckmitmeldg(meldg0,1,
letztepos,"")FI FI .fall1:IF eingbldsch(2)=""CAND eingbldsch(3)=""CAND
eingbldsch(6)=""THEN fachangzurueckmitmeldg(meldg0,1,0,"");LEAVE
fachangpruefuebernFI .fall2:IF eingbldsch(2)<>""THEN f2:=TRUE ;prueferestFI .
prueferest:FOR iFROM 3UPTO 10REP IF eingbldsch(i)<>""THEN okay:=FALSE ;
letztepos:=2;FI PER .fall3:IF eingbldsch(3)<>""CAND okayTHEN f3:=TRUE ;
pruefandereFI .pruefandere:IF eingbldsch(2)<>""THEN okay:=FALSE FI ;FOR i
FROM 6UPTO 10REP IF eingbldsch(i)<>""THEN okay:=FALSE FI PER ;IF NOT okay
THEN fachangzurueckmitmeldg(meldg0,1,0,"");LEAVE fachangpruefuebernFI ;IF
eingbldsch(4)=""CAND okayTHEN fachangzurueckmitmeldg(meldg5,1,4,"");LEAVE
fachangpruefuebernFI ;IF eingbldsch(5)=""CAND okayTHEN fachangzurueckmitmeldg
(meldg5,1,5,"");LEAVE fachangpruefuebernFI ;pruefjgst(4);IF NOT okayTHEN
LEAVE fachangpruefuebernFI ;pruefjgst(5);IF NOT okayTHEN LEAVE
fachangpruefuebernFI .fall6:IF eingbldsch(6)<>""CAND okayTHEN f6:=TRUE ;
pruefnochFI .pruefnoch:FOR iFROM 2UPTO 5REP IF eingbldsch(i)<>""THEN okay:=
FALSE FI PER ;FOR iFROM 9UPTO 10REP IF eingbldsch(i)<>""THEN okay:=FALSE FI
PER ;IF NOT okayTHEN fachangzurueckmitmeldg(meldg0,1,0,"");LEAVE
fachangpruefuebernFI ;IF eingbldsch(7)=""CAND okayTHEN fachangzurueckmitmeldg
(meldg5,1,7,"");LEAVE fachangpruefuebernFI ;IF eingbldsch(8)=""CAND okayTHEN
fachangzurueckmitmeldg(meldg5,1,8,"");LEAVE fachangpruefuebernFI ;pruefjgst(7
);IF NOT okayTHEN LEAVE fachangpruefuebernFI ;pruefjgst(8);IF NOT okayTHEN
LEAVE fachangpruefuebernFI ;IF eingbldsch(7)=eingbldsch(8)THEN
fachangzurueckmitmeldg(meldg0,1,7,"");LEAVE fachangpruefuebernFI .fall9:IF
eingbldsch(9)<>""COR eingbldsch(10)<>""CAND okayTHEN IF NOT rueckTHEN
fachangzurueckmitmeldg(meldg10,1,letztepos,"")FI ;LEAVE fachangpruefuebernFI
.END PROC fachangpruefuebern;PROC fachangpruefbearb:standardmeldung(meldg17,
" ");merkeeingsch;okay:=TRUE ;FOR iFROM 2UPTO 8REP IF eingbldsch(i)<>""THEN
fachangzurueckmitmeldg(meldg10,1,i,"");LEAVE fachangpruefbearbFI ;PER ;IF
eingbldsch(9)=""CAND okayTHEN fachangzurueckmitmeldg(meldg0,1,i,"");LEAVE
fachangpruefbearbFI ;IF eingbldsch(10)=""THEN fachangzurueckmitmeldg(meldg5,1
,10,"");LEAVE fachangpruefbearbELSE pruefjgst(10);FI ;IF okayCAND eingbldsch(
10)<>""THEN erfasstefelderausgeben(zeignr);standardnprocELSE IF NOT rueck
THEN fachangzurueckmitmeldg(meldg0,1,0,"")FI FI .END PROC fachangpruefbearb;
PROC pruefjgst(INT CONST eingbldschindex):rueck:=FALSE ;IF compress(
eingbldsch(eingbldschindex))="0"COR eingbldsch(eingbldschindex)="00"THEN
LEAVE pruefjgstELIF int(eingbldsch(eingbldschindex))>4CAND int(eingbldsch(
eingbldschindex))<14THEN LEAVE pruefjgstELSE fachangzurueckmitmeldg(meldg6,1,
0,"");okay:=FALSE ;rueck:=TRUE ;infeld(eingbldschindex);FI END PROC pruefjgst
;PROC pruefdbfd(TEXT CONST objekt,katalog):IF pos(katalog,trenner+objekt+
trenner)<1THEN istfehler:=TRUE ;IF katalog=fachkatalogTHEN
fachangzurueckmitmeldg(meldg11,0,i*4-1,"")ELSE fachangzurueckmitmeldg(meldg12
,0,i*4,"")FI FI .END PROC pruefdbfd;PROC prueftypfd(INT CONST feld):
standardpruefe(3,feld,minzahl,maxzahl,"",status);IF status>0THEN istfehler:=
TRUE ;infeld(feld)FI END PROC prueftypfd;PROC fachangstdvproc:gibeingschaus;
standardnproc.END PROC fachangstdvproc;PROC gibeingschaus:zeignr:=1;
standardstartproc(eingmaske);gibeingbldschaus;infeld(2);
standardfelderausgeben;infeld(letztepos).gibeingbldschaus:FOR iFROM 1UPTO 10
REP standardmaskenfeld(eingbldsch(i),i);IF eingbldsch(i)<>""THEN letztepos:=i
FI PER .END PROC gibeingschaus;PROC erfasstefelderausgeben(INT CONST znr):
ersteeinfuegezeile:=1;keinescn:=TRUE ;IF aktschhj="0"THEN holeakthjFI ;z1dbnr
:=znr;anzdbsaetze:=0;j:=1;IF znr=1THEN loeschedbinh;standardstartproc(
bearbmaske);standardkopfmaskeaktualisieren(maskenkopferg);standardmaskenfeld(
eingbldsch(jgstfeldnr),2);ELSE loeschefelder;FI ;putwert(fnrfangsj,geplschj);
putwert(fnrfanghj,geplschhj);putintwert(fnrfangjgst,int(eingbldsch(jgstfeldnr
)));putintwert(fnrfanglfdnr,znr);search(dnrfaecherangebot,FALSE );IF dbstatus
<>okTHEN gibleerenbildschirmELIF wert(fnrfangsj)=geplschjCAND intwert(
fnrfanglfdnr)=znrCAND intwert(fnrfangjgst)=int(eingbldsch(jgstfeldnr))CAND
wert(fnrfanghj)=geplschhjTHEN z1dbnr:=intwert(fnrfanglfdnr);k:=1;
startebildschirmblock(dnrfaecherangebot,bearbzl-1);bildschirmblock(PROC
gibbearbzeileaus,BOOL PROC (INT CONST )pruefung,i);neu:=FALSE ;ELSE
gibleerenbildschirmFI ;infeld(2);standardfelderausgeben;infeld(k*4-1).
gibleerenbildschirm:infeld(2);standardfelderausgeben;infeld(3);IF znr=1THEN
neu:=TRUE ;FI ;LEAVE erfasstefelderausgeben.loeschedbinh:FOR iFROM 1UPTO
bearbzlREP dbsatzbsnr(i):=0;dbinh(i).fach:="";dbinh(i).art:="";dbinh(i).wstd
:="";dbinh(i).anz:="";PER .loeschefelder:FOR iFROM 1UPTO bearbzlREP dbinh(i).
fach:="";dbinh(i).art:="";dbinh(i).wstd:="";dbinh(i).anz:="";PER ;
standardstartproc(bearbmaske);standardkopfmaskeaktualisieren(maskenkopferg);
standardmaskenfeld(eingbldsch(jgstfeldnr),2).END PROC erfasstefelderausgeben;
PROC gibbearbzeileaus:merkdbwerte;standardmaskenfeld(fa,k*4-1);
standardmaskenfeld(ar,k*4);standardmaskenfeld(ws,k*4+1);standardmaskenfeld(an
,k*4+2);IF k<bearbzlTHEN kINCR 1FI .merkdbwerte:fa:=wert(fnrfangfach);ar:=
wert(fnrfangart);ws:=wert(fnrfangwochenstd);an:=wert(fnrfanganzlv);dbinh(k).
fach:=fa;dbinh(k).art:=ar;dbinh(k).wstd:=ws;dbinh(k).anz:=an;anzdbsaetzeINCR
1;dbsatzbsnr(k):=k.END PROC gibbearbzeileaus;BOOL PROC pruefung(INT CONST i):
int(eingbldsch(jgstfeldnr))=intwert(fnrfangjgst)CAND geplschhj=wert(fnrfanghj
)CAND geplschj=wert(fnrfangsj)END PROC pruefung;PROC merkeeingsch:FOR iFROM 1
UPTO 10REP eingbldsch(i):=standardmaskenfeld(i)PER ;END PROC merkeeingsch;
PROC fachcat(BOOL VAR b):fachkatalogCAT wert(fnrffach)+trenner;END PROC
fachcat;PROC artcat(BOOL VAR b):IF wert(fnrschlsachgebiet)>artCOR dbstatus<>0
THEN b:=TRUE ELSE artkatalogCAT wert(fnrschlschluessel)+trennerFI END PROC
artcat;PROC merkebearbsch:anzbssaetze:=0;FOR iFROM 1UPTO letztebearbzeileREP
bearbbldsch(i).fach:=standardmaskenfeld((i-1)*4+3);bearbbldsch(i).art:=
standardmaskenfeld((i-1)*4+4);bearbbldsch(i).wstd:=standardmaskenfeld((i-1)*4
+5);bearbbldsch(i).anz:=standardmaskenfeld((i-1)*4+6);IF compress(bearbbldsch
(i).fach)<>""THEN anzbssaetzeINCR 1FI PER ;IF letztebearbzeile<bearbzlTHEN
FOR iFROM letztebearbzeile+1UPTO bearbzlREP bearbbldsch(i).fach:="";
bearbbldsch(i).art:="";bearbbldsch(i).wstd:="";bearbbldsch(i).anz:="";PER FI
END PROC merkebearbsch;PROC fachangzurueckmitmeldg(INT CONST meldg,
ruecksprung,feld,TEXT CONST markiert):standardmeldung(meldg,markiert);IF feld
>0THEN infeld(feld)FI ;IF ruecksprung>0THEN return(ruecksprung)FI END PROC
fachangzurueckmitmeldg;PROC fachanguebern(BOOL CONST b):IF bTHEN IF aktschhj=
"0"THEN holeakthjFI ;letztejgst:=1;IF f2THEN uebernaktkompELIF f3THEN
uebernaktpartELIF f6THEN ueberngeplpartFI ;aenderungsvermerksetzen(
kennzeichnunggeplant)ELSE standardmeldung(meldg4,"");infeld(2);return(2)FI
END PROC fachanguebern;PROC uebernaktkomp:putwert(fnrfangsj,aktschj);putwert(
fnrfanghj,aktschhj);putintwert(fnrfangjgst,0);putintwert(fnrfanglfdnr,1);
search(dnrfaecherangebot,FALSE );IF dbstatus<>okTHEN
meldungdatennichtuebernommenELIF wert(fnrfangsj)<>aktschjCAND wert(fnrfanghj)
<>aktschhjTHEN meldungdatennichtuebernommenELSE savetupel(dnrfaecherangebot,
tupel);loeschevorhandenesaetze(2);restoretupel(dnrfaecherangebot,tupel);
schreibtupelFI ;korrtupelindbpuffer;succ(dnrfaecherangebot);WHILE dbstatus=ok
CAND wert(fnrfanghj)=aktschhjCAND wert(fnrfangsj)=aktschjREP schreibtupel;
korrtupelindbpuffer;succ(dnrfaecherangebot);PER ;meldungdatenuebernommen.
meldungdatenuebernommen:return(2);standardmeldung(meldg3,"");LEAVE
uebernaktkomp.meldungdatennichtuebernommen:return(2);standardmeldung(meldg13,
"");LEAVE uebernaktkomp.schreibtupel:putwert(fnrfangsj,geplschj);putwert(
fnrfanghj,geplschhj);putintwert(fnrfangjgst,intwert(fnrfangjgst));putintwert(
fnrfanglfdnr,intwert(fnrfanglfdnr));putwert(fnrfangfach,wert(fnrfangfach));
putwert(fnrfangart,wert(fnrfangart));putintwert(fnrfangwochenstd,intwert(
fnrfangwochenstd));putintwert(fnrfanganzlv,intwert(fnrfanganzlv));IF intwert(
fnrfangjgst)<>letztejgstTHEN standardmeldung(meldg14,text(intwert(fnrfangjgst
))+"#");letztejgst:=intwert(fnrfangjgst);FI ;insert(dnrfaecherangebot).
korrtupelindbpuffer:putwert(fnrfangsj,aktschj);putwert(fnrfanghj,aktschhj).
END PROC uebernaktkomp;PROC uebernaktpart:putwert(fnrfangsj,aktschj);putwert(
fnrfanghj,aktschhj);putintwert(fnrfangjgst,int(eingbldsch(4)));putintwert(
fnrfanglfdnr,1);search(dnrfaecherangebot,FALSE );IF dbstatus<>okTHEN
meldungdatennichtuebernommenELIF intwert(fnrfangjgst)=int(eingbldsch(4))CAND
wert(fnrfanghj)=aktschhjCAND wert(fnrfangsj)=aktschjTHEN savetupel(
dnrfaecherangebot,tupel);loeschevorhandenesaetze(5);restoretupel(
dnrfaecherangebot,tupel);standardmeldung(meldg14,eingbldsch(5)+"#");
schreibtupelELSE meldungdatennichtuebernommenFI ;korrtupelindbpuffer;succ(
dnrfaecherangebot);WHILE dbstatus=okCAND intwert(fnrfangjgst)=int(eingbldsch(
4))CAND wert(fnrfanghj)=aktschhjCAND wert(fnrfangsj)=aktschjREP schreibtupel;
korrtupelindbpuffer;succ(dnrfaecherangebot);PER ;meldungdatenuebernommen.
meldungdatenuebernommen:return(2);standardmeldung(meldg3,"");LEAVE
uebernaktpart.meldungdatennichtuebernommen:return(2);standardmeldung(meldg13,
"");LEAVE uebernaktpart.schreibtupel:putwert(fnrfangsj,geplschj);putwert(
fnrfanghj,geplschhj);putintwert(fnrfangjgst,int(eingbldsch(5)));putintwert(
fnrfanglfdnr,intwert(fnrfanglfdnr));putwert(fnrfangfach,wert(fnrfangfach));
putwert(fnrfangart,wert(fnrfangart));putintwert(fnrfangwochenstd,intwert(
fnrfangwochenstd));putintwert(fnrfanganzlv,intwert(fnrfanganzlv));insert(
dnrfaecherangebot).korrtupelindbpuffer:putwert(fnrfangsj,aktschj);putwert(
fnrfanghj,aktschhj);putintwert(fnrfangjgst,int(eingbldsch(4))).END PROC
uebernaktpart;PROC ueberngeplpart:putwert(fnrfangsj,geplschj);putwert(
fnrfanghj,geplschhj);putintwert(fnrfangjgst,int(eingbldsch(7)));putintwert(
fnrfanglfdnr,1);search(dnrfaecherangebot,FALSE );IF dbstatus<>okTHEN
meldungdatennichtuebernommenELIF wert(fnrfangsj)<>geplschjCAND intwert(
fnrfangjgst)<>int(eingbldsch(7))CAND wert(fnrfanghj)<>geplschhjTHEN
meldungdatennichtuebernommenELSE savetupel(dnrfaecherangebot,tupel);
loeschevorhandenesaetze(8);restoretupel(dnrfaecherangebot,tupel);
standardmeldung(meldg14,eingbldsch(8)+"#");schreibtupelFI ;
korrtupelindbpuffer;succ(dnrfaecherangebot);WHILE dbstatus=okCAND intwert(
fnrfangjgst)=int(eingbldsch(7))CAND wert(fnrfanghj)=geplschhjCAND wert(
fnrfangsj)=geplschjREP schreibtupel;korrtupelindbpuffer;succ(
dnrfaecherangebot);PER ;meldungdatenuebernommen.meldungdatenuebernommen:
return(2);standardmeldung(meldg3,"");LEAVE ueberngeplpart.
meldungdatennichtuebernommen:return(2);standardmeldung(meldg13,"");LEAVE
ueberngeplpart.schreibtupel:putwert(fnrfangsj,geplschj);putwert(fnrfanghj,
geplschhj);putintwert(fnrfangjgst,int(eingbldsch(8)));putintwert(fnrfanglfdnr
,intwert(fnrfanglfdnr));putwert(fnrfangfach,wert(fnrfangfach));putwert(
fnrfangart,wert(fnrfangart));putintwert(fnrfangwochenstd,intwert(
fnrfangwochenstd));putintwert(fnrfanganzlv,intwert(fnrfanganzlv));insert(
dnrfaecherangebot).korrtupelindbpuffer:putintwert(fnrfangjgst,int(eingbldsch(
7))).END PROC ueberngeplpart;PROC loeschevorhandenesaetze(INT CONST feld):
inittupel(dnrfaecherangebot);IF feld=2THEN putwert(fnrfangsj,geplschj);
putwert(fnrfanghj,geplschhj);putintwert(fnrfangjgst,0);putintwert(
fnrfanglfdnr,1);search(dnrfaecherangebot,FALSE );IF dbstatus<>okTHEN
letztejgst:=1;LEAVE loeschevorhandenesaetzeELIF wert(fnrfangsj)=geplschjCAND
wert(fnrfanghj)=geplschhjTHEN standardmeldung(meldg15,text(intwert(
fnrfangjgst))+"#");letztejgst:=intwert(fnrfangjgst);WHILE wert(fnrfanghj)=
geplschhjCAND dbstatus=okCAND wert(fnrfangsj)=geplschjREP IF intwert(
fnrfangjgst)<>letztejgstTHEN standardmeldung(meldg15,text(intwert(fnrfangjgst
))+"#");letztejgst:=intwert(fnrfangjgst);FI ;delete(dnrfaecherangebot);succ(
dnrfaecherangebot)PER ;FI ELSE putwert(fnrfangsj,geplschj);putwert(fnrfanghj,
geplschhj);putintwert(fnrfangjgst,int(eingbldsch(feld)));putintwert(
fnrfanglfdnr,1);search(dnrfaecherangebot,FALSE );IF dbstatus<>okTHEN
letztejgst:=1;LEAVE loeschevorhandenesaetzeELIF intwert(fnrfangjgst)=int(
eingbldsch(feld))CAND wert(fnrfangsj)=geplschjCAND wert(fnrfanghj)=geplschhj
THEN standardmeldung(meldg15,eingbldsch(feld)+"#");WHILE intwert(fnrfangjgst)
=int(eingbldsch(feld))CAND wert(fnrfanghj)=geplschhjCAND wert(fnrfangsj)=
geplschjCAND dbstatus=0REP delete(dnrfaecherangebot);succ(dnrfaecherangebot)
PER ;ELSE letztejgst:=1;LEAVE loeschevorhandenesaetzeFI FI ;END PROC
loeschevorhandenesaetze;PROC fachangspeichern(BOOL CONST speichern):
stelleletztebearbzeilefest;merkebearbsch;bestimmenzaehler;IF speichernTHEN
standardmeldung(meldg18," ");fachleerurest;IF fachkatalog=trennerTHEN
holeaktdatenFI ;speicherdaten;IF NOT saetzeunveraendertTHEN
aenderungsvermerksetzen(kennzeichnunggeplant);FI ;standardmeldung(meldg7,"");
FI ;naechsterbildschirm;nzaehler:=0;.fachleerurest:FOR iFROM 1UPTO bearbzl
REP IF bearbbldsch(i).fach=""CAND (bearbbldsch(i).art<>""COR bearbbldsch(i).
wstd<>""COR bearbbldsch(i).anz<>"")THEN fachangzurueckmitmeldg(meldg8,1,(i*4-
1),"");LEAVE fachangspeichernFI PER .speicherdaten:pruefefachartkombination;
standardmeldung(meldg19," ");IF NOT neuCAND nzaehler>0CAND anzdbsaetze<
anzbssaetze+nzaehlerCAND letztebearbzeile>0THEN korrigieredbsaetzerueckwFI ;
behandlebildschirmsaetze;IF NOT neuCAND anzbssaetze<anzdbsaetze-nzaehlerCAND
letztebearbzeile>0THEN korrigieredbsaetzevorwFI .bestimmenzaehler:FOR iFROM
anzdbsaetzeDOWNTO 1REP IF dbsatzbsnr(i)<bearbzl+1THEN nzaehler:=anzdbsaetze-i
;LEAVE bestimmenzaehlerFI PER .pruefefachartkombination:dbzeiger:=1;
saetzeunveraendert:=TRUE ;FOR iFROM 1UPTO letztebearbzeileREP istfehler:=
FALSE ;IF compress(bearbbldsch(i).fach)<>""THEN IF neuTHEN pruefesatz;
pruefefachart(i,1);IF bldfa2THEN fachangzurueckmitmeldg(meldg9,1,i*4-1,"");
LEAVE fachangspeichernFI ;ELIF NOT neuCAND neuersatzTHEN pruefesatz;
pruefefachart(i,3);IF bldfa2THEN fachangzurueckmitmeldg(meldg9,1,i*4-1,"");
LEAVE fachangspeichernELIF dbfa2THEN pruefobvorhergeaendert;FI ;ELIF
geaendertersatzTHEN pruefesatz;IF fachartgeaendertCOR (nzaehler>0CAND i>
ersteeinfuegezeile)THEN pruefefachart(i,3);FI ;modifsatzgeprueft:=TRUE ;IF
bldfa2THEN fachangzurueckmitmeldg(meldg9,1,i*4-1,"");LEAVE fachangspeichern
ELIF dbfa2THEN pruefobvorhergeaendert;FI ;IF geaenderteraltersatzTHEN
dbzeigerINCR 1FI ELIF unveraendertersatzTHEN ueberpruefesonderfall;dbzeiger
INCR 1FI ;ELSE pruefobgeloeschtersatzFI PER .ueberpruefesonderfall:IF
nzaehler>0CAND i>ersteeinfuegezeileTHEN pruefefachart(i,3);modifsatzgeprueft
:=TRUE ;IF bldfa2THEN fachangzurueckmitmeldg(meldg9,1,i*4-1,"");LEAVE
fachangspeichernELIF dbfa2THEN pruefobvorhergeaendert;FI ;FI .
pruefobgeloeschtersatz:FOR kFROM i+1UPTO bearbzlREP IF bearbbldsch(k).fach<>
""THEN IF bearbbldsch(k).fach=dbinh(k).fachCAND bearbbldsch(k).art=dbinh(k).
artCAND bearbbldsch(k).wstd=dbinh(k).wstdCAND bearbbldsch(k).anz=dbinh(k).anz
THEN dbzeigerINCR 1;LEAVE pruefobgeloeschtersatzFI FI PER .
geaenderteraltersatz:FOR kFROM i+1UPTO bearbzlREP IF bearbbldsch(k).fach<>""
CAND dbzeiger<bearbzlTHEN IF bearbbldsch(k).fach=dbinh(dbzeiger).fachCAND
bearbbldsch(k).art=dbinh(dbzeiger).artCAND bearbbldsch(k).wstd=dbinh(dbzeiger
).wstdCAND bearbbldsch(k).anz=dbinh(dbzeiger).anzTHEN LEAVE
geaenderteraltersatzWITH FALSE ELSE LEAVE geaenderteraltersatzWITH TRUE FI
FI PER ;TRUE .stelleletztebearbzeilefest:letztebearbzeile:=0;FOR iFROM
bearbzlDOWNTO 1REP IF standardmaskenfeld((i-1)*4+3)<>""COR standardmaskenfeld
((i-1)*4+4)<>""THEN letztebearbzeile:=i;LEAVE stelleletztebearbzeilefestFI
PER .neuersatz:i+z1dbnr-1>=z1dbnr+anzdbsaetze-nzaehlerCAND (bearbbldsch(i).
fach<>dbinh(dbzeiger).fachCAND bearbbldsch(i).art<>dbinh(dbzeiger).artCAND
bearbbldsch(i).wstd<>dbinh(dbzeiger).wstdCAND bearbbldsch(i).anz<>dbinh(
dbzeiger).anz).geaendertersatz:bearbbldsch(i).fach<>dbinh(dbzeiger).fachCOR
bearbbldsch(i).art<>dbinh(dbzeiger).artCOR bearbbldsch(i).wstd<>dbinh(
dbzeiger).wstdCOR bearbbldsch(i).anz<>dbinh(dbzeiger).anz.fachartgeaendert:
bearbbldsch(i).fach<>dbinh(dbzeiger).fachCOR bearbbldsch(i).art<>dbinh(
dbzeiger).art.unveraendertersatz:bearbbldsch(i).fach=dbinh(dbzeiger).fachCOR
bearbbldsch(i).art=dbinh(dbzeiger).artCOR bearbbldsch(i).wstd=dbinh(dbzeiger)
.wstdCOR bearbbldsch(i).anz=dbinh(dbzeiger).anz.behandlebildschirmsaetze:
dbzeiger:=1;FOR bszeigerFROM 1UPTO letztebearbzeileREP infeld((bszeiger-1)*4+
3);IF compress(bearbbldsch(bszeiger).fach)<>""THEN IF NOT satzgeaendert(
dbzeiger,bszeiger)THEN dbzeigerINCR 1ELIF dbinh(dbzeiger).fach<>""CAND
dbsatzbsnr(dbzeiger)<bearbzl+1THEN aenderesatz;dbzeigerINCR 1ELSE
schreibesatz;FI FI ;PER ;IF dbzeiger<bearbzl+1CAND dbinh(dbzeiger).fach<>""
CAND anzdbsaetze>anzbssaetze+nzaehlerTHEN FOR iFROM 1UPTO zuloeschendesaetze
REP loeschesatz;dbzeigerINCR 1PER FI ;dbzeiger:=1;bszeiger:=1.
zuloeschendesaetze:anzdbsaetze-anzbssaetze-nzaehler.schreibesatz:IF
saetzeunveraendertTHEN saetzeunveraendert:=FALSE FI ;putwert(fnrfangsj,
geplschj);putwert(fnrfanghj,geplschhj);putintwert(fnrfangjgst,int(eingbldsch(
jgstfeldnr)));putintwert(fnrfanglfdnr,z1dbnr+dbzeiger-1);dbzeigerINCR 1;
putwert(fnrfangfach,bearbbldsch(bszeiger).fach);putwert(fnrfangart,
bearbbldsch(bszeiger).art);putintwert(fnrfangwochenstd,int(bearbbldsch(
bszeiger).wstd));putintwert(fnrfanganzlv,int(bearbbldsch(bszeiger).anz));
insert(dnrfaecherangebot);neu:=FALSE .aenderesatz:IF saetzeunveraendertTHEN
saetzeunveraendert:=FALSE FI ;putwert(fnrfangsj,geplschj);putwert(fnrfanghj,
geplschhj);putintwert(fnrfangjgst,int(eingbldsch(jgstfeldnr)));putintwert(
fnrfanglfdnr,dbzeiger+z1dbnr-1);search(dnrfaecherangebot,TRUE );putwert(
fnrfangfach,bearbbldsch(bszeiger).fach);putwert(fnrfangart,bearbbldsch(
bszeiger).art);putintwert(fnrfangwochenstd,int(bearbbldsch(bszeiger).wstd));
putintwert(fnrfanganzlv,int(bearbbldsch(bszeiger).anz));update(
dnrfaecherangebot).loeschesatz:IF saetzeunveraendertTHEN saetzeunveraendert:=
FALSE FI ;putwert(fnrfangsj,geplschj);putwert(fnrfanghj,geplschhj);putintwert
(fnrfangjgst,int(eingbldsch(jgstfeldnr)));putintwert(fnrfanglfdnr,dbzeiger+
z1dbnr-1);search(dnrfaecherangebot,TRUE );IF dbstatus<>okTHEN errorstop(
"Systemfehler, zu löschenden Satz nicht gefunden !")FI ;delete(
dnrfaecherangebot).korrigieredbsaetzevorw:IF saetzeunveraendertTHEN
saetzeunveraendert:=FALSE FI ;suchedbsatz(geplschj,geplschhj,int(eingbldsch(
jgstfeldnr)),bearbbldsch(letztebearbzeile).fach,bearbbldsch(letztebearbzeile)
.art,bearbbldsch(letztebearbzeile).wstd,bearbbldsch(letztebearbzeile).anz);
REP succ(dnrfaecherangebot);IF dbstatus=okCAND intwert(fnrfangjgst)=int(
eingbldsch(jgstfeldnr))CAND wert(fnrfanghj)=geplschhjCAND wert(fnrfangsj)=
geplschjTHEN putintwert(fnrfanglfdnr,intwert(fnrfanglfdnr)-zuloeschendesaetze
);update(dnrfaecherangebot);ELSE LEAVE korrigieredbsaetzevorwFI UNTIL intwert
(fnrfangjgst)<>int(eingbldsch(jgstfeldnr))PER .korrigieredbsaetzerueckw:IF
saetzeunveraendertTHEN saetzeunveraendert:=FALSE FI ;putwert(fnrfangsj,
geplschj);putwert(fnrfanghj,geplschhj);putintwert(fnrfangjgst,int(eingbldsch(
jgstfeldnr)));putintwert(fnrfanglfdnr,maxint);search(dnrfaecherangebot,FALSE
);REP pred(dnrfaecherangebot);IF intwert(fnrfangjgst)=int(eingbldsch(
jgstfeldnr))CAND wert(fnrfanghj)=geplschhjCAND nichtbssatzCAND wert(fnrfangsj
)=geplschjTHEN putintwert(fnrfanglfdnr,intwert(fnrfanglfdnr)+anzbssaetze-
anzdbsaetze+nzaehler);update(dnrfaecherangebot);ELSE LEAVE
korrigieredbsaetzerueckwFI PER .nichtbssatz:intwert(fnrfanglfdnr)>z1dbnr+
anzdbsaetze-1-nzaehler.naechsterbildschirm:j:=1;IF speichernTHEN IF
anzbssaetze=bearbzlCOR anzdbsaetze=bearbzlCOR nzaehler>0THEN zeignrINCR
anzbssaetze;erfasstefelderausgeben(zeignr);return(1);ELSE zeignr:=1;enter(2);
FI ELSE IF anzdbsaetze<bearbzlCAND nzaehler=0THEN zeignr:=1;enter(2);ELSE
zeignrINCR anzdbsaetze-nzaehler;erfasstefelderausgeben(zeignr);return(1);FI
FI .pruefobvorhergeaendert:IF intwert(fnrfanglfdnr)<z1dbnrCOR intwert(
fnrfanglfdnr)>z1dbnr+anzdbsaetze-1-nzaehlerTHEN fachangzurueckmitmeldg(meldg9
,1,i*4-1,"");LEAVE fachangspeichernFI .pruefesatz:pruefdbfd(bearbbldsch(i).
fach,fachkatalog);raus;pruefdbfd(bearbbldsch(i).art,artkatalog);raus;IF
bearbbldsch(i).wstd<>""THEN prueftypfd(i*4+1);raus;FI ;IF bearbbldsch(i).anz
<>""THEN prueftypfd(i*4+2);rausFI .raus:IF istfehlerTHEN return(1);LEAVE
fachangspeichernFI .END PROC fachangspeichern;PROC suchedbsatz(TEXT CONST
supsj,supshj,INT CONST supjgst,TEXT CONST fach,art,wstd,anz):putwert(
fnrfangsj,supsj);putwert(fnrfanghj,supshj);putintwert(fnrfangjgst,supjgst);
putintwert(fnrfanglfdnr,1);search(dnrfaecherangebot,FALSE );IF NOT (dbstatus=
okCAND wert(fnrfanghj)=supshjCAND intwert(fnrfangjgst)=supjgstCAND wert(
fnrfangsj)=supsjCAND wert(fnrfangfach)=fachCAND wert(fnrfangart)=artCAND
intwert(fnrfangwochenstd)=int(wstd)CAND intwert(fnrfanganzlv)=int(anz))THEN
REP succ(dnrfaecherangebot);IF dbstatus=okCAND wert(fnrfanghj)=supshjCAND
intwert(fnrfangjgst)=supjgstCAND wert(fnrfangsj)=supsjCAND wert(fnrfangfach)=
fachCAND wert(fnrfangart)=artCAND intwert(fnrfangwochenstd)=int(wstd)CAND
intwert(fnrfanganzlv)=int(anz)THEN LEAVE suchedbsatzFI UNTIL dbstatus<>okPER
FI .END PROC suchedbsatz;PROC pruefefachart(INT CONST i,p):IF neuTHEN
pruefbldschELSE pruefbldsch;pruefdbFI .pruefbldsch:bldfa2:=FALSE ;FOR jFROM 1
UPTO i-1REP IF j<anzdbsaetze+1THEN IF NOT neuCAND NOT (satzgeaendert(j,j)
CAND modifsatzgeprueft)THEN vergleichesaetzeFI FI PER ;FOR jFROM i+1UPTO
letztebearbzeileREP IF bearbbldsch(i).fach=bearbbldsch(j).fachCAND
bearbbldsch(i).art=bearbbldsch(j).artTHEN bldfa2:=TRUE ;LEAVE pruefefachart
FI PER .vergleichesaetze:IF bearbbldsch(i).fach=bearbbldsch(j).fachCAND
bearbbldsch(i).art=bearbbldsch(j).artTHEN bldfa2:=TRUE ;LEAVE pruefefachart
FI .pruefdb:dbfa2:=FALSE ;putwert(fnrfangsj,geplschj);putwert(fnrfanghj,
geplschhj);putwert(fnrfangfach,bearbbldsch(i).fach);putintwert(fnrfangjgst,
int(eingbldsch(jgstfeldnr)));putwert(fnrfangart,bearbbldsch(i).art);
putintwert(fnrfanglfdnr,1);search(ixfangsjhjfach,TRUE );IF dbstatus=okCAND
wert(fnrfangart)=bearbbldsch(i).artCAND intwert(fnrfangjgst)=int(eingbldsch(
jgstfeldnr))THEN IF p=1THEN dbfa2:=TRUE ;LEAVE pruefefachartELIF p=3THEN IF
intwert(fnrfanglfdnr)<>z1dbnr+i-1THEN dbfa2:=TRUE ;LEAVE pruefefachartELIF
nzaehler>0CAND i>ersteeinfuegezeileTHEN dbfa2:=TRUE ;LEAVE pruefefachartFI
FI ELSE REP pruefnachfolger;UNTIL nachfolgerfalschPER FI .nachfolgerfalsch:
dbstatus<>okCOR wert(fnrfangfach)<>bearbbldsch(i).fachCOR wert(fnrfangsj)<>
geplschjCOR wert(fnrfanghj)<>geplschhjCOR intwert(fnrfangjgst)>int(eingbldsch
(jgstfeldnr)).pruefnachfolger:succ(ixfangsjhjfach);IF dbstatus=okCAND wert(
fnrfanghj)=geplschhjCAND intwert(fnrfangjgst)=int(eingbldsch(jgstfeldnr))
CAND wert(fnrfangfach)=bearbbldsch(i).fachCAND wert(fnrfangart)=bearbbldsch(i
).artCAND wert(fnrfangsj)=geplschjTHEN IF p=1THEN dbfa2:=TRUE ;LEAVE
pruefefachartELIF p=3THEN IF intwert(fnrfanglfdnr)<>z1dbnr+i-1THEN dbfa2:=
TRUE ;LEAVE pruefefachartELIF nzaehler>0CAND i>ersteeinfuegezeileTHEN dbfa2:=
TRUE ;LEAVE pruefefachartFI FI FI .END PROC pruefefachart;BOOL PROC
satzgeaendert(INT CONST dbnr,bsnr):NOT (dbinh(dbnr).fach=bearbbldsch(bsnr).
fachCAND dbinh(dbnr).art=bearbbldsch(bsnr).artCAND dbinh(dbnr).wstd=
bearbbldsch(bsnr).wstdCAND dbinh(dbnr).anz=bearbbldsch(bsnr).anz)END PROC
satzgeaendert;PROC fachangmodbldsch(INT CONST iproc):SELECT iprocOF CASE 1:
zeileneinfuegenCASE 2:zeileloeschenEND SELECT .zeileneinfuegen:aktzeile:=
bearbfeldzuzeile(infeld);IF keinescnTHEN ersteeinfuegezeile:=aktzeile;
keinescn:=FALSE FI ;IF aktzeile=bearbzlTHEN fachangzurueckmitmeldg(meldg16,1,
infeld," ");LEAVE zeileneinfuegenFI ;infeld((aktzeile+1)*4-1);FOR iFROM
bearbzl-1DOWNTO aktzeile+1REP standardmaskenfeld(standardmaskenfeld(i*4-1),(i
+1)*4-1);standardmaskenfeld(standardmaskenfeld(i*4),(i+1)*4);
standardmaskenfeld(standardmaskenfeld(i*4+1),(i+1)*4+1);standardmaskenfeld(
standardmaskenfeld(i*4+2),(i+1)*4+2);PER ;standardmaskenfeld("",(aktzeile+1)*
4-1);standardmaskenfeld("",(aktzeile+1)*4);standardmaskenfeld("",(aktzeile+1)
*4+1);standardmaskenfeld("",(aktzeile+1)*4+2);infeld((aktzeile+1)*4-1);
standardfelderausgeben;FOR iFROM 1UPTO anzdbsaetzeREP IF dbsatzbsnr(i)>
aktzeileTHEN dbsatzbsnr(i)INCR 1;FI PER ;return(1).zeileloeschen:loeschzeile(
bearbfeldzuzeile(infeld)).END PROC fachangmodbldsch;INT PROC bearbfeldzuzeile
(INT CONST feldnr):(feldnr+1)DIV 4END PROC bearbfeldzuzeile;PROC loeschzeile(
INT CONST zeilennr):INT VAR z:=zeilennr*4;infeld(z-1);standardmaskenfeld("",z
-1);standardmaskenfeld("",z);standardmaskenfeld("",z+1);standardmaskenfeld(""
,z+2);standardfelderausgeben;infeld(z-1);return(1)END PROC loeschzeile;
initrows;END PACKET planefaecherangebot;
|