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
|
PACKET datenbasisDEFINES statdatenbasisstartproc,statdatenbasisnproc,
statdatenbasisaufbereiten,statdatenbasisentfernen,
statdatenbasisentfernenmeldung,statdatenbasisnichtentfernen,
statdatenbasisermitteln,statdatenbasisvorhanden:LET datenbasisname=
"STATISTIK.basis",statistikserver="statistik server",maskedatenbasis=
"mst datenbasis bereitstellen",niltext="",meldungzusatz="+",meldungstichtag=
"zum Stichtag ",meldungnichtda="nicht ",mnichts="+ +",
mstart="�����������",mkeinedaten=68,mentfernenfrage=470,mkeinebasis=471,
mbasisentfernt=472,mbasisnichtentfernt=473,maufbereitung=474,mabbruch=475,
mbasisfertig=476,fstatnr=2,fcursor=3,filesize=4000,tupelstackgroesse=5;FILE
VAR basis;BOOL VAR datenbasisda;TEXT VAR datenbasisstichtag;PROC
statdatenbasisstartproc:enablestop;standardstartproc(maskedatenbasis);
statdatenbasisermitteln(fstatnr);statdatenbasisnproc;END PROC
statdatenbasisstartproc;PROC statdatenbasisnproc:infeld(fstatnr);
standardfelderausgeben;infeld(fcursor);standardnproc;END PROC
statdatenbasisnproc;PROC statdatenbasisermitteln(INT CONST feldnr):forget(
datenbasisname,quiet);datenbasisda:=existstask(statistikserver)CAND exists(
datenbasisname,task(statistikserver));IF datenbasisdaTHEN fetch(
datenbasisname,task(statistikserver));basis:=sequentialfile(modify,
datenbasisname);tofirstrecord(basis);readrecord(basis,datenbasisstichtag);
datenbasisstichtag:=meldungstichtag+datenbasisstichtag;forget(datenbasisname,
quiet);ELSE datenbasisstichtag:=meldungnichtdaFI ;standardmaskenfeld(
datenbasisstichtag,feldnr);END PROC statdatenbasisermitteln;BOOL PROC
statdatenbasisvorhanden:datenbasisdaEND PROC statdatenbasisvorhanden;PROC
statdatenbasisentfernenmeldung:IF datenbasisdaTHEN standardmeldung(
mentfernenfrage,niltext);infeld(fcursor);ELSE standardmeldung(mkeinebasis,
niltext);leave(1);FI END PROC statdatenbasisentfernenmeldung;PROC
statdatenbasisentfernen:datenbasisloeschen;standardmeldung(mbasisentfernt,
datenbasisstichtag+meldungzusatz);statdatenbasisermitteln(fstatnr);leave(2);
END PROC statdatenbasisentfernen;PROC statdatenbasisnichtentfernen:
standardmeldung(mbasisnichtentfernt,datenbasisstichtag+meldungzusatz);leave(2
);END PROC statdatenbasisnichtentfernen;PROC datenbasisloeschen:BOOL CONST
comdia:=commanddialogue;IF datenbasisdaCAND exists(datenbasisname,task(
statistikserver))THEN commanddialogue(FALSE );erase(datenbasisname,task(
statistikserver));commanddialogue(comdia);FI ;END PROC datenbasisloeschen;
PROC statdatenbasisaufbereiten:BOOL VAR schuelerda,abbruch:=FALSE ;INT VAR
anzahltupel:=tupelstackgroesse,bearbeitetetupel:=tupelstackgroesse,
schuelerzahl:=0;IF datenbasisdaTHEN standardmeldung(mbasisentfernt,
datenbasisstichtag+meldungzusatz);ELSE standardmeldung(maufbereitung,date+
meldungzusatz);FI ;schuelerlesenvorbereiten;IF schuelerdaTHEN
datenbasisaufbereiten;FI ;IF NOT schuelerdaTHEN standardmeldung(mkeinedaten,
niltext);ELIF abbruchTHEN standardmeldung(mabbruch,niltext);forget(
datenbasisname,quiet);ELSE datenbasisloeschen;datenbasissichern;
statdatenbasisermitteln(fstatnr);standardmeldung(mbasisfertig,niltext);FI ;
leave(1).datenbasisaufbereiten:forget(datenbasisname,quiet);basis:=
sequentialfile(output,datenbasisname);putline(basis,date);standardmeldung(
maufbereitung,date+meldungzusatz);out(mstart);REP putline(basis,
statdatenbasiszeile);schuelerzahlINCR 1;cout(schuelerzahl);naechsterschueler;
UNTIL bestandendePER .schuelerindex:ixsustatfamrufgeb.
schuelerlesenvorbereiten:inittupel(dnrdiffdaten);inittupel(dnrhalbjahresdaten
);inittupel(dnrschulen);inittupel(dnrschueler);parsenooffields(50);
systemdboff;search(schuelerindex,FALSE );schuelerda:=dbstatus=ok;
setzebestandende(NOT schuelerda).naechsterschueler:IF bearbeitetetupel=
anzahltupelTHEN IF anzahltupel<>tupelstackgroesseTHEN setzebestandende(TRUE )
;ELIF NOT abbruchgewuenschtTHEN einpaarschuelerholen;FI ;ELSE multisucc;
bearbeitetetupelINCR 1;FI .einpaarschuelerholen:anzahltupel:=
tupelstackgroesse;scanstatus(ok);multisucc(schuelerindex,anzahltupel);IF
anzahltupel>0THEN multisucc;bearbeitetetupel:=1;ELSE setzebestandende(TRUE )
FI .abbruchgewuenscht:abbruch:=lines(basis)>=filesize;abbruch.
datenbasissichern:save(datenbasisname,task(statistikserver)).END PROC
statdatenbasisaufbereiten;END PACKET datenbasis;
|