diff options
Diffstat (limited to 'app/schulis/2.2.1/src/2.kurse auf planbloecke legen')
-rw-r--r-- | app/schulis/2.2.1/src/2.kurse auf planbloecke legen | 449 |
1 files changed, 449 insertions, 0 deletions
diff --git a/app/schulis/2.2.1/src/2.kurse auf planbloecke legen b/app/schulis/2.2.1/src/2.kurse auf planbloecke legen new file mode 100644 index 0000000..f23d29c --- /dev/null +++ b/app/schulis/2.2.1/src/2.kurse auf planbloecke legen @@ -0,0 +1,449 @@ +PACKET kurseaufplanbloeckelegenDEFINES kurseaufbloeckestarten, +kurseaufbloeckeinitialisieren,kurseaufbloeckeschemaspeichern, +kurseaufbloeckeschemavorblaettern,kurseaufbloeckeschemaentfernenfrage, +kurseaufbloeckeschemaentfernen,kurseaufbloeckeschemauebernehmenfrage, +kurseaufbloeckeschemauebernehmen,kurseaufbloeckebearbeiten, +kurseaufbloeckeinformationenaufbereiten,kurseaufbloeckerechtehaelftezeigen, +kurseaufbloeckeaenderungenspeichern,kurseaufbloeckeschemaeinteilen, +kurseaufbloecketeilblockabspalten,kurseaufbloecketeilblockentfernen, +kurseaufbloeckeschemanichtweiteraendern,kurseaufbloeckezurueckzumbeginn:LET +maskeeingang="ms kurse auf planbloecke eingang",maskebearb= +"ms kurse auf planbloecke";LET fnrgewjgst=2,fnrhalbjahr=3,fnraktjgst=4, +fnrneuanjgst=5,fnrherkunftjgst=6,fnrherkunfthj=7,fnrmitkursen=8;LET fnrfach=2 +,fnrart=3,fnrwochenstunden=4,fnranzahlschueler=5,fnranzahlkurse=6, +fnrschuelerprokurs=7,fnrausgabefach=8,fnrersterkurs=9,fnrletzterblock=44, +fnrersteblockangabe=45,fnrerstewstd=46,fnrletztewstd=167;LET felderprozeile= +11,felderprokurs=3;LET meldnrspeichern=50,meldnrkeinezahl=53, +meldnrdatenwerdengeprueft=57,meldnrloeschen=61,meldnrnichtloeschen=62, +meldnrnichtspeichern=63,meldnrloeschfrage=65,meldnrbittewarten=69, +meldnrblaetternunmoeglich=72,meldnrbitteangabeergaenzen=129, +meldnrangabenichtsinnvoll=162,meldnruebernehmenfrage=300,meldnruebernehmen= +301,meldnrnichtuebernehmen=303,meldnrfeldleerlassen=390, +meldnrfachartkombinationungueltig=393,meldnrfalschejgstfolge=410, +meldnrfalschebezugsjgst=411,meldnruebernahmeingleicheshj=415, +meldnrkurswahlfehler=416,meldnrdateninbearbeitung=425,meldnrschemagibtsnicht= +426,meldnrschemagibtsschon=427,meldnrblocknichtteilbar=428, +meldnrteilblockentfernen=429,meldnrstundensummmestimmtnicht=430;LET +feldanzmaskeeingang=8;ROW feldanzmaskeeingangTEXT VAR feldbs1;INT VAR +letztecursorfnr:=fnrgewjgst,letztecursorfnrbs2,pruefstatus;INT VAR ifnr;LET +maxblock=22;LET maxtabzeilen=66;LET TABZEILE =STRUCT (TEXT blockbez,TEXT wstd +,INT frei,INT gesamt,TEXT kurse);ROW maxtabzeilenTABZEILE VAR blockzeile;INT +VAR izeile,iblock,erstergezeigterblock,letztergezeigterblock,letzterblock:=1; +BOOL VAR rechtetabellenhaelftezeigen:=FALSE ;INT VAR ikurs;LET maxkurse=7; +TEXT VAR allekursedesblocks,kursbez;INT VAR poskurs;LET laengekurs=6, +laengeallekursangaben=10,laengefach=2,laengeart=2,laengefachartstd=5,incrwstd +=4;LET KURSTAB =STRUCT (TEXT kursname,TEXT blocknr1,TEXT blocknr2);ROW +maxfachkursKURSTAB VAR kurstab;INT VAR ifachkurs;LET maxfachkurs=12;TEXT VAR +angabenzueinemkurs,gefundenerkurs,gefundeneplanbloecke,gefundenerblock1, +gefundenerblock2;INT VAR blockwstd1,blockwstd2;LET jgst10=10,jgst11=11,jgst13 +=13,hj1=1,hj2=2;TEXT VAR aktjgst,gewjgst,gewhalbjahr,neuanjgst,kopiejgst, +kopiehalbjahr,gewschuljahr,aktuelleshalbjahr,fangsj,fanghj;TEXT VAR blocknr, +pruefblockbez;LET posblockkennung=3;LET kennungteilblockb="b";LET kennungwstd +="S",kennungkurse="K",kennungplanbloecke="P";TEXT VAR alleplanblockbez;LET +planblocklaenge=3,laengeblocknr=2;INT VAR posplanblock;TEXT VAR +allekursedesgewhj,allekursedesherkunfthj;TEXT VAR fachartkombinationen:="", +fach,fachart;INT VAR wochenstundenzahl,anzahlschuelermitfachart, +anzahlschuelerprokurs,anzahlkursezufachart;BOOL VAR wstdfelderschutz:=FALSE , +planbloeckemitkursenuebernehmen,kurswahlsperreok;LET kurswahl1="Kurswahl-1 "; +TEXT VAR gewschueler;LET nuraktuelleschueler="O",nurneuangemeldete="N";LET +zeilenprobildschirm=12;INT VAR kurswahlstatus;TEXT VAR ueberschrift;LET +titel1="Kurse blocken für jetzige ",titel2=" in ";LET schulhalbjahr= +"Schulhalbjahr",schuljahr="Schuljahr";initfelderdeseingangsbildschirms;PROC +kurseaufbloeckestarten:standardstartproc(maskeeingang); +wertedeseingangsbildschirmsholen;infeld(fnrgewjgst);standardfelderausgeben; +infeld(letztecursorfnr);standardnprocEND PROC kurseaufbloeckestarten;PROC +kurseaufbloeckeinitialisieren:eingangsbehandlung(1);IF eingangsmaskenfehler +THEN infeld(pruefstatus);return(1)ELSE wertedeseingangsbildschirmsmerken; +kurswahlinitialisieren(aktjgst,gewjgst,gewhalbjahr,gewschueler,gewschuljahr); +kurswahlbasisholen(kurswahlstatus);IF kurswahlstatus<>0THEN +kurswahlfehlerbehandeln;return(1)ELIF alleplanblockbezeichner<>""THEN +standardmeldung(meldnrschemagibtsschon,"");infeld(fnrgewjgst);return(1)ELSE +kurswahlsperresetzen(kurswahl1,kurswahlsperreok);IF NOT kurswahlsperreokTHEN +standardmeldung(meldnrdateninbearbeitung,"");return(1)ELSE wstdfelderschutz:= +FALSE ;blockschemazeigen(1);infeld(fnrerstewstd);standardnprocFI FI FI .END +PROC kurseaufbloeckeinitialisieren;PROC kurswahlfehlerbehandeln: +standardmeldung(meldnrkurswahlfehler,"");pause(10)END PROC +kurswahlfehlerbehandeln;PROC kurseaufbloeckezurueckzumbeginn(INT CONST stufen +):kurswahlsperrebeenden(kurswahl1);enter(stufen)END PROC +kurseaufbloeckezurueckzumbeginn;PROC blockschemazeigen(INT CONST art): +standardstartproc(maskebearb);ueberschriftaufbereiten; +standardkopfmaskeaktualisieren(ueberschrift);eingabefeldersperren(fnrfach, +fnrart);zusatzfelderinitialisieren;IF art=1THEN blockschemainitialisieren +ELSE blockschemafuellenFI ;rechtetabellenhaelftezeigen:=FALSE ; +blockschemaausgebenab(1);infeld(fnrfach);standardfelderausgeben. +ueberschriftaufbereiten:IF art=1THEN ueberschrift:=titel1;ueberschriftCAT +aktjgst;ueberschriftCAT titel2;ELIF art=2THEN ueberschrift:=text( +vergleichsknoten);ueberschriftCAT " für ";ELIF art=3THEN IF +planbloeckemitkursenuebernehmenTHEN ueberschrift:=text(vergleichsknoten)ELSE +ueberschrift:="Blockschema ohne Kurse übernehmen"FI ;ueberschriftCAT +" für "FI ;ueberschriftCAT gewjgst;ueberschriftCAT ".";ueberschriftCAT +gewhalbjahr;ueberschriftCAT " ";ueberschriftCAT subtext(gewschuljahr,1,2); +ueberschriftCAT "/";ueberschriftCAT subtext(gewschuljahr,3,4). +zusatzfelderinitialisieren:FOR ifnrFROM fnrfachUPTO fnrersteblockangabe-1REP +standardmaskenfeld("",ifnr)PER .blockschemainitialisieren:FOR iblockFROM 1 +UPTO maxtabzeilenREP IF iblock>maxblockTHEN blockzeile(iblock).blockbez:="" +ELSE blockzeile(iblock).blockbez:=textzweistellig(iblock)+" "FI ;blockzeile( +iblock).wstd:="0";blockzeile(iblock).frei:=0;blockzeile(iblock).gesamt:=0; +blockzeile(iblock).kurse:=""PER ;letzterblock:=maxblock.END PROC +blockschemazeigen;PROC blockschemafuellen:alleplanblockbez:= +alleplanblockbezeichner;iblock:=0;posplanblock:=1;WHILE posplanblock<length( +alleplanblockbez)REP iblockINCR 1;blocknr:=subtext(alleplanblockbez, +posplanblock,posplanblock+2);blockzeile(iblock).blockbez:=blocknr;blockzeile( +iblock).wstd:=planblockdaten(blocknr,kennungwstd);blockzeile(iblock).frei:=0; +blockzeile(iblock).gesamt:=anzahlfreierschuelerimplanblock(subtext(blocknr,1, +2),blocknrSUB 3,"","","","");blockzeile(iblock).kurse:=planblockdaten(blocknr +,kennungkurse);posplanblockINCR planblocklaengeUNTIL iblock=maxtabzeilenPER ; +letzterblock:=iblockEND PROC blockschemafuellen;PROC blockschemaausgebenab( +INT CONST ersterblockeintrag):erstergezeigterblock:=ersterblockeintrag;iblock +:=ersterblockeintrag-1;ifnr:=fnrersteblockangabe;FOR izeileFROM 1UPTO +zeilenprobildschirmREP IF iblock<letzterblockTHEN iblockINCR 1; +volleblockzeileausgebenELSE leereblockzeileausgebenFI ;ifnrINCR +felderprozeilePER ;letztergezeigterblock:=iblock.leereblockzeileausgeben: +standardmaskenfeld(" ",ifnr);standardmaskenfeld(" ",ifnr+1); +standardmaskenfeld(" ",ifnr+2);standardmaskenfeld(" ",ifnr+3);FOR ikurs +FROM 1UPTO maxkurseREP standardmaskenfeld(" ",ifnr+3+ikurs)PER ; +feldschutz(ifnr+1).volleblockzeileausgeben:standardmaskenfeld(blockzeile( +iblock).blockbez,ifnr);standardmaskenfeld(blockzeile(iblock).wstd,ifnr+1); +standardmaskenfeld(text(blockzeile(iblock).frei),ifnr+2);standardmaskenfeld( +text(blockzeile(iblock).gesamt),ifnr+3);allekursedesblocks:=blockzeile(iblock +).kurse;IF rechtetabellenhaelftezeigenTHEN poskurs:=(maxkurse*laengekurs)+1 +ELSE poskurs:=1FI ;FOR ikursFROM 1UPTO maxkurseREP kursbez:=subtext( +allekursedesblocks,poskurs,poskurs+laengekurs-1);IF kursbez=""THEN kursbez:= +" "ELSE kursbez:=subtext(kursbez,1,2)+" "+subtext(kursbez,3,6)FI ; +standardmaskenfeld(kursbez,ifnr+3+ikurs);poskursINCR laengekursPER ;IF +wstdfelderschutzTHEN feldschutz(ifnr+1)ELSE feldfrei(ifnr+1)FI END PROC +blockschemaausgebenab;PROC kurseaufbloeckeschemaspeichern(BOOL CONST +speichern):IF speichernTHEN eingetragenewochenstundenmerken;pruefstatus:=0; +allewochenstundenangabenpruefen;IF pruefstatus<>0THEN standardmeldung( +meldnrkeinezahl,"");blockschemaausgebenab(pruefstatus);infeld( +fnrersteblockangabe);standardfelderausgeben;infeld(fnrerstewstd);return(1) +ELSE standardmeldung(meldnrspeichern,"");wochenstundenspeichern; +kurswahl1sichern(kurswahlstatus);kurswahlsperrebeenden(kurswahl1);enter(2)FI +ELSE standardmeldung(meldnrnichtspeichern,"");kurswahlsperrebeenden(kurswahl1 +);enter(2)FI .allewochenstundenangabenpruefen:INT VAR testint;iblock:=1; +WHILE iblock<=letzterblockAND pruefstatus=0REP testint:=int(blockzeile(iblock +).wstd);IF NOT lastconversionokTHEN pruefstatus:=iblockFI ;iblockINCR 1PER . +wochenstundenspeichern:FOR iblockFROM 1UPTO letzterblockREP +planblockeintragen(blockzeile(iblock).blockbez,blockzeile(iblock).wstd)PER . +END PROC kurseaufbloeckeschemaspeichern;PROC eingetragenewochenstundenmerken: +ifnr:=fnrerstewstd;iblock:=erstergezeigterblock;FOR izeileFROM 1UPTO +zeilenprobildschirmREP blockzeile(iblock).wstd:=standardmaskenfeld(ifnr);ifnr +INCR felderprozeile;iblockINCR 1UNTIL iblock>letzterblockPER END PROC +eingetragenewochenstundenmerken;PROC kurseaufbloeckeschemavorblaettern(BOOL +CONST vorwaerts):letztecursorfnrbs2:=infeld;IF letztecursorfnrbs2>= +fnrerstewstdTHEN letztecursorfnrbs2:=fnrerstewstdFI ;IF vorwaertsTHEN IF +letztergezeigterblock=letzterblockTHEN standardmeldung( +meldnrblaetternunmoeglich,"")ELSE eingetragenewochenstundenmerken; +blockschemaausgebenab(letztergezeigterblock+1);infeld(fnrersteblockangabe); +standardfelderausgeben;infeld(letztecursorfnrbs2)FI ELSE IF +erstergezeigterblock=1THEN standardmeldung(meldnrblaetternunmoeglich,"")ELSE +eingetragenewochenstundenmerken;IF erstergezeigterblock>zeilenprobildschirm +THEN blockschemaausgebenab(erstergezeigterblock-zeilenprobildschirm)ELSE +blockschemaausgebenab(1)FI ;infeld(fnrersteblockangabe); +standardfelderausgeben;infeld(letztecursorfnrbs2)FI FI ;return(1)END PROC +kurseaufbloeckeschemavorblaettern;PROC kurseaufbloeckeschemaentfernenfrage: +eingangsbehandlung(2);IF eingangsmaskenfehlerTHEN infeld(pruefstatus);return( +1)ELSE wertedeseingangsbildschirmsmerken;kurswahlinitialisieren(aktjgst, +gewjgst,gewhalbjahr,gewschueler,gewschuljahr);kurswahlbasisholen( +kurswahlstatus);IF kurswahlstatus<>0THEN kurswahlfehlerbehandeln;return(1) +ELIF alleplanblockbezeichner<>""THEN kurswahlsperresetzen(kurswahl1, +kurswahlsperreok);IF NOT kurswahlsperreokTHEN standardmeldung( +meldnrdateninbearbeitung,"");return(1)ELSE wstdfelderschutz:=TRUE ; +blockschemazeigen(2);standardmeldung(meldnrloeschfrage,"");feldfrei(fnrfach); +infeld(fnrfach);standardnprocFI ELSE standardmeldung(meldnrschemagibtsnicht, +"");infeld(fnrgewjgst);return(1)FI FI .END PROC +kurseaufbloeckeschemaentfernenfrage;PROC kurseaufbloeckeschemaentfernen(BOOL +CONST entfernen):IF entfernenTHEN standardmeldung(meldnrloeschen,""); +planbloeckeinitialisierenELSE standardmeldung(meldnrnichtloeschen,"")FI ; +kurswahlsperrebeenden(kurswahl1);enter(2)END PROC +kurseaufbloeckeschemaentfernen;PROC kurseaufbloeckeschemauebernehmenfrage: +eingangsbehandlung(3);IF eingangsmaskenfehlerTHEN infeld(pruefstatus);return( +1)ELSE wertedeseingangsbildschirmsmerken;kurswahlinitialisieren(aktjgst, +gewjgst,gewhalbjahr,gewschueler,gewschuljahr);kurswahlbasisholen( +kurswahlstatus);IF kurswahlstatus<>0THEN kurswahlfehlerbehandeln;return(1) +ELIF alleplanblockbezeichner<>""THEN standardmeldung(meldnrschemagibtsschon, +"");infeld(fnrgewjgst);return(1)ELSE IF planbloeckemitkursenuebernehmenTHEN +allekursedesgewhj:=allekurseFI ;TEXT VAR gewschuljahrsave:=gewschuljahr; +kopiejgst:=standardmaskenfeld(fnrherkunftjgst);kopiehalbjahr:= +standardmaskenfeld(fnrherkunfthj);kurswahlinitialisieren(aktjgst,kopiejgst, +kopiehalbjahr,gewschueler,gewschuljahr);kurswahlbasisholen(kurswahlstatus); +IF kurswahlstatus<>0THEN kurswahlfehlerbehandeln;return(1)ELIF +alleplanblockbezeichner<>""THEN wstdfelderschutz:=TRUE ;gewschuljahr:= +gewschuljahrsave;blockschemazeigen(3);standardmeldung(meldnruebernehmenfrage, +"");feldfrei(fnrfach);infeld(fnrfach);standardnprocELSE standardmeldung( +meldnrschemagibtsnicht,"");infeld(fnrherkunftjgst);return(1)FI FI FI END +PROC kurseaufbloeckeschemauebernehmenfrage;PROC +kurseaufbloeckeschemauebernehmen(BOOL CONST uebernehmen):IF uebernehmenTHEN +standardmeldung(meldnruebernehmen,"");IF planbloeckemitkursenuebernehmenCAND +allekursedesgewhj=""THEN allekursedesherkunfthj:=allekurseFI ; +kurswahlinitialisieren(aktjgst,gewjgst,gewhalbjahr,gewschueler,gewschuljahr); +kurswahlbasisholen(kurswahlstatus);kurswahlsperresetzen(kurswahl1, +kurswahlsperreok);IF NOT kurswahlsperreokTHEN standardmeldung( +meldnrdateninbearbeitung,"");return(1)ELSE +evtlkurseundplanblockschemauebernahmedurchfuehren;kurswahl0sichern( +kurswahlstatus);IF kurswahlstatus<>0THEN kurswahlfehlerbehandeln; +kurswahlsperrebeenden(kurswahl1);return(1)ELSE kurswahl1sichern( +kurswahlstatus);IF kurswahlstatus<>0THEN kurswahlfehlerbehandeln; +kurswahlsperrebeenden(kurswahl1);return(1)ELSE kurswahlsperrebeenden( +kurswahl1);enter(2)FI FI FI ELSE standardmeldung(meldnrnichtuebernehmen,""); +enter(2)FI .allekursealskursedesgewhjeintragen:poskurs:=1;WHILE poskurs<= +length(allekursedesherkunfthj)REP kurseintragen(kursfach,kurskennung,kurswstd +,kursart);poskursINCR laengeallekursangabenPER .kursfach:subtext( +allekursedesherkunfthj,poskurs,poskurs+1).kurskennung:compress(subtext( +allekursedesherkunfthj,poskurs+2,poskurs+5)).kurswstd:subtext( +allekursedesherkunfthj,poskurs+6,poskurs+7).kursart:subtext( +allekursedesherkunfthj,poskurs+8,poskurs+9). +evtlkurseundplanblockschemauebernahmedurchfuehren:IF +planbloeckemitkursenuebernehmenCAND allekursedesgewhj=""THEN +allekursealskursedesgewhjeintragen;allekursedesgewhj:=allekursedesherkunfthj +FI ;FOR iblockFROM 1UPTO letzterblockREP planblockeintragen(blockzeile(iblock +).blockbez,blockzeile(iblock).wstd);IF planbloeckemitkursenuebernehmenTHEN +allekursedesblocks:=blockzeile(iblock).kurse;poskurs:=1;WHILE poskurs<=length +(allekursedesblocks)REP kursbez:=subtext(allekursedesblocks,poskurs,poskurs+ +laengekurs-1);IF suchpos(allekursedesgewhj,kursbez,laengeallekursangaben)>0 +THEN kurszumplanblockeintragen(compress(kursbez),blockzeile(iblock).blockbez) +FI ;poskursINCR laengekursPER ;FI PER .END PROC +kurseaufbloeckeschemauebernehmen;PROC kurseaufbloeckebearbeiten: +eingangsbehandlung(2);IF eingangsmaskenfehlerTHEN infeld(pruefstatus);return( +1)ELSE wertedeseingangsbildschirmsmerken;kurswahlinitialisieren(aktjgst, +gewjgst,gewhalbjahr,gewschueler,gewschuljahr);kurswahlbasisholen( +kurswahlstatus);IF kurswahlstatus<>0THEN kurswahlfehlerbehandeln;return(1) +ELIF alleplanblockbezeichner<>""THEN kurswahlsperresetzen(kurswahl1, +kurswahlsperreok);IF NOT kurswahlsperreokTHEN standardmeldung( +meldnrdateninbearbeitung,"");return(1)ELSE wstdfelderschutz:=TRUE ; +blockschemazeigen(2);feldfrei(fnrfach);feldfrei(fnrart);infeld(fnrfach); +standardnprocFI ELSE standardmeldung(meldnrschemagibtsnicht,"");infeld( +fnrgewjgst);return(1)FI FI END PROC kurseaufbloeckebearbeiten;PROC +kurseaufbloeckeinformationenaufbereiten:fach:=text(standardmaskenfeld(fnrfach +),laengefach);fachart:=text(standardmaskenfeld(fnrart),laengeart);IF +gueltigefachartkombination(fach,fachart,wochenstundenzahl)THEN kurswahl2holen +(kurswahlstatus);IF kurswahlstatus<>0THEN kurswahlfehlerbehandeln;return(1) +ELSE informationenwirklichaufbereiten;standardnprocFI ELSE standardmeldung( +meldnrfachartkombinationungueltig,"");return(1)FI . +informationenwirklichaufbereiten:feldschutzfuerinfosetzen;standardmaskenfeld( +fach,fnrausgabefach);anzahlschuelermitfachart:=anzahlschuelermitwahl(fach,"", +fachart,"");standardmaskenfeld(text(anzahlschuelermitfachart), +fnranzahlschueler);standardmaskenfeld(text(wochenstundenzahl), +fnrwochenstunden);kursezufachundartbestimmen;standardmaskenfeld(text( +anzahlkursezufachart),fnranzahlkurse);IF anzahlkursezufachart>0THEN +anzahlschuelerprokurs:=anzahlschuelermitfachartDIV anzahlkursezufachart; +standardmaskenfeld(text(anzahlschuelerprokurs),fnrschuelerprokurs)ELSE +standardmaskenfeld(" ",fnrschuelerprokurs)FI ;iblock:=0;posplanblock:=1; +WHILE posplanblock<length(alleplanblockbez)REP iblockINCR 1;blocknr:=subtext( +alleplanblockbez,posplanblock,posplanblock+2);blockzeile(iblock).frei:= +anzahlfreierschuelerimplanblock(subtext(blocknr,1,2),blocknrSUB 3,fach,"", +fachart,"");posplanblockINCR planblocklaengeUNTIL iblock=letzterblockPER ; +blockschemaausgebenab(erstergezeigterblock);infeld(fnrwochenstunden); +standardfelderausgeben;infeld(fnrersterkurs).feldschutzfuerinfosetzen: +feldschutz(fnrfach);feldschutz(fnrart);eingabefelderoeffnen(fnrersterkurs, +fnrletzterblock).kursezufachundartbestimmen:allekursedesgewhj:=allekurse; +poskurs:=1;anzahlkursezufachart:=0;ifnr:=fnrersterkurs;FOR ifachkursFROM 1 +UPTO maxfachkursREP suchegewuenschtenkursinkursendeshj;IF gefundenerkurs<>"" +THEN standardmaskenfeld(compress(gefundenerkurs),ifnr);standardmaskenfeld( +compress(gefundenerblock1),ifnr+1);standardmaskenfeld(compress( +gefundenerblock2),ifnr+2);anzahlkursezufachartINCR 1ELSE standardmaskenfeld( +"",ifnr);standardmaskenfeld("",ifnr+1);standardmaskenfeld("",ifnr+2)FI ; +kurstab(ifachkurs).kursname:=standardmaskenfeld(ifnr);kurstab(ifachkurs). +blocknr1:=standardmaskenfeld(ifnr+1);kurstab(ifachkurs).blocknr2:= +standardmaskenfeld(ifnr+2);ifnrINCR felderprokursPER . +suchegewuenschtenkursinkursendeshj:gefundenerkurs:="";WHILE poskurs<=length( +allekursedesgewhj)REP angabenzueinemkurs:=subtext(allekursedesgewhj,poskurs, +poskurs+laengeallekursangaben-1);IF subtext(angabenzueinemkurs,1,2)=fachCAND +subtext(angabenzueinemkurs,9,10)=fachartTHEN gefundenerkurs:=subtext( +angabenzueinemkurs,1,6);gefundeneplanbloecke:=kursdaten(gefundenerkurs, +kennungplanbloecke);gefundenerblock1:=subtext(gefundeneplanbloecke,1,3); +gefundenerblock2:=subtext(gefundeneplanbloecke,4,6);gefundenerkurs:=subtext( +gefundenerkurs,3)FI ;poskursINCR laengeallekursangabenUNTIL gefundenerkurs<> +""PER .END PROC kurseaufbloeckeinformationenaufbereiten;BOOL PROC +gueltigefachartkombination(TEXT CONST prueffach,pruefart,INT VAR +auswochenstundenzahl):INT VAR postreffer;IF fachartkombinationen=""THEN +standardmeldung(meldnrbittewarten,"");holeallefachartkombinationenFI ; +postreffer:=suchpos(fachartkombinationen,prueffach+pruefart,laengefachartstd) +;IF postreffer=0THEN FALSE ELSE auswochenstundenzahl:=int( +fachartkombinationenSUB (postreffer+incrwstd));TRUE FI . +holeallefachartkombinationen:TEXT VAR aktuellesschuljahr:=schulkenndatum( +schuljahr);inittupel(dnrfaecherangebot);fanghj:=aktuelleshalbjahr;fangsj:= +aktuellesschuljahr;IF NOT (gewhalbjahr=aktuelleshalbjahrAND gewschuljahr= +aktuellesschuljahr)THEN geplanteshjundsjberechnen(fanghj,fangsj)FI ;putwert( +fnrfangsj,fangsj);putwert(fnrfanghj,fanghj);putwert(fnrfangjgst,gewjgst); +search(dnrfaecherangebot,FALSE );statleseschleife(dnrfaecherangebot,fangsj, +fanghj,fnrfangsj,fnrfanghj,PROC fanglesen)END PROC gueltigefachartkombination +;PROC fanglesen(BOOL VAR b):IF dbstatus=0AND wert(fnrfangsj)=fangsjAND wert( +fnrfanghj)=fanghjAND wert(fnrfangjgst)=gewjgstTHEN fachartkombinationenCAT +text(wert(fnrfangfach),laengefach);fachartkombinationenCAT text(wert( +fnrfangart),laengeart);fachartkombinationenCAT text(wert(fnrfangwochenstd),1) +ELSE b:=TRUE FI END PROC fanglesen;PROC kurseaufbloeckerechtehaelftezeigen( +BOOL CONST rechts):rechtetabellenhaelftezeigen:=rechts;letztecursorfnrbs2:= +infeld;blockschemaausgebenab(erstergezeigterblock);infeld(fnrersteblockangabe +);standardfelderausgeben;infeld(letztecursorfnrbs2);return(1)END PROC +kurseaufbloeckerechtehaelftezeigen;PROC kurseaufbloeckeaenderungenspeichern( +BOOL CONST speichern):IF speichernTHEN kurszuordnungenpruefen;IF pruefstatus> +0THEN infeld(pruefstatus);return(1)ELSE kurszuordnungenspeichern; +kurswahl0sichern(kurswahlstatus);IF kurswahlstatus<>0THEN +kurswahlfehlerbehandeln;return(1)ELSE kurswahl1sichern(kurswahlstatus);IF +kurswahlstatus<>0THEN kurswahlfehlerbehandeln;return(1)ELSE +zurueckzumbearbeitungsanfangFI FI ;FI ;ELSE standardmeldung( +meldnrnichtspeichern,"");zurueckzumbearbeitungsanfangFI . +kurszuordnungenpruefen:standardmeldung(meldnrdatenwerdengeprueft,""); +pruefstatus:=0;ifnr:=fnrersterkurs;WHILE ifnr<fnrletzterblockREP kursbez:= +standardmaskenfeld(ifnr);IF kursbezdoppeltangegebenTHEN pruefstatus:=ifnr; +standardmeldung(meldnrangabenichtsinnvoll,"");LEAVE kurszuordnungenpruefenFI +;IF kursbez=""CAND (standardmaskenfeld(ifnr+1)<>""OR standardmaskenfeld(ifnr+ +2)<>"")THEN pruefstatus:=ifnr;standardmeldung(meldnrbitteangabeergaenzen,""); +LEAVE kurszuordnungenpruefenFI ;pruefblockbez:=standardmaskenfeld(ifnr+1);IF +ungueltigepruefblockbezTHEN pruefstatus:=ifnr+1;standardmeldung( +meldnrangabenichtsinnvoll,"");LEAVE kurszuordnungenpruefenFI ;pruefblockbez:= +standardmaskenfeld(ifnr+2);IF ungueltigepruefblockbezTHEN pruefstatus:=ifnr+2 +;standardmeldung(meldnrangabenichtsinnvoll,"");LEAVE kurszuordnungenpruefen +FI ;ifnrINCR felderprokursPER .ungueltigepruefblockbez:pruefblockbez<>""AND ( +suchpos(alleplanblockbez,pruefblockbez,planblocklaenge)=0COR length(compress( +pruefblockbez))<laengeblocknr).kursbezdoppeltangegeben:INT VAR ifnrpruef:= +ifnr;kursbez:=compress(kursbez);IF kursbez<>""THEN WHILE ifnrpruef> +fnrersterkursREP ifnrpruefDECR felderprokurs;IF kursbez=compress( +standardmaskenfeld(ifnrpruef))THEN LEAVE kursbezdoppeltangegebenWITH TRUE FI +;PER ;FI ;FALSE .kurszuordnungenspeichern:TEXT VAR kompkursbez; +standardmeldung(meldnrspeichern,"");ifnr:=fnrersterkurs;ifachkurs:=1;WHILE +ifnr<fnrletzterblockREP kompkursbez:=compress(standardmaskenfeld(ifnr));IF +kompkursbez<>""THEN IF kurstab(ifachkurs).kursname=""THEN kursneuaufnehmen +ELSE kursevtlueberschreibenFI ELSE IF kurstab(ifachkurs).kursname<>""THEN +kursentfernenFI FI ;ifachkursINCR 1;ifnrINCR felderprokursPER . +kursevtlueberschreiben:IF kompkursbez=kurstab(ifachkurs).kursnameTHEN kursbez +:=standardmaskenfeld(fnrausgabefach);kursbezCAT kompkursbez; +planbloeckezumkurseintragen(kursbez,standardmaskenfeld(ifnr+1), +standardmaskenfeld(ifnr+2))ELSE kursentfernen;kursneuaufnehmenFI . +kursneuaufnehmen:kursbez:=standardmaskenfeld(fnrausgabefach);kursbezCAT +kompkursbez;kurseintragen(standardmaskenfeld(fnrausgabefach),kompkursbez, +standardmaskenfeld(fnrwochenstunden),standardmaskenfeld(fnrart)); +planbloeckezumkurseintragen(kursbez,standardmaskenfeld(ifnr+1), +standardmaskenfeld(ifnr+2)).kursentfernen:kursbez:=standardmaskenfeld( +fnrausgabefach);kursbezCAT kurstab(ifachkurs).kursname;kursloeschen(fach, +kurstab(ifachkurs).kursname).zurueckzumbearbeitungsanfang:wstdfelderschutz:= +TRUE ;IF speichernTHEN blockschemaneufuellen;blockschemaausgebenab(1)FI ; +eingabefeldersperren(fnrersterkurs,fnrletzterblock);feldfrei(fnrfach); +feldfrei(fnrart);FOR ifnrFROM fnrwochenstundenUPTO fnrletzterblockREP +standardmaskenfeld("",ifnr)PER ;infeld(fnrfach);return(2). +blockschemaneufuellen:iblock:=0;posplanblock:=1;WHILE posplanblock<length( +alleplanblockbez)REP iblockINCR 1;blocknr:=subtext(alleplanblockbez, +posplanblock,posplanblock+2);blockzeile(iblock).frei:=0;blockzeile(iblock). +kurse:=planblockdaten(blocknr,kennungkurse);posplanblockINCR planblocklaenge +UNTIL iblock=maxtabzeilenPER .END PROC kurseaufbloeckeaenderungenspeichern; +INT PROC stundenzahl(INT CONST feldnr):pruefblockbez:=standardmaskenfeld( +feldnr);IF pruefblockbez=""THEN 0ELSE int(planblockdaten(pruefblockbez, +kennungwstd))FI END PROC stundenzahl;PROC kurseaufbloeckeschemaeinteilen: +feldschutz(fnrfach);feldschutz(fnrart);wstdfelderschutz:=FALSE ; +blockschemaausgebenab(erstergezeigterblock);infeld(fnrerstewstd); +standardfelderausgeben;infeld(fnrerstewstd);standardnprocEND PROC +kurseaufbloeckeschemaeinteilen;PROC kurseaufbloecketeilblockabspalten:ifnr:= +infeld;blocknr:=standardmaskenfeld(ifnr-1);iblockbestimmen;IF (blocknrSUB +posblockkennung)<>" "THEN standardmeldung(meldnrblocknichtteilbar,"")ELIF +text(blocknr,2)=naechsteblocknummerTHEN standardmeldung( +meldnrblocknichtteilbar,"")ELIF standardmaskenfeld(ifnr)<"0"OR +standardmaskenfeld(ifnr)>blockzeile(iblock).wstdTHEN standardmeldung( +meldnrangabenichtsinnvoll,"")ELSE teilblockabspaltendurchfuehrenFI ;return(1) +.naechsteblocknummer:IF iblock=letzterblockTHEN ""ELSE text(blockzeile(iblock ++1).blockbez,2)FI .teilblockabspaltendurchfuehren:blockwstd1:=int( +standardmaskenfeld(ifnr));blockwstd2:=int(blockzeile(iblock).wstd)-blockwstd1 +;planblockteilen(text(blocknr,2),text(blockwstd1),text(blockwstd2)); +kurswahl1sichern(kurswahlstatus);IF kurswahlstatus<>0THEN +kurswahlfehlerbehandelnELSE erstergezeigterblock:=iblock;blockschemafuellen; +blockschemaausgebenab(erstergezeigterblock);infeld(fnrersteblockangabe); +standardfelderausgeben;infeld(fnrerstewstd)FI END PROC +kurseaufbloecketeilblockabspalten;PROC iblockbestimmen:iblock:= +erstergezeigterblock+incrblock.incrblock:(ifnr-fnrerstewstd)DIV +felderprozeileEND PROC iblockbestimmen;PROC kurseaufbloecketeilblockentfernen +:ifnr:=infeld;blocknr:=standardmaskenfeld(ifnr-1);IF (blocknrSUB +posblockkennung)<>" "THEN standardmeldung(meldnrteilblockentfernen,"")ELSE +iblockbestimmen;IF teilbloeckevorhandenTHEN IF teilblockkurseidentischTHEN +allekursedesblocks:=blockzeile(iblock+1).kurse;planblockloeschen(blockzeile( +iblock+1).blockbez);planblockloeschen(blockzeile(iblock+2).blockbez); +allekurseinblocknreintragen;kurswahl1sichern(kurswahlstatus);IF +kurswahlstatus<>0THEN kurswahlfehlerbehandelnELSE blockschemafuellen; +blockschemaausgebenab(erstergezeigterblock);infeld(fnrersteblockangabe); +standardfelderausgeben;infeld(fnrerstewstd)FI ELSE standardmeldung( +meldnrteilblockentfernen,"")FI ELSE standardmeldung(meldnrteilblockentfernen, +"")FI FI ;return(1).teilbloeckevorhanden:text(blocknr,laengeblocknr)= +naechsteblocknummer.naechsteblocknummer:IF iblock=letzterblockTHEN ""ELSE +text(blockzeile(iblock+1).blockbez,laengeblocknr)FI .teilblockkurseidentisch: +blockzeile(iblock+1).kurse=blockzeile(iblock+2).kurse. +allekurseinblocknreintragen:poskurs:=1;WHILE poskurs<=length( +allekursedesblocks)REP kursbez:=subtext(allekursedesblocks,poskurs,poskurs+ +laengekurs-1);kurszumplanblockeintragen(kursbez,blocknr);poskursINCR +laengekursPER .END PROC kurseaufbloecketeilblockentfernen;PROC +kurseaufbloeckeschemanichtweiteraendern:INT VAR meldnrfehler; +eingetragenewochenstundenmerken;pruefstatus:=0; +allewochenstundenangabenpruefen;IF pruefstatus<>0THEN standardmeldung( +meldnrfehler,"");blockschemaausgebenab(pruefstatus);infeld( +fnrersteblockangabe);standardfelderausgeben;infeld(fnrerstewstd);return(1) +ELSE standardmeldung(meldnrspeichern,"");wochenstundenspeichern; +kurswahl1sichern(kurswahlstatus);feldfrei(fnrfach);feldfrei(fnrart); +wstdfelderschutz:=TRUE ;eingabefeldersperren(fnrerstewstd,fnrletztewstd, +felderprozeile);infeld(fnrfach);return(2)FI .allewochenstundenangabenpruefen: +INT VAR testint;iblock:=1;WHILE iblock<=letzterblockAND pruefstatus=0REP +testint:=int(blockzeile(iblock).wstd);IF NOT lastconversionokTHEN pruefstatus +:=iblock;meldnrfehler:=meldnrkeinezahlELIF ((blockzeile(iblock).blockbez)SUB +posblockkennung)=kennungteilblockbTHEN IF int(blockzeile(iblock-2).wstd)<>int +(blockzeile(iblock-1).wstd)+int(blockzeile(iblock).wstd)THEN pruefstatus:= +iblock-2;meldnrfehler:=meldnrstundensummmestimmtnichtFI FI ;iblockINCR 1PER . +wochenstundenspeichern:FOR iblockFROM 1UPTO letzterblockREP +planblockeintragen(blockzeile(iblock).blockbez,blockzeile(iblock).wstd)PER . +END PROC kurseaufbloeckeschemanichtweiteraendern;PROC eingangsbehandlung(INT +CONST art):pruefstatus:=0;aktjgst:=standardmaskenfeld(fnraktjgst);gewhalbjahr +:=standardmaskenfeld(fnrhalbjahr);gewjgst:=standardmaskenfeld(fnrgewjgst); +neuanjgst:=standardmaskenfeld(fnrneuanjgst);kopiehalbjahr:=standardmaskenfeld +(fnrherkunfthj);kopiejgst:=standardmaskenfeld(fnrherkunftjgst); +aktuelleshalbjahr:=schulkenndatum(schulhalbjahr);allgemeinefelderpruefen;IF +pruefstatus=0THEN IF art=1OR art=2THEN bearbeitungfelderpruefenELIF art=3 +THEN uebernahmefelderpruefen;planbloeckemitkursenuebernehmen:= +standardmaskenfeld(fnrmitkursen)<>""FI FI .allgemeinefelderpruefen: +standardpruefe(3,fnrgewjgst,jgst11,jgst13,"",pruefstatus);IF pruefstatus>0 +THEN LEAVE allgemeinefelderpruefenFI ;standardpruefe(3,fnrhalbjahr,hj1,hj2,"" +,pruefstatus);IF pruefstatus>0THEN LEAVE allgemeinefelderpruefenFI ;IF +aktjgst<>""THEN IF int(aktuelleshalbjahr)=hj2THEN standardpruefe(3,fnraktjgst +,jgst10,jgst13,"",pruefstatus)ELSE standardpruefe(3,fnraktjgst,jgst11,jgst13, +"",pruefstatus)FI ;IF pruefstatus>0THEN LEAVE allgemeinefelderpruefenFI ;FI ; +IF neuanjgst<>""THEN standardpruefe(3,fnrneuanjgst,jgst11,jgst13,"", +pruefstatus);IF pruefstatus>0THEN LEAVE allgemeinefelderpruefenFI ;FI ;IF +aktjgst<>""THEN IF neuanjgst<>""THEN IF int(neuanjgst)<>int(aktjgst)+1THEN +standardmeldung(meldnrfalschejgstfolge,"");pruefstatus:=fnraktjgst;LEAVE +allgemeinefelderpruefenFI ;gewschueler:=""ELSE gewschueler:= +nuraktuelleschuelerFI ELIF neuanjgst=""THEN standardmeldung( +meldnrbitteangabeergaenzen,"");pruefstatus:=fnraktjgst;LEAVE +allgemeinefelderpruefenELSE gewschueler:=nurneuangemeldete;aktjgst:=text(int( +neuanjgst)-1)FI ;IF aktjgst>gewjgstCOR (aktjgst=gewjgstAND aktuelleshalbjahr> +gewhalbjahr)THEN standardmeldung(meldnrfalschebezugsjgst,"");pruefstatus:= +fnrgewjgst;LEAVE allgemeinefelderpruefenFI .bearbeitungfelderpruefen:IF +standardmaskenfeld(fnrherkunftjgst)<>""THEN standardmeldung( +meldnrfeldleerlassen,"");pruefstatus:=fnrherkunftjgst;LEAVE +bearbeitungfelderpruefenFI ;IF standardmaskenfeld(fnrherkunfthj)<>""THEN +standardmeldung(meldnrfeldleerlassen,"");pruefstatus:=fnrherkunfthj;LEAVE +bearbeitungfelderpruefenFI ;IF standardmaskenfeld(fnrmitkursen)<>""THEN +standardmeldung(meldnrfeldleerlassen,"");pruefstatus:=fnrmitkursen;LEAVE +bearbeitungfelderpruefenFI .uebernahmefelderpruefen:standardpruefe(3, +fnrherkunftjgst,jgst11,jgst13,"",pruefstatus);IF pruefstatus>0THEN LEAVE +uebernahmefelderpruefenFI ;standardpruefe(3,fnrherkunfthj,hj1,hj2,"", +pruefstatus);IF pruefstatus>0THEN LEAVE uebernahmefelderpruefenFI ;IF gewjgst +=kopiejgstCAND gewhalbjahr=kopiehalbjahrTHEN pruefstatus:=fnrgewjgst; +standardmeldung(meldnruebernahmeingleicheshj,"");LEAVE +uebernahmefelderpruefenFI ;END PROC eingangsbehandlung;BOOL PROC +eingangsmaskenfehler:pruefstatus<>0END PROC eingangsmaskenfehler;INT PROC +suchpos(TEXT CONST quelle,suchtext,INT CONST laenge):INT VAR findpos:=pos( +quelle,suchtext);WHILE findpos>0REP IF findposMOD laenge=1THEN LEAVE suchpos +WITH findposELSE findpos:=pos(quelle,suchtext,findpos+1);FI PER ;findposEND +PROC suchpos;PROC eingabefeldersperren(INT CONST von,bis): +eingabefeldersperren(von,bis,1)END PROC eingabefeldersperren;PROC +eingabefeldersperren(INT CONST von,bis,abstand):INT VAR ifnr:=von;WHILE ifnr +<=bisREP feldschutz(ifnr);ifnrINCR abstandPER END PROC eingabefeldersperren; +PROC eingabefelderoeffnen(INT CONST von,bis):eingabefelderoeffnen(von,bis,1) +END PROC eingabefelderoeffnen;PROC eingabefelderoeffnen(INT CONST von,bis, +abstand):INT VAR ifnr:=von;WHILE ifnr<=bisREP feldfrei(ifnr);ifnrINCR abstand +PER END PROC eingabefelderoeffnen;PROC initfelderdeseingangsbildschirms:INT +VAR i;FOR iFROM 1UPTO 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;TEXT PROC textzweistellig(INT CONST i):IF i< +10THEN "0"+text(i)ELSE text(i)FI END PROC textzweistellig;END PACKET +kurseaufplanbloeckelegen + |