PACKET kurszuordnungundumwahlfuereinzelneschuelersek2DEFINES
kurszuordnungundumwahlsek2anfang,kurszuordnungundumwahlbearbeiten,
kurszuordnungundumwahlspeichern,kurszuordnungundumwahlkurselisten,
kurszuordnungundumwahlkopieren,kurszuordnungundumwahlrechtehaelfte,
kurszuordnungundumwahllinkehaelfte,kurszuordnungundumwahlvorwaerts,
kurszuordnungundumwahlrueckwaerts,kurszuordnungundumwahlbeenden,
kurszuordnungundumwahllistezeigen,kurszuordnungundumwahllisteblaettern,
kurszuordnungundumwahllistebearbeiten,kurszuordnungundumwahllistebeenden:LET
artbestand="c02 art lehrveranstaltung",abiklbestand="c02 abitur klausur",
kuwa2sperre="Kurswahl-2 ",eingangsmaske=
"ms kurszuordnung und umwahl sek2 eingang",bearbmaske=
"ms kurszuordnung und umwahl sek2 bearb",listenmaske="mu objektliste",
schuljahr="Schuljahr",halbjahr="Schulhalbjahr",laengefake=6,laengefakeartkl=9
,laengevname=15,laengeplbleinesbs=36,laengekurseeinesbs=42,laengefamname=30,
laengegebdat=8,laengename=53,einganggewjgst=2,einganggewhj=3,eingangaktjgst=4
,eingangaktneue=5,eingangfamname=6,eingangrufname=7,eingangdatum=8,bearbname=
2,bearbfaecher=3,bearbkurse=42,meldungwarten=69,meldungpraezisieren=129,
meldungpruefen=329,meldungspeichern=50,meldungnspeichern=63,
meldungfeldfuellen=52,meldungfalschejgst=404,meldungfalscheshj=405,
meldungandereauswahl=318,meldunglistezeigen=7,meldungkeineschueler=423,
meldungserverfehler=416,meldungkeinblaettern=72,meldungfalschesfach=310,
meldungfalscheart=311,meldungunbeklv=360,meldungblockschnitt=424,
meldungspfehler=419,meldungparallelanw=425,meldungfalscheartzk=434,
meldungunbekannt=126,trenner="�",leerespraefix=" ",leererblock=" ",
leerebloecke=" ",ausgzeichen="#",namenstrenner=", ",kzdoppeltbelegt=
" * ",kzfaecher="F",kznurneue="N",kzname="N",kzohneneue="O",kzkurse="K",
kzalle="A",kzart="A",kzstd="S",kzplbl="P",kzfaplbl="FP",kzfakeartkl="FKAk",
logtext1="Anw. 2.3.1 Umwahl ",text1=" """,text2=""" ",punkt=".",komma=", ",
ersteslistenfeld=2,erstesfachfeld=3,ersteskursfeld=42,anzbearbeingfelder=13,
anzlistenfelder=18,anzbearbzeilen=12,anzfeldereingang=8;TEXT VAR gewsj,aktsj
:="0000",akthj,gewjgst,gewhj,aktjgst,aktneue,aktwahl,aktname,aktvname,
aktgebdatum,aktfaecher,aktartkl,aktkurse,aktschueler,schuelergruppe,
schuelerliste,aktblock,alleplanbloecke:="",faecherbloecke,wahldaten,fach,art,
klausur,kennung,fehlerblock,allearten:=trenner,allefaecher:=trenner,block12,
block1,block2,alleklausurbez:="",praefix,kurse,pruefbloecke:=trenner,
logmeldung;INT VAR i,j,letztepos:=2,fstat:=0,aktlistennr,fachfeld:=
erstesfachfeld,artfeld:=16,klfeld:=17,kursfeld:=ersteskursfeld,aktplblindex:=
1,anfpos,aktbsseite:=1,letztesfeld,listenpos:=1,aktindex,ersterindex:=
ersterschueler;ROW anzbearbeingfelderROW 4TEXT VAR bearbrow;ROW
anzfeldereingangTEXT VAR eingangrow;ROW anzlistenfelderTEXT VAR aktliste;
BOOL VAR listenbearbeitung:=FALSE ,rechtsscrollen:=FALSE ,sperreok,
kopierfunktion:=FALSE ,scrollen:=FALSE ;WINDOW VAR w;initroweingang;
initrowbearb;PROC initroweingang:FOR iFROM 2UPTO anzfeldereingangREP
eingangrow(i):=""PER ;END PROC initroweingang;PROC initrowbearb:INT VAR i;
FOR iFROM 1UPTO anzbearbeingfelderREP bearbrow(i):=ROW 4TEXT :("","","","")
PER ;END PROC initrowbearb;PROC kurszuordnungundumwahlsek2anfang:aktplblindex
:=1;standardstartproc(eingangsmaske);gibeingangaus;infeld(1);
standardfelderausgeben;infeld(letztepos);standardnproc.gibeingangaus:FOR i
FROM 2UPTO anzfeldereingangREP standardmaskenfeld(eingangrow(i),i);IF
eingangrow(i)<>""THEN letztepos:=iFI PER .END PROC
kurszuordnungundumwahlsek2anfang;PROC kurszuordnungundumwahlbearbeiten:
listenbearbeitung:=FALSE ;kopierfunktion:=FALSE ;schuelerliste:="";
standardmeldung(meldungwarten,"");merkeeingang;aktname:=eingangrow(
eingangfamname);aktvname:=eingangrow(eingangrufname);aktgebdatum:=konvdatum(
eingangrow(eingangdatum));prueffeld2bis5;IF fstat<>0THEN LEAVE
kurszuordnungundumwahlbearbeitenFI ;kurswahlinitialisieren(aktjgst,gewjgst,
gewhj,schuelergruppe,gewsj);kurswahlbasisholen(fstat);IF fstat<>0THEN
meldungausgeben(meldungserverfehler,einganggewjgst,1);LEAVE
kurszuordnungundumwahlbearbeitenELIF letzterschueler<ersterschuelerTHEN
meldungausgeben(meldungkeineschueler,einganggewjgst,1);LEAVE
kurszuordnungundumwahlbearbeitenFI ;kurswahlsperresetzen(kuwa2sperre,sperreok
);IF NOT sperreokTHEN meldungausgeben(meldungparallelanw,einganggewjgst,1);
LEAVE kurszuordnungundumwahlbearbeitenFI ;prueffeld6bis8;standardstartproc(
bearbmaske);standardkopfmaskeaktualisieren("Kurszuordnung für jetzige Jgst. "
+aktjgst+" in "+gewjgst+"."+gewhj);aktbsseite:=1;aktplblindex:=1;
schuelerbearbeiten;standardnproc.prueffeld6bis8:FOR iFROM eingangfamnameUPTO
eingangdatumREP IF standardmaskenfeld(i)=""THEN meldungausgeben(
meldungfeldfuellen,i,1);kurswahlsperrebeenden(kuwa2sperre);LEAVE
kurszuordnungundumwahlbearbeitenFI PER ;pruefexistschueler.pruefexistschueler
:aktfaecher:=wahldatenzumschueler(aktname,aktvname,aktgebdatum,kzfaecher);IF
dbstatus<>0THEN meldungausgeben(meldungunbekannt,eingangfamname,1);
kurswahlsperrebeenden(kuwa2sperre);LEAVE kurszuordnungundumwahlbearbeitenFI .
END PROC kurszuordnungundumwahlbearbeiten;PROC schuelerbearbeiten:INT VAR
kurspos,rowindex:=1;aktschueler:=aktname+namenstrenner+aktvname+namenstrenner
+aktgebdatum;initrowbearb;ermittlefaecherartklkurse;standardmaskenfeld(text(
aktschueler,laengename),bearbname);zeigplanblockkurszuordnung.
ermittlefaecherartklkurse:fachfeld:=erstesfachfeld;artfeld:=16;klfeld:=17;
kursfeld:=ersteskursfeld;kurspos:=1;aktfaecher:="";aktartkl:="";aktkurse:="";
rowindex:=1;aktwahl:=wahldatenzumschueler(aktname,aktvname,aktgebdatum,
kzfakeartkl);IF dbstatus=1COR aktwahl=""THEN aktwahl:="";initrowbearb;FOR j
FROM 1UPTO anzbearbeingfelderREP standardmaskenfeld("",fachfeld);
standardmaskenfeld("",artfeld);standardmaskenfeld("",klfeld);
standardmaskenfeld("",kursfeld);fachfeldINCR 1;artfeldINCR 2;klfeldINCR 2;
kursfeldINCR 1;PER ;ELSE gibwahlausFI .gibwahlaus:WHILE kurspos<length(
aktwahl)REP fach:=subtext(aktwahl,kurspos,kurspos+1);kennung:=subtext(aktwahl
,kurspos+2,kurspos+5);aktfaecherCAT fach;aktkurseCAT kennung;fach:=compress(
fach);kennung:=compress(kennung);art:=compress(subtext(aktwahl,kurspos+6,
kurspos+7));klausur:=compress(aktwahlSUB (kurspos+8));standardmaskenfeld(fach
,fachfeld);standardmaskenfeld(art,artfeld);standardmaskenfeld(klausur,klfeld)
;standardmaskenfeld(kennung,kursfeld);bearbrow(rowindex):=ROW 4TEXT :(fach,
art,klausur,kennung);IF rowindex<anzbearbeingfelderTHEN rowindexINCR 1FI ;
fachfeldINCR 1;artfeldINCR 2;klfeldINCR 2;kursfeldINCR 1;kursposINCR
laengefakeartklPER ;IF rowindex<anzbearbeingfelderTHEN FOR jFROM rowindex
UPTO anzbearbeingfelderREP standardmaskenfeld("",fachfeld);standardmaskenfeld
("",artfeld);standardmaskenfeld("",klfeld);standardmaskenfeld("",kursfeld);
bearbrow(rowindex):=ROW 4TEXT :("","","","");IF rowindex<anzbearbeingfelder
THEN rowindexINCR 1;fachfeldINCR 1;artfeldINCR 2;klfeldINCR 2;kursfeldINCR 1;
FI PER FI .zeigplanblockkurszuordnung:alleplanbloecke:=
alleplanblockbezeichner;scrollen:=length(alleplanbloecke)>laengeplbleinesbs;
zeigbearbdaten(aktplblindex).END PROC schuelerbearbeiten;PROC zeigbearbdaten(
INT CONST planblocknr):INT VAR blockpos:=planblocknr*3-2;pruefbloecke:=
trenner;faecherbloecke:=wahldatenzumschueler(aktname,aktvname,aktgebdatum,
kzfaplbl);rechtsscrollen:=FALSE ;FOR iFROM 1UPTO anzbearbzeilenREP aktblock:=
subtext(alleplanbloecke,blockpos,blockpos+2);IF aktblock=""THEN scrollen:=
FALSE ;standardmaskenfeld("",i*4+51);standardmaskenfeld("",i*4+52);
standardmaskenfeld("",i*4+53);standardmaskenfeld("",i*4+54)ELSE
standardmaskenfeld(konvplanblock(aktblock),i*4+51);standardmaskenfeld(
planblockdaten(aktblock,kzstd),i*4+52);standardmaskenfeld("",i*4+53);
ermittlemoeglichekurse;blockposINCR 3;FI ;PER ;
kurszuordnungundumwahlkopierenvorbereiten;infeld(erstesfachfeld).END PROC
zeigbearbdaten;PROC ermittlemoeglichekurse:TEXT VAR kurse:=planblockdaten(
aktblock,kzkurse),ausgabekurse;INT VAR kurspos:=1,berhilfe:=aktbsseite*
laengekurseeinesbs;IF length(kurse)>berhilfeTHEN rechtsscrollen:=TRUE ;FI ;
kurse:=subtext(kurse,berhilfe-laengekurseeinesbs+1,berhilfe);konvkurse;
standardmaskenfeld(ausgabekurse,i*4+54).konvkurse:ausgabekurse:="";kurspos:=1
;WHILE kurspos<length(kurse)REP ausgabekurseCAT subtext(kurse,kurspos,kurspos
+1);ausgabekurseCAT " ";ausgabekurseCAT subtext(kurse,kurspos+2,kurspos+5);
kursposINCR 6PER .END PROC ermittlemoeglichekurse;TEXT PROC konvplanblock(
TEXT CONST planblock):INT VAR blnr:=int(text(planblock,2));IF blnr<10THEN "0"
+text(blnr)+(planblockSUB 3)ELSE planblockFI END PROC konvplanblock;TEXT
PROC konvdatum(TEXT CONST datumohnepunkte):text(datumohnepunkte,2)+"."+
subtext(datumohnepunkte,3,4)+"."+subtext(datumohnepunkte,5)END PROC konvdatum
;PROC kurszuordnungundumwahlspeichern(BOOL CONST speichern):BOOL VAR
aenderung:=FALSE ;TEXT VAR std,fa,ke;IF speichernTHEN
pruefundspeicheraenderungen;ELSE standardmeldung(meldungnspeichern,"");FI ;
naechsterbildschirm.naechsterbildschirm:IF listenbearbeitungTHEN IF listenpos
>length(schuelerliste)THEN kurswahlsperrebeenden(kuwa2sperre);enter(3)ELSE
kopierfunktion:=FALSE ;IF naechsterschuelerTHEN infeld(1);schuelerbearbeiten;
return(1)ELSE kurswahlsperrebeenden(kuwa2sperre);enter(3)FI FI ;ELSE
kurswahlsperrebeenden(kuwa2sperre);enter(2)FI .pruefundspeicheraenderungen:
standardmeldung(meldungpruefen,"");fachfeld:=erstesfachfeld;artfeld:=16;
klfeld:=17;kursfeld:=ersteskursfeld;aenderung:=FALSE ;wahldaten:="";FOR i
FROM 1UPTO anzbearbeingfelderREP infeld(fachfeld);fach:=standardmaskenfeld(
fachfeld);art:=standardmaskenfeld(artfeld);klausur:=standardmaskenfeld(klfeld
);kennung:=standardmaskenfeld(kursfeld);block12:=kursdaten(text(fach,2)+
kennung,kzplbl);IF fach<>bearbrow(i)(1)COR art<>bearbrow(i)(2)COR klausur<>
bearbrow(i)(3)COR kennung<>bearbrow(i)(4)THEN aenderung:=TRUE FI ;IF fach<>""
THEN IF art=""CAND kennung=""THEN meldungfeldfuellenausgebenELSE prueffachFI
ELIF art<>""COR kennung<>""THEN meldungfeldfachfuellenausgeben;LEAVE
kurszuordnungundumwahlspeichernFI ;IF art<>""THEN pruefartFI ;IF kennung<>""
THEN pruefkennung;pruefartzumkurs;IF block12<>leerebloeckeTHEN
pruefkursueberschneidungFI FI ;IF fach<>""THEN wahldatenCAT text(klausur,1);
wahldatenCAT text(art,2);wahldatenCAT text(fach,2);wahldatenCAT text(kennung,
4);wahldatenCAT text(block12,6)FI ;fachfeldINCR 1;artfeldINCR 2;klfeldINCR 2;
kursfeldINCR 1PER ;IF aenderungTHEN standardmeldung(meldungspeichern,"");
schuelerwahleintragen(aktname,aktvname,aktgebdatum,wahldaten);IF dbstatus<>0
THEN meldungausgeben(meldungspfehler,bearbfaecher,1);LEAVE
kurszuordnungundumwahlspeichernELSE logbucheintragvornehmen;kurswahl2sichern(
fstat)FI FI .prueffach:IF allefaecher=trennerTHEN holepruefdatenFI ;IF pos(
allefaecher,trenner+fach+trenner)=0THEN meldungausgeben(meldungfalschesfach,
fachfeld,1);LEAVE kurszuordnungundumwahlspeichernFI .pruefart:IF pos(
allearten,trenner+art+trenner)=0THEN meldungausgeben(meldungfalscheart,
artfeld,1);LEAVE kurszuordnungundumwahlspeichernFI .pruefkennung:std:=
compress(kursdaten(text(fach,2)+text(kennung,4),kzart));IF dbstatus<>0THEN
standardmeldung(meldungunbeklv,text(fach,2)+kennung+ausgzeichen);infeld(
kursfeld);return(1);LEAVE kurszuordnungundumwahlspeichernFI .pruefartzumkurs:
IF art<>""CAND std<>artCAND std<>""THEN meldungfalscheartausgeben;LEAVE
kurszuordnungundumwahlspeichernFI .pruefkursueberschneidung:TEXT VAR kuform;
block1:=text(block12,3);block2:=subtext(block12,4);FOR jFROM 1UPTO i-1REP fa
:=standardmaskenfeld(erstesfachfeld+j-1);ke:=standardmaskenfeld(
ersteskursfeld+j-1);kuform:=text(text(fa,2)+ke,laengefake);IF fa<>""CAND ke<>
""THEN IF kuform<>text(text(fach,2)+kennung,laengefake)THEN IF
planblockschnitt(kuform)THEN meldungblockschnittausgeben;LEAVE
kurszuordnungundumwahlspeichernFI FI FI PER ;FOR jFROM i+1UPTO
anzbearbeingfelderREP fa:=standardmaskenfeld(erstesfachfeld+j-1);ke:=
standardmaskenfeld(ersteskursfeld+j-1);kuform:=text(text(fa,2)+ke,laengefake)
;IF fa<>""CAND ke<>""THEN IF kuform<>text(text(fach,2)+kennung,laengefake)
THEN IF planblockschnitt(kuform)THEN meldungblockschnittausgeben;LEAVE
kurszuordnungundumwahlspeichernFI FI FI PER .meldungfeldfuellenausgeben:
meldungausgeben(meldungfeldfuellen,artfeld,1).meldungfeldfachfuellenausgeben:
meldungausgeben(meldungfeldfuellen,fachfeld,1).meldungfalscheartausgeben:
standardmeldung(meldungfalscheartzk,text(fach,2)+kennung+ausgzeichen+std+
ausgzeichen);infeld(artfeld);return(1).meldungblockschnittausgeben:
standardmeldung(meldungblockschnitt,compress(fehlerblock)+ausgzeichen);infeld
(kursfeld);return(1).END PROC kurszuordnungundumwahlspeichern;BOOL PROC
naechsterschueler:aktindex:=int(subtext(schuelerliste,listenpos,listenpos+2))
;belegeglobalevariablen(aktindex);listenposINCR 4;aktname<>""END PROC
naechsterschueler;BOOL PROC planblockschnitt(TEXT CONST andererkurs):TEXT
VAR bl1,bl2,bl12;IF compress(andererkurs)=""THEN LEAVE planblockschnittWITH
FALSE ELIF block1=leererblockCAND block2=leererblockTHEN LEAVE
planblockschnittWITH FALSE FI ;bl12:=kursdaten(andererkurs,kzplbl);IF
dbstatus=1THEN LEAVE planblockschnittWITH FALSE FI ;IF bl12=leerebloeckeTHEN
LEAVE planblockschnittWITH FALSE FI ;IF block1<>leererblockTHEN bl1:=text(
bl12,3);IF block1ganzerblockCOR bl1ganzerblockTHEN block1:=text(block1,2);bl1
:=text(bl12,2);ELSE bl1:=text(bl12,3)FI ;IF block1=bl1COR block1=bl2THEN
fehlerblock:=block1;LEAVE planblockschnittWITH TRUE FI ;FI ;IF block2<>
leererblockTHEN bl2:=subtext(bl12,4);IF block2ganzerblockCOR bl2ganzerblock
THEN block2:=text(block2,2);bl2:=subtext(bl12,4,5)ELSE bl2:=subtext(bl12,4)
FI ;IF block2=bl1COR block2=bl2THEN fehlerblock:=block2;LEAVE
planblockschnittWITH TRUE FI ;FI ;FALSE .block1ganzerblock:(block1SUB 3)=" ".
bl1ganzerblock:(bl1SUB 3)=" ".block2ganzerblock:(block2SUB 3)=" ".
bl2ganzerblock:(bl2SUB 3)=" ".END PROC planblockschnitt;PROC holepruefdaten:
allefaecher:=trenner;allearten:=trenner;inittupel(dnrfaecher);
statleseschleife(dnrfaecher,"","",fnrffach,fnrffach,PROC sammleallefaecher);
inittupel(dnrschluessel);statleseschleife(dnrschluessel,artbestand,"",
fnrschlsachgebiet,fnrschlschluessel,PROC sammleallearten)END PROC
holepruefdaten;PROC sammleallefaecher(BOOL VAR b):allefaecherCAT wert(
fnrffach);allefaecherCAT trennerEND PROC sammleallefaecher;PROC
sammleallearten(BOOL VAR b):IF wert(fnrschlsachgebiet)>artbestandCOR dbstatus
<>0THEN b:=TRUE ELSE alleartenCAT wert(fnrschlschluessel);alleartenCAT
trenner;alleartenCAT text(wert(fnrschlschluessel),2);alleartenCAT trennerFI
END PROC sammleallearten;PROC kurszuordnungundumwahlkurselisten:TEXT VAR
kursliste,liste,ausgabeart;INT VAR aktfeld;kursliste:="";aktfeld:=infeld;w:=
startwindow(20,23,77,1);liste:="";standardmeldung(meldunglistezeigen,"");#IF
menuedraussen08.02.91THEN reorganizescreenFI ;#fuelleliste;infeld(1);
standardfelderausgeben;open(w);auskunfterteilung(liste,w,FALSE );
reorganizescreen;setlasteditvalues;infeld(aktfeld);return(1).fuelleliste:
holklausurkuerzel;listeCAT "Zusammensetzung der Kurse";listeCAT
auskunftstextende;listeCAT " ";listeCAT auskunftstextende;listeCAT
"Fach Art Kurs Schüler Klausur";listeCAT auskunftstextende;listeCAT
" ges. ";FOR iFROM 1UPTO 6REP IF (alleklausurbezSUB i)<>""
THEN listeCAT text((alleklausurbezSUB i),5)FI PER ;listeCAT auskunftstextende
;listeallerkurse.holklausurkuerzel:IF alleklausurbez=""THEN statleseschleife(
dnrschluessel,abiklbestand,"",fnrschlsachgebiet,fnrschlschluessel,PROC
sammlealleabikl)FI .listeallerkurse:belegefachart;betrachtekurse;anfpos:=1;
praefix:=text(fach,5)+text(ausgabeart,4);WHILE anfpos<length(kursliste)REP
listeCAT praefix;IF praefix<>""THEN praefix:=leerespraefixFI ;kennung:=
subtext(kursliste,anfpos,anfpos+3);listeCAT text(kennung,6);listeCAT text(
anzahlschuelermitwahl(fach,kennung,"",""),3);listeCAT " ";FOR iFROM 1UPTO 6
REP IF (alleklausurbezSUB i)<>""THEN listeCAT text(anzahlschuelermitwahl(fach
,kennung,ausgabeart,(alleklausurbezSUB i)),5)FI PER ;listeCAT
auskunftstextende;anfposINCR 4PER ;listeCAT auskunftstextende.betrachtekurse:
anfpos:=1;kursliste:="";kurse:=allekurse;WHILE anfpos<>0REP anfpos:=pos(kurse
,fach,anfpos);IF anfposMOD 10=1THEN IF subtext(kurse,anfpos,anfpos+1)=text(
fach,2)CAND subtext(kurse,anfpos+8,anfpos+9)=text(art,2)THEN kurslisteCAT
subtext(kurse,anfpos+2,anfpos+5)FI FI ;IF anfpos<>0THEN anfposINCR 1FI PER ;
IF kursliste=""THEN ausgabeart:="";ermittleallekursezumfachELSE ausgabeart:=
artFI .ermittleallekursezumfach:anfpos:=1;kursliste:="";WHILE anfpos<>0REP
anfpos:=pos(kurse,fach,anfpos);IF anfposMOD 10=1THEN IF subtext(kurse,anfpos,
anfpos+1)=fachTHEN kurslisteCAT subtext(kurse,anfpos+2,anfpos+5)FI FI ;IF
anfpos<>0THEN anfposINCR 1FI PER .belegefachart:aktfeld:=infeld;IF aktfeld>2
CAND aktfeld<16THEN fach:=standardmaskenfeld(aktfeld);art:=standardmaskenfeld
(((aktfeld-2)*2-1)+15)ELIF aktfeld>15CAND aktfeld<42THEN fach:=
standardmaskenfeld(aktfeldDIV 2-5);IF aktfeldMOD 2=0THEN art:=
standardmaskenfeld(aktfeld)ELSE art:=standardmaskenfeld(aktfeld-1)FI ELSE
fach:=standardmaskenfeld(aktfeld-39);art:=standardmaskenfeld((aktfeld-39)*2+
10)FI ;art:=compress(art).END PROC kurszuordnungundumwahlkurselisten;PROC
kurszuordnungundumwahllistebeenden:kurswahlsperrebeenden(kuwa2sperre);enter(2
)END PROC kurszuordnungundumwahllistebeenden;PROC sammlealleabikl(BOOL VAR b)
:IF wert(fnrschlsachgebiet)>abiklbestandCOR dbstatus<>0THEN b:=TRUE ELSE
alleklausurbezCAT wert(fnrschlschluessel)FI END PROC sammlealleabikl;PROC
kurszuordnungundumwahlkopierenvorbereiten:TEXT VAR fa,ke,f,k,aktplbl;INT VAR
z;TEXT VAR var:="",neuerkurseintrag:="";IF pruefbloecke=trennerTHEN
ermittlegezeigtebloecke;FI ;FOR jFROM 1UPTO anzbearbeingfelderREP fa:=
standardmaskenfeld(bearbfaecher+j-1);ke:=standardmaskenfeld(bearbkurse+j-1);
IF altedatenleerundneuedatenTHEN neuedateneintragenELIF
altedatenundneuedatenleerTHEN altedatenloeschenELIF altedatenundneuedaten
THEN altedatenloeschenundneuedateneintragenFI ;bearbrow(j)(1):=fa;bearbrow(j)
(4):=kePER ;standardfelderausgeben.altedatenleerundneuedaten:bearbrow(j)(4)=
""CAND fa<>""CAND ke<>"".altedatenundneuedatenleer:bearbrow(j)(1)<>""CAND
bearbrow(j)(4)<>""CAND ke="".altedatenundneuedaten:bearbrow(j)(1)<>""CAND
bearbrow(j)(4)<>""CAND fa<>""CAND ke<>"".ermittlegezeigtebloecke:aktplbl:=
subtext(alleplanbloecke,aktplblindex*3-2,(aktplblindex+anzbearbzeilen-1)*3);
pruefbloecke:=trenner;FOR jFROM 1UPTO length(aktplbl)DIV 3REP pruefbloecke
CAT subtext(aktplbl,j*3-2,j*3);pruefbloeckeCAT trennerPER .neuedateneintragen
:faecherbloecke:=kursdaten(text(fa,2)+ke,kzplbl);IF faecherbloecke=
leerebloeckeTHEN LEAVE neuedateneintragenFI ;aktplbl:=text(faecherbloecke,3);
IF aktplbl<>leererblockTHEN i:=pos(pruefbloecke,trenner+aktplbl+trenner);IF i
>0THEN i:=iDIV 4+1;tragneuenkurseinFI FI ;aktplbl:=subtext(faecherbloecke,4);
IF aktplbl<>leererblockTHEN i:=pos(pruefbloecke,trenner+aktplbl+trenner);IF i
>0THEN i:=iDIV 4+1;tragneuenkurseinFI FI .tragneuenkursein:IF
standardmaskenfeld(i*4+53)<>""CAND standardmaskenfeld(i*4+53)<>text(fa,2)+
text(ke,4)THEN standardmaskenfeld(kzdoppeltbelegt,i*4+53)ELSE
standardmaskenfeld(text(fa,2)+text(ke,4),i*4+53)FI .altedatenloeschen:
loescheintrag.altedatenloeschenundneuedateneintragen:IF bearbrow(j)(1)<>fa
COR bearbrow(j)(4)<>keTHEN loescheintragFI ;neuedateneintragen.loescheintrag:
faecherbloecke:=kursdaten(text(bearbrow(j)(1),2)+bearbrow(j)(4),kzplbl);IF
faecherbloecke=leerebloeckeTHEN LEAVE loescheintragFI ;aktplbl:=text(
faecherbloecke,3);IF aktplbl<>leererblockTHEN i:=pos(pruefbloecke,trenner+
aktplbl+trenner);IF i>0THEN i:=iDIV 4+1;IF standardmaskenfeld(i*4+53)=
kzdoppeltbelegtTHEN traganderenkurseinELSE standardmaskenfeld("",i*4+53)FI
FI FI ;aktplbl:=subtext(faecherbloecke,4);IF aktplbl<>leererblockTHEN i:=pos(
pruefbloecke,trenner+aktplbl+trenner);IF i>0THEN i:=iDIV 4+1;IF
standardmaskenfeld(i*4+53)=kzdoppeltbelegtTHEN traganderenkurseinELSE
standardmaskenfeld("",i*4+53)FI FI FI .traganderenkursein:neuerkurseintrag:=
"";FOR zFROM 1UPTO j-1REP f:=standardmaskenfeld(bearbfaecher+z-1);IF f<>""
THEN k:=standardmaskenfeld(bearbkurse+z-1);IF k<>""THEN var:=text(f,2)+k;var
:=kursdaten(var,kzplbl);IF text(var,3)=aktplblCOR subtext(var,4)=aktplblTHEN
IF neuerkurseintrag=""THEN neuerkurseintrag:=text(f,2)+text(k,4)ELSE
standardmaskenfeld(kzdoppeltbelegt,i*4+53);LEAVE traganderenkurseinFI FI FI
FI PER ;FOR zFROM j+1UPTO anzbearbeingfelderREP f:=standardmaskenfeld(
bearbfaecher+z-1);IF f<>""THEN k:=standardmaskenfeld(bearbkurse+z-1);IF k<>""
THEN var:=text(f,2)+k;var:=kursdaten(var,kzplbl);IF text(var,3)=aktplblCOR
subtext(var,4)=aktplblTHEN IF neuerkurseintrag=""THEN neuerkurseintrag:=text(
f,2)+text(k,4)ELSE standardmaskenfeld(kzdoppeltbelegt,i*4+53);LEAVE
traganderenkurseinFI FI FI FI PER ;IF neuerkurseintrag=""THEN
standardmaskenfeld("",i*4+53)ELSE tragkursausehemdoppelbeleinFI .
tragkursausehemdoppelbelein:standardmaskenfeld(neuerkurseintrag,i*4+53).END
PROC kurszuordnungundumwahlkopierenvorbereiten;PROC
kurszuordnungundumwahlkopieren:kopierfunktion:=TRUE ;
kurszuordnungundumwahlkopierenvorbereiten;kopierfunktion:=FALSE ;return(1)
END PROC kurszuordnungundumwahlkopieren;PROC
kurszuordnungundumwahlrechtehaelfte:INT VAR blockpos:=aktplblindex*3-2,
aktfeld:=infeld;IF rechtsscrollenTHEN aktbsseiteINCR 1;
zeigweiteremoeglichekurseELSE letztesfeld:=infeld;meldungausgeben(
meldungkeinblaettern,letztesfeld,1)FI .zeigweiteremoeglichekurse:FOR iFROM 1
UPTO anzbearbzeilenREP aktblock:=subtext(alleplanbloecke,blockpos,blockpos+2)
;IF aktblock=""THEN standardmaskenfeld("",i*4+54)ELSE ermittlemoeglichekurse;
blockposINCR 3;FI ;PER ;infeld(1);standardfelderausgeben;infeld(aktfeld);
return(1).END PROC kurszuordnungundumwahlrechtehaelfte;PROC
kurszuordnungundumwahllinkehaelfte:INT VAR blockpos:=aktplblindex*3-2,aktfeld
:=infeld;IF aktbsseite<>1THEN rechtsscrollen:=TRUE ;aktbsseiteDECR 1;
zeigweiteremoeglichekurseELSE letztesfeld:=infeld;meldungausgeben(
meldungkeinblaettern,letztesfeld,1)FI .zeigweiteremoeglichekurse:FOR iFROM 1
UPTO anzbearbzeilenREP aktblock:=subtext(alleplanbloecke,blockpos,blockpos+2)
;IF aktblock=""THEN standardmaskenfeld("",i*4+54)ELSE ermittlemoeglichekurse;
blockposINCR 3;FI ;PER ;infeld(1);standardfelderausgeben;infeld(aktfeld);
return(1).END PROC kurszuordnungundumwahllinkehaelfte;PROC
kurszuordnungundumwahlvorwaerts:INT VAR aktfeld:=infeld;IF scrollenTHEN
aktplblindexINCR anzbearbzeilen;zeigbearbdaten(aktplblindex);infeld(aktfeld);
return(1)ELSE letztesfeld:=infeld;meldungausgeben(meldungkeinblaettern,
letztesfeld,1)FI END PROC kurszuordnungundumwahlvorwaerts;PROC
kurszuordnungundumwahlrueckwaerts:INT VAR aktfeld:=infeld;IF aktplblindex>1
THEN scrollen:=TRUE ;aktplblindexDECR anzbearbzeilen;zeigbearbdaten(
aktplblindex);infeld(aktfeld);return(1)ELSE letztesfeld:=infeld;
meldungausgeben(meldungkeinblaettern,letztesfeld,1)FI END PROC
kurszuordnungundumwahlrueckwaerts;PROC kurszuordnungundumwahlbeenden:
kurswahlsperrebeenden(kuwa2sperre);IF listenbearbeitungTHEN enter(3)ELSE
enter(2)FI END PROC kurszuordnungundumwahlbeenden;BOOL PROC datumkorrekt:
standardpruefe(6,eingangdatum,1,1,"",fstat);fstat=0END PROC datumkorrekt;
PROC prueffeld2bis5:fstat:=0;IF aktsj="0000"THEN aktsj:=schulkenndatum(
schuljahr);akthj:=schulkenndatum(halbjahr)FI ;gewjgst:=eingangrow(
einganggewjgst);gewhj:=eingangrow(einganggewhj);aktjgst:=eingangrow(
eingangaktjgst);aktneue:=eingangrow(eingangaktneue);prueffeld2;prueffeld3;
prueffeld4und5;prueffeld4;IF fstat=1THEN LEAVE prueffeld2bis5FI ;prueffeld5.
prueffeld2:i:=int(gewjgst);IF gewjgst=""THEN meldungausgeben(
meldungfeldfuellen,einganggewjgst,1);LEAVE prueffeld2bis5ELIF i<11COR i>14
THEN meldungausgeben(meldungfalschejgst,einganggewjgst,1);LEAVE
prueffeld2bis5FI .prueffeld3:i:=int(gewhj);IF gewhj=""THEN meldungausgeben(
meldungfeldfuellen,einganggewhj,1);LEAVE prueffeld2bis5ELIF i<1COR i>2THEN
meldungausgeben(meldungfalscheshj,einganggewhj,1);LEAVE prueffeld2bis5FI .
prueffeld4und5:IF aktjgst=""CAND aktneue=""THEN meldungausgeben(
meldungpraezisieren,eingangaktjgst,1);LEAVE prueffeld2bis5ELIF aktjgst=""
CAND aktneue<>""THEN schuelergruppe:=kznurneueELIF aktjgst<>""CAND aktneue=""
THEN schuelergruppe:=kzohneneueELSE schuelergruppe:=kzalleFI .prueffeld4:i:=
int(aktjgst);IF i<10COR i>14THEN meldungausgeben(meldungfalschejgst,
einganggewjgst,1)ELIF i>int(gewjgst)THEN meldungausgeben(meldungandereauswahl
,einganggewjgst,1)ELIF i=int(gewjgst)THEN IF gewhj="1"CAND akthj="2"THEN
meldungausgeben(meldungandereauswahl,einganggewhj,1)FI FI .prueffeld5:i:=int(
aktneue);IF aktneue<>""CAND aktjgst<>""THEN IF i-1<>int(aktjgst)THEN
meldungausgeben(meldungandereauswahl,eingangaktneue,1)FI ELIF aktneue<>""
CAND aktjgst=""THEN IF i<11COR i>14THEN meldungausgeben(meldungfalschejgst,
eingangaktneue,1)ELIF i+1>int(gewjgst)THEN meldungausgeben(
meldungandereauswahl,eingangaktneue,1)ELIF i-1=int(gewjgst)THEN IF gewhj="1"
CAND akthj="2"THEN meldungausgeben(meldungandereauswahl,einganggewhj,1)FI FI
FI .END PROC prueffeld2bis5;PROC kurszuordnungundumwahllistezeigen:
standardmeldung(meldungwarten,"");merkeeingang;prueffeld2bis5;IF fstat<>0
THEN LEAVE kurszuordnungundumwahllistezeigenELSE standardmeldung(
meldunglistezeigen,"");kurswahlinitialisieren(aktjgst,gewjgst,gewhj,
schuelergruppe,gewsj);kurswahlbasisholen(fstat);IF fstat<>0THEN
meldungausgeben(meldungserverfehler,einganggewjgst,1);LEAVE
kurszuordnungundumwahllistezeigenELIF letzterschueler<ersterschuelerTHEN
meldungausgeben(meldungkeineschueler,einganggewjgst,1);LEAVE
kurszuordnungundumwahllistezeigenFI ;kurswahlsperresetzen(kuwa2sperre,
sperreok);IF NOT sperreokTHEN letztesfeld:=infeld;meldungausgeben(
meldungparallelanw,letztesfeld,1);LEAVE kurszuordnungundumwahllistezeigenFI ;
suchindices;zeigelisteFI .zeigeliste:schuelerliste:=trenner;standardstartproc
(listenmaske);zeigliste(ersterindex);standardnproc.END PROC
kurszuordnungundumwahllistezeigen;PROC zeigliste(INT CONST zeilennr):
aktlistennr:=zeilennr;infeld(ersteslistenfeld);FOR iFROM 1UPTO
anzlistenfelderREP aktname:=wahldatenzumindex(zeilennr+i-1,kzname);changeall(
aktname,trenner,namenstrenner);standardmaskenfeld(aktname,i*2+1);IF pos(
schuelerliste,trenner+text(aktlistennr+i-1,3)+trenner)>0THEN
standardmaskenfeld("x",i*2);aktliste(i):="x"ELSE standardmaskenfeld("",i*2);
aktliste(i):=""FI PER ;infeld(1);standardfelderausgeben;infeld(
ersteslistenfeld).END PROC zeigliste;PROC suchindices:TEXT VAR aktname;
aktname:=eingangrow(eingangfamname);IF aktname=""THEN ersterindex:=
ersterschuelerELSE vergleichnamenFI .vergleichnamen:aktname:=text(aktname,
laengefamname);aktnameCAT trenner;aktnameCAT text(eingangrow(eingangrufname),
laengevname);aktnameCAT trenner;aktnameCAT text(eingangrow(eingangdatum),
laengegebdat);aktnameCAT trenner;FOR iFROM ersterschuelerUPTO letzterschueler
REP IF wahldatenzumindex(i,kzname)>=aktnameTHEN ersterindex:=i;LEAVE
suchindicesFI PER ;ersterindex:=letzterschueler.END PROC suchindices;PROC
kurszuordnungundumwahllisteblaettern(INT CONST aktion):INT VAR
ersterschuelerletzterbs,aktfeld:=infeld;IF aktion=1THEN IF aktlistennr<>
ersterschuelerTHEN analysierekennzeichnungen;ersterindex:=ersterschueler;
zeigliste(ersterindex);return(1)ELSE fehlermeldungaktionnichtmöglichFI ELIF
aktion=2THEN ersterschuelerletzterbs:=letzterschueler-anzlistenfelder+1;IF
aktlistennr<ersterschuelerletzterbsCOR aktlistennr>ersterschuelerletzterbs
THEN analysierekennzeichnungen;zeigliste(ersterschuelerletzterbs);return(1)
ELIF aktlistennr=ersterschuelerletzterbsTHEN fehlermeldungaktionnichtmöglich
FI ELIF aktion=3THEN IF aktlistennr>=letzterschueler-anzlistenfelder+1THEN
fehlermeldungaktionnichtmöglichELSE analysierekennzeichnungen;zeigliste(
aktlistennr+anzlistenfelder);return(1)FI ELIF aktion=4THEN IF aktlistennr=
ersterindexTHEN fehlermeldungaktionnichtmöglichELSE analysierekennzeichnungen
;IF (aktlistennr-anzlistenfelder+1)<ersterindexTHEN zeigliste(ersterindex)
ELSE zeigliste(aktlistennr-anzlistenfelder)FI ;return(1)FI FI .
fehlermeldungaktionnichtmöglich:meldungausgeben(meldungkeinblaettern,aktfeld,
1);LEAVE kurszuordnungundumwahllisteblaettern.END PROC
kurszuordnungundumwahllisteblaettern;PROC analysierekennzeichnungen:FOR i
FROM 1UPTO anzlistenfelderREP IF standardmaskenfeld(i*2)<>aktliste(i)THEN
schuelerlisteCAT text(aktlistennr+i-1,3);schuelerlisteCAT trennerFI PER .END
PROC analysierekennzeichnungen;PROC kurszuordnungundumwahllistebearbeiten:
listenpos:=1;listenbearbeitung:=TRUE ;kopierfunktion:=FALSE ;
analysierekennzeichnungen;IF schuelerliste=trennerTHEN kurswahlsperrebeenden(
kuwa2sperre);enter(2);LEAVE kurszuordnungundumwahllistebearbeitenELSE
schuelerliste:=subtext(schuelerliste,2)FI ;standardstartproc(bearbmaske);
standardkopfmaskeaktualisieren("Kurszuordnung für jetzige Jgst. "+aktjgst+
" in "+gewjgst+"."+gewhj);aktbsseite:=1;aktplblindex:=1;aktindex:=int(subtext
(schuelerliste,listenpos,listenpos+2));belegeglobalevariablen(aktindex);
schuelerbearbeiten;standardnproc;listenposINCR 4.END PROC
kurszuordnungundumwahllistebearbeiten;PROC belegeglobalevariablen(INT CONST
index):TEXT VAR iddaten:=wahldatenzumindex(index,kzname);INT VAR trenner1pos
:=pos(iddaten,trenner),trenner2pos:=pos(iddaten,trenner,trenner1pos+1);IF
dbstatus=0THEN aktname:=text(iddaten,trenner1pos-1);aktvname:=subtext(iddaten
,trenner1pos+1,trenner2pos-1);aktgebdatum:=subtext(iddaten,trenner2pos+1);
ELSE aktname:="";aktvname:="";aktgebdatum:=""FI ;eingangrow(eingangfamname):=
aktname;eingangrow(eingangrufname):=aktvname;eingangrow(eingangdatum):=
datumrekonversion(aktgebdatum)END PROC belegeglobalevariablen;PROC
meldungausgeben(INT CONST meldung,gewfeld,gewruecksprung):fstat:=1;
standardmeldung(meldung,"");infeld(gewfeld);return(gewruecksprung)END PROC
meldungausgeben;PROC merkeeingang:FOR iFROM 2UPTO anzfeldereingangREP
eingangrow(i):=standardmaskenfeld(i)PER END PROC merkeeingang;PROC
logbucheintragvornehmen:logmeldung:=logtext1;logmeldungCAT gewjgst;logmeldung
CAT punkt;logmeldungCAT gewhj;logmeldungCAT text1;logmeldungCAT aktname;
logmeldungCAT komma;logmeldungCAT aktvname;logmeldungCAT komma;logmeldungCAT
aktgebdatum;logmeldungCAT text2;logeintrag(logmeldung)END PROC
logbucheintragvornehmen;END PACKET
kurszuordnungundumwahlfuereinzelneschuelersek2