diff options
Diffstat (limited to 'app/schulis/2.2.1/src/4.faecherangebot planen')
-rw-r--r-- | app/schulis/2.2.1/src/4.faecherangebot planen | 369 |
1 files changed, 369 insertions, 0 deletions
diff --git a/app/schulis/2.2.1/src/4.faecherangebot planen b/app/schulis/2.2.1/src/4.faecherangebot planen new file mode 100644 index 0000000..91d301d --- /dev/null +++ b/app/schulis/2.2.1/src/4.faecherangebot planen @@ -0,0 +1,369 @@ +PACKET planefaecherangebotDEFINES fachangpruefuebern,fachangpruefbearb, +fachangmodbldsch,fachangstdvproc,fachanguebern,fachangspeichern:LET sj= +"Schuljahr",hj="Schulhalbjahr",art="c02 art lehrveranstaltung",eingmaske= +"ms erf faecherangebot",bearbmaske="ms bearb faecherangebot", +kennzeichnunggeplant="geplant",maxzahl=99,minzahl=0,bearbzl=19,jgstfeldnr=10, +meldg0=56,meldg1=300,meldg3=302,meldg4=303,meldg5=304,meldg6=305,meldg7=306, +meldg8=307,meldg9=308,meldg11=310,meldg12=311,meldg10=318,meldg13=315,meldg14 +=312,meldg15=313,meldg16=314,meldg17=69,meldg18=57,meldg19=50,trenner="�"; +ROW 10TEXT VAR eingbldsch;ROW bearbzlINT VAR dbsatzbsnr;ROW bearbzlSTRUCT ( +TEXT fach,TEXT art,TEXT wstd,TEXT anz)VAR bearbbldsch;ROW bearbzlSTRUCT ( +TEXT fach,TEXT art,TEXT wstd,TEXT anz,)VAR dbinh;INT VAR i,j,k,letztepos:=2, +status,zeignr:=1,z1dbnr:=1,nzaehler:=0,ersteeinfuegezeile:=1,bszeiger:=1, +dbzeiger:=1,letztejgst:=1,anzbssaetze,anzdbsaetze,letztebearbzeile:=0;TEXT +VAR fa:="",ar:="",ws:="",an:="",tupel:="",fachkatalog,artkatalog, +maskenkopferg:="";INT VAR aktzeile:=0;TEXT VAR aktschhj:="0",aktschj:="0", +geplschhj:="0",geplschj:="0";BOOL VAR okay:=TRUE ,rueck,istfehler,neu:=FALSE +,dbfa2,bldfa2,f2:=FALSE ,f3:=FALSE ,f6:=FALSE ,modifsatzgeprueft:=FALSE , +keinescn:=TRUE ,saetzeunveraendert;PROC holeaktdaten:statleseschleife( +dnrfaecher,"","",fnrffach,fnrffach,PROC fachcat);statleseschleife( +dnrschluessel,art,"",fnrschlsachgebiet,fnrschlschluessel,PROC artcat)END +PROC holeaktdaten;PROC holeakthj:aktschhj:=schulkenndatum(hj);aktschj:= +schulkenndatum(sj);geplschhj:=aktschhj;geplschj:=aktschj; +geplanteshjundsjberechnen(geplschhj,geplschj);maskenkopferg:=text( +vergleichsknoten)+" "+geplschhj+". "+text(geplschj,2)+"/"+subtext(geplschj,3) +END PROC holeakthj;PROC initrows:fachkatalog:=trenner;artkatalog:=trenner; +FOR iFROM 1UPTO 10REP eingbldsch(i):=""PER ;FOR iFROM 1UPTO bearbzlREP +bearbbldsch(i).fach:="";bearbbldsch(i).art:="";bearbbldsch(i).wstd:=""; +bearbbldsch(i).anz:="";dbsatzbsnr(i):=0;dbinh(i).fach:="";dbinh(i).art:=""; +dbinh(i).wstd:="";dbinh(i).anz:="";PER ;END PROC initrows;PROC +fachangpruefuebern:merkeeingsch;f2:=FALSE ;f3:=FALSE ;f6:=FALSE ;okay:=TRUE ; +fall1;fall2;fall3;fall6;fall9;IF okayTHEN merkeeingsch;standardmeldung(meldg1 +,"");standardnprocELSE IF NOT rueckTHEN fachangzurueckmitmeldg(meldg0,1, +letztepos,"")FI FI .fall1:IF eingbldsch(2)=""CAND eingbldsch(3)=""CAND +eingbldsch(6)=""THEN fachangzurueckmitmeldg(meldg0,1,0,"");LEAVE +fachangpruefuebernFI .fall2:IF eingbldsch(2)<>""THEN f2:=TRUE ;prueferestFI . +prueferest:FOR iFROM 3UPTO 10REP IF eingbldsch(i)<>""THEN okay:=FALSE ; +letztepos:=2;FI PER .fall3:IF eingbldsch(3)<>""CAND okayTHEN f3:=TRUE ; +pruefandereFI .pruefandere:IF eingbldsch(2)<>""THEN okay:=FALSE FI ;FOR i +FROM 6UPTO 10REP IF eingbldsch(i)<>""THEN okay:=FALSE FI PER ;IF NOT okay +THEN fachangzurueckmitmeldg(meldg0,1,0,"");LEAVE fachangpruefuebernFI ;IF +eingbldsch(4)=""CAND okayTHEN fachangzurueckmitmeldg(meldg5,1,4,"");LEAVE +fachangpruefuebernFI ;IF eingbldsch(5)=""CAND okayTHEN fachangzurueckmitmeldg +(meldg5,1,5,"");LEAVE fachangpruefuebernFI ;pruefjgst(4);IF NOT okayTHEN +LEAVE fachangpruefuebernFI ;pruefjgst(5);IF NOT okayTHEN LEAVE +fachangpruefuebernFI .fall6:IF eingbldsch(6)<>""CAND okayTHEN f6:=TRUE ; +pruefnochFI .pruefnoch:FOR iFROM 2UPTO 5REP IF eingbldsch(i)<>""THEN okay:= +FALSE FI PER ;FOR iFROM 9UPTO 10REP IF eingbldsch(i)<>""THEN okay:=FALSE FI +PER ;IF NOT okayTHEN fachangzurueckmitmeldg(meldg0,1,0,"");LEAVE +fachangpruefuebernFI ;IF eingbldsch(7)=""CAND okayTHEN fachangzurueckmitmeldg +(meldg5,1,7,"");LEAVE fachangpruefuebernFI ;IF eingbldsch(8)=""CAND okayTHEN +fachangzurueckmitmeldg(meldg5,1,8,"");LEAVE fachangpruefuebernFI ;pruefjgst(7 +);IF NOT okayTHEN LEAVE fachangpruefuebernFI ;pruefjgst(8);IF NOT okayTHEN +LEAVE fachangpruefuebernFI ;IF eingbldsch(7)=eingbldsch(8)THEN +fachangzurueckmitmeldg(meldg0,1,7,"");LEAVE fachangpruefuebernFI .fall9:IF +eingbldsch(9)<>""COR eingbldsch(10)<>""CAND okayTHEN IF NOT rueckTHEN +fachangzurueckmitmeldg(meldg10,1,letztepos,"")FI ;LEAVE fachangpruefuebernFI +.END PROC fachangpruefuebern;PROC fachangpruefbearb:standardmeldung(meldg17, +" ");merkeeingsch;okay:=TRUE ;FOR iFROM 2UPTO 8REP IF eingbldsch(i)<>""THEN +fachangzurueckmitmeldg(meldg10,1,i,"");LEAVE fachangpruefbearbFI ;PER ;IF +eingbldsch(9)=""CAND okayTHEN fachangzurueckmitmeldg(meldg0,1,i,"");LEAVE +fachangpruefbearbFI ;IF eingbldsch(10)=""THEN fachangzurueckmitmeldg(meldg5,1 +,10,"");LEAVE fachangpruefbearbELSE pruefjgst(10);FI ;IF okayCAND eingbldsch( +10)<>""THEN erfasstefelderausgeben(zeignr);standardnprocELSE IF NOT rueck +THEN fachangzurueckmitmeldg(meldg0,1,0,"")FI FI .END PROC fachangpruefbearb; +PROC pruefjgst(INT CONST eingbldschindex):rueck:=FALSE ;IF compress( +eingbldsch(eingbldschindex))="0"COR eingbldsch(eingbldschindex)="00"THEN +LEAVE pruefjgstELIF int(eingbldsch(eingbldschindex))>4CAND int(eingbldsch( +eingbldschindex))<14THEN LEAVE pruefjgstELSE fachangzurueckmitmeldg(meldg6,1, +0,"");okay:=FALSE ;rueck:=TRUE ;infeld(eingbldschindex);FI END PROC pruefjgst +;PROC pruefdbfd(TEXT CONST objekt,katalog):IF pos(katalog,trenner+objekt+ +trenner)<1THEN istfehler:=TRUE ;IF katalog=fachkatalogTHEN +fachangzurueckmitmeldg(meldg11,0,i*4-1,"")ELSE fachangzurueckmitmeldg(meldg12 +,0,i*4,"")FI FI .END PROC pruefdbfd;PROC prueftypfd(INT CONST feld): +standardpruefe(3,feld,minzahl,maxzahl,"",status);IF status>0THEN istfehler:= +TRUE ;infeld(feld)FI END PROC prueftypfd;PROC fachangstdvproc:gibeingschaus; +standardnproc.END PROC fachangstdvproc;PROC gibeingschaus:zeignr:=1; +standardstartproc(eingmaske);gibeingbldschaus;infeld(2); +standardfelderausgeben;infeld(letztepos).gibeingbldschaus:FOR iFROM 1UPTO 10 +REP standardmaskenfeld(eingbldsch(i),i);IF eingbldsch(i)<>""THEN letztepos:=i +FI PER .END PROC gibeingschaus;PROC erfasstefelderausgeben(INT CONST znr): +ersteeinfuegezeile:=1;keinescn:=TRUE ;IF aktschhj="0"THEN holeakthjFI ;z1dbnr +:=znr;anzdbsaetze:=0;j:=1;IF znr=1THEN loeschedbinh;standardstartproc( +bearbmaske);standardkopfmaskeaktualisieren(maskenkopferg);standardmaskenfeld( +eingbldsch(jgstfeldnr),2);ELSE loeschefelder;FI ;putwert(fnrfangsj,geplschj); +putwert(fnrfanghj,geplschhj);putintwert(fnrfangjgst,int(eingbldsch(jgstfeldnr +)));putintwert(fnrfanglfdnr,znr);search(dnrfaecherangebot,FALSE );IF dbstatus +<>okTHEN gibleerenbildschirmELIF wert(fnrfangsj)=geplschjCAND intwert( +fnrfanglfdnr)=znrCAND intwert(fnrfangjgst)=int(eingbldsch(jgstfeldnr))CAND +wert(fnrfanghj)=geplschhjTHEN z1dbnr:=intwert(fnrfanglfdnr);k:=1; +startebildschirmblock(dnrfaecherangebot,bearbzl-1);bildschirmblock(PROC +gibbearbzeileaus,BOOL PROC (INT CONST )pruefung,i);neu:=FALSE ;ELSE +gibleerenbildschirmFI ;infeld(2);standardfelderausgeben;infeld(k*4-1). +gibleerenbildschirm:infeld(2);standardfelderausgeben;infeld(3);IF znr=1THEN +neu:=TRUE ;FI ;LEAVE erfasstefelderausgeben.loeschedbinh:FOR iFROM 1UPTO +bearbzlREP dbsatzbsnr(i):=0;dbinh(i).fach:="";dbinh(i).art:="";dbinh(i).wstd +:="";dbinh(i).anz:="";PER .loeschefelder:FOR iFROM 1UPTO bearbzlREP dbinh(i). +fach:="";dbinh(i).art:="";dbinh(i).wstd:="";dbinh(i).anz:="";PER ; +standardstartproc(bearbmaske);standardkopfmaskeaktualisieren(maskenkopferg); +standardmaskenfeld(eingbldsch(jgstfeldnr),2).END PROC erfasstefelderausgeben; +PROC gibbearbzeileaus:merkdbwerte;standardmaskenfeld(fa,k*4-1); +standardmaskenfeld(ar,k*4);standardmaskenfeld(ws,k*4+1);standardmaskenfeld(an +,k*4+2);IF k<bearbzlTHEN kINCR 1FI .merkdbwerte:fa:=wert(fnrfangfach);ar:= +wert(fnrfangart);ws:=wert(fnrfangwochenstd);an:=wert(fnrfanganzlv);dbinh(k). +fach:=fa;dbinh(k).art:=ar;dbinh(k).wstd:=ws;dbinh(k).anz:=an;anzdbsaetzeINCR +1;dbsatzbsnr(k):=k.END PROC gibbearbzeileaus;BOOL PROC pruefung(INT CONST i): +int(eingbldsch(jgstfeldnr))=intwert(fnrfangjgst)CAND geplschhj=wert(fnrfanghj +)CAND geplschj=wert(fnrfangsj)END PROC pruefung;PROC merkeeingsch:FOR iFROM 1 +UPTO 10REP eingbldsch(i):=standardmaskenfeld(i)PER ;END PROC merkeeingsch; +PROC fachcat(BOOL VAR b):fachkatalogCAT wert(fnrffach)+trenner;END PROC +fachcat;PROC artcat(BOOL VAR b):IF wert(fnrschlsachgebiet)>artCOR dbstatus<>0 +THEN b:=TRUE ELSE artkatalogCAT wert(fnrschlschluessel)+trennerFI END PROC +artcat;PROC merkebearbsch:anzbssaetze:=0;FOR iFROM 1UPTO letztebearbzeileREP +bearbbldsch(i).fach:=standardmaskenfeld((i-1)*4+3);bearbbldsch(i).art:= +standardmaskenfeld((i-1)*4+4);bearbbldsch(i).wstd:=standardmaskenfeld((i-1)*4 ++5);bearbbldsch(i).anz:=standardmaskenfeld((i-1)*4+6);IF compress(bearbbldsch +(i).fach)<>""THEN anzbssaetzeINCR 1FI PER ;IF letztebearbzeile<bearbzlTHEN +FOR iFROM letztebearbzeile+1UPTO bearbzlREP bearbbldsch(i).fach:=""; +bearbbldsch(i).art:="";bearbbldsch(i).wstd:="";bearbbldsch(i).anz:="";PER FI +END PROC merkebearbsch;PROC fachangzurueckmitmeldg(INT CONST meldg, +ruecksprung,feld,TEXT CONST markiert):standardmeldung(meldg,markiert);IF feld +>0THEN infeld(feld)FI ;IF ruecksprung>0THEN return(ruecksprung)FI END PROC +fachangzurueckmitmeldg;PROC fachanguebern(BOOL CONST b):IF bTHEN IF aktschhj= +"0"THEN holeakthjFI ;letztejgst:=1;IF f2THEN uebernaktkompELIF f3THEN +uebernaktpartELIF f6THEN ueberngeplpartFI ;aenderungsvermerksetzen( +kennzeichnunggeplant)ELSE standardmeldung(meldg4,"");infeld(2);return(2)FI +END PROC fachanguebern;PROC uebernaktkomp:putwert(fnrfangsj,aktschj);putwert( +fnrfanghj,aktschhj);putintwert(fnrfangjgst,0);putintwert(fnrfanglfdnr,1); +search(dnrfaecherangebot,FALSE );IF dbstatus<>okTHEN +meldungdatennichtuebernommenELIF wert(fnrfangsj)<>aktschjCAND wert(fnrfanghj) +<>aktschhjTHEN meldungdatennichtuebernommenELSE savetupel(dnrfaecherangebot, +tupel);loeschevorhandenesaetze(2);restoretupel(dnrfaecherangebot,tupel); +schreibtupelFI ;korrtupelindbpuffer;succ(dnrfaecherangebot);WHILE dbstatus=ok +CAND wert(fnrfanghj)=aktschhjCAND wert(fnrfangsj)=aktschjREP schreibtupel; +korrtupelindbpuffer;succ(dnrfaecherangebot);PER ;meldungdatenuebernommen. +meldungdatenuebernommen:return(2);standardmeldung(meldg3,"");LEAVE +uebernaktkomp.meldungdatennichtuebernommen:return(2);standardmeldung(meldg13, +"");LEAVE uebernaktkomp.schreibtupel:putwert(fnrfangsj,geplschj);putwert( +fnrfanghj,geplschhj);putintwert(fnrfangjgst,intwert(fnrfangjgst));putintwert( +fnrfanglfdnr,intwert(fnrfanglfdnr));putwert(fnrfangfach,wert(fnrfangfach)); +putwert(fnrfangart,wert(fnrfangart));putintwert(fnrfangwochenstd,intwert( +fnrfangwochenstd));putintwert(fnrfanganzlv,intwert(fnrfanganzlv));IF intwert( +fnrfangjgst)<>letztejgstTHEN standardmeldung(meldg14,text(intwert(fnrfangjgst +))+"#");letztejgst:=intwert(fnrfangjgst);FI ;insert(dnrfaecherangebot). +korrtupelindbpuffer:putwert(fnrfangsj,aktschj);putwert(fnrfanghj,aktschhj). +END PROC uebernaktkomp;PROC uebernaktpart:putwert(fnrfangsj,aktschj);putwert( +fnrfanghj,aktschhj);putintwert(fnrfangjgst,int(eingbldsch(4)));putintwert( +fnrfanglfdnr,1);search(dnrfaecherangebot,FALSE );IF dbstatus<>okTHEN +meldungdatennichtuebernommenELIF intwert(fnrfangjgst)=int(eingbldsch(4))CAND +wert(fnrfanghj)=aktschhjCAND wert(fnrfangsj)=aktschjTHEN savetupel( +dnrfaecherangebot,tupel);loeschevorhandenesaetze(5);restoretupel( +dnrfaecherangebot,tupel);standardmeldung(meldg14,eingbldsch(5)+"#"); +schreibtupelELSE meldungdatennichtuebernommenFI ;korrtupelindbpuffer;succ( +dnrfaecherangebot);WHILE dbstatus=okCAND intwert(fnrfangjgst)=int(eingbldsch( +4))CAND wert(fnrfanghj)=aktschhjCAND wert(fnrfangsj)=aktschjREP schreibtupel; +korrtupelindbpuffer;succ(dnrfaecherangebot);PER ;meldungdatenuebernommen. +meldungdatenuebernommen:return(2);standardmeldung(meldg3,"");LEAVE +uebernaktpart.meldungdatennichtuebernommen:return(2);standardmeldung(meldg13, +"");LEAVE uebernaktpart.schreibtupel:putwert(fnrfangsj,geplschj);putwert( +fnrfanghj,geplschhj);putintwert(fnrfangjgst,int(eingbldsch(5)));putintwert( +fnrfanglfdnr,intwert(fnrfanglfdnr));putwert(fnrfangfach,wert(fnrfangfach)); +putwert(fnrfangart,wert(fnrfangart));putintwert(fnrfangwochenstd,intwert( +fnrfangwochenstd));putintwert(fnrfanganzlv,intwert(fnrfanganzlv));insert( +dnrfaecherangebot).korrtupelindbpuffer:putwert(fnrfangsj,aktschj);putwert( +fnrfanghj,aktschhj);putintwert(fnrfangjgst,int(eingbldsch(4))).END PROC +uebernaktpart;PROC ueberngeplpart:putwert(fnrfangsj,geplschj);putwert( +fnrfanghj,geplschhj);putintwert(fnrfangjgst,int(eingbldsch(7)));putintwert( +fnrfanglfdnr,1);search(dnrfaecherangebot,FALSE );IF dbstatus<>okTHEN +meldungdatennichtuebernommenELIF wert(fnrfangsj)<>geplschjCAND intwert( +fnrfangjgst)<>int(eingbldsch(7))CAND wert(fnrfanghj)<>geplschhjTHEN +meldungdatennichtuebernommenELSE savetupel(dnrfaecherangebot,tupel); +loeschevorhandenesaetze(8);restoretupel(dnrfaecherangebot,tupel); +standardmeldung(meldg14,eingbldsch(8)+"#");schreibtupelFI ; +korrtupelindbpuffer;succ(dnrfaecherangebot);WHILE dbstatus=okCAND intwert( +fnrfangjgst)=int(eingbldsch(7))CAND wert(fnrfanghj)=geplschhjCAND wert( +fnrfangsj)=geplschjREP schreibtupel;korrtupelindbpuffer;succ( +dnrfaecherangebot);PER ;meldungdatenuebernommen.meldungdatenuebernommen: +return(2);standardmeldung(meldg3,"");LEAVE ueberngeplpart. +meldungdatennichtuebernommen:return(2);standardmeldung(meldg13,"");LEAVE +ueberngeplpart.schreibtupel:putwert(fnrfangsj,geplschj);putwert(fnrfanghj, +geplschhj);putintwert(fnrfangjgst,int(eingbldsch(8)));putintwert(fnrfanglfdnr +,intwert(fnrfanglfdnr));putwert(fnrfangfach,wert(fnrfangfach));putwert( +fnrfangart,wert(fnrfangart));putintwert(fnrfangwochenstd,intwert( +fnrfangwochenstd));putintwert(fnrfanganzlv,intwert(fnrfanganzlv));insert( +dnrfaecherangebot).korrtupelindbpuffer:putintwert(fnrfangjgst,int(eingbldsch( +7))).END PROC ueberngeplpart;PROC loeschevorhandenesaetze(INT CONST feld): +inittupel(dnrfaecherangebot);IF feld=2THEN putwert(fnrfangsj,geplschj); +putwert(fnrfanghj,geplschhj);putintwert(fnrfangjgst,0);putintwert( +fnrfanglfdnr,1);search(dnrfaecherangebot,FALSE );IF dbstatus<>okTHEN +letztejgst:=1;LEAVE loeschevorhandenesaetzeELIF wert(fnrfangsj)=geplschjCAND +wert(fnrfanghj)=geplschhjTHEN standardmeldung(meldg15,text(intwert( +fnrfangjgst))+"#");letztejgst:=intwert(fnrfangjgst);WHILE wert(fnrfanghj)= +geplschhjCAND dbstatus=okCAND wert(fnrfangsj)=geplschjREP IF intwert( +fnrfangjgst)<>letztejgstTHEN standardmeldung(meldg15,text(intwert(fnrfangjgst +))+"#");letztejgst:=intwert(fnrfangjgst);FI ;delete(dnrfaecherangebot);succ( +dnrfaecherangebot)PER ;FI ELSE putwert(fnrfangsj,geplschj);putwert(fnrfanghj, +geplschhj);putintwert(fnrfangjgst,int(eingbldsch(feld)));putintwert( +fnrfanglfdnr,1);search(dnrfaecherangebot,FALSE );IF dbstatus<>okTHEN +letztejgst:=1;LEAVE loeschevorhandenesaetzeELIF intwert(fnrfangjgst)=int( +eingbldsch(feld))CAND wert(fnrfangsj)=geplschjCAND wert(fnrfanghj)=geplschhj +THEN standardmeldung(meldg15,eingbldsch(feld)+"#");WHILE intwert(fnrfangjgst) +=int(eingbldsch(feld))CAND wert(fnrfanghj)=geplschhjCAND wert(fnrfangsj)= +geplschjCAND dbstatus=0REP delete(dnrfaecherangebot);succ(dnrfaecherangebot) +PER ;ELSE letztejgst:=1;LEAVE loeschevorhandenesaetzeFI FI ;END PROC +loeschevorhandenesaetze;PROC fachangspeichern(BOOL CONST speichern): +stelleletztebearbzeilefest;merkebearbsch;bestimmenzaehler;IF speichernTHEN +standardmeldung(meldg18," ");fachleerurest;IF fachkatalog=trennerTHEN +holeaktdatenFI ;speicherdaten;IF NOT saetzeunveraendertTHEN +aenderungsvermerksetzen(kennzeichnunggeplant);FI ;standardmeldung(meldg7,""); +FI ;naechsterbildschirm;nzaehler:=0;.fachleerurest:FOR iFROM 1UPTO bearbzl +REP IF bearbbldsch(i).fach=""CAND (bearbbldsch(i).art<>""COR bearbbldsch(i). +wstd<>""COR bearbbldsch(i).anz<>"")THEN fachangzurueckmitmeldg(meldg8,1,(i*4- +1),"");LEAVE fachangspeichernFI PER .speicherdaten:pruefefachartkombination; +standardmeldung(meldg19," ");IF NOT neuCAND nzaehler>0CAND anzdbsaetze< +anzbssaetze+nzaehlerCAND letztebearbzeile>0THEN korrigieredbsaetzerueckwFI ; +behandlebildschirmsaetze;IF NOT neuCAND anzbssaetze<anzdbsaetze-nzaehlerCAND +letztebearbzeile>0THEN korrigieredbsaetzevorwFI .bestimmenzaehler:FOR iFROM +anzdbsaetzeDOWNTO 1REP IF dbsatzbsnr(i)<bearbzl+1THEN nzaehler:=anzdbsaetze-i +;LEAVE bestimmenzaehlerFI PER .pruefefachartkombination:dbzeiger:=1; +saetzeunveraendert:=TRUE ;FOR iFROM 1UPTO letztebearbzeileREP istfehler:= +FALSE ;IF compress(bearbbldsch(i).fach)<>""THEN IF neuTHEN pruefesatz; +pruefefachart(i,1);IF bldfa2THEN fachangzurueckmitmeldg(meldg9,1,i*4-1,""); +LEAVE fachangspeichernFI ;ELIF NOT neuCAND neuersatzTHEN pruefesatz; +pruefefachart(i,3);IF bldfa2THEN fachangzurueckmitmeldg(meldg9,1,i*4-1,""); +LEAVE fachangspeichernELIF dbfa2THEN pruefobvorhergeaendert;FI ;ELIF +geaendertersatzTHEN pruefesatz;IF fachartgeaendertCOR (nzaehler>0CAND i> +ersteeinfuegezeile)THEN pruefefachart(i,3);FI ;modifsatzgeprueft:=TRUE ;IF +bldfa2THEN fachangzurueckmitmeldg(meldg9,1,i*4-1,"");LEAVE fachangspeichern +ELIF dbfa2THEN pruefobvorhergeaendert;FI ;IF geaenderteraltersatzTHEN +dbzeigerINCR 1FI ELIF unveraendertersatzTHEN ueberpruefesonderfall;dbzeiger +INCR 1FI ;ELSE pruefobgeloeschtersatzFI PER .ueberpruefesonderfall:IF +nzaehler>0CAND i>ersteeinfuegezeileTHEN pruefefachart(i,3);modifsatzgeprueft +:=TRUE ;IF bldfa2THEN fachangzurueckmitmeldg(meldg9,1,i*4-1,"");LEAVE +fachangspeichernELIF dbfa2THEN pruefobvorhergeaendert;FI ;FI . +pruefobgeloeschtersatz:FOR kFROM i+1UPTO bearbzlREP IF bearbbldsch(k).fach<> +""THEN IF bearbbldsch(k).fach=dbinh(k).fachCAND bearbbldsch(k).art=dbinh(k). +artCAND bearbbldsch(k).wstd=dbinh(k).wstdCAND bearbbldsch(k).anz=dbinh(k).anz +THEN dbzeigerINCR 1;LEAVE pruefobgeloeschtersatzFI FI PER . +geaenderteraltersatz:FOR kFROM i+1UPTO bearbzlREP IF bearbbldsch(k).fach<>"" +CAND dbzeiger<bearbzlTHEN IF bearbbldsch(k).fach=dbinh(dbzeiger).fachCAND +bearbbldsch(k).art=dbinh(dbzeiger).artCAND bearbbldsch(k).wstd=dbinh(dbzeiger +).wstdCAND bearbbldsch(k).anz=dbinh(dbzeiger).anzTHEN LEAVE +geaenderteraltersatzWITH FALSE ELSE LEAVE geaenderteraltersatzWITH TRUE FI +FI PER ;TRUE .stelleletztebearbzeilefest:letztebearbzeile:=0;FOR iFROM +bearbzlDOWNTO 1REP IF standardmaskenfeld((i-1)*4+3)<>""COR standardmaskenfeld +((i-1)*4+4)<>""THEN letztebearbzeile:=i;LEAVE stelleletztebearbzeilefestFI +PER .neuersatz:i+z1dbnr-1>=z1dbnr+anzdbsaetze-nzaehlerCAND (bearbbldsch(i). +fach<>dbinh(dbzeiger).fachCAND bearbbldsch(i).art<>dbinh(dbzeiger).artCAND +bearbbldsch(i).wstd<>dbinh(dbzeiger).wstdCAND bearbbldsch(i).anz<>dbinh( +dbzeiger).anz).geaendertersatz:bearbbldsch(i).fach<>dbinh(dbzeiger).fachCOR +bearbbldsch(i).art<>dbinh(dbzeiger).artCOR bearbbldsch(i).wstd<>dbinh( +dbzeiger).wstdCOR bearbbldsch(i).anz<>dbinh(dbzeiger).anz.fachartgeaendert: +bearbbldsch(i).fach<>dbinh(dbzeiger).fachCOR bearbbldsch(i).art<>dbinh( +dbzeiger).art.unveraendertersatz:bearbbldsch(i).fach=dbinh(dbzeiger).fachCOR +bearbbldsch(i).art=dbinh(dbzeiger).artCOR bearbbldsch(i).wstd=dbinh(dbzeiger) +.wstdCOR bearbbldsch(i).anz=dbinh(dbzeiger).anz.behandlebildschirmsaetze: +dbzeiger:=1;FOR bszeigerFROM 1UPTO letztebearbzeileREP infeld((bszeiger-1)*4+ +3);IF compress(bearbbldsch(bszeiger).fach)<>""THEN IF NOT satzgeaendert( +dbzeiger,bszeiger)THEN dbzeigerINCR 1ELIF dbinh(dbzeiger).fach<>""CAND +dbsatzbsnr(dbzeiger)<bearbzl+1THEN aenderesatz;dbzeigerINCR 1ELSE +schreibesatz;FI FI ;PER ;IF dbzeiger<bearbzl+1CAND dbinh(dbzeiger).fach<>"" +CAND anzdbsaetze>anzbssaetze+nzaehlerTHEN FOR iFROM 1UPTO zuloeschendesaetze +REP loeschesatz;dbzeigerINCR 1PER FI ;dbzeiger:=1;bszeiger:=1. +zuloeschendesaetze:anzdbsaetze-anzbssaetze-nzaehler.schreibesatz:IF +saetzeunveraendertTHEN saetzeunveraendert:=FALSE FI ;putwert(fnrfangsj, +geplschj);putwert(fnrfanghj,geplschhj);putintwert(fnrfangjgst,int(eingbldsch( +jgstfeldnr)));putintwert(fnrfanglfdnr,z1dbnr+dbzeiger-1);dbzeigerINCR 1; +putwert(fnrfangfach,bearbbldsch(bszeiger).fach);putwert(fnrfangart, +bearbbldsch(bszeiger).art);putintwert(fnrfangwochenstd,int(bearbbldsch( +bszeiger).wstd));putintwert(fnrfanganzlv,int(bearbbldsch(bszeiger).anz)); +insert(dnrfaecherangebot);neu:=FALSE .aenderesatz:IF saetzeunveraendertTHEN +saetzeunveraendert:=FALSE FI ;putwert(fnrfangsj,geplschj);putwert(fnrfanghj, +geplschhj);putintwert(fnrfangjgst,int(eingbldsch(jgstfeldnr)));putintwert( +fnrfanglfdnr,dbzeiger+z1dbnr-1);search(dnrfaecherangebot,TRUE );putwert( +fnrfangfach,bearbbldsch(bszeiger).fach);putwert(fnrfangart,bearbbldsch( +bszeiger).art);putintwert(fnrfangwochenstd,int(bearbbldsch(bszeiger).wstd)); +putintwert(fnrfanganzlv,int(bearbbldsch(bszeiger).anz));update( +dnrfaecherangebot).loeschesatz:IF saetzeunveraendertTHEN saetzeunveraendert:= +FALSE FI ;putwert(fnrfangsj,geplschj);putwert(fnrfanghj,geplschhj);putintwert +(fnrfangjgst,int(eingbldsch(jgstfeldnr)));putintwert(fnrfanglfdnr,dbzeiger+ +z1dbnr-1);search(dnrfaecherangebot,TRUE );IF dbstatus<>okTHEN errorstop( +"Systemfehler, zu löschenden Satz nicht gefunden !")FI ;delete( +dnrfaecherangebot).korrigieredbsaetzevorw:IF saetzeunveraendertTHEN +saetzeunveraendert:=FALSE FI ;suchedbsatz(geplschj,geplschhj,int(eingbldsch( +jgstfeldnr)),bearbbldsch(letztebearbzeile).fach,bearbbldsch(letztebearbzeile) +.art,bearbbldsch(letztebearbzeile).wstd,bearbbldsch(letztebearbzeile).anz); +REP succ(dnrfaecherangebot);IF dbstatus=okCAND intwert(fnrfangjgst)=int( +eingbldsch(jgstfeldnr))CAND wert(fnrfanghj)=geplschhjCAND wert(fnrfangsj)= +geplschjTHEN putintwert(fnrfanglfdnr,intwert(fnrfanglfdnr)-zuloeschendesaetze +);update(dnrfaecherangebot);ELSE LEAVE korrigieredbsaetzevorwFI UNTIL intwert +(fnrfangjgst)<>int(eingbldsch(jgstfeldnr))PER .korrigieredbsaetzerueckw:IF +saetzeunveraendertTHEN saetzeunveraendert:=FALSE FI ;putwert(fnrfangsj, +geplschj);putwert(fnrfanghj,geplschhj);putintwert(fnrfangjgst,int(eingbldsch( +jgstfeldnr)));putintwert(fnrfanglfdnr,maxint);search(dnrfaecherangebot,FALSE +);REP pred(dnrfaecherangebot);IF intwert(fnrfangjgst)=int(eingbldsch( +jgstfeldnr))CAND wert(fnrfanghj)=geplschhjCAND nichtbssatzCAND wert(fnrfangsj +)=geplschjTHEN putintwert(fnrfanglfdnr,intwert(fnrfanglfdnr)+anzbssaetze- +anzdbsaetze+nzaehler);update(dnrfaecherangebot);ELSE LEAVE +korrigieredbsaetzerueckwFI PER .nichtbssatz:intwert(fnrfanglfdnr)>z1dbnr+ +anzdbsaetze-1-nzaehler.naechsterbildschirm:j:=1;IF speichernTHEN IF +anzbssaetze=bearbzlCOR anzdbsaetze=bearbzlCOR nzaehler>0THEN zeignrINCR +anzbssaetze;erfasstefelderausgeben(zeignr);return(1);ELSE zeignr:=1;enter(2); +FI ELSE IF anzdbsaetze<bearbzlCAND nzaehler=0THEN zeignr:=1;enter(2);ELSE +zeignrINCR anzdbsaetze-nzaehler;erfasstefelderausgeben(zeignr);return(1);FI +FI .pruefobvorhergeaendert:IF intwert(fnrfanglfdnr)<z1dbnrCOR intwert( +fnrfanglfdnr)>z1dbnr+anzdbsaetze-1-nzaehlerTHEN fachangzurueckmitmeldg(meldg9 +,1,i*4-1,"");LEAVE fachangspeichernFI .pruefesatz:pruefdbfd(bearbbldsch(i). +fach,fachkatalog);raus;pruefdbfd(bearbbldsch(i).art,artkatalog);raus;IF +bearbbldsch(i).wstd<>""THEN prueftypfd(i*4+1);raus;FI ;IF bearbbldsch(i).anz +<>""THEN prueftypfd(i*4+2);rausFI .raus:IF istfehlerTHEN return(1);LEAVE +fachangspeichernFI .END PROC fachangspeichern;PROC suchedbsatz(TEXT CONST +supsj,supshj,INT CONST supjgst,TEXT CONST fach,art,wstd,anz):putwert( +fnrfangsj,supsj);putwert(fnrfanghj,supshj);putintwert(fnrfangjgst,supjgst); +putintwert(fnrfanglfdnr,1);search(dnrfaecherangebot,FALSE );IF NOT (dbstatus= +okCAND wert(fnrfanghj)=supshjCAND intwert(fnrfangjgst)=supjgstCAND wert( +fnrfangsj)=supsjCAND wert(fnrfangfach)=fachCAND wert(fnrfangart)=artCAND +intwert(fnrfangwochenstd)=int(wstd)CAND intwert(fnrfanganzlv)=int(anz))THEN +REP succ(dnrfaecherangebot);IF dbstatus=okCAND wert(fnrfanghj)=supshjCAND +intwert(fnrfangjgst)=supjgstCAND wert(fnrfangsj)=supsjCAND wert(fnrfangfach)= +fachCAND wert(fnrfangart)=artCAND intwert(fnrfangwochenstd)=int(wstd)CAND +intwert(fnrfanganzlv)=int(anz)THEN LEAVE suchedbsatzFI UNTIL dbstatus<>okPER +FI .END PROC suchedbsatz;PROC pruefefachart(INT CONST i,p):IF neuTHEN +pruefbldschELSE pruefbldsch;pruefdbFI .pruefbldsch:bldfa2:=FALSE ;FOR jFROM 1 +UPTO i-1REP IF j<anzdbsaetze+1THEN IF NOT neuCAND NOT (satzgeaendert(j,j) +CAND modifsatzgeprueft)THEN vergleichesaetzeFI FI PER ;FOR jFROM i+1UPTO +letztebearbzeileREP IF bearbbldsch(i).fach=bearbbldsch(j).fachCAND +bearbbldsch(i).art=bearbbldsch(j).artTHEN bldfa2:=TRUE ;LEAVE pruefefachart +FI PER .vergleichesaetze:IF bearbbldsch(i).fach=bearbbldsch(j).fachCAND +bearbbldsch(i).art=bearbbldsch(j).artTHEN bldfa2:=TRUE ;LEAVE pruefefachart +FI .pruefdb:dbfa2:=FALSE ;putwert(fnrfangsj,geplschj);putwert(fnrfanghj, +geplschhj);putwert(fnrfangfach,bearbbldsch(i).fach);putintwert(fnrfangjgst, +int(eingbldsch(jgstfeldnr)));putwert(fnrfangart,bearbbldsch(i).art); +putintwert(fnrfanglfdnr,1);search(ixfangsjhjfach,TRUE );IF dbstatus=okCAND +wert(fnrfangart)=bearbbldsch(i).artCAND intwert(fnrfangjgst)=int(eingbldsch( +jgstfeldnr))THEN IF p=1THEN dbfa2:=TRUE ;LEAVE pruefefachartELIF p=3THEN IF +intwert(fnrfanglfdnr)<>z1dbnr+i-1THEN dbfa2:=TRUE ;LEAVE pruefefachartELIF +nzaehler>0CAND i>ersteeinfuegezeileTHEN dbfa2:=TRUE ;LEAVE pruefefachartFI +FI ELSE REP pruefnachfolger;UNTIL nachfolgerfalschPER FI .nachfolgerfalsch: +dbstatus<>okCOR wert(fnrfangfach)<>bearbbldsch(i).fachCOR wert(fnrfangsj)<> +geplschjCOR wert(fnrfanghj)<>geplschhjCOR intwert(fnrfangjgst)>int(eingbldsch +(jgstfeldnr)).pruefnachfolger:succ(ixfangsjhjfach);IF dbstatus=okCAND wert( +fnrfanghj)=geplschhjCAND intwert(fnrfangjgst)=int(eingbldsch(jgstfeldnr)) +CAND wert(fnrfangfach)=bearbbldsch(i).fachCAND wert(fnrfangart)=bearbbldsch(i +).artCAND wert(fnrfangsj)=geplschjTHEN IF p=1THEN dbfa2:=TRUE ;LEAVE +pruefefachartELIF p=3THEN IF intwert(fnrfanglfdnr)<>z1dbnr+i-1THEN dbfa2:= +TRUE ;LEAVE pruefefachartELIF nzaehler>0CAND i>ersteeinfuegezeileTHEN dbfa2:= +TRUE ;LEAVE pruefefachartFI FI FI .END PROC pruefefachart;BOOL PROC +satzgeaendert(INT CONST dbnr,bsnr):NOT (dbinh(dbnr).fach=bearbbldsch(bsnr). +fachCAND dbinh(dbnr).art=bearbbldsch(bsnr).artCAND dbinh(dbnr).wstd= +bearbbldsch(bsnr).wstdCAND dbinh(dbnr).anz=bearbbldsch(bsnr).anz)END PROC +satzgeaendert;PROC fachangmodbldsch(INT CONST iproc):SELECT iprocOF CASE 1: +zeileneinfuegenCASE 2:zeileloeschenEND SELECT .zeileneinfuegen:aktzeile:= +bearbfeldzuzeile(infeld);IF keinescnTHEN ersteeinfuegezeile:=aktzeile; +keinescn:=FALSE FI ;IF aktzeile=bearbzlTHEN fachangzurueckmitmeldg(meldg16,1, +infeld," ");LEAVE zeileneinfuegenFI ;infeld((aktzeile+1)*4-1);FOR iFROM +bearbzl-1DOWNTO aktzeile+1REP standardmaskenfeld(standardmaskenfeld(i*4-1),(i ++1)*4-1);standardmaskenfeld(standardmaskenfeld(i*4),(i+1)*4); +standardmaskenfeld(standardmaskenfeld(i*4+1),(i+1)*4+1);standardmaskenfeld( +standardmaskenfeld(i*4+2),(i+1)*4+2);PER ;standardmaskenfeld("",(aktzeile+1)* +4-1);standardmaskenfeld("",(aktzeile+1)*4);standardmaskenfeld("",(aktzeile+1) +*4+1);standardmaskenfeld("",(aktzeile+1)*4+2);infeld((aktzeile+1)*4-1); +standardfelderausgeben;FOR iFROM 1UPTO anzdbsaetzeREP IF dbsatzbsnr(i)> +aktzeileTHEN dbsatzbsnr(i)INCR 1;FI PER ;return(1).zeileloeschen:loeschzeile( +bearbfeldzuzeile(infeld)).END PROC fachangmodbldsch;INT PROC bearbfeldzuzeile +(INT CONST feldnr):(feldnr+1)DIV 4END PROC bearbfeldzuzeile;PROC loeschzeile( +INT CONST zeilennr):INT VAR z:=zeilennr*4;infeld(z-1);standardmaskenfeld("",z +-1);standardmaskenfeld("",z);standardmaskenfeld("",z+1);standardmaskenfeld("" +,z+2);standardfelderausgeben;infeld(z-1);return(1)END PROC loeschzeile; +initrows;END PACKET planefaecherangebot; + |