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 kartCOR 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 letztebearbzeile0THEN 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 anzbssaetze0THEN korrigieredbsaetzevorwFI .bestimmenzaehler:FOR iFROM anzdbsaetzeDOWNTO 1REP IF dbsatzbsnr(i)""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""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)"" 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 anzdbsaetzez1dbnr+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 jz1dbnr+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;