app/schulis/2.2.1/src/4.faecherangebot planen

Raw file
Back to index

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;