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 gewhj0THEN 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""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=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