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
|
PACKET kursdatenueberschnittstelleimportierenDEFINES
kursdatenschnittstelleimportanfang,
kursdatenschnittstelleimportaufbereitenfrage,
kursdatenschnittstelleimportaufbereiten,
kursdatenschnittstelleimportloescheundreturn,
kursdatenschnittstelleimportarchiv:LET eingangsmaske=
"ms kurswahldaten importieren",schuljahr="Schuljahr",halbjahr="Schulhalbjahr"
,kuwa2sperre="Kurswahl-2 ",filemodus="file ibm",listenname=
"Liste der Dateien auf der Diskette:",protname="Protokoll zur Übernahme",
schulname="Schulname",schulort="Schulort",leerzeile=" ",ueberschrift1=
"Protokoll zur Übernahme von Kurswahldaten aus Standardschnittstelle der",
ueberschrift2a="Jgst. ",ueberschrift2b=" für das Halbjahr ",ueberschrift2c=
" (Schuljahr ",unterschrift=
"-----------------------------------------------------------------------",
fehlerfall1="Fehler, Schüler nicht in akt. Jgst. : ",fehlerfall2=
"Warnung, neuer Kurs : ",fehlerfall3a=
"Fehler, Planblock nicht übernommen : ",fehlerfall3b=
" Nicht übernommene Daten : ",fehlerfall3c=
" ",fehlerfall4a=
"Fehler, unbekannter Kurs : ",fehlerfall4b=
" in Kurswahl von : ",trenner="�",dos="DOS",
eingangdateiname=2,kurslaengebr=6,kurslaengewk=7,kursendebr=5,kursendewk=6,
kzart="A",kzalle="A",kzplbl="P",kzstd="S",suffixfa=".FA",suffixwk=".WK",
suffixbr=".BR",suffixzi=".ZI",meldungkeineschueler=423,meldunggewhjunzul=405,
meldunggewsjunzul=127,meldunggewjgstunzul=404,meldungparallelanw=425,
meldungbearbwird=352,meldungwarten=69,meldungpraezisieren=129,
meldungserverfehler=416,meldungdatenuebernehmen=433,meldungdatenirrelevant=
432,meldungnamefalsch=323,meldungrausreichen=343,meldungnameunbek=351;INT
VAR i;TEXT VAR t;INT VAR fstat,aktfeld,ermwstd,kurspos,aktpos,aktzeile;TEXT
VAR aktdateiname:="schulis",gewjgst,gewhj,aktjgst,geplsj,geplhj,gewsj,aktsj:=
"0000",akthj,neuewahldaten,aktfake,dateieintrag,aktkurs,neuekurse:=trenner,
fach,kennung,behandeltekurse:=trenner,weitererblock;BOOL VAR archivfehler:=
FALSE ,sperreok:=TRUE ,aktodergeplhj:=FALSE ;THESAURUS VAR thes;FILE VAR dsfa
,dswk,dsbr,dszi,prot,g;PROC kursdatenschnittstelleimportanfang:
standardstartproc(eingangsmaske);infeld(2);standardmaskenfeld(aktdateiname,
eingangdateiname);standardfelderausgeben;standardnproc.END PROC
kursdatenschnittstelleimportanfang;PROC
kursdatenschnittstelleimportaufbereitenfrage:standardmeldung(meldungwarten,""
);fstat:=0;pruefdateiname;holedateivomarchiv;holedatenfuerabfrage.
holedatenfuerabfrage:toline(dszi,1);readrecord(dszi,dateieintrag);gewsj:=text
(dateieintrag,4);i:=int(gewsj);IF NOT lastconversionokTHEN
fehlermeldungsjunzulaessigFI ;gewhj:=dateieintragSUB 7;IF gewhj<>"1"CAND
gewhj<>"2"THEN fehlermeldunggewhjunzulaessigFI ;gewjgst:=subtext(dateieintrag
,5,6);IF gewjgst<>"10"CAND gewjgst<>"11"CAND gewjgst<>"12"CAND gewjgst<>"13"
THEN fehlermeldunggewjgstunzulaessigFI ;IF aktsj="0000"THEN aktsj:=
schulkenndatum(schuljahr);akthj:=schulkenndatum(halbjahr);geplhj:=akthj;
geplsj:=aktsj;geplanteshjundsjberechnen(geplhj,geplsj)FI ;IF gewsj=aktsjCAND
gewhj=akthjTHEN aktodergeplhj:=TRUE ;aktjgst:=gewjgstELIF gewsj=aktsjCAND
gewhj<akthjTHEN fehlermeldungdatennichtrelevantELIF gewsj<aktsjTHEN
fehlermeldungdatennichtrelevantELSE IF gewsj=geplsjCAND gewhj=geplhjTHEN
aktodergeplhj:=TRUE ELSE aktodergeplhj:=FALSE FI ;aktjgst:=text(int(gewjgst)-
(int(text(gewsj,2))-int(text(aktsj,2))))FI ;standardmeldung(
meldungdatenuebernehmen,aktjgst+"#"+gewjgst+"."+gewhj+"#");standardnproc.
fehlermeldungdatennichtrelevant:meldungausgeben(meldungdatenirrelevant,
eingangdateiname,1);LEAVE kursdatenschnittstelleimportaufbereitenfrage.
fehlermeldungsjunzulaessig:meldungausgeben(meldunggewsjunzul,eingangdateiname
,1);LEAVE kursdatenschnittstelleimportaufbereitenfrage.
fehlermeldunggewhjunzulaessig:meldungausgeben(meldunggewhjunzul,
eingangdateiname,1);LEAVE kursdatenschnittstelleimportaufbereitenfrage.
fehlermeldunggewjgstunzulaessig:meldungausgeben(meldunggewjgstunzul,
eingangdateiname,1);LEAVE kursdatenschnittstelleimportaufbereitenfrage.
pruefdateiname:aktdateiname:=standardmaskenfeld(eingangdateiname);IF
aktdateiname=""THEN fehlermeldungfeldfuellenELIF falschercode(aktdateiname)
THEN fehlermeldungnamefalsch(TRUE )FI .holedateivomarchiv:archivanmelden;IF
archivfehlerTHEN LEAVE kursdatenschnittstelleimportaufbereitenfrageFI ;
disablestop;forget(aktdateiname+suffixfa,quiet);fetch(aktdateiname+suffixfa,/
dos);IF iserrorTHEN abbruchnachfehler(1);LEAVE
kursdatenschnittstelleimportaufbereitenfrageFI ;dsfa:=sequentialfile(modify,
old(aktdateiname+suffixfa));forget(aktdateiname+suffixwk,quiet);fetch(
aktdateiname+suffixwk,/dos);IF iserrorTHEN abbruchnachfehler(1);LEAVE
kursdatenschnittstelleimportaufbereitenfrageFI ;dswk:=sequentialfile(modify,
old(aktdateiname+suffixwk));forget(aktdateiname+suffixbr,quiet);fetch(
aktdateiname+suffixbr,/dos);IF iserrorTHEN abbruchnachfehler(1);LEAVE
kursdatenschnittstelleimportaufbereitenfrageFI ;dsbr:=sequentialfile(modify,
old(aktdateiname+suffixbr));forget(aktdateiname+suffixzi,quiet);fetch(
aktdateiname+suffixzi,/dos);IF iserrorTHEN abbruchnachfehler(1);LEAVE
kursdatenschnittstelleimportaufbereitenfrageFI ;dszi:=sequentialfile(modify,
old(aktdateiname+suffixzi));enablestop.END PROC
kursdatenschnittstelleimportaufbereitenfrage;PROC
kursdatenschnittstelleimportaufbereiten:standardmeldung(meldungwarten,"");
kurswahlinitialisieren(aktjgst,gewjgst,gewhj,kzalle,gewsj);kurswahlbasisholen
(fstat);IF fstat<>0THEN meldungausgeben(meldungserverfehler,eingangdateiname,
1);LEAVE kursdatenschnittstelleimportaufbereitenELIF letzterschueler<
ersterschuelerTHEN meldungausgeben(meldungkeineschueler,eingangdateiname,1);
LEAVE kursdatenschnittstelleimportaufbereitenFI ;kurswahlsperresetzen(
kuwa2sperre,sperreok);IF NOT sperreokTHEN meldungausgeben(meldungparallelanw,
eingangdateiname,1);LEAVE kursdatenschnittstelleimportaufbereitenFI ;
neuekurse:=trenner;behandeltekurse:=trenner;bereiteprotokollvor;
uebernehmebrdatei;uebernehmewkdatei;loeschemeldung;kurswahlsperrebeenden(
kuwa2sperre);kurswahlbasissichern;zeigedatei(protname,"vr").
kurswahlbasissichern:kurswahl0sichern(fstat);kurswahl1sichern(fstat);
kurswahl2sichern(fstat);IF fstat<>0THEN meldungausgeben(meldungserverfehler,
eingangdateiname,1);LEAVE kursdatenschnittstelleimportaufbereitenFI .
bereiteprotokollvor:forget(protname,quiet);prot:=sequentialfile(output,
protname);putline(prot,schulkenndatum(schulname));putline(prot,text(
schulkenndatum(schulort),65)+date);putline(prot,leerzeile);putline(prot,
ueberschrift1);putline(prot,ueberschrift2a+aktjgst+ueberschrift2b+gewjgst+"."
+gewhj+ueberschrift2c+text(gewsj,2)+"/"+subtext(gewsj,3)+"):");putline(prot,
unterschrift);putline(prot,leerzeile).uebernehmebrdatei:bereitek1dateivor;
toline(dsbr,1);col(dsbr,1);WHILE NOT eof(dsbr)REP readrecord(dsbr,
dateieintrag);IF compress(dateieintrag)<>""THEN pruefplanblockundkurse(text(
dateieintrag,3),subtext(dateieintrag,4))FI ;down(dsbr);col(dsbr,1)PER .
bereitek1dateivor:planbloeckeinitialisieren;FOR iFROM 1UPTO 22REP
planblockloeschen(text(i))PER .uebernehmewkdatei:toline(dswk,1);col(dswk,1);
WHILE NOT eof(dswk)REP readrecord(dswk,dateieintrag);pruefschueler(compress(
text(dateieintrag,30)),compress(subtext(dateieintrag,31,45)),subtext(
dateieintrag,46,53),subtext(dateieintrag,54));down(dswk);col(dswk,1)PER .END
PROC kursdatenschnittstelleimportaufbereiten;PROC pruefplanblockundkurse(
TEXT CONST block,kurse):INT VAR blockbez:=int(text(block,2)),laengekurse:=
length(kurse);standardmeldung(meldungbearbwird,"Planblock "+text(block,2)+"#"
);IF blockbez>0CAND blockbez<23THEN tragblockein;tragkurseeinELSE
fehlermeldungblockfalschFI .fehlermeldungblockfalsch:putline(prot,
fehlerfall3a+text(block,2));putline(prot,fehlerfall3b+text(kurse,42));IF
laengekurse>42THEN putline(prot,fehlerfall3c+subtext(kurse,43))FI .
tragblockein:planblockeintragen(text(block,2),text(int(blockSUB 3))).
tragkurseein:kurspos:=1;WHILE kurspos<laengekurseREP aktkurs:=subtext(kurse,
kurspos,kurspos+kursendebr);aktfake:=text(aktkurs,2)+text(subtext(aktkurs,5),
4);weitererblock:="";t:=kursdaten(aktfake,kzart);IF dbstatus=1CAND compress(
aktfake)<>""THEN ermittlewstd;tragkursein;
planbloeckezumkurseintragenmitevtlblockeintrag(aktfake,text(block,2),
weitererblock);behandeltekurseCAT aktfake+trennerELSE
evtlplanbloeckeaktualisierenFI ;kursposINCR kurslaengebrPER .ermittlewstd:IF
pos(neuekurse,trenner+aktfake+trenner)=0THEN aktzeile:=lineno(dsbr);ermwstd:=
int(blockSUB 3);toline(dsbr,aktzeile+1);col(dsbr,1);WHILE NOT eof(dsbr)REP
downety(dsbr,aktkurs);aktpos:=col(dsbr);IF NOT eof(dsbr)CAND ((aktpos-3)MOD 6
)=1THEN readrecord(dsbr,t);ermwstdINCR int(tSUB 3);weitererblock:=text(t,2);
down(dsbr);col(dsbr,1);neuekurseCAT aktfake+trenner;toline(dsbr,aktzeile);
LEAVE ermittlewstdELSE col(dsbr,aktpos+1)FI ;PER ;neuekurseCAT aktfake+
trenner;toline(dsbr,aktzeile)FI .evtlplanbloeckeaktualisieren:IF pos(
behandeltekurse,trenner+aktfake+trenner)=0CAND compress(aktfake)<>""THEN
aktzeile:=lineno(dsbr);toline(dsbr,aktzeile+1);col(dsbr,1);WHILE NOT eof(dsbr
)REP downety(dsbr,aktkurs);aktpos:=col(dsbr);IF NOT eof(dsbr)CAND ((aktpos-3)
MOD 6)=1THEN readrecord(dsbr,t);weitererblock:=text(t,2);behandeltekurseCAT
aktfake+trenner;toline(dsbr,aktzeile);
planbloeckezumkurseintragenmitevtlblockeintrag(aktfake,text(block,2),
weitererblock);LEAVE evtlplanbloeckeaktualisierenELSE col(dsbr,aktpos+1)FI ;
PER ;weitererblock:="";planbloeckezumkurseintragenmitevtlblockeintrag(aktfake
,text(block,2),weitererblock);behandeltekurseCAT aktfake+trenner;toline(dsbr,
aktzeile)FI .tragkursein:IF aktodergeplhjTHEN putline(prot,fehlerfall2+text(
aktkurs,2)+" "+text(subtext(aktkurs,5),4)+", Art "+subtext(aktkurs,3,4))FI ;
kurseintragen(text(aktkurs,2),text(subtext(aktkurs,5),4),text(ermwstd),
subtext(aktkurs,3,4)).END PROC pruefplanblockundkurse;PROC
planbloeckezumkurseintragenmitevtlblockeintrag(TEXT CONST kurs,block1,block2)
:TEXT VAR t:=planblockdaten(block1,kzstd);IF dbstatus=1THEN
planblockeintragen(block1,"0")FI ;t:=planblockdaten(block2,kzstd);IF dbstatus
=1THEN planblockeintragen(block2,"0")FI ;planbloeckezumkurseintragen(kurs,
block1,block2)END PROC planbloeckezumkurseintragenmitevtlblockeintrag;PROC
pruefschueler(TEXT CONST famname,rufname,gebdatum,wahldaten):standardmeldung(
meldungbearbwird,famname+", "+rufname+"#");t:=wahldatenzumschueler(famname,
rufname,gebdatum,kzart);IF dbstatus=1THEN fehlermeldungunbekschuelerELSE
tragwahldateneinFI .fehlermeldungunbekschueler:putline(prot,fehlerfall1+text(
famname+", "+rufname+", "+gebdatum,40)).tragwahldatenein:
schuelerwahleintragen(famname,rufname,gebdatum,aufbereitetewahldaten(famname,
rufname,gebdatum,wahldaten)).END PROC pruefschueler;TEXT PROC
aufbereitetewahldaten(TEXT CONST famname,rufname,gebdatum,altewahldaten):INT
VAR wahllaenge:=length(altewahldaten);TEXT VAR planbloecke;kurspos:=1;
neuewahldaten:="";WHILE kurspos<wahllaengeREP aktkurs:=subtext(altewahldaten,
kurspos,kurspos+kursendewk);fach:=text(aktkurs,2);kennung:=subtext(aktkurs,6)
+" ";planbloecke:=kursdaten(fach+kennung,kzplbl);IF compress(planbloecke)=""
THEN putline(prot,fehlerfall4a+fach+" "+kennung+", Art "+subtext(aktkurs,3,4)
);putline(prot,fehlerfall4b+text(famname+", "+rufname+", "+gebdatum,40))ELSE
ergaenzewahldatenFI ;kursposINCR kurslaengewkPER ;neuewahldaten.
ergaenzewahldaten:neuewahldatenCAT (aktkursSUB 5);neuewahldatenCAT subtext(
aktkurs,3,4);neuewahldatenCAT fach;neuewahldatenCAT kennung;neuewahldatenCAT
planbloecke.END PROC aufbereitetewahldaten;BOOL PROC falschercode(TEXT CONST
t):INT VAR zeichencode;FOR iFROM 1UPTO LENGTH t-3REP zeichencode:=code(tSUB i
);IF NOT ((zeichencode>=48AND zeichencode<=57)OR (zeichencode>=65AND
zeichencode<=90)OR (zeichencode>=97AND zeichencode<=122))THEN LEAVE
falschercodeWITH TRUE FI PER ;FALSE END PROC falschercode;PROC
meldungausgeben(INT CONST meldung,gewfeld,gewruecksprung):fstat:=1;
standardmeldung(meldung,"");infeld(gewfeld);return(gewruecksprung)END PROC
meldungausgeben;PROC archivanmelden:aktfeld:=infeld;archivfehler:=FALSE ;
commanddialogue(FALSE );disablestop;reserve(filemodus,/dos);IF iserrorTHEN
archivfehler:=TRUE ;abbruchnachfehler(1);ELSE enablestopFI .END PROC
archivanmelden;PROC kursdatenschnittstelleimportarchiv:aktfeld:=infeld;
archivanmelden;IF archivfehlerTHEN LEAVE kursdatenschnittstelleimportarchiv
FI ;archivlisten;infeld(aktfeld).archivlisten:standardmeldung(meldungwarten,
"");disablestop;g:=sequentialfile(output,listenname);thes:=ALL /dos;IF
iserrorTHEN abbruchnachfehler(1);ELSE thesaurusaufbereiten;enablestop;
zeigedatei(listenname,"vr");release(/dos)FI .thesaurusaufbereiten:t:=" ";i:=0
;REP get(thes,t,i);putline(g,t)UNTIL t=""PER .END PROC
kursdatenschnittstelleimportarchiv;PROC abbruchnachfehler(INT CONST schritte)
:standardmeldung(meldungrausreichen,"Fehler: "+errormessage+" !#");clearerror
;return(schritte);infeld(aktfeld);release(/dos);commanddialogue(TRUE );
enablestopEND PROC abbruchnachfehler;PROC fehlermeldungdateifehlt:fstat:=1;
standardmeldung(meldungnameunbek,aktdateiname+".FA (-WK,-BR,-ZI)#");infeld(
eingangdateiname);return(1).END PROC fehlermeldungdateifehlt;PROC
fehlermeldungfeldfuellen:meldungausgeben(meldungpraezisieren,eingangdateiname
,1).END PROC fehlermeldungfeldfuellen;PROC fehlermeldungnamefalsch(BOOL
CONST mitfalschemzeichen):IF mitfalschemzeichenTHEN fstat:=1;standardmeldung(
meldungnamefalsch,subtext(aktdateiname,i,i)+"#"+aktdateiname+"#");infeld(
eingangdateiname);return(1)ELSE meldungausgeben(meldungnamefalsch,
eingangdateiname,1)FI END PROC fehlermeldungnamefalsch;PROC
kursdatenschnittstelleimportloescheundreturn:forget(listenname,quiet);forget(
protname,quiet);loeschemeldung;return(3)END PROC
kursdatenschnittstelleimportloescheundreturn;PROC loeschemeldung:aktfeld:=
infeld;infeld(1);standardfelderausgeben;infeld(aktfeld)END PROC
loeschemeldung;END PACKET kursdatenueberschnittstelleimportieren
|