PACKET lehrveranstaltungenbenennenDEFINES lehrveranstaltungenbenennenstart, lehrveranstaltungenuebernehmenstart,lehrveranstaltungenuebernehmen, bearbeitunglehrveranstaltungen,lehrveranstaltungenzeileeinfuegen, lehrveranstaltungenspeichern:LET maskeeingang= "ms lehrveranstalt benennen eingang";LET maskebearb= "ms lehrveranstalt benennen";LET fnrbearbeiten=2,fnrbearbaktsj=3, fnrbearbgeplsj=4,fnrbearbjgst=5,fnrbearbfach=6,fnrfachanguebernehmen=7, fnrfachangaktsj=8,fnrfachanggeplsj=9,fnrfachangjgst=10,fnrlehrveruebernehmen= 11,fnrlehrverjgst=12;LET feldanzmaskeeingang=12;ROW feldanzmaskeeingangTEXT VAR feldbs1;LET felderprozeile=9;LET ersteseingabefeld=3;LET erstestabellenfeld=2;LET incrfuerkennung=1,incrfuerlvart=2, incrfuerklassengranfang=3,incrfuerklassengrende=6,incrfuerwstd=7;LET meldnrdatenspeichern=50,meldnrungueltigeauswahl=56,meldnrkennungzulang=60, meldnrdatennichtspeichern=63,meldnrbittewarten=69,meldnrbitteangabegenauer= 129,meldnrungueltigeuebernahmejgst=146,meldnrfragedatenuebernehmen=300, meldnrdatenwerdenuebernommen=301,meldnrdatenwurdenuebernommen=302, meldnrdatenwurdennichtuebernommen=303,meldnrkeinfachzuanderenangaben=307, meldnrungueltigesfach=310,meldnrungueltigeart=311, meldnrletztezeilenichteinfuegen=314,meldnrkeinfaecherangebot=315, meldnruebernehmenderjgst=316,meldnrlehrveranstaltungloeschen=317, meldnrfalschetastezuankreuz=318,meldnrfalscheausfuellung=319, meldnrungueltigeklassengruppe=320,meldnrkeinelehrveranstaltungen=321, meldnrlehrveranstaltunggibtsschon=322,meldnrfehlerhaftejgst=305;LET kennzhell ="#";LET textschulj="Schuljahr",texthalbj="Schulhalbjahr",ersteshalbjahr="1", zweiteshalbjahr="2";LET wertaktuell="aktuell",wertgeplant="geplant";LET artbestand="c02 art lehrveranstaltung";BOOL VAR aktuelleshalbjahrzubearbeiten ;TEXT VAR gewschulj,gewhalbj,aktschulj:="",akthalbj:="";INT VAR gewjgst, startjgst,endejgst;TEXT VAR vgljgst:="",vglfach:="";INT VAR jgstdesletztensatzes:=0;LET fachlaenge=2;LET kennunglaenge=4;INT VAR zugriff; BOOL VAR eingangsmaskenfehler:=FALSE ;INT VAR pruefstatus:=0,letztecursorfnr :=fnrbearbeiten;INT VAR aktzeile;INT VAR ifnr,ijgst;LET trenner="�";TEXT VAR geprueftefaecher,gueltigeschuelergruppen:="",gueltigeklassengruppen:="", gueltigelvart:="";TEXT VAR pruefklasse;INT VAR pruefjgst,pruefbez;TEXT VAR sugruppen,sugruppejgst;INT VAR possugruppe,laengesugruppen;LET laengeeinersugruppe=6;LET blankzeichen=" ",trennstrich="/", textueberschriftanfang="Lehrveranstaltungen benennen für Halbjahr ";TEXT VAR ueberschrift;LET jgst0=0,jgst5=5,jgst10=10,jgst13=13;BOOL VAR gueltigejgst; BOOL VAR bearbeitungallerjgst;BOOL VAR leerenbszeigen;LET lvdateiname= "LV-Datei";FILE VAR lvdatei;TEXT VAR lvdateizeile;TEXT VAR nfschulj,nfhalbj, nfjgst,nffachkennung;INT VAR izeile,anzahlgezeigtezeilen, anzahleingegebenezeilen;LET zeilenanzahl=18;ROW zeilenanzahlSTRUCT (TEXT jgst ,TEXT fach,TEXT kennung,TEXT kopplung,TEXT art,TEXT klasse1,TEXT klasse2, TEXT klasse3,TEXT klasse4,TEXT wstd)VAR bszeile; initfelderdeseingangsbildschirms;initbszeilepuffer;PROC lehrveranstaltungenbenennenstart:standardstartproc(maskeeingang); wertedeseingangsbildschirmsholen;infeld(fnrbearbeiten);standardfelderausgeben ;infeld(letztecursorfnr);standardnprocEND PROC lehrveranstaltungenbenennenstart;PROC lehrveranstaltungenuebernehmenstart: BOOL VAR ausgangsdatenfehlen:=FALSE ;eingangsbehandlung(1);IF eingangsmaskenfehlerTHEN infeld(pruefstatus);return(1)ELSE wertedeseingangsbildschirmsmerken;schulhalbjahrbestimmen;IF jgstangabeleer THEN startjgst:=jgst0;endejgst:=jgst13ELSE startjgst:=int(vgljgst);endejgst:= startjgstFI ;IF standardmaskenfeld(fnrfachanguebernehmen)<>""THEN pruefendesfaecherangebots;IF ausgangsdatenfehlenTHEN standardmeldung( meldnrkeinfaecherangebot,"");return(1)ELSE standardmeldung( meldnrfragedatenuebernehmen,"");eingabefeldersperren(fnrfachanguebernehmen); standardnprocFI ELSE pruefenderlehrveranstaltungen;IF ausgangsdatenfehlen THEN standardmeldung(meldnrkeinelehrveranstaltungen,"");return(1)ELIF gewhalbj=ersteshalbjahrAND startjgst=jgst13THEN standardmeldung( meldnrungueltigeuebernahmejgst,"");infeld(fnrlehrverjgst);return(1)ELSE standardmeldung(meldnrfragedatenuebernehmen,"");eingabefeldersperren( fnrlehrveruebernehmen);standardnprocFI FI FI .pruefendesfaecherangebots: ausgangsdatenfehlen:=FALSE ;putwert(fnrfangsj,gewschulj);putwert(fnrfanghj, gewhalbj);putintwert(fnrfangjgst,startjgst);putintwert(fnrfanglfdnr,0);search (dnrfaecherangebot,FALSE );IF dbstatus<>okTHEN ausgangsdatenfehlen:=TRUE ELIF wert(fnrfanghj)<>gewhalbjCOR wert(fnrfangsj)<>gewschuljCOR intwert( fnrfangjgst)>endejgstTHEN ausgangsdatenfehlen:=TRUE FI . pruefenderlehrveranstaltungen:ausgangsdatenfehlen:=FALSE ;putwert(fnrlvsj, aktschulj);putwert(fnrlvhj,akthalbj);putintwert(fnrlvjgst,startjgst);putwert( fnrlvfachkennung,"");search(dnrlehrveranstaltungen,FALSE );IF dbstatus<>ok THEN ausgangsdatenfehlen:=TRUE ELIF wert(fnrlvhj)<>akthalbjCOR wert(fnrlvsj) <>aktschuljCOR intwert(fnrlvjgst)>endejgstTHEN ausgangsdatenfehlen:=TRUE FI . END PROC lehrveranstaltungenuebernehmenstart;PROC eingabefeldersperren(INT CONST fnrfreiesfeld):FOR ifnrFROM fnrbearbeitenUPTO feldanzmaskeeingangREP IF ifnr<>fnrfreiesfeldTHEN feldschutz(ifnr)FI PER ;infeld(fnrfreiesfeld)END PROC eingabefeldersperren;PROC eingabefelderfreigeben:FOR ifnrFROM fnrbearbeitenUPTO feldanzmaskeeingangREP feldfrei(ifnr)PER END PROC eingabefelderfreigeben;PROC lehrveranstaltungenuebernehmen(BOOL CONST uebernehmen):INT VAR letztejgst:=-1;IF uebernehmenTHEN standardmeldung( meldnrdatenwerdenuebernommen,"");IF standardmaskenfeld(fnrfachanguebernehmen) <>""THEN evtlvorhandenelehrveranstaltungenloeschen; neuelvausfaecherangebotschreibenELSE neuelvauslehrveranstaltungenschreibenFI ;evtlkurswahldatenbeimuebernehmenaktualisieren;IF aktuelleshalbjahrzubearbeitenTHEN aenderungsvermerksetzen(wertaktuell)ELSE aenderungsvermerksetzen(wertgeplant)FI ;standardmeldung( meldnrdatenwurdenuebernommen,"")ELSE standardmeldung( meldnrdatenwurdennichtuebernommen,"")FI ;eingabefelderfreigeben;return(2). evtlkurswahldatenbeimuebernehmenaktualisieren:IF aktuelleshalbjahrzubearbeitenOR gewhalbj=zweiteshalbjahrTHEN FOR gewjgstFROM startjgstUPTO endejgstREP IF gewjgst>jgst10THEN kurswahlserverlvaktualisieren (text(gewjgst),text(gewjgst),gewhalbj)FI ;PER ;ELSE FOR gewjgstFROM startjgst UPTO endejgstREP IF gewjgst>=jgst10THEN kurswahlserverlvaktualisieren(text( gewjgst),text(gewjgst+1),gewhalbj)FI ;PER ;FI . evtlvorhandenelehrveranstaltungenloeschen: sucheerstelehrveranstaltungzugewhalbj;WHILE lehrveranstaltungzuloeschenREP meldungzumloeschenbeijgstwechsel;loeschevorhandenelehrveranstaltung; suchenaechstelehrveranstaltungzugewhalbjPER . sucheerstelehrveranstaltungzugewhalbj:putwert(fnrlvsj,gewschulj);putwert( fnrlvhj,gewhalbj);putintwert(fnrlvjgst,startjgst);putwert(fnrlvfachkennung,"" );search(dnrlehrveranstaltungen,FALSE );letztejgst:=-1;. lehrveranstaltungzuloeschen:dbstatus=okCAND wert(fnrlvsj)=gewschuljCAND wert( fnrlvhj)=gewhalbjCAND intwert(fnrlvjgst)<=endejgst. loeschevorhandenelehrveranstaltung:delete(dnrlehrveranstaltungen). meldungzumloeschenbeijgstwechsel:IF intwert(fnrlvjgst)<>letztejgstTHEN letztejgst:=intwert(fnrlvjgst);standardmeldung( meldnrlehrveranstaltungloeschen,text(letztejgst)+kennzhell)FI . suchenaechstelehrveranstaltungzugewhalbj:succ(dnrlehrveranstaltungen). neuelvausfaecherangebotschreiben:letztejgst:=-1;REP lehrveranstaltungenzufaecherangebotschreiben; suchenaechstesfaecherangebotzugewhalbjUNTIL faecherangebotabgehandeltPER . lehrveranstaltungenzufaecherangebotschreiben:INT VAR satzanzahl:=intwert( fnrfanganzlv);INT VAR isatz; setzefestewerteausfaecherangebotfuerlehrveranstaltung; meldungzuruebernahmebeijgstwechsel;FOR isatzFROM 1UPTO satzanzahlREP setzevarwerteausfaecherangebotfuerlehrveranstaltung;insert( dnrlehrveranstaltungen)PER .meldungzuruebernahmebeijgstwechsel:IF intwert( fnrlvjgst)<>letztejgstTHEN letztejgst:=intwert(fnrlvjgst);standardmeldung( meldnruebernehmenderjgst,text(letztejgst)+kennzhell)FI . setzefestewerteausfaecherangebotfuerlehrveranstaltung:putwert(fnrlvsj, gewschulj);putwert(fnrlvhj,gewhalbj);putintwert(fnrlvjgst,intwert(fnrfangjgst ));putwert(fnrlvparaphe,"");putwert(fnrlvart,wert(fnrfangart));putintwert( fnrlvwochenstd,intwert(fnrfangwochenstd));putwert(fnrlvklgrp1,"");putwert( fnrlvklgrp2,"");putwert(fnrlvklgrp3,"");putwert(fnrlvklgrp4,"");putwert( fnrlvraumgrp1,"");putwert(fnrlvraumgrp2,"");. setzevarwerteausfaecherangebotfuerlehrveranstaltung:TEXT VAR lvkennung:=text( wert(fnrfangart),2)+textzweistellig(isatz);putwert(fnrlvfachkennung,text(wert (fnrfangfach),fachlaenge)+lvkennung);putwert(fnrlvkopplung,textzweistellig( intwert(fnrfangjgst))+textzweistellig(intwert(fnrfanglfdnr))+lvkennung);. suchenaechstesfaecherangebotzugewhalbj:succ(dnrfaecherangebot). faecherangebotabgehandelt:NOT (dbstatus=okCAND intwert(fnrfangjgst)<=endejgst CAND wert(fnrfangsj)=gewschuljCAND wert(fnrfanghj)=gewhalbj). neuelvauslehrveranstaltungenschreiben:lvsaetzezuaktuellenjgstindateischreiben ;evtlvorhandenelehrveranstaltungenloeschenvorbereiten; evtlvorhandenelehrveranstaltungenloeschen; lvsaetzeausdateizugeplantenjgstschreiben. lvsaetzezuaktuellenjgstindateischreiben:forget(lvdateiname,quiet);lvdatei:= sequentialfile(output,lvdateiname);standardmeldung(meldnrbittewarten,""); holegueltigelehrveranstaltungen. evtlvorhandenelehrveranstaltungenloeschenvorbereiten:IF gewhalbj= ersteshalbjahrAND NOT jgstangabeleerTHEN IF startjgst>=jgst5THEN startjgst INCR 1;endejgstINCR 1FI FI .lvsaetzeausdateizugeplantenjgstschreiben: letztejgst:=-1;lvdatei:=sequentialfile(input,lvdateiname);WHILE NOT eof( lvdatei)REP getline(lvdatei,lvdateizeile);restoretupel(dnrlehrveranstaltungen ,lvdateizeile);putwert(fnrlvhj,gewhalbj);IF gewhalbj=ersteshalbjahrTHEN putwert(fnrlvsj,gewschulj);ijgst:=intwert(fnrlvjgst);IF ijgst>0THEN putintwert(fnrlvjgst,ijgst+1);TEXT VAR bearbkopplung:=wert(fnrlvkopplung);IF int(subtext(bearbkopplung,1,2))=ijgstTHEN putwert(fnrlvkopplung, textzweistellig(ijgst+1)+subtext(bearbkopplung,3))FI ;FI ;FI ;IF intwert( fnrlvjgst)>jgst13THEN LEAVE lvsaetzeausdateizugeplantenjgstschreibenELSE meldungzuruebernahmebeijgstwechsel;insert(dnrlehrveranstaltungen)FI PER END PROC lehrveranstaltungenuebernehmen;PROC holegueltigelehrveranstaltungen: inittupel(dnrlehrveranstaltungen);putwert(fnrlvsj,aktschulj);putwert(fnrlvhj, akthalbj);putintwert(fnrlvjgst,startjgst);search(dnrlehrveranstaltungen, FALSE );statleseschleife(dnrlehrveranstaltungen,aktschulj,akthalbj,fnrlvsj, fnrlvhj,PROC lehrveranstaltungindateieinlesen)END PROC holegueltigelehrveranstaltungen;PROC lehrveranstaltungindateieinlesen(BOOL VAR b):IF dbstatus<>0OR wert(fnrlvsj)<>aktschuljOR wert(fnrlvhj)<>akthalbjOR intwert(fnrlvjgst)>endejgstTHEN b:=TRUE ELSE savetupel(dnrlehrveranstaltungen ,lvdateizeile);putline(lvdatei,lvdateizeile)FI END PROC lehrveranstaltungindateieinlesen;PROC bearbeitunglehrveranstaltungen: eingangsbehandlung(2);IF eingangsmaskenfehlerTHEN infeld(pruefstatus);return( 1)ELSE wertedeseingangsbildschirmsmerken;schulhalbjahrbestimmen; zugriffauflehrveranstaltungenbestimmen;erstensatzlesen;IF keinelehrveranstaltungengespeichertCAND bearbeitungallerjgstTHEN standardmeldung(meldnrkeinelehrveranstaltungen,"");return(1)ELSE standardstartproc(maskebearb);ueberschriftzeilezusammensetzen; standardkopfmaskeaktualisieren(ueberschrift);bsfuellen;infeld( ersteseingabefeld);standardnprocFI ;FI . zugriffauflehrveranstaltungenbestimmen:IF fachangabeleerTHEN zugriff:= ixlvsjhjkoppELIF jgstangabeleerTHEN zugriff:=ixlvsjhjkennELSE zugriff:= dnrlehrveranstaltungenFI .erstensatzlesen:putwert(fnrlvsj,gewschulj);putwert( fnrlvhj,gewhalbj);putintwert(fnrlvjgst,int(vgljgst));IF zugriff=ixlvsjhjkopp THEN putwert(fnrlvkopplung,textzweistellig(int(vgljgst)))ELSE putwert( fnrlvfachkennung,vglfach)FI ;jgstdesletztensatzes:=int(vgljgst);search( zugriff,FALSE );leerenbszeigen:=NOT (dbstatus=okCAND wert(fnrlvhj)=gewhalbj CAND wert(fnrlvsj)=gewschuljCAND (jgstangabeleerCOR intwert(fnrlvjgst)=int( vgljgst))CAND (fachangabeleerCOR compress(subtext(wert(fnrlvfachkennung),1, fachlaenge))=vglfach)).keinelehrveranstaltungengespeichert:dbstatus<>0. ueberschriftzeilezusammensetzen:ueberschrift:=textueberschriftanfang; ueberschriftCAT gewhalbj;ueberschriftCAT blankzeichen;ueberschriftCAT subtext (gewschulj,1,2);ueberschriftCAT trennstrich;ueberschriftCAT subtext(gewschulj ,3,4).END PROC bearbeitunglehrveranstaltungen;BOOL PROC fachangabeleer: vglfach=""END PROC fachangabeleer;BOOL PROC jgstangabeleer:vgljgst=""END PROC jgstangabeleer;PROC bsfuellen:izeile:=0;IF NOT leerenbszeigenTHEN startebildschirmblock(zugriff,zeilenanzahl-1);bildschirmblock(PROC satzmerken ,BOOL PROC (INT CONST )satzzubehandeln,0);IF dbstatus=0THEN succ(zugriff);IF dbstatus<>0THEN inittupel(dnrlehrveranstaltungen)FI ELSE inittupel( dnrlehrveranstaltungen)FI ;merkesatzalsnachfolgerELSE nffachkennung:=""FI ; evtlleerzeilenhinzufuegen;werteausbszeileinstandardfeldersetzen;infeld( erstestabellenfeld);standardfelderausgeben;.evtlleerzeilenhinzufuegen: anzahlgezeigtezeilen:=izeile;WHILE izeile int(vgljgst)THEN LEAVE satzzubehandelnWITH FALSE FI ;IF NOT fachangabeleer CAND compress(subtext(wert(fnrlvfachkennung),1,fachlaenge))<>vglfachTHEN LEAVE satzzubehandelnWITH FALSE FI ;TRUE .END PROC satzzubehandeln;PROC satzmerken:izeileINCR 1;bszeile(izeile).jgst:=wert(fnrlvjgst); jgstdesletztensatzes:=intwert(fnrlvjgst);bszeile(izeile).fach:=compress( subtext(wert(fnrlvfachkennung),1,2));bszeile(izeile).kennung:=subtext(wert( fnrlvfachkennung),3);bszeile(izeile).kopplung:=wert(fnrlvkopplung);bszeile( izeile).art:=wert(fnrlvart);bszeile(izeile).klasse1:=wert(fnrlvklgrp1); bszeile(izeile).klasse2:=wert(fnrlvklgrp2);bszeile(izeile).klasse3:=wert( fnrlvklgrp3);bszeile(izeile).klasse4:=wert(fnrlvklgrp4);bszeile(izeile).wstd :=wert(fnrlvwochenstd);.END PROC satzmerken;PROC lehrveranstaltungenspeichern (BOOL CONST speichern):IF speichernTHEN plausipruefung;ELSE pruefstatus:=0FI ;IF pruefstatus<>0THEN infeld(pruefstatus);return(1)ELSE datenspeichern( speichern);IF nachfolgesatzvorhandenTHEN holewertedesnachfolgersatzes;search( dnrlehrveranstaltungen,TRUE );IF dbstatus<>0THEN search( dnrlehrveranstaltungen,FALSE )FI ;izeile:=0;IF satzzubehandeln(izeile)THEN changeindex;leerenbszeigen:=FALSE ;setzejgstfuerneuenbildschirm; naechstenbildschirmzeigenELSE enter(2)FI ELIF letzteeingabezeilegefuelltTHEN leerenbszeigen:=TRUE ;naechstenbildschirmzeigenELSE enter(2)FI ;FI . nachfolgesatzvorhanden:nffachkennung<>"".letzteeingabezeilegefuellt: standardmaskenfeld((zeilenanzahl-1)*felderprozeile+ersteseingabefeld)<>"". holewertedesnachfolgersatzes:putwert(fnrlvsj,nfschulj);putwert(fnrlvhj, nfhalbj);putwert(fnrlvjgst,nfjgst);putwert(fnrlvfachkennung,nffachkennung). naechstenbildschirmzeigen:bsfuellen;infeld(ersteseingabefeld);return(1). setzejgstfuerneuenbildschirm:izeile:=zeilenanzahl;WHILE keinbezugaufletztensatzREP izeileDECR 1PER ;jgstdesletztensatzes:=int(bszeile (izeile).jgst);.keinbezugaufletztensatz:bszeile(izeile).fach="".END PROC lehrveranstaltungenspeichern;PROC datenspeichern(BOOL CONST speichern):IF speichernTHEN standardmeldung(meldnrdatenspeichern,""); datenspeicherungdurchfuehren;ELSE standardmeldung(meldnrdatennichtspeichern, "");FI ;END PROC datenspeichern;PROC datenspeicherungdurchfuehren:BOOL VAR aenderungsvermerkzusetzen:=FALSE ;FOR izeileFROM 1UPTO zeilenanzahlREP holevergleichswerte;IF lvzeileloeschenTHEN aenderungszeileanzeigen; aenderungsvermerkzusetzen:=TRUE ;altelvloeschenELIF lvzeileeinfuegenTHEN aenderungszeileanzeigen;aenderungsvermerkzusetzen:=TRUE ;neuelveinfuegenELIF lvzeileueberschreibenTHEN aenderungszeileanzeigen;aenderungsvermerkzusetzen:= TRUE ;altelvupdateFI PER ;IF aenderungsvermerkzusetzenTHEN IF aktuelleshalbjahrzubearbeitenTHEN aenderungsvermerksetzen(wertaktuell)ELSE aenderungsvermerksetzen(wertgeplant)FI FI .holevergleichswerte:INT VAR prueffnr:=fachfnrin(izeile);TEXT VAR prueffach:=standardmaskenfeld(prueffnr); TEXT VAR altesfach:=bszeile(izeile).fach.lvzeileloeschen:prueffach=""CAND altesfach<>"".altelvloeschen:setzealtesuchwerteindbpuffer;search( dnrlehrveranstaltungen,TRUE );IF dbstatus=0THEN delete(dnrlehrveranstaltungen );evtlkurswahldatenbeimbearbeitenaktualisierenFI .lvzeileeinfuegen:prueffach <>""CAND altesfach="".neuelveinfuegen:setzeneuewerteindbpuffer; setzenichtsichtbarewerteindbpuffer;insert(dnrlehrveranstaltungen); evtlkurswahldatenbeimbearbeitenaktualisieren.lvzeileueberschreiben:NOT ( standardmaskenfeld(prueffnr)=bszeile(izeile).fachCAND standardmaskenfeld( prueffnr+1)=bszeile(izeile).kennungCAND standardmaskenfeld(prueffnr+2)= bszeile(izeile).artCAND standardmaskenfeld(prueffnr+3)=bszeile(izeile). klasse1CAND standardmaskenfeld(prueffnr+4)=bszeile(izeile).klasse2CAND standardmaskenfeld(prueffnr+5)=bszeile(izeile).klasse3CAND standardmaskenfeld (prueffnr+6)=bszeile(izeile).klasse4CAND standardmaskenfeld(prueffnr+7)= bszeile(izeile).wstd).altelvupdate:setzealtesuchwerteindbpuffer;search( dnrlehrveranstaltungen,TRUE );setzeneuewerteindbpuffer;IF standardmaskenfeld( prueffnr)<>bszeile(izeile).fachCOR compress(standardmaskenfeld(prueffnr+1))<> bszeile(izeile).kennungTHEN setzenichtsichtbarewerteindbpufferFI ;update( dnrlehrveranstaltungen);evtlkurswahldatenbeimbearbeitenaktualisieren. setzealtesuchwerteindbpuffer:putwert(fnrlvsj,gewschulj);putwert(fnrlvhj, gewhalbj);putwert(fnrlvjgst,bszeile(izeile).jgst);putwert(fnrlvfachkennung, text(altesfach,fachlaenge)+bszeile(izeile).kennung).setzeneuewerteindbpuffer: putwert(fnrlvsj,gewschulj);putwert(fnrlvhj,gewhalbj);putwert(fnrlvjgst, bszeile(izeile).jgst);putwert(fnrlvfachkennung,neuekennung);putwert(fnrlvart, standardmaskenfeld(prueffnr+2));putwert(fnrlvklgrp1,standardmaskenfeld( prueffnr+3));putwert(fnrlvklgrp2,standardmaskenfeld(prueffnr+4));putwert( fnrlvklgrp3,standardmaskenfeld(prueffnr+5));putwert(fnrlvklgrp4, standardmaskenfeld(prueffnr+6));putwert(fnrlvwochenstd,standardmaskenfeld( prueffnr+7)).setzenichtsichtbarewerteindbpuffer:putwert(fnrlvkopplung, neuekopplung);putwert(fnrlvparaphe,"");putwert(fnrlvraumgrp1,"");putwert( fnrlvraumgrp2,"").neuekennung:text(prueffach,fachlaenge)+compress( standardmaskenfeld(prueffnr+1)).neuekopplung:textzweistellig(int(bszeile( izeile).jgst))+neuekennung.END PROC datenspeicherungdurchfuehren;PROC evtlkurswahldatenbeimbearbeitenaktualisieren:IF intwert(fnrlvjgst)>jgst10 THEN IF aktuelleshalbjahrzubearbeitenOR gewhalbj=zweiteshalbjahrTHEN kurswahlserverlvaktualisieren(wert(fnrlvjgst),wert(fnrlvjgst),gewhalbj)ELSE kurswahlserverlvaktualisieren(text(intwert(fnrlvjgst)-1),wert(fnrlvjgst), gewhalbj)FI FI END PROC evtlkurswahldatenbeimbearbeitenaktualisieren;PROC aenderungszeileanzeigen:infeld((izeile-1)*felderprozeile+ersteseingabefeld) END PROC aenderungszeileanzeigen;PROC lehrveranstaltungenzeileeinfuegen(BOOL CONST zeilerein):INT VAR erstefnr;IF zeilereinTHEN zeileeinfuegenELSE zeileloeschenFI ;return(1).zeileeinfuegen:aktzeile:=bearbeitungszeilezufeld( infeld);IF aktzeile=zeilenanzahlTHEN standardmeldung( meldnrletztezeilenichteinfuegen,"");LEAVE zeileeinfuegenFI ;IF bszeile( zeilenanzahl).fach<>""THEN merkeverdraengtensatzalsnachfolgesatz; anzahlgezeigtezeilen:=zeilenanzahlFI ;FOR izeileFROM zeilenanzahl-1DOWNTO aktzeile+1REP zeileiminternenpufferverschieben; wertederzeileaufdembildschirmverschiebenPER ;izeile:=aktzeile+1; leerzeileschreiben;jgstineingefuegterzeilevermerken;neuezeilenausgeben. merkeverdraengtensatzalsnachfolgesatz:nfschulj:=gewschulj;nfhalbj:=gewhalbj; nfjgst:=bszeile(zeilenanzahl).jgst;nffachkennung:=text(bszeile(zeilenanzahl). fach,fachlaenge)+bszeile(zeilenanzahl).kennung. zeileiminternenpufferverschieben:bszeile(izeile+1).jgst:=bszeile(izeile).jgst ;bszeile(izeile+1).fach:=bszeile(izeile).fach;bszeile(izeile+1).kennung:= bszeile(izeile).kennung;bszeile(izeile+1).kopplung:=bszeile(izeile).kopplung; bszeile(izeile+1).art:=bszeile(izeile).art;bszeile(izeile+1).klasse1:=bszeile (izeile).klasse1;bszeile(izeile+1).klasse2:=bszeile(izeile).klasse2;bszeile( izeile+1).klasse3:=bszeile(izeile).klasse3;bszeile(izeile+1).klasse4:=bszeile (izeile).klasse4;bszeile(izeile+1).wstd:=bszeile(izeile).wstd;. wertederzeileaufdembildschirmverschieben:FOR ifnrFROM erstesfeldderzeileUPTO letztesfeldderzeileREP standardmaskenfeld(standardmaskenfeld(ifnr),ifnr+ felderprozeile)PER .erstesfeldderzeile:(izeile-1)*felderprozeile+ erstestabellenfeld.letztesfeldderzeile:erstesfeldderzeile+felderprozeile-1. jgstineingefuegterzeilevermerken:bszeile(izeile).jgst:=bszeile(aktzeile).jgst ;bszeile(izeile).fach:="";bszeile(izeile).kennung:="";bszeile(izeile). kopplung:="";bszeile(izeile).art:="";bszeile(izeile).klasse1:="";bszeile( izeile).klasse2:="";bszeile(izeile).klasse3:="";bszeile(izeile).klasse4:=""; bszeile(izeile).wstd:="";standardmaskenfeld(textzweistellig(int(bszeile( izeile).jgst)),erstefnr);.zeileloeschen:izeile:=bearbeitungszeilezufeld( infeld);leerzeileschreiben;neuezeilenausgeben.leerzeileschreiben:erstefnr:= erstesfeldderzeile;standardmaskenfeld(" ",erstefnr);FOR ifnrFROM erstefnr+1 UPTO letztesfeldderzeileREP standardmaskenfeld("",ifnr)PER . neuezeilenausgeben:infeld(erstefnr);standardfelderausgeben;infeld(erstefnr+1) .END PROC lehrveranstaltungenzeileeinfuegen;INT PROC bearbeitungszeilezufeld( INT CONST feldnr):((feldnr-erstestabellenfeld)DIV felderprozeile)+1END PROC bearbeitungszeilezufeld;PROC eingangsbehandlung(INT CONST plausiart):LET uebernehmen=1,bearbeiten=2;BOOL VAR ok;reinitparsing;eingangsmaskenfehler:= FALSE ;ankreuzfelderpruefen;IF mehralseineauswahlangekreuztTHEN standardmeldung(meldnrungueltigeauswahl,"");pruefstatus:=fnrbearbeiten; eingangsmaskenfehler:=TRUE ;LEAVE eingangsbehandlungFI ;IF uebernehmenpruefungTHEN IF ankreuz1THEN ankreuzfehler(fnrbearbeiten);LEAVE eingangsbehandlungFI ELIF bearbeitenpruefungTHEN IF ankreuz2THEN ankreuzfehler(fnrfachanguebernehmen);LEAVE eingangsbehandlungELIF ankreuz3 THEN ankreuzfehler(fnrlehrveruebernehmen);LEAVE eingangsbehandlungFI FI ;IF bearbeitenpruefungTHEN standardpruefe(5,fnrbearbaktsj,fnrbearbgeplsj,0,"", pruefstatus);IF pruefstatus<>0THEN eingangsmaskenfehler:=TRUE ;LEAVE eingangsbehandlungELSE jgstpruefung(fnrbearbjgst,ok);IF NOT okTHEN jgstfehler (fnrbearbjgst);LEAVE eingangsbehandlungFI ;vgljgst:=standardmaskenfeld( fnrbearbjgst);vglfach:=compress(standardmaskenfeld(fnrbearbfach))FI ELIF ankreuz2THEN standardpruefe(5,fnrfachangaktsj,fnrfachanggeplsj,0,"", pruefstatus);IF pruefstatus<>0THEN eingangsmaskenfehler:=TRUE ;LEAVE eingangsbehandlungELSE jgstpruefung(fnrfachangjgst,ok);IF NOT okTHEN jgstfehler(fnrfachangjgst);LEAVE eingangsbehandlungELSE vgljgst:= standardmaskenfeld(fnrfachangjgst)FI ;FI ELSE jgstpruefung(fnrlehrverjgst,ok) ;IF NOT okTHEN jgstfehler(fnrlehrverjgst);LEAVE eingangsbehandlungELSE vgljgst:=standardmaskenfeld(fnrlehrverjgst)FI ;FI ;IF ankreuz1THEN FOR ifnr FROM fnrfachanguebernehmenUPTO fnrlehrverjgstREP IF standardmaskenfeld(ifnr) <>""THEN eintragfehler(ifnr);LEAVE eingangsbehandlungFI PER ELIF ankreuz2 THEN FOR ifnrFROM fnrbearbeitenUPTO fnrbearbfachREP IF standardmaskenfeld( ifnr)<>""THEN eintragfehler(ifnr);LEAVE eingangsbehandlungFI PER ;IF standardmaskenfeld(fnrlehrverjgst)<>""THEN eintragfehler(fnrlehrverjgst); LEAVE eingangsbehandlungFI ELSE FOR ifnrFROM fnrbearbeitenUPTO fnrfachangjgst REP IF standardmaskenfeld(ifnr)<>""THEN eintragfehler(ifnr);LEAVE eingangsbehandlungFI PER FI .ankreuzfelderpruefen:INT VAR summe:=0;IF ankreuz1THEN summeINCR 1FI ;IF ankreuz2THEN summeINCR 1FI ;IF ankreuz3THEN summeINCR 1FI .mehralseineauswahlangekreuzt:summe<>1.ankreuz1: standardmaskenfeld(fnrbearbeiten)<>"".ankreuz2:standardmaskenfeld( fnrfachanguebernehmen)<>"".ankreuz3:standardmaskenfeld(fnrlehrveruebernehmen) <>"".uebernehmenpruefung:plausiart=uebernehmen.bearbeitenpruefung:plausiart= bearbeiten.END PROC eingangsbehandlung;PROC ankreuzfehler(INT CONST fehlerfeld):pruefstatus:=fehlerfeld;eingangsmaskenfehler:=TRUE ; standardmeldung(meldnrfalschetastezuankreuz,"").END PROC ankreuzfehler;PROC jgstpruefung(INT CONST fnrpruefjgst,BOOL VAR ok):IF standardmaskenfeld( fnrpruefjgst)=""THEN bearbeitungallerjgst:=TRUE ;ok:=TRUE ;ELSE bearbeitungallerjgst:=FALSE ;gewjgst:=int(standardmaskenfeld(fnrpruefjgst)); ok:=lastconversionokCAND (gewjgst=jgst0OR (gewjgst>=jgst5AND gewjgst<=jgst13) )FI END PROC jgstpruefung;PROC jgstfehler(INT CONST fehlerfeld):pruefstatus:= fehlerfeld;eingangsmaskenfehler:=TRUE ;standardmeldung(meldnrfehlerhaftejgst, "").END PROC jgstfehler;PROC eintragfehler(INT CONST fehlerfeld):pruefstatus :=fehlerfeld;eingangsmaskenfehler:=TRUE ;standardmeldung( meldnrfalscheausfuellung,"").END PROC eintragfehler;PROC plausipruefung: pruefstatus:=0;facheintraegepruefen;IF eingabefehlerTHEN LEAVE plausipruefung FI ;datenkonsistenzpruefen;IF eingabefehlerTHEN LEAVE plausipruefungFI . eingabefehler:pruefstatus<>0.END PROC plausipruefung;PROC facheintraegepruefen:anzahleingegebenezeilen:=0;geprueftefaecher:=trenner;IF gueltigeschuelergruppen=""THEN holegueltigeschuelergruppenFI ;IF gueltigeklassengruppen=""THEN holegueltigeklassengruppenFI ;IF gueltigelvart= ""THEN holegueltigelvartenFI ;FOR izeileFROM 1UPTO zeilenanzahlREP IF fachfehlerTHEN LEAVE facheintraegepruefenFI PER .fachfehler:INT VAR prueffnr :=fachfnrin(izeile);TEXT VAR prueffach:=standardmaskenfeld(prueffnr);IF prueffachleerTHEN IF eintraginfolgefelderderzeileTHEN pruefstatus:=prueffnr; standardmeldung(meldnrkeinfachzuanderenangaben,"");TRUE ELSE FALSE FI ELIF prueffachungueltigTHEN pruefstatus:=prueffnr;standardmeldung( meldnrungueltigesfach,"");TRUE ELIF length(standardmaskenfeld(prueffnr+ incrfuerkennung))>kennunglaengeTHEN pruefstatus:=prueffnr+incrfuerkennung; standardmeldung(meldnrkennungzulang,"");TRUE ELIF compress(standardmaskenfeld (prueffnr+incrfuerkennung))=""THEN pruefstatus:=prueffnr+incrfuerkennung; standardmeldung(meldnrbitteangabegenauer,"");TRUE ELIF lvartungueltigTHEN TRUE ELIF klassengruppenungueltigTHEN TRUE ELIF wochenstundenungueltigTHEN pruefstatus:=prueffnr+incrfuerwstd;TRUE ELSE anzahleingegebenezeilenINCR 1; FALSE FI .prueffachleer:prueffach="".eintraginfolgefelderderzeile: standardmaskenfeld(prueffnr+1)<>""COR standardmaskenfeld(prueffnr+2)<>""COR standardmaskenfeld(prueffnr+3)<>""COR standardmaskenfeld(prueffnr+4)<>""COR standardmaskenfeld(prueffnr+5)<>""COR standardmaskenfeld(prueffnr+6)<>""COR standardmaskenfeld(prueffnr+7)<>"".prueffachungueltig:IF fachkuerzelschongeprueftTHEN FALSE ELIF fachimfachbestandTHEN geprueftefaecherCAT prueffach;geprueftefaecherCAT trenner;FALSE ELSE TRUE FI .fachkuerzelschongeprueft:pos(geprueftefaecher,trenner+prueffach+trenner)>0. fachimfachbestand:putwert(fnrffach,prueffach);search(dnrfaecher,TRUE ); dbstatus=0.lvartungueltig:IF pos(gueltigelvart,trenner+standardmaskenfeld( prueffnr+incrfuerlvart)+trenner)=0THEN standardmeldung(meldnrungueltigeart,"" );pruefstatus:=prueffnr+incrfuerlvart;TRUE ELSE FALSE FI . klassengruppenungueltig:pruefjgst:=int(bszeile(izeile).jgst);FOR ifnrFROM prueffnr+incrfuerklassengranfangUPTO prueffnr+incrfuerklassengrendeREP pruefklasse:=standardmaskenfeld(ifnr);IF klassengruppeungueltigTHEN standardmeldung(meldnrungueltigeklassengruppe,"");pruefstatus:=ifnr;LEAVE klassengruppenungueltigWITH TRUE FI PER ;FALSE .klassengruppeungueltig:IF pruefklasse=""THEN FALSE ELIF pruefklasseistschuelergruppeTHEN FALSE ELIF pruefklasseistklassengruppeTHEN FALSE ELIF pruefklasseistgueltigejgstTHEN FALSE ELSE TRUE FI .pruefklasseistschuelergruppe:pos(gueltigeschuelergruppen, trenner+bszeile(izeile).jgst+pruefklasse+trenner)>0. pruefklasseistklassengruppe:IF pos(gueltigeklassengruppen,trenner+pruefklasse +trenner)=0THEN FALSE ELIF pruefjgst=jgst0THEN TRUE ELSE putwert( fnrkgklassengrp,pruefklasse);search(dnrklassengruppen,TRUE );IF dbstatus<>0 THEN FALSE ELSE sugruppen:=wert(fnrkgschuelergrp);laengesugruppen:=length( sugruppen);possugruppe:=1;WHILE possugruppepruefjgst THEN LEAVE pruefklasseistklassengruppeWITH FALSE FI ;possugruppeINCR laengeeinersugruppePER ;TRUE FI FI .pruefklasseistgueltigejgst:gueltigejgst:= FALSE ;pruefbez:=int(pruefklasse);IF lastconversionokTHEN IF pruefbez>=jgst5 CAND pruefbez<=jgst13THEN IF pruefjgst=jgst0OR pruefjgst=pruefbezTHEN gueltigejgst:=TRUE FI FI FI ;gueltigejgst.wochenstundenungueltig: standardpruefe(1,prueffnr+incrfuerwstd,0,0,"",pruefstatus);IF pruefstatus=0 THEN standardpruefe(2,prueffnr+incrfuerwstd,0,0,"",pruefstatus);pruefstatus<> 0ELSE TRUE FI .END PROC facheintraegepruefen;INT PROC fachfnrin(INT CONST zeilennr):(zeilennr-1)*felderprozeile+ersteseingabefeldEND PROC fachfnrin; PROC datenkonsistenzpruefen:FOR izeileFROM 1UPTO zeilenanzahlREP IF zeileungueltigTHEN pruefstatus:=prueffnr;standardmeldung( meldnrlehrveranstaltunggibtsschon,"");LEAVE datenkonsistenzpruefenFI PER . zeileungueltig:IF leerzeileTHEN FALSE ELIF zeileistimschluesselunveraendertgebliebenTHEN FALSE ELSE ergebnisderpruefungzeileschongespeichertFI .leerzeile:INT VAR prueffnr:= fachfnrin(izeile);TEXT VAR prueffach:=standardmaskenfeld(prueffnr);prueffach= "".zeileistimschluesselunveraendertgeblieben:standardmaskenfeld(prueffnr)= bszeile(izeile).fachCAND compress(standardmaskenfeld(prueffnr+1))=bszeile( izeile).kennung.ergebnisderpruefungzeileschongespeichert: neuewerteindbpuffersetzen;search(dnrlehrveranstaltungen,TRUE );dbstatus=0. neuewerteindbpuffersetzen:putwert(fnrlvsj,gewschulj);putwert(fnrlvhj,gewhalbj );putwert(fnrlvjgst,bszeile(izeile).jgst);putwert(fnrlvfachkennung,text( prueffach,fachlaenge)+compress(standardmaskenfeld(prueffnr+1))).END PROC datenkonsistenzpruefen;PROC schulhalbjahrbestimmen:IF akthalbj=""THEN akthalbj:=schulkenndatum(texthalbj);aktschulj:=schulkenndatum(textschulj)FI ; IF standardmaskenfeld(fnrlehrveruebernehmen)<>""THEN aktuelleshalbjahrzubearbeiten:=FALSE ELSE aktuelleshalbjahrzubearbeiten:= standardmaskenfeld(fnrbearbaktsj)<>""OR standardmaskenfeld(fnrfachangaktsj)<> ""FI ;gewhalbj:=akthalbj;gewschulj:=aktschulj;IF NOT aktuelleshalbjahrzubearbeitenTHEN geplanteshjundsjberechnen(gewhalbj, gewschulj)FI END PROC schulhalbjahrbestimmen;PROC holegueltigeschuelergruppen :gueltigeschuelergruppen:=trenner;inittupel(dnraktschuelergruppen); statleseschleife(dnraktschuelergruppen,gewschulj,gewhalbj,fnrsgrpsj,fnrsgrphj ,PROC schuelergruppelesen)END PROC holegueltigeschuelergruppen;PROC schuelergruppelesen(BOOL VAR b):IF dbstatus<>0OR wert(fnrsgrpsj)<>gewschulj OR wert(fnrsgrphj)<>gewhalbjTHEN b:=TRUE ELSE gueltigeschuelergruppenCAT wert (fnrsgrpjgst);gueltigeschuelergruppenCAT wert(fnrsgrpkennung); gueltigeschuelergruppenCAT trennerFI END PROC schuelergruppelesen;PROC holegueltigeklassengruppen:gueltigeklassengruppen:=trenner;inittupel( dnrklassengruppen);statleseschleife(dnrklassengruppen,"","",fnrkgklassengrp, fnrkgklassengrp,PROC klassengruppelesen)END PROC holegueltigeklassengruppen; PROC klassengruppelesen(BOOL VAR b):IF dbstatus<>0THEN b:=TRUE ELSE gueltigeklassengruppenCAT wert(fnrkgklassengrp);gueltigeklassengruppenCAT trennerFI END PROC klassengruppelesen;PROC holegueltigelvarten:gueltigelvart :=trenner;inittupel(dnrschluessel);statleseschleife(dnrschluessel,artbestand, "",fnrschlsachgebiet,fnrschlschluessel,PROC holelvart)END PROC holegueltigelvarten;PROC holelvart(BOOL VAR b):IF wert(fnrschlsachgebiet)> artbestandCOR dbstatus<>0THEN b:=TRUE ELSE gueltigelvartCAT wert( fnrschlschluessel);gueltigelvartCAT trennerFI END PROC holelvart;TEXT PROC textzweistellig(INT CONST i):IF i<10THEN "0"+text(i)ELSE text(i)FI END PROC textzweistellig;PROC initfelderdeseingangsbildschirms:INT VAR i;FOR iFROM 1 UPTO feldanzmaskeeingangREP feldbs1(i):=""PER END PROC initfelderdeseingangsbildschirms;PROC wertedeseingangsbildschirmsmerken:INT VAR i;letztecursorfnr:=infeld;FOR iFROM 1UPTO feldanzmaskeeingangREP feldbs1( i):=standardmaskenfeld(i)PER END PROC wertedeseingangsbildschirmsmerken;PROC wertedeseingangsbildschirmsholen:INT VAR i;FOR iFROM 1UPTO feldanzmaskeeingangREP standardmaskenfeld(feldbs1(i),i)PER END PROC wertedeseingangsbildschirmsholen;PROC initbszeilepuffer:FOR izeileFROM 1UPTO zeilenanzahlREP bszeile(izeile).jgst:="";bszeile(izeile).fach:="";bszeile( izeile).kennung:="";bszeile(izeile).art:="";bszeile(izeile).klasse1:=""; bszeile(izeile).klasse2:="";bszeile(izeile).klasse3:="";bszeile(izeile). klasse4:="";bszeile(izeile).wstd:="";PER END PROC initbszeilepuffer;END PACKET lehrveranstaltungenbenennen