app/schulis/2.2.1/src/2.kursdaten importieren

Raw file
Back to index

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