diff options
author | Lars-Dominik Braun <lars@6xq.net> | 2019-02-04 13:09:03 +0100 |
---|---|---|
committer | Lars-Dominik Braun <lars@6xq.net> | 2019-02-04 13:09:03 +0100 |
commit | 04e68443040c7abad84d66477e98f93bed701760 (patch) | |
tree | 2b6202afae659e773bf6916157d23e83edfa44e3 /app/schulis | |
download | eumel-src-04e68443040c7abad84d66477e98f93bed701760.tar.gz eumel-src-04e68443040c7abad84d66477e98f93bed701760.tar.bz2 eumel-src-04e68443040c7abad84d66477e98f93bed701760.zip |
Initial import
Diffstat (limited to 'app/schulis')
234 files changed, 25838 insertions, 0 deletions
diff --git a/app/schulis/2.2.1/data/db/2.BAISY-0 b/app/schulis/2.2.1/data/db/2.BAISY-0 Binary files differnew file mode 100644 index 0000000..9412329 --- /dev/null +++ b/app/schulis/2.2.1/data/db/2.BAISY-0 diff --git a/app/schulis/2.2.1/data/db/2.BAISY-1 b/app/schulis/2.2.1/data/db/2.BAISY-1 Binary files differnew file mode 100644 index 0000000..5840f5d --- /dev/null +++ b/app/schulis/2.2.1/data/db/2.BAISY-1 diff --git a/app/schulis/2.2.1/data/db/BAISY-2 b/app/schulis/2.2.1/data/db/BAISY-2 Binary files differnew file mode 100644 index 0000000..d5066ff --- /dev/null +++ b/app/schulis/2.2.1/data/db/BAISY-2 diff --git a/app/schulis/2.2.1/data/db/BAISY-3 b/app/schulis/2.2.1/data/db/BAISY-3 Binary files differnew file mode 100644 index 0000000..dd2af90 --- /dev/null +++ b/app/schulis/2.2.1/data/db/BAISY-3 diff --git a/app/schulis/2.2.1/data/db/BAISY-4 b/app/schulis/2.2.1/data/db/BAISY-4 Binary files differnew file mode 100644 index 0000000..52ce9bf --- /dev/null +++ b/app/schulis/2.2.1/data/db/BAISY-4 diff --git a/app/schulis/2.2.1/data/db/EUMELbase.baisy b/app/schulis/2.2.1/data/db/EUMELbase.baisy Binary files differnew file mode 100644 index 0000000..2e9852b --- /dev/null +++ b/app/schulis/2.2.1/data/db/EUMELbase.baisy diff --git a/app/schulis/2.2.1/data/db/EUMELbase.baisy.data0 b/app/schulis/2.2.1/data/db/EUMELbase.baisy.data0 Binary files differnew file mode 100644 index 0000000..b11232d --- /dev/null +++ b/app/schulis/2.2.1/data/db/EUMELbase.baisy.data0 diff --git a/app/schulis/2.2.1/data/db/EUMELbase.baisy.data1 b/app/schulis/2.2.1/data/db/EUMELbase.baisy.data1 Binary files differnew file mode 100644 index 0000000..3cdc6a2 --- /dev/null +++ b/app/schulis/2.2.1/data/db/EUMELbase.baisy.data1 diff --git a/app/schulis/2.2.1/data/db/EUMELbase.baisy.tree0 b/app/schulis/2.2.1/data/db/EUMELbase.baisy.tree0 Binary files differnew file mode 100644 index 0000000..7b13c5c --- /dev/null +++ b/app/schulis/2.2.1/data/db/EUMELbase.baisy.tree0 diff --git a/app/schulis/2.2.1/data/db/EUMELbase.baisy.tree1 b/app/schulis/2.2.1/data/db/EUMELbase.baisy.tree1 Binary files differnew file mode 100644 index 0000000..026ef9f --- /dev/null +++ b/app/schulis/2.2.1/data/db/EUMELbase.baisy.tree1 diff --git a/app/schulis/2.2.1/data/db/EUMELbase.baisy.treedescription b/app/schulis/2.2.1/data/db/EUMELbase.baisy.treedescription Binary files differnew file mode 100644 index 0000000..ea123ac --- /dev/null +++ b/app/schulis/2.2.1/data/db/EUMELbase.baisy.treedescription diff --git a/app/schulis/2.2.1/data/db/EUMELbase.schulis b/app/schulis/2.2.1/data/db/EUMELbase.schulis Binary files differnew file mode 100644 index 0000000..fae85ba --- /dev/null +++ b/app/schulis/2.2.1/data/db/EUMELbase.schulis diff --git a/app/schulis/2.2.1/data/db/EUMELbase.schulis.data0 b/app/schulis/2.2.1/data/db/EUMELbase.schulis.data0 Binary files differnew file mode 100644 index 0000000..42a82fc --- /dev/null +++ b/app/schulis/2.2.1/data/db/EUMELbase.schulis.data0 diff --git a/app/schulis/2.2.1/data/db/EUMELbase.schulis.data1 b/app/schulis/2.2.1/data/db/EUMELbase.schulis.data1 Binary files differnew file mode 100644 index 0000000..2e5fd82 --- /dev/null +++ b/app/schulis/2.2.1/data/db/EUMELbase.schulis.data1 diff --git a/app/schulis/2.2.1/data/db/EUMELbase.schulis.tree0 b/app/schulis/2.2.1/data/db/EUMELbase.schulis.tree0 Binary files differnew file mode 100644 index 0000000..7bc7a83 --- /dev/null +++ b/app/schulis/2.2.1/data/db/EUMELbase.schulis.tree0 diff --git a/app/schulis/2.2.1/data/db/EUMELbase.schulis.tree1 b/app/schulis/2.2.1/data/db/EUMELbase.schulis.tree1 Binary files differnew file mode 100644 index 0000000..c0daa5f --- /dev/null +++ b/app/schulis/2.2.1/data/db/EUMELbase.schulis.tree1 diff --git a/app/schulis/2.2.1/data/db/EUMELbase.schulis.treedescription b/app/schulis/2.2.1/data/db/EUMELbase.schulis.treedescription Binary files differnew file mode 100644 index 0000000..17154f0 --- /dev/null +++ b/app/schulis/2.2.1/data/db/EUMELbase.schulis.treedescription diff --git a/app/schulis/2.2.1/data/vordrucke/VORDRUCKE.files b/app/schulis/2.2.1/data/vordrucke/VORDRUCKE.files new file mode 100644 index 0000000..b055c9e --- /dev/null +++ b/app/schulis/2.2.1/data/vordrucke/VORDRUCKE.files @@ -0,0 +1,49 @@ +vordruck anmeldebestaetigung zur jgst 5 +vordruck anmeldebestaetigung zur jgst 11 +vordruck mitteilung ueber eine abmeldung +vordruck mitteilung ueber eine anmeldung mit hjd +vordruck mitteilung ueber eine anmeldung mit diffd +vordruck schulbescheinigung +vordruck fuer wiederholer +vordruck nachpruefungsbescheinigung +vordruck fuer anschreiben an herkunftsschulen fuer jgst 11 +vordruck fuer anschreiben an herkunftsschulen fuer jgst 5 +vordruck1 auskunft betroffene +vordruck2 auskunft betroffene +vordruck3 auskunft betroffene +vordruck4 auskunft betroffene +vordruck5 auskunft betroffene +vordruck1 protokoll versetzkonf +vordruck2 protokoll versetzkonf +vordruck3 protokoll versetzkonf +vordruck klassenbuchliste +vordruck nachpruefungszulassung +vordruck1 auskunft lehrer +vordruck2 auskunft lehrer +vordruck3 auskunft lehrer +vordruck4 auskunft lehrer +vordruck5 auskunft lehrer +vordruck1 einzelstdpl lehrer +vordruck2 einzelstdpl lehrer +vordruck1 einzelstdpl raeume +vordruck2 einzelstdpl raeume +vordruck1 einzelstdpl sek1 +vordruck2 einzelstdpl sek1 +vordruck3 einzelstdpl sek1 +vordruck4 einzelstdpl sek1 +vordruck5 einzelstdpl sek1 +vordruck6 einzelstdpl sek1 +vordruck7 einzelstdpl sek1 +fehlerliste konsistenzpruefung +vordruck6 auskunft lehrer +vordruck7 auskunft lehrer +vordruck1 unterrichtsvertlg fuer lehrer +vordruck2 unterrichtsvertlg fuer lehrer +vordruck1 vertretungen +vordruck2 vertretungen +vordruck1 einzelstdpl sek2 +vordruck2 einzelstdpl sek2 +vordruck1 kursli kopfueb +vordruck2 kursli zeile +vordruck3 einzelstdpl lehrer + diff --git a/app/schulis/2.2.1/data/vordrucke/fehlerliste konsistenzpruefung b/app/schulis/2.2.1/data/vordrucke/fehlerliste konsistenzpruefung new file mode 100644 index 0000000..d1e0343 --- /dev/null +++ b/app/schulis/2.2.1/data/vordrucke/fehlerliste konsistenzpruefung @@ -0,0 +1,64 @@ +Fall 1: +Klassengruppe # : ungültige Schülergruppenbezeichnung # +Fall 2: +Raumgruppe # : ungültige Raumbezeichnung # +Fall 3: +Lehrveranstaltung # : ungültige Fachbezeichnung # +Fall 4: +Lehrveranstaltung # : ungültige Lehrerparaphe # +Fall 5: +Lehrveranstaltung # : # weder gültig als Klassengruppe, noch als +Kennung einer Schülergruppe dieser Jgst. +Fall 6: +Lehrveranstaltung # , Klassengruppe # : + Fehlermeldung zur Klassengruppe beachten! +Fall 7: +Lehrveranstaltung # : # weder gültig als Raumgruppe, noch als Raum +Fall 8: +Lehrveranstaltung # : Raumgruppe # : + Fehlermeldung zur Raumgruppe beachten! +Fall 9: +Lehrer # : mehr Wochenstunden als Sollstunden +Fall 10: +Zeitwünsche: # ungültige Bezeichnung für # + ****** Zeitwunsch wurde gelöscht ******* +Fall 11: +Stundenplan für Lehrveranstaltung # , Zeit # : + ungültige Lehrveranstaltungsbezeichnung + ****** Stundenplaneintrag wurde gelöscht ****** +Fall 12: +Stundenplan für Lehrveranstaltung # , Zeit # : + Fehlermeldung für diese Lehrveranstaltung beachten! +Fall 13: +Stundenplan für Lehrveranstaltung # , Zeit # : + Lehrerparaphe zwischenzeitlich geändert : alt #, neu # + ****** neue Paraphe eingesetzt, keine Zeitüberschneidung ****** +Fall 14: +Stundenplan für Lehrveranstaltung # , Zeit # : + Lehrerparaphe zwischenzeitlich geändert : alt #, neu # + für neue Paraphe evtl. Zeitüberschneidung +Fall 15: +Stundenplan für Lehrveranstaltung # , Zeit # : + ****** ungültige Raumangabe wurde gelöscht ****** +Fall 16: +Stundenplan für Lehrveranstaltung # , Zeit # : + Kopplung zwischenzeitlich geändert: alt # , neu # + ****** neue Kopplung eingesetzt ****** +Fall 17: +Stundenplan für Lehrveranstaltung # , Zeit # : + Zeitüberschneidung für Schüler +Fall 18: +Stundenplan für Zeit # : Zeit laut Zeitraster gesperrt + betrifft Lehrveranstaltung # + ****** Eintrag für diese Zeit wurde gelöscht ****** +Fall 19: +Aufsichtsplan für Aufsichtszeit # : Aufsichtszeit ungültig + ****** Eintrag wurde gelöscht ****** +Fall 20: +Aufsichtsplan für Aufsichtszeit # und Aufsichtsort #: + Aufsichtsort ungültig +Fall 21: +Aufsichtsplan für Aufsichtszeit # und Aufsichtsort #: + Lehrerparaphe ungültig + + diff --git a/app/schulis/2.2.1/data/vordrucke/vordruck anmeldebestaetigung zur jgst 11 b/app/schulis/2.2.1/data/vordrucke/vordruck anmeldebestaetigung zur jgst 11 new file mode 100644 index 0000000..eca6b7e --- /dev/null +++ b/app/schulis/2.2.1/data/vordrucke/vordruck anmeldebestaetigung zur jgst 11 @@ -0,0 +1,47 @@ +<502 > +<503 > + +<504 > <501 > + + + + + +<511%v#<20> <21%#*<21> ><3>#m#<29> <30%#*<30> ><28>> +<24 >> + +<25 >> + + + + + + +<511%v#Ihre Anmeldung an unsere Schule zum Schuljahr <507>><512%w#Anmeldung der Schülerin #m#Anmeldung des Schülers ><511%m#<20> <21%#*<21> ><3>> +<511%m#an unsere Schule zum Schuljahr <507>> + + +Wir bestätigen hiermit, daß <511%v#Sie><512%w#die Schülerin #m#der Schüler ><511%m#<20> <21%#*<21> ><3>> +entsprechend Ihrem Wunsch zum Schuljahr <507 >> in die Jahrgangsstufe 11 +unserer Schule aufgenommen <511%v#werden#m#wird>. Diese Zusage erfolgt unter der +Bedingung, daß <511%v#Sie><512%m#der Schüler#w#die Schülerin> bis zum 3. Schultag +des kommenden Schuljahres die entsprechenden Voraussetzungen <511%v#erfüllen#m#erfüllt>. + +In der Anlage finden Sie weitere Informationen und Termine. + +Es ist unbedingt erforderlich, daß <511%v#Sie><512%w#die Schülerin#m#der Schüler> an den +Kurswahlen termingerecht <511%v#teilnehmen#m#teilnimmt>, damit die Schule das +Unterrichtsangebot für das kommende Schuljahr gewährleisten kann. Aus dem +gleichen Grund bitten wir auch, uns unverzüglich zu informieren, wenn +<511%v#Sie><512%w#die Schülerin#m#der Schüler> nicht wie vorgesehen in unsere Schule +eintreten <511%v#werden#m#wird>. + + +Mit freundlichen Grüßen + + + + +<506 >> +(Schulleiter) + diff --git a/app/schulis/2.2.1/data/vordrucke/vordruck anmeldebestaetigung zur jgst 5 b/app/schulis/2.2.1/data/vordrucke/vordruck anmeldebestaetigung zur jgst 5 new file mode 100644 index 0000000..d9eff7f --- /dev/null +++ b/app/schulis/2.2.1/data/vordrucke/vordruck anmeldebestaetigung zur jgst 5 @@ -0,0 +1,38 @@ +<502 > +<503 > + +<504 > <501 > + + + + +<29 >> <30%#*<30> ><28 >> +<31 >> + +<32 >> + + + + + + +Aufnahme <12%m#des Schülers#w#der Schülerin> <20 >> <21%#*<21> ><3 >> an +unsere Schule zur Jahrgangsstufe 5 + + +Wir bestätigen hiermit, daß <12%w#Ihre Tochter#m#Ihr Sohn> <20 >> +entsprechend Ihrem Wunsch zum Schuljahr <507 >> in die Jahrgangsstufe 5 +unserer Schule aufgenommen wurde. + +Einzelheiten zum Schulbeginn entnehmen Sie bitte dem beiliegenden +Informationsblatt. + + +Mit freundlichen Grüßen + + + + +<506 >> +(Schulleiter) + diff --git a/app/schulis/2.2.1/data/vordrucke/vordruck fuer anschreiben an herkunftsschulen fuer jgst 11 b/app/schulis/2.2.1/data/vordrucke/vordruck fuer anschreiben an herkunftsschulen fuer jgst 11 new file mode 100644 index 0000000..c61cb47 --- /dev/null +++ b/app/schulis/2.2.1/data/vordrucke/vordruck fuer anschreiben an herkunftsschulen fuer jgst 11 @@ -0,0 +1,15 @@ +Anmeldung von Schülern zur Jahrgangsstufe 11 + + +Sehr geehrte Damen und Herren, + +die nachstehend genannten Schülerinnen und Schüler Ihrer Schule wurden zum +kommenden Schuljahr für die Jahrgangsstufe 11 an unserer Schule angemeldet. +Wir bitten Sie, uns jeweils zu bestätigen, ob die Schülerin/der Schüler eine +2. Fremdsprache gelernt hat, die den Bedingungen der Ausbildungs- und +Prüfungsordnung der gymnasialen Oberstufe genügt. Wir bitten um Antwort bis +zum Beginn des kommenden Schuljahrs. + + +Mit freundlichen Grüßen + diff --git a/app/schulis/2.2.1/data/vordrucke/vordruck fuer anschreiben an herkunftsschulen fuer jgst 5 b/app/schulis/2.2.1/data/vordrucke/vordruck fuer anschreiben an herkunftsschulen fuer jgst 5 new file mode 100644 index 0000000..d6593ac --- /dev/null +++ b/app/schulis/2.2.1/data/vordrucke/vordruck fuer anschreiben an herkunftsschulen fuer jgst 5 @@ -0,0 +1,13 @@ +Anmeldung von Schülern zur Jahrgangsstufe 5 + + +Sehr geehrte Damen und Herren, + +die nachstehend genannten Schülerinnen und Schüler Ihrer Schule wurden zum +kommenden Schuljahr für die Jahrgangsstufe 5 an unserer Schule angemeldet. +Wir bitten Sie, uns jeweils das Grundschulgutachten und das letzte Zeugnis +dieser Schüler im Verlauf der nächsten zwei Wochen zuzusenden. + + +Mit freundlichen Grüßen + diff --git a/app/schulis/2.2.1/data/vordrucke/vordruck fuer wiederholer b/app/schulis/2.2.1/data/vordrucke/vordruck fuer wiederholer new file mode 100644 index 0000000..6f5a224 --- /dev/null +++ b/app/schulis/2.2.1/data/vordrucke/vordruck fuer wiederholer @@ -0,0 +1,44 @@ +<502 > +<503 > + +<504 > <501 > + + + + +<511%v#<20> <21%#*<21> ><3>#m#<29> <30%#*<30> ><28>> +<24 >> + +<25 > + + + + + +Versetzung zum Ende des Schuljahres <505 >> + + +Laut Beschluß der Versetzungskonferenz<511%v# haben Sie> +<512%w#hat Ihre Tochter #m#hat Ihr Sohn ><511%m#<20> >die Versetzung in die +Jahrgangsstufe <513>> nicht erreicht. + +Das diesem Beschluß zugrundeliegende Zeugnis fügen wir als Anlage bei. Wir +überlassen es Ihrer Entscheidung, ob<511%v# Sie> +<512%w#Ihre Tochter #m#Ihr Sohn >am letzten Schultag +<511%v#teilnehmen#m#teilnimmt>. + +Falls Sie wünschen, daß <511%v#Sie><512%w#Ihre Tochter#m#Ihr Sohn> in eine +bestimmte Klasse/Tutorenkurs aufgenommen <511%v#werden#m#wird>, sind wir +bemüht, dies zu realisieren, sofern Sie uns Ihren Wunsch und die Gründe +dafür bis zum ersten Ferientag wissen lassen. + + +Mit freundlichen Grüßen + + + + +<506 >> +(Schulleiter) + + diff --git a/app/schulis/2.2.1/data/vordrucke/vordruck klassenbuchliste b/app/schulis/2.2.1/data/vordrucke/vordruck klassenbuchliste new file mode 100644 index 0000000..880662a --- /dev/null +++ b/app/schulis/2.2.1/data/vordrucke/vordruck klassenbuchliste @@ -0,0 +1,5 @@ +<511%#*<511>> +<503 > + +<512%#*<512>> + diff --git a/app/schulis/2.2.1/data/vordrucke/vordruck mitteilung ueber eine abmeldung b/app/schulis/2.2.1/data/vordrucke/vordruck mitteilung ueber eine abmeldung new file mode 100644 index 0000000..1493b9f --- /dev/null +++ b/app/schulis/2.2.1/data/vordrucke/vordruck mitteilung ueber eine abmeldung @@ -0,0 +1,54 @@ +<502 > +<503 > + +<504 > <501 > + + + + + +Mitteilung über eine Abmeldung + + + +Am <512%#___________*<512>> verläßt unsere Schule: + + Schüler: <513 > + Geburtsdatum: <514 > + + Abgangsgrund: <515 > + + +Klasse/Tutorenkurs: <519 >><520%#*, <520>> + + + +Kurs Fachlehrer Unterschr. Note Anz.entl + Bücher +-------:------------------------------------:----------:----:-------- + +<530 >><531 >><530%#<590>* <591>> +<532 >><533 >><532%#<590>* <591>> +<534 >><535 >><534%#<590>* <591>> +<536 >><537 >><536%#<590>* <591>> +<538 >><539 >><538%#<590>* <591>> +<540 >><541 >><540%#<590>* <591>> +<542 >><543 >><542%#<590>* <591>> +<544 >><545 >><544%#<590>* <591>> +<546 >><547 >><546%#<590>* <591>> +<548 >><549 >><548%#<590>* <591>> +<550 >><551 >><550%#<590>* <591>> +<552 >><553 >><552%#<590>* <591>> +<554 >><555 >><554%#<590>* <591>> +<556 >><557 >><556%#<590>* <591>> +<558 >><559 >><558%#<590>* <591>> + + + + erreichter Abschluß: <516 > + + Zeugnis ausgestellt am: ____________________ + +Unterschrift Klassenlehrer/Tutor: ______________________________ + + diff --git a/app/schulis/2.2.1/data/vordrucke/vordruck mitteilung ueber eine anmeldung mit diffd b/app/schulis/2.2.1/data/vordrucke/vordruck mitteilung ueber eine anmeldung mit diffd new file mode 100644 index 0000000..8fbfa16 --- /dev/null +++ b/app/schulis/2.2.1/data/vordrucke/vordruck mitteilung ueber eine anmeldung mit diffd @@ -0,0 +1,44 @@ +<502 > +<503 > + +<504 > <501 > + + + + + +Mitteilung über eine Anmeldung + + + +Ab dem <512 >> nimmt am Unterricht teil: + + + Schüler: <513 > + Geburtsdatum: <514 > + + Adresse: <516 > + <517 > + Telefon: <518 > + + + +Klasse/Tutorenkurs: <519 >><520%#*, <520>> + + +<530%#*Der Schüler nimmt teil am Unterricht in:> + +<<530 > <531 > +<<532 > <533 > +<<534 > <535 > +<<536 > <537 > +<<538 > <539 > +<<540 > <541 > +<<542 > <543 > +<<544 > <545 > +<<546 > <547 > +<<548 > <549 > +<<550 > <551 > +<<552 > <553 > +<<554 > <555 > + diff --git a/app/schulis/2.2.1/data/vordrucke/vordruck mitteilung ueber eine anmeldung mit hjd b/app/schulis/2.2.1/data/vordrucke/vordruck mitteilung ueber eine anmeldung mit hjd new file mode 100644 index 0000000..fa551f8 --- /dev/null +++ b/app/schulis/2.2.1/data/vordrucke/vordruck mitteilung ueber eine anmeldung mit hjd @@ -0,0 +1,48 @@ +<502 > +<503 > + +<504 > <501 > + + + + + +Mitteilung über eine Anmeldung + + + +Ab dem <512 >> nimmt am Unterricht teil: + + + Schüler: <513 > + Geburtsdatum: <514 > + + Adresse: <516 > + <517 > + Telefon: <518 > + + + +Klasse/Tutorenkurs: <519 >><520%#*, <520>> + + +<530%#*Der Schüler nimmt teil am Unterricht in:> + +<530%#*Kurs Fach Fachlehrer> +<530%#*-------:-------------------------------:-----------------------------> +<530 > <531 > <532 >> +<533 > <534 > <535 >> +<536 > <537 > <538 >> +<539 > <540 > <541 >> +<542 > <543 > <544 >> +<545 > <546 > <547 >> +<548 > <549 > <550 >> +<551 > <552 > <553 >> +<554 > <555 > <556 >> +<557 > <558 > <559 >> +<560 > <561 > <562 >> +<563 > <564 > <565 >> +<566 > <567 > <568 >> +<569 > <570 > <571 >> +<572 > <573 > <574 >> + diff --git a/app/schulis/2.2.1/data/vordrucke/vordruck nachpruefungsbescheinigung b/app/schulis/2.2.1/data/vordrucke/vordruck nachpruefungsbescheinigung new file mode 100644 index 0000000..406c2c7 --- /dev/null +++ b/app/schulis/2.2.1/data/vordrucke/vordruck nachpruefungsbescheinigung @@ -0,0 +1,34 @@ +<502 > +<503 > + +<504 > <501 > + + + + + + + +Bescheinigung + + +Gemäß <519%#*<519>> hat <514%m#der Schüler#w#die Schülerin> +<513 >> <512%#*<512> ><511 >>, +geboren am <515 >>, in Jahrgangsstufe <517>> im +Fach <518%# *<518 >> an einer Prüfung +teilgenommen. +<514%m#Er#w#Sie> hat die Nachprüfung <516%x#nicht >bestanden und damit +<520%# *<520>> <516%x#nicht >erreicht. + +Diese Bescheinigung ist nur in Verbindung mit dem Versetzungszeugnis des +Schuljahres <508 >> gültig. Auf Antrag wird ein neues Zeugnis mit +der in der Nachprüfung erreichten Note ausgestellt. + + + + + + +<506 >> +(Schulleiter) + diff --git a/app/schulis/2.2.1/data/vordrucke/vordruck nachpruefungszulassung b/app/schulis/2.2.1/data/vordrucke/vordruck nachpruefungszulassung new file mode 100644 index 0000000..032afcb --- /dev/null +++ b/app/schulis/2.2.1/data/vordrucke/vordruck nachpruefungszulassung @@ -0,0 +1,48 @@ +<502 > +<503 > + +<504 > <501 > + + + + + +<515%v#<513> <512%#*<512> ><511>#m#<521> <520%#*<520> ><519>> +<515%v#<517>#m#<522>> + +<515%v#<518>#m#<523>> + + + + + +Versetzung zum Ende des Schuljahres <505 >> + + +Gemäß <524%#*<524>> hat die Versetzungskonferenz festgestellt, daß +<515%v#Sie#m#<514%m#Ihr Sohn#w#Ihre Tochter> <513>> eine Nachprüfung +<525%#*in <525>> ablegen <515 %v#können#m#kann>. + +Durch die Nachprüfung kann nachträglich <526%# *<526>> +erworben werden. + +Die Prüfung findet in den ersten Tagen nach den Schulferien statt. +Meldungen sind unter Angabe des Prüfungsfaches bis zum Ende der +zweiten Ferienwoche im Sekretariat abzugeben. Die genauen +Prüfungstermine erfragen Sie bitte in der letzten Ferienwoche im +Sekretariat. + +Das diesem Beschluß zugrundeliegende Zeugnis fügen wir als Anlage +bei. Wir überlassen es Ihrer Entscheidung, ob +<515%v#Sie#m#<514%m#Ihr Sohn#w#Ihre Tochter> <513>> am letzten +Schultag am Unterricht <515%v#teilnehmen#m#teilnimmt>. + + +Mit freundlichen Grüßen + + + + +<506 >> +(Schulleiter) + diff --git a/app/schulis/2.2.1/data/vordrucke/vordruck schulbescheinigung b/app/schulis/2.2.1/data/vordrucke/vordruck schulbescheinigung new file mode 100644 index 0000000..84c95a8 --- /dev/null +++ b/app/schulis/2.2.1/data/vordrucke/vordruck schulbescheinigung @@ -0,0 +1,29 @@ +<502 > +<503 > + +<504 > <501 > + + + + + +Bescheinigung + + + + +<12%m#Der Schüler#w#Die Schülerin> <20 >> <21%#*<21> ><3 >>, + +geboren am <5 >>, + +ist im Schuljahr <505 >> <12%m#Schüler#w#Schülerin> der Jahrgangsstufe <7>> +unserer Schule. + + + + + + +<506 >> +(Schulleiter) + diff --git a/app/schulis/2.2.1/data/vordrucke/vordruck1 auskunft betroffene b/app/schulis/2.2.1/data/vordrucke/vordruck1 auskunft betroffene new file mode 100644 index 0000000..c922e82 --- /dev/null +++ b/app/schulis/2.2.1/data/vordrucke/vordruck1 auskunft betroffene @@ -0,0 +1,60 @@ +<502 > <501 > +<504 > + +Auskunft über die im schulis-System gespeicherten Daten des Schülers + +Familienname: <3 > +Namenszusatz: <21 > Geburtsname: <22 > + Rufname: <4 > Vornamen: <20 > +Geburtsdatum: <5 > + + Status: <6 > <583 > + + Adresse: <24 > + <511 > + Telefon: <26 > + <512 > + Ortsteil: <27>> <513 >> + +erziehungsberechtigt: <34>> <514 >> + Name: <28 > + Vornamen: <29 > + Namenszusätze: <30 > + Adresse: <568 > + <515 > + Telefon: <569 > + + Geburtsort/Kreis: <40 >> / <41 >> + Staatsangehörigkeit: <35 >> <516 >> + Muttersprache: <39 >> <517 >> + Spätaussiedler: <518 >> + Geschlecht: <12>> <519 >> + Religionszugehörigkeit: <36 >> <520 >> +Zeugnisvermerk Religion: <521>> + + Einschulungsjahr: <42>> + letzte Schule: <570 > + <571 > + <522 > + letzte Klasse dort: <15> Schulform: <582>> <523 >> + + Eintritt in diese Schule: <43 > in Jahrgangsstufe: <13>> + Eintritt in Sek.II: <524> + aktuelle Schülergruppe: <7 >> <8 >> +Zugang zur akt. Jahrgangsstufe: <10>> <525 >> + neuer Zug/Tutor: <11> + + Abgangsdatum: <16 > Abgangsgrund: <17 >> <526 >> +erworbener Abschluß: <18 >> <527 >> + neue Schule: <572 > + <573 > + <528 > + + Vermerk1: <45 > + Vermerk2: <46 > + Vermerk3: <47 > + Vermerk4: <48 > + Vermerk5: <49 > + Vermerk6: <50 > + + diff --git a/app/schulis/2.2.1/data/vordrucke/vordruck1 auskunft lehrer b/app/schulis/2.2.1/data/vordrucke/vordruck1 auskunft lehrer new file mode 100644 index 0000000..7bedad8 --- /dev/null +++ b/app/schulis/2.2.1/data/vordrucke/vordruck1 auskunft lehrer @@ -0,0 +1,38 @@ +<502 > +<503 > +<504 > <501 > + + Auskunft an Betroffene im Sinne des Datenschutzesgesetzes + für: <511> <151%#*<151>> <513 > + + (Stunden- und Aufsichtsplan werden auf Wunsch gesondert erstellt.) + + Paraphe: <147> + Familienname: <148 > + Rufname: <149 > + Namenszusatz: <150 > + Amtsbezeichnung, Titel: <151 > + Geschlecht: <152> + + Adresse Straße, Nr.: <164 > + PLZ, Ort: <165 > + Tel.Nr.: <166 > + + Sprechzeiten: <163 > + + Sollstunden: <153> + Pflichtstunden: <154> + Ermäßigung 1: <155> Grund: <156>(<550 >>) + Ermäßigung 2: <157> Grund: <158>(<551 >>) + Ermäßigung 3: <159> Grund: <160>(<552 >>) + Ermäßigung 4: <161> Grund: <162>(<553 >>) + + Lehrbefähigung Fach 1: <514 > Art: <515>(<554 >>) + Fach 2: <516 > Art: <517>(<555 >>) + Fach 3: <518 > Art: <519>(<556 >>) + Fach 4: <520 > Art: <521>(<557 >>) + Fach 5: <522 > Art: <523>(<558 >>) + Fach 6: <524 > Art: <525>(<559 >>) + + + diff --git a/app/schulis/2.2.1/data/vordrucke/vordruck1 einzelstdpl lehrer b/app/schulis/2.2.1/data/vordrucke/vordruck1 einzelstdpl lehrer new file mode 100644 index 0000000..5dc680e --- /dev/null +++ b/app/schulis/2.2.1/data/vordrucke/vordruck1 einzelstdpl lehrer @@ -0,0 +1,13 @@ +<502 > <501 > +<504 > + + +Stundenplan für <511>> <151%#*<151>> <512 >> +Schuljahr <514>>, <515>>. Halbjahr + + + +Std: Montag : Dienstag : Mittwoch : Donnerstag: Freitag : Samstag : +---+-----------+-----------+-----------+-----------+-----------+-----------: + + diff --git a/app/schulis/2.2.1/data/vordrucke/vordruck1 einzelstdpl raeume b/app/schulis/2.2.1/data/vordrucke/vordruck1 einzelstdpl raeume new file mode 100644 index 0000000..2158494 --- /dev/null +++ b/app/schulis/2.2.1/data/vordrucke/vordruck1 einzelstdpl raeume @@ -0,0 +1,13 @@ +<502 > <501 > +<504 > + + +Belegungsplan für Raum <511>> (<514 >>) +Schuljahr <512>>, <513>>. Halbjahr + + + +Std: Montag : Dienstag : Mittwoch : Donnerstag: Freitag : Samstag : +---+-----------+-----------+-----------+-----------+-----------+-----------: + + diff --git a/app/schulis/2.2.1/data/vordrucke/vordruck1 einzelstdpl sek1 b/app/schulis/2.2.1/data/vordrucke/vordruck1 einzelstdpl sek1 new file mode 100644 index 0000000..e58f75f --- /dev/null +++ b/app/schulis/2.2.1/data/vordrucke/vordruck1 einzelstdpl sek1 @@ -0,0 +1,14 @@ +<502 > <501 > +<504 > + + +Stundenplan für Klasse <511> +Schuljahr <512>>, <513>>. Halbjahr + + Klassenleiter: <514 > +Stellvertreter: <516 > + +Std: Montag : Dienstag : Mittwoch : Donnerstag: Freitag : Samstag : +---+-----------+-----------+-----------+-----------+-----------+-----------: + + diff --git a/app/schulis/2.2.1/data/vordrucke/vordruck1 einzelstdpl sek2 b/app/schulis/2.2.1/data/vordrucke/vordruck1 einzelstdpl sek2 new file mode 100644 index 0000000..662b9f2 --- /dev/null +++ b/app/schulis/2.2.1/data/vordrucke/vordruck1 einzelstdpl sek2 @@ -0,0 +1,14 @@ +<502 > <501 > +<504 > + + +Stundenplan für <511 >> <512 >>, geb. <513 > +Schuljahr <514>>, <515>>. Halbjahr + +Tutorkurs: <516 > + + +Std: Montag : Dienstag : Mittwoch : Donnerstag: Freitag : Samstag : +---+-----------+-----------+-----------+-----------+-----------+-----------: + + diff --git a/app/schulis/2.2.1/data/vordrucke/vordruck1 kursli kopfueb b/app/schulis/2.2.1/data/vordrucke/vordruck1 kursli kopfueb new file mode 100644 index 0000000..b9a87c7 --- /dev/null +++ b/app/schulis/2.2.1/data/vordrucke/vordruck1 kursli kopfueb @@ -0,0 +1,10 @@ +<502 > <501 > +<504 > + + Kurs : <520 > +Lehrer : <521>><522 > + +Hinweis: Familienname, Rufname, Geburtsdatum +-------+------------------------------------------------------------------- + + diff --git a/app/schulis/2.2.1/data/vordrucke/vordruck1 protokoll versetzkonf b/app/schulis/2.2.1/data/vordrucke/vordruck1 protokoll versetzkonf new file mode 100644 index 0000000..d064f40 --- /dev/null +++ b/app/schulis/2.2.1/data/vordrucke/vordruck1 protokoll versetzkonf @@ -0,0 +1,6 @@ +<502 > <501 > +<503 > + + +Versetzungskonferenz zum Ende des Schuljahrs 19<505>, <511 > + diff --git a/app/schulis/2.2.1/data/vordrucke/vordruck1 unterrichtsvertlg fuer lehrer b/app/schulis/2.2.1/data/vordrucke/vordruck1 unterrichtsvertlg fuer lehrer new file mode 100644 index 0000000..0d85b97 --- /dev/null +++ b/app/schulis/2.2.1/data/vordrucke/vordruck1 unterrichtsvertlg fuer lehrer @@ -0,0 +1,21 @@ +<502 > +<503 > +<504 > <501 > + +Unterrichtsverteilung im Schuljahr <520>, <521>>. Halbjahr + +<522>> <151>> <150 >> <148 >> + + + Paraphe: <147> + + Sollstunden: <153> + Pflichtstunden: <154> + Ermäßigung 1: <155> Grund: <156>(<530 >>) + Ermäßigung 2: <157> Grund: <158>(<531 >>) + Ermäßigung 3: <159> Grund: <160>(<532 >>) + Ermäßigung 4: <161> Grund: <162>(<533 >>) + + Lehrveranstaltungen : <<183> <534>> <535> Wstd.: <<536> + + diff --git a/app/schulis/2.2.1/data/vordrucke/vordruck1 vertretungen b/app/schulis/2.2.1/data/vordrucke/vordruck1 vertretungen new file mode 100644 index 0000000..e1b636d --- /dev/null +++ b/app/schulis/2.2.1/data/vordrucke/vordruck1 vertretungen @@ -0,0 +1,14 @@ +<502 > +<503 > +<504 > <501 > + +Aufstellung der Daten über Vertretungen und Freistunden + +für: <550 > + + +Datum Zeit Art ausgefallene/vertretene + Lehrveranstaltungen +--------+------+-----+----------------------------- + + diff --git a/app/schulis/2.2.1/data/vordrucke/vordruck2 auskunft betroffene b/app/schulis/2.2.1/data/vordrucke/vordruck2 auskunft betroffene new file mode 100644 index 0000000..2531674 --- /dev/null +++ b/app/schulis/2.2.1/data/vordrucke/vordruck2 auskunft betroffene @@ -0,0 +1,3 @@ +Familienname: <3 > +Namenszusatz: <21 > Rufname: <4 > (Fortsetzung) + diff --git a/app/schulis/2.2.1/data/vordrucke/vordruck2 auskunft lehrer b/app/schulis/2.2.1/data/vordrucke/vordruck2 auskunft lehrer new file mode 100644 index 0000000..2be3ff8 --- /dev/null +++ b/app/schulis/2.2.1/data/vordrucke/vordruck2 auskunft lehrer @@ -0,0 +1,7 @@ + +Unterrichtsverteilung Schuljahr <526>>, <527>>.Halbjahr + +Jgst. Fach Kurs Wochenstd. + + + diff --git a/app/schulis/2.2.1/data/vordrucke/vordruck2 einzelstdpl lehrer b/app/schulis/2.2.1/data/vordrucke/vordruck2 einzelstdpl lehrer new file mode 100644 index 0000000..f9e0f34 --- /dev/null +++ b/app/schulis/2.2.1/data/vordrucke/vordruck2 einzelstdpl lehrer @@ -0,0 +1,9 @@ + + Klassenleitung/Tutor für: <540 > + +stellv. Klassenleitung für: <541 > + + Aufsichten: Ort Zeit + + + diff --git a/app/schulis/2.2.1/data/vordrucke/vordruck2 einzelstdpl raeume b/app/schulis/2.2.1/data/vordrucke/vordruck2 einzelstdpl raeume new file mode 100644 index 0000000..538fa14 --- /dev/null +++ b/app/schulis/2.2.1/data/vordrucke/vordruck2 einzelstdpl raeume @@ -0,0 +1,4 @@ +<520>> : <521 >: <522 >: <523 >: <524 >: <525 >: <526 >: + : <527> : <528> : <529> : <530> : <531> : <532> : + + diff --git a/app/schulis/2.2.1/data/vordrucke/vordruck2 einzelstdpl sek1 b/app/schulis/2.2.1/data/vordrucke/vordruck2 einzelstdpl sek1 new file mode 100644 index 0000000..16a5152 --- /dev/null +++ b/app/schulis/2.2.1/data/vordrucke/vordruck2 einzelstdpl sek1 @@ -0,0 +1,3 @@ +<520>> : <521 > : <522 > : <523 > : <524 > : <525 > : <526 > : + + diff --git a/app/schulis/2.2.1/data/vordrucke/vordruck2 einzelstdpl sek2 b/app/schulis/2.2.1/data/vordrucke/vordruck2 einzelstdpl sek2 new file mode 100644 index 0000000..a44f64b --- /dev/null +++ b/app/schulis/2.2.1/data/vordrucke/vordruck2 einzelstdpl sek2 @@ -0,0 +1,3 @@ +<540 > <541 > + + diff --git a/app/schulis/2.2.1/data/vordrucke/vordruck2 kursli zeile b/app/schulis/2.2.1/data/vordrucke/vordruck2 kursli zeile new file mode 100644 index 0000000..32a345c --- /dev/null +++ b/app/schulis/2.2.1/data/vordrucke/vordruck2 kursli zeile @@ -0,0 +1,3 @@ + <523> : <524 >>, <525 >>, <526 > + + diff --git a/app/schulis/2.2.1/data/vordrucke/vordruck2 protokoll versetzkonf b/app/schulis/2.2.1/data/vordrucke/vordruck2 protokoll versetzkonf new file mode 100644 index 0000000..288806c --- /dev/null +++ b/app/schulis/2.2.1/data/vordrucke/vordruck2 protokoll versetzkonf @@ -0,0 +1,13 @@ + + +Datum: ________ Beginn:_____ Uhr, Ende:_____ Uhr + + +Anwesend: + + <512%#*<512>> + +Ort, Zeit und Tagesordnung sind den Mitgliedern ordnungsgemäß bekannt +gegeben worden. Der Vorsitzende hat die Beschlußfähigkeit der Konferenz +festgestellt. + diff --git a/app/schulis/2.2.1/data/vordrucke/vordruck2 unterrichtsvertlg fuer lehrer b/app/schulis/2.2.1/data/vordrucke/vordruck2 unterrichtsvertlg fuer lehrer new file mode 100644 index 0000000..f29b7d5 --- /dev/null +++ b/app/schulis/2.2.1/data/vordrucke/vordruck2 unterrichtsvertlg fuer lehrer @@ -0,0 +1,3 @@ + <<183> <534>> <535> <<536> + + diff --git a/app/schulis/2.2.1/data/vordrucke/vordruck2 vertretungen b/app/schulis/2.2.1/data/vordrucke/vordruck2 vertretungen new file mode 100644 index 0000000..441742c --- /dev/null +++ b/app/schulis/2.2.1/data/vordrucke/vordruck2 vertretungen @@ -0,0 +1,3 @@ +<520 > <521> <522 > <523 > + + diff --git a/app/schulis/2.2.1/data/vordrucke/vordruck3 auskunft betroffene b/app/schulis/2.2.1/data/vordrucke/vordruck3 auskunft betroffene new file mode 100644 index 0000000..aad98ea --- /dev/null +++ b/app/schulis/2.2.1/data/vordrucke/vordruck3 auskunft betroffene @@ -0,0 +1,28 @@ + +Differenzierungsdaten: + 1. Fremdsprache: <55 >> <537 >> + von: <538> bis: <539> + 2. Fremdsprache: <58 >> <540 >> + von: <541> bis: <542> + 3. Fremdsprache: <61 >> <543 >> + von: <544> bis: <545> + 4. Fremdsprache: <64 >><546 >> + von: <547> bis: <548> + Religionsunterricht in: <67>> <549 >> + abgemeldet: <68 > wiederangemeldet: <69 > + Kunst/Musik: <70>> <550 >> +Wahlpflichtfächer in 09.1: <71 >> <551 >> + <72 >> <552 >> +Wahlpflichtfächer in 09.2: <73 >> <553 >> + <74 >> <554 >> +Wahlpflichtfächer in 10.1: <75 >> <555 >> + <76 >> <556 >> +Wahlpflichtfächer in 10.2: <77 >> <557 >> + <78 >> <558 >> + Arbeitsgemeinschaften: <79 >> <559 >> + von: <560> bis: <561> + Arbeitsgemeinschaften: <82 >> <562 >> + von: <563> bis: <564> + Arbeitsgemeinschaften: <85 >> <565 >> + von: <566> bis: <567> + diff --git a/app/schulis/2.2.1/data/vordrucke/vordruck3 auskunft lehrer b/app/schulis/2.2.1/data/vordrucke/vordruck3 auskunft lehrer new file mode 100644 index 0000000..6616e46 --- /dev/null +++ b/app/schulis/2.2.1/data/vordrucke/vordruck3 auskunft lehrer @@ -0,0 +1,3 @@ + <528 > <529> <530> <531> + + diff --git a/app/schulis/2.2.1/data/vordrucke/vordruck3 einzelstdpl lehrer b/app/schulis/2.2.1/data/vordrucke/vordruck3 einzelstdpl lehrer new file mode 100644 index 0000000..f54fce2 --- /dev/null +++ b/app/schulis/2.2.1/data/vordrucke/vordruck3 einzelstdpl lehrer @@ -0,0 +1,3 @@ + <543> <542 > + + diff --git a/app/schulis/2.2.1/data/vordrucke/vordruck3 einzelstdpl sek1 b/app/schulis/2.2.1/data/vordrucke/vordruck3 einzelstdpl sek1 new file mode 100644 index 0000000..e72e32c --- /dev/null +++ b/app/schulis/2.2.1/data/vordrucke/vordruck3 einzelstdpl sek1 @@ -0,0 +1,7 @@ + +Erläuterungen: + +Fach (Kopplung) Fach Lehrer +----:-----------:--------------------:-------------------------- + + diff --git a/app/schulis/2.2.1/data/vordrucke/vordruck3 protokoll versetzkonf b/app/schulis/2.2.1/data/vordrucke/vordruck3 protokoll versetzkonf new file mode 100644 index 0000000..cd69816 --- /dev/null +++ b/app/schulis/2.2.1/data/vordrucke/vordruck3 protokoll versetzkonf @@ -0,0 +1,9 @@ + + + +Abkürzungen in Spalte "Bem.": w/x = Schüler wiederholte diese Jgst. + ab = Schüler abgemeldet + + +Vorsitzender:______________________ Protokollführer:______________________ + diff --git a/app/schulis/2.2.1/data/vordrucke/vordruck4 auskunft betroffene b/app/schulis/2.2.1/data/vordrucke/vordruck4 auskunft betroffene new file mode 100644 index 0000000..2b24d03 --- /dev/null +++ b/app/schulis/2.2.1/data/vordrucke/vordruck4 auskunft betroffene @@ -0,0 +1,23 @@ + + +Daten zum Schuljahr <511>, <93>>. Halbjahr, Jgst. <94> Zug/Tutor: <95 > + + Versetzung: <518> <519 > + Warnung: <512> mit Bem.Nr.: <513> + Nachwarnung: <515> mit Bem.Nr.: <516> + <517%#*<517>> + Nachpr.mögl.in: <520> <521 > + <522> <523 > + <524> <525 > + abgelegt in: <526> mit Note: <527>> +Zeugnis Bem.Nr.: <528> + <529%#*<529>> + <530> + <531%#*<531>> + <532> + <533%#*<533>> + +Bemerkung zur Nachprüfung: <108> <537 >> + +Versäumt mit/ohne Entschuldigung: <534>>/<535>> Std. verspätet: <536>> mal + diff --git a/app/schulis/2.2.1/data/vordrucke/vordruck4 auskunft lehrer b/app/schulis/2.2.1/data/vordrucke/vordruck4 auskunft lehrer new file mode 100644 index 0000000..31bf2b0 --- /dev/null +++ b/app/schulis/2.2.1/data/vordrucke/vordruck4 auskunft lehrer @@ -0,0 +1,7 @@ + + +Leitung von Schülergruppen: <526 > + Klassenleiter/Tutor: <580 > <582 > <584 > <586 > <588 > + Stellvertreter: <581 > <583 > <585 > <587 > <589 > + + diff --git a/app/schulis/2.2.1/data/vordrucke/vordruck4 einzelstdpl sek1 b/app/schulis/2.2.1/data/vordrucke/vordruck4 einzelstdpl sek1 new file mode 100644 index 0000000..810e66f --- /dev/null +++ b/app/schulis/2.2.1/data/vordrucke/vordruck4 einzelstdpl sek1 @@ -0,0 +1,3 @@ +<518>> <519 > <520 > <521 > + + diff --git a/app/schulis/2.2.1/data/vordrucke/vordruck5 auskunft betroffene b/app/schulis/2.2.1/data/vordrucke/vordruck5 auskunft betroffene new file mode 100644 index 0000000..43c0388 --- /dev/null +++ b/app/schulis/2.2.1/data/vordrucke/vordruck5 auskunft betroffene @@ -0,0 +1,38 @@ + +Wahl geprüft: <537 > + +Fach <538 > +Art <539 > +Klausur <541 > +Kurs Nr. <542 > +Warnung <543 > +Note <544 > +Bem. dazu<545 > + +Bem. Nr. <546>: + <547%#*<547>> + <548>: + <549%#*<549>> + <550>: + <551%#*<551>> + <552>: + <553%#*<553>> + <554>: + <555%#*<555>> + <556>: + <557%#*<557>> + <558>: + <559%#*<559>> + <560>: + <561%#*<561>> + <562>: + <563%#*<563>> + <564>: + <565%#*<565>> + <566>: + <567%#*<567>> + <568>: + <569%#*<569>> + <570>: + <571%#*<571>> + diff --git a/app/schulis/2.2.1/data/vordrucke/vordruck5 auskunft lehrer b/app/schulis/2.2.1/data/vordrucke/vordruck5 auskunft lehrer new file mode 100644 index 0000000..2b5f0dd --- /dev/null +++ b/app/schulis/2.2.1/data/vordrucke/vordruck5 auskunft lehrer @@ -0,0 +1,20 @@ + + +Zeitwünsche <526 > +Wünsche für bestimmte Zeiten: + 1 2 3 4 5 6 7 8 9 10 11 12 + ----------------------------------------------------- + Mo <531>> <532>> <533>> <534>> <535>> <536>> <537>> <538>> <539>> <540>> <541>> <542>> + Di <543>> <544>> <545>> <546>> <547>> <548>> <549>> <550>> <551>> <552>> <553>> <554>> + Mi <555>> <556>> <557>> <558>> <559>> <560>> <561>> <562>> <563>> <564>> <565>> <566>> + Do <567>> <568>> <569>> <570>> <571>> <572>> <573>> <574>> <575>> <576>> <577>> <578>> + Fr <579>> <580>> <581>> <582>> <583>> <584>> <585>> <586>> <587>> <588>> <589>> <590>> + Sa <591>> <592>> <593>> <594>> <595>> <596>> + +insgesamt sollen frei sein (incl. den o.g. Wünschen) : + Anzahl Gewicht + ganze Tage <520> <521> + Vormittage <522> <523> + zusätzliche Nachmittage <524> <525> + + diff --git a/app/schulis/2.2.1/data/vordrucke/vordruck5 einzelstdpl sek1 b/app/schulis/2.2.1/data/vordrucke/vordruck5 einzelstdpl sek1 new file mode 100644 index 0000000..d7bd03e --- /dev/null +++ b/app/schulis/2.2.1/data/vordrucke/vordruck5 einzelstdpl sek1 @@ -0,0 +1,9 @@ + + +Räume für gekoppelten Unterricht: + +Kopplung Zeiten + Fach Räume +--------:-------:------:------:------:------:------:------:------:------: + + diff --git a/app/schulis/2.2.1/data/vordrucke/vordruck6 auskunft lehrer b/app/schulis/2.2.1/data/vordrucke/vordruck6 auskunft lehrer new file mode 100644 index 0000000..90c1a7a --- /dev/null +++ b/app/schulis/2.2.1/data/vordrucke/vordruck6 auskunft lehrer @@ -0,0 +1,5 @@ + +Vertretungen: +Datum: <520 > Zeit: <521> Art: <522 >> Lehrveranst.: <523 > + + diff --git a/app/schulis/2.2.1/data/vordrucke/vordruck6 einzelstdpl sek1 b/app/schulis/2.2.1/data/vordrucke/vordruck6 einzelstdpl sek1 new file mode 100644 index 0000000..d7c5b14 --- /dev/null +++ b/app/schulis/2.2.1/data/vordrucke/vordruck6 einzelstdpl sek1 @@ -0,0 +1,3 @@ +<530 > <531> <532> <533> <534> <535> <536> <537> <538> + + diff --git a/app/schulis/2.2.1/data/vordrucke/vordruck7 auskunft lehrer b/app/schulis/2.2.1/data/vordrucke/vordruck7 auskunft lehrer new file mode 100644 index 0000000..0ac9975 --- /dev/null +++ b/app/schulis/2.2.1/data/vordrucke/vordruck7 auskunft lehrer @@ -0,0 +1,3 @@ + <520 > <521> <522 >> <523 > + + diff --git a/app/schulis/2.2.1/data/vordrucke/vordruck7 einzelstdpl sek1 b/app/schulis/2.2.1/data/vordrucke/vordruck7 einzelstdpl sek1 new file mode 100644 index 0000000..b64618e --- /dev/null +++ b/app/schulis/2.2.1/data/vordrucke/vordruck7 einzelstdpl sek1 @@ -0,0 +1,3 @@ + <540 > <541> <542> <543> <544> <545> <546> <547> <548> + + diff --git a/app/schulis/2.2.1/source-disk b/app/schulis/2.2.1/source-disk new file mode 100644 index 0000000..0fbb9d3 --- /dev/null +++ b/app/schulis/2.2.1/source-disk @@ -0,0 +1,5 @@ +schulis-grundpaket-schulverwaltung-2.2.1/03_schulis-quellen.img +schulis-grundpaket-schulverwaltung-2.2.1/04_schulis-quellen.img +schulis-grundpaket-schulverwaltung-2.2.1/05_schulis-quellen.img +schulis-grundpaket-schulverwaltung-2.2.1/06_vordrucke.img +schulis-grundpaket-schulverwaltung-2.2.1/07_baisy-schulis-db.img diff --git a/app/schulis/2.2.1/src/0.ANSCHREIBEN.files b/app/schulis/2.2.1/src/0.ANSCHREIBEN.files new file mode 100644 index 0000000..1352f80 --- /dev/null +++ b/app/schulis/2.2.1/src/0.ANSCHREIBEN.files @@ -0,0 +1,14 @@ +1.anschr.schulbescheinigung +1.anschr.anmeldebestaetigung fuer jgst 5 und 11 +1.anschr.wiederholer +1.anschr.nachpruefungsbescheinigung +1.anschr.nachpruefungszulassung +1.auskunft.betroffene +1.anschr.mitteilungen neuangemeldete und abgemeldete +1.listen.anherk +3.anschr.betroffene lehrer +4.anschr.unterrichtsvertlg fuer lehrer +4.anschr.vertretungen + + + diff --git a/app/schulis/2.2.1/src/0.ANSCHRLISTWERKZEUGE TEIL2.files b/app/schulis/2.2.1/src/0.ANSCHRLISTWERKZEUGE TEIL2.files new file mode 100644 index 0000000..22746c7 --- /dev/null +++ b/app/schulis/2.2.1/src/0.ANSCHRLISTWERKZEUGE TEIL2.files @@ -0,0 +1,6 @@ +0.anschr.druckereinstellung +0.listen.werkzeuge +0.listen.druckbearbeitung +0.listen.steuerung + + diff --git a/app/schulis/2.2.1/src/0.ANSCHRLISTWERKZEUGE.files b/app/schulis/2.2.1/src/0.ANSCHRLISTWERKZEUGE.files new file mode 100644 index 0000000..aec57ff --- /dev/null +++ b/app/schulis/2.2.1/src/0.ANSCHRLISTWERKZEUGE.files @@ -0,0 +1,6 @@ +0.anschr.grundfunktionen +0.anschr.steuerfunktionen einfach +0.anschr.steuerfunktionen zusammengesetzt +0.schulis schrifttyp + + diff --git a/app/schulis/2.2.1/src/0.ERFASSUNGEN EINZELN 2.files b/app/schulis/2.2.1/src/0.ERFASSUNGEN EINZELN 2.files new file mode 100644 index 0000000..07e60dd --- /dev/null +++ b/app/schulis/2.2.1/src/0.ERFASSUNGEN EINZELN 2.files @@ -0,0 +1,10 @@ +3.erf lehrer +0.erf.faecher +0.schulkenndaten bearbeiten +0.erf.schuldaten +0.klassengruppen definieren +0.raumgruppen bearbeiten +0.erf zeitraster +0.erf aufsichtszeiten + + diff --git a/app/schulis/2.2.1/src/0.ERFASSUNGEN EINZELN.files b/app/schulis/2.2.1/src/0.ERFASSUNGEN EINZELN.files new file mode 100644 index 0000000..9931455 --- /dev/null +++ b/app/schulis/2.2.1/src/0.ERFASSUNGEN EINZELN.files @@ -0,0 +1,15 @@ +0.kurswahlbasis bereinigen +0.hjd grundfunktionen +1.erf.schuelerdaten +1.erf.abmeldedaten +1.abgegangene aussortieren +1.schuelerjgst aendern +1.halbjahresdaten bearbeiten +1.hoeherstufen anw do.prog +1.stat grundfunktionen +1.stat intern + + + + + diff --git a/app/schulis/2.2.1/src/0.ERFASSUNGEN LISTENWEISE.files b/app/schulis/2.2.1/src/0.ERFASSUNGEN LISTENWEISE.files new file mode 100644 index 0000000..51bb04d --- /dev/null +++ b/app/schulis/2.2.1/src/0.ERFASSUNGEN LISTENWEISE.files @@ -0,0 +1,10 @@ +0.hjd grundfunktionen +0.listenweise grundfunktionen +0.kurswahlbasis bereinigen +0.listenweise klassen erf +1.listenweise erg vers konf +1.listenweise erg nachpr +1.listenweise dif dat erf +1.listenweise klassenbildung +3.listenweise lehrer erf + diff --git a/app/schulis/2.2.1/src/0.ERFASSUNGEN.files b/app/schulis/2.2.1/src/0.ERFASSUNGEN.files new file mode 100644 index 0000000..139597f --- /dev/null +++ b/app/schulis/2.2.1/src/0.ERFASSUNGEN.files @@ -0,0 +1,2 @@ + + diff --git a/app/schulis/2.2.1/src/0.IDA SERVER.files b/app/schulis/2.2.1/src/0.IDA SERVER.files new file mode 100644 index 0000000..504c576 --- /dev/null +++ b/app/schulis/2.2.1/src/0.IDA SERVER.files @@ -0,0 +1,4 @@ +0.ida.data +0.ida.server + + diff --git a/app/schulis/2.2.1/src/0.IDA SICHERUNG.files b/app/schulis/2.2.1/src/0.IDA SICHERUNG.files new file mode 100644 index 0000000..6a7804e --- /dev/null +++ b/app/schulis/2.2.1/src/0.IDA SICHERUNG.files @@ -0,0 +1,4 @@ +0.ida.data +0.ida.form + + diff --git a/app/schulis/2.2.1/src/0.LISTEN 2.files b/app/schulis/2.2.1/src/0.LISTEN 2.files new file mode 100644 index 0000000..bfb49ca --- /dev/null +++ b/app/schulis/2.2.1/src/0.LISTEN 2.files @@ -0,0 +1,18 @@ +0.listen.faecher +0.listen.schuelergruppen +3.listen.paraphen +3.listen.sprechzeiten +3.listen.wochenstunden +3.listen.lehrbef faecherweise +3.listen.lehrbef lehrerweise +4.faecherangebot drucken +0.liste der zeitrasterdaten +4.listen.unterrichtsverteilung +0.listen.raumgruppen +0.listen.klassengruppen +4.zeitwuensche drucken +0.liste der aufsichtszeiten +4.listen.aufsichtsplan +4.liste ausgewaehlter kopplungen drucken + + diff --git a/app/schulis/2.2.1/src/0.LISTEN.files b/app/schulis/2.2.1/src/0.LISTEN.files new file mode 100644 index 0000000..af0173b --- /dev/null +++ b/app/schulis/2.2.1/src/0.LISTEN.files @@ -0,0 +1,15 @@ +1.listen.neuan +1.listen.gesamt +1.listen.gebu +1.listen.adressen +1.listen.klassenbuch +1.listen.klassen +1.listen.abgem +0.listen.benutz +1.listen.wiederholer +1.listen.nachpruefung +1.listen.prot versetzkonferenz +0.listen.schlueabku +0.listen.schulen + + diff --git a/app/schulis/2.2.1/src/0.LOCAL.files b/app/schulis/2.2.1/src/0.LOCAL.files new file mode 100644 index 0000000..1731322 --- /dev/null +++ b/app/schulis/2.2.1/src/0.LOCAL.files @@ -0,0 +1,4 @@ +0.grundfunktionen local +0.hoeherstufen local.prog + + diff --git a/app/schulis/2.2.1/src/0.anschr.druckereinstellung b/app/schulis/2.2.1/src/0.anschr.druckereinstellung new file mode 100644 index 0000000..5e014bf --- /dev/null +++ b/app/schulis/2.2.1/src/0.anschr.druckereinstellung @@ -0,0 +1,69 @@ +PACKET anschrdruckereinstellungDEFINES einstellungderausgabefueranschreiben, +einstellungderausgabefuermitteilung, +leseveraenderteausgabeneinstellunganschreiben, +leseveraenderteausgabeneinstellungmitteilung, +initialisieredruckerfueranschreiben,initialisieredruckerfuermitteilung,:REAL +VAR anschreibenstartx:=2.54,anschreibenstarty:=2.35,mitteilungstartx:=2.54, +mitteilungstarty:=2.35;INT VAR anschreibendruckbreite:=70, +mitteilungdruckbreite:=70;INT CONST minbreiteanschreiben:=50, +minbreitemitteilung:=70;LET maske="ms einstellung druck anschreiben";LET +schriftfeldnr=2,druckbreitefeldnr=3,mindruckbreitefeldnr=4,startxfeldnr=5, +startyfeldnr=6;LET maxstartxy=10.0,textnull="0.0",realnull=0.0, +eingabenichtsinnvoll=162;LET niltext="";PROC +initialisieredruckerfueranschreiben:setzeanzahlderzeichenprozeile( +anschreibendruckbreite);schrift(anschreibenschrifttyp);start( +anschreibenstartx,anschreibenstarty);END PROC +initialisieredruckerfueranschreiben;PROC einstellungderausgabefueranschreiben +:standardstartproc(maske);standardmaskenfeld(anschreibenschrifttyp, +schriftfeldnr);standardmaskenfeld(text(anschreibendruckbreite), +druckbreitefeldnr);standardmaskenfeld(text(minbreiteanschreiben), +mindruckbreitefeldnr);standardmaskenfeld(text(anschreibenstartx),startxfeldnr +);standardmaskenfeld(text(anschreibenstarty),startyfeldnr);standardnprocEND +PROC einstellungderausgabefueranschreiben;PROC +leseveraenderteausgabeneinstellunganschreiben:INT VAR testdruckzeilenbreite; +TEXT VAR teststartx,teststarty;BOOL VAR werteinordnung:=TRUE ; +testdruckzeilenbreite:=int(standardmaskenfeld(druckbreitefeldnr));teststartx +:=compress(standardmaskenfeld(startxfeldnr));teststarty:=compress( +standardmaskenfeld(startyfeldnr));ueberpruefendergegebenenwerte;IF +werteinordnungTHEN werteuebernehmen;enter(2)ELSE meldefehler;return(1)FI . +ueberpruefendergegebenenwerte:IF testdruckzeilenbreite<minbreiteanschreiben +THEN infeld(druckbreitefeldnr);werteinordnung:=FALSE ELIF (teststartx<> +textnullAND real(teststartx)=realnull)OR real(teststartx)>maxstartxyOR real( +teststartx)<realnullTHEN infeld(startxfeldnr);werteinordnung:=FALSE ELIF ( +teststarty<>textnullAND real(teststarty)=realnull)OR real(teststarty)> +maxstartxyOR real(teststarty)<realnullTHEN infeld(startyfeldnr); +werteinordnung:=FALSE ELSE werteinordnung:=TRUE FI .werteuebernehmen: +setzeschuliszeichensatz(standardmaskenfeld(schriftfeldnr)); +anschreibendruckbreite:=testdruckzeilenbreite;anschreibenstartx:=real( +teststartx);anschreibenstarty:=real(teststarty).meldefehler:standardmeldung( +eingabenichtsinnvoll,niltext).END PROC +leseveraenderteausgabeneinstellunganschreiben;PROC +initialisieredruckerfuermitteilung:setzeanzahlderzeichenprozeile( +mitteilungdruckbreite);schrift(mitteilungschrifttyp);start(mitteilungstartx, +mitteilungstarty);END PROC initialisieredruckerfuermitteilung;PROC +einstellungderausgabefuermitteilung:standardstartproc(maske); +standardmaskenfeld(mitteilungschrifttyp,schriftfeldnr);standardmaskenfeld( +text(mitteilungdruckbreite),druckbreitefeldnr);standardmaskenfeld(text( +minbreitemitteilung),mindruckbreitefeldnr);standardmaskenfeld(text( +mitteilungstartx),startxfeldnr);standardmaskenfeld(text(mitteilungstarty), +startyfeldnr);standardnprocEND PROC einstellungderausgabefuermitteilung;PROC +leseveraenderteausgabeneinstellungmitteilung:INT VAR testdruckzeilenbreite; +TEXT VAR teststartx,teststarty;BOOL VAR werteinordnung:=TRUE ; +testdruckzeilenbreite:=int(standardmaskenfeld(druckbreitefeldnr));teststartx +:=compress(standardmaskenfeld(startxfeldnr));teststarty:=compress( +standardmaskenfeld(startyfeldnr));ueberpruefendergegebenenwerte;IF +werteinordnungTHEN werteuebernehmen;enter(2)ELSE meldefehler;return(1)FI . +ueberpruefendergegebenenwerte:IF testdruckzeilenbreite<minbreitemitteilung +THEN infeld(druckbreitefeldnr);werteinordnung:=FALSE ELIF (teststartx<> +textnullAND real(teststartx)=realnull)OR real(teststartx)>maxstartxyOR real( +teststartx)<realnullTHEN infeld(startxfeldnr);werteinordnung:=FALSE ELIF ( +teststarty<>textnullAND real(teststarty)=realnull)OR real(teststarty)> +maxstartxyOR real(teststarty)<realnullTHEN infeld(startyfeldnr); +werteinordnung:=FALSE ELSE werteinordnung:=TRUE FI .werteuebernehmen: +setzeschuliszeichensatz(standardmaskenfeld(schriftfeldnr)); +mitteilungdruckbreite:=testdruckzeilenbreite;mitteilungstartx:=real( +teststartx);mitteilungstarty:=real(teststarty).meldefehler:standardmeldung( +eingabenichtsinnvoll,niltext).END PROC +leseveraenderteausgabeneinstellungmitteilung;END PACKET +anschrdruckereinstellung + diff --git a/app/schulis/2.2.1/src/0.anschr.grundfunktionen b/app/schulis/2.2.1/src/0.anschr.grundfunktionen new file mode 100644 index 0000000..0330b7a --- /dev/null +++ b/app/schulis/2.2.1/src/0.anschr.grundfunktionen @@ -0,0 +1,193 @@ +PACKET anschrgrundfunktionenfueranschreibenDEFINES volljaehrig, +setzesonderwert,setzesonderwerteschulkenndaten,zeigeallesonderwerte, +initialisieresonderwerte,sonderwert,indexadressat,adressat, +setzeanzahlderzeichenprozeile,schrift,start,schreibesteuerzeichenzeile, +briefalternative:LET linkeklammer="<",rechteklammer=">",parametergrenze="%", +parametertrennzeichen="#",otherwise="*",niltext="";INT CONST indexadressat:= +510;LET swindexdatum=1,swindexschulname=2,swindexschulstrasse=3, +swindexschulort=4,swindexschuljahr=5,swindexschulleiter=6, +swindexnaechstesschuljahr=7,swindexvorangehendesschuljahr=8,swindexhalbjahr=9 +;LET kennzahlsonderwert=500;LET laengedessonderwertpuffers=100, +anzahlsonderwerteschulkenndaten=10;LET volljaehrigkeitsalter=18;TEXT VAR +schrifttyp:="pica",ersterparameterstartanweisung:="1.0", +zweiterparameterstartanweisung:="1.0";INT VAR zeilenlaenge:=70;ROW +laengedessonderwertpuffersTEXT VAR sonderwertpuffer;BOOL PROC volljaehrig( +TEXT CONST alter):TEXT VAR stichtag:=date;change(stichtag,7,8,text(int( +subtext(stichtag,7,8))-volljaehrigkeitsalter));datum(alter)<=datum(stichtag) +END PROC volljaehrig;PROC initialisieresonderwerte:INT VAR z;FOR zFROM +anzahlsonderwerteschulkenndaten+1UPTO laengedessonderwertpuffersREP +sonderwertpuffer(z):=""PER END PROC initialisieresonderwerte;PROC +initialisiereallesonderwerte:INT VAR z;FOR zFROM 1UPTO +anzahlsonderwerteschulkenndatenREP sonderwertpuffer(z):=""PER ; +initialisieresonderwerteEND PROC initialisiereallesonderwerte;PROC +setzesonderwert(INT CONST index,TEXT CONST sondertext):IF (index>( +kennzahlsonderwert+anzahlsonderwerteschulkenndaten))AND (index<= +laengedessonderwertpuffers+kennzahlsonderwert)THEN sonderwertpuffer(index- +kennzahlsonderwert):=sondertextFI END PROC setzesonderwert;PROC +sonderwertefuernaechstesundvorangehendesschuljahr(TEXT CONST +aktuellesschuljahr):sonderwertfuernaechstesschuljahr; +sonderwertfuervorangehendesschuljahr.sonderwertfuernaechstesschuljahr: +sonderwertpuffer(swindexnaechstesschuljahr):=addierezumerstenjahreins+"/"+ +addierezumzweitenjahreins;.addierezumerstenjahreins:text((int(subtext( +aktuellesschuljahr,1,2))+1)MOD 100).addierezumzweitenjahreins:text((int( +subtext(aktuellesschuljahr,3,4))+1)MOD 100). +sonderwertfuervorangehendesschuljahr:sonderwertpuffer( +swindexvorangehendesschuljahr):=subtrahierevomerstenjahreins+"/"+ +subtrahierevomzweitenjahreins;.subtrahierevomerstenjahreins:text((int(subtext +(aktuellesschuljahr,1,2))+99)MOD 100).subtrahierevomzweitenjahreins:text((int +(subtext(aktuellesschuljahr,3,4))+99)MOD 100).END PROC +sonderwertefuernaechstesundvorangehendesschuljahr;PROC zeigeallesonderwerte: +INT VAR z,z1;page;z:=1;REP FOR z1FROM 1UPTO 20REP putline(text(z)+" "+ +sonderwertpuffer(z));zINCR 1;PER ;pauseUNTIL z>=laengedessonderwertpuffers +PER ;END PROC zeigeallesonderwerte;TEXT PROC sonderwert(INT CONST swindex): +IF swindex>kennzahlsonderwertAND swindex<=kennzahlsonderwert+ +laengedessonderwertpuffersTHEN sonderwertpuffer(swindex-kennzahlsonderwert) +ELSE niltextFI END PROC sonderwert;PROC adressat(TEXT CONST name): +sonderwertpuffer(indexadressat-kennzahlsonderwert):=compress(subtext(name,1, +20))END PROC adressat;TEXT PROC lueckenwert(INT CONST fnr1):IF fnr1<= +kennzahlsonderwertTHEN aufbereiteterdbwertELSE sonderwertpuffer(fnr1- +kennzahlsonderwert)FI .aufbereiteterdbwert:IF (feldtyp(fnr1)=intfeldCAND +intwert(fnr1)=0)COR (feldtyp(fnr1)=datumfeldCAND wert(fnr1)="01.01.00")THEN +""ELSE wert(fnr1)FI .END PROC lueckenwert;TEXT PROC zeilenalternative(TEXT +CONST eingabe,BOOL CONST rekursiveraufruf):INT VAR positionlinkeklammer:=1, +positionrechteklammer:=1,positionlinkeskreuz,positionrechteskreuz, +positionmittlereskreuz,positionparametergrenze,parameter1,parameter2, +positionparametertrennzeichen,laenge,pufferlaenge,aktuelleposition, +positionotherwise,anzahldergeoeffnetenklammern;BOOL VAR ausdruckvorhanden, +caseaufruf,linkeseitevariabel,rechteseitevariabel;TEXT VAR puffer, +vergleichswert,aktuellessymbol,ausgabe:=eingabe;REP +auffindeneinesspitzgeklammertenausdrucks;IF ausdruckvorhandenTHEN +bestimmungderuebergabeparameterfuerdieprozedurlueckenwert; +aufrufderprozedurlueckenwert;IF NOT caseaufrufTHEN bestimmungdesteiltextes +ELSE bestimmungderrichtigenalternativeFI ; +einsetzendesteiltextesoderderalternative;FI ;UNTIL NOT ausdruckvorhandenPER ; +ausgabe.auffindeneinesspitzgeklammertenausdrucks:aktuelleposition:=0; +linkeseitevariabel:=FALSE ;rechteseitevariabel:=FALSE ;aktuelleposition:=pos( +ausgabe,linkeklammer);ausdruckvorhanden:=aktuelleposition<>0; +positionlinkeklammer:=aktuelleposition. +bestimmungderuebergabeparameterfuerdieprozedurlueckenwert: +ueberpruefeoblinkeseitedoppeltgeklammert;bestimmedenerstenuebergabeparameter; +IF aktuellessymbol<>parametertrennzeichenTHEN parameter2:=1;ELSE +bestimmedenzweitenuebergabeparameterFI ;IF aktuellessymbol=rechteklammerTHEN +caseaufruf:=FALSE ;fuehreleseoperationaus; +ueberpruefeobrechteseitedoppeltgeklammertELSE caseaufruf:=TRUE ; +positionparametergrenze:=aktuellepositionFI .fuehreleseoperationaus: +aktuellepositionINCR 1;aktuellessymbol:=ausgabeSUB aktuelleposition;IF +aktuellessymbol=linkeklammerTHEN anzahldergeoeffnetenklammernINCR 1ELIF +aktuellessymbol=rechteklammerTHEN anzahldergeoeffnetenklammernDECR 1FI . +ueberpruefeoblinkeseitedoppeltgeklammert:fuehreleseoperationaus; +linkeseitevariabel:=aktuellessymbol=linkeklammer. +bestimmedenerstenuebergabeparameter:WHILE NOT (aktuellessymbol= +parametertrennzeichenOR aktuellessymbol=parametergrenzeOR aktuellessymbol= +rechteklammer)REP fuehreleseoperationausPER ;IF linkeseitevariabelTHEN +parameter1:=int(subtext(ausgabe,positionlinkeklammer+2,aktuelleposition-1)) +ELSE parameter1:=int(subtext(ausgabe,positionlinkeklammer+1,aktuelleposition- +1))FI .bestimmedenzweitenuebergabeparameter:positionparametertrennzeichen:= +aktuelleposition;REP fuehreleseoperationausUNTIL aktuellessymbol= +parametergrenzeOR aktuellessymbol=rechteklammerPER ;parameter2:=int(subtext( +ausgabe,positionparametertrennzeichen+1,aktuelleposition-1)). +ueberpruefeobrechteseitedoppeltgeklammert:IF aktuellessymbol=rechteklammer +THEN rechteseitevariabel:=TRUE ;positionrechteklammer:=aktuellepositionELSE +positionrechteklammer:=aktuelleposition-1FI .bestimmungdesteiltextes:IF NOT +rekursiveraufrufTHEN bestimmungderlaengederauszufuellendenluecke; +entsprechendenabschnittdeserhaltenenwortesbestimmenFI . +aufrufderprozedurlueckenwert:puffer:=lueckenwert(parameter1#,parameter2#). +bestimmungderlaengederauszufuellendenluecke:laenge:=positionrechteklammer- +positionlinkeklammer+1.entsprechendenabschnittdeserhaltenenwortesbestimmen: +pufferlaenge:=length(puffer);IF pufferlaenge<=laengeTHEN IF NOT ( +linkeseitevariabelOR rechteseitevariabel)THEN puffer:=puffer+((laenge- +pufferlaenge)*" ")ELIF linkeseitevariabelTHEN puffer:=((laenge-pufferlaenge)* +" ")+pufferFI ;ELSE IF NOT linkeseitevariabelTHEN puffer:=subtext(puffer,1, +laenge);ELSE puffer:=subtext(puffer,pufferlaenge-laenge+1,pufferlaenge)FI ; +FI .bestimmungderrichtigenalternative:bestimmungdeserstenvergleichswertes; +WHILE vergleichswertstimmtnichtuebereinundeinweiterervorhandenREP +suchenaechstenvergleichswertPER ;positionrechteklammerbeicaseaufrufbestimmen; +IF vergleichswertstimmtmitdemergebnisausdemlueckenwertaufrufuebereinTHEN +bereitstellenderentsprechendenalternativeELIF (ausgabeSUB positionotherwise)= +otherwiseTHEN puffer:=zeilenalternative(subtext(ausgabe,positionotherwise+1, +positionrechteklammer-1),TRUE )ELSE bereitstelleneinerleerenalternativeFI . +bestimmungdeserstenvergleichswertes:positionlinkeskreuz:= +positionparametergrenze;positionmittlereskreuz:=pos(ausgabe, +parametertrennzeichen,positionlinkeskreuz+1);vergleichswert:=subtext(ausgabe, +positionlinkeskreuz+1,positionmittlereskreuz-1);rechteskreuzbestimmen. +suchenaechstenvergleichswert:positionlinkeskreuz:=positionrechteskreuz; +positionmittlereskreuz:=pos(ausgabe,parametertrennzeichen,positionlinkeskreuz ++1);vergleichswert:=subtext(ausgabe,positionlinkeskreuz+1, +positionmittlereskreuz-1);rechteskreuzbestimmen.rechteskreuzbestimmen: +aktuelleposition:=positionmittlereskreuz;anzahldergeoeffnetenklammern:=0;REP +fuehreleseoperationausUNTIL (anzahldergeoeffnetenklammern=0AND ( +aktuellessymbol=parametertrennzeichenOR aktuellessymbol=otherwise))OR +anzahldergeoeffnetenklammern<0PER ;positionrechteskreuz:=aktuelleposition; +positionotherwise:=aktuelleposition. +vergleichswertstimmtmitdemergebnisausdemlueckenwertaufrufueberein: +vergleichswert=puffer.bereitstellenderentsprechendenalternative:puffer:= +zeilenalternative(subtext(ausgabe,positionmittlereskreuz+1, +positionrechteskreuz-1),TRUE ).bereitstelleneinerleerenalternative:puffer:="" +.vergleichswertstimmtnichtuebereinundeinweiterervorhanden:NOT +vergleichswertstimmtmitdemergebnisausdemlueckenwertaufrufuebereinAND +einweiterervergleichswertistvorhanden.einweiterervergleichswertistvorhanden: +aktuellessymbol=parametertrennzeichen. +positionrechteklammerbeicaseaufrufbestimmen:anzahldergeoeffnetenklammern:=0; +IF aktuellessymbol<>rechteklammerTHEN WHILE NOT (anzahldergeoeffnetenklammern +<0AND aktuellessymbol=rechteklammer)REP fuehreleseoperationausPER FI ; +positionrechteklammer:=aktuelleposition. +einsetzendesteiltextesoderderalternative:change(ausgabe,positionlinkeklammer, +positionrechteklammer,puffer).END PROC zeilenalternative;PROC +setzeanzahlderzeichenprozeile(INT CONST anzahl):zeilenlaenge:=anzahlEND PROC +setzeanzahlderzeichenprozeile;PROC schrift(TEXT CONST typ):schrifttyp:=typ +END PROC schrift;PROC start(REAL CONST x,y):ersterparameterstartanweisung:= +text(x);zweiterparameterstartanweisung:=text(y)END PROC start;PROC +schreibesteuerzeichenzeile(TEXT CONST dateiname):FILE VAR f:=sequentialfile( +output,dateiname);LET druckersteuerzeichen="#",praefixschrifttypanweisung= +"type(""",praefixstartanweisung="start(",komma=",",suffixstartanweisung=")", +suffixschrifttypanweisung=""")",pagelengthanweisung="#pagelength(29.0)#"; +putline(f,druckersteuerzeichen+praefixschrifttypanweisung+schrifttyp+ +suffixschrifttypanweisung+druckersteuerzeichen+druckersteuerzeichen+ +praefixstartanweisung+ersterparameterstartanweisung+komma+ +zweiterparameterstartanweisung+suffixstartanweisung+druckersteuerzeichen+ +pagelengthanweisung)END PROC schreibesteuerzeichenzeile;PROC briefalternative +(TEXT CONST eingabedatei,ausgabedatei):TEXT VAR ausgabe:=ausgabedatei;TEXT +VAR zeile:="",text:="",praefixdernaechstenzeile:="",briefzeile:="";BOOL VAR +absatzende;INT VAR postrennzeichen:=1,z;LET trennzeichen=" ";FILE VAR f:= +sequentialfile(output,ausgabe);FILE VAR eingabe:=sequentialfile(input, +eingabedatei);WHILE NOT eof(eingabe)REP holezeileausdemvordruck; +einrueckendererstenbriefzeilevorbereiten;REP ueberpruefeaufabsatzende; +ersetzeindergeholtenzeilediegeklammertenausdruecke; +konkatenierediegeholtezeilemitdemrestdervorangehenden;IF briefzeilelanggenug +OR absatzendeTHEN zeilenumbruch;WHILE absatzendeAND nochtextvorhandenREP +bildedenrestdesumbruchs;zeilenumbruchPER FI ;IF NOT absatzendeTHEN +holezeileausdemvordruck;einrueckendernaechstenbriefzeilevorbereiten;FI ; +UNTIL absatzendePER PER .holezeileausdemvordruck:getline(eingabe,zeile). +konkatenierediegeholtezeilemitdemrestdervorangehenden:briefzeile:=text+zeile+ +trennzeichen;text:=briefzeile.ueberpruefeaufabsatzende:absatzende:=(zeileSUB +(length(zeile)))=trennzeichen.briefzeilelanggenug:(length(briefzeile))>= +zeilenlaenge.bildedenrestdesumbruchs:briefzeile:=text.nochtextvorhanden: +length(subtext(text,length(praefixdernaechstenzeile)+1))>1.zeilenumbruch:IF ( +zeilenlaenge<length(briefzeile))THEN postrennzeichen:=zeilenlaenge+1ELSE +postrennzeichen:=length(briefzeile)FI ;WHILE (briefzeileSUB postrennzeichen) +<>trennzeichenREP postrennzeichen:=postrennzeichen-1PER ;putline(f,subtext( +briefzeile,1,postrennzeichen-1));text:=praefixdernaechstenzeile+subtext( +briefzeile,postrennzeichen+1);.einrueckendernaechstenbriefzeilevorbereiten: +praefixdernaechstenzeile:="";z:=1;WHILE ((zeileSUB z)=trennzeichen)AND ( +length(zeile)>z)REP praefixdernaechstenzeile:=praefixdernaechstenzeile+ +trennzeichen;z:=z+1PER ;zeile:=subtext(zeile,z);. +einrueckendererstenbriefzeilevorbereiten:praefixdernaechstenzeile:="";z:=1; +WHILE ((zeileSUB z)=trennzeichen)AND (length(zeile)>z)REP +praefixdernaechstenzeile:=praefixdernaechstenzeile+trennzeichen;z:=z+1PER ; +text:="";.ersetzeindergeholtenzeilediegeklammertenausdruecke:zeile:= +zeilenalternative(zeile,FALSE ).END PROC briefalternative;PROC +setzesonderwerteschulkenndaten:TEXT VAR schlsicherung;savetupel(dnrschluessel +,schlsicherung);TEXT VAR aktj:=schulkenndatum("Schuljahr");sonderwertpuffer( +swindexschulname):=schulkenndatum("Schulname");sonderwertpuffer( +swindexschulstrasse):=schulkenndatum("Schulstraße");sonderwertpuffer( +swindexschulort):=schulkenndatum("Schulort");sonderwertpuffer( +swindexschuljahr):=aktj;insertchar(sonderwertpuffer(swindexschuljahr),"/",3); +sonderwertpuffer(swindexschulleiter):=schulkenndatum("Schulleiter"); +sonderwertpuffer(swindexhalbjahr):=schulkenndatum("Schulhalbjahr"); +sonderwertpuffer(swindexdatum):=date; +sonderwertefuernaechstesundvorangehendesschuljahr(aktj);restoretupel( +dnrschluessel,schlsicherung);ENDPROC setzesonderwerteschulkenndaten; +initialisiereallesonderwerte;initialisiereschriftundstart. +initialisiereschriftundstart:schrift("pica");.END PACKET +anschrgrundfunktionenfueranschreiben; + diff --git a/app/schulis/2.2.1/src/0.anschr.steuerfunktionen einfach b/app/schulis/2.2.1/src/0.anschr.steuerfunktionen einfach new file mode 100644 index 0000000..e0024ca --- /dev/null +++ b/app/schulis/2.2.1/src/0.anschr.steuerfunktionen einfach @@ -0,0 +1,96 @@ +PACKET anschrsteuerfunktionenfuereinfacheanschreibenDEFINES anschreibenstart, +naechstesanschreiben:LET anschreibentext="Text des Anschreibens";LET manager= +"anschreiben server";LET niltext="",nildatum="01.01.00";LET nproc=1, +eingangsbildschirm=2;LET vorwaertstaste="a";LET tupelstackgroesse=10;LET +ROWTEXT =ROW 10TEXT ;LET druckmeldnr=125,existiertnichtnr=126,leermeldnr=127, +endemeldnr=128,weitereangabenr=129,nichterstellbarmeldnr=130;TEXT VAR +druckmeld:="";LET meldkz="#";INT VAR dateinummer,aktuellerindex,anzgeftupel; +TEXT VAR anschreibenvordruck;BOOL VAR einzelbearbeitung;PROC anschreibenstart +(INT CONST aktuellerinx,TEXT CONST vordruck,BOOL CONST anschreibenzeigen, +peinzelbearbeitung,BOOL PROC sonderwerteundueberpruefungauferstellbarkeit, +BOOL PROC pruefespeziell):ROWTEXT VAR schluesselsve1,schluesselsve2;INT VAR i +;vorbereitungen;IF einzelbearbeitungTHEN einzelanschreibenELSE +anschreibenfuerbestandFI .anschreibenfuerbestand:IF leererbestandTHEN +meldeleerenbestand;zurueckzumeingangsbildschirmELSE +bearbeiteallediesesbestandesFI .bearbeiteallediesesbestandes:IF +anschreibenzeigenTHEN erstenbearbeitenELSE anschreibenleseschleife(BOOL PROC +sonderwerteundueberpruefungauferstellbarkeit,BOOL PROC pruefespeziell); +meldeendederbrieferstellung;zurueckzumeingangsbildschirmFI .erstenbearbeiten: +BOOL VAR erstellbar:=TRUE ;BOOL VAR bestandleer:=FALSE ;erstellbar:= +sonderwerteundueberpruefungauferstellbarkeit;IF erstellbarTHEN +bearbeitenzumzeigenELSE REP IF anzgeftupel=0THEN anzgeftupel:= +tupelstackgroesse;multisucc(aktuellerindex,anzgeftupel)FI ;IF anzgeftupel<>0 +THEN multisucc;anzgeftupelDECR 1;bestandleer:=NOT pruefespeziellELSE +bestandleer:=TRUE FI UNTIL bestandleerCOR +sonderwerteundueberpruefungauferstellbarkeitPER ;IF NOT bestandleerTHEN +bearbeitenzumzeigenELSE zurueckzumeingangsbildschirm; +meldeendederbrieferstellungFI FI .bearbeitenzumzeigen:IF einzelbearbeitung +CAND NOT sonderwerteundueberpruefungauferstellbarkeitTHEN +meldenichterstellbar;zurueckzumeingangsbildschirmELSE +schreibesteuerzeichenzeile(anschreibentext);briefalternative( +anschreibenvordruck,anschreibentext);editierebriefFI .einzelanschreiben: +direktlesen;IF gefundenTHEN IF eindeutigTHEN datenlesen;IF anschreibenzeigen +THEN bearbeitenzumzeigenELSE einzelbriefschreiben; +zurueckzumeingangsbildschirmFI ELSE meldeanforderunggenauererangaben; +zurueckzumeingangsbildschirmFI ELSE meldenichtgefunden; +zurueckzumeingangsbildschirmFI .vorbereitungen:dateinummer:=dateinr(primdatid +(aktuellerinx));aktuellerindex:=aktuellerinx;einzelbearbeitung:= +peinzelbearbeitung;meldungstext(druckmeldnr,druckmeld); +setzesonderwerteschulkenndaten;setzewerte;holeanschreibenvordruck.setzewerte: +anschreibenvordruck:=vordruck.holeanschreibenvordruck:loeschealtenvordruck; +fetch(anschreibenvordruck,/manager).loeschealtenvordruck:forget(vordruck, +quiet).direktlesen:gesetztenschluesselsichern(schluesselsve1);anzgeftupel:=2; +multisearchforward(aktuellerindex,anzgeftupel).gefunden:IF anzgeftupel=0THEN +FALSE ELSE multisucc;pruefespeziellCAND schluesselgleichFI .schluesselgleich: +NOT schluesselungleich(schluesselsve1,schluesselsve1).eindeutig:anzgeftupel=1 +COR naechsterungleich.naechsterungleich:gesetztenschluesselsichern( +schluesselsve2);multisucc;IF NOT pruefespeziellTHEN TRUE ELSE +schluesselungleich(schluesselsve1,schluesselsve2)FI .datenlesen:stackentry(1) +.einzelbriefschreiben:IF NOT sonderwerteundueberpruefungauferstellbarkeit +THEN meldenichterstellbarELSE briefschreibenFI .meldenichtgefunden: +standardmeldung(existiertnichtnr,niltext).meldeanforderunggenauererangaben: +standardmeldung(weitereangabenr,niltext).meldenichterstellbar:standardmeldung +(nichterstellbarmeldnr,sonderwert(indexadressat)+meldkz). +meldeendederbrieferstellung:standardmeldung(endemeldnr,niltext). +zurueckzumeingangsbildschirm:return(nproc).leererbestand:anzgeftupel:= +tupelstackgroesse;multisearchforward(aktuellerindex,anzgeftupel);IF +anzgeftupel<>0THEN multisucc;anzgeftupelDECR 1;NOT pruefespeziellELSE TRUE +FI .meldeleerenbestand:standardmeldung(leermeldnr,niltext).END PROC +anschreibenstart;BOOL PROC schluesselungleich(ROWTEXT CONST sve1,sve2):INT +VAR i;FOR iFROM 1UPTO anzkey(dateinummer)REP IF sve1[i]=""COR (feldtyp( +dateinummer+i)=datumfeldCAND sve1[i]=nildatum)THEN LEAVE schluesselungleich +WITH FALSE FI ;IF sve2[i]<>wert(dateinummer+i)THEN LEAVE schluesselungleich +WITH TRUE FI PER ;FALSE ENDPROC schluesselungleich;PROC +gesetztenschluesselsichern(ROW 10TEXT VAR schluesselsve):INT VAR i;FOR iFROM +1UPTO anzkey(dateinummer)REP schluesselsve[i]:=wert(dateinummer+i)PER +ENDPROC gesetztenschluesselsichern;PROC briefschreiben: +schreibesteuerzeichenzeile(anschreibentext);briefalternative( +anschreibenvordruck,anschreibentext);print(anschreibentext);standardmeldung( +druckmeldnr,sonderwert(indexadressat)+meldkz);forget(anschreibentext,quiet) +END PROC briefschreiben;PROC anschreibenleseschleife(BOOL PROC +sonderwerteundueberpruefungauferstellbarkeit,BOOL PROC pruefespeziell):BOOL +VAR schluss:=FALSE ;vorlesen;leseschleife.leseschleife:WHILE NOT schlussREP +IF sonderwerteundueberpruefungauferstellbarkeitTHEN briefschreibenELSE +standardmeldung(nichterstellbarmeldnr,sonderwert(indexadressat)+meldkz)FI ; +lesenPER .lesen:IF anzgeftupel=0THEN anzgeftupel:=tupelstackgroesse;multisucc +(aktuellerindex,anzgeftupel)FI ;satzlesen.vorlesen:anzgeftupel:= +tupelstackgroesse;multisearchforward(aktuellerindex,anzgeftupel);satzlesen. +satzlesen:IF anzgeftupel<>0THEN multisucc;anzgeftupelDECR 1;schluss:=NOT +pruefespeziellELSE schluss:=TRUE FI .END PROC anschreibenleseschleife;PROC +editierebrief:editiere(anschreibentext,vorwaertstaste,FALSE )END PROC +editierebrief;PROC naechstesanschreiben(BOOL PROC +sonderwerteundueberpruefungauferstellbarkeit,BOOL PROC pruefespeziell,BOOL +CONST drucken):BOOL VAR bestandleer:=FALSE ;IF druckenTHEN print( +anschreibentext);standardmeldung(druckmeld#nr,#,sonderwert(indexadressat)+ +meldkz)FI ;forget(anschreibentext,quiet);IF einzelbearbeitungTHEN enter( +eingangsbildschirm)ELSE REP IF anzgeftupel=0THEN anzgeftupel:= +tupelstackgroesse;multisucc(aktuellerindex,anzgeftupel)FI ;IF anzgeftupel<>0 +THEN multisucc;anzgeftupelDECR 1;bestandleer:=NOT pruefespeziellELSE +bestandleer:=TRUE FI UNTIL bestandleerCOR +sonderwerteundueberpruefungauferstellbarkeitPER ;IF NOT bestandleerTHEN +schreibesteuerzeichenzeile(anschreibentext);briefalternative( +anschreibenvordruck,anschreibentext);return(nproc)ELSE standardmeldung( +endemeldnr,niltext);#enter(eingangsbildschirm)#return(eingangsbildschirm)FI +FI END PROC naechstesanschreiben;END PACKET +anschrsteuerfunktionenfuereinfacheanschreiben; + diff --git a/app/schulis/2.2.1/src/0.anschr.steuerfunktionen zusammengesetzt b/app/schulis/2.2.1/src/0.anschr.steuerfunktionen zusammengesetzt new file mode 100644 index 0000000..0b77e49 --- /dev/null +++ b/app/schulis/2.2.1/src/0.anschr.steuerfunktionen zusammengesetzt @@ -0,0 +1,87 @@ +PACKET anschrsteuerfunktionenfuerzusammengesetzteanschreibenDEFINES +zusammengesetztesanschreiben,naechsteszusammengesetztesanschreiben:LET +niltext="",nildatum="01.01.00";LET nproc=1,eingangsbildschirm=2;LET +vorwaertstaste="a";LET tupelstackgroesse=10;LET druckmeldnr=125, +existiertnichtnr=126,leermeldnr=127,endemeldnr=128,weitereangabenr=129, +nichterstellbarmeldnr=130;TEXT VAR druckmeld:="",anschreibentext;LET meldkz= +"#";INT VAR dateinummer,aktuellerindex,anzgeftupel;BOOL VAR einzelbearbeitung +;PROC zusammengesetztesanschreiben(INT CONST aktuellerinx,BOOL CONST +anschreibenzeigen,peinzelbearbeitung,BOOL PROC sonderwerteundueberpruefungauf +erstellbarkeit,BOOL PROC pruefespeziell,TEXT PROC druckdatei):ROW 10TEXT VAR +schluesselsve1,schluesselsve2;INT VAR i;vorbereitungen;IF einzelbearbeitung +THEN einzelanschreibenELSE anschreibenfuerbestandFI .anschreibenfuerbestand: +IF leererbestandTHEN meldeleerenbestand;zurueckzumeingangsbildschirmELSE +bearbeiteallediesesbestandesFI .bearbeiteallediesesbestandes:IF +anschreibenzeigenTHEN erstenbearbeitenELSE anschreibenleseschleife(BOOL PROC +sonderwerteundueberpruefungauferstellbarkeit,BOOL PROC pruefespeziell,TEXT +PROC druckdatei);meldeendederbrieferstellung;zurueckzumeingangsbildschirmFI . +erstenbearbeiten:BOOL VAR erstellbar:=TRUE ;BOOL VAR bestandleer:=FALSE ; +erstellbar:=sonderwerteundueberpruefungauferstellbarkeit;IF erstellbarTHEN +bearbeitenzumzeigenELSE REP IF anzgeftupel=0THEN anzgeftupel:= +tupelstackgroesse;multisucc(aktuellerindex,anzgeftupel)FI ;IF anzgeftupel<>0 +THEN multisucc;anzgeftupelDECR 1;bestandleer:=NOT pruefespeziellELSE +bestandleer:=TRUE FI UNTIL bestandleerCOR +sonderwerteundueberpruefungauferstellbarkeitPER ;IF NOT bestandleerTHEN +bearbeitenzumzeigenELSE zurueckzumeingangsbildschirm; +meldeendederbrieferstellungFI FI .bearbeitenzumzeigen:IF einzelbearbeitung +CAND NOT sonderwerteundueberpruefungauferstellbarkeitTHEN +meldenichterstellbar;zurueckzumeingangsbildschirmELSE anschreibentext:= +druckdatei;editierebriefFI .einzelanschreiben:direktlesen;IF gefundenTHEN IF +eindeutigTHEN datenlesen;IF anschreibenzeigenTHEN bearbeitenzumzeigenELSE +einzelbriefschreiben;zurueckzumeingangsbildschirmFI ELSE +meldeanforderunggenauererangaben;return(1)FI ELSE meldenichtgefunden;return(1 +)FI .vorbereitungen:dateinummer:=dateinr(primdatid(aktuellerinx)); +aktuellerindex:=aktuellerinx;einzelbearbeitung:=peinzelbearbeitung; +meldungstext(druckmeldnr,druckmeld);setzesonderwerteschulkenndaten;. +direktlesen:gesetztenschluesselsichern(schluesselsve1);anzgeftupel:=2; +multisearchforward(aktuellerindex,anzgeftupel).gefunden:IF anzgeftupel=0THEN +FALSE ELSE multisucc;pruefespeziellFI .eindeutig:anzgeftupel=1COR +naechsterungleich.naechsterungleich:gesetztenschluesselsichern(schluesselsve2 +);multisucc;IF NOT pruefespeziellTHEN TRUE ELSE FOR iFROM 1UPTO anzkey( +dateinummer)REP IF schluesselsve1[i]=""COR (feldtyp(dateinummer+i)=datumfeld +CAND schluesselsve1[i]=nildatum)THEN LEAVE naechsterungleichWITH FALSE FI ; +IF schluesselsve2[i]<>wert(dateinummer+i)THEN LEAVE naechsterungleichWITH +TRUE FI PER ;FALSE FI .datenlesen:stackentry(1).einzelbriefschreiben:IF NOT +sonderwerteundueberpruefungauferstellbarkeitTHEN meldenichterstellbarELSE +briefschreibenFI .meldenichtgefunden:standardmeldung(existiertnichtnr,niltext +).meldeanforderunggenauererangaben:standardmeldung(weitereangabenr,niltext). +meldenichterstellbar:standardmeldung(nichterstellbarmeldnr,sonderwert( +indexadressat)+meldkz).meldeendederbrieferstellung:standardmeldung(endemeldnr +,niltext).zurueckzumeingangsbildschirm:enter(nproc).leererbestand:anzgeftupel +:=tupelstackgroesse;multisearchforward(aktuellerindex,anzgeftupel);IF +anzgeftupel<>0THEN multisucc;anzgeftupelDECR 1;NOT pruefespeziellELSE TRUE +FI .meldeleerenbestand:standardmeldung(leermeldnr,niltext).briefschreiben: +anschreibentext:=druckdatei;print(anschreibentext);standardmeldung( +druckmeldnr,sonderwert(indexadressat)+meldkz);forget(anschreibentext,quiet). +END PROC zusammengesetztesanschreiben;PROC gesetztenschluesselsichern(ROW 10 +TEXT VAR schluesselsve):INT VAR i;FOR iFROM 1UPTO anzkey(dateinummer)REP +schluesselsve[i]:=wert(dateinummer+i)PER ENDPROC gesetztenschluesselsichern; +PROC anschreibenleseschleife(BOOL PROC sonderwerteundueberpruefungauf +erstellbarkeit,BOOL PROC pruefespeziell,TEXT PROC druckdatei):BOOL VAR +schluss:=FALSE ;vorlesen;leseschleife.leseschleife:WHILE NOT schlussREP IF +sonderwerteundueberpruefungauferstellbarkeitTHEN briefschreibenELSE +standardmeldung(nichterstellbarmeldnr,sonderwert(indexadressat)+meldkz)FI ; +lesenPER .lesen:IF anzgeftupel=0THEN anzgeftupel:=tupelstackgroesse;multisucc +(aktuellerindex,anzgeftupel)FI ;satzlesen.vorlesen:anzgeftupel:= +tupelstackgroesse;multisearchforward(aktuellerindex,anzgeftupel);satzlesen. +satzlesen:IF anzgeftupel<>0THEN multisucc;anzgeftupelDECR 1;schluss:=NOT +pruefespeziellELSE schluss:=TRUE FI .briefschreiben:anschreibentext:= +druckdatei;print(anschreibentext);standardmeldung(druckmeldnr,sonderwert( +indexadressat)+meldkz);forget(anschreibentext,quiet).END PROC +anschreibenleseschleife;PROC editierebrief:editiere(anschreibentext, +vorwaertstaste,FALSE )END PROC editierebrief;PROC +naechsteszusammengesetztesanschreiben(BOOL PROC +sonderwerteundueberpruefungauferstellbarkeit,BOOL PROC pruefespeziell,BOOL +CONST drucken,TEXT PROC druckdatei):BOOL VAR bestandleer:=FALSE ;IF drucken +THEN print(anschreibentext);standardmeldung(druckmeld#nr,#,sonderwert( +indexadressat)+meldkz)FI ;forget(anschreibentext,quiet);IF einzelbearbeitung +THEN enter(eingangsbildschirm)ELSE REP IF anzgeftupel=0THEN anzgeftupel:= +tupelstackgroesse;multisucc(aktuellerindex,anzgeftupel)FI ;IF anzgeftupel<>0 +THEN multisucc;anzgeftupelDECR 1;bestandleer:=NOT pruefespeziellELSE +bestandleer:=TRUE FI UNTIL bestandleerCOR +sonderwerteundueberpruefungauferstellbarkeitPER ;IF NOT bestandleerTHEN +anschreibentext:=druckdatei;return(nproc)ELSE standardmeldung(endemeldnr, +niltext);enter(eingangsbildschirm)FI FI END PROC +naechsteszusammengesetztesanschreiben;END PACKET +anschrsteuerfunktionenfuerzusammengesetzteanschreiben; + diff --git a/app/schulis/2.2.1/src/0.erf aufsichtszeiten b/app/schulis/2.2.1/src/0.erf aufsichtszeiten new file mode 100644 index 0000000..443be9d --- /dev/null +++ b/app/schulis/2.2.1/src/0.erf aufsichtszeiten @@ -0,0 +1,201 @@ +PACKET erfaufsichtszeitenDEFINES aufsichtszeitenveraendern, +aufsichtszeitenspeichern,aufsichtszeitenzeileentfernen, +aufsichtszeitenzeileeinfuegen,aufsichtszeitenuebernehmen, +aufsichtszeitenkopieren:LET niltext="",titelanfang="Aufsichtszeiten für das " +,titelmitte=". Halbjahr ",trennerfuerschuljahr="/",null=0,eins=1;LET +fnrfueruebernehmen=2,fnrfuergeplbearb=3,fnrabtagfuergepl=4,fnrfueraktbearb=5, +fnrabtagfuerakt=6,fnrcursorruhepos=7,allewochentagsbezeichnungen= +"MODIMIDOFRSAMoDiMiDoFrSamodimidofrsa",maske="ms aufsichtszeiten", +fnrwochentag=2,fnrerstebezeichnung=3,felderprozeile=5,offsetstundevor=1, +offsetstundenach=2,offsetbeginnuhr=3,offsetendeuhr=4,fnrerstesfeldletztezeile +=73,fnrletztesfeld=77,erstestundeamtag=1,stundenprowochentag=12, +stundenamsamstag=6,stelledestages=100,datensaetzepromaske=15;LET +textschuljahr="Schuljahr",textschulhalbjahr="Schulhalbjahr";LET +meldungfeldleerlassen=390,meldungzeilezutief=391,meldungmindeinestunde=392, +meldungspeicherung=50,meldungfalschezeitangabe=54,meldungeingabesinnlos=56, +meldungplausi=57,meldungdatenfehlen=68,meldungspeicherfehler=73, +meldungfrageuebernehmen=300,meldunguebernehmen=301,meldungzeitangabezulang= +341,meldungfalschezeitfolge=342,meldungfalschetagesbez=385, +meldungstdnachfolgend=386;TEXT VAR schuljahr:=niltext,halbjahr:=niltext;BOOL +VAR datenvorhanden;INT VAR tagnr;LET nummerfürmo=1,kürzelfürmo="Mo", +nummerfürdi=2,kürzelfürdi="Di",nummerfürmi=3,kürzelfürmi="Mi",nummerfürdo=4, +kürzelfürdo="Do",nummerfürfr=5,kürzelfürfr="Fr",nummerfürsa=6,kürzelfürsa= +"Sa";ROW datensaetzepromaskeTEXT VAR alteaufsichtszeiten;INT VAR aktindex; +PROC aufsichtszeitenzeileeinfuegen:INT VAR i,cursorfeld:=infeld;IF cursorfeld +>=fnrerstesfeldletztezeileTHEN standardmeldung(meldungzeilezutief,niltext); +ELSE cursorfeld:=cursorfeld-((cursorfeld-fnrerstebezeichnung)MOD +felderprozeile)+felderprozeile;FOR iFROM fnrletztesfeldDOWNTO cursorfeld+ +felderprozeileREP standardmaskenfeld(standardmaskenfeld(i-felderprozeile),i) +PER ;FOR iFROM cursorfeldUPTO cursorfeld+offsetendeuhrREP standardmaskenfeld( +niltext,i)PER ;FI ;return(1);END PROC aufsichtszeitenzeileeinfuegen;PROC +aufsichtszeitenzeileentfernen:INT VAR i,cursorfeld:=infeld;cursorfeld:= +cursorfeld-((cursorfeld-fnrerstebezeichnung)MOD felderprozeile);FOR iFROM +cursorfeldUPTO cursorfeld+offsetendeuhrREP standardmaskenfeld(niltext,i)PER ; +infeld(cursorfeld);return(1);END PROC aufsichtszeitenzeileentfernen;PROC +aufsichtszeitenveraendern:INT VAR aktfnr;pruefeplausidereingangsmaske; +setzeschulhalbjahrindenmaskekopf;holealledatendestages;infeld(fnrwochentag); +standardfelderausgeben;infeld(fnrerstebezeichnung);standardnproc. +pruefeplausidereingangsmaske:IF standardmaskenfeld(fnrfueruebernehmen)<> +niltextOR NOT (standardmaskenfeld(fnrfuergeplbearb)<>niltextXOR +standardmaskenfeld(fnrfueraktbearb)<>niltext)THEN standardmeldung( +meldungeingabesinnlos,niltext);IF standardmaskenfeld(fnrfueruebernehmen)= +niltextTHEN infeld(fnrfuergeplbearb)ELSE infeld(fnrfueruebernehmen)FI ;return +(1);LEAVE aufsichtszeitenveraendernFI ;IF standardmaskenfeld(fnrfuergeplbearb +)=niltextTHEN aktfnr:=fnrabtagfuergeplELSE aktfnr:=fnrabtagfueraktFI ;IF +standardmaskenfeld(aktfnr)<>niltextTHEN standardmeldung(meldungfeldleerlassen +,niltext);infeld(aktfnr);return(1);LEAVE aufsichtszeitenveraendernFI ;IF +standardmaskenfeld(fnrfuergeplbearb)=niltextTHEN aktfnr:=fnrabtagfueraktELSE +aktfnr:=fnrabtagfuergeplFI ;IF standardmaskenfeld(aktfnr)=niltextTHEN tagnr:= +nummerfürmo;ELSE tagnr:=pos(allewochentagsbezeichnungen,standardmaskenfeld( +aktfnr));IF tagnr=0THEN standardmeldung(meldungfalschetagesbez,niltext); +infeld(aktfnr);return(1);LEAVE aufsichtszeitenveraendernFI ;tagnr:=(tagnrMOD +12)DIV 2+1;FI .setzeschulhalbjahrindenmaskekopf:schuljahr:=schulkenndatum( +textschuljahr);halbjahr:=schulkenndatum(textschulhalbjahr);IF +standardmaskenfeld(fnrfuergeplbearb)<>niltextTHEN geplanteshjundsjberechnen( +halbjahr,schuljahr)FI ;standardstartproc(maske); +standardkopfmaskeaktualisieren(titelanfang+halbjahr+titelmitte+text(schuljahr +,2)+trennerfuerschuljahr+subtext(schuljahr,3)).END PROC +aufsichtszeitenveraendern;PROC aufsichtszeitenspeichern(BOOL CONST speichern) +:INT VAR fehlerstatus:=null,aktfnr,aznr,beginn,ende,letztestd,i;IF speichern +THEN pruefeplausibilitaet;IF fehlerstatus<>nullTHEN infeld(fehlerstatus); +return(1);LEAVE aufsichtszeitenspeichernFI ;speicherungdurchfuehren;FI ;IF +tagnr<nummerfürsaTHEN tagnrINCR 1;holealledatendestages;infeld(fnrwochentag); +standardfelderausgeben;infeld(fnrerstebezeichnung);return(1)ELSE enter(2)FI . +pruefeplausibilitaet:standardmeldung(meldungplausi,niltext);aktfnr:= +fnrerstebezeichnung-1;FOR iFROM 1UPTO datensaetzepromaskeREP aktfnrINCR 1;IF +(standardmaskenfeld(aktfnr)<>niltextCOR standardmaskenfeld(aktfnr+ +offsetbeginnuhr)<>niltextCOR standardmaskenfeld(aktfnr+offsetendeuhr)<> +niltext)CAND standardmaskenfeld(aktfnr+offsetstundevor)=niltextCAND +standardmaskenfeld(aktfnr+offsetstundenach)=niltextTHEN standardmeldung( +meldungmindeinestunde,niltext);fehlerstatus:=aktfnr+offsetstundevor;LEAVE +pruefeplausibilitaetFI ;IF tagnr=nummerfürsaTHEN letztestd:=stundenamsamstag +ELSE letztestd:=stundenprowochentagFI ;aktfnrINCR 1;IF standardmaskenfeld( +aktfnr)<>niltextTHEN standardpruefe(2,aktfnr,null,null,niltext,fehlerstatus); +IF fehlerstatus<>0THEN LEAVE pruefeplausibilitaetFI ;standardpruefe(3,aktfnr, +erstestundeamtag,letztestd,niltext,fehlerstatus);IF fehlerstatus<>0THEN +LEAVE pruefeplausibilitaetFI ;FI ;beginn:=int(standardmaskenfeld(aktfnr)); +aktfnrINCR 1;IF standardmaskenfeld(aktfnr)<>niltextTHEN standardpruefe(2, +aktfnr,null,null,niltext,fehlerstatus);IF fehlerstatus<>0THEN LEAVE +pruefeplausibilitaetFI ;standardpruefe(3,aktfnr,erstestundeamtag,letztestd, +niltext,fehlerstatus);IF fehlerstatus<>0THEN LEAVE pruefeplausibilitaetFI ; +FI ;ende:=int(standardmaskenfeld(aktfnr));IF beginn>0AND ende>0AND ende<> +beginn+1THEN standardmeldung(meldungstdnachfolgend,niltext);fehlerstatus:= +aktfnr-1;LEAVE pruefeplausibilitaetFI ;aktfnrINCR 1;beginn:=int( +standardmaskenfeld(aktfnr));IF falschezeitangabe(beginn,aktfnr,fehlerstatus) +THEN LEAVE pruefeplausibilitaetFI ;aktfnrINCR 1;ende:=int(standardmaskenfeld( +aktfnr));IF falschezeitangabe(ende,aktfnr,fehlerstatus)THEN LEAVE +pruefeplausibilitaetFI ;IF beginn>endeAND ende>0THEN standardmeldung( +meldungfalschezeitfolge,niltext);fehlerstatus:=aktfnr-1;LEAVE +pruefeplausibilitaetFI PER .speicherungdurchfuehren:standardmeldung( +meldungspeicherung,niltext);aktfnr:=fnrerstebezeichnung;aznr:=1; +suchenächstenichtleerezeile;WHILE aktfnr<=fnrerstesfeldletztezeileREP infeld( +aktfnr);fülleprimärindexfelder;search(dnraufsichtszeiten,true); +füllerestlichedbfelder;IF dbstatus<>nullTHEN insert(dnraufsichtszeiten)ELSE +update(dnraufsichtszeiten)FI ;speicherfehlerabfangen;aktfnrINCR +felderprozeile;aznrINCR 1;suchenächstenichtleerezeile;PER ;dbstatus(0);WHILE +dbstatus=0CAND aznr<=datensaetzepromaskeREP fülleprimärindexfelder;delete( +dnraufsichtszeiten);aznrINCR 1;PER .suchenächstenichtleerezeile:WHILE aktfnr +<=fnrerstesfeldletztezeileCAND zeileistleerREP aktfnrINCR felderprozeilePER . +zeileistleer:standardmaskenfeld(aktfnr)+standardmaskenfeld(aktfnr+ +offsetbeginnuhr)+standardmaskenfeld(aktfnr+offsetendeuhr)+standardmaskenfeld( +aktfnr+offsetstundevor)+standardmaskenfeld(aktfnr+offsetstundenach)=niltext. +fülleprimärindexfelder:putwert(fnrazsj,schuljahr);putwert(fnrazhj,halbjahr); +putintwert(fnrazaufsichtszeit,tagnr*stelledestages+aznr);. +füllerestlichedbfelder:putwert(fnrazbezeichnung,standardmaskenfeld(aktfnr)); +IF standardmaskenfeld(aktfnr+offsetstundevor)=niltextTHEN putintwert( +fnraztagstdvor,null)ELSE putintwert(fnraztagstdvor,(tagnr-1)* +stundenprowochentag+int(standardmaskenfeld(aktfnr+offsetstundevor)))FI ;IF +standardmaskenfeld(aktfnr+offsetstundenach)=niltextTHEN putintwert( +fnraztagstdnach,null)ELSE putintwert(fnraztagstdnach,(tagnr-1)* +stundenprowochentag+int(standardmaskenfeld(aktfnr+offsetstundenach)))FI ; +putwert(fnrazbeginnuhr,standardmaskenfeld(aktfnr+offsetbeginnuhr));putwert( +fnrazendeuhr,standardmaskenfeld(aktfnr+offsetendeuhr)).speicherfehlerabfangen +:IF dbstatus<>nullTHEN standardmeldung(meldungspeicherfehler,niltext);return( +1);LEAVE aufsichtszeitenspeichernFI .END PROC aufsichtszeitenspeichern;PROC +aufsichtszeitenkopieren:INT VAR i,altetagnr;aktindex:=null;altetagnr:=tagnr; +tagnr:=nummerfürmo;inittupel(dnraufsichtszeiten);statleseschleife( +dnraufsichtszeiten,schuljahr,halbjahr,fnrazsj,fnrazhj,PROC fuellenurmaske); +FOR iFROM aktindex*felderprozeile+fnrerstebezeichnungUPTO fnrletztesfeldREP +standardmaskenfeld(niltext,i)PER ;tagnr:=altetagnr;infeld(fnrerstebezeichnung +);return(1);END PROC aufsichtszeitenkopieren;PROC aufsichtszeitenuebernehmen( +BOOL CONST hauptaktion):TEXT VAR geplhj,geplsj;INT VAR i,j,altetagnr;IF NOT +hauptaktionTHEN prüfeobeingangsmaskerichtigangekreuzt;schuljahr:= +schulkenndatum(textschuljahr);halbjahr:=schulkenndatum(textschulhalbjahr); +tagnr:=nummerfürmo;fuelledenpuffermitdenaufsichtszeiten;IF datenvorhanden +THEN standardmeldung(meldungfrageuebernehmen,niltext);feldschutz( +fnrfueruebernehmen);feldschutz(fnrfuergeplbearb);feldschutz(fnrabtagfuergepl) +;feldschutz(fnrfueraktbearb);feldschutz(fnrabtagfuerakt);feldfrei( +fnrcursorruhepos);infeld(fnrcursorruhepos);standardnproc;ELSE standardmeldung +(meldungdatenfehlen,niltext);infeld(fnrfueruebernehmen);return(1)FI ELSE +standardmeldung(meldunguebernehmen,niltext);geplhj:=halbjahr;geplsj:= +schuljahr;geplanteshjundsjberechnen(geplhj,geplsj);WHILE datenvorhandenREP +löschealletagebiszumvorliegenden;speicheredenvorliegendentag;tagnrINCR 1; +fuelledenpuffermitdenaufsichtszeiten;PER ;löscheallerestlichentage;enter(2) +FI .prüfeobeingangsmaskerichtigangekreuzt:IF standardmaskenfeld( +fnrfueruebernehmen)=niltextOR standardmaskenfeld(fnrfuergeplbearb)<>niltext +OR standardmaskenfeld(fnrfueraktbearb)<>niltextTHEN standardmeldung( +meldungeingabesinnlos,niltext);infeld(fnrfueruebernehmen);return(1);LEAVE +aufsichtszeitenuebernehmenFI ;IF standardmaskenfeld(fnrabtagfuergepl)<> +niltextTHEN standardmeldung(meldungfeldleerlassen,niltext);infeld( +fnrabtagfuergepl);return(1);LEAVE aufsichtszeitenuebernehmenFI ;IF +standardmaskenfeld(fnrabtagfuerakt)<>niltextTHEN standardmeldung( +meldungfeldleerlassen,niltext);infeld(fnrabtagfuerakt);return(1);LEAVE +aufsichtszeitenuebernehmenFI ;.fuelledenpuffermitdenaufsichtszeiten:aktindex +:=null;datenvorhanden:=FALSE ;altetagnr:=tagnr;inittupel(dnraufsichtszeiten); +statleseschleife(dnraufsichtszeiten,schuljahr,halbjahr,fnrazsj,fnrazhj,PROC +fuellenurpuffer);.löschealletagebiszumvorliegenden:FOR iFROM altetagnrUPTO +tagnr-1REP löschedateneinestagesPER .löschedateneinestages:j:=1;dbstatus(0); +WHILE dbstatus=0CAND j<=datensaetzepromaskeREP putwert(fnrazsj,geplsj); +putwert(fnrazhj,geplhj);putintwert(fnrazaufsichtszeit,i*stelledestages+j); +delete(dnraufsichtszeiten);jINCR 1;PER .speicheredenvorliegendentag:i:=1; +WHILE i<=aktindexREP fülleprimärindexfelder;search(dnraufsichtszeiten,true); +füllerestlichedbfelder;IF dbstatus<>nullTHEN insert(dnraufsichtszeiten)ELSE +update(dnraufsichtszeiten)FI ;speicherfehlerabfangen;iINCR 1;PER ;WHILE +dbstatus=0CAND i<=datensaetzepromaskeREP fülleprimärindexfelder;delete( +dnraufsichtszeiten);iINCR 1;PER .fülleprimärindexfelder:putwert(fnrazsj, +geplsj);putwert(fnrazhj,geplhj);putintwert(fnrazaufsichtszeit,tagnr* +stelledestages+i);.füllerestlichedbfelder:restoretupel(dnraufsichtszeiten, +alteaufsichtszeiten(i));putwert(fnrazsj,geplsj);putwert(fnrazhj,geplhj);. +speicherfehlerabfangen:IF dbstatus<>nullTHEN standardmeldung( +meldungspeicherfehler,niltext);infeld(fnrfueruebernehmen);return(2);LEAVE +aufsichtszeitenuebernehmenFI .löscheallerestlichentage:FOR iFROM altetagnr +UPTO nummerfürsaREP löschedateneinestagesPER .END PROC +aufsichtszeitenuebernehmen;PROC holealledatendestages:TEXT VAR tag;INT VAR i; +setzewochentagindiemaske;holegewünschtentagindiemaske. +setzewochentagindiemaske:SELECT tagnrOF CASE nummerfürmo:tag:=kürzelfürmo +CASE nummerfürdi:tag:=kürzelfürdiCASE nummerfürmi:tag:=kürzelfürmiCASE +nummerfürdo:tag:=kürzelfürdoCASE nummerfürfr:tag:=kürzelfürfrCASE nummerfürsa +:tag:=kürzelfürsaEND SELECT ;standardmaskenfeld(tag,fnrwochentag). +holegewünschtentagindiemaske:aktindex:=null;inittupel(dnraufsichtszeiten); +statleseschleife(dnraufsichtszeiten,schuljahr,halbjahr,fnrazsj,fnrazhj,PROC +fuellenurmaske);FOR iFROM aktindex*felderprozeile+fnrerstebezeichnungUPTO +fnrletztesfeldREP standardmaskenfeld(niltext,i)PER ;.END PROC +holealledatendestages;PROC fuellenurmaske(BOOL VAR b):INT VAR feldnr,stunde; +IF wert(fnrazsj)>schuljahrCOR wert(fnrazhj)>halbjahrCOR intwert( +fnrazaufsichtszeit)>tagnr*stelledestages+datensaetzepromaskeCOR dbstatus<>0 +THEN b:=TRUE ELSE IF intwert(fnrazaufsichtszeit)>tagnr*stelledestagesTHEN +aktindexINCR eins;feldnr:=fnrerstebezeichnung+(aktindex-1)*felderprozeile; +standardmaskenfeld(wert(fnrazbezeichnung),feldnr);feldnrINCR 1;stunde:= +intwert(fnraztagstdvor);IF stunde>0THEN stunde:=(stunde-1)MOD +stundenprowochentag+1;standardmaskenfeld(text(stunde),feldnr);ELSE +standardmaskenfeld(niltext,feldnr);FI ;feldnrINCR 1;stunde:=intwert( +fnraztagstdnach);IF stunde>0THEN stunde:=(stunde-1)MOD stundenprowochentag+1; +standardmaskenfeld(text(stunde),feldnr);ELSE standardmaskenfeld(niltext, +feldnr);FI ;feldnrINCR 1;standardmaskenfeld(wert(fnrazbeginnuhr),feldnr); +feldnrINCR 1;standardmaskenfeld(wert(fnrazendeuhr),feldnr);FI FI END PROC +fuellenurmaske;PROC fuellenurpuffer(BOOL VAR b):IF wert(fnrazsj)>schuljahr +COR wert(fnrazhj)>halbjahrCOR (datenvorhandenCAND intwert(fnrazaufsichtszeit) +>tagnr*stelledestages+datensaetzepromaske)COR dbstatus<>0THEN b:=TRUE ELSE +IF intwert(fnrazaufsichtszeit)>tagnr*stelledestagesTHEN IF NOT datenvorhanden +THEN datenvorhanden:=TRUE ;tagnr:=intwert(fnrazaufsichtszeit)DIV +stelledestagesFI ;aktindexINCR eins;savetupel(dnraufsichtszeiten, +alteaufsichtszeiten(aktindex));FI FI END PROC fuellenurpuffer;BOOL PROC +falschezeitangabe(INT CONST zeit,fnr,INT VAR status):IF standardmaskenfeld( +fnr)=niltextTHEN LEAVE falschezeitangabeWITH FALSE FI ;IF length( +standardmaskenfeld(fnr))>4THEN standardmeldung(meldungzeitangabezulang, +niltext);status:=fnr;LEAVE falschezeitangabeWITH TRUE FI ;standardpruefe(2, +fnr,null,null,niltext,status);IF status<>nullTHEN LEAVE falschezeitangabe +WITH TRUE FI ;IF zeit<nullOR zeitMOD 100>59OR zeitDIV 100>24THEN +standardmeldung(meldungfalschezeitangabe,niltext);status:=fnr;TRUE ELSE +FALSE FI END PROC falschezeitangabe;END PACKET erfaufsichtszeiten; + diff --git a/app/schulis/2.2.1/src/0.erf zeitraster b/app/schulis/2.2.1/src/0.erf zeitraster new file mode 100644 index 0000000..b1b1bd7 --- /dev/null +++ b/app/schulis/2.2.1/src/0.erf zeitraster @@ -0,0 +1,145 @@ +PACKET erfzeitrasterDEFINES zeitrasterveraendern,zeitrasterspeichern, +zeitrasteruebernehmen,zeitrasterkopieren:LET trenner="�",niltext="", +titelanfang="Zeitraster für das ",titelmitte=". Halbjahr ", +trennerfuerschuljahr="/",null=0,eins=1;LET fnrfueruebernehmen=2, +fnrfuergeplbearb=3,fnrfueraktbearb=4,fnrcursorruhepos=5,maske="ms zeitraster" +,fnrerstertagesteil=2,wochentage=6,stundenprowochentag=12,stundenamsamstag=6, +vormittagsstunden=6,nachmittagsstunden=6,zeitfelderprowochentag=24, +felderprowochentag=36,datensaetzepromaske=66,erstesfeldfuersamstag=182;LET +textschuljahr="Schuljahr",textschulhalbjahr="Schulhalbjahr";LET +kennungvormittag="v",kennungnachmittag="n",allekennungen="vnx", +kennungmoerstestd=1;LET meldungeingabesinnlos=56,meldungfalschekennung=55, +meldungfalschezeitangabe=54,meldungzeitangabezulang=341, +meldungfalschezeitfolge=342,meldungplausi=57,meldungdatenfehlen=68, +meldungfrageuebernehmen=300,meldunguebernehmen=301,meldungfeldfuellen=52, +meldungspeicherfehler=73,meldungspeicherung=50;TEXT VAR schuljahr:=niltext, +halbjahr:=niltext;BOOL VAR datenvorhanden,datenlueckenhaft;ROW +datensaetzepromaskeTEXT VAR alteszeitraster;INT VAR aktindex;PROC +zeitrasterveraendern:INT VAR i,j,aktfnr;IF standardmaskenfeld( +fnrfueruebernehmen)=niltextAND (standardmaskenfeld(fnrfuergeplbearb)<>niltext +XOR standardmaskenfeld(fnrfueraktbearb)<>niltext)THEN schuljahr:= +schulkenndatum(textschuljahr);halbjahr:=schulkenndatum(textschulhalbjahr);IF +standardmaskenfeld(fnrfuergeplbearb)<>niltextTHEN geplanteshjundsjberechnen( +halbjahr,schuljahr)FI ;standardstartproc(maske); +standardkopfmaskeaktualisieren(titelanfang+halbjahr+titelmitte+text(schuljahr +,2)+trennerfuerschuljahr+subtext(schuljahr,3));aktindex:=null;inittupel( +dnrzeitraster);statleseschleife(dnrzeitraster,schuljahr,halbjahr,fnrzrsj, +fnrzrhj,PROC fuellemaskeundpuffer);datenvorhanden:=aktindex>null; +datenlueckenhaft:=datenvorhandenCAND aktindex<datensaetzepromaske;IF NOT +datenvorhandenTHEN aktfnr:=fnrerstertagesteil;FOR iFROM einsUPTO wochentage- +einsREP FOR jFROM einsUPTO vormittagsstundenREP standardmaskenfeld( +kennungvormittag,aktfnr);aktfnrINCR einsPER ;FOR jFROM einsUPTO +nachmittagsstundenREP standardmaskenfeld(kennungnachmittag,aktfnr);aktfnr +INCR einsPER ;aktfnrINCR zeitfelderprowochentag;PER ;FOR iFROM einsUPTO +stundenamsamstagREP standardmaskenfeld(kennungvormittag,aktfnr);aktfnrINCR +einsPER ;FI ;standardnprocELSE standardmeldung(meldungeingabesinnlos,niltext) +;IF standardmaskenfeld(fnrfueruebernehmen)=niltextTHEN infeld( +fnrfuergeplbearb)ELSE infeld(fnrfueruebernehmen)FI ;return(1)FI END PROC +zeitrasterveraendern;PROC zeitrasterspeichern:INT VAR fehlerstatus:=null, +aktfnr,aktfnrbeginn,aktfnrende,beginnzeit,endezeit,i;pruefeplausibilitaet;IF +fehlerstatus<>nullTHEN infeld(fehlerstatus);return(1);LEAVE +zeitrasterspeichernELSE speicherungdurchfuehrenFI ;enter(2). +pruefeplausibilitaet:standardmeldung(meldungplausi,niltext);FOR iFROM null +UPTO datensaetzepromaske-einsREP aktfnr:=fnrerstertagesteil+iMOD +stundenprowochentag+(iDIV stundenprowochentag)*felderprowochentag;IF aktfnr>= +erstesfeldfuersamstagTHEN aktfnrbeginn:=aktfnr+stundenamsamstag;aktfnrende:= +aktfnrbeginn+stundenamsamstagELSE aktfnrbeginn:=aktfnr+stundenprowochentag; +aktfnrende:=aktfnrbeginn+stundenprowochentagFI ;IF standardmaskenfeld(aktfnr) +=niltextTHEN standardmeldung(meldungfeldfuellen,niltext);fehlerstatus:=aktfnr +;LEAVE pruefeplausibilitaetFI ;IF pos(allekennungen,standardmaskenfeld(aktfnr +))=nullTHEN standardmeldung(meldungfalschekennung,niltext);fehlerstatus:= +aktfnr;LEAVE pruefeplausibilitaetFI ;beginnzeit:=int(standardmaskenfeld( +aktfnrbeginn));IF falschezeitangabe(beginnzeit,aktfnrbeginn,fehlerstatus) +THEN LEAVE pruefeplausibilitaetFI ;endezeit:=int(standardmaskenfeld( +aktfnrende));IF falschezeitangabe(endezeit,aktfnrende,fehlerstatus)THEN +LEAVE pruefeplausibilitaetFI ;IF beginnzeit>endezeitAND endezeit>0THEN +standardmeldung(meldungfalschezeitfolge,niltext);fehlerstatus:=aktfnrbeginn; +LEAVE pruefeplausibilitaetFI PER .speicherungdurchfuehren:standardmeldung( +meldungspeicherung,niltext);FOR aktindexFROM einsUPTO datensaetzepromaskeREP +berechnemaskenunddbgroessen;IF datenvorhandenTHEN IF stundewurdeveraendert +THEN infeld(aktfnr);putwert(fnrzrsj,schuljahr);putwert(fnrzrhj,halbjahr); +putintwert(fnrzrtagstunde,aktindex);search(dnrzeitraster,true);putwert( +fnrzrkennungteil,standardmaskenfeld(aktfnr));putwert(fnrzrbeginnuhr, +standardmaskenfeld(aktfnrbeginn));putwert(fnrzrendeuhr,standardmaskenfeld( +aktfnrende));IF dbstatus<>nullTHEN insert(dnrzeitraster)ELSE update( +dnrzeitraster)FI ;speicherfehlerabfangenFI ELSE infeld(aktfnr);putwert( +fnrzrsj,schuljahr);putwert(fnrzrhj,halbjahr);putintwert(fnrzrtagstunde, +aktindex);putwert(fnrzrkennungteil,standardmaskenfeld(aktfnr));putwert( +fnrzrbeginnuhr,standardmaskenfeld(aktfnrbeginn));putwert(fnrzrendeuhr, +standardmaskenfeld(aktfnrende));insert(dnrzeitraster)FI PER . +berechnemaskenunddbgroessen:aktfnr:=fnrerstertagesteil+(aktindex-eins)MOD +stundenprowochentag+((aktindex-eins)DIV stundenprowochentag)* +felderprowochentag;IF aktfnr>=erstesfeldfuersamstagTHEN aktfnrbeginn:=aktfnr+ +stundenamsamstag;aktfnrende:=aktfnrbeginn+stundenamsamstagELSE aktfnrbeginn:= +aktfnr+stundenprowochentag;aktfnrende:=aktfnrbeginn+stundenprowochentagFI ;. +stundewurdeveraendert:datenlueckenhaftCOR standardmaskenfeld(aktfnr)+trenner+ +standardmaskenfeld(aktfnrbeginn)+trenner+standardmaskenfeld(aktfnrende)<> +alteszeitraster(aktindex).speicherfehlerabfangen:IF dbstatus<>nullTHEN +standardmeldung(meldungspeicherfehler,niltext);return(1);LEAVE +zeitrasterspeichernFI .END PROC zeitrasterspeichern;PROC zeitrasterkopieren: +TEXT VAR tagesteil,beginn,ende;INT VAR i,j,aktfnr:=fnrerstertagesteil;FOR i +FROM 0UPTO stundenprowochentag-1REP aktfnr:=fnrerstertagesteil+i;tagesteil:= +standardmaskenfeld(aktfnr);aktfnrINCR stundenprowochentag;beginn:= +standardmaskenfeld(aktfnr);aktfnrINCR stundenprowochentag;ende:= +standardmaskenfeld(aktfnr);aktfnrINCR stundenprowochentag;FOR jFROM 1UPTO +wochentage-2REP standardmaskenfeld(tagesteil,aktfnr);aktfnrINCR +stundenprowochentag;standardmaskenfeld(beginn,aktfnr);aktfnrINCR +stundenprowochentag;standardmaskenfeld(ende,aktfnr);aktfnrINCR +stundenprowochentagPER ;IF i<stundenamsamstagTHEN standardmaskenfeld( +tagesteil,aktfnr);aktfnrINCR stundenamsamstag;standardmaskenfeld(beginn, +aktfnr);aktfnrINCR stundenamsamstag;standardmaskenfeld(ende,aktfnr)FI PER ; +return(1);END PROC zeitrasterkopieren;PROC zeitrasteruebernehmen(BOOL CONST +hauptaktion):INT VAR posi,i;TEXT VAR satz;BOOL VAR ueberschreiben;IF NOT +hauptaktionTHEN IF NOT eingangsmaskerichtigangekreuztTHEN standardmeldung( +meldungeingabesinnlos,niltext);infeld(fnrfueruebernehmen);return(1);LEAVE +zeitrasteruebernehmenFI ;schuljahr:=schulkenndatum(textschuljahr);halbjahr:= +schulkenndatum(textschulhalbjahr);fuelledenpuffermitdemzeitraster;IF +datenvorhandenTHEN standardmeldung(meldungfrageuebernehmen,niltext); +feldschutz(fnrfueruebernehmen);feldschutz(fnrfuergeplbearb);feldschutz( +fnrfueraktbearb);feldfrei(fnrcursorruhepos);infeld(fnrcursorruhepos); +standardnproc;ELSE standardmeldung(meldungdatenfehlen,niltext);infeld( +fnrfueruebernehmen);return(1)FI ELSE standardmeldung(meldunguebernehmen, +niltext);geplanteshjundsjberechnen(halbjahr,schuljahr); +testeobdatenschonvorhanden;FOR iFROM einsUPTO aktindexREP +ladedendatenbankpuffer;IF ueberschreibenCAND dbstatus=nullTHEN update( +dnrzeitraster)ELSE insert(dnrzeitraster)FI ;speicherfehlerabfangen;PER ;enter +(2)FI .eingangsmaskerichtigangekreuzt:standardmaskenfeld(fnrfueruebernehmen) +<>niltextAND standardmaskenfeld(fnrfuergeplbearb)=niltextAND +standardmaskenfeld(fnrfueraktbearb)=niltext.fuelledenpuffermitdemzeitraster: +aktindex:=null;inittupel(dnrzeitraster);statleseschleife(dnrzeitraster, +schuljahr,halbjahr,fnrzrsj,fnrzrhj,PROC fuellenurpuffer);datenvorhanden:= +aktindex>null.testeobdatenschonvorhanden:putwert(fnrzrsj,schuljahr);putwert( +fnrzrhj,halbjahr);putintwert(fnrzrtagstunde,kennungmoerstestd);search( +dnrzeitraster,TRUE );ueberschreiben:=dbstatus=null.ladedendatenbankpuffer: +putwert(fnrzrsj,schuljahr);putwert(fnrzrhj,halbjahr);satz:=alteszeitraster(i) +;posi:=pos(satz,trenner);putwert(fnrzrtagstunde,text(satz,posi-eins));IF +ueberschreibenTHEN search(dnrzeitraster,TRUE )FI ;satz:=subtext(satz,posi+ +eins);posi:=pos(satz,trenner);putwert(fnrzrkennungteil,text(satz,posi-eins)); +satz:=subtext(satz,posi+eins);posi:=pos(satz,trenner);putwert(fnrzrbeginnuhr, +text(satz,posi-eins));satz:=subtext(satz,posi+eins);putwert(fnrzrendeuhr,satz +).speicherfehlerabfangen:IF ueberschreibenCAND dbstatus<>nullTHEN +standardmeldung(meldungspeicherfehler,niltext);infeld(fnrfueruebernehmen); +return(1);LEAVE zeitrasteruebernehmenFI .END PROC zeitrasteruebernehmen;PROC +fuellemaskeundpuffer(BOOL VAR b):INT VAR feldnr,feldnr2;IF wert(fnrzrsj)> +schuljahrCOR wert(fnrzrhj)>halbjahrCOR dbstatus<>0THEN b:=TRUE ELSE feldnr:= +fnrerstertagesteil+aktindexMOD stundenprowochentag+(aktindexDIV +stundenprowochentag)*felderprowochentag;aktindexINCR eins;alteszeitraster( +aktindex):=wert(fnrzrkennungteil)+trenner+wert(fnrzrbeginnuhr)+trenner+wert( +fnrzrendeuhr);standardmaskenfeld(wert(fnrzrkennungteil),feldnr);IF feldnr>= +erstesfeldfuersamstagTHEN feldnrINCR stundenamsamstag;feldnr2:=feldnr+ +stundenamsamstagELSE feldnrINCR stundenprowochentag;feldnr2:=feldnr+ +stundenprowochentagFI ;standardmaskenfeld(wert(fnrzrbeginnuhr),feldnr); +standardmaskenfeld(wert(fnrzrendeuhr),feldnr2);FI END PROC +fuellemaskeundpuffer;PROC fuellenurpuffer(BOOL VAR b):IF wert(fnrzrsj)> +schuljahrCOR wert(fnrzrhj)>halbjahrCOR dbstatus<>0THEN b:=TRUE ELSE aktindex +INCR eins;alteszeitraster(aktindex):=wert(fnrzrtagstunde)+trenner+wert( +fnrzrkennungteil)+trenner+wert(fnrzrbeginnuhr)+trenner+wert(fnrzrendeuhr)FI +END PROC fuellenurpuffer;BOOL PROC falschezeitangabe(INT CONST zeit,fnr,INT +VAR status):IF standardmaskenfeld(fnr)=niltextTHEN LEAVE falschezeitangabe +WITH FALSE FI ;IF length(standardmaskenfeld(fnr))>4THEN standardmeldung( +meldungzeitangabezulang,niltext);status:=fnr;LEAVE falschezeitangabeWITH +TRUE FI ;standardpruefe(2,fnr,null,null,niltext,status);IF status<>nullTHEN +LEAVE falschezeitangabeWITH TRUE FI ;IF zeit<nullOR zeitMOD 100>59OR zeitDIV +100>24THEN standardmeldung(meldungfalschezeitangabe,niltext);status:=fnr; +TRUE ELSE FALSE FI END PROC falschezeitangabe;END PACKET erfzeitraster; + diff --git a/app/schulis/2.2.1/src/0.erf.faecher b/app/schulis/2.2.1/src/0.erf.faecher new file mode 100644 index 0000000..b3cc71b --- /dev/null +++ b/app/schulis/2.2.1/src/0.erf.faecher @@ -0,0 +1,38 @@ +PACKET erffaecherDEFINES erfassungfaecher:LET maskenname="ms erf faecher", +fnrletztesfeld=5,fnrkennung=2,fnrlangtext=3,fnrgruppe=4,fnrbereich=5,trenner= +" = ";LET maxlaengefach=2;LET meldnrfachzulang=60;PROC erfassungfaecher(INT +CONST proznr):systemdboff;reinitparsing;SELECT proznrOF CASE 1: +setzeerfassungsparameterCASE 2:zeigefachzurbearbeitungCASE 3: +pruefeplausibilitaetCASE 4:setzewertefuerdbspeicherungCASE 5: +setzeidentiobjektfuerobjektlisteCASE 6:faecherlesenCASE 7:faecheraendernCASE +8:faechereinfuegenCASE 9:faecherloeschenEND SELECT END PROC erfassungfaecher; +PROC setzeerfassungsparameter:setzeerfassungsparameter(dnrfaecher,maskenname, +fnrletztesfeld)END PROC setzeerfassungsparameter;PROC zeigefachzurbearbeitung +:setzeerfassungsfeld(wert(fnrffach),fnrkennung);setzeerfassungsfeld(wert( +fnrffachbez),fnrlangtext);setzeerfassungsfeld(textnichtnull(wert(fnrffachgrp) +),fnrgruppe);setzeerfassungsfeld(wert(fnrffachbereich),fnrbereich);END PROC +zeigefachzurbearbeitung;PROC pruefeplausibilitaet:LET leer="",null=0;INT VAR +fehlerstatus;pruefe(1,erfassungsmaske,PROC erfassungswert,fnrkennung,null, +null,leer,fehlerstatus);IF fehlerstatus<>0THEN setzefehlerstatus(fehlerstatus +);LEAVE pruefeplausibilitaetELIF length(erfassungswert(fnrkennung))> +maxlaengefachTHEN meldeauffaellig(erfassungsmaske,meldnrfachzulang); +setzefehlerstatus(fnrkennung);LEAVE pruefeplausibilitaetFI ;pruefe(1, +erfassungsmaske,PROC erfassungswert,fnrlangtext,null,null,leer,fehlerstatus); +IF fehlerstatus<>0THEN setzefehlerstatus(fehlerstatus);FI ;END PROC +pruefeplausibilitaet;PROC setzewertefuerdbspeicherung:putwert(fnrffach, +compress(erfassungswert(fnrkennung)));putwert(fnrffachbez,erfassungswert( +fnrlangtext));putwert(fnrffachgrp,erfassungswert(fnrgruppe));putwert( +fnrffachbereich,erfassungswert(fnrbereich));END PROC +setzewertefuerdbspeicherung;PROC setzeidentiobjektfuerobjektliste:LET +trennsymbolfuerobli="$";TEXT VAR identizeile;identizeile:=wert(fnrffach)+ +trenner+wert(fnrffachbez);setzeidentiwert(identizeilemitschluesselanhang). +identizeilemitschluesselanhang:identizeile+trennsymbolfuerobli+wert(fnrffach) +.END PROC setzeidentiobjektfuerobjektliste;PROC faecherlesen:putwert(fnrffach +,compress(schluessel));search(dnrfaecher,TRUE );IF dbstatus=okTHEN +saveupdateposition(dnrfaecher)FI END PROC faecherlesen;PROC faecheraendern: +restoreupdateposition(dnrfaecher);update(dnrfaecher)END PROC faecheraendern; +PROC faechereinfuegen:insert(dnrfaecher)END PROC faechereinfuegen;PROC +faecherloeschen:delete(dnrfaecher)END PROC faecherloeschen;TEXT PROC +schluessel:erfassungswert(fnrkennung)END PROC schluessel;END PACKET +erffaecher + diff --git a/app/schulis/2.2.1/src/0.erf.schuldaten b/app/schulis/2.2.1/src/0.erf.schuldaten new file mode 100644 index 0000000..d2bedbd --- /dev/null +++ b/app/schulis/2.2.1/src/0.erf.schuldaten @@ -0,0 +1,51 @@ +PACKET erfschuldatenDEFINES erfassungschuldaten:LET maskenname= +"ms erf schuldaten",fnrletztesfeld=9,fnrkennung=2,fnrschulname=3, +fnrstrasseundnummer=4,fnrtelefon=5,fnrplzort=6,fnrschulart=7,fnrschulnr=8, +fnrbundesland=9,trenner=" = ";LET maxlaengekennung=7,meldkennungzulang=60; +LET bestandschulart="c02 schulart";PROC erfassungschuldaten(INT CONST proznr) +:systemdboff;reinitparsing;SELECT proznrOF CASE 1:setzeerfassungsparameter +CASE 2:zeigeschluesselzurbearbeitungCASE 3:pruefeplausibilitaetCASE 4: +setzewertefuerdbspeicherungCASE 5:setzeidentiobjektfuerobjektlisteCASE 6: +schuldatenlesenCASE 7:schuldatenaendernCASE 8:schuldateneinfuegenCASE 9: +schuldatenloeschenEND SELECT END PROC erfassungschuldaten;PROC +setzeerfassungsparameter:setzeerfassungsparameter(dnrschulen,maskenname, +fnrletztesfeld)END PROC setzeerfassungsparameter;PROC +zeigeschluesselzurbearbeitung:setzeerfassungsfeld(wert(fnrschkennung), +fnrkennung);setzeerfassungsfeld(wert(fnrschname),fnrschulname); +setzeerfassungsfeld(wert(fnrschstrnr),fnrstrasseundnummer); +setzeerfassungsfeld(wert(fnrschtelnr),fnrtelefon);setzeerfassungsfeld(wert( +fnrschplzort),fnrplzort);setzeerfassungsfeld(wert(fnrschart),fnrschulart); +setzeerfassungsfeld(wert(fnrschamtlnr),fnrschulnr);setzeerfassungsfeld(wert( +fnrschbundesland),fnrbundesland);END PROC zeigeschluesselzurbearbeitung;PROC +pruefeplausibilitaet:LET leer="",null=0;INT VAR fehlerstatus;pruefe(1, +erfassungsmaske,PROC erfassungswert,fnrkennung,null,null,leer,fehlerstatus); +ueberpruefefehlerstatus;IF length(erfassungswert(fnrkennung))> +maxlaengekennungTHEN meldeauffaellig(erfassungsmaske,meldkennungzulang); +setzefehlerstatus(fnrkennung);LEAVE pruefeplausibilitaetFI ;pruefe(1, +erfassungsmaske,PROC erfassungswert,fnrschulname,null,null,leer,fehlerstatus) +;ueberpruefefehlerstatus;pruefe(1,erfassungsmaske,PROC erfassungswert, +fnrschulart,null,null,leer,fehlerstatus);ueberpruefefehlerstatus;pruefe(4, +erfassungsmaske,PROC erfassungswert,fnrschulart,null,null,bestandschulart, +fehlerstatus);ueberpruefefehlerstatus;.ueberpruefefehlerstatus:IF +fehlerstatus<>0THEN setzefehlerstatus(fehlerstatus);LEAVE +pruefeplausibilitaetFI ;.END PROC pruefeplausibilitaet;PROC +setzewertefuerdbspeicherung:putwert(fnrschkennung,erfassungswert(fnrkennung)) +;putwert(fnrschname,erfassungswert(fnrschulname));putwert(fnrschstrnr, +erfassungswert(fnrstrasseundnummer));putwert(fnrschtelnr,erfassungswert( +fnrtelefon));putwert(fnrschplzort,erfassungswert(fnrplzort));putwert( +fnrschart,erfassungswert(fnrschulart));putwert(fnrschamtlnr,erfassungswert( +fnrschulnr));putwert(fnrschbundesland,erfassungswert(fnrbundesland));END +PROC setzewertefuerdbspeicherung;PROC setzeidentiobjektfuerobjektliste:LET +trennsymbolfuerobli="$";TEXT VAR identizeile;identizeile:=wert(dnrschulen+1)+ +trenner+wert(dnrschulen+2);identizeile:=subtext(identizeile,1, +maxidentizeilenlaenge);setzeidentiwert(identizeilemitschluesselanhang). +identizeilemitschluesselanhang:identizeile+trennsymbolfuerobli+wert( +dnrschulen+1).END PROC setzeidentiobjektfuerobjektliste;PROC schuldatenlesen: +putwert(fnrschkennung,schluessel);search(dnrschulen,TRUE );IF dbstatus=ok +THEN saveupdateposition(dnrschulen);FI END PROC schuldatenlesen;PROC +schuldatenaendern:restoreupdateposition(dnrschulen);update(dnrschulen);END +PROC schuldatenaendern;PROC schuldateneinfuegen:insert(dnrschulen)END PROC +schuldateneinfuegen;PROC schuldatenloeschen:delete(dnrschulen)END PROC +schuldatenloeschen;TEXT PROC schluessel:erfassungswert(fnrkennung)END PROC +schluessel;END PACKET erfschuldaten; + diff --git a/app/schulis/2.2.1/src/0.grundfunktionen local b/app/schulis/2.2.1/src/0.grundfunktionen local new file mode 100644 index 0000000..d7b0fc8 --- /dev/null +++ b/app/schulis/2.2.1/src/0.grundfunktionen local @@ -0,0 +1,132 @@ +PACKET ispgrundfunktionenlocalDEFINES lieferehalbjahreszeile, +lieferehjdgrenzen,schulisdbname,baisydbname,putwert,wert,init, +halbjahresdatenloeschen,schluesselfuerhjdsetzen, +neueklasseinhalbjahresdateneintragen,schulkenndatum,datumskonversion, +datumrekonversion,melde,jgstaufber:LET punkt=".",anzkenndat=3;LET null=0, +niltext="",blank=" ";LET dnrhalbjahresdaten=88,fnrhjdjgst=94,fnrhjdkennung=95 +,dnrschluessel=137,fnrschlsachgebiet=138,fnrschlschluessel=139, +fnrschllangtext=140,ixhjdfamrufgebjgsthj=263;INT VAR jgstgrenze;TEXT VAR +halbjahrgrenze;LET maxhalbjahre=18,anzahlhalbjahrevoraktuell=5, +gesamtanzahlhalbjahre=12,laengehalbjahreseintrag=4;TEXT CONST zeilehalbjahre +:="05.105.206.106.207.107.208.108.209.109.2"+ +"10.110.211.111.212.112.213.113.2";INT CONST gesamtzeilenlaenge:= +gesamtanzahlhalbjahre*laengehalbjahreseintrag;INT VAR ihalbjahr;ROW +maxhalbjahreSTRUCT (INT vorher,nachher)VAR anzahlhjd; +initialisierehalbjahresdatentabelle;PROC lieferehalbjahreszeile(TEXT VAR +zeile,TEXT CONST hjdkennung):INT VAR subtextbeginn:=pos(zeilehalbjahre, +hjdkennung);INT VAR subtextende;ihalbjahr:=(subtextbeginnDIV +laengehalbjahreseintrag)+1;TEXT VAR blanksvorher:=((anzahlhalbjahrevoraktuell +-anzahlhjd(ihalbjahr).vorher)*laengehalbjahreseintrag)*blank;subtextbeginn:=( +ihalbjahr-anzahlhjd(ihalbjahr).vorher-1)*laengehalbjahreseintrag+1; +subtextende:=(ihalbjahr+anzahlhjd(ihalbjahr).nachher)*laengehalbjahreseintrag +;TEXT VAR interessanterteilderzeilehalbjahre:=subtext(zeilehalbjahre, +subtextbeginn,subtextende);zeile:=text(blanksvorher+ +interessanterteilderzeilehalbjahre,gesamtzeilenlaenge).END PROC +lieferehalbjahreszeile;PROC initialisierehalbjahresdatentabelle:anzahlhjd(1). +vorher:=0;anzahlhjd(1).nachher:=1;anzahlhjd(2).vorher:=1;anzahlhjd(2).nachher +:=1;anzahlhjd(3).vorher:=1;anzahlhjd(3).nachher:=1;anzahlhjd(4).vorher:=2; +anzahlhjd(4).nachher:=1;anzahlhjd(5).vorher:=1;anzahlhjd(5).nachher:=1; +anzahlhjd(6).vorher:=2;anzahlhjd(6).nachher:=1;anzahlhjd(7).vorher:=1; +anzahlhjd(7).nachher:=1;anzahlhjd(8).vorher:=2;anzahlhjd(8).nachher:=1; +anzahlhjd(9).vorher:=1;anzahlhjd(9).nachher:=1;anzahlhjd(10).vorher:=2; +anzahlhjd(10).nachher:=1;anzahlhjd(11).vorher:=1;anzahlhjd(11).nachher:=1; +anzahlhjd(12).vorher:=2;anzahlhjd(12).nachher:=6;anzahlhjd(13).vorher:=1; +anzahlhjd(13).nachher:=5;anzahlhjd(14).vorher:=2;anzahlhjd(14).nachher:=4; +anzahlhjd(15).vorher:=2;anzahlhjd(15).nachher:=3;anzahlhjd(16).vorher:=3; +anzahlhjd(16).nachher:=2;anzahlhjd(17).vorher:=4;anzahlhjd(17).nachher:=1; +anzahlhjd(18).vorher:=5;anzahlhjd(18).nachher:=0.END PROC +initialisierehalbjahresdatentabelle;PROC lieferehjdgrenzen(INT VAR anfang, +ende,TEXT CONST hjdkennung):ihalbjahr:=(poshjdkennungDIV +laengehalbjahreseintrag)+1;anfang:=-anzahlhjd(ihalbjahr).vorher;ende:= +anzahlhjd(ihalbjahr).nachher.poshjdkennung:pos(zeilehalbjahre,hjdkennung). +END PROC lieferehjdgrenzen;TEXT PROC schulisdbname:"EUMELbase.schulis"END +PROC schulisdbname;TEXT PROC baisydbname:"EUMELbase.baisy"END PROC +baisydbname;TEXT PROC wert(INT CONST fnr,posi,laenge):TEXT VAR teiltext:= +subtext(wert(fnr),posi,posi+laenge-1);INT VAR anfang:=pos(teiltext," ");IF +teiltext=laenge*" "THEN teiltext:=""ELSE WHILE anfang>0REP IF subtext( +teiltext,anfang,laenge)=(laenge-anfang+1)*" "THEN teiltext:=text(teiltext, +anfang-1);anfang:=0ELSE anfang:=pos(teiltext," ",anfang+1)FI PER FI ;teiltext +END PROC wert;PROC putwert(INT CONST fnr,TEXT CONST t,INT CONST posi,laenge): +INT VAR i:=length(wert(fnr));TEXT VAR string:=wert(fnr);IF i<posiTHEN IF t<> +niltextTHEN stringCAT ((posi-i-1)*" ");stringCAT (text(t,laenge))FI ELSE +replace(string,posi,text(t,laenge))FI ;putwert(fnr,string)END PROC putwert; +PROC init(ROW 100TEXT VAR feld):INT VAR i;FOR iFROM 1UPTO 100REP feld(i):="" +PER .END PROC init;TEXT PROC datumskonversion(TEXT CONST datum):TEXT VAR d:= +datum;IF nurblanksoderleer(datum)OR d=" . . "THEN "01.01.00"ELSE changeall +(d," ","0");IF nochnichtkonvertiertTHEN insertchar(d,".",3);insertchar(d,".", +6);FI ;dFI .nochnichtkonvertiert:pos(d,".")=0.ENDPROC datumskonversion;BOOL +PROC nurblanksoderleer(TEXT CONST t):INT VAR i;FOR iFROM 1UPTO length(t)REP +IF (tSUB i)<>" "THEN LEAVE nurblanksoderleerWITH FALSE FI PER ;TRUE ENDPROC +nurblanksoderleer;TEXT PROC datumrekonversion(TEXT CONST datum):TEXT VAR d:= +datum;changeall(d,".","");IF d="010100"THEN d:=""FI ;dENDPROC +datumrekonversion;PROC melde(TEXT CONST txt):melde(txt,24)END PROC melde; +PROC melde(TEXT CONST txt,INT CONST zeile):LET maxlaenge=72,spalte=4;INT VAR +txtlaenge,pos;TEXT VAR ausgabetxt:="";txtlaenge:=min(length(txt),maxlaenge); +pos:=(maxlaenge-txtlaenge)DIV 2;ausgabetxtCAT (pos*" ");ausgabetxtCAT txt; +cursor(spalte,zeile);out(text(ausgabetxt,maxlaenge))END PROC melde;TEXT PROC +jgstaufber(TEXT CONST jgst):LET erstestellejgst="0",maxsek1=10;INT VAR ijgst +:=int(jgst);IF ijgst>=maxsek1THEN jgstELIF ijgst=0THEN ""ELSE erstestellejgst ++text(ijgst)FI END PROC jgstaufber;PROC halbjahresdatenloeschen(ROW +anzkenndatTEXT CONST kenndatum,TEXT CONST altejgst,neuejgst,neueshalbjahr): +BOOL CONST jgsthochgesetzt:=neuejgst>altejgst;INT VAR loeschevorher, +loeschenachher,jgstpos,maxhjdvorherneu,maxhjdnachherneu;TEXT VAR +jgstcathalbjahr:=neuejgst+punkt+neueshalbjahr,grenzehalbjahr:="";IF neuejgst +<>altejgstTHEN loeschenderhalbjahresdatenvorbereiten; +loeschenderhalbjahresdatenFI .loeschenderhalbjahresdatenvorbereiten: +lieferehjdgrenzen(maxhjdvorherneu,maxhjdnachherneu,jgstcathalbjahr);jgstpos:= +pos(zeilehalbjahre,jgstcathalbjahr);IF jgsthochgesetztTHEN loeschevorher:=(( +abs(maxhjdvorherneu))*4);grenzehalbjahr:=subtext(zeilehalbjahre,jgstpos- +loeschevorher,jgstpos-loeschevorher+3);ELSE loeschenachher:=(maxhjdnachherneu +*4);grenzehalbjahr:=subtext(zeilehalbjahre,jgstpos+loeschenachher,jgstpos+ +loeschenachher+3);FI ;jgstgrenze:=int(subtext(grenzehalbjahr,1,2)); +halbjahrgrenze:=subtext(grenzehalbjahr,4);.loeschenderhalbjahresdaten:IF +jgsthochgesetztTHEN halbjahresdatenloeschen(PROC (INT CONST )pred,kenndatum, +halbjahrgrenze,jgstgrenze,jgsthochgesetzt);ELSE halbjahresdatenloeschen(PROC +(INT CONST )succ,kenndatum,halbjahrgrenze,jgstgrenze,jgsthochgesetzt);FI . +END PROC halbjahresdatenloeschen;PROC halbjahresdatenloeschen(PROC (INT +CONST )step,ROW anzkenndatTEXT CONST kenndatum,TEXT CONST hjgrenze,INT CONST +jgstgrenze,BOOL CONST vorher):hjddatenloeschen(PROC step,kenndatum, +dnrhalbjahresdaten,ixhjdfamrufgebjgsthj,hjgrenze,jgstgrenze,vorher);.END +PROC halbjahresdatenloeschen;PROC hjddatenloeschen(PROC (INT CONST )step,ROW +anzkenndatTEXT CONST kenndatum,INT CONST dateinummer,index,TEXT CONST +hjgrenze,INT CONST jgstgrenze,BOOL CONST vorher):TEXT VAR hj,jg; +parsenooffields(8);schluesselfuerhjdsetzen(dateinummer,kenndatum,hjgrenze, +jgstgrenze);hj:=wert(dateinummer+5);#vorläufig#jg:=wert(dateinummer+6);# +vorläufig#search(index,FALSE );IF dbstatus=0CAND richtigersatz#CAND +eigentlichunnötig#THEN #beisucheTRUE #hj:=wert(dateinummer+5);jg:=wert( +dateinummer+6);step(index);IF NOT vorherCAND dbstatus=okCAND wiederholerTHEN +step(index);FI ;loeschschleife;ELIF dbstatus=okCAND gleicherschuelerTHEN IF +vorherTHEN step(index);FI ;loeschschleifeFI ;#vorläufig#reinitparsing. +wiederholer:gleicherschuelerCAND hj=wert(dateinummer+5)CAND jg=wert( +dateinummer+6).gleicherschueler:kenndatum(1)=wert(dateinummer+1)CAND +kenndatum(2)=wert(dateinummer+2)CAND kenndatum(3)=datumrekonversion(wert( +dateinummer+3)).richtigersatz:#hoffentlichüberflüssig#gleicherschuelerCAND +wert(dateinummer+5)=hjCAND wert(dateinummer+6)=jg.loeschschleife:WHILE +dbstatus=okCAND gleicherschuelerREP delete(dateinummer);step(index);PER .END +PROC hjddatenloeschen;PROC schluesselfuerhjdsetzen(INT CONST dateinummer,ROW +anzkenndatTEXT CONST kenndatum,TEXT CONST halbjahrgrenze,INT CONST jgstgrenze +):TEXT VAR jgsttext:=text(jgstgrenze);inittupel(dateinummer);putwert( +dateinummer+1,kenndatum(1));putwert(dateinummer+2,kenndatum(2));putwert( +dateinummer+3,datumskonversion(kenndatum(3)));putwert(dateinummer+5, +halbjahrgrenze);putwert(dateinummer+6,jgstaufber(jgsttext)).END PROC +schluesselfuerhjdsetzen;PROC schluesselfuerhjdsetzen(INT CONST dateinummer, +ROW anzkenndatTEXT CONST kenndatum,TEXT CONST sj,hj,jgst):inittupel( +dateinummer);putwert(dateinummer+1,kenndatum(1));putwert(dateinummer+2, +kenndatum(2));putwert(dateinummer+3,datumskonversion(kenndatum(3)));putwert( +dateinummer+4,sj);putwert(dateinummer+5,hj);putwert(dateinummer+6,jgstaufber( +jgst)).END PROC schluesselfuerhjdsetzen;PROC +neueklasseinhalbjahresdateneintragen(ROW anzkenndatTEXT CONST kenndatum,TEXT +CONST sj,hj,jgst,neueklasse):halbjahresdatensuchen;IF datenvorhandenTHEN IF +schuelergruppegeaendertTHEN halbjahresdatenaendernFI ;FI . +halbjahresdatensuchen:schluesselfuerhjdsetzen(dnrhalbjahresdaten,kenndatum,sj +,hj,niltext);search(dnrhalbjahresdaten,TRUE );.datenvorhanden:dbstatus=null. +schuelergruppegeaendert:wert(fnrhjdjgst)<>jgstOR wert(fnrhjdkennung)<> +neueklasse.halbjahresdatenaendern:putwert(fnrhjdjgst,jgst);putwert( +fnrhjdkennung,neueklasse);update(dnrhalbjahresdaten);.END PROC +neueklasseinhalbjahresdateneintragen;TEXT PROC schulkenndatum(TEXT CONST +schluessel):LET schulkenndaten="c02 schulkenndaten";TEXT VAR schuldaten:=""; +systemdboff;inittupel(dnrschluessel);putwert(fnrschlsachgebiet,schulkenndaten +);putwert(fnrschlschluessel,schluessel);search(dnrschluessel,TRUE );IF +dbstatus=okTHEN schuldaten:=wert(fnrschllangtext)ELSE schuldaten:=""FI ; +schuldatenENDPROC schulkenndatum;END PACKET ispgrundfunktionenlocal + diff --git a/app/schulis/2.2.1/src/0.hjd grundfunktionen b/app/schulis/2.2.1/src/0.hjd grundfunktionen new file mode 100644 index 0000000..f553908 --- /dev/null +++ b/app/schulis/2.2.1/src/0.hjd grundfunktionen @@ -0,0 +1,110 @@ +PACKET isphjdgrundfunktionenDEFINES lieferehalbjahreszeile,lieferehjdgrenzen, +put,putwert,wert,init,halbjahresdatenloeschen,schluesselfuerhjdsetzen, +neueklasseinhalbjahresdateneintragen,:LET maxanzfelder=100;LET punkt=".", +anzkenndat=3;LET null=0,niltext="",blank=" ";INT VAR jgstgrenze;TEXT VAR +halbjahrgrenze;LET maxhalbjahre=18,anzahlhalbjahrevoraktuell=5, +gesamtanzahlhalbjahre=12,laengehalbjahreseintrag=4;TEXT CONST zeilehalbjahre +:="05.105.206.106.207.107.208.108.209.109.2"+ +"10.110.211.111.212.112.213.113.2";INT CONST gesamtzeilenlaenge:= +gesamtanzahlhalbjahre*laengehalbjahreseintrag;INT VAR ihalbjahr;ROW +maxhalbjahreSTRUCT (INT vorher,nachher)VAR anzahlhjd; +initialisierehalbjahresdatentabelle;PROC lieferehalbjahreszeile(TEXT VAR +zeile,TEXT CONST hjdkennung):INT VAR subtextbeginn:=pos(zeilehalbjahre, +hjdkennung);INT VAR subtextende;ihalbjahr:=(subtextbeginnDIV +laengehalbjahreseintrag)+1;TEXT VAR blanksvorher:=((anzahlhalbjahrevoraktuell +-anzahlhjd(ihalbjahr).vorher)*laengehalbjahreseintrag)*blank;subtextbeginn:=( +ihalbjahr-anzahlhjd(ihalbjahr).vorher-1)*laengehalbjahreseintrag+1; +subtextende:=(ihalbjahr+anzahlhjd(ihalbjahr).nachher)*laengehalbjahreseintrag +;TEXT VAR interessanterteilderzeilehalbjahre:=subtext(zeilehalbjahre, +subtextbeginn,subtextende);zeile:=text(blanksvorher+ +interessanterteilderzeilehalbjahre,gesamtzeilenlaenge).END PROC +lieferehalbjahreszeile;PROC initialisierehalbjahresdatentabelle:anzahlhjd(1). +vorher:=0;anzahlhjd(1).nachher:=1;anzahlhjd(2).vorher:=1;anzahlhjd(2).nachher +:=1;anzahlhjd(3).vorher:=1;anzahlhjd(3).nachher:=1;anzahlhjd(4).vorher:=2; +anzahlhjd(4).nachher:=1;anzahlhjd(5).vorher:=1;anzahlhjd(5).nachher:=1; +anzahlhjd(6).vorher:=2;anzahlhjd(6).nachher:=1;anzahlhjd(7).vorher:=1; +anzahlhjd(7).nachher:=1;anzahlhjd(8).vorher:=2;anzahlhjd(8).nachher:=1; +anzahlhjd(9).vorher:=1;anzahlhjd(9).nachher:=1;anzahlhjd(10).vorher:=2; +anzahlhjd(10).nachher:=1;anzahlhjd(11).vorher:=1;anzahlhjd(11).nachher:=1; +anzahlhjd(12).vorher:=2;anzahlhjd(12).nachher:=6;anzahlhjd(13).vorher:=1; +anzahlhjd(13).nachher:=5;anzahlhjd(14).vorher:=2;anzahlhjd(14).nachher:=4; +anzahlhjd(15).vorher:=2;anzahlhjd(15).nachher:=3;anzahlhjd(16).vorher:=3; +anzahlhjd(16).nachher:=2;anzahlhjd(17).vorher:=4;anzahlhjd(17).nachher:=1; +anzahlhjd(18).vorher:=5;anzahlhjd(18).nachher:=0.END PROC +initialisierehalbjahresdatentabelle;PROC lieferehjdgrenzen(INT VAR anfang, +ende,TEXT CONST hjdkennung):ihalbjahr:=(poshjdkennungDIV +laengehalbjahreseintrag)+1;anfang:=-anzahlhjd(ihalbjahr).vorher;ende:= +anzahlhjd(ihalbjahr).nachher.poshjdkennung:pos(zeilehalbjahre,hjdkennung). +END PROC lieferehjdgrenzen;TEXT PROC wert(INT CONST fnr,posi,laenge):TEXT +VAR teiltext:=subtext(wert(fnr),posi,posi+laenge-1);INT VAR anfang:=pos( +teiltext," ");IF teiltext=laenge*" "THEN teiltext:=""ELSE WHILE anfang>0REP +IF subtext(teiltext,anfang,laenge)=(laenge-anfang+1)*" "THEN teiltext:=text( +teiltext,anfang-1);anfang:=0ELSE anfang:=pos(teiltext," ",anfang+1)FI PER FI +;teiltextEND PROC wert;PROC putwert(INT CONST fnr,TEXT CONST t,INT CONST posi +,laenge):INT VAR i:=length(wert(fnr));TEXT VAR string:=wert(fnr);IF i<posi +THEN IF t<>niltextTHEN stringCAT ((posi-i-1)*" ");stringCAT (text(t,laenge)) +FI ELSE replace(string,posi,text(t,laenge))FI ;putwert(fnr,string)END PROC +putwert;PROC put(TAG CONST t,ROW maxanzfelderTEXT VAR pfeld,INT CONST von,bis +):INT VAR i;FOR iFROM vonUPTO bisREP IF fieldexists(t,i)THEN put(t,pfeld(i),i +)FI ;PER ;END PROC put;PROC put(TAG CONST t,ROW maxanzfelderTEXT VAR pfeld, +INT CONST pos):INT VAR i;FOR iFROM posUPTO maxanzfelderREP IF fieldexists(t,i +)THEN put(t,pfeld(i),i)FI ;PER ;END PROC put;PROC init(ROW maxanzfelderTEXT +VAR feld):INT VAR i;FOR iFROM 1UPTO maxanzfelderREP feld(i):=""PER .END PROC +init;PROC halbjahresdatenloeschen(ROW anzkenndatTEXT CONST kenndatum,TEXT +CONST altejgst,neuejgst,neueshalbjahr):BOOL CONST jgsthochgesetzt:=neuejgst> +altejgst;INT VAR loeschevorher,loeschenachher,jgstpos,maxhjdvorherneu, +maxhjdnachherneu;TEXT VAR jgstcathalbjahr:=neuejgst+punkt+neueshalbjahr, +grenzehalbjahr:="";IF neuejgst<>altejgstTHEN +loeschenderhalbjahresdatenvorbereiten;loeschenderhalbjahresdatenFI . +loeschenderhalbjahresdatenvorbereiten:lieferehjdgrenzen(maxhjdvorherneu, +maxhjdnachherneu,jgstcathalbjahr);jgstpos:=pos(zeilehalbjahre,jgstcathalbjahr +);IF jgsthochgesetztTHEN loeschevorher:=((abs(maxhjdvorherneu))*4); +grenzehalbjahr:=subtext(zeilehalbjahre,jgstpos-loeschevorher,jgstpos- +loeschevorher+3);ELSE loeschenachher:=(maxhjdnachherneu*4);grenzehalbjahr:= +subtext(zeilehalbjahre,jgstpos+loeschenachher,jgstpos+loeschenachher+3);FI ; +jgstgrenze:=int(subtext(grenzehalbjahr,1,2));halbjahrgrenze:=subtext( +grenzehalbjahr,4);.loeschenderhalbjahresdaten:IF jgsthochgesetztTHEN +halbjahresdatenloeschen(PROC (INT CONST )pred,kenndatum,halbjahrgrenze, +jgstgrenze,jgsthochgesetzt);ELSE halbjahresdatenloeschen(PROC (INT CONST ) +succ,kenndatum,halbjahrgrenze,jgstgrenze,jgsthochgesetzt);FI .END PROC +halbjahresdatenloeschen;PROC halbjahresdatenloeschen(PROC (INT CONST )step, +ROW anzkenndatTEXT CONST kenndatum,TEXT CONST hjgrenze,INT CONST jgstgrenze, +BOOL CONST vorher):hjddatenloeschen(PROC step,kenndatum,dnrhalbjahresdaten, +ixhjdfamrufgebjgsthj,hjgrenze,jgstgrenze,vorher);.END PROC +halbjahresdatenloeschen;PROC hjddatenloeschen(PROC (INT CONST )step,ROW +anzkenndatTEXT CONST kenndatum,INT CONST dateinummer,index,TEXT CONST +hjgrenze,INT CONST jgstgrenze,BOOL CONST vorher):TEXT VAR hj,jg; +schluesselfuerhjdsetzen(dateinummer,kenndatum,hjgrenze,jgstgrenze);hj:=wert( +dateinummer+5);#vorläufig#jg:=wert(dateinummer+6);#vorläufig#search(index, +FALSE );IF dbstatus=0CAND richtigersatz#CAND eigentlichunnötig#THEN #beisuche +TRUE #hj:=wert(dateinummer+5);jg:=wert(dateinummer+6);step(index);IF NOT +vorherCAND dbstatus=okCAND wiederholerTHEN step(index);FI ;loeschschleife; +ELIF dbstatus=okCAND gleicherschuelerTHEN IF vorherTHEN step(index);FI ; +loeschschleifeFI #vorläufig#.wiederholer:gleicherschuelerCAND hj=wert( +dateinummer+5)CAND jg=wert(dateinummer+6).gleicherschueler:kenndatum(1)=wert( +dateinummer+1)CAND kenndatum(2)=wert(dateinummer+2)CAND kenndatum(3)= +datumrekonversion(wert(dateinummer+3)).richtigersatz:#hoffentlichüberflüssig# +gleicherschuelerCAND wert(dateinummer+5)=hjCAND wert(dateinummer+6)=jg. +loeschschleife:WHILE dbstatus=okCAND gleicherschuelerREP delete(dateinummer); +step(index);PER .END PROC hjddatenloeschen;PROC schluesselfuerhjdsetzen(INT +CONST dateinummer,ROW anzkenndatTEXT CONST kenndatum,TEXT CONST +halbjahrgrenze,INT CONST jgstgrenze):TEXT VAR jgsttext:=text(jgstgrenze); +inittupel(dateinummer);putwert(dateinummer+1,kenndatum(1));putwert( +dateinummer+2,kenndatum(2));putwert(dateinummer+3,datumskonversion(kenndatum( +3)));putwert(dateinummer+5,halbjahrgrenze);putwert(dateinummer+6,jgstaufber( +jgsttext)).END PROC schluesselfuerhjdsetzen;PROC schluesselfuerhjdsetzen(INT +CONST dateinummer,ROW anzkenndatTEXT CONST kenndatum,TEXT CONST sj,hj,jgst): +inittupel(dateinummer);putwert(dateinummer+1,kenndatum(1));putwert( +dateinummer+2,kenndatum(2));putwert(dateinummer+3,datumskonversion(kenndatum( +3)));putwert(dateinummer+4,sj);putwert(dateinummer+5,hj);putwert(dateinummer+ +6,jgstaufber(jgst)).END PROC schluesselfuerhjdsetzen;PROC +neueklasseinhalbjahresdateneintragen(ROW anzkenndatTEXT CONST kenndatum,TEXT +CONST sj,hj,jgst,neueklasse):halbjahresdatensuchen;IF datenvorhandenTHEN IF +schuelergruppegeaendertTHEN halbjahresdatenaendernFI ;FI . +halbjahresdatensuchen:schluesselfuerhjdsetzen(dnrhalbjahresdaten,kenndatum,sj +,hj,niltext);search(dnrhalbjahresdaten,TRUE );.datenvorhanden:dbstatus=null. +schuelergruppegeaendert:wert(fnrhjdjgst)<>jgstOR wert(fnrhjdkennung)<> +neueklasse.halbjahresdatenaendern:putwert(fnrhjdjgst,jgst);putwert( +fnrhjdkennung,neueklasse);selupdate(dnrhalbjahresdaten);.END PROC +neueklasseinhalbjahresdateneintragen;END PACKET isphjdgrundfunktionen; + diff --git a/app/schulis/2.2.1/src/0.hoeherstufen local.prog b/app/schulis/2.2.1/src/0.hoeherstufen local.prog new file mode 100644 index 0000000..73f5b20 --- /dev/null +++ b/app/schulis/2.2.1/src/0.hoeherstufen local.prog @@ -0,0 +1,312 @@ +PACKET hoeherstufenlocalprogDEFINES schuljahreswechsel,halbjahreswechsel:LET +dnrschueler=2,fnrsufamnames=3,fnrsurufnames=4,fnrsugebdatums=5,fnrsustatuss=6 +,fnrsusgrpjgst=7,fnrsusgrpzugtut=8,fnrsutidakthjd=9,fnrsuartzugang=10, +fnrsuneuerzugtut=11,fnrsujgsteintr=13,#fnrsuskennlschule=14,dr13.05.88# +fnrsuabgdats=16,fnrsuabschluss=18,fnrsueintrittinsek=44,dnrhalbjahresdaten=88 +,fnrhjdfamnames=89,fnrhjdrufnames=90,fnrhjdgebdats=91,fnrhjdsj=92,fnrhjdhj=93 +,fnrhjdjgst=94,fnrhjdkennung=95,fnrhjdversetzung=96,#dnrschulen=120,dr13. +05.88##fnrschkennung=121,dr13.05.88#dnraktschuelergruppen=129,fnrsgrpsj=130, +fnrsgrphj=131,fnrsgrpjgst=132,fnrsgrpkennung=133,ixsustatfamrufgeb=243, +ixsustatjgstzug=244,ixsustatjgst=250;LET hellan="",hellaus=" ",meldz=23; +LET neuanmeld5="n05",neuanmeld11="n11",neuanmeldsonst="nso";LET jgst13="13", +jgst11="11";LET posvers=1,posnachpr=2,posspringer=3,posfreiwillig=4, +posnichtvers=5,poshoeherstufen=2,kennzeichenneuan="z",kennzeichenabitur="K", +gueltigekennzeichen="vnsfw",dreizehnnachpr="N";LET null=0,niltext="", +trennername=", ",sgtrenner="/",blank=" ",maxjahr=100,minjahr="00",klammerauf= +" (",klammerzu=")",leerdatum="01.01.00";LET halbjahr1="1",halbjahr2="2", +zumschuljahresende=1,zumhalbjahresende=0;LET schluesselschuljahr="Schuljahr", +schluesselhalbjahr="Schulhalbjahr",schluesselendeschulhalbjahr= +"Ende Schulhalbjahr";LET bestandabgegangene="abg",aktbestand="ls";LET +anzkenndaten=3;LET protname="Fehlerprotokoll";LET schulname="Schulname", +schulort="Schulort",zeilenlaenge=77,datumslaenge=8,ordnungstrenner=". ", +absatztrenner=" - ",protueberschrift= +"Fehlerprotokoll zum automatischen Hochsetzen";LET weiterefehler= +"Abbruch des Programmes, da zu viele Fehler",maxfehler=50;LET +fehlerkeinverserg=1,fehlerkeinneuertutor=2,fehlerungueltigesverserg=3, +fehlerungueltigesg=4,fehlerungueltigehjd=5,fehlerstatus=6,fehlerplanung=7; +LET maxfehlerart=7;LET fehleraendern="Ändern: ",fehlerloeschen="Löschen: "; +LET rcodeprot=1001,rcodenoprot=1002;BOOL VAR updatenoetig:=FALSE ;DATASPACE +VAR ds:=nilspace;FILE VAR fehlerprot;INT VAR fehlerzahl,kanal;TEXT VAR +stichtag:="";TEXT VAR letztername,letzterrufname,letztesgebdatum, +letzterstatus;ROW anzkenndatenTEXT VAR key;ROW maxfehlerartTEXT CONST +fehlertext:=ROW maxfehlerartTEXT :("Es liegt kein Versetzungsergebnis vor", +"Es wurde kein neuer Zug/Tutor eingetragen", +"Das eingetragene Versetzungsergebnis ist nicht zulässig", +"Die eingetragene Schülergruppe ist nicht vorgesehen", +"Zu diesem Schüler liegen keine oder unvollständige Halbjahresdaten vor", +"Fehler beim Datenbankzugriff","Keine Schülergruppen im Planungsbestand"); +TEXT VAR geplschuelergruppen,aufbermeld,aufberprot,aktschuljahr,akthalbjahr, +kommendesschuljahr;PROC schuljahreswechsel:abschnittsendebearbeitung( +zumschuljahresende)END PROC schuljahreswechsel;PROC halbjahreswechsel: +abschnittsendebearbeitung(zumhalbjahresende)END PROC halbjahreswechsel;PROC +abschnittsendebearbeitung(INT CONST zeitpunkt):forget(ds);kanal:=int( +getrcvparam(1));continue(kanal);reinitparsing;stichtag:=schulkenndatum( +schluesselendeschulhalbjahr);aktschuljahr:=schulkenndatum(schluesselschuljahr +);akthalbjahr:=schulkenndatum(schluesselhalbjahr);kommendesschuljahr:=subtext +(aktschuljahr,3,4);kommendesschuljahrCAT (jahrestext(int(kommendesschuljahr)+ +1));fehlerbehandlungvorbereiten;verarbeitung;fehlerauswertung;break(quiet). +fehlerbehandlungvorbereiten:disablestop;forget(protname,quiet);fehlerzahl:= +null.verarbeitung:IF zeitpunkt=zumschuljahresendeTHEN hochsetzenderschueler +ELSE halbjahreswechselderschuelerFI .fehlerauswertung:IF fehleraufgetreten +THEN schickefehlerprotokollananwenderELSE putsndcode(rcodenoprot);ds:= +nilspace;putsndds(ds);forget(ds)FI ;forget(protname,quiet).fehleraufgetreten: +fehlerzahl>null.schickefehlerprotokollananwender:clearerror;enablestop; +putsndcode(rcodeprot);ds:=old(protname);putsndds(ds);forget(ds).END PROC +abschnittsendebearbeitung;PROC halbjahreswechselderschueler:enablestop; +schuelergruppenausplanunguebernehmen;IF fehlerzahl=nullTHEN +aktuellanderschulebefindlicheschuelerdurchgehen(zumhalbjahresende)FI .END +PROC halbjahreswechselderschueler;PROC hochsetzenderschueler:enablestop; +schuelergruppenausplanunguebernehmen;IF fehlerzahl=nullTHEN +aktuellanderschulebefindlicheschuelerdurchgehen(zumschuljahresende); +neuanmeldungenuebernehmenFI .neuanmeldungenuebernehmen: +neuanmeldungenzur5uebernehmen;neuanmeldungenzur11uebernehmen; +sonstigeneuanmeldungenuebernehmen.END PROC hochsetzenderschueler;PROC +schuelergruppenausplanunguebernehmen:TEXT VAR folgesj,folgehj; +geplschuelergruppen:=niltext;neuewertefuerschuljahrhalbjahrbestimmen; +inittupel(dnraktschuelergruppen);putwert(fnrsgrpsj,folgesj);putwert(fnrsgrphj +,folgehj);search(dnraktschuelergruppen,FALSE );WHILE dbstatus=okCAND +richtigesschulhalbjahrREP leseeinesg;succ(dnraktschuelergruppen)PER ;IF +geplschuelergruppen=niltextTHEN fehler(niltext,fehlerplanung)ELSE +alteschuelergruppenloeschen;#statistikwuerfelvorbereitendr11.05.88#FI . +neuewertefuerschuljahrhalbjahrbestimmen:IF akthalbjahr=halbjahr1THEN folgesj +:=aktschuljahr;folgehj:=halbjahr2ELSE folgesj:=kommendesschuljahr;folgehj:= +halbjahr1FI .richtigesschulhalbjahr:wert(fnrsgrpsj)=folgesjCAND wert( +fnrsgrphj)=folgehj.#dr11.05.88statistikwuerfelvorbereiten:melde(hellan+ +"Die speziellen Statistiken werden initialisiert"+hellaus,meldz);initstatraum +(TRUE );bestaendeinstatraumeintragen(folgesj,folgehj); +kuerzelnameninstatraumeintragen.#END PROC +schuelergruppenausplanunguebernehmen;PROC alteschuelergruppenloeschen:TEXT +VAR sg:="";inittupel(dnraktschuelergruppen);putwert(fnrsgrpsj,aktschuljahr); +putwert(fnrsgrphj,akthalbjahr);search(dnraktschuelergruppen,FALSE );WHILE +altesschuljahrhalbjahrREP sg:=wert(fnrsgrpjgst)+wert(fnrsgrpkennung);delete( +dnraktschuelergruppen);IF dbstatus<>nullTHEN fehler(sg,fehlerstatus, +fehlerloeschen+text(dbstatus))ELSE melde("Die aktuelle Schülergruppe "+hellan ++sg+hellaus+"wird gelöscht",meldz)FI ;search(dnraktschuelergruppen,FALSE ) +PER .altesschuljahrhalbjahr:dbstatus=nullCAND wert(fnrsgrpsj)=aktschuljahr +CAND wert(fnrsgrphj)=akthalbjahr.END PROC alteschuelergruppenloeschen;PROC +leseeinesg:TEXT CONST jgstkurz:=wert(fnrsgrpjgst),jgstlang:=jgstaufber( +jgstkurz),zug:=compress(wert(fnrsgrpkennung));melde( +"Die aktuelle Schülergruppe "+hellan+jgstlang+zug+hellaus+"wird eingerichtet" +,meldz);geplschuelergruppenCAT jgstlang;geplschuelergruppenCAT zug; +geplschuelergruppenCAT sgtrennerEND PROC leseeinesg;PROC +aktuellanderschulebefindlicheschuelerdurchgehen(INT CONST zeitpunkt):TEXT +VAR schuelertid:="";bereitevor;erstenlesen;WHILE nochwelchedaREP schuelertid +:=gettid;saveupdateposition(dnrschueler);verarbeiten;aenderungspeichern; +updatenoetig:=TRUE ;naechstenlesen;PER .bereitevor:inittupel(dnrschueler); +putwert(fnrsustatuss,aktbestand);updatenoetig:=TRUE .erstenlesen:search( +ixsustatfamrufgeb,FALSE );merkealleschluesselwerte.naechstenlesen:IF wert( +fnrsustatuss)=bestandabgegangeneTHEN putwert(fnrsustatuss,aktbestand);search( +ixsustatfamrufgeb,FALSE )ELSE succ(ixsustatfamrufgeb)FI ;IF +selbensatznochmalgelesenTHEN succ(ixsustatfamrufgeb)FI ; +merkealleschluesselwerte.merkealleschluesselwerte:letztername:=wert( +fnrsufamnames);letzterrufname:=wert(fnrsurufnames);letztesgebdatum:=wert( +fnrsugebdatums);letzterstatus:=wert(fnrsustatuss).selbensatznochmalgelesen: +letztername=wert(fnrsufamnames)CAND letzterrufname=wert(fnrsurufnames)CAND +letztesgebdatum=wert(fnrsugebdatums)CAND letzterstatus=wert(fnrsustatuss). +nochwelcheda:dbstatus=nullCAND wert(fnrsustatuss)=aktbestand.verarbeiten: +setzekenndaten;setzejgstundsg;meldebearbeitung;IF abgemeldetTHEN +anderschulebefindlicheabmeldenELIF zeitpunkt=zumschuljahresendeTHEN +anderschulebefindlichebehandeln(aktjgst,aktsg)ELSE +schuelerzumhalbjahreswechselbehandeln(aktjgst,aktsg)FI .setzejgstundsg:TEXT +VAR aktjgst:=jgstaufber(wert(fnrsusgrpjgst)),aktsg:=compress(wert( +fnrsusgrpzugtut)).meldebearbeitung:melde("Die Daten von "+hellan+aufbermeld+ +hellaus+", "+hellan+aktjgst+aktsg+hellaus+"werden bearbeitet",meldz). +abgemeldet:INT VAR aktabmeldedatum:=datum(wert(fnrsuabgdats));( +aktabmeldedatum<>datum(leerdatum))CAND (datum(stichtag)>=aktabmeldedatum). +anderschulebefindlicheabmelden:putwert(fnrsustatuss,bestandabgegangene); +updatenoetig:=TRUE ;hjdnaechstesschulhalbjahrbearbeiten(aktjgst,aktsg). +aenderungspeichern:IF dbstatus=okTHEN IF updatenoetigTHEN +restoreupdateposition(dnrschueler);selupdate(dnrschueler);ELSE replace( +dnrschueler,schuelertid);putptid(schuelertid);insertinindex(ixsustatjgstzug); +IF zeitpunkt=zumschuljahresendeTHEN insertinindex(ixsustatjgst)FI FI ;IF +dbstatus<>nullTHEN fehler(aufberprot,fehlerstatus,fehleraendern+text(dbstatus +))FI FI .END PROC aktuellanderschulebefindlicheschuelerdurchgehen;PROC +schuelerzumhalbjahreswechselbehandeln(TEXT CONST aktjgst,aktsg):TEXT VAR +neueklasse,neuesg;tutorloeschen;neueklassepruefen;dbstatus(ok).tutorloeschen: +#removeoutoffindex(ixsustatjgstzug);##dr18.08.88#neuesg:=compress(wert( +fnrsuneuerzugtut));IF neuesg<>niltextTHEN putwert(fnrsusgrpzugtut,niltext)FI +.neueklassepruefen:IF neuesg=niltextTHEN neueklasse:=aktjgst+aktsg;neuesg:= +aktsgELSE neueklasse:=aktjgst+neuesg;putwert(fnrsuneuerzugtut,niltext); +putwert(fnrsusgrpzugtut,neuesg);FI ;IF NOT gueltigesg(neueklasse)THEN fehler( +aufberprot,fehlerungueltigesg,neueklasse);dbstatus(9);LEAVE +schuelerzumhalbjahreswechselbehandelnELSE hjdnaechstesschulhalbjahrbearbeiten +(aktjgst,neuesg)FI .END PROC schuelerzumhalbjahreswechselbehandeln;PROC +anderschulebefindlichebehandeln(TEXT CONST aktjgst,aktsg):holehjd; +analysierehalbjahresdaten;aendere.holehjd:IF wert(fnrsutidakthjd)<>niltext +THEN readtid(dnrhalbjahresdaten,wert(fnrsutidakthjd));IF iserrorTHEN +clearerror;dbstatus(notfound)FI ELSE dbstatus(notfound)FI ;IF +keinehalbjahresdatenvorhandenTHEN fehler(aufberprot,fehlerungueltigehjd); +LEAVE anderschulebefindlichebehandelnFI .keinehalbjahresdatenvorhanden: +dbstatus<>okCOR aktschuljahr<>wert(fnrhjdsj)COR akthalbjahr<>wert(fnrhjdhj) +COR key[1]<>wert(fnrhjdfamnames)COR key[2]<>wert(fnrhjdrufnames)COR key[3]<> +datumrekonversion(wert(fnrhjdgebdats))COR aktjgst<>jgstaufber(wert(fnrhjdjgst +))COR aktsg<>compress(wert(fnrhjdkennung)).analysierehalbjahresdaten:TEXT +VAR versetzung:=wert(fnrhjdversetzung);pruefeversetzungskennzeichen. +pruefeversetzungskennzeichen:BOOL VAR datenkorrekt:=FALSE ;TEXT CONST +neuerzugtutor:=wert(fnrsuneuerzugtut);IF versetzung=niltextTHEN fehler( +aufberprot,fehlerkeinverserg)ELIF pos(gueltigekennzeichen,versetzung)<=null +THEN fehler(aufberprot,fehlerungueltigesverserg,versetzung);ELIF +nichtnormalhoeherstufenCAND keinzugtutorTHEN fehler(aufberprot, +fehlerkeinneuertutor);ELSE datenkorrekt:=TRUE FI ;IF NOT datenkorrektTHEN +LEAVE anderschulebefindlichebehandelnFI .nichtnormalhoeherstufen:pos( +gueltigekennzeichen,versetzung)>poshoeherstufen.keinzugtutor:neuerzugtutor= +niltext.aendere:TEXT VAR neuesg:=wert(fnrsusgrpzugtut);#removeoutoffindex( +ixsustatjgst);removeoutoffindex(ixsustatjgstzug);##dr18.08.88#IF +neuerzugtutor<>niltextTHEN neuesg:=neuerzugtutorFI ;aendereschueler(aktjgst, +aktsg,neuesg,versetzung).END PROC anderschulebefindlichebehandeln;PROC +aendereschueler(TEXT CONST aktjgst,aktsg,neuesg,versetzung):bereitevor; +setzedaten;hjddatenloeschen;hjdnaechstesschulhalbjahrbearbeiten(neuejgst, +neuesg).bereitevor:TEXT VAR neuejgst:=aktjgst;TEXT VAR loeschjgst:=aktjgst;. +setzedaten:trageversetzungundtutorein;INT CONST kennzeichenpos:=pos( +gueltigekennzeichen,versetzung);SELECT kennzeichenposOF CASE posspringer: +springenCASE posvers:normalversetzenCASE posnachpr:zurnachpruefungversetzen +CASE posnichtvers,posfreiwillig:sitzenbleibenEND SELECT ;TEXT VAR neueklasse +:=neuejgst+neuesg;IF falscherzugtutorTHEN fehler(aufberprot, +fehlerungueltigesg,neueklasse);LEAVE aendereschuelerFI .falscherzugtutor:NOT +gueltigesg(neueklasse).trageversetzungundtutorein:putwert(fnrsuartzugang, +versetzung);putwert(fnrsuneuerzugtut,niltext).springen:IF int(aktjgst)>11 +THEN fehler(aufberprot,fehlerungueltigesverserg,versetzung);LEAVE +aendereschuelerFI ;BOOL VAR sitzenbleiber:=FALSE ;neuejgst:=jgstaufber(text( +int(aktjgst)+2));loeschjgst:=jgstaufber(text(int(aktjgst)+1)); +nachfolgendehjdsloeschen;sgeintragen;eintrittsek2evtleintragen. +normalversetzen:IF inder13THEN dreizehnerabmelden; +hjdnaechstesschulhalbjahrbearbeiten(neuejgst,aktsg);LEAVE aendereschueler +ELSE normalhochsetzenFI .zurnachpruefungversetzen:IF inder13THEN +nachpruefling13ELSE normalhochsetzenFI .normalhochsetzen:sitzenbleiber:= +FALSE ;neuejgst:=jgstaufber(text(int(aktjgst)+1));loeschjgst:=neuejgst; +sgeintragen;eintrittsek2evtleintragen.sgeintragen:putwert(fnrsusgrpjgst, +neuejgst);putwert(fnrsusgrpzugtut,neuesg);.eintrittsek2evtleintragen:IF +neuejgst=jgst11THEN putwert(fnrsueintrittinsek,kommendesschuljahr);FI . +nachpruefling13:sitzenbleiber:=TRUE ;putwert(fnrsuartzugang,dreizehnnachpr); +sgeintragen.sitzenbleiben:sitzenbleiber:=TRUE ;sgeintragen; +nachfolgendehjdsloeschen.nachfolgendehjdsloeschen:halbjahresdatenloeschen( +PROC (INT CONST )succ,key,halbjahr2,int(aktjgst),FALSE );.inder13:aktjgst= +jgst13.hjddatenloeschen:halbjahresdatenloeschen(key,aktjgst,loeschjgst, +halbjahr1).END PROC aendereschueler;PROC dreizehnerabmelden:putwert( +fnrsuabgdats,stichtag);putwert(fnrsuabschluss,kennzeichenabitur);putwert( +fnrsustatuss,bestandabgegangene);updatenoetig:=TRUE ;END PROC +dreizehnerabmelden;PROC neuanmeldungenzur5uebernehmen:uebernehmenaus( +neuanmeld5,1)END PROC neuanmeldungenzur5uebernehmen;PROC +neuanmeldungenzur11uebernehmen:uebernehmenaus(neuanmeld11,1)END PROC +neuanmeldungenzur11uebernehmen;PROC sonstigeneuanmeldungenuebernehmen: +uebernehmenaus(neuanmeldsonst,2)END PROC sonstigeneuanmeldungenuebernehmen; +PROC uebernehmenaus(TEXT CONST bestand,INT CONST meld):BOOL VAR +allesinordnung:=FALSE ;TEXT VAR neuejgst,neuerzug;bereitevor;erstenlesen; +WHILE nochwelchedaREP saveupdateposition(dnrschueler);pruefen;IF +allesinordnungTHEN uebernehmen;putwert(fnrsustatuss,bestand);meldeuebernahme; +FI ;naechstenlesen;PER .bereitevor:inittupel(dnrschueler);putwert( +fnrsustatuss,bestand).erstenlesen:search(ixsustatfamrufgeb,FALSE ). +nochwelcheda:dbstatus=nullCAND wert(fnrsustatuss)=bestand.pruefen: +setzekenndaten;pruefetutorsg(allesinordnung);.uebernehmen:neuejgst:=wert( +fnrsujgsteintr);neuerzug:=wert(fnrsuneuerzugtut);dbwertesetzen; +hjdnaechstesschulhalbjahrbearbeiten(neuejgst,neuerzug);restoreupdateposition( +dnrschueler);selupdate(dnrschueler);IF dbstatus<>nullTHEN fehler(aufberprot, +fehlerstatus,fehleraendern+text(dbstatus))FI .dbwertesetzen:putwert( +fnrsusgrpjgst,jgstaufber(neuejgst));putwert(fnrsusgrpzugtut,neuerzug);putwert +(fnrsuartzugang,kennzeichenneuan);putwert(fnrsuneuerzugtut,niltext). +meldeuebernahme:IF meld=1THEN melde("Bearbeitung der Neuangemeldeten zur "+ +jgstaufber(neuejgst)+": "+hellan+aufbermeld+hellaus,meldz)ELSE melde( +"Bearbeitung sonstiger Neuanmeldungen: "+hellan+aufbermeld+hellaus,meldz)FI . +naechstenlesen:search(ixsustatfamrufgeb,FALSE )#dr18.08.88##succ( +ixsustatfamrufgeb)##eigentlichrichtig#.END PROC uebernehmenaus;PROC fehler( +TEXT CONST name,INT CONST fehlernr):fehler(name,fehlernr,niltext)END PROC +fehler;PROC fehler(TEXT CONST name,INT CONST fehlernr,TEXT CONST ergaenzung): +IF ersterfehlerTHEN fehlerprotokollbeginnenELIF zuvielefehlerTHEN +programmendeFI ;nameinprotokoll;fehler(fehlernr,ergaenzung);dbstatus(notfound +);.ersterfehler:fehlerzahl=null.zuvielefehler:fehlerzahl=maxfehler. +fehlerprotokollbeginnen:fehlerprot:=sequentialfile(output,protname);TEXT VAR +protzeile:=schulkenndatum(schulname);protzeileCAT ((zeilenlaenge-datumslaenge +-length(protzeile))*blank);protzeileCAT date;putline(fehlerprot,protzeile); +putline(fehlerprot,schulkenndatum(schulort));line(fehlerprot,3);putline( +fehlerprot,protueberschrift);line(fehlerprot).programmende:line(fehlerprot); +putline(fehlerprot,weiterefehler);stop.nameinprotokoll:fehlerzahlINCR 1;line( +fehlerprot);protzeile:=text(fehlerzahl)+ordnungstrenner+name;putline( +fehlerprot,protzeile).END PROC fehler;PROC fehler(INT CONST fehlernr,TEXT +CONST ergaenzung):TEXT VAR protzeile:=absatztrenner+fehlertext(fehlernr);IF +ergaenzung<>niltextTHEN protzeileCAT klammerauf;protzeileCAT ergaenzung; +protzeileCAT klammerzuFI ;putline(fehlerprot,protzeile)END PROC fehler;PROC +pruefetutorsg(BOOL VAR allesinordnung):TEXT VAR eintrittjgst:=wert( +fnrsujgsteintr),neuerzug:=wert(fnrsuneuerzugtut);allesinordnung:=neuerzug<> +niltext;IF allesinordnungTHEN allesinordnung:=gueltigesg(eintrittjgst+ +neuerzug);IF NOT allesinordnungTHEN fehler(aufberprot,fehlerungueltigesg, +eintrittjgst+neuerzug)FI ELSE fehler(aufberprot,fehlerkeinneuertutor)FI ;END +PROC pruefetutorsg;BOOL PROC gueltigesg(TEXT CONST sg):pos( +geplschuelergruppen,sg+sgtrenner)>nullEND PROC gueltigesg;PROC setzekenndaten +:key(1):=wert(fnrsufamnames);key(2):=wert(fnrsurufnames);key(3):= +datumrekonversion(wert(fnrsugebdatums));aufbermeld:=key(1)+trennername+key(2) +;aufberprot:=aufbermeld+trennername+datumskonversion(key(3))END PROC +setzekenndaten;TEXT PROC jahrestext(INT CONST jahr):IF jahr=maxjahrTHEN +minjahrELSE text(jahr)FI END PROC jahrestext;PROC +hjdnaechstesschulhalbjahrbearbeiten(TEXT CONST jgst,zug):IF wert(fnrsustatuss +)<>aktbestandTHEN halbjahresdateninitialisierenundverarbeitenELSE +halbjahresdatensuchenundverarbeitenFI ;dbstatus(ok)#dr18.08.88##inittupel( +dnrschulen);dr11.05.88putwert(fnrschkennung,wert(fnrsuskennlschule));search( +dnrschulen,TRUE );einenschuelerinstatraumeinfuegen#. +halbjahresdateninitialisierenundverarbeiten:putwert(fnrsutidakthjd,niltext); +inittupel(dnrhalbjahresdaten);IF wert(fnrsustatuss)<>bestandabgegangeneTHEN +putwert(fnrsustatuss,aktbestand)FI .halbjahresdatensuchenundverarbeiten: +schluesselsetzen;search(dnrhalbjahresdaten,TRUE );IF dbstatus=okTHEN +eventuellneueklasseeintragen;putwert(fnrsutidakthjd,gettid)ELSE putwert( +fnrsutidakthjd,niltext)FI .schluesselsetzen:IF akthalbjahr=halbjahr1THEN +schluesselfuerhjdsetzen(dnrhalbjahresdaten,key,aktschuljahr,halbjahr2,jgst) +ELSE schluesselfuerhjdsetzen(dnrhalbjahresdaten,key,kommendesschuljahr, +halbjahr2,jgst)FI .eventuellneueklasseeintragen:IF schuelergruppegeaendert +THEN halbjahresdatenaendernFI .schuelergruppegeaendert:wert(fnrhjdjgst)<>jgst +OR wert(fnrhjdkennung)<>zug.halbjahresdatenaendern:putwert(fnrhjdjgst,jgst); +putwert(fnrhjdkennung,zug);selupdate(dnrhalbjahresdaten).END PROC +hjdnaechstesschulhalbjahrbearbeiten;LET seperatorzeichen=":./ ", +seperatorzeichen1=".";INT CONST beforefirstday:=-(22*vierjahre)-1;TEXT VAR b; +BOOL VAR conversionerror:=FALSE ;INT PROC nildatum:beforefirstdayEND PROC +nildatum;#L datumslets#LET letzterjanuar=31,letzterfebruar=59,letztermaerz=90 +,letzterapril=120,letztermai=151,letzterjuni=181,letzterjuli=212, +letzteraugust=243,letzterseptember=273,letzteroktober=304,letzternovember=334 +,#letzterdezember=365,#vierjahre=1461;PROC tmj(INT CONST d,INT VAR t,m,j): +INT VAR a;IF d<=beforefirstdayTHEN t:=-1;m:=-1;j:=-1;LEAVE tmjFI ;a:=d;IF a>0 +THEN j:=88ELSE j:=0;aINCR (-(beforefirstday+1))FI ;jINCR 4*(aDIV vierjahre);a +:=aMOD vierjahre;IF a=letzterfebruarTHEN t:=29;m:=2;LEAVE tmjELIF a> +letzterfebruarTHEN aDECR 1FI ;jINCR aDIV 365;a:=(aMOD 365)+1;IF a<= +letzterjuniTHEN januarbisjuniELSE julibisdezemberFI .januarbisjuni:IF a<= +letztermaerzTHEN januarbismaerzELSE aprilbisjuniFI .julibisdezember:IF a<= +letzterseptemberTHEN julibisseptemberELSE oktoberbisdezemberFI . +januarbismaerz:IF a<=letzterjanuarTHEN m:=1;t:=aELIF a<=letzterfebruarTHEN m +:=2;t:=a-letzterjanuarELSE m:=3;t:=a-letzterfebruarFI .aprilbisjuni:IF a<= +letzteraprilTHEN m:=4;t:=a-letztermaerzELIF a<=letztermaiTHEN m:=5;t:=a- +letzteraprilELSE m:=6;t:=a-letztermaiFI .julibisseptember:IF a<=letzterjuli +THEN m:=7;t:=a-letzterjuniELIF a<=letzteraugustTHEN m:=8;t:=a-letzterjuli +ELSE m:=9;t:=a-letzteraugustFI .oktoberbisdezember:IF a<=letzteroktoberTHEN m +:=10;t:=a-letzterseptemberELIF a<=letzternovemberTHEN m:=11;t:=a- +letzteroktoberELSE m:=12;t:=a-letzternovemberFI .END PROC tmj;INT PROC datum( +TEXT CONST a):b:=a;conversionerror:=FALSE ;INT VAR seperator:=seppos,t,m,j; +IF seperator=0THEN IF length(b)=6THEN t:=z(1)*10+z(2);m:=z(3)*10+z(4);j:=z(5) +*10+z(6);INT VAR dummy:=datum(t,m,j);IF conversionerrorTHEN dummy:=nildatum +FI ;LEAVE datumWITH dummyELSE leaveFI ELIF seperator=2THEN t:=z(1);ELIF +seperator=3THEN t:=10*z(1)+z(2);ELSE leaveFI ;b:=subtext(b,seperator+1); +seperator:=seppos;IF seperator=3THEN m:=z(1)*10+z(2);ELIF seperator=2THEN m:= +z(1)ELSE leaveFI ;b:=subtext(b,seperator+1);IF length(b)=2THEN j:=z(1)*10+z(2 +)ELIF length(b)=4THEN j:=z(1)*1000+z(2)*100+z(3)*10+z(4)-1900;ELSE leaveFI ; +IF conversionerrorTHEN nildatumELSE datum(t,m,j)FI .leave:LEAVE datumWITH +nildatum.seppos:INT VAR q;FOR qFROM 2UPTO 3REP IF pos(seperatorzeichen,bSUB q +)>0THEN LEAVE sepposWITH q;FI PER ;0.END PROC datum;INT PROC z(INT CONST wo): +INT VAR e:=code(bSUB wo)-48;IF e<0OR e>9THEN conversionerror:=TRUE ;0ELSE e +FI END PROC z;INT PROC datum(INT CONST t,m,jc):INT VAR j:=jc-1900IF j<0THEN j +INCR 1900FI ;IF (j+160)DIV 160<>1THEN nildatumELIF t<0THEN nildatumELSE +SELECT mOF CASE 1,3,5,7,8,10,12:IF t>31THEN nildatumELSE erg(t,m,j)FI CASE 4, +6,9,11:IF t>30THEN nildatumELSE erg(t,m,j)FI CASE 2:IF t<29THEN erg(t,m,j) +ELIF t=29AND jMOD 4=0THEN erg(t,m,j)ELSE nildatumFI OTHERWISE nildatumEND +SELECT FI END PROC datum;INT PROC erg(INT CONST t,m,jc):INT VAR j:=jc;INT +VAR result:=beforefirstday,tagimzyklus;IF j>=88THEN jDECR 88;result:=-1FI ; +resultINCR ((jDIV 4)*vierjahre);j:=jMOD 4;tagimzyklus:=tagundmonat+365*j;IF +tagimzyklus>erstermaerzimschaltjahrTHEN tagimzyklusINCR 1ELIF tagimzyklus= +erstermaerzimschaltjahrAND m=3THEN tagimzyklusINCR 1FI ;result+tagimzyklus. +erstermaerzimschaltjahr:60.tagundmonat:SELECT mOF CASE 1:tCASE 2:t+ +letzterjanuarCASE 3:t+letzterfebruarCASE 4:t+letztermaerzCASE 5:t+ +letzteraprilCASE 6:t+letztermaiCASE 7:t+letzterjuniCASE 8:t+letzterjuliCASE 9 +:t+letzteraugustCASE 10:t+letzterseptemberCASE 11:t+letzteroktoberCASE 12:t+ +letzternovemberOTHERWISE errorstop("monat > 12 oder < 0");0END SELECT .END +PROC erg;INT PROC jahr(INT CONST d):INT VAR t,m,j;tmj(d,t,m,j);j+1900END +PROC jahr;TEXT PROC datum(INT CONST d):INT VAR t,m,j;TEXT VAR e;tmj(d,t,m,j); +IF t<0THEN LEAVE datumWITH ""FI ;e:=code(tDIV 10+48);eCAT code(tMOD 10+48);e +CAT seperatorzeichen1;eCAT code(mDIV 10+48);eCAT code(mMOD 10+48);eCAT +seperatorzeichen1;eCAT code((jMOD 100)DIV 10+48);eCAT code(jMOD 10+48);eEND +PROC datum;END PACKET hoeherstufenlocalprog + diff --git a/app/schulis/2.2.1/src/0.ida.data b/app/schulis/2.2.1/src/0.ida.data new file mode 100644 index 0000000..a9cff8e --- /dev/null +++ b/app/schulis/2.2.1/src/0.ida.data @@ -0,0 +1,170 @@ +PACKET idadataDEFINES putformular,openformular,initformular,getactivformular, +getformtextname,getformularinfo,putformularinfo,getformularname, +getformularindex,getsteuercode,putsteuercode,getdruckaufbereitung, +putdruckaufbereitung,getzeile,putzeile,geteinfuegstellen,puteinfuegstellen, +getzeilenanzahl,putzeilenanzahl,getunterbloecke,putunterbloecke, +getvorzeilennr,putvorzeilennr,getanzahlselfelder,putanzahlselfelder, +getselektion,putselektion,getobjektklasse,putobjektklasse,getleitindex, +putleitindex,getscan,putscan,getanzahlregeln,putanzahlregeln,getregelnummer, +deleteregel,getblockregelnummer,putblockregelnummer,getzugriffsregel, +putzugriffsregel,getanzahlregelfelder,putanzahlregelfelder,getvergleichswert, +putvergleichswert,getblockanzahl,FORMULAR ,openmitloeschen, +setzeidazeichensatz:TEXT VAR idazeichensatz:="";LET maxanw=100,maxblock=11, +maxregel=50,maxobjekt=10,maxfeld=10,maxtext=100,maxsel=200;TYPE FORMULAR = +STRUCT (INFO formularbeschreibung,ROW maxregelREGEL zugriffsregel,INT +anzregeln,ROW maxobjektTEXT objektklassen,ROW maxselSELEKT selektion,INT +anzselfelder,DRUCKFORM druckform);TYPE INFO =STRUCT (TEXT formname, +scanbedingung,INT formindex,leitindex,BOOL formtyp);TYPE REGEL =STRUCT (INT +objektklassennr,regelnummer,indexnr,anzkeyfelder,ROW maxfeldTEXT +vergleichswert);TYPE SELEKT =STRUCT (TEXT selektionsfeld,wert);TYPE BLOCK = +STRUCT (ROW maxtextTEXT zeile,ROW maxtextTEXT einfuegstellen,INT anzzeilen, +zuregelnummer,TEXT unterblock,vorzeilennr);TYPE DRUCKFORM =STRUCT (ROW +maxblockBLOCK block,ROW maxanwSTCODE stcodes,INT anzblock,DRUCK +druckaufbereitung);TYPE STCODE =STRUCT (TEXT steuercode,INT laenge,BOOL +rechtsbuendig,druckvariable);TYPE DRUCK =STRUCT (TEXT schrifttyp,REAL +startlinks,startoben,INT zeilenproseite,REAL zeilenbreite);DATASPACE VAR fds +:=nilspace;BOUND FORMULAR VAR form;INT VAR aktformindex:=0;PROC +setzeidazeichensatz(TEXT CONST schriftart):idazeichensatz:=schriftartEND +PROC setzeidazeichensatz;BOOL VAR loeschenerlaubt:=TRUE ;BOOL PROC +openmitloeschen:loeschenerlaubtENDPROC openmitloeschen;PROC openmitloeschen( +BOOL CONST b):loeschenerlaubt:=bENDPROC openmitloeschen;PROC putformular( +DATASPACE CONST ds):forget(fds);fds:=ds;form:=fds;aktformindex:= +getformularindexENDPROC putformular;PROC openformular(INT CONST index):IF +aktformindex<>indexCAND loeschenerlaubtTHEN letzteformularloeschenFI ; +aktformindex:=index;IF exists(getformdataname)THEN form:=old(getformdataname) +ELSE initformular(index);FI .letzteformularloeschen:forget(getformdataname, +quiet);forget(getformtextname,quiet).ENDPROC openformular;PROC initformular( +INT CONST index):INT VAR i,j;FILE VAR formtext;aktformindex:=index;forget( +getformdataname,quiet);form:=new(getformdataname);putanzahlregeln(0); +putanzahlselfelder(0);putleitindex(0);putscan("");formtext:=sequentialfile( +output,getformtextname);FOR iFROM 1UPTO maxobjektREP putobjektklasse(i,"") +PER ;FOR iFROM 1UPTO maxanwREP putsteuercode(i,"",0,FALSE ,TRUE )PER ;FOR i +FROM 1UPTO maxregelREP FOR jFROM 1UPTO maxfeldREP form.zugriffsregel[i]. +vergleichswert[j]:=""PER PER ;putdruckaufbereitung(idazeichensatz,2.0,2.0,60, +77.0);putformularinfo("",index,TRUE )ENDPROC initformular;INT PROC +getactivformular:aktformindexENDPROC getactivformular;TEXT PROC +getformdataname:"FORMDATA."+text(aktformindex)ENDPROC getformdataname;TEXT +PROC getformtextname:"FORMTEXT."+text(aktformindex)ENDPROC getformtextname; +PROC getsteuercode(INT CONST index,TEXT VAR ausdruck,INT VAR ausglaenge,BOOL +VAR rbuendig,druckvar):IF index<1COR index>maxanwTHEN ausdruck:=""ELSE +ausdruck:=form.druckform.stcodes[index].steuercode;ausglaenge:=form.druckform +.stcodes[index].laenge;rbuendig:=form.druckform.stcodes[index].rechtsbuendig; +druckvar:=form.druckform.stcodes[index].druckvariable;FI ENDPROC +getsteuercode;PROC putsteuercode(INT CONST index,TEXT CONST ausdruck,INT +CONST ausglaenge,BOOL CONST rbuendig,druckvar):form.druckform.stcodes[index]. +steuercode:=ausdruck;form.druckform.stcodes[index].laenge:=ausglaenge;form. +druckform.stcodes[index].rechtsbuendig:=rbuendig;form.druckform.stcodes[index +].druckvariable:=druckvar;ENDPROC putsteuercode;PROC putdruckaufbereitung( +TEXT CONST schriftart,REAL CONST linkerrandlinks,linkerrandoben,INT CONST +zeilenperseite,REAL CONST zeichenperzeile):form.druckform.druckaufbereitung. +schrifttyp:=schriftart;form.druckform.druckaufbereitung.startlinks:= +linkerrandlinks;form.druckform.druckaufbereitung.startoben:=linkerrandoben; +form.druckform.druckaufbereitung.zeilenproseite:=zeilenperseite;form. +druckform.druckaufbereitung.zeilenbreite:=zeichenperzeile;ENDPROC +putdruckaufbereitung;PROC getdruckaufbereitung(TEXT VAR schriftart,REAL VAR +linkerrandlinks,linkerrandoben,INT VAR zeilenperseite,REAL VAR +zeichenperzeile):schriftart:=form.druckform.druckaufbereitung.schrifttyp; +linkerrandlinks:=form.druckform.druckaufbereitung.startlinks;linkerrandoben:= +form.druckform.druckaufbereitung.startoben;zeilenperseite:=form.druckform. +druckaufbereitung.zeilenproseite;zeichenperzeile:=form.druckform. +druckaufbereitung.zeilenbreite;ENDPROC getdruckaufbereitung;TEXT PROC +getzeile(INT CONST blocknr,zeilennr):form.druckform.block[blocknr+1].zeile[ +zeilennr]ENDPROC getzeile;PROC putzeile(INT CONST blocknr,zeilennr,TEXT +CONST textzeile):form.druckform.block[blocknr+1].zeile[zeilennr]:=textzeile; +form.druckform.anzblock:=max(form.druckform.anzblock,blocknr)ENDPROC putzeile +;TEXT PROC geteinfuegstellen(INT CONST blocknr,zeilennr):form.druckform.block +[blocknr+1].einfuegstellen[zeilennr]ENDPROC geteinfuegstellen;PROC +puteinfuegstellen(INT CONST blocknr,zeilennr,TEXT CONST einfueg):form. +druckform.block[blocknr+1].einfuegstellen[zeilennr]:=einfuegENDPROC +puteinfuegstellen;INT PROC getzeilenanzahl(INT CONST blocknr):form.druckform. +block[blocknr+1].anzzeilenENDPROC getzeilenanzahl;PROC putzeilenanzahl(INT +CONST blocknr,zeilennr):form.druckform.block[blocknr+1].anzzeilen:=zeilennr +ENDPROC putzeilenanzahl;INT PROC getblockregelnummer(INT CONST blocknr):form. +druckform.block[blocknr+1].zuregelnummerENDPROC getblockregelnummer;PROC +putblockregelnummer(INT CONST blocknr,regel):form.druckform.block[blocknr+1]. +zuregelnummer:=regelENDPROC putblockregelnummer;INT PROC getblockanzahl:form. +druckform.anzblockENDPROC getblockanzahl;TEXT PROC getunterbloecke(INT CONST +blocknr):form.druckform.block[blocknr+1].unterblockENDPROC getunterbloecke; +PROC putunterbloecke(INT CONST blocknr,TEXT CONST ub):form.druckform.block[ +blocknr+1].unterblock:=ubENDPROC putunterbloecke;TEXT PROC getvorzeilennr( +INT CONST blocknr):form.druckform.block[blocknr+1].vorzeilennrENDPROC +getvorzeilennr;PROC putvorzeilennr(INT CONST blocknr,TEXT CONST zeilenno): +form.druckform.block[blocknr+1].vorzeilennr:=zeilennoENDPROC putvorzeilennr; +TEXT PROC getscan:form.formularbeschreibung.scanbedingungENDPROC getscan; +PROC putscan(TEXT CONST bedingung):form.formularbeschreibung.scanbedingung:= +bedingungENDPROC putscan;TEXT PROC getobjektklasse(INT CONST ix):form. +objektklassen[ix]ENDPROC getobjektklasse;PROC putobjektklasse(INT CONST ix, +TEXT CONST okname):form.objektklassen[ix]:=oknameENDPROC putobjektklasse; +TEXT PROC getformularname:form.formularbeschreibung.formnameENDPROC +getformularname;INT PROC getformularindex:form.formularbeschreibung.formindex +ENDPROC getformularindex;PROC getformularinfo(TEXT VAR name,INT VAR index, +BOOL VAR typ):name:=form.formularbeschreibung.formname;index:=form. +formularbeschreibung.formindex;typ:=form.formularbeschreibung.formtyp; +ENDPROC getformularinfo;PROC putformularinfo(TEXT CONST name,INT CONST index, +BOOL CONST typ):form.formularbeschreibung.formname:=name;form. +formularbeschreibung.formindex:=index;form.formularbeschreibung.formtyp:=typ; +ENDPROC putformularinfo;INT PROC getleitindex:form.formularbeschreibung. +leitindexENDPROC getleitindex;PROC putleitindex(INT CONST neuerindex):form. +formularbeschreibung.leitindex:=neuerindexENDPROC putleitindex;INT PROC +getanzahlregeln:form.anzregelnENDPROC getanzahlregeln;PROC putanzahlregeln( +INT CONST anzahl):form.anzregeln:=anzahlENDPROC putanzahlregeln;PROC +putanzahlselfelder(INT CONST anzahl):form.anzselfelder:=anzahlENDPROC +putanzahlselfelder;INT PROC getanzahlselfelder:form.anzselfelderENDPROC +getanzahlselfelder;OP :=(REGEL VAR left,REGEL CONST right):CONCR (left):= +CONCR (right)ENDOP :=;INT PROC getregelnummer(INT CONST objektklasse,regelnr) +:INT VAR i;FOR iFROM 1UPTO getanzahlregelnREP IF form.zugriffsregel[i]. +objektklassennr=objektklasseCAND form.zugriffsregel[i].regelnummer=regelnr +THEN LEAVE getregelnummerWITH iFI PER ;0ENDPROC getregelnummer;PROC +deleteregel(INT CONST regel):INT VAR i;IF regel<=getanzahlregelnCAND regel>0 +THEN FOR iFROM regelUPTO getanzahlregeln-1REP form.zugriffsregel[i]:=form. +zugriffsregel[i+1]PER ;putanzahlregeln(getanzahlregeln-1)FI ENDPROC +deleteregel;PROC getzugriffsregel(INT CONST nr,INT VAR objekt,regel,index, +anzfelder):objekt:=form.zugriffsregel[nr].objektklassennr;regel:=form. +zugriffsregel[nr].regelnummer;index:=form.zugriffsregel[nr].indexnr;anzfelder +:=form.zugriffsregel[nr].anzkeyfelder;ENDPROC getzugriffsregel;PROC +putzugriffsregel(INT CONST nr,INT CONST objekt,regel,index,anzfelder):form. +anzregeln:=max(nr,form.anzregeln);form.zugriffsregel[nr].objektklassennr:= +objekt;form.zugriffsregel[nr].regelnummer:=regel;form.zugriffsregel[nr]. +indexnr:=index;form.zugriffsregel[nr].anzkeyfelder:=anzfelder;ENDPROC +putzugriffsregel;INT PROC getanzahlregelfelder(INT CONST regelnr):form. +zugriffsregel[regelnr].anzkeyfelderENDPROC getanzahlregelfelder;PROC +putanzahlregelfelder(INT CONST regelnr,anzahl):form.zugriffsregel[regelnr]. +anzkeyfelder:=anzahlENDPROC putanzahlregelfelder;TEXT PROC getvergleichswert( +INT CONST regel,nr):form.zugriffsregel[regel].vergleichswert[nr]ENDPROC +getvergleichswert;PROC putvergleichswert(INT CONST regelnr,TEXT CONST vglwert +):form.zugriffsregel[regelnr].anzkeyfelderINCR 1;form.zugriffsregel[regelnr]. +vergleichswert[form.zugriffsregel[regelnr].anzkeyfelder]:=vglwertENDPROC +putvergleichswert;PROC putselektion(TEXT CONST feldname,vglwert):form. +anzselfelderINCR 1;form.selektion[form.anzselfelder].selektionsfeld:=feldname +;form.selektion[form.anzselfelder].wert:=vglwert;ENDPROC putselektion;PROC +getselektion(INT CONST ix,TEXT VAR feldname,vglwert):feldname:=form.selektion +[ix].selektionsfeld;vglwert:=form.selektion[ix].wert;ENDPROC getselektion; +TEXT PROC getselektion:buildselektionENDPROC getselektion;LET textbegrenzer= +"""",klammerauf="<",klammerzu=">",gleich="=",undoperator=" UND ",operatoren= +"=<>";INT PROC postextende(TEXT CONST ausgabe,INT CONST aktuelleposition): +INT VAR neupos:=aktuelleposition+1;WHILE (ausgabeSUB neupos)<>textbegrenzer +REP neuposINCR 1;IF (ausgabeSUB neupos)=textbegrenzerCAND (ausgabeSUB neupos+ +1)=textbegrenzerTHEN neuposINCR 2;FI ;UNTIL neupos>length(ausgabe)PER ;neupos ++1ENDPROC postextende;INT PROC operatorposition(TEXT VAR ausdruck,INT CONST +abpos):INT VAR p:=abpos;WHILE p<=length(ausdruck)AND pos(operatoren,ausdruck +SUB p)=0REP IF (ausdruckSUB p)=textbegrenzerTHEN insertchar(ausdruck, +klammerauf,p);pINCR 1;p:=postextende(ausdruck,p);insertchar(ausdruck, +klammerzu,p);pINCR 1;ELSE pINCR 1FI ;PER ;IF p>length(ausdruck)THEN 0ELSE p +FI ENDPROC operatorposition;TEXT PROC buildselektion:INT VAR i:=1,oppos, +lastpos;TEXT VAR selausdruck:="",feldname:="",einfacherausdruck:="", +feldausdruck:="";WHILE i<=getanzahlselfelderREP getselektion(i,feldname, +einfacherausdruck);IF einfacherausdruck>""THEN evtlumoperatorergaenzen; +feldausdruck:="";lastpos:=1;oppos:=operatorposition(einfacherausdruck,1); +WHILE oppos>0REP teilausdruckuebernehmen;feldnameneinfuegen;lastpos:=oppos; +opposINCR 1;IF pos(operatoren,einfacherausdruckSUB oppos)>0THEN opposINCR 1 +FI ;oppos:=operatorposition(einfacherausdruck,oppos);PER ;restuebernehmen; +feldausdruckklammern;IF length(selausdruck)>0THEN selausdruckCAT undoperator +FI ;selausdruckCAT feldausdruck;FI ;iINCR 1;PER ;selausdruck. +evtlumoperatorergaenzen:IF pos(operatoren,einfacherausdruckSUB 1)=0THEN +einfacherausdruck:=gleich+einfacherausdruckFI .teilausdruckuebernehmen: +feldausdruckCAT subtext(einfacherausdruck,lastpos,oppos-1).feldnameneinfuegen +:feldausdruck:=feldausdruck+textbegrenzer+feldname+textbegrenzer+" ". +restuebernehmen:feldausdruckCAT subtext(einfacherausdruck,lastpos). +feldausdruckklammern:feldausdruck:="("+feldausdruck+")".ENDPROC +buildselektion;ENDPACKET idadata + diff --git a/app/schulis/2.2.1/src/0.ida.form b/app/schulis/2.2.1/src/0.ida.form new file mode 100644 index 0000000..faa2776 --- /dev/null +++ b/app/schulis/2.2.1/src/0.ida.form @@ -0,0 +1,34 @@ +PACKET formdbDEFINES putform,getform,delform,formexists,formdbstatus:LET +putdatacode=10,puttextcode=11,getdatacodeno=12,gettextcodeno=13, +getdatacodename=19,gettextcodename=20,initializeserver=18,delcodeno=14, +existscodeno=15,delcodename=16,existscodename=17,errornak=2,ok=0, +cformtextname="FORMTEXT.",cformdataname="FORMDATA.";DATASPACE VAR ds;INT VAR +formnr,replycode;TASK VAR formdbserver:=/"ida server";BOUND TEXT VAR +boundinhalt;TEXT VAR id,formname;BOUND FORMULAR VAR form;TEXT PROC +formtextname:cformtextname+text(getformularindex)ENDPROC formtextname;TEXT +PROC formdataname:cformdataname+text(getformularindex)ENDPROC formdataname; +TEXT PROC formtextname(INT CONST formnr):cformtextname+text(formnr)ENDPROC +formtextname;TEXT PROC formdataname(INT CONST formnr):cformdataname+text( +formnr)ENDPROC formdataname;PROC formdbstatus(INT CONST newcode):replycode:= +newcode;ENDPROC formdbstatus;INT PROC formdbstatus:replycodeENDPROC +formdbstatus;PROC putform:forget(ds);formnr:=getformularindex;ds:=old( +formdataname);c(formdbserver,putdatacode,ds,replycode);IF replycode=okTHEN +forget(ds);ds:=old(formtextname(formnr));type(ds,formnr);c(formdbserver, +puttextcode,ds,replycode);forget(ds)FI ENDPROC putform;PROC getform(INT +CONST formnr):call(text(formnr),getdatacodeno);receive(replycode)ENDPROC +getform;PROC getform(TEXT CONST formname):call(formname,getdatacodename); +receive(replycode);ENDPROC getform;PROC receive(INT CONST replycode):IF +replycode=okTHEN putformular(ds);formnr:=getformularindex;forget(formdataname +,quiet);copy(ds,formdataname);call(text(formnr),gettextcodeno);forget( +formtextname(formnr),quiet);type(ds,1003);copy(ds,formtextname(formnr)); +forget(ds)FI ENDPROC receive;PROC delform(INT CONST formnr):call(text(formnr) +,delcodeno)ENDPROC delform;PROC delform(TEXT CONST formname):call(formname, +delcodename)ENDPROC delform;BOOL PROC formexists(INT CONST formnr):call(text( +formnr),existscodeno);replycode=okENDPROC formexists;BOOL PROC formexists( +TEXT CONST formname):call(text(formnr),existscodename);replycode=okENDPROC +formexists;PROC call(TEXT CONST inhalt,INT CONST ordercode):forget(ds);ds:= +nilspace;boundinhalt:=ds;boundinhalt:=inhalt;c(formdbserver,ordercode,ds, +replycode);ENDPROC call;PROC c(TASK CONST t,INT CONST i,DATASPACE VAR d,INT +VAR r):call(t,i,d,r);IF r=errornakTHEN boundinhalt:=ds;errorstop( +"IDA-MANAGER-Fehler: "+boundinhalt);FI ENDPROC c;ENDPACKET formdb; + diff --git a/app/schulis/2.2.1/src/0.ida.server b/app/schulis/2.2.1/src/0.ida.server new file mode 100644 index 0000000..ee1b067 --- /dev/null +++ b/app/schulis/2.2.1/src/0.ida.server @@ -0,0 +1,51 @@ +PACKET idaserverDEFINES idaserver:LET ok=00,#SERVER M essages&E rrors# +notfound=04,noform="",cformtextname="FORMTEXT.",#SERVER const#cformdataname= +"FORMDATA.",putdatacode=10,#SERVER ordercodes#puttextcode=11,getdatacodeno=12 +,gettextcodeno=13,getdatacodename=19,gettextcodename=20,delcodeno=14, +delcodename=16,existscodeno=15,existscodename=17,#initserver=18,#errornak=2,# +EUMEL S ystemerrors#continuecode=100;#EUMEL S ystemcodes#DATASPACE VAR ds:= +nilspace;#BOUND FORMULAR VAR form;#BOUND TEXT VAR errortext,formtext;TASK +VAR ordertask;INT VAR i,ordercode;ROW 100TEXT VAR formname;TEXT VAR id;FOR i +FROM 1UPTO 100REP formname[i]:="";PER ;#TEXT PROC formtextname:cformtextname+ +text(getformularindex)ENDPROC formtextname;#TEXT PROC formdataname: +cformdataname+text(getformularindex)ENDPROC formdataname;TEXT PROC +formtextname(TEXT CONST formnr):cformtextname+formnrENDPROC formtextname; +TEXT PROC formdataname(TEXT CONST formnr):cformdataname+formnrENDPROC +formdataname;TEXT PROC searchid:INT VAR count;TEXT VAR returntext;formtext:= +ds;returntext:=formtext;IF ordercode=delcodenameOR ordercode=existscodename +OR ordercode=getdatacodenameTHEN searchheaderELSE returntextFI .searchheader: +FOR countFROM 1UPTO 100REP IF formname[count]=formtextTHEN LEAVE searchid +WITH text(count);FI ;PER ;noform.ENDPROC searchid;PROC server:SELECT +ordercodeOF CASE putdatacode:writeformdataCASE puttextcode:writeformtextCASE +getdatacodeno,getdatacodename:readformdataCASE gettextcodeno,gettextcodename: +readformtextCASE delcodeno,delcodename:deleteformCASE existscodename, +existscodeno:existsformOTHERWISE :errorstop("Unbekannter Auftrag")ENDSELECT +;eventuellfehlerbehandlung;send(ordertask,ordercode,ds). +eventuellfehlerbehandlung:IF iserrorTHEN ordercode:=errornak;errortext:=ds; +errortext:=errormessage;clearerrorFI .writeformdata:putformular(ds);#form:=ds +;#id:=text(getformularindex);i:=getformularindex;formname[i]:=getformularname +;forget(formdataname,quiet);copy(ds,formdataname);forget(ds);ds:=nilspace; +ordercode:=ok.writeformtext:#form:=ds;#id:=text(type(ds));forget(formtextname +(id),quiet);type(ds,1003);copy(ds,formtextname(id));forget(ds);ordercode:=ok; +ds:=nilspace.readformdata:id:=searchid;IF id=noformTHEN ordercode:=notfound; +LEAVE readformdataFI ;forget(ds);IF exists(formdataname(id))THEN ordercode:= +ok;ds:=old(formdataname(id));ELSE ds:=nilspace;ordercode:=notfoundFI . +readformtext:id:=searchid;IF id=noformTHEN ordercode:=notfound;LEAVE +readformtextFI ;forget(ds);IF exists(formtextname(id))THEN ordercode:=ok;ds:= +old(formtextname(id));ELSE ordercode:=notfound;ds:=nilspaceFI .ENDPROC server +;PROC deleteform:id:=searchid;ordercode:=ok;IF id=noformTHEN LEAVE deleteform +FI ;forget(formtextname(id),quiet);forget(formdataname(id),quiet);forget(ds); +ds:=nilspace;ENDPROC deleteform;PROC existsform:id:=searchid;IF id=noform +THEN ordercode:=notfoundELSE IF exists(formtextname(id))CAND exists( +formdataname(id))THEN ordercode:=okELSE ordercode:=notfoundFI FI ;ENDPROC +existsform;PROC idaserver:globalmanager(PROC (DATASPACE VAR ,INT CONST ,INT +CONST ,TASK CONST )idaserver)ENDPROC idaserver;PROC idaserver(DATASPACE VAR +dsp,INT CONST orderp,phasep,TASK CONST ordertaskp):IF orderp>=continuecode +AND ordertaskp=supervisorTHEN forget(dsp);spoolcommand(orderp)ELSE clearerror +;enablestop;forget(ds);ds:=dsp;ordercode:=orderp;ordertask:=ordertaskp;server +FI ENDPROC idaserver;PROC spoolcommand(INT CONST order):TEXT VAR commandline +:="";enablestop;break(quiet);continue(order-continuecode);disablestop;REP +commanddialogue(TRUE );getcommand("ISP-IDA-MANAGER:",commandline);do( +commandline)UNTIL NOT onlinePER ;commanddialogue(FALSE );break(quiet); +setautonomEND PROC spoolcommand;ENDPACKET idaserver; + diff --git a/app/schulis/2.2.1/src/0.klassengruppen definieren b/app/schulis/2.2.1/src/0.klassengruppen definieren new file mode 100644 index 0000000..0765de9 --- /dev/null +++ b/app/schulis/2.2.1/src/0.klassengruppen definieren @@ -0,0 +1,81 @@ +PACKET erfklassengruppenDEFINES erfassungklassengruppen:LET maskenname= +"ms erf klassengruppen",fnrkennung=2,fnrletztesfeld=32,trenner=" = ", +maxsugruppen=15,laengejgst=2,laengezug=4,laengeeinersugruppe=6, +laengeklassengruppe=4,felderprozeile=2;INT VAR fnrjgst;TEXT VAR sugruppen:="" +;TEXT VAR sugruppe:="";INT VAR anzsugruppen;TEXT VAR gueltigeschuelergruppen +:="";LET postrenner="�";LET fuehrendenull="0",jgst5=5,jgst10=10,jgst13=13; +LET meldnrfehlendeangabe=52,meldnrungueltigesugruppe=55, +meldnrklassengruppezulang=60,meldnrungueltigegruppenbez=86;LET wertaktuell= +"aktuell",wertgeplant="geplant";PROC erfassungklassengruppen(INT CONST proznr +):systemdboff;reinitparsing;SELECT proznrOF CASE 1:setzeerfassungsparameter +CASE 2:zeigeklassengruppezurbearbeitungCASE 3:pruefeplausibilitaetCASE 4: +setzewertefuerdbspeicherungCASE 5:setzeidentiobjektfuerobjektlisteCASE 6: +klassengruppenlesenCASE 7:klassengruppenaendernCASE 8:klassengruppeneinfuegen +CASE 9:klassengruppenloeschenEND SELECT END PROC erfassungklassengruppen; +PROC setzeerfassungsparameter:gueltigeschuelergruppen:=""; +setzeerfassungsparameter(dnrklassengruppen,maskenname,fnrletztesfeld)END +PROC setzeerfassungsparameter;PROC zeigeklassengruppezurbearbeitung: +setzeerfassungsfeld(wert(fnrkgklassengrp),fnrkennung);sugruppen:=wert( +fnrkgschuelergrp);anzsugruppen:=(length(sugruppen))DIV laengeeinersugruppe; +INT VAR i:=1;fnrjgst:=fnrkennung+1;WHILE i<=anzsugruppenREP sugruppe:=subtext +(sugruppen,1,laengeeinersugruppe);sugruppen:=subtext(sugruppen, +laengeeinersugruppe+1);setzeerfassungsfeld(subtext(sugruppe,1,laengejgst), +fnrjgst);setzeerfassungsfeld(compress(subtext(sugruppe,laengejgst+1)),fnrjgst ++1);fnrjgstINCR felderprozeile;iINCR 1PER ;WHILE i<=maxsugruppenREP +setzeerfassungsfeld("",fnrjgst);setzeerfassungsfeld("",fnrjgst+1);fnrjgst +INCR felderprozeile;iINCR 1PER ;END PROC zeigeklassengruppezurbearbeitung; +PROC pruefeplausibilitaet:LET leer="",null=0;INT VAR pruefbez;IF +gueltigeschuelergruppen=""THEN +holeallegeplundaktschuelergruppeningueltigesugruppenFI ;INT VAR fehlerstatus; +pruefe(1,erfassungsmaske,PROC erfassungswert,fnrkennung,null,null,leer, +fehlerstatus);IF fehlerstatus<>0THEN setzefehlerstatus(fehlerstatus);LEAVE +pruefeplausibilitaetELIF length(erfassungswert(fnrkennung))> +laengeklassengruppeTHEN meldeauffaellig(erfassungsmaske, +meldnrklassengruppezulang);setzefehlerstatus(fnrkennung);LEAVE +pruefeplausibilitaetELSE pruefbez:=int(erfassungswert(fnrkennung));IF +lastconversionokTHEN IF pruefbez>=jgst5CAND pruefbez<=jgst13THEN +meldeauffaellig(erfassungsmaske,meldnrungueltigegruppenbez);setzefehlerstatus +(fnrkennung);LEAVE pruefeplausibilitaetFI FI FI ;INT VAR i;fnrjgst:= +fnrkennung+1;FOR iFROM 1UPTO maxsugruppenREP IF erfassungswert(fnrjgst)<>"" +THEN pruefe(3,erfassungsmaske,PROC erfassungswert,fnrjgst,jgst5,jgst13,leer, +fehlerstatus);IF fehlerstatus<>0THEN setzefehlerstatus(fehlerstatus);LEAVE +pruefeplausibilitaetELIF kennungangegebenCAND ungueltigeschuelergruppenangabe +THEN setzefehlerstatus(fnrjgst);meldeauffaellig(erfassungsmaske, +meldnrungueltigesugruppe);LEAVE pruefeplausibilitaetFI ;ELIF kennungangegeben +THEN setzefehlerstatus(fnrjgst);meldeauffaellig(erfassungsmaske, +meldnrfehlendeangabe);LEAVE pruefeplausibilitaetFI ;fnrjgstINCR +felderprozeilePER .kennungangegeben:erfassungswert(fnrjgst+1)<>"". +ungueltigeschuelergruppenangabe:pos(gueltigeschuelergruppen,suchwert)=0. +suchwert:postrenner+text(int(erfassungswert(fnrjgst)))+compress( +erfassungswert(fnrjgst+1))+postrenner.END PROC pruefeplausibilitaet;PROC +holeallegeplundaktschuelergruppeningueltigesugruppen:gueltigeschuelergruppen +:=postrenner;statleseschleife(dnraktschuelergruppen,"","",fnrsgrpsj,fnrsgrpsj +,PROC sugruppelesen);END PROC +holeallegeplundaktschuelergruppeningueltigesugruppen;PROC sugruppelesen(BOOL +VAR b):IF dbstatus<>0THEN b:=TRUE ELSE gueltigeschuelergruppenCAT wert( +fnrsgrpjgst)+wert(fnrsgrpkennung)+postrennerFI END PROC sugruppelesen;PROC +setzewertefuerdbspeicherung:putwert(fnrkgklassengrp,erfassungswert(fnrkennung +));sugruppen:="";INT VAR i;fnrjgst:=fnrkennung+1;FOR iFROM 1UPTO maxsugruppen +REP sugruppe:=erfassungswert(fnrjgst);IF sugruppe<>""THEN sugruppenCAT +jgstangabe;sugruppenCAT text(erfassungswert(fnrjgst+1),laengezug)FI ;fnrjgst +INCR felderprozeilePER ;putwert(fnrkgschuelergrp,sugruppen).jgstangabe:INT +VAR ijgst:=int(sugruppe);IF ijgst>=jgst10CAND ijgst<=jgst13THEN sugruppeELSE +fuehrendenull+text(ijgst,1)FI .END PROC setzewertefuerdbspeicherung;PROC +setzeidentiobjektfuerobjektliste:LET trennsymbolfuerobli="$";TEXT VAR +identizeile;identizeile:=wert(fnrkgklassengrp)+trenner+wert(fnrkgschuelergrp) +;setzeidentiwert(identizeilemitschluesselanhang). +identizeilemitschluesselanhang:identizeile+trennsymbolfuerobli+wert( +fnrkgklassengrp).END PROC setzeidentiobjektfuerobjektliste;PROC +klassengruppenlesen:putwert(fnrkgklassengrp,schluessel);search( +dnrklassengruppen,TRUE );IF dbstatus=okTHEN saveupdateposition( +dnrklassengruppen)FI END PROC klassengruppenlesen;PROC klassengruppenaendern: +restoreupdateposition(dnrklassengruppen);update(dnrklassengruppen); +aenderungsvermerksetzen(wertaktuell);aenderungsvermerksetzen(wertgeplant)END +PROC klassengruppenaendern;PROC klassengruppeneinfuegen:insert( +dnrklassengruppen);aenderungsvermerksetzen(wertaktuell); +aenderungsvermerksetzen(wertgeplant)END PROC klassengruppeneinfuegen;PROC +klassengruppenloeschen:delete(dnrklassengruppen);aenderungsvermerksetzen( +wertaktuell);aenderungsvermerksetzen(wertgeplant)END PROC +klassengruppenloeschen;TEXT PROC schluessel:erfassungswert(fnrkennung)END +PROC schluessel;END PACKET erfklassengruppen; + diff --git a/app/schulis/2.2.1/src/0.kurswahlbasis bereinigen b/app/schulis/2.2.1/src/0.kurswahlbasis bereinigen new file mode 100644 index 0000000..8be6d56 --- /dev/null +++ b/app/schulis/2.2.1/src/0.kurswahlbasis bereinigen @@ -0,0 +1,34 @@ +PACKET kurswahlbasisbereinigenDEFINES kurswahlserveraktualisieren, +kurswahlserverlvaktualisieren:LET server="kurswahl server",jg9=9,jg14=14,hj1= +"1",hj2="2",dbsj="Schuljahr",dbhj="Schulhalbjahr",kurswahl="Kurswahl-",kw2= +"2 ",kw0="0 ";INT VAR sj1,sj2,sj3,sj4,akthj;TEXT VAR schuljahr,halbjahr;TASK +VAR takuser;PROC kurswahlserveraktualisieren(TEXT CONST jgst,spezjgst,spezhj) +:serveraktualisieren(kw2,jgst,spezjgst,spezhj)END PROC +kurswahlserveraktualisieren;PROC kurswahlserverlvaktualisieren(TEXT CONST +jgst,spezjgst,spezhj):serveraktualisieren(kw0,jgst,spezjgst,spezhj)END PROC +kurswahlserverlvaktualisieren;PROC serveraktualisieren(TEXT CONST ds,jgst, +spezjgst,spezhj):INT VAR jg:=int(jgst),spezjg:=int(spezjgst),jgdiff;IF +existstask(server)THEN takuser:=task(server);schuljahr:=schulkenndatum(dbsj); +halbjahr:=schulkenndatum(dbhj);sj1:=int(schuljahr);sj2:=sj1+101;sj3:=sj2+101; +sj4:=sj3+101;IF jg>jg9CAND jg<jg14THEN commanddialogue(FALSE );IF (spezjgst= +""CAND spezhj="")THEN loeschealledatenraeumeELIF spezjg>jg9CAND spezjg<jg14 +THEN IF spezhj=hj1COR spezhj=hj2THEN loeschespezdatenraumFI ;FI ; +commanddialogue(TRUE );FI ;FI .loeschealledatenraeume:IF NOT (jg=10CAND +halbjahr="1")THEN erase(datenraumname(jg,ds,hj1,schuljahr),takuser);erase( +datenraumname(jg,ds,hj2,schuljahr),takuser);erase(datenraumname(jg+1,ds,hj1, +konvsj(sj2)),takuser);erase(datenraumname(jg+1,ds,hj2,konvsj(sj2)),takuser); +erase(datenraumname(jg+2,ds,hj1,konvsj(sj3)),takuser);erase(datenraumname(jg+ +2,ds,hj2,konvsj(sj3)),takuser);erase(datenraumname(jg+3,ds,hj1,konvsj(sj4)), +takuser);erase(datenraumname(jg+3,ds,hj2,konvsj(sj4)),takuser)FI . +loeschespezdatenraum:akthj:=int(halbjahr);jgdiff:=spezjg-jg;IF NOT (jg=10 +CAND spezjg=10)THEN IF jgdiff=0CAND spezhj>=halbjahrTHEN erase(datenraumname( +spezjg,ds,spezhj,schuljahr),takuser)ELIF jgdiff=1THEN erase(datenraumname( +spezjg,ds,spezhj,konvsj(sj2)),takuser)ELIF jgdiff=2THEN erase(datenraumname( +spezjg,ds,spezhj,konvsj(sj3)),takuser)ELIF jgdiff=3THEN erase(datenraumname( +spezjg,ds,spezhj,konvsj(sj4)),takuser)FI FI .END PROC serveraktualisieren; +TEXT PROC datenraumname(INT CONST jgst,TEXT CONST dsp,halbjahr,schuljahr): +TEXT VAR name:=kurswahl;nameCAT dsp;nameCAT text(jgst);nameCAT " ";nameCAT +halbjahr;nameCAT ".";nameCAT schuljahr;nameEND PROC datenraumname;TEXT PROC +konvsj(INT CONST sjbez):IF sjbez<9901THEN text(sjbez)ELSE subtext(text(sjbez) +,2)FI END PROC konvsj;END PACKET kurswahlbasisbereinigen; + diff --git a/app/schulis/2.2.1/src/0.liste der aufsichtszeiten b/app/schulis/2.2.1/src/0.liste der aufsichtszeiten new file mode 100644 index 0000000..c0138c4 --- /dev/null +++ b/app/schulis/2.2.1/src/0.liste der aufsichtszeiten @@ -0,0 +1,93 @@ +PACKET listederaufsichtszeitenDEFINES +aufsichtszeitenlisteerstellenunddruckenggfvorherzeigen:LET fnrausggeplanteshj +=2,fnrausgaktuelleshj=3,fnrausgdrucker=4,fnrausgbild=5;LET +schluesselschuljahr="Schuljahr",schluesselschulhalbjahr="Schulhalbjahr";LET +zusätzlicherlaubtetasten="vr";LET meldunglistewirdaufgebaut=7, +meldunglistewirdausgedruckt=58,meldungbittewarten=69, +meldungkeinedatenvorhanden=68;LET dateinamezumzeigen= +"Liste der Aufsichtszeiten",ueberschrift1fuerdruckdatei= +"Liste der Aufsichtszeiten",ueberschrift2fuerdruckdatei= +"-------------------------",textanfangfuerschulhalbjahr="für Schuljahr ", +trennerfuerschuljahr="/",textmittefuerschulhalbjahr=", ", +textendefuerschulhalbjahr=". Halbjahr",ueberschrift1dertabelle= +" Tag Nr. Bezeichnung Stunde Uhrzeit", +ueberschrift2dertabelle= +" vorher nachher von bis", +trennstrichdertabelle= +"--------+----------------------+-----------------+-----------------", +stelligkeitdestages=100,füllervorbezeichnung=". ",bezeichnungslänge=20, +füllervorstunde=" ",stundenprowochentag=12,leerestunde=" ",füllerinstunde= +". ",füllervoruhrzeit=". ",blankszumauffüllen=" ",stellenfürzeit +=4,füllerinuhrzeit=" ",stdundmintrenner=":",laengederstundenzeit=2, +blanksvorwochentag=" ",leererwochentag=" ",textmontag="Mo",textdienstag= +"Di",textmittwoch="Mi",textdonnerstag="Do",textfreitag="Fr",textsamstag="Sa", +nummerfürsa=6;LET niltext="",blank=" ";BOOL VAR erstaufbildschirm:=FALSE ; +TEXT VAR schuljahr:=niltext,halbjahr:=niltext;INT VAR fehlerstatus;FILE VAR f +;INT VAR akttag;PROC aufsichtszeitenlisteerstellenunddruckenggfvorherzeigen( +INT CONST nr):SELECT nrOF CASE 1:aufsichtszeitenlisteerstellenCASE 2: +aufsichtszeitenlistedruckenENDSELECT .END PROC +aufsichtszeitenlisteerstellenunddruckenggfvorherzeigen;PROC +aufsichtszeitenlisteerstellen:INT VAR i;prüfeobrichtigangekreuztist;IF +fehlerstatus<>0THEN infeld(fehlerstatus);return(1);LEAVE +aufsichtszeitenlisteerstellenFI ;erstaufbildschirm:=standardmaskenfeld( +fnrausgbild)<>niltext;IF erstaufbildschirmTHEN standardmeldung( +meldunglistewirdaufgebaut,niltext)ELSE standardmeldung(meldungbittewarten, +niltext)FI ;berechnebearbeitungsschuljahrundhalbjahr; +fuellediedateimitdenaufsichtszeiten;IF akttag=0THEN standardmeldung( +meldungkeinedatenvorhanden,niltext);forget(dateinamezumzeigen,quiet);return(1 +);LEAVE aufsichtszeitenlisteerstellenFI ;IF erstaufbildschirmTHEN zeigedatei( +dateinamezumzeigen,zusätzlicherlaubtetasten)ELSE standardmeldung( +meldunglistewirdausgedruckt,niltext);aufsichtszeitenlistedruckenFI . +prüfeobrichtigangekreuztist:standardpruefe(5,fnrausggeplanteshj, +fnrausgaktuelleshj,0,niltext,fehlerstatus);IF fehlerstatus=0THEN +standardpruefe(5,fnrausgdrucker,fnrausgbild,0,niltext,fehlerstatus);FI . +fuellediedateimitdenaufsichtszeiten:f:=sequentialfile(output, +dateinamezumzeigen);putline(f,blank);putline(f,zentriert( +textanfangfuerschulhalbjahr+text(schuljahr,2)+trennerfuerschuljahr+subtext( +schuljahr,3)+textmittefuerschulhalbjahr+halbjahr+textendefuerschulhalbjahr, +bildbreite));putline(f,blank);putline(f,blank);putline(f, +ueberschrift1dertabelle+blank);putline(f,ueberschrift2dertabelle+blank); +putline(f,trennstrichdertabelle+blank);akttag:=0;inittupel(dnraufsichtszeiten +);statleseschleife(dnraufsichtszeiten,schuljahr,halbjahr,fnrazsj,fnrazhj, +PROC fuellediedatei);FOR iFROM akttag+1UPTO nummerfürsaREP putline(f,blank); +putline(f,wochentag(i));PER ;.berechnebearbeitungsschuljahrundhalbjahr: +schuljahr:=schulkenndatum(schluesselschuljahr);halbjahr:=schulkenndatum( +schluesselschulhalbjahr);IF standardmaskenfeld(fnrausgaktuelleshj)=niltext +THEN geplanteshjundsjberechnen(halbjahr,schuljahr)FI .END PROC +aufsichtszeitenlisteerstellen;PROC aufsichtszeitenlistedrucken:INT VAR +zeilenzähler;TEXT VAR t;FILE VAR f1:=sequentialfile(input,dateinamezumzeigen) +;initdruckkopf(zentriert(ueberschrift1fuerdruckdatei,druckbreite),zentriert( +ueberschrift2fuerdruckdatei,druckbreite));setzemitseitennummern(TRUE ); +druckvorbereiten;druckkopfschreiben;getline(f1,t);druckzeileschreiben(t); +getline(f1,t);druckzeileschreiben(zentriert(compress(t),druckbreite)); +zeilenzähler:=drucklaenge(2)-2;WHILE NOT eof(f1)REP IF zeilenzähler=0THEN +seitenwechsel;druckkopfschreiben;druckzeileschreiben(ueberschrift1dertabelle) +;druckzeileschreiben(ueberschrift2dertabelle);druckzeileschreiben( +trennstrichdertabelle);zeilenzähler:=drucklaenge(2)-3;FI ;getline(f1,t); +druckzeileschreiben(t);zeilenzählerDECR 1;PER ;drucknachbereiten;forget( +dateinamezumzeigen,quiet);IF erstaufbildschirmTHEN enter(2)ELSE enter(1)FI +END PROC aufsichtszeitenlistedrucken;TEXT PROC wochentag(INT CONST tag):TEXT +VAR t;SELECT tagOF CASE 1:t:=blanksvorwochentag+textmontag+blankCASE 2:t:= +blanksvorwochentag+textdienstag+blankCASE 3:t:=blanksvorwochentag+ +textmittwoch+blankCASE 4:t:=blanksvorwochentag+textdonnerstag+blankCASE 5:t:= +blanksvorwochentag+textfreitag+blankCASE 6:t:=blanksvorwochentag+textsamstag+ +blankEND SELECT ;tEND PROC wochentag;PROC fuellediedatei(BOOL VAR b):INT VAR +i,neuertag;TEXT VAR t,t2;IF wert(fnrazsj)>schuljahrCOR wert(fnrazhj)>halbjahr +COR dbstatus<>okTHEN b:=TRUE ELSE neuertag:=intwert(fnrazaufsichtszeit)DIV +stelligkeitdestages;IF neuertag>akttagTHEN putline(f,blank);FOR iFROM akttag+ +1UPTO neuertag-1REP putline(f,wochentag(i));putline(f,blank);PER ;t:= +wochentag(neuertag);akttag:=neuertag;ELSE t:=leererwochentagFI ;tCAT text( +intwert(fnrazaufsichtszeit)MOD stelligkeitdestages,2);tCAT +füllervorbezeichnung;tCAT text(wert(fnrazbezeichnung),bezeichnungslänge);t +CAT füllervorstunde;IF intwert(fnraztagstdvor)=0THEN tCAT leerestundeELSE i:= +(intwert(fnraztagstdvor)-1)MOD stundenprowochentag+1;tCAT text(i,2);FI ;tCAT +füllerinstunde;IF intwert(fnraztagstdnach)=0THEN tCAT leerestundeELSE i:=( +intwert(fnraztagstdnach)-1)MOD stundenprowochentag+1;tCAT text(i,2);FI ;tCAT +füllervoruhrzeit;t2:=blankszumauffüllen+wert(fnrazbeginnuhr);t2:=subtext(t2, +length(t2)+1-stellenfürzeit);tCAT text(t2,laengederstundenzeit);tCAT +stdundmintrenner;tCAT subtext(t2,laengederstundenzeit+1);tCAT füllerinuhrzeit +;t2:=blankszumauffüllen+wert(fnrazendeuhr);t2:=subtext(t2,length(t2)+1- +stellenfürzeit);tCAT text(t2,laengederstundenzeit);tCAT stdundmintrenner;t +CAT subtext(t2,laengederstundenzeit+1);tCAT blank;putline(f,t);FI END PROC +fuellediedatei;END PACKET listederaufsichtszeiten + diff --git a/app/schulis/2.2.1/src/0.liste der zeitrasterdaten b/app/schulis/2.2.1/src/0.liste der zeitrasterdaten new file mode 100644 index 0000000..51e91c9 --- /dev/null +++ b/app/schulis/2.2.1/src/0.liste der zeitrasterdaten @@ -0,0 +1,101 @@ +PACKET listederzeitrasterdatenDEFINES +zeitrasterlisteerstellenunddruckenggfvorherzeigen:LET fnrausggeplanteshj=2, +fnrausgaktuelleshj=3,fnrausgdrucker=4,fnrausgbild=5;LET schluesselschuljahr= +"Schuljahr",schluesselschulhalbjahr="Schulhalbjahr", +anzahldatensaetzeprozeitraster=66;LET zusätzlicherlaubtetasten="vr";LET +meldunglistewirdaufgebaut=7,meldunglistewirdausgedruckt=58,meldungbittewarten +=69,meldungkeinedatenvorhanden=68;LET dateinamezumzeigen= +"Liste der Zeitrasterdaten",ueberschrift1fuerdruckdatei= +"Liste der Zeitrasterdaten",ueberschrift2fuerdruckdatei= +"-------------------------",blankszumauffuellen=" ", +textanfangfuerschulhalbjahr="für Schuljahr 19",trennerfuerschuljahr="/", +textmittefuerschulhalbjahr=", ",textendefuerschulhalbjahr=". Halbjahr", +ueberschriftdererstentabelle="Uhrzeiten:",unterschriftdererstentabelle= +"----------",zeilederwochentage= +" Mo Di Mi Do Fr Sa",textvorbeginnzeiten= +". von",textvorendezeiten=" bis",trennerdererstentabelle=" ", +stdundmintrenner=":",laengederstundenzeit=2,stellenderstundennummer=2, +zeilenzahldererstentabelle=45,ueberschriftderzweitentabelle= +"Kennzeichnung der Tagesteile:",unterschriftderzweitentabelle= +"-----------------------------",zeilederstunden= +" 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.",textmontag="Mo", +textdienstag="Di",textmittwoch="Mi",textdonnerstag="Do",textfreitag="Fr", +textsamstag="Sa",trennerderzweitentabelle=" ",stundenamsamstag=6, +stundenprowochentag=12,mobissa=6,mobisfr=5,poskennungtagesteil=1, +anfposbeginnzeit=2,endeposbeginnzeit=5,anfposendezeit=6,endeposendezeit=9, +gesamtetextlaenge=9,stellenfuerkennungtagesteil=1,stellenfuerzeit=4;LET +niltext="",blank=" ",null=0,eins=1;BOOL VAR erstaufbildschirm:=FALSE ;TEXT +VAR schuljahr:=niltext,halbjahr:=niltext;INT VAR fehlerstatus;ROW +anzahldatensaetzeprozeitrasterTEXT VAR alteszeitraster;INT VAR aktindex;PROC +zeitrasterlisteerstellenunddruckenggfvorherzeigen(INT CONST nr):SELECT nrOF +CASE 1:zeitrasterlisteerstellenCASE 2:zeitrasterlistedruckenENDSELECT .END +PROC zeitrasterlisteerstellenunddruckenggfvorherzeigen;PROC +zeitrasterlisteerstellen:INT VAR i;prüfeobrichtigangekreuztist;IF +fehlerstatus<>nullTHEN infeld(fehlerstatus);return(1);LEAVE +zeitrasterlisteerstellenFI ;erstaufbildschirm:=standardmaskenfeld(fnrausgbild +)<>niltext;IF erstaufbildschirmTHEN standardmeldung(meldunglistewirdaufgebaut +,niltext)ELSE standardmeldung(meldungbittewarten,niltext)FI ; +berechnebearbeitungsschuljahrundhalbjahr;fuelledenpuffermitdemzeitraster;IF +aktindex=nullTHEN standardmeldung(meldungkeinedatenvorhanden,niltext);return( +1);LEAVE zeitrasterlisteerstellenFI ;fuegeerstetabelleindateian; +fuegezweitetabelleindateian;IF erstaufbildschirmTHEN zeigedatei( +dateinamezumzeigen,zusätzlicherlaubtetasten)ELSE standardmeldung( +meldunglistewirdausgedruckt,niltext);zeitrasterlistedruckenFI . +prüfeobrichtigangekreuztist:standardpruefe(5,fnrausggeplanteshj, +fnrausgaktuelleshj,null,niltext,fehlerstatus);IF fehlerstatus=nullTHEN +standardpruefe(5,fnrausgdrucker,fnrausgbild,null,niltext,fehlerstatus);FI . +fuelledenpuffermitdemzeitraster:aktindex:=null;inittupel(dnrzeitraster); +statleseschleife(dnrzeitraster,schuljahr,halbjahr,fnrzrsj,fnrzrhj,PROC +fuellenurpuffer);FOR iFROM aktindex+einsUPTO anzahldatensaetzeprozeitraster +REP alteszeitraster(i):=gesamtetextlaenge*blankPER . +berechnebearbeitungsschuljahrundhalbjahr:schuljahr:=schulkenndatum( +schluesselschuljahr);halbjahr:=schulkenndatum(schluesselschulhalbjahr);IF +standardmaskenfeld(fnrausgaktuelleshj)=niltextTHEN geplanteshjundsjberechnen( +halbjahr,schuljahr)FI .END PROC zeitrasterlisteerstellen;PROC +zeitrasterlistedrucken:INT VAR i;TEXT VAR t;FILE VAR f1:=sequentialfile(input +,dateinamezumzeigen);initdruckkopf(zentriert(ueberschrift1fuerdruckdatei, +druckbreite),zentriert(ueberschrift2fuerdruckdatei,druckbreite)); +setzemitseitennummern(TRUE );druckvorbereiten;druckkopfschreiben;getline(f1,t +);druckzeileschreiben(t);getline(f1,t);druckzeileschreiben(zentriert(compress +(t),druckbreite));FOR iFROM einsUPTO zeilenzahldererstentabelleREP getline(f1 +,t);druckzeileschreiben(t)PER ;seitenwechsel;druckkopfschreiben;WHILE NOT eof +(f1)REP getline(f1,t);druckzeileschreiben(t)PER ;drucknachbereiten;forget( +dateinamezumzeigen,quiet);IF erstaufbildschirmTHEN enter(2)ELSE enter(1)FI +END PROC zeitrasterlistedrucken;PROC fuegeerstetabelleindateian:INT VAR i,j,k +;TEXT VAR t1,t2,t3;FILE VAR f:=sequentialfile(output,dateinamezumzeigen); +putline(f,blank);putline(f,zentriert(textanfangfuerschulhalbjahr+text( +schuljahr,2)+trennerfuerschuljahr+subtext(schuljahr,3)+ +textmittefuerschulhalbjahr+halbjahr+textendefuerschulhalbjahr,bildbreite)); +putline(f,blank);putline(f,blank);putline(f,ueberschriftdererstentabelle+ +blank);putline(f,unterschriftdererstentabelle+blank);putline(f,blank);putline +(f,zeilederwochentage+blank);FOR iFROM einsUPTO stundenprowochentagREP +putline(f,blank);t1:=text(i,stellenderstundennummer)+textvorbeginnzeiten;t2:= +textvorendezeiten;IF i>stundenamsamstagTHEN k:=mobisfrELSE k:=mobissaFI ;FOR +jFROM einsUPTO kREP t1CAT trennerdererstentabelle;t2CAT +trennerdererstentabelle;t3:=subtext(alteszeitraster(i+(j-eins)* +stundenprowochentag),anfposbeginnzeit,endeposbeginnzeit);t1CAT text(t3, +laengederstundenzeit)+stdundmintrenner+subtext(t3,laengederstundenzeit+1);t3 +:=subtext(alteszeitraster(i+(j-eins)*stundenprowochentag),anfposendezeit, +endeposendezeit);t2CAT text(t3,laengederstundenzeit)+stdundmintrenner+subtext +(t3,laengederstundenzeit+1);PER ;putline(f,t1+blank);putline(f,t2+blank);PER +;putline(f,blank);putline(f,blank);putline(f,blank)END PROC +fuegeerstetabelleindateian;PROC fuegezweitetabelleindateian:INT VAR i,j,k; +TEXT VAR t1;FILE VAR f:=sequentialfile(output,dateinamezumzeigen);putline(f, +blank);putline(f,ueberschriftderzweitentabelle+blank);putline(f, +unterschriftderzweitentabelle+blank);putline(f,blank);putline(f, +zeilederstunden+blank);putline(f,blank);FOR iFROM einsUPTO mobissaREP SELECT +iOF CASE 1:t1:=textmontagCASE 2:t1:=textdienstagCASE 3:t1:=textmittwochCASE 4 +:t1:=textdonnerstagCASE 5:t1:=textfreitagCASE 6:t1:=textsamstagEND SELECT ; +IF i=mobissaTHEN k:=stundenamsamstagELSE k:=stundenprowochentagFI ;FOR jFROM +einsUPTO kREP t1CAT trennerderzweitentabelle+text(alteszeitraster((i-eins)* +stundenprowochentag+j),poskennungtagesteil);PER ;putline(f,t1+blank);PER END +PROC fuegezweitetabelleindateian;PROC fuellenurpuffer(BOOL VAR b):TEXT VAR t; +IF wert(fnrzrsj)>schuljahrCOR wert(fnrzrhj)>halbjahrCOR dbstatus<>okTHEN b:= +TRUE ELSE aktindexINCR eins;t:=blankszumauffuellen+wert(fnrzrkennungteil); +alteszeitraster(aktindex):=subtext(t,length(t)+eins- +stellenfuerkennungtagesteil);t:=blankszumauffuellen+wert(fnrzrbeginnuhr); +alteszeitraster(aktindex)CAT subtext(t,length(t)+eins-stellenfuerzeit);t:= +blankszumauffuellen+wert(fnrzrendeuhr);alteszeitraster(aktindex)CAT subtext(t +,length(t)+eins-stellenfuerzeit)FI END PROC fuellenurpuffer;END PACKET +listederzeitrasterdaten + diff --git a/app/schulis/2.2.1/src/0.listen.benutz b/app/schulis/2.2.1/src/0.listen.benutz new file mode 100644 index 0000000..cabeae1 --- /dev/null +++ b/app/schulis/2.2.1/src/0.listen.benutz @@ -0,0 +1,84 @@ +PACKET benutzerlisteDEFINES benulispezielleteile:LET niltext="",blank=" ", +null=0,slash="/",spaltentrenner=" ",ueberschriftenzeilen=1,anzspalten=6, +dateiname="sortdatei",ausgfeldlaenge=9,spaltenbreite=11,AUSGFELD =ROW +ausgfeldlaengeTEXT ,benulieingangsmaske="mu liste einfach eingang", +benulianfpos=2,mnrbearbeitetwerden=104;#LET dnrbenutz=7,fnrbenutzname=9, +fnrbenutzberecht=11;#INT VAR druckzeilenzahl,bildanf,eingabestatus, +aktuelleindexnr,ausgfeldlaengereal;TEXT VAR benuliueberschrift,kennung, +berechtigungen,bearbeitetwerden,startwert,anfbuchstabe,neueranfbuchstabe; +AUSGFELD VAR ausgfeld;BOOL PROC multistop:TRUE END PROC multistop;PROC +benulispezielleteile(INT CONST nr):SELECT nrOF CASE 1:benulidialogvorbereiten +CASE 2:benulieingabenrichtigCASE 3:benulilistenvorbereitenCASE 4: +benulidruckvorbereitenCASE 5:benuliseitedruckenCASE 6: +benulibildschirmvorbereitenCASE 7:benuliseitezeigenENDSELECT .END PROC +benulispezielleteile;PROC benulidialogvorbereiten:systemdbon;#first(dnrbenutz +);startwert:=wert(fnrbenutzname);#benuliueberschrift:=text(vergleichsknoten); +setzeanfangswerte(benulieingangsmaske,benulianfpos).END PROC +benulidialogvorbereiten;PROC benulieingabenrichtig:LET fnrausgdrucker=2, +fnrausgbild=3;standardpruefe(5,fnrausgdrucker,fnrausgbild,null,niltext, +eingabestatus);IF eingabestatus<>0THEN infeld(eingabestatus);setzeeingabetest +(FALSE )ELSE setzeausgabedrucker(standardmaskenfeld(fnrausgbild)=niltext); +setzeeingabetest(TRUE )FI .END PROC benulieingabenrichtig;PROC +benulilistenvorbereiten:INT VAR i;BOOL VAR b:=FALSE ;initspalten;FOR iFROM 1 +UPTO anzspaltenREP setzespaltenbreite(spaltenbreite)PER ;setzespaltentrenner( +spaltentrenner);aktuelleindexnr:=dnrbenutz;inittupel(dnrbenutz); +setzeidentiwert("");initobli(2);objektlistestarten(aktuelleindexnr,"", +fnrbenutzname,FALSE ,b);setzebestandende(NOT multistop)END PROC +benulilistenvorbereiten;PROC benulibildschirmvorbereiten:LET fnrausganf=2; +standardkopfmaskeaktualisieren(benuliueberschrift);bildanf:=fnrausganf; +setzebildanfangsposition(bildanf).END PROC benulibildschirmvorbereiten;PROC +benuliseitezeigen:blaettern(PROC (INT CONST )benutzerzeigen,aktion,FALSE , +FALSE ,BOOL PROC multistop);END PROC benuliseitezeigen;PROC benutzerzeigen( +INT CONST x):benutzerholen;benutzeraufbereitenbild;benutzeraufbildschirm.END +PROC benutzerzeigen;PROC benutzeraufbereitenbild:INT VAR i; +benutzeraufbereitenallgemein(bildbreite);restbehandlungbild. +restbehandlungbild:FOR iFROM ausgfeldlaengereal+1UPTO ausgfeldlaengeREP +ausgfeld(i):=text(blank,bildbreite)PER .END PROC benutzeraufbereitenbild; +PROC benutzeraufbildschirm:INT VAR i;FOR iFROM 1UPTO ausgfeldlaengeREP +ausgfeld(i)IN ausgabepos;erhoeheausgabeposumeinsEND REP .END PROC +benutzeraufbildschirm;PROC benulidruckvorbereiten:anfbuchstabe:=niltext; +druckvorbereiten;variablenfuerdrucksetzen;initdruckkopf(zentriert( +benuliueberschrift,druckbreite));holemeldung;systemdbon;inittupel(dnrbenutz); +setzebestandende(NOT multistop);lesenvorbereitendruck(PROC (INT CONST ,BOOL +PROC ,INT VAR )scanforward,BOOL PROC multistop).holemeldung:meldungstext( +mnrbearbeitetwerden,bearbeitetwerden).variablenfuerdrucksetzen: +druckzeilenzahl:=drucklaenge(ueberschriftenzeilen).END PROC +benulidruckvorbereiten;PROC benuliseitedrucken:benuliueberschriftdrucken; +seitedrucken(PROC (INT VAR )benutzerdrucken,druckzeilenzahl,ausgfeldlaenge, +BOOL PROC multistop);seitenwechsel.END PROC benuliseitedrucken;PROC +benuliueberschriftdrucken:druckkopfschreiben.END PROC +benuliueberschriftdrucken;PROC benutzerdrucken(INT VAR zeilenzaehler):LET +markiert="#";benutzerholen;ggflmeldunganfbuchstabe;benutzeraufbereitendruck; +zeilenzaehlerINCR ausgfeldlaengereal;benutzerindruckdatei. +ggflmeldunganfbuchstabe:IF anfbuchstabegeaendertTHEN meldunganfbuchstabeFI . +anfbuchstabegeaendert:neueranfbuchstabe:=kennungSUB 1;anfbuchstabe<> +neueranfbuchstabe.meldunganfbuchstabe:standardmeldung(bearbeitetwerden, +neueranfbuchstabe+markiert);anfbuchstabe:=neueranfbuchstabe.END PROC +benutzerdrucken;PROC benutzeraufbereitendruck:benutzeraufbereitenallgemein( +druckbreite).END PROC benutzeraufbereitendruck;PROC benutzerindruckdatei:INT +VAR i;FOR iFROM 1UPTO ausgfeldlaengerealREP druckzeileschreiben(ausgfeld(i)) +PER .END PROC benutzerindruckdatei;PROC benutzeraufbereitenallgemein(INT +CONST breite):INT VAR position,anzahlberechtigungen,anzzeilenreal,i,j,k;FILE +VAR f;TEXT VAR berechtigung;kennungaufbereiten;berechtigungenaufbereiten. +kennungaufbereiten:ausgfeld(1):=text(kennung,breite). +berechtigungenaufbereiten:erstenslashimtextueberlesen; +berechtigungenindateiundsortieren;wirklichezeilenzahlberechnen; +ausgabefelderberechtigungenauffuellen.erstenslashimtextueberlesen:position:= +pos(berechtigungen,slash);berechtigungen:=subtext(berechtigungen,position+1). +berechtigungenindateiundsortieren:f:=sequentialfile(output,dateiname); +anzahlberechtigungen:=null;position:=pos(berechtigungen,slash);WHILE position +<>nullREP anzahlberechtigungenINCR 1;putline(f,subtext(berechtigungen,1, +position-1));berechtigungen:=subtext(berechtigungen,position+1);position:=pos +(berechtigungen,slash)PER ;putline(f,berechtigungen);anzahlberechtigungen +INCR 1;sort(dateiname).wirklichezeilenzahlberechnen:anzzeilenreal:= +anzahlberechtigungenDIV anzspalten;IF (anzahlberechtigungenMOD anzspalten<> +null)THEN anzzeilenrealINCR 1FI .ausgabefelderberechtigungenauffuellen:f:= +sequentialfile(input,dateiname);i:=null;FOR jFROM 1UPTO anzzeilenrealREP FOR +kFROM 1UPTO anzspaltenREP iINCR 1;IF i>anzahlberechtigungenTHEN spaltenweise( +blank)ELSE getline(f,berechtigung);spaltenweise(berechtigung)FI ;PER ; +ausgfeld(j+1):=zeilePER ;forget(dateiname,quiet);ausgfeldlaengereal:= +anzzeilenreal+2;ausgfeld(ausgfeldlaengereal):=text(blank,breite).END PROC +benutzeraufbereitenallgemein;PROC benutzerholen:kennung:=wert(fnrbenutzname); +berechtigungen:=wert(fnrbenutzberecht);END PROC benutzerholen;END PACKET +benutzerliste; + diff --git a/app/schulis/2.2.1/src/0.listen.druckbearbeitung b/app/schulis/2.2.1/src/0.listen.druckbearbeitung new file mode 100644 index 0000000..a7c47be --- /dev/null +++ b/app/schulis/2.2.1/src/0.listen.druckbearbeitung @@ -0,0 +1,207 @@ +PACKET listendruckbearbeitungDEFINES einstellungderlistenausgabe, +leseveraendertelisteneinstellung,einstellungdersonderlistenausgabe, +leseveraendertesonderlisteneinstellung, +einstellungderstartwertefueruebersichtsplaene, +leseveraenderteuebersichtsplaneinstellung,lesenvorbereitendruck,seitedrucken, +druckbreite,drucklaenge,initdruckkopf,druckvorbereiten,druckkopfschreiben, +druckzeileschreiben,seitenwechsel,setzemitseitennummern,drucknachbereiten, +drucknachbereitenohneausdrucken:LET niltext="",blank=" ",null=0, +schulnameschluessel="Schulname",schulstrasseschluessel="Schulstraße", +schulortschluessel="Schulort",seitennrtrenner="/",seitenwechselanweisung= +"###page#",stdxeumel=2.54,stdyeumel=2.35,druckdateinamepre="liste.", +dateilaenge=4073,seitenwechselzeilen=2,tatsdruckkopflaenge=7, +eineueberschriftzeilen=1,zweiueberschriftenzeilen=2,ueberschriftenmaxzeilen=2 +,schreiben=FALSE ,lesen=TRUE ,schriftfeldnr=2,druckbreitefeldnr=3, +drucklaengefeldnr=4,mindruckbreitefeldnr=4,startxfeldnr=5,startyfeldnr=6, +startxfeldnruebplan=3,startyfeldnruebplan=4,maxdruckbreite=76,mindruckbreite= +60,mindrucklaenge=26,maxstartxy=10.0,textnull="0.0",realnull=0.0, +eingabenichtsinnvoll=162,stackgroessedrucktupel=3,DRUCKKOPF =STRUCT (ROW +tatsdruckkopflaengeTEXT zeile,BOOL zweiueberschriften);REAL VAR startx:= +stdxeumel,starty:=stdyeumel,schreibflaeche;INT VAR druckzeilenbreite:=75, +druckseitenlaenge:=60,testdruckzeilenbreite,testdruckseitenlaenge, +anzahldrucktupel,bearbeitetedrucktupel,minbreitemitteilung;TEXT VAR +teststartx,teststarty;BOOL VAR werteinordnung,mitseitennummern;INT VAR +maxdateiseiten,schreibbaredrucklaenge,druckzeilennummer,druckseitennummer, +druckdateinummer,zeilenzaehler;TEXT VAR schulname,schulstrasse,schulort, +druckdateiname;DRUCKKOPF VAR druckkopf;FILE VAR druckdatei;INT PROC +druckbreite:druckzeilenbreiteEND PROC druckbreite;PROC +einstellungderlistenausgabe:LET maske="ms einstellung druck listen"; +druckzeilenbreite:=75;standardstartproc(maske);standardmaskenfeld(schrifttyp, +schriftfeldnr);standardmaskenfeld(text(druckzeilenbreite),druckbreitefeldnr); +standardmaskenfeld(text(druckseitenlaenge),drucklaengefeldnr); +standardmaskenfeld(text(startx),startxfeldnr);standardmaskenfeld(text(starty) +,startyfeldnr);standardnprocEND PROC einstellungderlistenausgabe;PROC +einstellungdersonderlistenausgabe:LET maske= +"ms einstellung druck anschreiben";minbreitemitteilung:=70;druckzeilenbreite +:=75;standardstartproc(maske);standardmaskenfeld(schrifttyp,schriftfeldnr); +standardmaskenfeld(text(druckzeilenbreite),druckbreitefeldnr); +standardmaskenfeld(text(minbreitemitteilung),mindruckbreitefeldnr); +standardmaskenfeld(text(startx),startxfeldnr);standardmaskenfeld(text(starty) +,startyfeldnr);standardnprocEND PROC einstellungdersonderlistenausgabe;PROC +einstellungdersonderlistenausgabe(INT CONST anzzeichen):LET maske= +"ms einstellung druck anschreiben";minbreitemitteilung:=anzzeichen; +druckzeilenbreite:=anzzeichen;standardstartproc(maske);standardmaskenfeld( +schrifttyp,schriftfeldnr);standardmaskenfeld(text(druckzeilenbreite), +druckbreitefeldnr);standardmaskenfeld(text(minbreitemitteilung), +mindruckbreitefeldnr);standardmaskenfeld(text(startx),startxfeldnr); +standardmaskenfeld(text(starty),startyfeldnr);standardnprocEND PROC +einstellungdersonderlistenausgabe;PROC +einstellungderstartwertefueruebersichtsplaene:LET maske= +"ms einstellung startwerte";standardstartproc(maske);standardmaskenfeld( +schrifttyp,schriftfeldnr);standardmaskenfeld(text(startx),startxfeldnruebplan +);standardmaskenfeld(text(starty),startyfeldnruebplan);standardnprocEND PROC +einstellungderstartwertefueruebersichtsplaene;PROC +leseveraenderteuebersichtsplaneinstellung:werteinordnung:=TRUE ;teststartx:= +compress(standardmaskenfeld(startxfeldnruebplan));teststarty:=compress( +standardmaskenfeld(startyfeldnruebplan));ueberpruefendergegebenenwerte;IF +werteinordnungTHEN werteuebernehmen;IF fontexists(schrifttyp)THEN +schreibflaeche:=(16.0-(real(teststartx)-stdxeumel));druckzeilenbreite:=(( +xstepconversion(schreibflaeche))DIV (charpitch(font(schrifttyp)," ")))FI ;IF +druckzeilenbreite<mindruckbreiteTHEN druckzeilenbreite:=mindruckbreiteELIF +druckzeilenbreite>maxdruckbreiteTHEN druckzeilenbreite:=maxdruckbreiteFI ; +enter(2)ELSE meldefehler;return(1)FI ;.ueberpruefendergegebenenwerte:IF ( +teststartx<>textnullAND real(teststartx)=realnull)OR real(teststartx)> +maxstartxyOR real(teststartx)<realnullTHEN infeld(startxfeldnruebplan); +werteinordnung:=FALSE ELSE IF (teststarty<>textnullAND real(teststarty)= +realnull)OR real(teststarty)>maxstartxyOR real(teststarty)<realnullTHEN +infeld(startyfeldnruebplan);werteinordnung:=FALSE ELSE werteinordnung:=TRUE +FI ;FI .werteuebernehmen:setzeschuliszeichensatz(standardmaskenfeld( +schriftfeldnr));startx:=real(teststartx);starty:=real(teststarty).meldefehler +:standardmeldung(eingabenichtsinnvoll,niltext).END PROC +leseveraenderteuebersichtsplaneinstellung;PROC +leseveraendertelisteneinstellung:werteinordnung:=TRUE ;testdruckzeilenbreite +:=int(standardmaskenfeld(druckbreitefeldnr));testdruckseitenlaenge:=int( +standardmaskenfeld(drucklaengefeldnr));teststartx:=compress( +standardmaskenfeld(startxfeldnr));teststarty:=compress(standardmaskenfeld( +startyfeldnr));ueberpruefendergegebenenwerte;IF werteinordnungTHEN +werteuebernehmen;enter(2)ELSE meldefehler;return(1)FI . +ueberpruefendergegebenenwerte:IF testdruckzeilenbreite<mindruckbreiteTHEN +infeld(druckbreitefeldnr);werteinordnung:=FALSE ELIF testdruckseitenlaenge< +mindrucklaengeTHEN infeld(drucklaengefeldnr);werteinordnung:=FALSE ELIF ( +teststartx<>textnullAND real(teststartx)=realnull)OR real(teststartx)> +maxstartxyOR real(teststartx)<realnullTHEN infeld(startxfeldnr); +werteinordnung:=FALSE ELIF (teststarty<>textnullAND real(teststarty)=realnull +)OR real(teststarty)>maxstartxyOR real(teststarty)<realnullTHEN infeld( +startyfeldnr);werteinordnung:=FALSE ELSE werteinordnung:=TRUE FI . +werteuebernehmen:setzeschuliszeichensatz(standardmaskenfeld(schriftfeldnr)); +druckzeilenbreite:=testdruckzeilenbreite;druckseitenlaenge:= +testdruckseitenlaenge;maxdateiseiten:=dateilaengeDIV druckseitenlaenge; +schreibbaredrucklaenge:=druckseitenlaenge-seitenwechselzeilen;startx:=real( +teststartx);starty:=real(teststarty).meldefehler:standardmeldung( +eingabenichtsinnvoll,niltext).END PROC leseveraendertelisteneinstellung;PROC +leseveraendertesonderlisteneinstellung:werteinordnung:=TRUE ; +testdruckzeilenbreite:=int(standardmaskenfeld(druckbreitefeldnr));teststartx +:=compress(standardmaskenfeld(startxfeldnr));teststarty:=compress( +standardmaskenfeld(startyfeldnr));ueberpruefendergegebenenwerte;IF +werteinordnungTHEN werteuebernehmen;enter(2)ELSE meldefehler;return(1)FI . +ueberpruefendergegebenenwerte:IF testdruckzeilenbreite<minbreitemitteilung +THEN infeld(druckbreitefeldnr);werteinordnung:=FALSE ELIF (teststartx<> +textnullAND real(teststartx)=realnull)OR real(teststartx)>maxstartxyOR real( +teststartx)<realnullTHEN infeld(startxfeldnr);werteinordnung:=FALSE ELIF ( +teststarty<>textnullAND real(teststarty)=realnull)OR real(teststarty)> +maxstartxyOR real(teststarty)<realnullTHEN infeld(startyfeldnr); +werteinordnung:=FALSE ELSE werteinordnung:=TRUE FI .werteuebernehmen: +setzeschuliszeichensatz(standardmaskenfeld(schriftfeldnr));druckzeilenbreite +:=testdruckzeilenbreite;startx:=real(teststartx);starty:=real(teststarty). +meldefehler:standardmeldung(eingabenichtsinnvoll,niltext).END PROC +leseveraendertesonderlisteneinstellung;PROC lesenvorbereitendruck(PROC (INT +CONST ,BOOL PROC ,INT VAR )mitscanner,BOOL PROC pruefungspeziell): +anzahldrucktupel:=stackgroessedrucktupel;eineseiteeinlesen(PROC (INT CONST , +BOOL PROC ,INT VAR )mitscanner,PROC (INT CONST ,INT VAR )multisearchforward, +TRUE ,BOOL PROC pruefungspeziell,anzahldrucktupel);IF anzahldrucktupel>0THEN +einendatensatzlesen(PROC (INT CONST ,BOOL PROC )scanstacksucc,PROC multisucc, +TRUE ,BOOL PROC pruefungspeziell);bearbeitetedrucktupel:=1ELSE +setzebestandende(TRUE )FI END PROC lesenvorbereitendruck;PROC lesendruck( +PROC (INT CONST ,BOOL PROC ,INT VAR )mitscanner,BOOL PROC pruefungspeziell): +anzahldrucktupel:=stackgroessedrucktupel;eineseiteeinlesen(PROC (INT CONST , +BOOL PROC ,INT VAR )mitscanner,PROC (INT CONST ,INT VAR )multisucc,TRUE , +BOOL PROC pruefungspeziell,anzahldrucktupel);IF anzahldrucktupel>0THEN +einendatensatzlesen(PROC (INT CONST ,BOOL PROC )scanstacksucc,PROC multisucc, +TRUE ,BOOL PROC pruefungspeziell);bearbeitetedrucktupel:=1ELSE +setzebestandende(TRUE )FI END PROC lesendruck;TEXT PROC tb:IF bestandende +THEN "Bestandsende"ELSE "kein Ende"FI ENDPROC tb;PROC dummy(INT CONST i,INT +VAR j):ENDPROC dummy;PROC dummy:ENDPROC dummy;PROC naechsteseiteeinlesen( +BOOL PROC pruefungspeziell):lesendruck(PROC (INT CONST ,BOOL PROC ,INT VAR ) +scansucc,BOOL PROC pruefungspeziell)ENDPROC naechsteseiteeinlesen;PROC +seitedrucken(PROC (INT VAR )drucken,INT CONST zeilenzahl,maxsatzlaenge,BOOL +PROC pruefespeziell):seitedrucken(PROC (INT VAR )drucken,zeilenzahl, +maxsatzlaenge,PROC dummy,BOOL PROC pruefespeziell)ENDPROC seitedrucken;PROC +seitedrucken(PROC (INT VAR )drucken,INT CONST zeilenzahl,maxsatzlaenge,PROC +bestandendesimulierenbeimerkmalwechsel,BOOL PROC pruefespeziell): +zeilenzaehler:=null;WHILE NOT bestandendeCAND (zeilenzaehler<=zeilenzahl- +maxsatzlaenge)CAND pruefespeziellREP drucken(zeilenzaehler); +naechstensatzlesen;#IF NOT bestandendeTHEN # +bestandendesimulierenbeimerkmalwechsel#FI #PER .naechstensatzlesen:IF +bearbeitetedrucktupel=anzahldrucktupelTHEN IF anzahldrucktupel<> +stackgroessedrucktupelTHEN setzebestandende(TRUE )ELSE naechsteseiteeinlesen( +BOOL PROC pruefespeziell)FI ELSE einendatensatzlesen(PROC (INT CONST ,BOOL +PROC )scanstacksucc,PROC multisucc,TRUE ,BOOL PROC pruefespeziell); +bearbeitetedrucktupelINCR 1FI .END PROC seitedrucken;INT PROC drucklaenge( +INT CONST ueberschriftenzeilen):schreibbaredrucklaenge-druckkopflaenge( +ueberschriftenzeilen).END PROC drucklaenge;INT PROC drucklaenge: +schreibbaredrucklaenge.END PROC drucklaenge;PROC initdruckkopf:initdruckkopf( +niltext,niltext).END PROC initdruckkopf;PROC initdruckkopf(TEXT CONST +ueberschrift):initdruckkopf(ueberschrift,niltext).END PROC initdruckkopf; +PROC initdruckkopf(TEXT CONST ueberschrift1,ueberschrift2):schulname:= +schulkenndatum(schulnameschluessel);schulort:=schulkenndatum( +schulortschluessel);druckkopf.zeile(1):=geblockt(schulname,date, +druckzeilenbreite);IF (ueberschrift1=niltext)AND (ueberschrift2=niltext)THEN +teilbriefkopfELSE teillistenkopfFI ;druckkopf.zeile(4):=ueberschrift1; +druckkopf.zeile(5):=ueberschrift2;druckkopf.zeile(6):=niltext;druckkopf.zeile +(7):=niltext;druckkopf.zweiueberschriften:=ueberschrift2<>niltext. +teilbriefkopf:schulstrasse:=schulkenndatum(schulstrasseschluessel);druckkopf. +zeile(2):=schulstrasse;druckkopf.zeile(3):=schulort.teillistenkopf:druckkopf. +zeile(2):=schulort;druckkopf.zeile(3):=niltext.END PROC initdruckkopf;PROC +druckvorbereiten:druckdateinummer:=0;druckseitennummer:=0;druckzeilennummer:= +0;dateieroeffnen(schreiben).END PROC druckvorbereiten;PROC druckkopfschreiben +:INT VAR i;FOR iFROM 1UPTO druckkopflaengeREPEAT druckzeileschreiben( +druckkopf.zeile[i])END REPEAT .END PROC druckkopfschreiben;PROC +druckzeileschreiben(TEXT CONST inhalt):IF druckzeilennummer< +schreibbaredrucklaengeTHEN put(druckdatei,inhalt);line(druckdatei); +druckzeilennummerINCR 1END IF .END PROC druckzeileschreiben;PROC +seitenwechsel:trageggfleerzeilenein;putline(druckdatei,seitenwechselanweisung +);druckseitennummerINCR 1;druckzeilennummer:=0;ggffolgedateieroeffnen( +schreiben).trageggfleerzeilenein:INT CONST fehlendezeilen:=max(0, +druckseitenlaenge-druckzeilennummer-1);line(druckdatei,fehlendezeilen).END +PROC seitenwechsel;PROC setzemitseitennummern(BOOL CONST ja):mitseitennummern +:=ja.END PROC setzemitseitennummern;PROC drucknachbereiten:INT VAR i; +ggfseitenwechsel;IF mitseitennummernTHEN seitennummerneintragenFI ;FOR iFROM +1UPTO druckdateinummerREPEAT druckdateiname:=druckdateinamepre+text(i); +dateidruckenundloeschenEND REPEAT .ggfseitenwechsel:IF druckzeilennummer>0 +THEN seitenwechselEND IF .dateidruckenundloeschen:print(druckdateiname); +forget(druckdateiname,quiet).END PROC drucknachbereiten;PROC +drucknachbereitenohneausdrucken:ggfseitenwechsel;IF mitseitennummernTHEN +seitennummerneintragenFI .ggfseitenwechsel:IF druckzeilennummer>0THEN +seitenwechselEND IF .END PROC drucknachbereitenohneausdrucken;PROC +seitennummerneintragen:IF mehralseineseiteTHEN +trageseitennummernindruckdateieinEND IF .mehralseineseite:druckseitennummer>1 +.trageseitennummernindruckdateiein:INT CONST seiten:=druckseitennummer; +druckdateinummer:=0;dateieroeffnen(lesen);FOR druckseitennummerFROM 1UPTO +seitenREPEAT down(druckdatei,seitenwechselanweisung);trageseitennummerein; +ggffolgedateieroeffnen(lesen)END REPEAT .trageseitennummerein:writerecord( +druckdatei,seitennummer+seitenwechselanweisung);down(druckdatei).seitennummer +:TEXT CONST seitennr:=nr;blanks+seitennr.nr:text(druckseitennummer)+ +seitennrtrenner+text(seiten).blanks:(druckzeilenbreite-seitennrlaenge)*blank. +seitennrlaenge:length(seitennr).END PROC seitennummerneintragen;PROC +ggffolgedateieroeffnen(BOOL CONST lesen):IF druckseitennummerMOD +maxdateiseiten=0THEN dateieroeffnen(lesen)END IF .END PROC +ggffolgedateieroeffnen;PROC dateieroeffnen(BOOL CONST lesen):druckdateinummer +INCR 1;druckdateiname:=druckdateinamepre+text(druckdateinummer);IF lesenTHEN +lesedateieroeffnenELSE schreibdateieroeffnenEND IF .lesedateieroeffnen: +druckdatei:=sequentialfile(modify,druckdateiname);down(druckdatei, +seitenwechselanweisung).schreibdateieroeffnen:forget(druckdateiname,quiet); +druckdatei:=sequentialfile(output,druckdateiname);maxdateiseiten:=dateilaenge +DIV druckseitenlaenge;schreibbaredrucklaenge:=druckseitenlaenge;IF +mitseitennummernTHEN schreibbaredrucklaenge:=schreibbaredrucklaenge- +seitenwechselzeilenFI ;setzeanzahlderzeichenprozeile(druckzeilenbreite); +schrift(schrifttyp);start(startx,starty);schreibesteuerzeichenzeile( +druckdateiname);putline(druckdatei,seitenwechselanweisung).END PROC +dateieroeffnen;INT PROC druckkopflaenge(INT CONST ueberschriftenzeilen):IF +ueberschriftenzeilen>ueberschriftenmaxzeilenTHEN errorstop("max "+text( +ueberschriftenmaxzeilen)+" Ueberschriften im Druckkopf");0ELSE +tatsdruckkopflaenge-ueberschriftenmaxzeilen+ueberschriftenzeilenEND IF .END +PROC druckkopflaenge;INT PROC druckkopflaenge:druckkopflaenge( +ueberschriftenzeilen).ueberschriftenzeilen:IF druckkopf.zweiueberschriften +THEN zweiueberschriftenzeilenELSE eineueberschriftzeilenEND IF .END PROC +druckkopflaenge;END PACKET listendruckbearbeitung + diff --git a/app/schulis/2.2.1/src/0.listen.faecher b/app/schulis/2.2.1/src/0.listen.faecher new file mode 100644 index 0000000..650efde --- /dev/null +++ b/app/schulis/2.2.1/src/0.listen.faecher @@ -0,0 +1,86 @@ +PACKET faecherlistenDEFINES faecherlispezielleteile:LET faechereingangsmaske= +"mu liste einfach eingang",spaltentrenner=" ",faecheranfpos=2,spalte1breite=5 +,spalte2breite=35,spalte3breite=10,spalte4breite=11,niltext="",blank=" ",null +=0,strich="-",ueberschriftenzeilen=2,mnrauswahlnichtsinnvoll=56, +mnrbearbeitetwerden=109,ausgkopflaenge=2,ausgfeldlaenge=1, +anzahlderobjekteprobildschirm=17;TEXT VAR faecherueberschrift:= +"Liste der Fächer",fach,fachbezeichnung,fachgruppe,fachbereich,anfbuchstabe, +neueranfbuchstabe:="",auswahlnichtsinnvoll,bearbeitetwerden;TEXT CONST +leerzeile:=bildbreite*blank,textueberschrift:=("Fach"+2*blank+ +"Fachbezeichnung"+21*blank+"Fachgruppe"+blank+"Fachbereich");INT VAR +eingabestatus,lesestart,bildanfang,spalte2druckbreite,druckzeilenzahl;INT +CONST aktuelleindexnr:=dnrfaecher,fnrfach:=fnrffach,fnrfachbezeichnung:= +fnrffachbez,fnrfachgruppe:=fnrffachgrp,fnrfachbereich:=fnrffachbereich;LET +AUSGFELD =ROW ausgfeldlaengeTEXT ,AUSGKOPF =ROW ausgkopflaengeTEXT , +AUSGKOPFDRUCK =ROW ausgkopflaengeTEXT ;AUSGFELD VAR ausgfeld;AUSGKOPF VAR +ausgkopf;AUSGKOPFDRUCK VAR ausgkopfdruck;BOOL PROC multistop:TRUE END PROC +multistop;PROC faecherlispezielleteile(INT CONST nr):SELECT nrOF CASE 1: +faecherdialogvorbereitenCASE 2:faechereingabenrichtigCASE 3: +faecherlistenvorbereitenCASE 4:faecherdruckvorbereitenCASE 5: +faecherseitedruckenCASE 6:faecherbildschirmvorbereitenCASE 7: +faecherseitezeigenENDSELECT .END PROC faecherlispezielleteile;PROC +faecherdialogvorbereiten:faecherueberschrift:=text(vergleichsknoten); +setzeanfangswerte(faechereingangsmaske,faecheranfpos)END PROC +faecherdialogvorbereiten;PROC faechereingabenrichtig:LET fnrausgdrucker=2, +fnrausgbild=3;standardpruefe(5,fnrausgdrucker,fnrausgbild,null,niltext, +eingabestatus);IF eingabestatus=0THEN setzeeingabetest(TRUE ); +setzeausgabedrucker(standardmaskenfeld(fnrausgbild)=niltext)ELSE meldefehler; +setzeeingabetest(FALSE )FI .meldefehler:meldungstext(mnrauswahlnichtsinnvoll, +auswahlnichtsinnvoll);standardmeldung(auswahlnichtsinnvoll,niltext).END PROC +faechereingabenrichtig;PROC faecherlistenvorbereiten:BOOL VAR b;initspalten; +setzespaltentrenner(spaltentrenner);lesestart:=fnrfach;inittupel(dnrfaecher); +setzeidentiwert("");initobli(anzahlderobjekteprobildschirm); +objektlistestarten(aktuelleindexnr,"",lesestart,TRUE ,b);setzebestandende( +NOT multistopCOR b);END PROC faecherlistenvorbereiten;PROC +faecherbildschirmvorbereiten:LET fnrausganf=2;standardkopfmaskeaktualisieren( +faecherueberschrift);bildanfang:=fnrausganf;setzebildanfangsposition( +bildanfang);INT VAR i;setzespaltenbreite(bildbreite);spaltenweise( +textueberschrift);ausgfeld(1):=zeile;ausgfeld(1)IN ausgabepos; +erhoeheausgabeposumeins;spaltenweise(leerzeile);ausgfeld(1):=zeile;ausgfeld(1 +)IN ausgabepos;erhoeheausgabeposumeins;setzebildanfangsposition(4); +initspalten;setzespaltentrenner(spaltentrenner);setzespaltenbreite( +spalte1breite);setzespaltenbreite(spalte2breite);setzespaltenbreite( +spalte3breite);setzespaltenbreite(spalte4breite);END PROC +faecherbildschirmvorbereiten;PROC faecherseitezeigen:blaettern(PROC (INT +CONST )faecherdatenzeigen,aktion,TRUE ,FALSE ,BOOL PROC multistop)END PROC +faecherseitezeigen;PROC faecherdatenzeigen(INT CONST x):faecherdatenholen; +faecherdatenaufbereitenbild;faecherdatenaufbildschirm.END PROC +faecherdatenzeigen;PROC faecherdatenholen:fach:=wert(fnrfach);fachbezeichnung +:=wert(fnrfachbezeichnung);IF wert(fnrfachgruppe)=text(null)THEN fachgruppe:= +strichELSE fachgruppe:=wert(fnrfachgruppe);FI ;IF wert(fnrfachbereich)= +niltextTHEN fachbereich:=strichELSE fachbereich:=wert(fnrfachbereich)FI ;END +PROC faecherdatenholen;PROC faecherdatenaufbereitenbild:spaltenweise(fach); +spaltenweise(fachbezeichnung);spaltenweise(fachgruppe);spaltenweise( +fachbereich);END PROC faecherdatenaufbereitenbild;PROC +faecherdatenaufbildschirm:INT VAR i;FOR iFROM 1UPTO ausgfeldlaengeREP +ausgfeld(i):=zeile;ausgfeld(i)IN ausgabepos;erhoeheausgabeposumeins;PER ;END +PROC faecherdatenaufbildschirm;PROC faecherdruckvorbereiten:setzebestandende( +FALSE );anfbuchstabe:=" ";druckvorbereiten;variablenfuerdrucksetzen; +initdruckkopf(zentriert(faecherueberschrift,druckbreite),zentriert(length( +faecherueberschrift)*"-",druckbreite));initspalten;setzespaltenbreite( +spalte1breite);setzespaltenbreite(spalte2breite);setzespaltenbreite( +spalte3breite);setzespaltenbreite(spalte4breite);holemeldung;inittupel( +dnrfaecher);initausgabekopfdruck;lesenvorbereitendruck(PROC (INT CONST ,BOOL +PROC ,INT VAR )scanforward,BOOL PROC multistop);.holemeldung:meldungstext( +mnrbearbeitetwerden,bearbeitetwerden).variablenfuerdrucksetzen: +druckzeilenzahl:=drucklaenge(ueberschriftenzeilen)-ausgkopflaenge.END PROC +faecherdruckvorbereiten;PROC initausgabekopfdruck:ausgkopfdruck(1):= +textueberschrift;ausgkopfdruck(2):=leerzeile;END PROC initausgabekopfdruck; +PROC faecherseitedrucken:faecherueberschriftdrucken;seitedrucken(PROC (INT +VAR )lehrerdrucken,druckzeilenzahl,ausgfeldlaenge,BOOL PROC multistop); +seitenwechsel.END PROC faecherseitedrucken;PROC faecherueberschriftdrucken: +INT VAR i;druckkopfschreiben;FOR iFROM 1UPTO ausgkopflaengeREP +druckzeileschreiben(ausgkopfdruck(i))PER END PROC faecherueberschriftdrucken; +PROC lehrerdrucken(INT VAR zeilenzaehler):LET markiert="#";faecherdatenholen; +ggflmeldunganfbuchstabe;faecheraufbereitendruck;zeilenzaehlerINCR +ausgfeldlaenge;faecherindruckdatei.ggflmeldunganfbuchstabe:IF +anfbuchstabegeaendertTHEN meldunganfbuchstabeFI .anfbuchstabegeaendert: +neueranfbuchstabe:=fachSUB 1;anfbuchstabe<>neueranfbuchstabe. +meldunganfbuchstabe:standardmeldung(mnrbearbeitetwerden,neueranfbuchstabe+ +markiert);anfbuchstabe:=neueranfbuchstabe.END PROC lehrerdrucken;PROC +faecheraufbereitendruck:spaltenweise(fach);spaltenweise(fachbezeichnung); +spaltenweise(fachgruppe);spaltenweise(fachbereich);ausgfeld(1):=zeile;END +PROC faecheraufbereitendruck;PROC faecherindruckdatei:INT VAR i;FOR iFROM 1 +UPTO ausgfeldlaengeREP druckzeileschreiben(ausgfeld(1))PER .END PROC +faecherindruckdatei;END PACKET faecherlisten + diff --git a/app/schulis/2.2.1/src/0.listen.klassengruppen b/app/schulis/2.2.1/src/0.listen.klassengruppen new file mode 100644 index 0000000..7543dad --- /dev/null +++ b/app/schulis/2.2.1/src/0.listen.klassengruppen @@ -0,0 +1,104 @@ +PACKET klassengruppenlistenDEFINES klassengruppenspezielleteile:LET +klassengruppeneingangsmaske="mu liste einfach eingang",spaltentrenner=" ", +klassengruppenanfpos=2,spaltenbreite1=12,spaltenbreite2=7,niltext="",blank= +" ",strich="-",null=0,ueberschriftenzeilen=2,ausgkopflaenge=2,ausgfeldlaenge= +1,anzahlderobjekteprobildschirm=5,mnrauswahlnichtsinnvoll=56, +mnrbearbeitetwerden=352;TEXT CONST spaltentext1:="Klassengruppe",spaltentext2 +:="Bezeichnung Zusammensetzung";TEXT VAR klassengrueberschrift:= +"Liste der Raumgruppen",schuelergrfuerzeile1,schuelergrfuerzeile2, +schuelergrfuerzeile3,klassengruppe,alteklassengruppe:="",anfbuchstabe, +neueranfbuchstabe:="",teiltextmeldung:= +"die Klassengruppe dem Anfangsbuchstaben:";INT VAR eingabestatus,bildanfang, +druckzeilenzahl;LET AUSGFELD =ROW ausgfeldlaengeTEXT ,AUSGKOPF =ROW +ausgkopflaengeTEXT ,AUSGKOPFDRUCK =ROW ausgkopflaengeTEXT ;AUSGFELD VAR +ausgfeld;AUSGKOPF VAR ausgkopf;AUSGKOPFDRUCK VAR ausgkopfdruck;BOOL PROC +multistop:TRUE END PROC multistop;PROC klassengruppenspezielleteile(INT +CONST nr):SELECT nrOF CASE 1:klassengrdialogvorbereitenCASE 2: +klassengreingabenrichtigCASE 3:klassengrlistenvorbereitenCASE 4: +klassengrdruckvorbereitenCASE 5:klassengrseitedruckenCASE 6: +klassengrbildschirmvorbereitenCASE 7:klassengrseitezeigenENDSELECT .END PROC +klassengruppenspezielleteile;PROC klassengrdialogvorbereiten: +klassengrueberschrift:=text(vergleichsknoten);setzeanfangswerte( +klassengruppeneingangsmaske,klassengruppenanfpos)END PROC +klassengrdialogvorbereiten;PROC klassengreingabenrichtig:LET fnrausgdrucker=2 +,fnrausgbild=3;standardpruefe(5,fnrausgdrucker,fnrausgbild,null,niltext, +eingabestatus);IF eingabestatus=0THEN setzeeingabetest(TRUE ); +setzeausgabedrucker(standardmaskenfeld(fnrausgbild)=niltext);ELSE meldefehler +;setzeeingabetest(FALSE )FI ;.meldefehler:standardmeldung( +mnrauswahlnichtsinnvoll,niltext).END PROC klassengreingabenrichtig;PROC +klassengrlistenvorbereiten:BOOL VAR b;initspalten;setzespaltentrenner( +spaltentrenner);inittupel(dnrklassengruppen);setzeidentiwert("");initobli( +anzahlderobjekteprobildschirm);objektlistestarten(dnrklassengruppen,"", +fnrkgklassengrp,TRUE ,b);setzebestandende(NOT multistopCOR b);END PROC +klassengrlistenvorbereiten;PROC klassengrbildschirmvorbereiten:LET fnrausganf +=2;standardkopfmaskeaktualisieren(klassengrueberschrift);bildanfang:= +fnrausganf;setzebildanfangsposition(bildanfang);initspalten; +setzespaltenbreite(bildbreite);spaltenweise(spaltentext1);ausgfeld(1):=zeile; +ausgfeld(1)IN ausgabepos;erhoeheausgabeposumeins;spaltenweise(spaltentext2); +ausgfeld(1):=zeile;ausgfeld(1)IN ausgabepos;erhoeheausgabeposumeins; +spaltenweise(blank);ausgfeld(1):=zeile;ausgfeld(1)IN ausgabepos; +erhoeheausgabeposumeins;setzebildanfangsposition(5);spaltenbreitensetzenEND +PROC klassengrbildschirmvorbereiten;PROC klassengrseitezeigen:blaettern(PROC +(INT CONST )klassengrdatenzeigen,aktion,TRUE ,FALSE ,BOOL PROC multistop)END +PROC klassengrseitezeigen;PROC klassengrdatenzeigen(INT CONST x): +klassengrdatenholen;klassengrdatenaufbereitenbild1; +klassengrdatenaufbildschirm;klassengrdatenaufbereitenbild2; +klassengrdatenaufbildschirm;klassengrdatenaufbereitenbild3; +klassengrdatenaufbildschirmEND PROC klassengrdatenzeigen;PROC +klassengrdatenaufbereitenbild1:INT VAR y:=1;spaltenweise(klassengruppe); +spaltenweise(subtext(schuelergrfuerzeile1,y,y+5));yINCR 6;spaltenweise( +subtext(schuelergrfuerzeile1,y,y+5));yINCR 6;spaltenweise(subtext( +schuelergrfuerzeile1,y,y+5));yINCR 6;spaltenweise(subtext( +schuelergrfuerzeile1,y,y+5));yINCR 6;spaltenweise(subtext( +schuelergrfuerzeile1,y,y+5));yINCR 6;END PROC klassengrdatenaufbereitenbild1; +PROC klassengrdatenaufbereitenbild2:INT VAR y:=1;spaltenweise(blank); +spaltenweise(subtext(schuelergrfuerzeile2,y,y+5));yINCR 6;spaltenweise( +subtext(schuelergrfuerzeile2,y,y+5));yINCR 6;spaltenweise(subtext( +schuelergrfuerzeile2,y,y+5));yINCR 6;spaltenweise(subtext( +schuelergrfuerzeile2,y,y+5));yINCR 6;spaltenweise(subtext( +schuelergrfuerzeile2,y,y+5));yINCR 6;END PROC klassengrdatenaufbereitenbild2; +PROC klassengrdatenaufbereitenbild3:INT VAR y:=1;spaltenweise(blank); +spaltenweise(subtext(schuelergrfuerzeile3,y,y+5));yINCR 6;spaltenweise( +subtext(schuelergrfuerzeile3,y,y+5));yINCR 6;spaltenweise(subtext( +schuelergrfuerzeile3,y,y+5));yINCR 6;spaltenweise(subtext( +schuelergrfuerzeile3,y,y+5));yINCR 6;spaltenweise(subtext( +schuelergrfuerzeile3,y,y+5));yINCR 6;END PROC klassengrdatenaufbereitenbild3; +PROC klassengrdatenaufbildschirm:INT VAR i;FOR iFROM 1UPTO ausgfeldlaengeREP +ausgfeld(i):=zeile;ausgfeld(i)IN ausgabepos;erhoeheausgabeposumeins;PER ;END +PROC klassengrdatenaufbildschirm;PROC klassengrdruckvorbereiten: +setzebestandende(FALSE );anfbuchstabe:=" ";druckvorbereiten; +variablenfuerdrucksetzen;initdruckkopf(zentriert(klassengrueberschrift, +druckbreite),zentriert(length(klassengrueberschrift)*strich,druckbreite)); +initausgabekopfdruck;inittupel(dnrklassengruppen);spaltenbreitensetzen; +lesenvorbereitendruck(PROC (INT CONST ,BOOL PROC ,INT VAR )scanforward,BOOL +PROC multistop);.variablenfuerdrucksetzen:druckzeilenzahl:=drucklaenge( +ueberschriftenzeilen)-ausgkopflaenge.END PROC klassengrdruckvorbereiten;PROC +klassengrseitedrucken:klassengrueberschriftdrucken;seitedrucken(PROC (INT +VAR )klassengrdatendrucken,druckzeilenzahl,ausgfeldlaenge,BOOL PROC multistop +);seitenwechsel.END PROC klassengrseitedrucken;PROC +klassengrueberschriftdrucken:INT VAR i;druckkopfschreiben;FOR iFROM 1UPTO +ausgkopflaengeREP druckzeileschreiben(ausgkopfdruck(i))PER ;ausgfeld(1):= +zeile;druckzeileschreiben(ausgfeld(1))END PROC klassengrueberschriftdrucken; +PROC klassengrdatendrucken(INT VAR zeilenzaehler):LET markiert="#"; +klassengrdatenholen;ggflmeldunganfbuchstabe;klassengrdatenaufbereitenbild1; +zeilenzaehlerINCR ausgfeldlaenge;klassengrindruckdatei;IF +schuelergrfuerzeile2<>niltextTHEN klassengrdatenaufbereitenbild2; +zeilenzaehlerINCR ausgfeldlaenge;klassengrindruckdatei;IF +schuelergrfuerzeile3<>niltextTHEN klassengrdatenaufbereitenbild3; +zeilenzaehlerINCR ausgfeldlaenge;klassengrindruckdatei;FI FI ;. +ggflmeldunganfbuchstabe:IF anfbuchstabegeaendertTHEN meldunganfbuchstabeFI . +anfbuchstabegeaendert:neueranfbuchstabe:=klassengruppeSUB 1;anfbuchstabe<> +neueranfbuchstabe.meldunganfbuchstabe:standardmeldung(mnrbearbeitetwerden, +teiltextmeldung+neueranfbuchstabe+markiert);anfbuchstabe:=neueranfbuchstabe. +END PROC klassengrdatendrucken;PROC initausgabekopfdruck:ausgkopfdruck(1):= +spaltentext1;ausgkopfdruck(2):=spaltentext2;END PROC initausgabekopfdruck; +PROC klassengrindruckdatei:ausgfeld(1):=zeile;INT VAR i;FOR iFROM 1UPTO +ausgfeldlaengeREP druckzeileschreiben(ausgfeld(1))PER END PROC +klassengrindruckdatei;PROC spaltenbreitensetzen:INT VAR z;initspalten; +setzespaltenbreite(spaltenbreite1);FOR zFROM 1UPTO 5REP setzespaltenbreite( +spaltenbreite2);PER END PROC spaltenbreitensetzen;PROC klassengrdatenholen: +klassengruppe:=wert(fnrkgklassengrp);schuelergrfuerzeile1:=subtext(wert( +fnrkgschuelergrp),1,30);schuelergrfuerzeile2:=subtext(wert(fnrkgschuelergrp), +31,60);schuelergrfuerzeile3:=subtext(wert(fnrkgschuelergrp),61,90);END PROC +klassengrdatenholen;END PACKET klassengruppenlisten; + diff --git a/app/schulis/2.2.1/src/0.listen.raumgruppen b/app/schulis/2.2.1/src/0.listen.raumgruppen new file mode 100644 index 0000000..9d8b0f4 --- /dev/null +++ b/app/schulis/2.2.1/src/0.listen.raumgruppen @@ -0,0 +1,97 @@ +PACKET raumgruppenlistenDEFINES raumgruppenspezielleteile:LET +raumgruppeneingangsmaske="mu liste einfach eingang",spaltentrenner=" ", +raumgruppenanfpos=2,spaltenbreite1=4,spaltenbreite2=12,niltext="",blank=" ", +strich="-",null=0,ueberschriftenzeilen=2,ausgkopflaenge=2,ausgfeldlaenge=1, +anzahlderobjekteprobildschirm=8,mnrauswahlnichtsinnvoll=56, +mnrbearbeitetwerden=352;TEXT VAR raumgrueberschrift:="Liste der Raumgruppen", +spaltentext:="Raumgruppe Räume",raeumefuerzeile1,raeumefuerzeile2,raum1, +raum2,raum3,raum4,raum5,raum6,raum7,raum8,raum9,raum10,raum11,raum12,raum13, +raum14,raum15,raumgruppe,alteraumgruppe:="",anfbuchstabe,neueranfbuchstabe:= +"",teiltextmeldung:="die Raumgruppe dem Anfangsbuchstaben:";INT VAR +eingabestatus,bildanfang,spalte2druckbreite,druckzeilenzahl;LET AUSGFELD = +ROW ausgfeldlaengeTEXT ,AUSGKOPF =ROW ausgkopflaengeTEXT ,AUSGKOPFDRUCK =ROW +ausgkopflaengeTEXT ;AUSGFELD VAR ausgfeld;AUSGKOPF VAR ausgkopf; +AUSGKOPFDRUCK VAR ausgkopfdruck;BOOL PROC multistop:TRUE END PROC multistop; +PROC raumgruppenspezielleteile(INT CONST nr):SELECT nrOF CASE 1: +raumgrdialogvorbereitenCASE 2:raumgreingabenrichtigCASE 3: +raumgrlistenvorbereitenCASE 4:raumgrdruckvorbereitenCASE 5:raumgrseitedrucken +CASE 6:raumgrbildschirmvorbereitenCASE 7:raumgrseitezeigenENDSELECT .END +PROC raumgruppenspezielleteile;PROC raumgrdialogvorbereiten: +raumgrueberschrift:=text(vergleichsknoten);setzeanfangswerte( +raumgruppeneingangsmaske,raumgruppenanfpos)END PROC raumgrdialogvorbereiten; +PROC raumgreingabenrichtig:LET fnrausgdrucker=2,fnrausgbild=3;standardpruefe( +5,fnrausgdrucker,fnrausgbild,null,niltext,eingabestatus);IF eingabestatus=0 +THEN setzeeingabetest(TRUE );setzeausgabedrucker(standardmaskenfeld( +fnrausgbild)=niltext);ELSE meldefehler;setzeeingabetest(FALSE )FI ;. +meldefehler:standardmeldung(mnrauswahlnichtsinnvoll,niltext).END PROC +raumgreingabenrichtig;PROC raumgrlistenvorbereiten:BOOL VAR b;initspalten; +setzespaltentrenner(spaltentrenner);inittupel(dnrraumgruppen);setzeidentiwert +("");initobli(anzahlderobjekteprobildschirm);objektlistestarten( +dnrraumgruppen,"",fnrrgraumgrp,TRUE ,b);setzebestandende(NOT multistopCOR b); +END PROC raumgrlistenvorbereiten;PROC raumgrbildschirmvorbereiten:LET +fnrausganf=2;standardkopfmaskeaktualisieren(raumgrueberschrift);bildanfang:= +fnrausganf;setzebildanfangsposition(bildanfang);initspalten; +setzespaltenbreite(bildbreite);spaltenweise(spaltentext);ausgfeld(1):=zeile; +ausgfeld(1)IN ausgabepos;erhoeheausgabeposumeins;spaltenweise(blank);ausgfeld +(1):=zeile;ausgfeld(1)IN ausgabepos;erhoeheausgabeposumeins; +setzebildanfangsposition(4);spaltenbreitensetzenEND PROC +raumgrbildschirmvorbereiten;PROC raumgrseitezeigen:blaettern(PROC (INT CONST +)raumgrdatenzeigen,aktion,TRUE ,FALSE ,BOOL PROC multistop)END PROC +raumgrseitezeigen;PROC raumgrdatenzeigen(INT CONST x):raumgrdatenholen; +raumgrdatenaufbereitenbild1;raumgrdatenaufbildschirm; +raumgrdatenaufbereitenbild2;raumgrdatenaufbildschirmEND PROC +raumgrdatenzeigen;PROC raumgrdatenaufbereitenbild1:spaltenweise(raumgruppe); +spaltenweise(raum1);spaltenweise(raum2);spaltenweise(raum3);spaltenweise( +raum4);spaltenweise(raum5);spaltenweise(raum6);spaltenweise(raum7); +spaltenweise(raum8);spaltenweise(raum9);spaltenweise(raum10);END PROC +raumgrdatenaufbereitenbild1;PROC raumgrdatenaufbereitenbild2:spaltenweise( +blank);spaltenweise(raum11);spaltenweise(raum12);spaltenweise(raum13); +spaltenweise(raum14);spaltenweise(raum15);spaltenweise(blank);spaltenweise( +blank);spaltenweise(blank);spaltenweise(blank);spaltenweise(blank);END PROC +raumgrdatenaufbereitenbild2;PROC raumgrdatenaufbildschirm:INT VAR i;FOR i +FROM 1UPTO ausgfeldlaengeREP ausgfeld(i):=zeile;ausgfeld(i)IN ausgabepos; +erhoeheausgabeposumeins;PER ;END PROC raumgrdatenaufbildschirm;PROC +raumgrdruckvorbereiten:setzebestandende(FALSE );anfbuchstabe:=" "; +druckvorbereiten;variablenfuerdrucksetzen;initdruckkopf(zentriert( +raumgrueberschrift,druckbreite),zentriert(length(raumgrueberschrift)*strich, +druckbreite));initausgabekopfdruck;inittupel(dnrraumgruppen); +spaltenbreitensetzen;lesenvorbereitendruck(PROC (INT CONST ,BOOL PROC ,INT +VAR )scanforward,BOOL PROC multistop);.variablenfuerdrucksetzen: +druckzeilenzahl:=drucklaenge(ueberschriftenzeilen)-ausgkopflaenge.END PROC +raumgrdruckvorbereiten;PROC raumgrseitedrucken:raumgrueberschriftdrucken; +seitedrucken(PROC (INT VAR )raumgrdatendrucken,druckzeilenzahl,ausgfeldlaenge +,BOOL PROC multistop);seitenwechsel.END PROC raumgrseitedrucken;PROC +raumgrueberschriftdrucken:INT VAR i;druckkopfschreiben;FOR iFROM 1UPTO +ausgkopflaengeREP druckzeileschreiben(ausgkopfdruck(i))PER END PROC +raumgrueberschriftdrucken;PROC raumgrdatendrucken(INT VAR zeilenzaehler):LET +markiert="#";raumgrdatenholen;ggflmeldunganfbuchstabe; +raumgrdatenaufbereitenbild1;zeilenzaehlerINCR ausgfeldlaenge; +raumgrindruckdatei;IF raeumefuerzeile2<>niltextTHEN +raumgrdatenaufbereitenbild2;zeilenzaehlerINCR ausgfeldlaenge; +raumgrindruckdatei;FI ;.ggflmeldunganfbuchstabe:IF anfbuchstabegeaendertTHEN +meldunganfbuchstabeFI .anfbuchstabegeaendert:neueranfbuchstabe:=raumgruppe +SUB 1;anfbuchstabe<>neueranfbuchstabe.meldunganfbuchstabe:standardmeldung( +mnrbearbeitetwerden,teiltextmeldung+neueranfbuchstabe+markiert);anfbuchstabe +:=neueranfbuchstabe.END PROC raumgrdatendrucken;PROC initausgabekopfdruck: +TEXT VAR unterstreichung:=druckbreite*strich;ausgkopfdruck(1):=spaltentext; +ausgkopfdruck(2):=unterstreichung;END PROC initausgabekopfdruck;PROC +raumgrindruckdatei:ausgfeld(1):=zeile;INT VAR i;FOR iFROM 1UPTO +ausgfeldlaengeREP druckzeileschreiben(ausgfeld(1))PER END PROC +raumgrindruckdatei;PROC spaltenbreitensetzen:initspalten;setzespaltenbreite( +spaltenbreite2);INT VAR x;INT CONST zehnraeumedererstenzeile:=10;FOR xFROM 1 +UPTO zehnraeumedererstenzeileREP setzespaltenbreite(spaltenbreite1);PER ;END +PROC spaltenbreitensetzen;PROC raumgrdatenholen:INT VAR x:=1;raumgruppe:=wert +(fnrrgraumgrp);raeumefuerzeile1:=subtext(wert(fnrrgraeume),1,40); +raeumefuerzeile2:=subtext(wert(fnrrgraeume),41,60);raum1:=subtext( +raeumefuerzeile1,x,x+4);xINCR 4;raum2:=subtext(raeumefuerzeile1,x,x+4);xINCR +4;raum3:=subtext(raeumefuerzeile1,x,x+4);xINCR 4;raum4:=subtext( +raeumefuerzeile1,x,x+4);xINCR 4;raum5:=subtext(raeumefuerzeile1,x,x+4);xINCR +4;raum6:=subtext(raeumefuerzeile1,x,x+4);xINCR 4;raum7:=subtext( +raeumefuerzeile1,x,x+4);xINCR 4;raum8:=subtext(raeumefuerzeile1,x,x+4);xINCR +4;raum9:=subtext(raeumefuerzeile1,x,x+4);xINCR 4;raum10:=subtext( +raeumefuerzeile1,x,x+4);xINCR 4;raum11:=subtext(raeumefuerzeile2,x,x+4);x +INCR 4;raum12:=subtext(raeumefuerzeile2,x,x+4);xINCR 4;raum13:=subtext( +raeumefuerzeile2,x,x+4);xINCR 4;raum14:=subtext(raeumefuerzeile2,x,x+4);x +INCR 4;raum15:=subtext(raeumefuerzeile2,x,x+4);xINCR 4;alteraumgruppe:= +raumgruppe;END PROC raumgrdatenholen;END PACKET raumgruppenlisten; + diff --git a/app/schulis/2.2.1/src/0.listen.schlueabku b/app/schulis/2.2.1/src/0.listen.schlueabku new file mode 100644 index 0000000..54a928d --- /dev/null +++ b/app/schulis/2.2.1/src/0.listen.schlueabku @@ -0,0 +1,69 @@ +PACKET schluesselundabkulisteDEFINES schlueabkulieingang, +schlueabkulispezielleteile:LET niltext="",null=0,ueberschriftenzeilen=1, +spalte1breite=10,anzspaltentrenner=1,ausgfeldlaenge=1,AUSGFELD =ROW +ausgfeldlaengeTEXT ,schlueabkulieingangsmaske="mu liste einfach eingang", +schlueabkulianfpos=2;#LET dnrschluessel=137,fnrschlsachgebiet=138, +fnrschlschluessel=139,fnrschllangtext=140,dnrgesamtbestand=--,fnrbestandname= +--,fnrbestandid=--;#INT CONST spalte2bildbreite:=bildbreite-anzspaltentrenner +-spalte1breite;INT VAR spalte2druckbreite,druckzeilenzahl,bildanf, +eingabestatus;TEXT VAR schlueabkuliueberschrift,bestand,schluesselabk, +schluessellangtext;AUSGFELD VAR ausgfeld;#INT VAR sachgebiet;#BOOL PROC +multistop:BOOL VAR b;b:=wert(fnrschlsachgebiet)=bestand;bENDPROC multistop; +BOOL PROC multistopdruck:BOOL VAR b:=multistop;setzebestandende(NOT b);b +ENDPROC multistopdruck;PROC schlueabkulieingang(TEXT CONST spezbestand): +bestand:=spezbestand;eingangsmaskezeigenundparameterlesen(PROC +schlueabkulispezielleteile).END PROC schlueabkulieingang;PROC +schlueabkulispezielleteile(INT CONST nr):SELECT nrOF CASE 1: +schlueabkulidialogvorbereitenCASE 2:schlueabkulieingabenrichtigCASE 3: +schlueabkulilistenvorbereitenCASE 4:schlueabkulidruckvorbereitenCASE 5: +schlueabkuliseitedruckenCASE 6:schlueabkulibildschirmvorbereitenCASE 7: +schlueabkuliseitezeigenENDSELECT .END PROC schlueabkulispezielleteile;PROC +schlueabkulidialogvorbereiten:schlueabkuliueberschrift:=text(vergleichsknoten +);setzeanfangswerte(schlueabkulieingangsmaske,schlueabkulianfpos).END PROC +schlueabkulidialogvorbereiten;PROC schlueabkulieingabenrichtig:LET +fnrausgdrucker=2,fnrausgbild=3;standardpruefe(5,fnrausgdrucker,fnrausgbild, +null,niltext,eingabestatus);IF eingabestatus<>0THEN infeld(eingabestatus); +setzeeingabetest(FALSE )ELSE setzeausgabedrucker(standardmaskenfeld( +fnrausgbild)=niltext);setzeeingabetest(TRUE )FI .END PROC +schlueabkulieingabenrichtig;PROC bestandidbestimmenundalssachgebieteintragen: +#jf##systemdbon;putwert(fnrbestandname,bestand);search(dnrgesamtbestand,TRUE +);IF dbstatus=okTHEN sachgebiet:=intwert(fnrbestandid)ELSE sachgebiet:=maxint +FI ;#systemdboff;inittupel(dnrschluessel);putwert(fnrschlsachgebiet,bestand) +ENDPROC bestandidbestimmenundalssachgebieteintragen;PROC +schlueabkulilistenvorbereiten:BOOL VAR b:=FALSE ; +bestandidbestimmenundalssachgebieteintragen;initobli(19);#A nzahlproS eite# +reinitparsing;setzeidentiwert("");objektlistestarten(dnrschluessel,"", +fnrschlschluessel,TRUE ,b);setzebestandende(b)END PROC +schlueabkulilistenvorbereiten;PROC schlueabkulibildschirmvorbereiten:LET +fnrausganf=2;standardkopfmaskeaktualisieren(schlueabkuliueberschrift); +initspalten;setzespaltenbreite(spalte1breite);setzespaltenbreite( +spalte2bildbreite);bildanf:=fnrausganf;setzebildanfangsposition(bildanf).END +PROC schlueabkulibildschirmvorbereiten;PROC schlueabkuliseitezeigen:blaettern +(PROC (INT CONST )abkuerzungzeigen,aktion,TRUE ,TRUE ,BOOL PROC multistop); +END PROC schlueabkuliseitezeigen;PROC abkuerzungzeigen(INT CONST dummy): +abkuerzungholen;abkuerzungaufbereiten;abkuerzungaufbildschirm.END PROC +abkuerzungzeigen;PROC abkuerzungaufbildschirm:INT VAR i;FOR iFROM 1UPTO +ausgfeldlaengeREPEAT ausgfeld(i)IN ausgabepos;erhoeheausgabeposumeinsEND +REPEAT .END PROC abkuerzungaufbildschirm;PROC schlueabkulidruckvorbereiten: +druckvorbereiten;variablenfuerdrucksetzen;initspalten;setzespaltenbreite( +spalte1breite);setzespaltenbreite(spalte2druckbreite);initdruckkopf(zentriert +(schlueabkuliueberschrift,druckbreite)); +bestandidbestimmenundalssachgebieteintragen;lesenvorbereitendruck(PROC (INT +CONST ,BOOL PROC ,INT VAR )scanforward,BOOL PROC multistopdruck). +variablenfuerdrucksetzen:spalte2druckbreite:=druckbreite-anzspaltentrenner- +spalte1breite;druckzeilenzahl:=drucklaenge(ueberschriftenzeilen).END PROC +schlueabkulidruckvorbereiten;PROC schlueabkuliseitedrucken: +schlueabkuliueberschriftdrucken;seitedrucken(PROC (INT VAR )abkuerzungdrucken +,druckzeilenzahl,ausgfeldlaenge,BOOL PROC multistopdruck);seitenwechsel.END +PROC schlueabkuliseitedrucken;PROC schlueabkuliueberschriftdrucken: +druckkopfschreiben;END PROC schlueabkuliueberschriftdrucken;PROC +abkuerzungdrucken(INT VAR zeilenzaehler):abkuerzungholen; +abkuerzungaufbereiten;zeilenzaehlerINCR ausgfeldlaenge;abkuerzungindruckdatei +.END PROC abkuerzungdrucken;PROC abkuerzungindruckdatei:druckzeileschreiben( +ausgfeld(1)).END PROC abkuerzungindruckdatei;PROC abkuerzungaufbereiten: +schreibeabkuerzunglangtext.schreibeabkuerzunglangtext:spaltenweise( +schluesselabk);spaltenweise(schluessellangtext);ausgfeld(1):=zeile.END PROC +abkuerzungaufbereiten;PROC abkuerzungholen:schluesselabk:=wert( +fnrschlschluessel);schluessellangtext:=wert(fnrschllangtext);END PROC +abkuerzungholen;END PACKET schluesselundabkuliste; + diff --git a/app/schulis/2.2.1/src/0.listen.schuelergruppen b/app/schulis/2.2.1/src/0.listen.schuelergruppen new file mode 100644 index 0000000..cbef1c3 --- /dev/null +++ b/app/schulis/2.2.1/src/0.listen.schuelergruppen @@ -0,0 +1,109 @@ +PACKET schuelergruppenlistenDEFINES schuelergruplispezielleteile:LET +AUSGFELD =ROW ausgfeldlaengeTEXT ,AUSGKOPF =ROW ausgkopflaengeTEXT , +AUSGKOPFDRUCK =ROW ausgkopflaengeTEXT ;AUSGFELD VAR ausgfeld;AUSGKOPF VAR +ausgkopf;AUSGKOPFDRUCK VAR ausgkopfdruck;LET schuelergruppeneingangsmaske= +"ms liste schuelergruppen",ausgfeldlaenge=1,anzahlderobjekteprobildschirm=17, +ueberschriftenzeilen=2,ausgkopflaenge=2,spaltentrenner=" ", +schuelergruppenanfpos=2,jgstspalte1breite=14,zugspalte2breite=9, +lehrerspalte3breite=15,stellvspalte4breite=15,strich="/",niltext="",blank=" " +,null=0,mnrauswahlnichtsinnvoll=56;LET textsj="Schuljahr",texthj= +"Schulhalbjahr";TEXT VAR schuelergruppenueberschrift:="",schuljahr,halbjahr, +jahrgangsstufe,altejahrgangsstufe:="",bearbeitungsschuljahr, +bearbeitungshalbjahr,zugtutor,klassenlehrer,stellvertreter, +auswahlnichtsinnvoll;TEXT CONST leerzeile:=bildbreite*blank,textueberschrift +:=("Jahrgangsstufe"+blank+"Zug/Tutor"+blank+"Klassenleiter"+3*blank+ +"Stellvertreter");INT VAR eingabestatus,bildanfang,spalte2druckbreite, +druckzeilenzahl;INT CONST aktuelleindexnr:=dnraktschuelergruppen;BOOL VAR +aktuelleshjgewaehlt;BOOL PROC multistop:BOOL VAR b;IF dbstatus=okTHEN b:=( +bearbeitungshalbjahr=wert(fnrsgrphj)AND bearbeitungsschuljahr=wert(fnrsgrpsj) +)ELSE b:=FALSE FI ;bEND PROC multistop;BOOL PROC multistopsim: +setzebestandende(FALSE );BOOL VAR b:=multistop;setzebestandende(NOT b);bEND +PROC multistopsim;PROC schuelergruplispezielleteile(INT CONST nr):SELECT nr +OF CASE 1:schuelergruppendialogvorbereitenCASE 2: +schuelergruppeneingabenrichtigCASE 3:schuelergruppenlistenvorbereitenCASE 4: +schuelergruppendruckvorbereitenCASE 5:schuelergruppenseitedruckenCASE 6: +schuelergruppenbildschirmvorbereitenCASE 7:schuelergruppenseitezeigen +ENDSELECT .END PROC schuelergruplispezielleteile;PROC +schuelergruppendialogvorbereiten:schuelergruppenueberschrift:=text( +vergleichsknoten);setzeanfangswerte(schuelergruppeneingangsmaske, +schuelergruppenanfpos)END PROC schuelergruppendialogvorbereiten;PROC +schuelergruppeneingabenrichtig:LET fnrausggeplanteshj=2,fnrausgaktuelleshj=3, +fnrausgdrucker=4,fnrausgbild=5;standardpruefe(5,fnrausgdrucker,fnrausgbild, +null,niltext,eingabestatus);IF eingabestatus=0THEN standardpruefe(5, +fnrausggeplanteshj,fnrausgaktuelleshj,null,niltext,eingabestatus);IF +eingabestatus=0THEN gewaehlteshalbjahrmerken;setzeeingabetest(TRUE ); +setzeausgabedrucker(standardmaskenfeld(fnrausgbild)=niltext)ELSE meldefehler; +setzeeingabetest(FALSE )FI ;ELSE meldefehler;setzeeingabetest(FALSE )FI . +meldefehler:meldungstext(mnrauswahlnichtsinnvoll,auswahlnichtsinnvoll); +standardmeldung(auswahlnichtsinnvoll,niltext).gewaehlteshalbjahrmerken: +aktuelleshjgewaehlt:=standardmaskenfeld(fnrausgaktuelleshj)<>niltext.END +PROC schuelergruppeneingabenrichtig;PROC schuelergruppenlistenvorbereiten: +BOOL VAR b;initspalten;setzespaltentrenner(spaltentrenner); +bearbeitungsschuljahr:=schulkenndatum(textsj);bearbeitungshalbjahr:= +schulkenndatum(texthj);IF NOT (aktuelleshjgewaehlt)THEN +geplanteshjundsjberechnen(bearbeitungshalbjahr,bearbeitungsschuljahr)FI ; +inittupel(dnraktschuelergruppen);setzeidentiwert("");initobli( +anzahlderobjekteprobildschirm);parsenooffields(6);putwert(fnrsgrpsj, +bearbeitungsschuljahr);putwert(fnrsgrphj,bearbeitungshalbjahr); +setzescanendewert("255");objektlistestarten(aktuelleindexnr, +bearbeitungsschuljahr,fnrsgrpjgst,TRUE ,b);setzebestandende(NOT multistopCOR +b);END PROC schuelergruppenlistenvorbereiten;PROC +schuelergruppenbildschirmvorbereiten:LET fnrausganf=2; +standardkopfmaskeaktualisieren(schuelergruppenueberschrift);bildanfang:= +fnrausganf;setzebildanfangsposition(bildanfang);INT VAR i;setzespaltenbreite( +bildbreite);spaltenweise(textueberschrift);ausgfeld(1):=zeile;ausgfeld(1)IN +ausgabepos;erhoeheausgabeposumeins;spaltenweise(leerzeile);ausgfeld(1):=zeile +;ausgfeld(1)IN ausgabepos;erhoeheausgabeposumeins;setzebildanfangsposition(4) +;initspalten;setzespaltentrenner(spaltentrenner);setzespaltenbreite( +jgstspalte1breite);setzespaltenbreite(zugspalte2breite);setzespaltenbreite( +lehrerspalte3breite);setzespaltenbreite(stellvspalte4breite);END PROC +schuelergruppenbildschirmvorbereiten;PROC schuelergruppenseitezeigen: +blaettern(PROC (INT CONST )schuelergruppendatenzeigen,aktion,TRUE ,TRUE , +BOOL PROC multistop)END PROC schuelergruppenseitezeigen;PROC +schuelergruppendatenzeigen(INT CONST x):schuelergruppendatenholen; +schuelergruppendatenaufbereitenbild;schuelergruppendatenaufbildschirm;END +PROC schuelergruppendatenzeigen;PROC schuelergruppendatenholen:schuljahr:= +wert(fnrsgrpsj);halbjahr:=wert(fnrsgrphj);jahrgangsstufe:=wert(fnrsgrpjgst); +zugtutor:=wert(fnrsgrpkennung);klassenlehrer:=wert(fnrsgrplehrer); +stellvertreter:=wert(fnrsgrpstellvlehrer);END PROC schuelergruppendatenholen; +PROC schuelergruppendatenaufbereitenbild:IF length(jahrgangsstufe)=1THEN +spaltenweise(13*blank+jahrgangsstufe);ELSE spaltenweise(12*blank+ +jahrgangsstufe);FI ;spaltenweise(zugtutor);spaltenweise(klassenlehrer); +spaltenweise(stellvertreter);END PROC schuelergruppendatenaufbereitenbild; +PROC schuelergruppendatenaufbildschirm:INT VAR i;FOR iFROM 1UPTO +ausgfeldlaengeREP ausgfeld(i):=zeile;ausgfeld(i)IN ausgabepos; +erhoeheausgabeposumeins;PER ;END PROC schuelergruppendatenaufbildschirm;PROC +schuelergruppendruckvorbereiten:setzebestandende(FALSE );druckvorbereiten; +variablenfuerdrucksetzen;TEXT VAR schjaufbereitet:=text(bearbeitungsschuljahr +,2)+strich+text(bearbeitungsschuljahr,2,3),halbjaufbereitet:= +bearbeitungshalbjahr+". Halbjahr";schuelergruppenueberschrift:= +"Liste der Schülergruppen im Schuljahr "+schjaufbereitet+blank+ +halbjaufbereitet;initdruckkopf(zentriert(schuelergruppenueberschrift, +druckbreite),zentriert(length(schuelergruppenueberschrift)*"-",druckbreite)); +initspalten;setzespaltenbreite(jgstspalte1breite);setzespaltenbreite( +zugspalte2breite);setzespaltenbreite(lehrerspalte3breite);setzespaltenbreite( +stellvspalte4breite);inittupel(dnraktschuelergruppen);initausgabekopfdruck; +putwert(fnrsgrpsj,bearbeitungsschuljahr);putwert(fnrsgrphj, +bearbeitungshalbjahr);lesenvorbereitendruck(PROC (INT CONST ,BOOL PROC ,INT +VAR )scanforward,BOOL PROC multistopsim);.variablenfuerdrucksetzen: +druckzeilenzahl:=drucklaenge(ueberschriftenzeilen)-ausgkopflaenge.END PROC +schuelergruppendruckvorbereiten;PROC initausgabekopfdruck:ausgkopfdruck(1):= +textueberschrift;ausgkopfdruck(2):=leerzeileEND PROC initausgabekopfdruck; +PROC schuelergruppenseitedrucken:schuelergruppenueberschriftdrucken; +seitedrucken(PROC (INT VAR )schuelergruppendrucken,druckzeilenzahl, +ausgfeldlaenge,BOOL PROC multistopsim);seitenwechsel.END PROC +schuelergruppenseitedrucken;PROC schuelergruppenueberschriftdrucken:INT VAR i +;druckkopfschreiben;FOR iFROM 1UPTO ausgkopflaengeREP druckzeileschreiben( +ausgkopfdruck(i))PER END PROC schuelergruppenueberschriftdrucken;PROC +schuelergruppendrucken(INT VAR zeilenzaehler):schuelergruppendatenholen;IF +altejahrgangsstufe<>jahrgangsstufeTHEN spaltenweise(" ");spaltenweise(" "); +spaltenweise(" ");spaltenweise(" ");ausgfeld(1):=zeile;zeilenzaehlerINCR +ausgfeldlaenge;schuelergruppenindruckdateiFI ;schuelergruppenaufbereitendruck +;zeilenzaehlerINCR ausgfeldlaenge;schuelergruppenindruckdatei.END PROC +schuelergruppendrucken;PROC schuelergruppenaufbereitendruck: +setzespaltentrenner(spaltentrenner);schuelergruppendatenaufbereitenbild; +ausgfeld(1):=zeile;altejahrgangsstufe:=jahrgangsstufe;END PROC +schuelergruppenaufbereitendruck;PROC schuelergruppenindruckdatei:INT VAR i; +FOR iFROM 1UPTO ausgfeldlaengeREP druckzeileschreiben(ausgfeld(1))PER END +PROC schuelergruppenindruckdatei;END PACKET schuelergruppenlisten + diff --git a/app/schulis/2.2.1/src/0.listen.schulen b/app/schulis/2.2.1/src/0.listen.schulen new file mode 100644 index 0000000..c23ade2 --- /dev/null +++ b/app/schulis/2.2.1/src/0.listen.schulen @@ -0,0 +1,87 @@ +PACKET schulenlistenDEFINES schulenspezielleteile:LET niltext="",blank=" ", +mittestrich="-",ueberschriftenzeilen=1,#bestand="c05 schulen",#spalte1breite= +8,spalte2breite=8,spalte4breite=17,anzspaltentrenner=3,ausgkopflaenge=3, +ausgfeldlaenge=5,#maxdbwerte=100,##anzdbwerte=8,#AUSGFELD =ROW ausgfeldlaenge +TEXT ,AUSGKOPF =ROW ausgkopflaengeTEXT ,schuleneingangsmaske= +"mu liste einfach eingang",schulenanfpos=2;#LET dnrschulen=120,fnrschkennung= +121,fnrschname=122,fnrschart=123,fnrschamtlnr=127,fnrschbundesland=128, +fnrschstrnr=124,fnrschplzort=125,fnrschtelnr=126;#INT CONST spalte3bildbreite +:=bildbreite-anzspaltentrenner-spalte1breite-spalte2breite-spalte4breite;INT +VAR spalte3druckbreite,spalte3breite,druckzeilenzahl,bildanf,eingabestatus; +TEXT VAR schulenueberschrift,schulkennung,schulart,amtlschulkennnr,schulname, +schulstrnr,schulnat,schulplz,schulort,schulland,schultelnr,anfbuchstabe, +neueranfbuchstabe;TEXT VAR druckstrich;TEXT CONST bildstrich:=bildbreite* +mittestrich;AUSGFELD VAR ausgfeld;AUSGKOPF VAR ausgkopf;BOOL PROC multistop: +TRUE ENDPROC multistop;BOOL PROC multistopsim:setzebestandende(FALSE );TRUE +ENDPROC multistopsim;PROC schulenspezielleteile(INT CONST nr):SELECT nrOF +CASE 1:schulendialogvorbereitenCASE 2:schuleneingabenrichtigCASE 3: +schulenlistenvorbereitenCASE 4:schulendruckvorbereitenCASE 5: +schulenseitedruckenCASE 6:schulenbildschirmvorbereitenCASE 7: +schulenseitezeigenENDSELECT .END PROC schulenspezielleteile;PROC +schulendialogvorbereiten:schulenueberschrift:=text(vergleichsknoten); +setzeanfangswerte(schuleneingangsmaske,schulenanfpos).END PROC +schulendialogvorbereiten;PROC schuleneingabenrichtig:LET fnrausgdrucker=2, +fnrausgbild=3;standardpruefe(5,fnrausgdrucker,fnrausgbild,0,niltext, +eingabestatus);IF eingabestatus<>0THEN infeld(eingabestatus);setzeeingabetest +(FALSE )ELSE setzeausgabedrucker(standardmaskenfeld(fnrausgbild)=niltext); +setzeeingabetest(TRUE )END IF .END PROC schuleneingabenrichtig;PROC +schulenlistenvorbereiten:BOOL VAR b;inittupel(dnrschulen);initobli(3); +reinitparsing;setzeidentiwert("");objektlistestarten(dnrschulen,"", +fnrschkennung,TRUE ,b);setzebestandende(b)END PROC schulenlistenvorbereiten; +PROC schulenbildschirmvorbereiten:LET fnrausganf=2; +standardkopfmaskeaktualisieren(schulenueberschrift);initspalten;spalte3breite +:=spalte3bildbreite;ausgfeld(5):=bildbreite*blank;setzespaltenbreiten; +initausgabekopf(bildstrich);bildanf:=fnrausganf;INT VAR i;FOR iFROM 1UPTO +ausgkopflaengeREPEAT ausgkopf(i)IN bildanf;bildanfINCR 1END REPEAT ; +setzebildanfangsposition(bildanf).END PROC schulenbildschirmvorbereiten;PROC +schulenseitezeigen:blaettern(PROC (INT CONST )schulezeigen,aktion,TRUE , +FALSE ,BOOL PROC multistop);END PROC schulenseitezeigen;PROC schulezeigen( +INT CONST dummy):schuleholen;schuleaufbereiten;schuleaufbildschirm.END PROC +schulezeigen;PROC schuleaufbildschirm:INT VAR i;FOR iFROM 1UPTO +ausgfeldlaengeREPEAT ausgfeld(i)IN ausgabepos;erhoeheausgabeposumeinsEND +REPEAT .END PROC schuleaufbildschirm;PROC schulendruckvorbereiten: +anfbuchstabe:=niltext;druckvorbereiten;variablenfuerdrucksetzen;initdruckkopf +(zentriert(schulenueberschrift,druckbreite));initspalten;spalte3breite:= +spalte3druckbreite;ausgfeld(5):=druckbreite*blank;setzespaltenbreiten; +initausgabekopf(druckstrich);inittupel(dnrschulen);setzebestandende(FALSE ); +lesenvorbereitendruck(PROC (INT CONST ,BOOL PROC ,INT VAR )scanforward,BOOL +PROC multistopsim).variablenfuerdrucksetzen:druckstrich:=druckbreite* +mittestrich;spalte3druckbreite:=druckbreite-anzspaltentrenner-spalte1breite- +spalte2breite-spalte4breite;druckzeilenzahl:=drucklaenge(ueberschriftenzeilen +)-ausgkopflaenge.END PROC schulendruckvorbereiten;PROC schulenseitedrucken: +schulenueberschriftdrucken;seitedrucken(PROC (INT VAR )schuledrucken, +druckzeilenzahl,ausgfeldlaenge,BOOL PROC multistopsim);seitenwechsel.END +PROC schulenseitedrucken;PROC schulenueberschriftdrucken:druckkopfschreiben; +INT VAR i;FOR iFROM 1UPTO ausgkopflaengeREPEAT druckzeileschreiben(ausgkopf(i +))END REPEAT .END PROC schulenueberschriftdrucken;PROC schuledrucken(INT VAR +zeilenzaehler):LET druckmeldung=101,markiert="#";schuleholen; +ggfmeldunganfbuchstabe;schuleaufbereiten;zeilenzaehlerINCR ausgfeldlaenge; +schuleindruckdatei.ggfmeldunganfbuchstabe:IF anfangsbuchstabegeaendertTHEN +meldunganfbuchstabeEND IF .anfangsbuchstabegeaendert:neueranfbuchstabe:= +schulkennungSUB 1;anfbuchstabe<>neueranfbuchstabe.meldunganfbuchstabe: +standardmeldung(druckmeldung,neueranfbuchstabe+markiert);anfbuchstabe:= +neueranfbuchstabe.END PROC schuledrucken;PROC schuleindruckdatei:INT VAR i; +FOR iFROM 1UPTO ausgfeldlaengeREPEAT druckzeileschreiben(ausgfeld(i))END +REPEAT .END PROC schuleindruckdatei;PROC setzespaltenbreiten: +setzespaltenbreite(spalte1breite);setzespaltenbreite(spalte2breite); +setzespaltenbreite(spalte3breite);setzespaltenbreite(spalte4breite);END PROC +setzespaltenbreiten;PROC initausgabekopf(TEXT CONST strich):LET kennung= +"Kennung",art="Schulart",name="Name",amtlnr="amtl. Nr.",adresse="Adresse", +telnr="Telefon";spaltenweise(kennung);spaltenweise(art);spaltenweise(name); +spaltenweise(blank);ausgkopf(1):=zeile;spaltenweise(blank);spaltenweise( +amtlnr);spaltenweise(adresse);spaltenweise(telnr);ausgkopf(2):=zeile;ausgkopf +(3):=strich.END PROC initausgabekopf;PROC schuleholen:schulkennung:=wert( +fnrschkennung);schulname:=wert(fnrschname);schulart:=wert(fnrschart); +amtlschulkennnr:=wert(fnrschamtlnr);schulland:=wert(fnrschbundesland); +schulstrnr:=wert(fnrschstrnr);schulort:=wert(fnrschplzort);schultelnr:=wert( +fnrschtelnr).END PROC schuleholen;PROC schuleaufbereiten:LET deutsch="D"; +schreibekennungartname;schreibeamtlnrstrtelnr;schreibeortland. +schreibekennungartname:spaltenweise(schulkennung);spaltenweise(schulart); +spaltenweise(schulname);spaltenweise(blank);ausgfeld(1):=zeile. +schreibeamtlnrstrtelnr:spaltenweise(blank);spaltenweise(amtlschulkennnr); +spaltenweise(schulstrnr);spaltenweise(schultelnr);ausgfeld(2):=zeile. +schreibeortland:spaltenweise(blank);spaltenweise(blank);spaltenweise(schulort +);spaltenweise(blank);ausgfeld(3):=zeile;spaltenweise(blank);spaltenweise( +blank);spaltenweise(schulland);spaltenweise(blank);ausgfeld(4):=zeile.END +PROC schuleaufbereiten;END PACKET schulenlisten; + diff --git a/app/schulis/2.2.1/src/0.listen.steuerung b/app/schulis/2.2.1/src/0.listen.steuerung new file mode 100644 index 0000000..bafd51b --- /dev/null +++ b/app/schulis/2.2.1/src/0.listen.steuerung @@ -0,0 +1,67 @@ +PACKET listensteuerungDEFINES eingangsmaskezeigenundparameterlesen, +listedruckenoderzeigenggflweitereaktionlesen,weitereaktionlesen, +aufbildschirmblaettern,druckbearbeitung,setzeanfangswerte,setzeausgabedrucker +,ausgabedrucker,setzeeingabetest,setzebildanfangsposition,ausgabepos, +erhoeheausgabeposumeins,seitenzaehler,erhoeheseitenzaehlerumeins,aktion, +bildbreite,bildlaenge:LET namebildausgabemaske="mu liste bildausgabe", +datenexistierennicht=59,warteaufforderung=69,listewirdgedruckt=58, +zurnachprozedur=1,niltext="",blank=" ";INT VAR bildanfangsposition, +aktuelleposition,zeiger,richtung,seite;TEXT VAR nameauswahlmaske;BOOL VAR +eingabenrichtig,ausgdrucker;TEXT CONST leerzeilebild:=bildbreite*blank;PROC +eingangsmaskezeigenundparameterlesen(PROC (INT CONST )spezielleteile): +enablestop;dialogvorbereiten;dialogstarten.dialogvorbereiten:spezielleteile(1 +);standardstartproc(nameauswahlmaske).dialogstarten:infeld(aktuelleposition); +standardnproc.END PROC eingangsmaskezeigenundparameterlesen;PROC +listedruckenoderzeigenggflweitereaktionlesen(PROC (INT CONST )spezielleteile) +:eingabenueberpruefen;IF eingabenrichtigTHEN werteauswahlausundgibausELSE +wiederholeauswahlFI .eingabenueberpruefen:spezielleteile(2). +werteauswahlausundgibaus:meldewarten;vorbereitungenliste;IF bestandendeTHEN +meldekeinbestand;zurueckzumdialogELIF ausgdruckerTHEN druckbearbeitung( +zurnachprozedur,PROC spezielleteile)ELSE +bildschirmvorbereitenundersteseitezeigen(PROC spezielleteile)FI . +vorbereitungenliste:spezielleteile(3).meldewarten:standardmeldung( +warteaufforderung,niltext).meldekeinbestand:standardmeldung( +datenexistierennicht,niltext).wiederholeauswahl:zurueckzumdialog. +zurueckzumdialog:return(1).END PROC +listedruckenoderzeigenggflweitereaktionlesen;PROC druckbearbeitung(INT CONST +ruecksprung,PROC (INT CONST )spezielleteile):IF NOT (ruecksprung= +zurnachprozedur)THEN setzeausgabedrucker(TRUE )FI ;seite:=1; +ausgebenaufdrucker(PROC spezielleteile);zurueckzumdialog.zurueckzumdialog:IF +ruecksprung=zurnachprozedurTHEN return(ruecksprung)ELSE enter(ruecksprung)FI +.END PROC druckbearbeitung;PROC ausgebenaufdrucker(PROC (INT CONST ) +spezielleteile):setzemitseitennummern(TRUE );druckvorbereiten;druckeeineseite +;WHILE NOT bestandendeREP nimmnaechsteseite;druckeeineseitePER ; +meldelistewirdgedruckt;drucknachbereiten.druckvorbereiten:spezielleteile(4). +druckeeineseite:spezielleteile(5).nimmnaechsteseite:seiteINCR 1. +meldelistewirdgedruckt:standardmeldung(listewirdgedruckt,niltext).END PROC +ausgebenaufdrucker;PROC bildschirmvorbereitenundersteseitezeigen(PROC (INT +CONST )spezielleteile):standardstartproc(namebildausgabemaske);spezielleteile +(6);richtung:=#1;#3;seitezeigen(PROC spezielleteile);dialogstarten. +dialogstarten:weitereaktionlesen.END PROC +bildschirmvorbereitenundersteseitezeigen;PROC weitereaktionlesen:maskendialog +.maskendialog:aktuelleposition:=21;infeld(aktuelleposition);standardnproc. +END PROC weitereaktionlesen;PROC aufbildschirmblaettern(INT CONST was,PROC ( +INT CONST )spezielleteile):richtung:=was;standardkopfmaskeaktualisieren; +seitezeigen(PROC spezielleteile);zurueckzumdialog.zurueckzumdialog:return(1). +END PROC aufbildschirmblaettern;PROC setzeanfangswerte(TEXT CONST +eingangsmaske,INT CONST anfpos):nameauswahlmaske:=eingangsmaske; +aktuelleposition:=anfpos;END PROC setzeanfangswerte;PROC seitezeigen(PROC ( +INT CONST )spezielleteile):LET fnrausgende=20;aktuelleposition:= +bildanfangsposition;spezielleteile(7);ggfrestbildloeschen.ggfrestbildloeschen +:IF neuesbildangefangenTHEN restbildloeschenFI .neuesbildangefangen: +aktuelleposition>bildanfangsposition.restbildloeschen:FOR zeigerFROM +aktuellepositionUPTO fnrausgendeREP leerzeilebildIN zeigerPER .END PROC +seitezeigen;PROC setzeausgabedrucker(BOOL CONST b):ausgdrucker:=bEND PROC +setzeausgabedrucker;BOOL PROC ausgabedrucker:ausgdruckerEND PROC +ausgabedrucker;PROC setzeeingabetest(BOOL CONST b):eingabenrichtig:=bEND +PROC setzeeingabetest;PROC setzebildanfangsposition(INT CONST anfangsposition +):bildanfangsposition:=anfangspositionEND PROC setzebildanfangsposition;INT +PROC ausgabepos:aktuellepositionEND PROC ausgabepos;PROC +erhoeheausgabeposumeins:aktuellepositionINCR 1END PROC +erhoeheausgabeposumeins;INT PROC seitenzaehler:seiteEND PROC seitenzaehler; +PROC erhoeheseitenzaehlerumeins:seiteINCR 1END PROC +erhoeheseitenzaehlerumeins;INT PROC aktion:richtungEND PROC aktion;LET +bildzeilenbreite=78,bildseitenlaenge=23,bildkopflaenge=4;INT CONST bildbreite +:=bildzeilenbreite,bildlaenge:=bildseitenlaenge-bildkopflaenge;END PACKET +listensteuerung; + diff --git a/app/schulis/2.2.1/src/0.listen.werkzeuge b/app/schulis/2.2.1/src/0.listen.werkzeuge new file mode 100644 index 0000000..011db81 --- /dev/null +++ b/app/schulis/2.2.1/src/0.listen.werkzeuge @@ -0,0 +1,29 @@ +PACKET listenwerkzeugeDEFINES initspalten,setzespaltenbreite, +setzespaltentrenner,spaltenweise,zeile,geblockt,zentriert,zweistellig, +vergleichsdatum:LET maxanzspalten=20,null=0,blank=" ",niltext=""#,andenanfang +=1,ansende=2,vorwaerts=3,rueckwaerts=4,naechstenlesen=1;#;TEXT VAR +zwischenpuffer,spaltentrenner;INT VAR aktspalte,aktmaxanzspalten;ROW +maxanzspaltenINT VAR spaltenbreite;PROC initspalten:INT VAR i;FOR iFROM 1 +UPTO maxanzspaltenREP spaltenbreite(i):=nullPER ;aktmaxanzspalten:=null; +aktspalte:=1;zwischenpuffer:=niltext;spaltentrenner:=blank;END PROC +initspalten;PROC setzespaltenbreite(INT CONST breite):aktmaxanzspaltenINCR 1; +IF aktmaxanzspalten<=maxanzspaltenTHEN spaltenbreite(aktmaxanzspalten):= +breiteFI ;END PROC setzespaltenbreite;PROC setzespaltentrenner(TEXT CONST +trenner):spaltentrenner:=trennerEND PROC setzespaltentrenner;PROC +spaltenweise(TEXT CONST t):IF aktspalte>aktmaxanzspaltenTHEN aktspalte:=1; +zwischenpuffer:=niltextFI ;zwischenpuffer:=zwischenpuffer+text(t, +spaltenbreite(aktspalte));IF aktspalte<aktmaxanzspaltenTHEN zwischenpuffer:= +zwischenpuffer+spaltentrennerFI ;aktspalteINCR 1END PROC spaltenweise;TEXT +PROC zeile:zwischenpufferEND PROC zeile;TEXT PROC geblockt(TEXT CONST links, +rechts,INT CONST breite):links+blanks+rechts.blanks:(breite-length(links)- +length(rechts))*blank.END PROC geblockt;TEXT PROC zentriert(TEXT CONST text, +INT CONST breite):INT CONST blankanzahl:=breite-length(text);TEXT CONST +blanks:=blankausgleich;IF blankanzahlgeradeTHEN blanks+text+blanksELSE blanks ++text+blanks+blankFI .blankausgleich:(blankanzahlDIV 2)*blank. +blankanzahlgerade:blankanzahlMOD 2=0.END PROC zentriert;TEXT PROC zweistellig +(TEXT CONST jahrgang):TEXT VAR puffer;puffer:=text(null)+jahrgang;subtext( +puffer,length(puffer)-1).END PROC zweistellig;INT PROC vergleichsdatum(INT +CONST jahre):INT VAR hilfe;hilfe:=int(subtext(date,7,8));hilfeDECR jahre; +datum(subtext(date,1,6)+text(hilfe)).END PROC vergleichsdatum;END PACKET +listenwerkzeuge; + diff --git a/app/schulis/2.2.1/src/0.listenweise grundfunktionen b/app/schulis/2.2.1/src/0.listenweise grundfunktionen new file mode 100644 index 0000000..7b7d32c --- /dev/null +++ b/app/schulis/2.2.1/src/0.listenweise grundfunktionen @@ -0,0 +1,51 @@ +PACKET listenweisegrundfunktionenDEFINES holevergleichssg,istzulaessigesg, +sgeinerjgst,initgruppenwechsel,gruppenwechsel,eingangsbehandlunglistenweise, +startebildschirmblock,bildschirmblock:LET blank=" ",niltext="";LET maxgw=10; +LET bestandtrenner="/";LET schuljahrkey="Schuljahr",schulhalbjahrkey= +"Schulhalbjahr",halbjahr1="1",halbjahr2="2";BOOL VAR nichtzuende,starten,sek2 +;INT VAR bestand;INT VAR schuelerzahl;ROW maxgwTEXT VAR gw;TEXT VAR +aktuelleschuelergruppen;TEXT VAR vergljgst,letztejgst;TEXT VAR schuljahr, +schulhalbjahr;PROC holevergleichssg(TEXT CONST jgst,BOOL CONST aktuell): +schuljahr:=schulkenndatum(schuljahrkey);schulhalbjahr:=schulkenndatum( +schulhalbjahrkey);aktuelleschuelergruppen:=niltext;vergljgst:=jgst;inittupel( +dnraktschuelergruppen);setzerichtigeschulkenndaten;IF jgst<>niltextTHEN +statleseschleife(dnraktschuelergruppen,jgst,niltext,fnrsgrpjgst, +fnrsgrpkennung,PROC pruefesg)ELSE sek2:=FALSE ;letztejgst:=niltext; +statleseschleife(dnraktschuelergruppen,jgst,niltext,fnrsgrpjgst, +fnrsgrpkennung,PROC allesg)FI ;.setzerichtigeschulkenndaten:IF NOT aktuell +THEN IF schulhalbjahr=halbjahr1THEN schulhalbjahr:=halbjahr2ELSE schuljahr:= +subtext(schuljahr,3,4);schuljahrCAT text(int(schuljahr)+1);schulhalbjahr:= +halbjahr1FI ;FI ;putwert(fnrsgrpsj,schuljahr);putwert(fnrsgrphj,schulhalbjahr +);.END PROC holevergleichssg;BOOL PROC istzulaessigesg(TEXT CONST sg):pos( +aktuelleschuelergruppen,sg)>0END PROC istzulaessigesg;TEXT PROC sgeinerjgst: +aktuelleschuelergruppenEND PROC sgeinerjgst;PROC pruefesg(BOOL VAR schluss): +TEXT CONST sg:=jgstaufber(wert(fnrsgrpjgst))+wert(fnrsgrpkennung);IF dbstatus +=0CAND subtext(sg,1,2)=vergljgstTHEN neueaktuelleschuelergruppe(sg)ELSE +schluss:=TRUE FI .END PROC pruefesg;PROC allesg(BOOL VAR schluss):IF dbstatus +<>0OR wert(fnrsgrpsj)<>schuljahrOR wert(fnrsgrphj)<>schulhalbjahrTHEN schluss +:=TRUE ELSE TEXT CONST sg:=jgstaufber(wert(fnrsgrpjgst))+wert(fnrsgrpkennung) +;neueaktuelleschuelergruppe(sg)FI END PROC allesg;PROC +neueaktuelleschuelergruppe(TEXT CONST sg):IF aktuelleschuelergruppen=niltext +THEN anhaengenELSE trennen;anhaengenFI .anhaengen:aktuelleschuelergruppenCAT +sg;.trennen:aktuelleschuelergruppenCAT bestandtrenner.END PROC +neueaktuelleschuelergruppe;PROC initgruppenwechsel:INT VAR i;FOR iFROM 1UPTO +maxgwREP gw(i):=niltextPER .END PROC initgruppenwechsel;PROC gruppenwechsel( +TEXT CONST gwneu,INT CONST gwalt,INT CONST laenge,incr,INT VAR aktuellesfeld) +:IF gruppenwechselliegtvorTHEN gruppenwechselzeigenELSE leeresfeldFI ; +weiterzaehlen.gruppenwechselliegtvor:(schuelerzahl=1)COR (gw(gwalt)<>gwneu). +gruppenwechselzeigen:standardmaskenfeld(text(gwneu,laenge),aktuellesfeld);gw( +gwalt):=gwneu.leeresfeld:standardmaskenfeld(laenge*blank,aktuellesfeld). +weiterzaehlen:aktuellesfeldINCR incr.END PROC gruppenwechsel;PROC +eingangsbehandlunglistenweise:standardvproc(maske(vergleichsknoten))END PROC +eingangsbehandlunglistenweise;PROC startebildschirmblock(INT CONST best,sz): +nichtzuende:=TRUE ;bestand:=best;starten:=TRUE ;schuelerzahl:=sz.END PROC +startebildschirmblock;PROC bildschirmblock(PROC schuelerzeigen,BOOL PROC ( +INT CONST )pruefungspeziell,INT CONST was):INT VAR lv,anzahl;IF startenTHEN +erstenzeigen;neuerblock;erhoehezaehlerELSE neuerblockFI .erstenzeigen: +schuelerzeigen;changeindex.erhoehezaehler:schuelerzahlINCR 1.neuerblock: +anzahl:=schuelerzahl;starten:=FALSE ;IF nichtzuendeTHEN multisucc(bestand, +anzahl);FOR lvFROM 1UPTO anzahlREP schuelerlesen;nichtzuende:= +pruefungspeziell(was);IF nichtzuendeTHEN schuelerzeigenELSE LEAVE neuerblock +FI PER ;nichtzuende:=anzahl=schuelerzahlFI ;.schuelerlesen:stackentry(lv). +END PROC bildschirmblock;END PACKET listenweisegrundfunktionen; + diff --git a/app/schulis/2.2.1/src/0.listenweise klassen erf b/app/schulis/2.2.1/src/0.listenweise klassen erf new file mode 100644 index 0000000..9b3c02e --- /dev/null +++ b/app/schulis/2.2.1/src/0.listenweise klassen erf @@ -0,0 +1,215 @@ +PACKET listenweiseklassenerfDEFINES neueinfuegenklassen,entfernenklassen, +bearbeitungklassen,klassennichtspeichern,klassenspeichern:LET tofather=1, +tograndfather=2,niltext="",blank=" ",null=0,trenner="/",meldtrenner="#";LET +standardanfang=1,standardeinstieg=4;LET jgst5=5,jgst13=13,erstejgst="05";LET +erstesfeld=3,felderprozeile=4,klassenproseite=18;LET meldbestleer=59, +meldnichtspeichern=63,meldplausi=57,meldwertzulang=60,meldwarten=69, +meldspeicherung=132,meldspeicherfehler=131,meldfalscheauswahl=56, +meldfortschreibung=140,meldkeinelehrer=141,meldfalscherlehrer=142,meldschonda +=143,meldnichtleer=144,meldnichtda=134,meldloeschung=145;LET maxlaengekennung +=4,maxlaengeintegabez=4;LET pruefartalternative=5,pruefartgrenzen=3;LET +fnrjgst=4,fnrakt=3,fnrgepl=2,fnrfort2=5,fnrfortneu=6;LET keysj="Schuljahr", +keyshj="Schulhalbjahr";LET wertaktuell="aktuell",wertgeplant="geplant";LET +paraphentrenner="
";LET vaaendern=1,vaneu=2,valoeschen=3;LET hj1="1",hj2="2"; +BOOL VAR nochwelcheda,akthalbjahr,fortschreibungzweiteshalbjahr, +fortschreibungneuesschuljahr,fortschreibung;INT VAR klassenzahl,aktuellesfeld +,pruefstatus,verarbeitungsart;ROW klassenproseiteTEXT VAR kennung;ROW +klassenproseiteTEXT VAR altedaten;TEXT VAR neuesschuljahr,neueshalbjahr, +vergleichsjgst,lehrerparaphen:=niltext,schuljahr:=niltext,halbjahr:=niltext; +PROC eingangsbildschirmpruefen(BOOL CONST neu):reinitparsing; +ankreuzfelderpruefen;IF eingangsbildschirmokTHEN jgstpruefen;IF +eingangsbildschirmokTHEN fortschreibungpruefenFI FI .ankreuzfelderpruefen: +standardpruefe(pruefartalternative,fnrgepl,fnrakt,null,niltext,pruefstatus). +jgstpruefen:akthalbjahr:=standardmaskenfeld(fnrakt)<>niltext;standardpruefe( +pruefartgrenzen,fnrjgst,jgst5,jgst13,niltext,pruefstatus);. +fortschreibungpruefen:vergleichsjgst:=jgstaufber(standardmaskenfeld(fnrjgst)) +;fortschreibungzweiteshalbjahr:=standardmaskenfeld(fnrfort2)<>niltext; +fortschreibungneuesschuljahr:=standardmaskenfeld(fnrfortneu)<>niltext; +fortschreibung:=(fortschreibungzweiteshalbjahrCOR +fortschreibungneuesschuljahr);IF (fortschreibungzweiteshalbjahrCAND +fortschreibungneuesschuljahr)THEN pruefstatus:=fnrfort2ELIF (fortschreibung +CAND akthalbjahr)THEN pruefstatus:=fnraktELIF (fortschreibungCAND (NOT neu)) +THEN pruefstatus:=meldfortschreibungELIF ((NOT akthalbjahr)CAND ( +vergleichsjgst=erstejgst))CAND fortschreibungneuesschuljahrTHEN pruefstatus:= +fnrjgstFI ;IF pruefstatus=meldfortschreibungTHEN standardmeldung(pruefstatus, +niltext);pruefstatus:=fnrjgstELIF pruefstatus<>nullTHEN standardmeldung( +meldfalscheauswahl,niltext)FI .eingangsbildschirmok:pruefstatus=0.END PROC +eingangsbildschirmpruefen;PROC neueinfuegenklassen:verarbeitungsart:=vaneu; +eingangsbehandlungEND PROC neueinfuegenklassen;PROC entfernenklassen: +verarbeitungsart:=valoeschen;eingangsbehandlungEND PROC entfernenklassen; +PROC bearbeitungklassen:verarbeitungsart:=vaaendern;eingangsbehandlungEND +PROC bearbeitungklassen;PROC eingangsbehandlung:BOOL CONST neueklassen:=( +verarbeitungsart=vaneu);eingangsbildschirmpruefen(neueklassen);IF +eingangsbildschirmokTHEN neuesschuljahrhalbjahrerrechnen; +initialisierungenvornehmen;blocklesenundausgeben;IF keinemehrdaTHEN +bestandleermelden;enter(tofather)ELSE standardnprocFI ELSE +eingangsmaskenfehler;return(tofather)FI .eingangsbildschirmok:pruefstatus=0. +initialisierungenvornehmen:bestandsetzen;plausipruefungvorbereiten; +standardstartproc(maske(vergleichsknoten)).bestandsetzen:infeld(fnrjgst);IF +verarbeitungsart=vaaendernTHEN pruefebestandELSE nochwelcheda:=trueFI . +pruefebestand:inittupel(dnraktschuelergruppen);klassengrunddateninpuffer; +search(dnraktschuelergruppen,FALSE );IF keineklassezudieserjgstTHEN +bestandleermelden;return(tofather);LEAVE eingangsbehandlungELSE nochwelcheda +:=trueFI .keineklassezudieserjgst:(dbstatus<>null)COR ((jgstaufber(wert( +fnrsgrpjgst))<>vergleichsjgst)COR (wert(fnrsgrpsj)<>neuesschuljahr)COR (wert( +fnrsgrphj)<>neueshalbjahr)).plausipruefungvorbereiten:standardmeldung( +meldwarten,niltext);.keinemehrda:NOT nochwelcheda.bestandleermelden: +standardmeldung(meldbestleer,niltext).eingangsmaskenfehler:infeld(pruefstatus +).END PROC eingangsbehandlung;PROC klassennichtspeichern:nichtspeichernmelden +;neuerblock.nichtspeichernmelden:standardmeldung(meldnichtspeichern,niltext); +pause(10).END PROC klassennichtspeichern;PROC klassenspeichern:SELECT +verarbeitungsartOF CASE vaaendern:aenderungenspeichernCASE vaneu: +neueklassenspeichernCASE valoeschen:klassenloeschenEND SELECT . +aenderungenspeichern:speicherungdurchfuehren(PROC (BOOL VAR ) +pruefeaenderungsplausi,false,true,false).neueklassenspeichern: +speicherungdurchfuehren(PROC (BOOL VAR )pruefeneuplausi,true,false,false). +klassenloeschen:speicherungdurchfuehren(PROC (BOOL VAR )pruefeloeschplausi, +false,false,true).END PROC klassenspeichern;PROC pruefeloeschplausi(BOOL VAR +dateninordnung):INT VAR satzindex:=erstesfeld,plausind;FOR plausindFROM 1 +UPTO klassenzahlREP pruefezeile;IF NOT dateninordnungTHEN fehlermeldung; +LEAVE pruefeloeschplausiFI ;satzindexINCR felderprozeilePER .pruefezeile:IF +standardmaskenfeld(satzindex)<>niltextTHEN dateninordnung:= +schuelergruppevorhandenFI .schuelergruppevorhanden:klassengrunddateninpuffer; +putwert(fnrsgrpkennung,standardmaskenfeld(satzindex));search( +dnraktschuelergruppen,TRUE );aktuellesfeld:=satzindex;(dbstatus=null). +fehlermeldung:IF (akthalbjahr)CAND (dbstatus=null)THEN TEXT VAR pruefsg:= +vergleichsjgst+standardmaskenfeld(satzindex);standardmeldung(meldnichtleer, +pruefsg+meldtrenner)ELSE standardmeldung(meldnichtda,standardmaskenfeld( +satzindex)+meldtrenner)FI .END PROC pruefeloeschplausi;PROC pruefeneuplausi( +BOOL VAR dateninordnung):BOOL VAR parapheninordnung;INT VAR satzindex:= +erstesfeld,plausind;IF lehrerparaphen=niltextTHEN holeallelehrerparaphenFI ; +FOR plausindFROM 1UPTO klassenzahlREP IF standardmaskenfeld(satzindex)<> +niltextTHEN IF length(standardmaskenfeld(satzindex))>maxlaengekennungTHEN +dateninordnung:=FALSE ;standardmeldung(meldwertzulang,meldtrenner); +aktuellesfeld:=satzindex;LEAVE pruefeneuplausiELIF length(standardmaskenfeld( +satzindex+3))>maxlaengeintegabezTHEN dateninordnung:=FALSE ;standardmeldung( +meldwertzulang,meldtrenner);aktuellesfeld:=satzindex+3;LEAVE pruefeneuplausi +ELSE parapheninordnung:=korrekteparaphe(satzindex+1)CAND korrekteparaphe( +satzindex+2);dateninordnung:=parapheninordnungCAND schuelergruppenochnichtda; +IF NOT dateninordnungTHEN fehlermeldung;LEAVE pruefeneuplausiFI FI FI ; +satzindexINCR felderprozeilePER .schuelergruppenochnichtda:TEXT VAR pruefsg:= +vergleichsjgst+standardmaskenfeld(satzindex);klassengrunddateninpuffer; +putwert(fnrsgrpkennung,standardmaskenfeld(satzindex));search( +dnraktschuelergruppen,TRUE );aktuellesfeld:=satzindex;(dbstatus<>null). +fehlermeldung:IF NOT parapheninordnungTHEN IF lehrerparaphen=paraphentrenner +THEN standardmeldung(meldkeinelehrer,niltext)ELSE standardmeldung( +meldfalscherlehrer,standardmaskenfeld(aktuellesfeld)+meldtrenner)FI ELSE +standardmeldung(meldschonda,pruefsg+meldtrenner)FI .END PROC pruefeneuplausi; +PROC pruefeaenderungsplausi(BOOL VAR dateninordnung):INT VAR satzindex:= +erstesfeld,plausind;IF lehrerparaphen=niltextTHEN holeallelehrerparaphenFI ; +FOR plausindFROM 1UPTO klassenzahlREP IF length(standardmaskenfeld(satzindex) +)>maxlaengekennungTHEN dateninordnung:=FALSE ;standardmeldung(meldwertzulang, +meldtrenner);aktuellesfeld:=satzindex;LEAVE pruefeaenderungsplausiELIF length +(standardmaskenfeld(satzindex+3))>maxlaengeintegabezTHEN dateninordnung:= +FALSE ;standardmeldung(meldwertzulang,meldtrenner);aktuellesfeld:=satzindex+3 +;LEAVE pruefeaenderungsplausiELSE dateninordnung:=korrekteparaphe(satzindex+1 +)CAND korrekteparaphe(satzindex+2);IF NOT dateninordnungTHEN fehlermeldung; +LEAVE pruefeaenderungsplausiFI ;FI ;satzindexINCR felderprozeilePER . +fehlermeldung:IF lehrerparaphen=paraphentrennerTHEN standardmeldung( +meldkeinelehrer,niltext)ELSE standardmeldung(meldfalscherlehrer, +standardmaskenfeld(aktuellesfeld)+meldtrenner)FI .END PROC +pruefeaenderungsplausi;PROC speicherungdurchfuehren(PROC (BOOL VAR )plausi, +BOOL CONST neu,aendern,loeschen):pruefeplausibilitaet;IF dateninordnungTHEN +speicherntransaktion;neuerblockELSE eingabefehler;return(tofather)FI ;. +pruefeplausibilitaet:BOOL VAR dateninordnung:=true;standardmeldung(meldplausi +,niltext);plausi(dateninordnung).speicherntransaktion:BOOL VAR +transaktionsfehler:=false;BOOL VAR aenderungsvermerkzusetzen:=FALSE ; +aendernschleife;IF aenderungsvermerkzusetzenTHEN IF akthalbjahrTHEN +aenderungsvermerksetzen(wertaktuell)ELSE aenderungsvermerksetzen(wertgeplant) +FI ELSE pause(10)FI .aendernschleife:INT VAR suind;INT VAR zahlderaenderungen +:=null;INT VAR satzindex:=erstesfeld;FOR suindFROM 1UPTO klassenzahlREP +behandleklassensatz;satzindexINCR felderprozeilePER .behandleklassensatz:IF +datenveraendertTHEN fuehreaenderungaus;aenderungsvermerkzusetzen:=TRUE ; +meldevollzugFI .datenveraendert:((NOT aendern)CAND (standardmaskenfeld( +satzindex)<>niltext))COR (aendernCAND (altedaten(suind)<>(standardmaskenfeld( +satzindex+1)+trenner+standardmaskenfeld(satzindex+2)+trenner+ +standardmaskenfeld(satzindex+3)))).fuehreaenderungaus:lesenvorbereiten;lesen; +zurueckschreiben.lesenvorbereiten:zahlderaenderungenINCR 1; +klassengrunddateninpuffer;putwert(fnrsgrpkennung,standardmaskenfeld(satzindex +)).lesen:IF NOT neuTHEN search(dnraktschuelergruppen,TRUE ); +transaktionsfehler:=(dbstatus<>null)FI .zurueckschreiben:IF NOT +transaktionsfehlerTHEN saveupdateposition(dnraktschuelergruppen);IF NOT +loeschenTHEN putwert(fnrsgrplehrer,standardmaskenfeld(satzindex+1));putwert( +fnrsgrpstellvlehrer,standardmaskenfeld(satzindex+2));bereiteintegabezauf; +putwert(fnrsgrpintegabez,standardmaskenfeld(satzindex+3));IF aendernTHEN +selupdate(dnraktschuelergruppen)ELSE insert(dnraktschuelergruppen);# +wuerfelwarten(vergleichsjgst,dr10.05.88standardmaskenfeld(satzindex))#FI +ELSE delete(dnraktschuelergruppen);#wuerfelwarten(vergleichsjgst,dr10.05.88 +standardmaskenfeld(satzindex))#FI FI .bereiteintegabezauf:IF +standardmaskenfeld(satzindex+3)=niltextCAND length(standardmaskenfeld( +satzindex))<=2THEN standardmaskenfeld(standardmaskenfeld(erstesfeld-1)+ +standardmaskenfeld(satzindex),satzindex+3)FI .meldevollzug:TEXT VAR +meldungstext;IF dbstatus=nullTHEN meldungstext:=vergleichsjgst+ +standardmaskenfeld(satzindex)+meldtrenner;IF NOT loeschenTHEN standardmeldung +(meldspeicherung,meldungstext)ELSE standardmeldung(meldloeschung,meldungstext +)FI ELSE meldungstext:=text(dbstatus)+meldtrenner;meldungstextCAT ( +vergleichsjgst+standardmaskenfeld(satzindex));meldungstextCAT meldtrenner; +standardmeldung(meldspeicherfehler,meldungstext);return(tofather);LEAVE +speicherungdurchfuehrenFI ;infeld(satzindex).eingabefehler:infeld( +aktuellesfeld).END PROC speicherungdurchfuehren;PROC neuerblock:enter( +tograndfather)END PROC neuerblock;PROC blocklesenundausgeben:SELECT +verarbeitungsartOF CASE vaaendern:aenderungsblocklesenCASE vaneu: +blocklesenneuCASE valoeschen:blocklesenloeschenEND SELECT .blocklesenneu: +neuerbildschirm.blocklesenloeschen:neuerbildschirm; +paraphenfelderundintegabezsperren.paraphenfelderundintegabezsperren:INT VAR +sperrfeld:=erstesfeld+1;INT VAR i;FOR iFROM 1UPTO klassenproseiteREP +feldschutz(sperrfeld);feldschutz(sperrfeld+1);feldschutz(sperrfeld+2); +sperrfeldINCR felderprozeilePER .END PROC blocklesenundausgeben;PROC +neuerbildschirm:vorbereiten;gewuenschteszeigen;nachbereiten.vorbereiten: +standardmaskenfeld(vergleichsjgst,erstesfeld-1);aktuellesfeld:=erstesfeld. +gewuenschteszeigen:IF fortschreibungTHEN TEXT VAR altejgst:=vergleichsjgst; +TEXT VAR altesschuljahr:=neuesschuljahr,alteshalbjahr:=neueshalbjahr; +klassenzahl:=null;IF fortschreibungneuesschuljahrTHEN vergleichsjgst:= +jgstaufber(text(int(altejgst)-1));FI ;neuesschuljahr:=schulkenndatum(keysj); +neueshalbjahr:=schulkenndatum(keyshj);klassengrunddateninpuffer; +statleseschleife(dnraktschuelergruppen,vergleichsjgst,niltext,fnrsgrpjgst, +fnrsgrpkennung,PROC zeigeklassendaten);vergleichsjgst:=altejgst; +neuesschuljahr:=altesschuljahr;neueshalbjahr:=alteshalbjahrFI .nachbereiten: +klassenzahl:=klassenproseite;infeld(standardanfang);standardfelderausgeben; +infeld(erstesfeld).END PROC neuerbildschirm;PROC aenderungsblocklesen: +vorbereiten;gewuenschteszeigen;nachbereiten.vorbereiten:standardmeldung( +meldwarten,niltext);klassenzahl:=null;standardmaskenfeld(vergleichsjgst, +erstesfeld-1);aktuellesfeld:=erstesfeld.gewuenschteszeigen: +klassengrunddateninpuffer;statleseschleife(dnraktschuelergruppen, +vergleichsjgst,niltext,fnrsgrpjgst,fnrsgrpkennung,PROC zeigeklassendaten). +nachbereiten:restlichezeilenloeschen;infeld(standardanfang); +standardfelderausgeben;infeld(standardeinstieg).restlichezeilenloeschen:INT +VAR zeilenzaehler;INT VAR zeilenfeld:=(klassenzahl*felderprozeile)+erstesfeld +;FOR zeilenzaehlerFROM klassenzahl+1UPTO klassenproseiteREP loeschezeilePER . +loeschezeile:INT VAR zeilenincr;FOR zeilenincrFROM 1UPTO felderprozeileREP +standardmaskenfeld(standardfeldlaenge(zeilenfeld)*blank,zeilenfeld); +feldschutz(zeilenfeld);zeilenfeldINCR 1PER ;.END PROC aenderungsblocklesen; +PROC zeigeklassendaten(BOOL VAR schluss):IF gehoertdazuTHEN klassenzahlINCR 1 +;kennungzeigen;paraphenzeigen;integabezzeigenFI .gehoertdazu:schluss:=( +jgstaufber(wert(fnrsgrpjgst))<>vergleichsjgst)COR klassenzahl=klassenproseite +;NOT schluss.kennungzeigen:TEXT CONST zug:=wert(fnrsgrpkennung);kennung( +klassenzahl):=zug;standardmaskenfeld(zug,aktuellesfeld);IF NOT fortschreibung +THEN feldschutz(aktuellesfeld);FI ;aktuellesfeldINCR 1.paraphenzeigen:TEXT +VAR paraphen:=wert(fnrsgrplehrer);TEXT CONST par:=wert(fnrsgrpstellvlehrer); +standardmaskenfeld(paraphen,aktuellesfeld);feldfrei(aktuellesfeld); +aktuellesfeldINCR 1;standardmaskenfeld(par,aktuellesfeld);feldfrei( +aktuellesfeld);aktuellesfeldINCR 1;paraphenCAT (trenner+par);altedaten( +klassenzahl):=paraphen+trenner+wert(fnrsgrpintegabez).integabezzeigen: +standardmaskenfeld(wert(fnrsgrpintegabez),aktuellesfeld);feldfrei( +aktuellesfeld);aktuellesfeldINCR 1.END PROC zeigeklassendaten;PROC +feldloeschen(INT CONST laenge):standardmaskenfeld(laenge*blank,aktuellesfeld) +END PROC feldloeschen;PROC holeallelehrerparaphen:lehrerparaphen:= +paraphentrenner;statleseschleife(dnrlehrer,niltext,niltext,fnrlparaphe, +fnrlfamname,PROC setzelehrparaphe)END PROC holeallelehrerparaphen;PROC +neuesschuljahrhalbjahrerrechnen:IF schuljahr=niltextTHEN schuljahr:= +schulkenndatum(keysj);halbjahr:=schulkenndatum(keyshj)FI ;IF akthalbjahrTHEN +neuesschuljahr:=schuljahr;neueshalbjahr:=halbjahrELIF halbjahr=hj1THEN +neuesschuljahr:=schuljahr;neueshalbjahr:=hj2ELSE ersteshalbjahrneuesschuljahr +FI .ersteshalbjahrneuesschuljahr:neuesschuljahr:=subtext(schuljahr,3,4); +neuesschuljahrCAT text(int(neuesschuljahr)+1,2);neueshalbjahr:=hj1.END PROC +neuesschuljahrhalbjahrerrechnen;PROC setzelehrparaphe(BOOL VAR b): +lehrerparaphenCAT paraphe(wert(fnrlparaphe))END PROC setzelehrparaphe;TEXT +PROC paraphe(TEXT CONST p):p+paraphentrennerEND PROC paraphe;BOOL PROC +korrekteparaphe(INT CONST ind):TEXT CONST par:=standardmaskenfeld(ind);INT +VAR paraphenpos:=pos(lehrerparaphen,paraphentrenner+paraphe(par)); +aktuellesfeld:=ind;(par=niltext)COR (paraphenpos>null)END PROC +korrekteparaphe;PROC klassengrunddateninpuffer:putwert(fnrsgrpsj, +neuesschuljahr);putwert(fnrsgrphj,neueshalbjahr);putwert(fnrsgrpjgst, +vergleichsjgst);END PROC klassengrunddateninpuffer;END PACKET +listenweiseklassenerf; + diff --git a/app/schulis/2.2.1/src/0.raumgruppen bearbeiten b/app/schulis/2.2.1/src/0.raumgruppen bearbeiten new file mode 100644 index 0000000..b61497b --- /dev/null +++ b/app/schulis/2.2.1/src/0.raumgruppen bearbeiten @@ -0,0 +1,54 @@ +PACKET erfraumgruppenDEFINES erfassungraumgruppen:LET maskenname= +"ms erf raumgruppen",fnrkennung=2,fnrletztesfeld=17,trenner=" = ",maxraeume= +15,laengeraumgruppe=4,laengeeinerraumangabe=4;TEXT VAR raeume:="";TEXT VAR +raum:="";INT VAR anzraeume;TEXT VAR gueltigeraeume:="";LET postrenner="�"; +LET meldnrungueltigerraum=55,meldnrraumgruppezulang=60;LET sachgebietraum= +"c02 raeume"PROC erfassungraumgruppen(INT CONST proznr):systemdboff; +reinitparsing;SELECT proznrOF CASE 1:setzeerfassungsparameterCASE 2: +zeigeraumgruppezurbearbeitungCASE 3:pruefeplausibilitaetCASE 4: +setzewertefuerdbspeicherungCASE 5:setzeidentiobjektfuerobjektlisteCASE 6: +raumgruppelesenCASE 7:raumgruppeaendernCASE 8:raumgruppeeinfuegenCASE 9: +raumgruppeloeschenEND SELECT END PROC erfassungraumgruppen;PROC +setzeerfassungsparameter:gueltigeraeume:="";setzeerfassungsparameter( +dnrraumgruppen,maskenname,fnrletztesfeld)END PROC setzeerfassungsparameter; +PROC zeigeraumgruppezurbearbeitung:setzeerfassungsfeld(wert(fnrrgraumgrp), +fnrkennung);raeume:=wert(fnrrgraeume);anzraeume:=(length(raeume))DIV +laengeeinerraumangabe;INT VAR i:=1;WHILE i<=anzraeumeREP raum:=subtext(raeume +,1,laengeeinerraumangabe);raeume:=subtext(raeume,laengeeinerraumangabe+1); +setzeerfassungsfeld(compress(raum),i+fnrkennung);iINCR 1PER ;WHILE i<= +maxraeumeREP setzeerfassungsfeld("",i+fnrkennung);iINCR 1PER ;END PROC +zeigeraumgruppezurbearbeitung;PROC pruefeplausibilitaet:LET leer="",null=0; +IF gueltigeraeume=""THEN holealleraeumeingueltigeraeumeFI ;INT VAR +fehlerstatus;pruefe(1,erfassungsmaske,PROC erfassungswert,fnrkennung,null, +null,leer,fehlerstatus);IF fehlerstatus<>0THEN setzefehlerstatus(fehlerstatus +);LEAVE pruefeplausibilitaetELIF length(erfassungswert(fnrkennung))> +laengeraumgruppeTHEN meldeauffaellig(erfassungsmaske,meldnrraumgruppezulang); +setzefehlerstatus(fnrkennung);LEAVE pruefeplausibilitaetFI ;INT VAR i;FOR i +FROM 1UPTO maxraeumeREP INT VAR fnrraum:=i+fnrkennung;IF erfassungswert( +fnrraum)<>""THEN IF ungueltigeraumangabeTHEN setzefehlerstatus(fnrraum); +meldeauffaellig(erfassungsmaske,meldnrungueltigerraum);LEAVE +pruefeplausibilitaetFI ;FI ;PER .ungueltigeraumangabe:pos(gueltigeraeume, +suchwert)=0.suchwert:postrenner+compress(erfassungswert(fnrraum))+postrenner. +END PROC pruefeplausibilitaet;PROC holealleraeumeingueltigeraeume: +gueltigeraeume:=postrenner;statleseschleife(dnrschluessel,sachgebietraum,"", +fnrschlsachgebiet,fnrschlschluessel,PROC raumlesen);END PROC +holealleraeumeingueltigeraeume;PROC raumlesen(BOOL VAR b):IF dbstatus<>0COR +wert(fnrschlsachgebiet)>sachgebietraumTHEN b:=TRUE ELSE gueltigeraeumeCAT +wert(fnrschlschluessel)+postrennerFI END PROC raumlesen;PROC +setzewertefuerdbspeicherung:putwert(fnrrgraumgrp,erfassungswert(fnrkennung)); +INT VAR i;raeume:="";FOR iFROM fnrkennung+1UPTO fnrletztesfeldREP raum:= +erfassungswert(i);IF raum<>""THEN raeumeCAT text(raum,laengeeinerraumangabe) +FI PER ;putwert(fnrrgraeume,raeume)END PROC setzewertefuerdbspeicherung;PROC +setzeidentiobjektfuerobjektliste:LET trennsymbolfuerobli="$";TEXT VAR +identizeile;identizeile:=wert(fnrrgraumgrp)+trenner+wert(fnrrgraeume); +setzeidentiwert(identizeilemitschluesselanhang). +identizeilemitschluesselanhang:identizeile+trennsymbolfuerobli+wert( +fnrrgraumgrp).END PROC setzeidentiobjektfuerobjektliste;PROC raumgruppelesen: +putwert(fnrrgraumgrp,schluessel);search(dnrraumgruppen,TRUE );IF dbstatus=ok +THEN saveupdateposition(dnrraumgruppen)FI END PROC raumgruppelesen;PROC +raumgruppeaendern:restoreupdateposition(dnrraumgruppen);update(dnrraumgruppen +)END PROC raumgruppeaendern;PROC raumgruppeeinfuegen:insert(dnrraumgruppen) +END PROC raumgruppeeinfuegen;PROC raumgruppeloeschen:delete(dnrraumgruppen) +END PROC raumgruppeloeschen;TEXT PROC schluessel:erfassungswert(fnrkennung) +END PROC schluessel;END PACKET erfraumgruppen; + diff --git a/app/schulis/2.2.1/src/0.schulis schrifttyp b/app/schulis/2.2.1/src/0.schulis schrifttyp new file mode 100644 index 0000000..19f6bf8 --- /dev/null +++ b/app/schulis/2.2.1/src/0.schulis schrifttyp @@ -0,0 +1,9 @@ +PACKET schulisschrifttypDEFINES schrifttyp,anschreibenschrifttyp, +mitteilungschrifttyp,setzeschuliszeichensatz:TEXT VAR zeichensatz:="";PROC +setzeschuliszeichensatz(TEXT CONST font):zeichensatz:=fontEND PROC +setzeschuliszeichensatz;TEXT PROC schrifttyp:zeichensatzEND PROC schrifttyp; +TEXT PROC anschreibenschrifttyp:zeichensatzEND PROC anschreibenschrifttyp; +TEXT PROC mitteilungschrifttyp:zeichensatzEND PROC mitteilungschrifttyp;IF +fontexists(font(1))THEN zeichensatz:=font(1)ELSE zeichensatz:=""FI .END +PACKET schulisschrifttyp; + diff --git a/app/schulis/2.2.1/src/0.schulkenndaten bearbeiten b/app/schulis/2.2.1/src/0.schulkenndaten bearbeiten new file mode 100644 index 0000000..d82c587 --- /dev/null +++ b/app/schulis/2.2.1/src/0.schulkenndaten bearbeiten @@ -0,0 +1,109 @@ +PACKET schulkenndatenbearbeitenDEFINES schulkenndatenbearbeiten, +schulkenndatenspeichern:LET maske="ms erf schulkenndaten";LET sachgebiet= +"c02 schulkenndaten";LET schuljahr="Schuljahr",schulhalbjahr="Schulhalbjahr", +anfangschulhj="Anfang Schulhalbjahr",endeschulhj="Ende Schulhalbjahr", +schulname="Schulname",schulleiter="Schulleiter",schulort="Schulort", +schulstrasse="Schulstraße",schulrufnummer="Schulrufnummer";LET fnrschuljahr=2 +,fnrschulhalbjahr=3,fnranfangschulhj=4,fnrendeschulhj=5,fnrschulname=6, +fnrschulleiter=7,fnrschulort=8,fnrschulstrasse=9,fnrschulrufnummer=10;LET +melddatenwerdengespeichert=50,meldfehlendesdatum=52,melddatennichtspeichern= +63,meldkeinupdatemoeglich=73,meldungueltigesdatum=157,meldungueltigeangabe= +162;INT VAR ifnr;LET maxfelder=10;ROW maxfelderTEXT VAR alterwert;LET +laengeschuljahr=4;INT VAR erstesjahr,zweitesjahr;LET zwischenpunkt=".", +logbucheintrag="Anw. 10.3.1 Änderung an den Schulkenndaten";PROC +schulkenndatenbearbeiten:standardstartproc(maske);zeigeschulkenndaten;infeld( +fnrschuljahr);standardnproc.zeigeschulkenndaten:alterwert(fnrschuljahr):= +schulkenndatum(schuljahr);alterwert(fnrschulhalbjahr):=schulkenndatum( +schulhalbjahr);alterwert(fnranfangschulhj):=kurzdatum(schulkenndatum( +anfangschulhj));alterwert(fnrendeschulhj):=kurzdatum(schulkenndatum( +endeschulhj));alterwert(fnrschulname):=schulkenndatum(schulname);alterwert( +fnrschulleiter):=schulkenndatum(schulleiter);alterwert(fnrschulort):= +schulkenndatum(schulort);alterwert(fnrschulstrasse):=schulkenndatum( +schulstrasse);alterwert(fnrschulrufnummer):=schulkenndatum(schulrufnummer); +FOR ifnrFROM fnrschuljahrUPTO maxfelderREP standardmaskenfeld(alterwert(ifnr) +,ifnr)PER ;infeld(fnrschuljahr);standardfelderausgeben.END PROC +schulkenndatenbearbeiten;PROC schulkenndatenspeichern(BOOL CONST speichern): +IF NOT speichernTHEN standardmeldung(melddatennichtspeichern,"");pause(10); +return(2)ELSE INT VAR fehlerstatus:=0;dbstatus(0);pruefeplausibilitaet( +fehlerstatus);IF fehlerstatus=0THEN datenspeichern;logeintrag(logbucheintrag) +;IF dbstatus<>0THEN standardmeldung(meldkeinupdatemoeglich,"");return(1)ELSE +return(2)FI ELSE infeld(fehlerstatus);return(1)FI FI .datenspeichern: +standardmeldung(melddatenwerdengespeichert,"");IF standardmaskenfeld( +fnrschuljahr)<>alterwert(fnrschuljahr)THEN putwert(fnrschlsachgebiet, +sachgebiet);putwert(fnrschlschluessel,schuljahr);search(dnrschluessel,TRUE ); +putwert(fnrschllangtext,standardmaskenfeld(fnrschuljahr));IF dbstatus=0THEN +update(dnrschluessel);IF dbstatus<>0THEN infeld(fnrschuljahr);LEAVE +datenspeichernFI ELSE insert(dnrschluessel)FI FI ;IF standardmaskenfeld( +fnrschulhalbjahr)<>alterwert(fnrschulhalbjahr)THEN putwert(fnrschlsachgebiet, +sachgebiet);putwert(fnrschlschluessel,schulhalbjahr);search(dnrschluessel, +TRUE );putwert(fnrschllangtext,standardmaskenfeld(fnrschulhalbjahr));IF +dbstatus=0THEN update(dnrschluessel);IF dbstatus<>0THEN infeld( +fnrschulhalbjahr);LEAVE datenspeichernFI ELSE insert(dnrschluessel)FI FI ;IF +standardmaskenfeld(fnranfangschulhj)<>alterwert(fnranfangschulhj)THEN putwert +(fnrschlsachgebiet,sachgebiet);putwert(fnrschlschluessel,anfangschulhj); +search(dnrschluessel,TRUE );putwert(fnrschllangtext,langdatum( +standardmaskenfeld(fnranfangschulhj)));IF dbstatus=0THEN update(dnrschluessel +);IF dbstatus<>0THEN infeld(fnranfangschulhj);LEAVE datenspeichernFI ELSE +insert(dnrschluessel)FI FI ;IF standardmaskenfeld(fnrendeschulhj)<>alterwert( +fnrendeschulhj)THEN putwert(fnrschlsachgebiet,sachgebiet);putwert( +fnrschlschluessel,endeschulhj);search(dnrschluessel,TRUE );putwert( +fnrschllangtext,langdatum(standardmaskenfeld(fnrendeschulhj)));IF dbstatus=0 +THEN update(dnrschluessel);IF dbstatus<>0THEN infeld(fnrendeschulhj);LEAVE +datenspeichernFI ELSE insert(dnrschluessel)FI FI ;IF standardmaskenfeld( +fnrschulname)<>alterwert(fnrschulname)THEN putwert(fnrschlsachgebiet, +sachgebiet);putwert(fnrschlschluessel,schulname);search(dnrschluessel,TRUE ); +putwert(fnrschllangtext,standardmaskenfeld(fnrschulname));IF dbstatus=0THEN +update(dnrschluessel);IF dbstatus<>0THEN infeld(fnrschulname);LEAVE +datenspeichernFI ELSE insert(dnrschluessel)FI FI ;IF standardmaskenfeld( +fnrschulleiter)<>alterwert(fnrschulleiter)THEN putwert(fnrschlsachgebiet, +sachgebiet);putwert(fnrschlschluessel,schulleiter);search(dnrschluessel,TRUE +);putwert(fnrschllangtext,standardmaskenfeld(fnrschulleiter));IF dbstatus=0 +THEN update(dnrschluessel);IF dbstatus<>0THEN infeld(fnrschulleiter);LEAVE +datenspeichernFI ELSE insert(dnrschluessel)FI FI ;IF standardmaskenfeld( +fnrschulort)<>alterwert(fnrschulort)THEN putwert(fnrschlsachgebiet,sachgebiet +);putwert(fnrschlschluessel,schulort);search(dnrschluessel,TRUE );putwert( +fnrschllangtext,standardmaskenfeld(fnrschulort));IF dbstatus=0THEN update( +dnrschluessel);IF dbstatus<>0THEN infeld(fnrschulort);LEAVE datenspeichernFI +ELSE insert(dnrschluessel)FI FI ;IF standardmaskenfeld(fnrschulstrasse)<> +alterwert(fnrschulstrasse)THEN putwert(fnrschlsachgebiet,sachgebiet);putwert( +fnrschlschluessel,schulstrasse);search(dnrschluessel,TRUE );putwert( +fnrschllangtext,standardmaskenfeld(fnrschulstrasse));IF dbstatus=0THEN update +(dnrschluessel);IF dbstatus<>0THEN infeld(fnrschulstrasse);LEAVE +datenspeichernFI ELSE insert(dnrschluessel)FI FI ;IF standardmaskenfeld( +fnrschulrufnummer)<>alterwert(fnrschulrufnummer)THEN putwert( +fnrschlsachgebiet,sachgebiet);putwert(fnrschlschluessel,schulrufnummer); +search(dnrschluessel,TRUE );putwert(fnrschllangtext,standardmaskenfeld( +fnrschulrufnummer));IF dbstatus=0THEN update(dnrschluessel);IF dbstatus<>0 +THEN infeld(fnrschulrufnummer);LEAVE datenspeichernFI ELSE insert( +dnrschluessel)FI FI .END PROC schulkenndatenspeichern;PROC +pruefeplausibilitaet(INT VAR fstatus):TEXT VAR pruefwert;pruefwert:= +standardmaskenfeld(fnrschuljahr);IF length(pruefwert)<>laengeschuljahrTHEN +standardmeldung(meldungueltigeangabe,"");fstatus:=fnrschuljahr;LEAVE +pruefeplausibilitaetFI ;erstesjahr:=int(pruefwert);IF NOT lastconversionok +THEN standardmeldung(meldungueltigeangabe,"");fstatus:=fnrschuljahr;LEAVE +pruefeplausibilitaetELIF erstesjahr<0THEN standardmeldung( +meldungueltigeangabe,"");fstatus:=fnrschuljahr;LEAVE pruefeplausibilitaetFI ; +erstesjahr:=int(subtext(pruefwert,1,2));zweitesjahr:=int(subtext(pruefwert,3, +4));IF ((erstesjahr+1)MOD 100)<>zweitesjahrTHEN standardmeldung( +meldungueltigeangabe,"");fstatus:=fnrschuljahr;LEAVE pruefeplausibilitaetFI ; +IF standardmaskenfeld(fnrschulhalbjahr)<>"1"AND standardmaskenfeld( +fnrschulhalbjahr)<>"2"THEN standardmeldung(meldungueltigeangabe,"");fstatus:= +fnrschulhalbjahr;LEAVE pruefeplausibilitaetFI ;IF fehlerhaftesdatum( +standardmaskenfeld(fnranfangschulhj))THEN standardmeldung( +meldungueltigesdatum,"");fstatus:=fnranfangschulhj;LEAVE pruefeplausibilitaet +FI ;IF fehlerhaftesdatum(standardmaskenfeld(fnrendeschulhj))THEN +standardmeldung(meldungueltigesdatum,"");fstatus:=fnrendeschulhj;LEAVE +pruefeplausibilitaetFI ;IF subtext(standardmaskenfeld(fnrendeschulhj),5,6)<> +"00"AND NOT (datum(standardmaskenfeld(fnrendeschulhj))>datum( +standardmaskenfeld(fnranfangschulhj)))THEN standardmeldung( +meldungueltigesdatum,"");fstatus:=fnrendeschulhj;LEAVE pruefeplausibilitaet +FI ;IF standardmaskenfeld(fnrschulname)=""THEN standardmeldung( +meldfehlendesdatum,"");fstatus:=fnrschulname;LEAVE pruefeplausibilitaetFI . +END PROC pruefeplausibilitaet;BOOL PROC fehlerhaftesdatum(TEXT CONST +testdatum):datum(testdatum)=nildatumEND PROC fehlerhaftesdatum;TEXT PROC +kurzdatum(TEXT CONST langdatum):subtext(langdatum,1,2)+subtext(langdatum,4,5) ++subtext(langdatum,7,8)END PROC kurzdatum;TEXT PROC langdatum(TEXT CONST +kurzdatum):subtext(kurzdatum,1,2)+zwischenpunkt+subtext(kurzdatum,3,4)+ +zwischenpunkt+subtext(kurzdatum,5,6)END PROC langdatum;END PACKET +schulkenndatenbearbeiten + diff --git a/app/schulis/2.2.1/src/1.abgegangene aussortieren b/app/schulis/2.2.1/src/1.abgegangene aussortieren new file mode 100644 index 0000000..ac73783 --- /dev/null +++ b/app/schulis/2.2.1/src/1.abgegangene aussortieren @@ -0,0 +1,75 @@ +PACKET abgegangeneaussortierenDEFINES +abgegangeneaussortiereneingangsbehandlung,abgegangeneaussortieren:LET null=0, +fnrdatum=2,fnrankreuz1=3,fnrankreuz2=4,pruefartalternative=5,niltext="", +tofather=1,meldtrenner="#",namenstrenner=", ",meldfalschesdatum=157, +meldbearbeitung=153,meldspeicherfehler=131,meldende=158;LET falschertag="00", +keindatum="01.01.00";LET anzschlfelder=3;LET bestandabgegangene="abg", +bestandlaufsj="ls";LET jgstufe10=10;LET logtextbeginn1= +"Anw. 1.3.4 Abgemeldete bis ",logtextbeginn2="Anw. 1.3.4 Abgegangene bis ", +logtextende1=" aussortieren",logtextende2=" entfernen";ROW anzschlfelderTEXT +VAR key;TEXT VAR jgst,zugtutor;PROC abgegangeneaussortiereneingangsbehandlung +:reinitparsing;standardvproc(maske(vergleichsknoten)).END PROC +abgegangeneaussortiereneingangsbehandlung;PROC abgegangeneaussortieren: +pruefeplausibilitaet;IF allesokTHEN aussortierendurchfuehrenELSE +fehlerbehandlungFI .pruefeplausibilitaet:pruefedatum;IF allesokTHEN +pruefeankreuzfelderFI .allesok:INT VAR pruefstatus;pruefstatus=null. +pruefeankreuzfelder:standardpruefe(pruefartalternative,fnrankreuz1, +fnrankreuz2,null,niltext,pruefstatus);.pruefedatum:TEXT VAR stichtag:= +standardmaskenfeld(fnrdatum);IF (subtext(stichtag,1,2)=falschertag)COR (datum +(stichtag)=nildatum)THEN pruefstatus:=fnrdatum;standardmeldung( +meldfalschesdatum,niltext);ELSE pruefstatus:=nullFI .fehlerbehandlung:infeld( +pruefstatus);return(tofather).aussortierendurchfuehren:aussortieren(stichtag, +standardmaskenfeld(fnrankreuz1)<>niltext);return(tofather).END PROC +abgegangeneaussortieren;PROC aussortieren(TEXT CONST stichtag,BOOL CONST +uebertragen):TEXT VAR eintrag;IF uebertragenTHEN inbestandabgegangeneELSE +endgueltigloeschenFI .inbestandabgegangene:eintrag:=logtextbeginn1;eintrag +CAT datumskonversion(stichtag);eintragCAT logtextende1;logeintrag(eintrag); +leseschleife(ixsustatabgdat,bestandlaufsj,stichtag,PROC +abgegangeneuebertragen).endgueltigloeschen:eintrag:=logtextbeginn2;eintrag +CAT datumskonversion(stichtag);eintragCAT logtextende2;logeintrag(eintrag); +leseschleife(ixsustatabgdat,bestandabgegangene,stichtag,PROC +endgueltigloeschen).END PROC aussortieren;PROC leseschleife(INT CONST +sekbestandindex,TEXT CONST sustatus,TEXT CONST stichtag,PROC (BOOL VAR ) +aktion):erstenlesen;WHILE NOT schlussREP ausfuehrung;naechstenlesenPER ; +endemeldung.erstenlesen:BOOL VAR endegewuenscht:=FALSE ;putwert(fnrsustatuss, +sustatus);putwert(fnrsuabgdats,datumskonversion(stichtag));search( +sekbestandindex,FALSE );IF NOT gueltigesabgangsdatum(sustatus,stichtag)THEN +pred(sekbestandindex)FI ;statusueberpruefen.schluss:(dbstatus<>null)COR +endegewuenscht.ausfuehrung:bearbeitungmelden;aktion(endegewuenscht). +naechstenlesen:pred(sekbestandindex);statusueberpruefen.endemeldung:IF NOT +endegewuenschtTHEN standardmeldung(meldende,niltext)FI .statusueberpruefen: +IF gueltigesabgangsdatum(sustatus,stichtag)THEN lesenzumaendernELSE dbstatus( +notfound)FI .END PROC leseschleife;PROC abgegangeneuebertragen(BOOL VAR +schluss):delete(dnrschueler);IF dbstatus=okTHEN IF intwert(fnrsusgrpjgst)>= +jgstufe10THEN kurswahlserveraktualisieren(wert(fnrsusgrpjgst),"","")FI ; +putwert(fnrsustatuss,bestandabgegangene);insert(dnrschueler);IF dbstatus<>ok +THEN aktbestandzuruecksetzen;schlussundfehlermeldenFI ; +aktbestandzuruecksetzenELSE schlussundfehlermeldenFI .aktbestandzuruecksetzen +:putwert(fnrsustatuss,bestandlaufsj);.schlussundfehlermelden:schluss:=TRUE ; +fehlermelden.END PROC abgegangeneuebertragen;PROC endgueltigloeschen(BOOL +VAR schluss):#aenderunginstatraumvorbereiten(TRUE );dr11.05.88#IF NOT schluss +THEN #einenschuelerausstatraumentfernen;dr11.05.88#datenloeschen( +dnrhalbjahresdaten,schluss);IF NOT schlussTHEN diffdatenloeschen;delete( +dnrschueler);schluss:=dbstatus<>null;FI FI ;IF schlussTHEN # +einenschuelerinstatraumeinfuegen;dr11.05.88#fehlermeldenFI .diffdatenloeschen +:IF wert(fnrsudiffdatennrs)<>""THEN putwert(fnrdddiffdatennr,wert( +fnrsudiffdatennrs));search(dnrdiffdaten,TRUE );IF dbstatus=okTHEN delete( +dnrdiffdaten)FI FI .END PROC endgueltigloeschen;PROC datenloeschen(INT CONST +dateinummer,BOOL VAR schluss):inittupel(dateinummer);putwert(dateinummer+1, +key(1));putwert(dateinummer+2,key(2));putwert(dateinummer+3,datumskonversion( +key(3)));search(dateinummer,FALSE );WHILE dbstatus=okCAND gleicherschueler +REP delete(dateinummer);IF dbstatus<>okTHEN schluss:=TRUE ELSE succ( +dateinummer)FI PER .gleicherschueler:key(1)=wert(dateinummer+1)CAND key(2)= +wert(dateinummer+2)CAND key(3)=datumrekonversion(wert(dateinummer+3)).END +PROC datenloeschen;BOOL PROC gueltigesabgangsdatum(TEXT CONST bestand, +stichtag):dbstatus=okCAND wert(fnrsustatuss)=bestandCAND wert(fnrsuabgdats)<> +keindatumCAND datum(wert(fnrsuabgdats))<=datum(datumskonversion(stichtag)). +END PROC gueltigesabgangsdatum;PROC lesenzumaendern:key(1):=wert( +fnrsufamnames);key(2):=wert(fnrsurufnames);key(3):=datumrekonversion(wert( +fnrsugebdatums));jgst:=wert(fnrsusgrpjgst);zugtutor:=wert(fnrsusgrpzugtut) +END PROC lesenzumaendern;PROC bearbeitungmelden:standardmeldung( +meldbearbeitung,key(1)+namenstrenner+key(2)+meldtrenner+jgst+zugtutor+ +meldtrenner)END PROC bearbeitungmelden;PROC fehlermelden:standardmeldung( +meldspeicherfehler,text(dbstatus)+meldtrenner+key(1)+namenstrenner+key(2)+ +meldtrenner);END PROC fehlermelden;END PACKET abgegangeneaussortieren + diff --git a/app/schulis/2.2.1/src/1.anschr.anmeldebestaetigung fuer jgst 5 und 11 b/app/schulis/2.2.1/src/1.anschr.anmeldebestaetigung fuer jgst 5 und 11 new file mode 100644 index 0000000..608e8e4 --- /dev/null +++ b/app/schulis/2.2.1/src/1.anschr.anmeldebestaetigung fuer jgst 5 und 11 @@ -0,0 +1,58 @@ +PACKET anschranmeldebestaetigungfuerjgst5und11DEFINES anschreibenbesteingang, +anschreibenbestneustarten,sonderwertebestneu,multistopanmeld:LET swindexvollj +=511,swindexminderjmaennlweibl=512,vollj="v",minderjaehrig="m",maennl="m", +weibl="w",trennsymbol=" ",punkt=".";LET vordruckneu11= +"vordruck anmeldebestaetigung zur jgst 11";LET vordruckneu5= +"vordruck anmeldebestaetigung zur jgst 5";LET hellan="",hellaus=" ",maske= +"ms anschreiben best",jgstfeldnr=3,bestandfeldnr=2,namefeldnr=4,vornamefeldnr +=5,gebdatfeldnr=6,bildschirmfeldnr=7,druckerfeldnr=8;LET niltext="", +fehlermeldnr=56,wartemeldnr=69,datumfehler=157,vater=1;LET jgst05="05";INT +VAR eingabestatus;BOOL VAR anschreibenfuerjgst5;PROC anschreibenbesteingang( +TEXT CONST jgst):anschreibenfuerjgst5:=(jgst=jgst05);standardstartproc(maske) +;standardmaskenfeld(hellan+jgst+hellaus,jgstfeldnr);standardnprocEND PROC +anschreibenbesteingang;BOOL PROC sonderwertebestneu:IF NOT +anschreibenfuerjgst5THEN IF volljaehrig(wert(fnrsugebdatums))THEN +setzesonderwert(swindexvollj,vollj);setzesonderwert(swindexminderjmaennlweibl +,niltext)ELSE setzesonderwert(swindexvollj,minderjaehrig);IF wert( +fnrsugeschlechts)=weiblTHEN setzesonderwert(swindexminderjmaennlweibl,weibl) +ELSE setzesonderwert(swindexminderjmaennlweibl,maennl)FI FI FI ;IF +andereerzieheradresseCAND NOT volljaehrig(wert(fnrsugebdatums))#sf30.10.# +THEN leseerzieheradresse;uebertrageerzieheradresseFI ;adressat((wert( +fnrsuvornames)SUB 1)+punkt+trennsymbol+wert(fnrsufamnames));TRUE . +andereerzieheradresse:#intwert(fnradresskuerzel)<>0#wert(fnrsuplzorte)<>"". +leseerzieheradresse:#inittupel(dnradressen);putwert(dnradressen+1,wert( +fnradresskuerzel));search(dnradressen,TRUE )#.uebertrageerzieheradresse: +putwert(fnrsustrnrs,wert(fnrsustrnre));putwert(fnrsuplzorts,wert(fnrsuplzorte +)).END PROC sonderwertebestneu;PROC anschreibenbestneustarten:TEXT VAR +vordruckneu:="";lesemaskenwerte;IF NOT (auswahldruckeroderbildschirmok)THEN +meldedenfehler;infeld(bildschirmfeldnr);zurueckzumdialogELSE IF +schluesselmitdatumangegebenTHEN IF schuelerschluessel3okTHEN +startenausfuehrenELSE standardmeldung(datumfehler,niltext);infeld( +gebdatfeldnr);zurueckzumdialogFI ;ELSE IF (alleschuelergewaehltXOR +einschuelerohnedatumgewaehlt)THEN startenausfuehrenELSE meldedenfehler; +zurueckzumdialogFI ;FI ;FI .lesemaskenwerte:TEXT CONST schluessel1:= +standardmaskenfeld(namefeldnr);TEXT CONST schluessel2:=standardmaskenfeld( +vornamefeldnr);TEXT CONST schluessel3:=standardmaskenfeld(gebdatfeldnr);BOOL +CONST anschreibenzeigen:=standardmaskenfeld(bildschirmfeldnr)<>niltext;BOOL +CONST alle:=standardmaskenfeld(bestandfeldnr)<>niltext. +auswahldruckeroderbildschirmok:(standardmaskenfeld(bildschirmfeldnr)<>niltext +)XOR (standardmaskenfeld(druckerfeldnr)<>niltext).schluesselmitdatumangegeben +:NOT alleAND schluessel1<>niltextAND schluessel2<>niltextAND schluessel3<> +niltext.alleschuelergewaehlt:alleAND (schluessel1+schluessel2+schluessel3)= +niltext.einschuelerohnedatumgewaehlt:NOT alleAND schluessel1<>niltextAND +schluessel3=niltext.schuelerschluessel3ok:standardpruefe(6,6,0,0,niltext, +eingabestatus);IF NOT (eingabestatus=0)THEN FALSE ELSE TRUE FI . +meldedenfehler:standardmeldung(fehlermeldnr,niltext).zurueckzumdialog:return( +vater).startenausfuehren:standardmeldung(wartemeldnr,niltext); +initialisieredruckerfueranschreiben;inittupel(dnrschueler);parsenooffields(30 +);uebernimmnamen;IF anschreibenfuerjgst5THEN putwert(fnrsustatuss,"n05"); +vordruckneu:=vordruckneu5ELSE putwert(fnrsustatuss,"n11");vordruckneu:= +vordruckneu11FI ;anschreibenstart(ixsustatfamrufgeb,vordruckneu, +anschreibenzeigen,(schluessel1+schluessel2)<>"",BOOL PROC sonderwertebestneu, +BOOL PROC multistopanmeld).uebernimmnamen:putwert(fnrsufamnames,schluessel1); +putwert(fnrsurufnames,schluessel2);putwert(fnrsugebdatums,datumskonversion( +schluessel3)).END PROC anschreibenbestneustarten;BOOL PROC multistopanmeld: +BOOL VAR b;IF anschreibenfuerjgst5THEN b:=wert(fnrsustatuss)="n05"ELSE b:= +wert(fnrsustatuss)="n11"FI ;bENDPROC multistopanmeld;END PACKET +anschranmeldebestaetigungfuerjgst5und11; + diff --git a/app/schulis/2.2.1/src/1.anschr.mitteilungen neuangemeldete und abgemeldete b/app/schulis/2.2.1/src/1.anschr.mitteilungen neuangemeldete und abgemeldete new file mode 100644 index 0000000..3271256 --- /dev/null +++ b/app/schulis/2.2.1/src/1.anschr.mitteilungen neuangemeldete und abgemeldete @@ -0,0 +1,262 @@ +PACKET anschrmitteilungenneuangemeldeteundabgemeldeteDEFINES +mitteilungeingang,mitteilungende,mitteilungneuangstarten, +mitteilungabmeldungstarten,sonderwertemitteilungabmeldung, +sonderwertemitteilungneuangmithjd,sonderwertemitteilungneuangmitdiffd, +dummystop:LET laufenderbestand="ls";LET bestandfuerabgang="c02 abgang", +bestandfuerabschluss="c02 abschluss";LET swaktuelleshalbjahr=509, +sweintrittsdatum=512,swabgangsdatum=512,swschuelername=513,swgeburtsdatum=514 +,swabgangsgrund=515,swstrhausnr=516,swerreichterabschluss=516,swplzort=517, +swtelephonnr=518,swaktjgst=519,swklassenlehrer=520,#swbafoeg=521,dr05.03.88# +swkursanfang=530,swfelderunterschrnoteentlbuecher=591,swmatrixfeld=590;INT +VAR swkurse,eingabestatus;TEXT VAR aktuellejgst,tutorlehrer,abglangtext, +abslangtext;TEXT VAR aktuelleshalbjahr:="",aktuellesschuljahr:="", +schuljahranfang:="",schuljahrende:="";LET textschulhalbjahr="Schulhalbjahr", +textschuljahr="Schuljahr",textschuljahranfang="Anfang Schulhalbjahr", +textschuljahrende="Ende Schulhalbjahr";BOOL VAR hjdvorhanden,abmeldung:= +FALSE ,schuelergefunden;LET jgst09="09",jgst10="10";LET maske="ms mitteilung" +;LET namefeldnr=2,rufnamefeldnr=3,geburtsdatumfeldnr=4,bildschirmfeldnr=5, +druckerfeldnr=6;LET father=1;LET wartemeldnr=69,existiertnichtmeldnr=126, +falschesdatum=192,datumfehler=157,fehlermeldnr=56;TEXT VAR familienname, +rufname,geburtsdatum;BOOL VAR zeigen;BOOL VAR erstemitteilung:=TRUE ;LET +vordruckmithjd="vordruck mitteilung ueber eine anmeldung mit hjd", +vordruckmitdiffd="vordruck mitteilung ueber eine anmeldung mit diffd", +vordruckabmeldung="vordruck mitteilung ueber eine abmeldung";LET +maxanzahlbelegtekurse=15,anzahlkurskomponenten=4;ROW maxanzahlbelegtekurse +ROW anzahlkurskomponentenTEXT VAR kursdaten;LET lerngruppenindex=1, +fachlangtextindex=2,lehrerindex=3,fachschluesselindex=4;LET +indexdiffdatenbeschreibung=1,indexdiffdatenschluessel=2;INT VAR +anzahlderfaecher:=1,anzahlderbelegtenkurse:=0,anzahlderdiffdaten:=0;INT VAR +zaehler,zaehler1,zaehler2;TEXT VAR fachkuerzel;LET weiblich="w",maennlich="m" +,anredeweibl="Fr.",anredemaennl="Hr.",erstehalbj="1",auszufuellendesfeld= +"___________________________",trennsymbol=" ",punkt=".",niltext="",nildatum= +"01.01.00",textwahlpflichtfach="Wahlpflichtf. ";TEXT CONST +auszufuellendefelderunterschrnoteentlbuecher:="__________ ____ ________"; +TEXT CONST auszufuellendesfeldlehrer:="____________________________________ " +;TEXT CONST matrixfeld:="_______ "+auszufuellendesfeldlehrer+ +auszufuellendefelderunterschrnoteentlbuecher;LET maxanzahlderfaecher=100;ROW +maxanzahlderfaecherROW 2TEXT VAR faecherkartei;LET karteifachschluesselindex= +1,karteifachlangtext=2;LET anzstacktupel=25;PROC initialisierekursdaten:FOR +zaehler1FROM 1UPTO maxanzahlbelegtekurseREP FOR zaehler2FROM 1UPTO +anzahlkurskomponentenREP kursdaten(zaehler1)(zaehler2):=niltextPER PER END +PROC initialisierekursdaten;PROC holekursdaten:INT VAR i; +anzahlderbelegtenkurse:=length(wert(fnrhjdfach))DIV 2;FOR iFROM 1UPTO +anzahlderbelegtenkurseREP fachkuerzel:=subtext(wert(fnrhjdfach),i*2-1,i*2); +kursdaten(i)(fachschluesselindex):=compress(fachkuerzel);kursdaten(i)( +lerngruppenindex):=fachkuerzel+trennsymbol+subtext(wert(fnrhjdlerngrpkenn),i* +4-3,i*4);PER ;END PROC holekursdaten;PROC suchelangtextzufachschluessel(INT +VAR anzahlderschluessel):INT VAR i;FOR iFROM 1UPTO anzahlderschluesselREP +zaehler:=0;REP zaehlerINCR 1UNTIL zaehler>anzahlderfaecherCOR faecherkartei( +zaehler)(karteifachschluesselindex)=kursdaten(i)(fachschluesselindex)PER ;IF +faecherkartei(zaehler)(karteifachschluesselindex)=kursdaten(i)( +fachschluesselindex)THEN kursdaten(i)(fachlangtextindex):=faecherkartei( +zaehler)(karteifachlangtext);FI PER ;END PROC suchelangtextzufachschluessel; +PROC zuordnunglerngruppelehrer:INT VAR i;anzahlderbelegtenkurse:=length(wert( +fnrhjdfach))DIV 2;FOR iFROM 1UPTO anzahlderbelegtenkurseREP kursdaten(i)( +lehrerindex):=lehrerzukurs(subtext(wert(fnrhjdfach),i*2-1,i*2),i)PER ;END +PROC zuordnunglerngruppelehrer;TEXT PROC lehrerzukurs(TEXT CONST fachkuerzel, +INT CONST wievielte):INT VAR i:=wievielte;suchelerngruppe;IF dbstatus=okTHEN +suchelehrerELSE auszufuellendesfeldlehrerFI .suchelerngruppe:putwert(fnrlvsj, +wert(fnrhjdsj));putwert(fnrlvhj,wert(fnrhjdhj));putwert(fnrlvfachkennung, +fachkuerzel+compress(subtext(wert(fnrhjdlerngrpkenn),i*4-3,i*4)));putwert( +fnrlvjgst,wert(fnrhjdjgst));search(dnrlehrveranstaltungen,TRUE ).suchelehrer: +putwert(dnrlehrer+1,wert(fnrlvparaphe));search(dnrlehrer,TRUE );IF dbstatus<> +okTHEN auszufuellendesfeldlehrerELSE kompletteanredeFI .kompletteanrede:text( +anrede+lehrertitel+lehrerzusatz+trennsymbol+wert(fnrlfamname),length( +auszufuellendesfeldlehrer)).anrede:IF wert(fnrlgeschlecht)=weiblichTHEN +anredeweiblELIF wert(fnrlgeschlecht)=maennlichTHEN anredemaennlELSE niltext +FI .lehrertitel:IF wert(fnrlamtsbeztitel)=niltextTHEN niltextELSE trennsymbol ++wert(fnrlamtsbeztitel)FI .lehrerzusatz:IF wert(fnrlzusatz)=niltextTHEN +niltextELSE trennsymbol+wert(fnrlzusatz)FI .ENDPROC lehrerzukurs;PROC +sonderwertfueradressaten:adressat((wert(fnrsurufnames)SUB 1)+punkt+ +trennsymbol+wert(fnrsufamnames))END PROC sonderwertfueradressaten;PROC +sonderwerteallgschuelerdaten:IF wert(fnrsunamenszusatzs)<>niltextTHEN +setzesonderwert(swschuelername,wert(fnrsurufnames)+trennsymbol+wert( +fnrsunamenszusatzs)+trennsymbol+wert(fnrsufamnames))ELSE setzesonderwert( +swschuelername,wert(fnrsurufnames)+trennsymbol+wert(fnrsufamnames))FI ; +setzesonderwert(swgeburtsdatum,wert(fnrsugebdatums));END PROC +sonderwerteallgschuelerdaten;PROC +sonderwerteschuelerdatenfueranmeldebestaetigung:sonderwerteallgschuelerdaten; +setzesonderwert(swstrhausnr,wert(fnrsustrnrs));setzesonderwert(swplzort,wert( +fnrsuplzorts));setzesonderwert(swtelephonnr,wert(fnrsutelnrs));END PROC +sonderwerteschuelerdatenfueranmeldebestaetigung;PROC sonderwertfueraktjgst: +aktuellejgst:=wert(fnrsusgrpjgst)+wert(fnrsusgrpjgst+1);setzesonderwert( +swaktjgst,aktuellejgst);END PROC sonderwertfueraktjgst;PROC +sonderwertfuerklassenlehrer:sucheklassenlehrer;IF dbstatus=okTHEN IF wert( +fnrlgeschlecht)=weiblichTHEN tutorlehrer:=anredeweibl+trennsymbolELIF wert( +fnrlgeschlecht)=maennlichTHEN tutorlehrer:=anredemaennl+trennsymbolELSE +tutorlehrer:=niltextFI ;IF wert(fnrlzusatz)<>niltextTHEN tutorlehrer:= +tutorlehrer+wert(fnrlzusatz)+trennsymbolFI ;setzesonderwert(swklassenlehrer, +text(tutorlehrer+wert(fnrlfamname),37));FI .sucheklassenlehrer: +sucheschuelergruppe;suchelehrer.sucheschuelergruppe:putwert(fnrsgrpsj, +aktuellesschuljahr);putwert(fnrsgrphj,aktuelleshalbjahr);putwert(fnrsgrpjgst, +wert(fnrsusgrpjgst));putwert(fnrsgrpkennung,wert(fnrsusgrpzugtut));search( +dnraktschuelergruppen,TRUE ).suchelehrer:inittupel(dnrlehrer);IF dbstatus=ok +THEN putwert(fnrlparaphe,wert(fnrsgrplehrer));search(dnrlehrer,TRUE )FI .END +PROC sonderwertfuerklassenlehrer;PROC bildefaecherbestand: +initialisierefaecherkartei;vorbereitung;leseschleife. +initialisierefaecherkartei:FOR zaehler1FROM 1UPTO maxanzahlderfaecherREP FOR +zaehler2FROM 1UPTO karteifachlangtextREP faecherkartei(zaehler1)(zaehler2):= +niltextPER PER .vorbereitung:BOOL VAR wenigergelesen:=FALSE ;INT VAR anztupel +;inittupel(dnrfaecher);anztupel:=anzstacktupel;anzahlderfaecher:=0; +multisearchforward(dnrfaecher,anztupel);evtweniger.leseschleife:WHILE +anztupel>0CAND anzahlderfaecher<=maxanzahlderfaecherREP anzahlderfaecherINCR +1;anztupelDECR 1;multisucc;faecherkartei(anzahlderfaecher)(1):=wert( +dnrfaecher+1);faecherkartei(anzahlderfaecher)(2):=wert(dnrfaecher+2);IF +anztupel=0CAND NOT wenigergelesenTHEN anztupel:=anzstacktupel;multisucc( +dnrfaecher,anztupel);evtwenigerFI PER .evtweniger:IF anztupel<anzstacktupel +THEN wenigergelesen:=TRUE FI .END PROC bildefaecherbestand;PROC +mitteilungeingang:standardvproc(maske);IF erstemitteilungTHEN +bildefaecherbestand;erstemitteilung:=FALSE FI ;END PROC mitteilungeingang; +PROC mitteilungende:erstemitteilung:=TRUE ;enter(2)END PROC mitteilungende; +BOOL PROC sonderwertemitteilungneuangmithjd:initialisierekursdaten; +initialisieresonderwerte;sonderwertfueradressaten; +sonderwertfuereintrittsdatum;sonderwerteschuelerdatenfueranmeldebestaetigung; +sonderwertfueraktjgst;bestimmekurse;sonderwertfuerklassenlehrer; +sonderwertefuerkurse;TRUE .sonderwertfuereintrittsdatum:setzesonderwert( +sweintrittsdatum,wert(fnrsueintrittsdats)).bestimmekurse:holekursdaten; +suchelangtextzufachschluessel(anzahlderbelegtenkurse); +zuordnunglerngruppelehrer;.sonderwertefuerkurse:swkurse:=swkursanfang;FOR +zaehler1FROM 1UPTO anzahlderbelegtenkurseREP setzesonderwert(swkurse, +kursdaten(zaehler1)(lerngruppenindex));swkurseINCR 1;setzesonderwert(swkurse, +kursdaten(zaehler1)(fachlangtextindex));swkurseINCR 1;setzesonderwert(swkurse +,kursdaten(zaehler1)(lehrerindex));swkurseINCR 1;PER .END PROC +sonderwertemitteilungneuangmithjd;BOOL PROC +sonderwertemitteilungneuangmitdiffd:initialisierekursdaten; +initialisieresonderwerte;sonderwertfueradressaten; +sonderwertfuereintrittsdatum;sonderwerteschuelerdatenfueranmeldebestaetigung; +sonderwertfueraktjgst;bestimmediffdaten;sonderwertfuerklassenlehrer; +sonderwertefuerdiffdaten;TRUE .sonderwertfuereintrittsdatum:setzesonderwert( +sweintrittsdatum,wert(fnrsueintrittsdats)).bestimmediffdaten: +anzahlderdiffdaten:=0;ermittlediefremdsprachen; +ueberpruefeobreligionsteilnahme;ueberpruefeobkunstodermusik;IF wert( +fnrsusgrpjgst)=jgst09THEN ermittlewp09FI ;IF wert(fnrsusgrpjgst)=jgst10THEN +ermittlewp10FI ;ermittleags.ermittlediefremdsprachen:INT VAR +anzahlderbelegtenfremdsprachen:=1;INT VAR wievieltesprache:=0;REP fachkuerzel +:=wert(fnrdd1fremdfach+wievieltesprache);IF fachkuerzel<>niltextTHEN +anzahlderdiffdatenINCR 1;kursdaten(anzahlderdiffdaten)( +indexdiffdatenbeschreibung):=text(anzahlderbelegtenfremdsprachen)+ +". Fremdsprache:";anzahlderbelegtenfremdsprachenINCR 1;kursdaten( +anzahlderdiffdaten)(indexdiffdatenschluessel):=fachkuerzel;FI ; +wievieltespracheINCR 3UNTIL (fnrdd1fremdfach+wievieltesprache)>fnrdd4fremde +PER .ueberpruefeobreligionsteilnahme:IF wert(fnrddreliunter)<>niltextCAND ( +wert(fnrddreliunter+1)=nildatum)OR (wert(fnrddreliunter+1)<>nildatumAND wert( +fnrddreliunter+2)<>nildatum)THEN anzahlderdiffdatenINCR 1;kursdaten( +anzahlderdiffdaten)(indexdiffdatenbeschreibung):="Religion:";kursdaten( +anzahlderdiffdaten)(indexdiffdatenschluessel):=wert(fnrddreliunter)FI . +ueberpruefeobkunstodermusik:IF wert(fnrddkunstmusik)<>niltextTHEN +anzahlderdiffdatenINCR 1;kursdaten(anzahlderdiffdaten)( +indexdiffdatenbeschreibung):="Kunst/Musik:";kursdaten(anzahlderdiffdaten)( +indexdiffdatenschluessel):=wert(fnrddkunstmusik)FI .ermittlewp09:TEXT VAR txt +;IF erstehalbjahrTHEN txt:=textwahlpflichtfach+"09.1:";wps(fnrddfach091a, +anzahlderdiffdaten,txt);wps(fnrddfach091b,anzahlderdiffdaten,txt)ELSE txt:= +textwahlpflichtfach+"09.2:";wps(fnrddfach092a,anzahlderdiffdaten,txt);wps( +fnrddfach092b,anzahlderdiffdaten,txt)FI .ermittlewp10:IF erstehalbjahrTHEN +txt:=textwahlpflichtfach+"10.1:";wps(fnrddfach101a,anzahlderdiffdaten,txt); +wps(fnrddfach101b,anzahlderdiffdaten,txt);ELSE txt:=textwahlpflichtfach+ +"10.2:";wps(fnrddfach102a,anzahlderdiffdaten,txt);wps(fnrddfach102b, +anzahlderdiffdaten,txt)FI .erstehalbjahr:erstehalbj=sonderwert( +swaktuelleshalbjahr).ermittleags:INT VAR wievielteag:=0;REP fachkuerzel:=wert +(fnrddagthema1+wievielteag);IF fachkuerzel<>niltextTHEN anzahlderdiffdaten +INCR 1;kursdaten(anzahlderdiffdaten)(indexdiffdatenbeschreibung):="AG:"; +kursdaten(anzahlderdiffdaten)(indexdiffdatenschluessel):=fachkuerzel;FI ; +wievielteagINCR 3#2#UNTIL (fnrddagthema1+wievielteag)>fnrddagthema3PER . +sonderwertefuerdiffdaten:swkurse:=swkursanfang;FOR zaehler1FROM 1UPTO +anzahlderdiffdatenREP FOR zaehler2FROM 1UPTO indexdiffdatenschluesselREP +setzesonderwert(swkurse,kursdaten(zaehler1)(zaehler2));swkurseINCR 1PER PER . +END PROC sonderwertemitteilungneuangmitdiffd;PROC wps(INT CONST fnr,INT VAR +anzahlderdiffdaten,TEXT CONST txt):IF wert(fnr)<>niltextTHEN +anzahlderdiffdatenINCR 1;kursdaten(anzahlderdiffdaten)( +indexdiffdatenbeschreibung):=txt;kursdaten(anzahlderdiffdaten)( +indexdiffdatenschluessel):=wert(fnr)FI ENDPROC wps;BOOL PROC +sonderwertemitteilungabmeldung:initialisierekursdaten; +initialisieresonderwerte;sonderwertezumaufbaueinermatrix; +sonderwertfueradressaten;sonderwerteallgschuelerdaten; +abgangsdatumundabgangsgrund;sonderwertfueraktjgst; +sonderwertefuerkursebeimabgang;sonderwertfuerklassenlehrer; +sonderwertfuerabgangsgrundundabschluss;TRUE .abgangsdatumundabgangsgrund: +TEXT VAR abgdatum:=wert(fnrsuabgdats);IF abgdatum=nildatumTHEN abgdatum:="" +FI ;setzesonderwert(swabgangsdatum,abgdatum);TEXT VAR abgkuerzel:=wert( +fnrsuabggrund);TEXT VAR abskuerzel:=wert(fnrsuabschluss);. +sonderwertfuerabgangsgrundundabschluss:IF langtextgefunden( +bestandfuerabschluss,abskuerzel,abslangtext)THEN setzesonderwert( +swerreichterabschluss,abslangtext)ELSE setzesonderwert(swerreichterabschluss, +auszufuellendesfeld)FI ;IF langtextgefunden(bestandfuerabgang,abgkuerzel, +abglangtext)THEN setzesonderwert(swabgangsgrund,abglangtext)ELSE +setzesonderwert(swabgangsgrund,auszufuellendesfeld)FI . +sonderwertefuerkursebeimabgang:IF hjdvorhandenTHEN holekursdaten; +zuordnunglerngruppelehrer;swkurse:=swkursanfangELSE anzahlderbelegtenkurse:=0 +FI ;FOR zaehler1FROM 1UPTO anzahlderbelegtenkurseREP setzesonderwert(swkurse, +plusanhang(kursdaten(zaehler1)(fachschluesselindex),subtext(wert( +fnrhjdlerngrpkenn),zaehler1*4-3,zaehler1*4)));swkurseINCR 1;setzesonderwert( +swkurse,kursdaten(zaehler1)(lehrerindex));swkurseINCR 1PER . +sonderwertezumaufbaueinermatrix:setzesonderwert( +swfelderunterschrnoteentlbuecher,auszufuellendefelderunterschrnoteentlbuecher +);setzesonderwert(swmatrixfeld,matrixfeld).END PROC +sonderwertemitteilungabmeldung;TEXT PROC plusanhang(TEXT CONST t,t2):text(t,3 +)+text(t2,5)ENDPROC plusanhang;BOOL PROC langtextgefunden(TEXT CONST bestand, +kuerzel,TEXT VAR lang):systemdboff;putwert(fnrschlsachgebiet,bestand);putwert +(fnrschlschluessel,kuerzel);search(dnrschluessel,TRUE );lang:=wert( +fnrschllangtext);dbstatus=okENDPROC langtextgefunden;PROC lesemaskenwerte: +familienname:=standardmaskenfeld(namefeldnr);rufname:=standardmaskenfeld( +rufnamefeldnr);geburtsdatum:=standardmaskenfeld(geburtsdatumfeldnr);zeigen:= +standardmaskenfeld(bildschirmfeldnr)<>niltextEND PROC lesemaskenwerte;PROC +ermittledievorliegendendaten:standardmeldung(wartemeldnr,niltext);IF +aktuelleshalbjahr=""THEN aktuelleshalbjahr:=schulkenndatum(textschulhalbjahr) +;aktuellesschuljahr:=schulkenndatum(textschuljahr);FI ; +uebernimmschluesselwerte;search(ixsustatfamrufgeb,FALSE );schuelergefunden:=( +dbstatus=ok)CAND (wert(fnrsufamnames)=familienname)CAND (wert(fnrsurufnames)= +rufnameCOR rufname="")CAND (wert(fnrsugebdatums)=datumskonversion( +geburtsdatum)COR geburtsdatum="");IF schuelergefundenCAND abmeldungCAND +falschesabmelddatumTHEN schuelergefunden:=FALSE ;meldefalschesdatum; +zurueckzumdialogELSE weiterverarbeitungFI .falschesabmelddatum:IF +schuljahranfang=""THEN schuljahranfang:=schulkenndatum(textschuljahranfang); +schuljahrende:=schulkenndatum(textschuljahrende)FI ;NOT ((date(wert( +fnrsuabgdats))>=date(schuljahranfang))CAND (date(wert(fnrsuabgdats))<=date( +schuljahrende))).weiterverarbeitung:IF schuelergefundenTHEN +halbjahresdatenholen;ueberpruefeobkursdatenvorliegen;IF NOT hjdvorhandenTHEN +diffdatenholenFI ELSE meldeschuelerexistiertnicht;zurueckzumdialogFI . +halbjahresdatenholen:inittupel(dnrhalbjahresdaten);TEXT VAR tidhjddaten:=wert +(fnrsutidakthjd);readtid(dnrhalbjahresdaten,tidhjddaten).diffdatenholen: +inittupel(dnrdiffdaten);TEXT VAR tiddiffdaten:=wert(fnrsutiddiffdaten); +readtid(dnrdiffdaten,tiddiffdaten).meldeschuelerexistiertnicht: +standardmeldung(existiertnichtmeldnr,niltext).meldefalschesdatum: +standardmeldung(falschesdatum,niltext).ueberpruefeobkursdatenvorliegen: +hjdvorhanden:=dbstatus=okCAND wert(fnrhjdfach)<>"".zurueckzumdialog:return( +father).END PROC ermittledievorliegendendaten;PROC uebernimmschluesselwerte: +putwert(fnrsustatuss,laufenderbestand);putwert(fnrsufamnames,familienname); +putwert(fnrsurufnames,rufname);putwert(fnrsugebdatums,datumskonversion( +geburtsdatum))ENDPROC uebernimmschluesselwerte;PROC mitteilungneuangstarten: +reinitparsing;lesemaskenwerte;IF NOT (wahldruckeroderbildschirmok)THEN +meldedenfehler;zurueckzumdialogELSE IF (schluesselmitdatum)AND (NOT (datumok) +)THEN meldefehlerbeidatum;zurueckzumdialogELSE IF (schluesselmitdatumXOR +schluesselohnedatumok)THEN neuangemeldeteweiterELSE meldedenfehler; +zurueckzumdialogFI ;FI ;FI .neuangemeldeteweiter:abmeldung:=FALSE ; +ermittledievorliegendendaten;IF schuelergefundenTHEN +initialisieredruckerfuermitteilung;IF hjdvorhandenTHEN anschreibenstart( +ixsustatfamrufgeb,vordruckmithjd,zeigen,TRUE ,BOOL PROC +sonderwertemitteilungneuangmithjd,BOOL PROC dummystop)ELSE anschreibenstart( +ixsustatfamrufgeb,vordruckmitdiffd,zeigen,TRUE ,BOOL PROC +sonderwertemitteilungneuangmitdiffd,BOOL PROC dummystop)FI ;FI ;.END PROC +mitteilungneuangstarten;PROC meldedenfehler:standardmeldung(fehlermeldnr, +niltext)END PROC meldedenfehler;PROC zurueckzumdialog:return(father)END PROC +zurueckzumdialog;BOOL PROC wahldruckeroderbildschirmok:standardmaskenfeld( +bildschirmfeldnr)<>niltextXOR standardmaskenfeld(druckerfeldnr)<>niltextEND +PROC wahldruckeroderbildschirmok;BOOL PROC schluesselmitdatum:familienname<> +niltextAND rufname<>niltextAND geburtsdatum<>niltextEND PROC +schluesselmitdatum;BOOL PROC schluesselohnedatumok:familienname<>niltextAND +geburtsdatum=niltextEND PROC schluesselohnedatumok;BOOL PROC datumok: +standardpruefe(6,6,0,0,niltext,eingabestatus);IF NOT (eingabestatus=0)THEN +FALSE ELSE TRUE FI END PROC datumok;PROC meldefehlerbeidatum:standardmeldung( +datumfehler,niltext)END PROC meldefehlerbeidatum;PROC +mitteilungabmeldungstarten:reinitparsing;lesemaskenwerte;IF NOT ( +wahldruckeroderbildschirmok)THEN meldedenfehler;zurueckzumdialogELSE IF ( +schluesselmitdatum)AND (NOT (datumok))THEN meldefehlerbeidatum; +zurueckzumdialogELSE IF (schluesselmitdatumXOR schluesselohnedatumok)THEN +abgemeldeteweiterELSE meldedenfehler;zurueckzumdialogFI ;FI ;FI . +abgemeldeteweiter:abmeldung:=TRUE ;ermittledievorliegendendaten;IF +schuelergefundenTHEN initialisieredruckerfuermitteilung;anschreibenstart( +ixsustatfamrufgeb,vordruckabmeldung,zeigen,TRUE ,BOOL PROC +sonderwertemitteilungabmeldung,BOOL PROC dummystop)FI .END PROC +mitteilungabmeldungstarten;BOOL PROC dummystop:TRUE ENDPROC dummystop;END +PACKET anschrmitteilungenneuangemeldeteundabgemeldete; + diff --git a/app/schulis/2.2.1/src/1.anschr.nachpruefungsbescheinigung b/app/schulis/2.2.1/src/1.anschr.nachpruefungsbescheinigung new file mode 100644 index 0000000..27212bf --- /dev/null +++ b/app/schulis/2.2.1/src/1.anschr.nachpruefungsbescheinigung @@ -0,0 +1,150 @@ +PACKET anschrnachpruefungsbescheinigungDEFINES +nachpruefungsbescheinigungeingang,nachpruefungsbescheinigungende, +nachpruefungsbescheinigungstarten,sonderwertenachpruefungsbescheinigung, +multistopnachpruefbesch:INT VAR aktuellerindex;TEXT VAR schuelerschluessel1, +schuelerschluessel2,schuelerschluessel3,bestandsschluessel1, +bestandsschluessel2,aktuellesschuljahr,vorigesschuljahr;LET # +schluesselversetztmitpruefung="n"#schluesselnachpruefung="n";# +schluesselwiederholtmitpruefung="x",schluesselwiederholer="w";#LET vordruck= +"vordruck nachpruefungsbescheinigung";LET maske= +"ms auswahl schueler o. klasse";LET namefeldnr=2,vornamefeldnr=3, +geburtsdatumfeldnr=4,jgstfeldnr=5,zugtutorfeldnr=6,bildschirmfeldnr=7, +druckerfeldnr=8;LET niltext="",trennsymbol=" ",punkt=".",meldkennz="#", +fehlerhalbjnr=165,fehlermeldnr=56,#wartemeldnr=69,sortiervorgangwartemeldnr= +76,#dieauswahlderjgstistnichtzulaessignr=146,vater=1;LET minjgst=5,jgst11=11, +maxjgst=13;LET swschulhalbjahr=509,swzuname=511,swnamenszusaetze=512, +swvornamen=513,swgeschlecht=514,swgeburtsdatum=515,swzugang=516, +swjgstnachpruefung=517,swnachpruefungsfach=518,swparagraph=519,swbemerkung= +520;LET maxanzahlderfaecher=100,fachschluesselindex=1,fachlangtextindex=2; +ROW maxanzahlderfaecherROW fachlangtextindexTEXT VAR faecherkartei;INT VAR +anzahlderfaecher:=0;BOOL VAR eingang:=TRUE ,erstehalbjahr:=TRUE , +anschreibenzeigen;TEXT PROC langtextzufachschluessel(TEXT CONST schluessel): +INT VAR zaehler:=1;TEXT VAR langtext:="";WHILE zaehler<anzahlderfaecherCAND +schluessel<>faecherkartei(zaehler)(fachschluesselindex)REP zaehlerINCR 1PER ; +IF schluessel=faecherkartei(zaehler)(fachschluesselindex)THEN langtext:= +faecherkartei(zaehler)(fachlangtextindex)FI ;langtextEND PROC +langtextzufachschluessel;PROC bildefaecherbestand:LET anzstacktupel=25; +initialisierefaecherkartei;vorbereitung;leseschleife. +initialisierefaecherkartei:INT VAR zaehler1,zaehler2;FOR zaehler1FROM 1UPTO +maxanzahlderfaecherREP FOR zaehler2FROM 1UPTO fachlangtextindexREP +faecherkartei(zaehler1)(zaehler2):=niltextPER PER .vorbereitung:BOOL VAR +wenigergelesen:=FALSE ;INT VAR anztupel;inittupel(dnrfaecher);anztupel:= +anzstacktupel;anzahlderfaecher:=0;multisearchforward(dnrfaecher,anztupel); +evtweniger.leseschleife:WHILE anztupel>0CAND anzahlderfaecher<= +maxanzahlderfaecherREP anzahlderfaecherINCR 1;anztupelDECR 1;multisucc; +faecherkartei(anzahlderfaecher)(1):=wert(dnrfaecher+1);faecherkartei( +anzahlderfaecher)(2):=wert(dnrfaecher+2);IF anztupel=0CAND NOT wenigergelesen +THEN anztupel:=anzstacktupel;multisucc(dnrfaecher,anztupel);evtwenigerFI PER +.evtweniger:IF anztupel<anzstacktupelTHEN wenigergelesen:=TRUE FI .END PROC +bildefaecherbestand;PROC nachpruefungsbescheinigungeingang:standardvproc( +maske);IF eingangTHEN setzesonderwerteschulkenndaten; +feststellenoberstehalbjahr;IF erstehalbjahrTHEN berechneschuljahre; +bildefaecherbestand;FI ;aendernderflaggeFI .feststellenoberstehalbjahr: +erstehalbjahr:=int(sonderwert(swschulhalbjahr))=1.aendernderflagge:eingang:= +FALSE .berechneschuljahre:aktuellesschuljahr:=schulkenndatum("Schuljahr"); +vorigesschuljahr:=vorigesjahr.vorigesjahr:text(int(subtext(aktuellesschuljahr +,1,2))-1)+text(int(subtext(aktuellesschuljahr,3,4))-1).END PROC +nachpruefungsbescheinigungeingang;PROC nachpruefungsbescheinigungende:eingang +:=TRUE ;enter(2)END PROC nachpruefungsbescheinigungende;BOOL PROC +sonderwertenachpruefungsbescheinigung:initialisieresonderwerte;sucheschueler; +sonderwertfuerdenadressaten;sonderwerteschuelerdaten;sonderwertartdeszugangs; +sonderwertfuerdiejahrgangsstufe;sonderwertparagraph; +sonderwertfuerdasnachpruefungsfach;sonderwertfuerbemerkung;TRUE . +sucheschueler:inittupel(dnrschueler);uebernehmeentsprdaten;search(dnrschueler +,TRUE ).uebernehmeentsprdaten:putwert(fnrsufamnames,wert(fnrhjdfamnames)); +putwert(fnrsurufnames,wert(fnrhjdrufnames));putwert(fnrsugebdatums,wert( +fnrhjdgebdats)).sonderwertfuerdenadressaten:adressat((wert(fnrsuvornames)SUB +1)+punkt+trennsymbol+wert(fnrsufamnames)).sonderwerteschuelerdaten: +setzesonderwert(swzuname,wert(fnrsufamnames));setzesonderwert( +swnamenszusaetze,wert(fnrsunamenszusatzs));setzesonderwert(swvornamen,wert( +fnrsuvornames));setzesonderwert(swgeschlecht,wert(fnrsugeschlechts)); +setzesonderwert(swgeburtsdatum,wert(fnrsugebdatums));#setzesonderwert( +swstrhausnr,wert(fnrsustrnrs));setzesonderwert(swplzort,wert(fnrsuplzorts)); +IF volljaehrig(wert(fnrsugebdatums))THEN setzesonderwert(swvollj,vollj);ELSE +setzesonderwert(swvollj,minderj)FI #.sonderwertartdeszugangs:IF #wert( +fnrsuartzugang)="x"#bestandenTHEN setzesonderwert(swzugang,"")ELSE +setzesonderwert(swzugang,"x")FI .bestanden:TEXT VAR nachpruefergebnis:=wert( +fnrhjdnacherg);(length(nachpruefergebnis)>1CAND int(nachpruefergebnis)>=4) +COR (length(nachpruefergebnis)=1CAND int(nachpruefergebnis)<=4). +sonderwertfuerdiejahrgangsstufe:#IF wert(fnrsuartzugang)="x"THEN +setzesonderwert(swjgstnachpruefung,text(int(wert(fnrsujgst))-1))ELSE +setzesonderwert(swjgstnachpruefung,wert(fnrsujgst))FI #setzesonderwert( +swjgstnachpruefung,wert(fnrhjdjgst)).sonderwertparagraph:TEXT CONST +paragraphsek1:="Nr. 4 der Verordnung über die Abschlüsse und "+ +"die Versetzung in Sekundarstufe 1 (AVO - SI)",paragraphsek2:= +"Nr. 11 der Verordnung über den Bildungsgang"+ +" und die Abiturprüfung der gymnasialen Oberstufe";IF int(wert(fnrhjdjgst))< +jgst11THEN setzesonderwert(swparagraph,paragraphsek1)ELSE setzesonderwert( +swparagraph,paragraphsek2)FI .sonderwertfuerdasnachpruefungsfach:TEXT VAR +fachschluessel:="";#TEXT VAR nachpruefungsfach:="";#TEXT VAR langtext:=""; +fachschluessel:=wert(fnrhjdnachfach);langtext:=langtextzufachschluessel( +fachschluessel);setzesonderwert(swnachpruefungsfach,langtext). +sonderwertfuerbemerkung:sucheschluesselbemerkung; +suchelangtextzubemerkungundsetzesonderwert.sucheschluesselbemerkung:TEXT VAR +bemerkungsschluessel:="";bemerkungsschluessel:=wert(fnrhjdbemerk). +suchelangtextzubemerkungundsetzesonderwert:#INT VAR bestandsid:=0;systemdbon; +putwert(fnrsysbestand,"c02 bemerkungen");search(dnrsysbestaende,TRUE );IF +dbstatus=okTHEN bestandsid:=intwert(fnrsysbestandsid)FI ;systemdboff;#putwert +(fnrschlsachgebiet,"c02 bemerkungen");putwert(fnrschlschluessel, +bemerkungsschluessel);search(dnrschluessel,TRUE );IF dbstatus=okTHEN +setzesonderwert(swbemerkung,wert(fnrschllangtext))ELSE dbstatus(ok); +setzesonderwert(swbemerkung,niltext)FI .END PROC +sonderwertenachpruefungsbescheinigung;PROC nachpruefungsbescheinigungstarten: +IF erstehalbjahrTHEN lesemaskenwerte;IF maskenwerteinordnungTHEN IF +beibestandsauswahlauswahlzulaessigTHEN #bildebestand;IF status<>0AND NOT +einzelbearbeitungTHEN meldenichterstellbar;zurueckzumdialogELSE # +startenausfuehren#FI #ELSE meldeunzulaessigeschuelergruppenauswahl; +zurueckzumdialogFI ELSE meldedenfehler;zurueckzumdialogFI ELSE +meldefalscheshalbjahr;zurueckzumdialogFI .meldefalscheshalbjahr:LET +ersteshalbjahr="1";standardmeldung(fehlerhalbjnr,ersteshalbjahr+meldkennz). +lesemaskenwerte:schuelerschluessel1:=standardmaskenfeld(namefeldnr); +schuelerschluessel2:=standardmaskenfeld(vornamefeldnr);schuelerschluessel3:= +standardmaskenfeld(geburtsdatumfeldnr);bestandsschluessel1:= +standardmaskenfeld(jgstfeldnr);bestandsschluessel2:=standardmaskenfeld( +zugtutorfeldnr);anschreibenzeigen:=standardmaskenfeld(bildschirmfeldnr)<> +niltext.maskenwerteinordnung:IF NOT ((standardmaskenfeld(bildschirmfeldnr)<> +niltext)XOR (standardmaskenfeld(druckerfeldnr)<>niltext))THEN infeld( +bildschirmfeldnr);FALSE ELIF ((schuelerschluessel1<>niltextAND +bestandsschluessel1+bestandsschluessel2=niltextAND (schuelerschluessel2<> +niltextXOR (schuelerschluessel2=niltextAND schuelerschluessel3=niltext)))XOR +(schuelerschluessel1+schuelerschluessel2+schuelerschluessel3=niltextAND +bestandsschluessel1<>niltext)XOR (schuelerschluessel1+schuelerschluessel2+ +schuelerschluessel3+bestandsschluessel1+bestandsschluessel2=niltext))THEN +TRUE ELSE infeld(namefeldnr);FALSE FI .meldedenfehler:standardmeldung( +fehlermeldnr,niltext).zurueckzumdialog:return(vater). +meldeunzulaessigeschuelergruppenauswahl:standardmeldung( +dieauswahlderjgstistnichtzulaessignr,niltext). +beibestandsauswahlauswahlzulaessig:(bestandsschluessel1=niltext)OR ( +bestandsschluessel1<>niltextCAND int(bestandsschluessel1)<=maxjgstCAND int( +bestandsschluessel1)>=minjgst).#einzelbearbeitung:schuelerschluessel1<> +niltext.startenausfuehren:initialisieredruckerfueranschreiben; +anschreibenstart(endbestand,vordruck,dbmnachpruefungsbescheinigung, +schuelerschluessel1,schuelerschluessel2+schuelerschluessel3,anschreibenzeigen +,laengedbmnachpruefungsbescheinigung,BOOL PROC +sonderwertenachpruefungsbescheinigung);.END PROC +nachpruefungsbescheinigungstarten;#startenausfuehren: +initialisieredruckerfueranschreiben;dbstatus(ok);parsenooffields(44); +indexnummerbestimmen;uebernimmentsprechendedaten;anschreibenstart( +aktuellerindex,vordruck,anschreibenzeigen,(schuelerschluessel1+ +schuelerschluessel2)<>"",BOOL PROC sonderwertenachpruefungsbescheinigung, +BOOL PROC multistopnachpruefbesch).uebernimmentsprechendedaten:putwert( +fnrhjdsj,#aktuellesschuljahr#vorigesschuljahr);putintwert(fnrhjdhj,2);putwert +(fnrhjdfamnames,schuelerschluessel1);putwert(fnrhjdrufnames, +schuelerschluessel2);putwert(fnrhjdgebdats,datumskonversion( +schuelerschluessel3));putwert(fnrhjdjgst,bestandsschluessel1);putwert( +fnrhjdkennung,bestandsschluessel2);putwert(fnrhjdversetzung, +schluesselnachpruefung).indexnummerbestimmen:IF schuelerschluessel1<>niltext +THEN aktuellerindex:=#dnrhjd#ixhjdverfamsjhjrufgebELSE aktuellerindex:= +ixhjdversjhjjgstkennFI .END PROC nachpruefungsbescheinigungstarten;BOOL PROC +multistopnachpruefbesch:BOOL VAR b:=wert(fnrhjdsj)=#aktuellesschuljahr# +vorigesschuljahrCAND intwert(fnrhjdhj)=2CAND wert(fnrhjdversetzung)= +schluesselnachpruefung;IF bTHEN weitereueberpruefungFI ;b. +weitereueberpruefung:IF aktuellerindex=ixhjdverfamsjhjrufgebTHEN +ueberpruefenamenELSE IF bestandsschluessel1<>""THEN ueberpruefejgstFI FI . +ueberpruefenamen:b:=wert(fnrhjdfamnames)=schuelerschluessel1CAND ( +schuelerschluessel2=""COR wert(fnrhjdrufnames)=schuelerschluessel2)CAND ( +schuelerschluessel3=""COR wert(fnrhjdgebdats)=datumskonversion( +schuelerschluessel3)).ueberpruefejgst:b:=bestandsschluessel1=wert(fnrhjdjgst) +CAND (bestandsschluessel2=""COR bestandsschluessel2=wert(fnrhjdkennung)). +ENDPROC multistopnachpruefbesch;END PACKET anschrnachpruefungsbescheinigung; + diff --git a/app/schulis/2.2.1/src/1.anschr.nachpruefungszulassung b/app/schulis/2.2.1/src/1.anschr.nachpruefungszulassung new file mode 100644 index 0000000..871d9b6 --- /dev/null +++ b/app/schulis/2.2.1/src/1.anschr.nachpruefungszulassung @@ -0,0 +1,146 @@ +PACKET anschrnachpruefungszulassungDEFINES nachpruefungszulassungeingang, +nachpruefungszulassungende,nachpruefungszulassungstarten, +sonderwertenachpruefungszulassung,multistopnachpruefler:INT VAR +aktuellerindex;TEXT VAR schuelerschluessel1,schuelerschluessel2, +schuelerschluessel3,bestandsschluessel1,bestandsschluessel2, +aktuellesschuljahr;LET schluesselnachpruefung="n";LET vordruck= +"vordruck nachpruefungszulassung";LET maske="ms anschr schueler o. klasse"; +LET namefeldnr=2,vornamefeldnr=3,geburtsdatumfeldnr=4,jgstfeldnr=5, +zugtutorfeldnr=6,bildschirmfeldnr=7,druckerfeldnr=8;LET niltext="", +trennsymbol=" ",vollj="v",minderj="m",oder=" oder ",punkt=".",meldkennz="#", +fehlerhalbjnr=167,fehlermeldnr=56,#wartemeldnr=69,# +dieauswahlderjgstistnichtzulaessignr=146,# +anschreibenkannnichterstelltwerdennr=124,#vater=1;LET minjgst=5,jgst11=11, +maxjgst=13;LET swschulhalbjahr=509,swzuname=511,swnamenszusaetze=512, +swvornamen=513,swgeschlecht=514,swvollj=515,swstrhausnr=517,swplzort=518, +swnameerzieher=519,swnamenszusaetzeerzieher=520,swvornameerzieher=521, +swstrhausnrerzieher=522,swplzorterzieher=523,swparagraph=524, +swnachpruefungsfaecher=525,swbemerkung=526;LET maxanzahlderfaecher=100, +karteifachlangtext=2,fachschluesselindex=1,fachlangtextindex=2;ROW +maxanzahlderfaecherROW karteifachlangtextTEXT VAR faecherkartei;INT VAR +anzahlderfaecher:=0;BOOL VAR eingang:=TRUE ,zweitehalbjahr:=TRUE , +anschreibenzeigen;PROC bildefaecherbestand:LET anzstacktupel=25; +initialisierefaecherkartei;vorbereitung;leseschleife. +initialisierefaecherkartei:INT VAR zaehler1,zaehler2;FOR zaehler1FROM 1UPTO +maxanzahlderfaecherREP FOR zaehler2FROM 1UPTO karteifachlangtextREP +faecherkartei(zaehler1)(zaehler2):=niltextPER PER .vorbereitung:BOOL VAR +wenigergelesen:=FALSE ;INT VAR anztupel;inittupel(dnrfaecher);anztupel:= +anzstacktupel;anzahlderfaecher:=0;multisearchforward(dnrfaecher,anztupel); +evtweniger.leseschleife:WHILE anztupel>0CAND anzahlderfaecher<= +maxanzahlderfaecherREP anzahlderfaecherINCR 1;anztupelDECR 1;multisucc; +faecherkartei(anzahlderfaecher)(1):=wert(dnrfaecher+1);faecherkartei( +anzahlderfaecher)(2):=wert(dnrfaecher+2);IF anztupel=0CAND NOT wenigergelesen +THEN anztupel:=anzstacktupel;multisucc(dnrfaecher,anztupel);evtwenigerFI PER +.evtweniger:IF anztupel<anzstacktupelTHEN wenigergelesen:=TRUE FI .END PROC +bildefaecherbestand;TEXT PROC langtextzufachschluessel(TEXT CONST schluessel) +:INT VAR zaehler:=1;TEXT VAR langtext:="";WHILE zaehler<anzahlderfaecherCAND +schluessel<>faecherkartei(zaehler)(fachschluesselindex)REP zaehlerINCR 1PER ; +IF schluessel=faecherkartei(zaehler)(fachschluesselindex)THEN langtext:= +faecherkartei(zaehler)(fachlangtextindex)FI ;langtextEND PROC +langtextzufachschluessel;PROC nachpruefungszulassungeingang:standardvproc( +maske);IF eingangTHEN setzesonderwerteschulkenndaten; +feststellenobzweitehalbjahr;IF zweitehalbjahrTHEN bildefaecherbestand;FI ; +aendernderflaggeFI .feststellenobzweitehalbjahr:zweitehalbjahr:=int( +sonderwert(swschulhalbjahr))=2.aendernderflagge:eingang:=FALSE .END PROC +nachpruefungszulassungeingang;PROC nachpruefungszulassungende:eingang:=TRUE ; +enter(2)END PROC nachpruefungszulassungende;BOOL PROC +sonderwertenachpruefungszulassung:initialisieresonderwerte;sucheschueler; +sonderwertfuerdenadressaten;sonderwerteschuelerdaten;sonderwerteerzieherdaten +;sonderwertparagraph;sonderwertfuerdienachpruefungsfaecher; +sonderwertfuerbemerkung;TRUE .sucheschueler:inittupel(dnrschueler); +uebernehmeentsprdaten;search(dnrschueler,TRUE ).uebernehmeentsprdaten:putwert +(fnrsufamnames,wert(fnrhjdfamnames));putwert(fnrsurufnames,wert( +fnrhjdrufnames));putwert(fnrsugebdatums,wert(fnrhjdgebdats)). +sonderwertfuerdenadressaten:adressat((wert(fnrsuvornames)SUB 1)+punkt+ +trennsymbol+wert(fnrsufamnames)).sonderwerteschuelerdaten:setzesonderwert( +swzuname,wert(fnrsufamnames));setzesonderwert(swnamenszusaetze,wert( +fnrsunamenszusatzs));setzesonderwert(swvornamen,wert(fnrsuvornames)); +setzesonderwert(swgeschlecht,wert(fnrsugeschlechts));setzesonderwert( +swstrhausnr,wert(fnrsustrnrs));setzesonderwert(swplzort,wert(fnrsuplzorts)); +IF volljaehrig(wert(fnrsugebdatums))THEN setzesonderwert(swvollj,vollj);ELSE +setzesonderwert(swvollj,minderj)FI .sonderwerteerzieherdaten:setzesonderwert( +swnameerzieher,wert(fnrsufamnamee));setzesonderwert(swnamenszusaetzeerzieher, +wert(fnrsunamenszusatze));setzesonderwert(swvornameerzieher,wert( +fnrsuvornamee));sucheerzieheradresse;setzesonderwert(swstrhausnrerzieher,wert +(fnrsustrnrs));setzesonderwert(swplzorterzieher,wert(fnrsuplzorts));. +sucheerzieheradresse:#IF wert(fnradresse)<>""THEN putwert(fnradrkuerzel,wert( +fnradresse));search(dnradressen,TRUE );IF dbstatus=okTHEN +uebernehmeerzieheradresseELSE dbstatus(ok)FI FI #IF wert(fnrsuplzorte)<>"" +THEN uebernehmeerzieheradresseFI .uebernehmeerzieheradresse:putwert( +fnrsustrnrs,wert(fnrsustrnre));putwert(fnrsuplzorts,wert(fnrsuplzorte)). +sonderwertparagraph:TEXT CONST paragraphsek1:= +"Nr. 4 der Verordnung über die Abschlüsse und "+ +"die Versetzung in Sekundarstufe 1 (AVO - SI)",paragraphsek2:= +"Nr. 11 der Verordnung über den Bildungsgang"+ +" und die Abiturprüfung der gymnasialen Oberstufe";IF int(wert(fnrhjdjgst))< +jgst11THEN setzesonderwert(swparagraph,paragraphsek1)ELSE setzesonderwert( +swparagraph,paragraphsek2)FI .sonderwertfuerdienachpruefungsfaecher:TEXT VAR +fachschluessel:="";TEXT VAR nachpruefungsfach:="";TEXT VAR langtext:=""; +bestimmungderfaecherindennachpruefungmoeglich;setzesonderwert( +swnachpruefungsfaecher,nachpruefungsfach). +bestimmungderfaecherindennachpruefungmoeglich:fachschluessel:=wert( +fnrhjdnachfach1);langtext:=langtextzufachschluessel(fachschluessel);IF +langtext<>niltextTHEN nachpruefungsfach:=langtext;fachschluessel:=wert( +fnrhjdnachfach2);langtext:=langtextzufachschluessel(fachschluessel);IF +langtext<>niltextTHEN nachpruefungsfach:=nachpruefungsfach+oder+langtext; +fachschluessel:=wert(fnrhjdnachfach3);langtext:=langtextzufachschluessel( +fachschluessel);IF langtext<>niltextTHEN nachpruefungsfach:=nachpruefungsfach ++oder+langtextFI FI FI .sonderwertfuerbemerkung:sucheschluesselbemerkung; +suchelangtextzubemerkungundsetzesonderwert.sucheschluesselbemerkung:TEXT VAR +bemerkungsschluessel:="";bemerkungsschluessel:=wert(fnrhjdbemnach). +suchelangtextzubemerkungundsetzesonderwert:putwert(fnrschlsachgebiet, +"c02 bemerkungen");putwert(fnrschlschluessel,bemerkungsschluessel);search( +dnrschluessel,TRUE );IF dbstatus=okTHEN setzesonderwert(swbemerkung,wert( +fnrschllangtext))ELSE dbstatus(ok);setzesonderwert(swbemerkung,niltext)FI . +END PROC sonderwertenachpruefungszulassung;PROC nachpruefungszulassungstarten +:IF zweitehalbjahrTHEN lesemaskenwerte;IF maskenwerteinordnungTHEN IF +beibestandsauswahlauswahlzulaessigTHEN startenausfuehrenELSE +meldeunzulaessigeschuelergruppenauswahl;zurueckzumdialogFI ELSE +meldedenfehler;zurueckzumdialogFI ELSE meldefalscheshalbjahr;zurueckzumdialog +FI .meldefalscheshalbjahr:LET zweiteshalbjahr="2";standardmeldung( +fehlerhalbjnr,zweiteshalbjahr+meldkennz).lesemaskenwerte:schuelerschluessel1 +:=standardmaskenfeld(namefeldnr);schuelerschluessel2:=standardmaskenfeld( +vornamefeldnr);schuelerschluessel3:=standardmaskenfeld(geburtsdatumfeldnr); +bestandsschluessel1:=standardmaskenfeld(jgstfeldnr);bestandsschluessel2:= +standardmaskenfeld(zugtutorfeldnr);anschreibenzeigen:=standardmaskenfeld( +bildschirmfeldnr)<>niltext.maskenwerteinordnung:IF NOT ((standardmaskenfeld( +bildschirmfeldnr)<>niltext)XOR (standardmaskenfeld(druckerfeldnr)<>niltext)) +THEN infeld(bildschirmfeldnr);FALSE ELIF ((schuelerschluessel1<>niltextAND +bestandsschluessel1+bestandsschluessel2=niltextAND (schuelerschluessel2<> +niltextXOR (schuelerschluessel2=niltextAND schuelerschluessel3=niltext)))XOR +(schuelerschluessel1+schuelerschluessel2+schuelerschluessel3=niltextAND +bestandsschluessel1<>niltext)XOR (schuelerschluessel1+schuelerschluessel2+ +schuelerschluessel3+bestandsschluessel1+bestandsschluessel2=niltext))THEN +TRUE ELSE infeld(namefeldnr);FALSE FI .meldedenfehler:standardmeldung( +fehlermeldnr,niltext).zurueckzumdialog:return(vater). +meldeunzulaessigeschuelergruppenauswahl:standardmeldung( +dieauswahlderjgstistnichtzulaessignr,niltext). +beibestandsauswahlauswahlzulaessig:(bestandsschluessel1=niltext)OR ( +bestandsschluessel1<>niltextCAND int(bestandsschluessel1)<=maxjgstCAND int( +bestandsschluessel1)>=minjgst).startenausfuehren: +initialisieredruckerfueranschreiben;dbstatus(ok);parsenooffields(30); +indexnummerbestimmen;uebernimmentsprechendedaten;anschreibenstart( +aktuellerindex,vordruck,anschreibenzeigen,(schuelerschluessel1+ +schuelerschluessel2)<>"",BOOL PROC sonderwertenachpruefungszulassung,BOOL +PROC multistopnachpruefler).uebernimmentsprechendedaten:aktuellesschuljahr:= +schulkenndatum("Schuljahr");putwert(fnrhjdsj,aktuellesschuljahr);putintwert( +fnrhjdhj,2);putwert(fnrhjdfamnames,schuelerschluessel1);putwert( +fnrhjdrufnames,schuelerschluessel2);putwert(fnrhjdgebdats,datumskonversion( +schuelerschluessel3));putwert(fnrhjdjgst,bestandsschluessel1);putwert( +fnrhjdkennung,bestandsschluessel2);putwert(fnrhjdversetzung, +schluesselnachpruefung).indexnummerbestimmen:IF schuelerschluessel1<>niltext +THEN aktuellerindex:=#dnrhalbjahresdaten#ixhjdverfamsjhjrufgebELSE +aktuellerindex:=ixhjdversjhjjgstkennFI .END PROC +nachpruefungszulassungstarten;BOOL PROC multistopnachpruefler:BOOL VAR b:= +wert(fnrhjdsj)=aktuellesschuljahrCAND intwert(fnrhjdhj)=2CAND wert( +fnrhjdversetzung)=schluesselnachpruefung;IF bTHEN weitereueberpruefungFI ;b. +weitereueberpruefung:IF aktuellerindex=ixhjdverfamsjhjrufgebTHEN +ueberpruefenamenELSE IF bestandsschluessel1<>""THEN ueberpruefejgstFI FI . +ueberpruefenamen:b:=wert(fnrhjdfamnames)=schuelerschluessel1CAND ( +schuelerschluessel2=""COR wert(fnrhjdrufnames)=schuelerschluessel2)CAND ( +schuelerschluessel3=""COR wert(fnrhjdgebdats)=datumskonversion( +schuelerschluessel3)).ueberpruefejgst:b:=int(bestandsschluessel1)=intwert( +fnrhjdjgst)CAND (bestandsschluessel2=""COR bestandsschluessel2=wert( +fnrhjdkennung)).ENDPROC multistopnachpruefler;END PACKET +anschrnachpruefungszulassung; + diff --git a/app/schulis/2.2.1/src/1.anschr.schulbescheinigung b/app/schulis/2.2.1/src/1.anschr.schulbescheinigung new file mode 100644 index 0000000..16686b2 --- /dev/null +++ b/app/schulis/2.2.1/src/1.anschr.schulbescheinigung @@ -0,0 +1,61 @@ +PACKET anschrschulbescheinigungDEFINES schulbescheinigungeingang, +schulbescheinigungstarten,sonderwerteschulbescheinigung, +multistopschulbescheinigung:TEXT VAR schuelerschluessel1,schuelerschluessel2, +schuelerschluessel3,bestandsschluessel1,bestandsschluessel2;BOOL VAR +anschreibenzeigen;INT VAR aktuellerindex,eingabestatus;LET vordruck= +"vordruck schulbescheinigung";LET trennsymbol=" ",punkt=".";LET maske= +"ms auswahl schueler o. klasse",namefeldnr=2,vornamefeldnr=3, +geburtsdatumfeldnr=4,jgstfeldnr=5,zugtutorfeldnr=6,bildschirmfeldnr=7, +druckerfeldnr=8,niltext="",fehlermeldnr=56,wartemeldnr=69,datumfehler=157, +vater=1;PROC schulbescheinigungeingang:standardvproc(maske)END PROC +schulbescheinigungeingang;BOOL PROC sonderwerteschulbescheinigung:adressat(( +wert(fnrsurufnames)SUB 1)+punkt+trennsymbol+wert(fnrsufamnames));TRUE END +PROC sonderwerteschulbescheinigung;PROC schulbescheinigungstarten: +lesemaskenwerte;IF NOT (auswahldruckeroderbildschirmok)THEN meldedenfehler; +infeld(bildschirmfeldnr);zurueckzumdialogELSE IF schluesselmitdatumangegeben +THEN IF schuelerschluessel3okTHEN indexnrbilden;startenausfuehrenELSE +standardmeldung(datumfehler,niltext);infeld(geburtsdatumfeldnr); +zurueckzumdialogFI ;ELSE IF (alleschuelergewaehltXOR schuelergruppegewaehlt +XOR einschuelerohnedatumgewaehlt)THEN indexnrbilden;startenausfuehrenELSE +meldedenfehler;zurueckzumdialogFI ;FI ;FI .lesemaskenwerte: +schuelerschluessel1:=standardmaskenfeld(namefeldnr);schuelerschluessel2:= +standardmaskenfeld(vornamefeldnr);schuelerschluessel3:=standardmaskenfeld( +geburtsdatumfeldnr);bestandsschluessel1:=standardmaskenfeld(jgstfeldnr); +bestandsschluessel2:=standardmaskenfeld(zugtutorfeldnr);anschreibenzeigen:= +standardmaskenfeld(bildschirmfeldnr)<>niltext.auswahldruckeroderbildschirmok: +(standardmaskenfeld(bildschirmfeldnr)<>niltext)XOR (standardmaskenfeld( +druckerfeldnr)<>niltext).schluesselmitdatumangegeben:((bestandsschluessel1+ +bestandsschluessel2)=niltextAND schuelerschluessel1<>niltextAND +schuelerschluessel2<>niltextAND schuelerschluessel3<>niltext). +alleschuelergewaehlt:(schuelerschluessel1+schuelerschluessel2+ +schuelerschluessel3+bestandsschluessel1+bestandsschluessel2)=niltext. +schuelergruppegewaehlt:bestandsschluessel1<>niltextAND (schuelerschluessel1+ +schuelerschluessel2+schuelerschluessel3=niltext).einschuelerohnedatumgewaehlt +:(bestandsschluessel1+bestandsschluessel2+schuelerschluessel3)=niltextAND +schuelerschluessel1<>niltext.schuelerschluessel3ok:standardpruefe(6,4,0,0, +niltext,eingabestatus);IF NOT (eingabestatus=0)THEN FALSE ELSE TRUE FI . +meldedenfehler:standardmeldung(fehlermeldnr,niltext).zurueckzumdialog:return( +vater).indexnrbilden:standardmeldung(wartemeldnr,niltext);IF +bestandsschluessel1<>niltextTHEN IF bestandsschluessel2<>niltextTHEN +aktuellerindex:=ixsustatjgstzugELSE aktuellerindex:=ixsustatjgstFI ELSE +aktuellerindex:=dnrschuelerFI .startenausfuehren: +initialisieredruckerfueranschreiben;#anschreibenstart(bestand,vordruck, +dbmschulbescheinigung,schuelerschluessel1,schuelerschluessel2+ +schuelerschluessel3,anschreibenzeigen,laengedbmschulbescheinigung,BOOL PROC +sonderwerteschulbescheinigung);#dbstatus(ok);inittupel(dnrschueler); +parsenooffields(19);uebernimmentsprechendedaten;anschreibenstart( +aktuellerindex,vordruck,anschreibenzeigen,(schuelerschluessel1+ +schuelerschluessel2)<>"",BOOL PROC sonderwerteschulbescheinigung,BOOL PROC +multistopschulbescheinigung).uebernimmentsprechendedaten:putwert( +fnrsufamnames,schuelerschluessel1);putwert(fnrsurufnames,schuelerschluessel2) +;putwert(fnrsugebdatums,datumskonversion(schuelerschluessel3));putwert( +fnrsusgrpjgst,bestandsschluessel1);putwert(fnrsusgrpzugtut, +bestandsschluessel2);putwert(fnrsustatuss,"ls").END PROC +schulbescheinigungstarten;BOOL PROC multistopschulbescheinigung:BOOL VAR b:= +FALSE ;IF wert(fnrsustatuss)="ls"THEN IF aktuellerindex<>dnrschuelerTHEN IF +aktuellerindex=ixsustatjgstTHEN b:=bestandsschluessel1=wert(fnrsusgrpjgst) +ELSE b:=(bestandsschluessel1=wert(fnrsusgrpjgst)CAND bestandsschluessel2=wert +(fnrsusgrpzugtut))FI ELSE b:=(schuelerschluessel1<>niltextCAND dbstatus=ok) +COR (schuelerschluessel1=niltextCAND TRUE )FI ;FI ;bENDPROC +multistopschulbescheinigung;END PACKET anschrschulbescheinigung; + diff --git a/app/schulis/2.2.1/src/1.anschr.wiederholer b/app/schulis/2.2.1/src/1.anschr.wiederholer new file mode 100644 index 0000000..8de4b25 --- /dev/null +++ b/app/schulis/2.2.1/src/1.anschr.wiederholer @@ -0,0 +1,91 @@ +PACKET anschrwiederholerDEFINES wiederholereingang,wiederholerstarten, +sonderwertewiederholer,multistopwiederholer:INT VAR aktuellerindex;TEXT VAR +schuelerschluessel1,schuelerschluessel2,schuelerschluessel3, +bestandsschluessel1,bestandsschluessel2,aktuellesschuljahr:="";LET vordruck= +"vordruck fuer wiederholer";LET swindexvolljminderj=511, +swindexminderjmaennlweibl=512,swindexnichterreichtejgst=513;LET jgst13=13, +weibl="w",maennl="m",minderj="m",vollj="v",niltext="",trennsymbol=" ",punkt= +".",schluesselwiederholer="w";LET maske="ms anschr schueler o. klasse";LET +namefeldnr=2,vornamefeldnr=3,geburtsdatumfeldnr=4,jgstfeldnr=5,zugtutorfeldnr +=6,bildschirmfeldnr=7,druckerfeldnr=8;LET fehlermeldnr=56,nurimzweitenhj=194, +#wartemeldnr=69,anschreibenkannnichterstelltwerdennr=124,# +dieauswahlderjgstistnichtzulaessignr=146,vater=1;LET minjgst=5,maxjgst=13; +PROC wiederholereingang:standardvproc(maske)END PROC wiederholereingang;BOOL +PROC sonderwertewiederholer:BOOL VAR erstellbar:=TRUE ;sucheschuelerdaten; +sonderwertfuervolljoderminderjundmaennlweibl;sonderwertfuernichterreichtejgst +;sonderwertfueradressaten;erstellbar#keitsangabe#.sucheschuelerdaten: +inittupel(dnrschueler);uebernimmschuelerdaten;search(dnrschueler,TRUE ). +uebernimmschuelerdaten:putwert(fnrsufamnames,wert(fnrhjdfamnames));putwert( +fnrsurufnames,wert(fnrhjdrufnames));putwert(fnrsugebdatums,wert(fnrhjdgebdats +)).sonderwertfuervolljoderminderjundmaennlweibl:IF volljaehrig(wert( +fnrsugebdatums))THEN setzesonderwert(swindexvolljminderj,vollj); +setzesonderwert(swindexminderjmaennlweibl,niltext)ELSE setzesonderwert( +swindexvolljminderj,minderj);IF wert(fnrsugeschlechts)=weiblTHEN +setzesonderwert(swindexminderjmaennlweibl,weibl)ELSE setzesonderwert( +swindexminderjmaennlweibl,maennl)FI ;setzeerzieheradresseFI . +setzeerzieheradresse:#IF intwert(fnradresse)<>0THEN putwert(fnradrkuerzel, +wert(fnradresse));search(dnradressen,TRUE );IF dbstatus=okTHEN putwert( +fnrsustrnrs,wert(fnradrstrasse));putwert(fnrsuplzorts,wert(fnradrort))FI FI # +IF wert(fnrsuplzorte)<>""THEN putwert(fnrsustrnrs,wert(fnrsustrnre));putwert( +fnrsuplzorts,wert(fnrsuplzorts))FI .sonderwertfuernichterreichtejgst: +setzesonderwert(swindexnichterreichtejgst,text(intwert(fnrhjdjgst)+1)); +erstellbar:=NOT (intwert(fnrhjdjgst)=jgst13).sonderwertfueradressaten: +adressat((wert(fnrsurufnames)SUB 1)+punkt+trennsymbol+wert(fnrsufamnames));.# +erstellbarkeitsangabe:IF intwert(fnrzugang)=schluesselwiederholerTHEN +erstellbar:=wert(dbmindexversetzung,zweiteteilsegment)=schluesselwiederholer +AND erstellbarELSE erstellbar:=(dbwert(dbmindexversetzung,ersteteilsegment)= +schluesselwiederholer)AND erstellbarFI ;erstellbar.#END PROC +sonderwertewiederholer;PROC wiederholerstarten:IF zweiteshjTHEN weiterFI . +weiter:lesemaskenwerte;IF maskenwerteinordnungTHEN IF +beibestandsauswahlauswahlzulaessigTHEN #bestandbilden;IF status<>0THEN +meldenichterstellbar;zurueckzumdialogELSE #indexnummerbestimmen; +startenausfuehren#FI #ELSE meldeunzulaessigeschuelergruppenauswahl; +zurueckzumdialogFI ELSE meldedenfehler;zurueckzumdialogFI .zweiteshj:IF int( +schulkenndatum("Schulhalbjahr"))=1THEN standardmeldung(nurimzweitenhj,"2.#"); +zurueckzumdialog;FALSE ELSE TRUE FI .lesemaskenwerte:schuelerschluessel1:= +standardmaskenfeld(namefeldnr);schuelerschluessel2:=standardmaskenfeld( +vornamefeldnr);schuelerschluessel3:=standardmaskenfeld(geburtsdatumfeldnr); +bestandsschluessel1:=standardmaskenfeld(jgstfeldnr);bestandsschluessel2:= +standardmaskenfeld(zugtutorfeldnr);BOOL CONST anschreibenzeigen:= +standardmaskenfeld(bildschirmfeldnr)<>niltext.maskenwerteinordnung:IF NOT (( +standardmaskenfeld(bildschirmfeldnr)<>niltext)XOR (standardmaskenfeld( +druckerfeldnr)<>niltext))THEN infeld(bildschirmfeldnr);FALSE ELIF (( +schuelerschluessel1<>niltextAND bestandsschluessel1+bestandsschluessel2= +niltextAND (schuelerschluessel2<>niltextXOR (schuelerschluessel2=niltextAND +schuelerschluessel3=niltext)))XOR (schuelerschluessel1+schuelerschluessel2+ +schuelerschluessel3=niltextAND bestandsschluessel1<>niltext)XOR ( +schuelerschluessel1+schuelerschluessel2+schuelerschluessel3+ +bestandsschluessel1+bestandsschluessel2=niltext))THEN TRUE ELSE infeld( +namefeldnr);FALSE FI .meldedenfehler:standardmeldung(fehlermeldnr,niltext). +zurueckzumdialog:return(vater).#meldenichterstellbar:standardmeldung( +anschreibenkannnichterstelltwerdennr,niltext);.# +meldeunzulaessigeschuelergruppenauswahl:standardmeldung( +dieauswahlderjgstistnichtzulaessignr,niltext). +beibestandsauswahlauswahlzulaessig:(bestandsschluessel1=niltext)OR ( +bestandsschluessel1<>niltextCAND int(bestandsschluessel1)<maxjgstCAND int( +bestandsschluessel1)>=minjgst).startenausfuehren: +initialisieredruckerfueranschreiben;dbstatus(ok);inittupel(dnrhalbjahresdaten +);parsenooffields(28);uebernimmentsprechendedaten;anschreibenstart( +aktuellerindex,vordruck,anschreibenzeigen,(schuelerschluessel1+ +schuelerschluessel2)<>"",BOOL PROC sonderwertewiederholer,BOOL PROC +multistopwiederholer).uebernimmentsprechendedaten:putwert(fnrhjdfamnames, +schuelerschluessel1);putwert(fnrhjdrufnames,schuelerschluessel2);putwert( +fnrhjdgebdats,datumskonversion(schuelerschluessel3));aktuellesschuljahr:= +schulkenndatum("Schuljahr");putwert(fnrhjdsj,aktuellesschuljahr);putintwert( +fnrhjdhj,2);putwert(fnrhjdjgst,bestandsschluessel1);putwert(fnrhjdkennung, +bestandsschluessel2);putwert(fnrhjdversetzung,schluesselwiederholer);. +indexnummerbestimmen:IF schuelerschluessel1<>niltextTHEN aktuellerindex:=# +dnrhalbjahresdaten#ixhjdverfamsjhjrufgebELSE aktuellerindex:= +ixhjdversjhjjgstkennFI .END PROC wiederholerstarten;BOOL PROC +multistopwiederholer:BOOL VAR b:=wert(fnrhjdsj)=aktuellesschuljahrCAND +intwert(fnrhjdhj)=2CAND wert(fnrhjdversetzung)=schluesselwiederholer;IF b +THEN weitereueberpruefungFI ;b.weitereueberpruefung:IF aktuellerindex= +ixhjdverfamsjhjrufgebTHEN ueberpruefenamenELSE IF bestandsschluessel1<>"" +THEN ueberpruefejgstFI FI .ueberpruefenamen:b:=wert(fnrhjdfamnames)= +schuelerschluessel1CAND (schuelerschluessel2=""COR wert(fnrhjdrufnames)= +schuelerschluessel2)CAND (schuelerschluessel3=""COR wert(fnrhjdgebdats)= +datumskonversion(schuelerschluessel3)).ueberpruefejgst:b:=int( +bestandsschluessel1)=intwert(fnrhjdjgst)CAND (bestandsschluessel2=""COR +bestandsschluessel2=wert(fnrhjdkennung)).ENDPROC multistopwiederholer;END +PACKET anschrwiederholer; + diff --git a/app/schulis/2.2.1/src/1.auskunft.betroffene b/app/schulis/2.2.1/src/1.auskunft.betroffene new file mode 100644 index 0000000..bfa245d --- /dev/null +++ b/app/schulis/2.2.1/src/1.auskunft.betroffene @@ -0,0 +1,259 @@ +PACKET auskbetroffenDEFINES auskbetroffeneingang,auskbetroffenstarten, +auskbetroffensonderwerte:TEXT VAR schuelerschluessel1,schuelerschluessel2, +schuelerschluessel3;LET swiort=511,swiwohntbei=512,swilangtextortsteil=513, +swilangtexterzber=514,swiorterzber=515,swilangtextstaatsan=516, +swilangtextsprache=517,swilangtextspaetaus=518,swilangtextgeschl=519, +swilangtextrelizug=520,swilangtextrelizeugnis=521,swiortletzteschule=522, +swilangtextschulform=523,swiaufbschuljeintrsek2=524,swilangtextzugang=525, +swilangtextabgang=526,swilangtextabschluss=527,swiortneueschule=528, +swilangtextfremdspr1=537,swiaufbhjafremdspr1=538,swiaufbhjefremdspr1=539, +swilangtextfremdspr2=540,swiaufbhjafremdspr2=541,swiaufbhjefremdspr2=542, +swilangtextfremdspr3=543,swiaufbhjafremdspr3=544,swiaufbhjefremdspr3=545, +swilangtextfremdspr4=546,swiaufbhjafremdspr4=547,swiaufbhjefremdspr4=548, +swilangtextreliunt=549,swilangtextkumu=550,swilangtextwpf191=551, +swilangtextwpf291=552,swilangtextwpf192=553,swilangtextwpf292=554, +swilangtextwpf1101=555,swilangtextwpf2101=556,swilangtextwpf1102=557, +swilangtextwpf2102=558,swilangtextag1=559,swiaufbhjaag1=560,swiaufbhjeag1=561 +,swilangtextag2=562,swiaufbhjaag2=563,swiaufbhjeag2=564,swilangtextag3=565, +swiaufbhjaag3=566,swiaufbhjeag3=567,swistrasseerz=568,switelerz=569, +swinameletzte=570,swistrasseletzte=571,swinameneue=572,swistrasseneue=573, +swischulform=582,swilangtextstatus=583;LET suffix1="c02 ortsteil",suffix2= +"c02 verwandtschaft",suffix3="c02 staaten",suffix4="c02 sprachen",suffix5= +"c02 relizugehoerigkeit",suffix6="c02 schulart",suffix7="c02 zugang",suffix8= +"c02 abgang",suffix9="c02 abschluss",suffix12="c02 blauer brief",suffix13= +"c02 bemerkungen",suffix14="c02 versetzung",namefeldnr=2,vornamefeldnr=3, +geburtsdatumfeldnr=4,niltext="",null=0,blank=" ",punkt=".",kla="(",klz=")", +fehlermeld1=56,fehlermeld2=157,wartemeldnr=69,vater=1,maske= +"ms auswahl schueler o. klasse mit bestand";TEXT VAR aktjgsthj;INT VAR +aktuellesschuljahr,aktuelleshalbjahr,jahr,halbjahr,eingabestatus;INT VAR +gewindex;BOOL CONST anschreibenzeigen:=FALSE ;PROC auskbetroffeneingang: +standardvproc(maske)END PROC auskbetroffeneingang;PROC auskbetroffenstarten: +lesemaskenwerte;IF schluesselmitdatumangegebenTHEN IF datumseingabekorrekt +THEN fortfahrenELSE meldungdatumnichtkorrekt;zurueckzumdialogFI ;ELSE IF +schlüsselohnedatumkorrektTHEN fortfahrenELSE meldungauswahlnichtsinnvoll; +zurueckzumdialogFI ;FI .schluesselmitdatumangegeben:schuelerschluessel1<> +niltextCAND schuelerschluessel2<>niltextCAND schuelerschluessel3<>niltext. +datumseingabekorrekt:standardpruefe(6,4,0,0,niltext,eingabestatus); +eingabestatus=0.schlüsselohnedatumkorrekt:schuelerschluessel3=niltextCAND +schuelerschluessel1<>niltext.fortfahren:setzemitseitennummern(TRUE );gewindex +:=dnrschueler;startenausfuehren.lesemaskenwerte:schuelerschluessel1:= +standardmaskenfeld(namefeldnr);schuelerschluessel2:=standardmaskenfeld( +vornamefeldnr);schuelerschluessel3:=standardmaskenfeld(geburtsdatumfeldnr). +meldungauswahlnichtsinnvoll:standardmeldung(fehlermeld1,niltext). +meldungdatumnichtkorrekt:standardmeldung(fehlermeld2,niltext). +zurueckzumdialog:return(vater).startenausfuehren:BOOL CONST einzelbearbeitung +:=TRUE ;reinitparsing;standardmeldung(wartemeldnr,niltext);#dr20.08.87# +aktjgsthj:=schulkenndatum("Schulhalbjahr");aktuelleshalbjahr:=int(aktjgsthj); +aktuellesschuljahr:=int(schulkenndatum("Schuljahr"));convertierehalbjahr; +setzesonderwerteschulkenndaten;setzewerte;zusammengesetztesanschreiben( +gewindex,anschreibenzeigen,einzelbearbeitung,BOOL PROC +auskbetroffensonderwerte,BOOL PROC multistopauskunft,TEXT PROC +druckdateiauskzusammenstellen).setzewerte:putwert(fnrsufamnames, +schuelerschluessel1);putwert(fnrsurufnames,schuelerschluessel2);putwert( +fnrsugebdatums,datumskonversion(schuelerschluessel3)).convertierehalbjahr:IF +aktuelleshalbjahr=1THEN jahr:=int(subtext(wert(2),1,2));halbjahr:=2ELSE jahr +:=int(subtext(wert(2),3,4));halbjahr:=1FI .END PROC auskbetroffenstarten; +BOOL PROC auskbetroffensonderwerte:LET nein="n",ja="j",langtextnein="nein", +langtextja="ja";initialisieresonderwerte;holediffdaten;adressat((wert( +fnrsurufnames)SUB 1)+punkt+blank+wert(fnrsufamnames));setzesonderwert(swiort, +wert(fnrsuplzorts));setzesonderwert(swiorterzber,wert(fnrsuplzorte)); +setzesonderwert(swistrasseerz,wert(fnrsustrnre));setzesonderwert(switelerz, +wert(fnrsutelnre));sucheadressezurschule(wert(fnrsuskennlschule)); +setzesonderwert(swiortletzteschule,wert(fnrschplzort));setzesonderwert( +swischulform,wert(fnrschart));setzesonderwert(swilangtextschulform,langtext( +suffix6,wert(fnrschart)));setzesonderwert(swinameletzte,wert(fnrschname)); +setzesonderwert(swistrasseletzte,wert(fnrschstrnr));sucheadressezurschule( +wert(fnrsuskennnschule));setzesonderwert(swiortneueschule,wert(fnrschplzort)) +;setzesonderwert(swinameneue,wert(fnrschname));setzesonderwert(swistrasseneue +,wert(fnrschstrnr));setzesonderwert(swiwohntbei,wohntbei);setzesonderwert( +swilangtextgeschl,langtextgeschl);setzesonderwert(swilangtextspaetaus, +langtextspaetaus);setzesonderwert(swilangtextrelizeugnis,langtextrelizeugnis) +;setzesonderwert(swilangtextstatus,langtextstatus);setzesonderwert( +swilangtextortsteil,langtext(suffix1,wert(fnrsuortsteils)));setzesonderwert( +swilangtexterzber,langtext(suffix2,wert(fnrsuverhes)));setzesonderwert( +swilangtextstaatsan,langtext(suffix3,wert(fnrsustaatsangs)));setzesonderwert( +swilangtextsprache,langtext(suffix4,wert(fnrsumuttersprache))); +setzesonderwert(swilangtextrelizug,langtext(suffix5,wert(fnrsureligionsz))); +setzesonderwert(swilangtextzugang,langtext(suffix7,wert(fnrsuartzugang))); +setzesonderwert(swilangtextabgang,langtext(suffix8,wert(fnrsuabggrund))); +setzesonderwert(swilangtextabschluss,langtext(suffix9,wert(fnrsuabschluss))); +setzesonderwert(swilangtextfremdspr1,langtextfach(wert(fnrdd1fremdfach))); +setzesonderwert(swilangtextfremdspr2,langtextfach(wert(fnrdd2fremdfach))); +setzesonderwert(swilangtextfremdspr3,langtextfach(wert(fnrdd3fremdfach))); +setzesonderwert(swilangtextfremdspr4,langtextfach(wert(fnrdd4fremdfach))); +setzesonderwert(swilangtextreliunt,langtextfach(wert(fnrddreliunter))); +setzesonderwert(swilangtextkumu,langtextfach(wert(fnrddkunstmusik))); +setzesonderwert(swilangtextwpf191,langtextfach(wert(fnrddfach091a))); +setzesonderwert(swilangtextwpf291,langtextfach(wert(fnrddfach091b))); +setzesonderwert(swilangtextwpf192,langtextfach(wert(fnrddfach092a))); +setzesonderwert(swilangtextwpf292,langtextfach(wert(fnrddfach092b))); +setzesonderwert(swilangtextwpf1101,langtextfach(wert(fnrddfach101a))); +setzesonderwert(swilangtextwpf2101,langtextfach(wert(fnrddfach101b))); +setzesonderwert(swilangtextwpf1102,langtextfach(wert(fnrddfach102a))); +setzesonderwert(swilangtextwpf2102,langtextfach(wert(fnrddfach102b))); +setzesonderwert(swilangtextag1,langtextfach(wert(fnrddagthema1))); +setzesonderwert(swilangtextag2,langtextfach(wert(fnrddagthema2))); +setzesonderwert(swilangtextag3,langtextfach(wert(fnrddagthema3))); +setzesonderwert(swiaufbschuljeintrsek2,aufbschuljahr(fnrsueintrittinsek)); +setzesonderwert(swiaufbhjafremdspr1,aufbhalbjahr(fnrdd1fremdb)); +setzesonderwert(swiaufbhjefremdspr1,aufbhalbjahr(fnrdd1fremde)); +setzesonderwert(swiaufbhjafremdspr2,aufbhalbjahr(fnrdd2fremdb)); +setzesonderwert(swiaufbhjefremdspr2,aufbhalbjahr(fnrdd2fremde)); +setzesonderwert(swiaufbhjafremdspr3,aufbhalbjahr(fnrdd3fremdb)); +setzesonderwert(swiaufbhjefremdspr3,aufbhalbjahr(fnrdd3fremde)); +setzesonderwert(swiaufbhjafremdspr4,aufbhalbjahr(fnrdd4fremdb)); +setzesonderwert(swiaufbhjefremdspr4,aufbhalbjahr(fnrdd4fremde)); +setzesonderwert(swiaufbhjaag1,aufbhalbjahr(fnrddagthema1b));setzesonderwert( +swiaufbhjeag1,aufbhalbjahr(fnrddagthema1e));setzesonderwert(swiaufbhjaag2, +aufbhalbjahr(fnrddagthema2b));setzesonderwert(swiaufbhjeag2,aufbhalbjahr( +fnrddagthema2e));setzesonderwert(swiaufbhjaag3,aufbhalbjahr(fnrddagthema3b)); +setzesonderwert(swiaufbhjeag3,aufbhalbjahr(fnrddagthema3e));TRUE . +holediffdaten:readtid(dnrdiffdaten,zugriff(fnrsutiddiffdaten)).langtextstatus +:IF wert(fnrsustatuss)="n05"THEN geklammert( +"Neuangemeldet zur Jahrgangsstufe 5")ELIF wert(fnrsustatuss)="n011"THEN +geklammert("Neuangemeldet zu jahrgangsstufe 11")ELIF wert(fnrsustatuss)="nso" +THEN geklammert("Neuangemeldet")ELIF wert(fnrsustatuss)="abg"THEN geklammert( +"Abgegangen")ELIF wert(fnrsustatuss)="ls"THEN geklammert( +"Laufendes Schuljahr")ELSE geklammert("Kein Eintrag")FI .wohntbei:IF wert( +fnrsuwohntbei)=niltextTHEN niltextELSE "bei: "+wert(fnrsuwohntbei)FI . +langtextgeschl:LET weiblich="w",langtextweibl="weiblich",langtextmaennl= +"männlich";IF wert(fnrsugeschlechts)=weiblichTHEN kla+langtextweibl+klzELSE +kla+langtextmaennl+klzFI .langtextspaetaus:IF wert(fnrsuspaetaus)=neinTHEN +langtextneinELIF wert(fnrsuspaetaus)=jaTHEN langtextjaELSE niltextFI . +langtextrelizeugnis:IF wert(fnrsureligionsz)=neinTHEN langtextneinELIF wert( +fnrsureligionsz)=jaTHEN langtextjaELSE niltextFI .END PROC +auskbetroffensonderwerte;PROC sucheadressezurschule(TEXT CONST schulk): +inittupel(dnrschulen);IF schulk<>""THEN putwert(fnrschkennung,schulk);search( +dnrschulen,TRUE );FI ENDPROC sucheadressezurschule;TEXT PROC langtextfach( +TEXT CONST kuerzel):inittupel(dnrfaecher);putwert(dnrfaecher+1,kuerzel); +search(dnrfaecher,TRUE );geklammert(wert(dnrfaecher+2))END PROC langtextfach; +TEXT PROC langtext(TEXT CONST bestand,bemerkungsschluessel):TEXT VAR +gefundenerlangtext:="";INT VAR bestandsid:=0;putwert(fnrschlsachgebiet, +bestand);putwert(fnrschlschluessel,bemerkungsschluessel);search(dnrschluessel +,TRUE );IF dbstatus=okTHEN gefundenerlangtext:=wert(fnrschllangtext)ELSE +dbstatus(ok);FI ;geklammert(gefundenerlangtext)END PROC langtext;TEXT PROC +geklammert(TEXT CONST zuklammern):IF zuklammern=niltextTHEN niltextELSE kla+ +zuklammern+klzFI ENDPROC geklammert;TEXT PROC aufbschuljahr(INT CONST dbindex +):LET trenner="/";IF wert(dbindex)=niltextOR wert(dbindex)="0"THEN niltext +ELSE subtext(wert(dbindex),1,2)+trenner+subtext(wert(dbindex),3,4)FI END +PROC aufbschuljahr;TEXT PROC aufbhalbjahr(INT CONST dbindex):LET trenner="."; +IF wert(dbindex)=niltextTHEN niltextELSE subtext(wert(dbindex),1,2)+trenner+ +subtext(wert(dbindex),3,3)FI END PROC aufbhalbjahr;TEXT PROC aufbhalbjahr( +INT CONST dbindex,ae):LET trenner=".";TEXT VAR hj:=subtext(wert(dbindex),(ae* +3)-2,ae*3);IF hj=niltextTHEN niltextELSE subtext(hj,1,2)+trenner+subtext(hj,3 +,3)FI END PROC aufbhalbjahr;TEXT PROC druckdateiauskzusammenstellen:LET +prevordruck="vordruck",postvordruck=" auskunft betroffene",vordruck1= +"vordruck1 auskunft betroffene",vordruck2="vordruck2 auskunft betroffene", +vordruck3="vordruck3 auskunft betroffene",vordruck4= +"vordruck4 auskunft betroffene",vordruck5="vordruck5 auskunft betroffene", +anzvordrucke=5,hilfsdatei1="hilfsdatei1",hilfsdatei2="hilfsdatei2", +hilfsdateikopf="hilfsdatei kopf",druckdatei="liste.1",manager= +"anschreiben server";INT VAR i,zeilenanz1,zeilenanz2,zeilenanzkopf,anzhj; +TEXT VAR zeile,schuljahr;INT VAR neuesschuljahr;FILE VAR f,g,kopfspeicher; +aktuellevordruckevommanagerholen;druckvorbereiten; +allgemeineschuelerdatenindiedruckdateischreiben; +halbjahresdatendesschuelersindiedruckdateischreiben; +letztehilfsdateiindruckdateibringen;drucknachbereitenohneausdrucken; +druckdatei.aktuellevordruckevommanagerholen:FOR iFROM 1UPTO anzvordruckeREP +forget(prevordruck+text(i)+postvordruck,quiet);fetch(prevordruck+text(i)+ +postvordruck,/manager)PER .allgemeineschuelerdatenindiedruckdateischreiben: +briefalternative(vordruck1,hilfsdatei1);f:=sequentialfile(input,hilfsdatei1); +#limit(75);##"unerklärliche"Z eilenumbrüche#maxlinelength(f,75);zeilenanz1:= +lines(f);FOR iFROM 1UPTO zeilenanz1REP getline(f,zeile);druckzeileschreiben( +zeile)PER ;seitenwechsel;forget(hilfsdatei1,quiet);briefalternative(vordruck2 +,hilfsdatei1);vordruck2merkenfuerfolgeseiten;briefalternative(vordruck3, +hilfsdatei1);f:=sequentialfile(output,hilfsdatei1);zeilenanz1:=lines(f). +halbjahresdatendesschuelersindiedruckdateischreiben:bestimme5teshjvor;lesehjd +;WHILE (dbstatus=ok)CAND gleicherschuelerREP initialisieresonderwerte; +alteanweisungsfolge;succ(dnrhalbjahresdaten);PER .bestimme5teshjvor:anzhj:=-5 +;bestimmeentsprechendesschuljahr.bestimmeentsprechendesschuljahr:IF anzhj<0 +THEN anzhj:=anzhj*-1;neuesschuljahr:=jahr-(anzhjDIV 2);IF (anzhjMOD 2)=0CAND +halbjahr=2THEN schuljahr:=text(neuesschuljahr)+text(neuesschuljahr+1);ELSE +schuljahr:=text(neuesschuljahr-1)+text(neuesschuljahr);FI ELSE neuesschuljahr +:=jahr+(anzhjDIV 2)+anzhjMOD 2;IF ((anzhjMOD 2)=1CAND halbjahr=2)COR ( +halbjahr=1)THEN schuljahr:=text(neuesschuljahr-1)+text(neuesschuljahr);ELSE +schuljahr:=text(neuesschuljahr)+text(neuesschuljahr+1);FI FI .lesehjd: +inittupel(dnrhalbjahresdaten);uebernehmenschuelerdaten;search( +dnrhalbjahresdaten,FALSE ).uebernehmenschuelerdaten:putwert(fnrhjdfamnames, +wert(fnrsufamnames));putwert(fnrhjdrufnames,wert(fnrsurufnames));putwert( +fnrhjdgebdats,wert(fnrsugebdatums));putwert(fnrhjdsj,schuljahr);putintwert( +fnrhjdhj,neueshalbjahr);.neueshalbjahr:IF aktuelleshalbjahr=1THEN 2ELSE 1FI . +gleicherschueler:wert(fnrhjdfamnames)=wert(fnrsufamnames)CAND wert( +fnrhjdrufnames)=wert(fnrsurufnames)CAND wert(fnrhjdgebdats)=wert( +fnrsugebdatums).alteanweisungsfolge:teil1hjdaufbereiten(vordruck4,hilfsdatei2 +);aufbereitetedatenunterbringen;teil2hjdaufbereiten(vordruck5,hilfsdatei2); +aufbereitetedatenunterbringen;.vordruck2merkenfuerfolgeseiten:copy( +hilfsdatei1,hilfsdateikopf);kopfspeicher:=sequentialfile(input,hilfsdateikopf +);zeilenanzkopf:=lines(kopfspeicher).aufbereitetedatenunterbringen:g:= +sequentialfile(input,hilfsdatei2);#limit(75);##"unerklärliche"Z eilenumbrüche +#maxlinelength(g,75);zeilenanz2:=lines(g);IF zeilenanz1+zeilenanz2> +drucklaengeTHEN hilfsdatei1indruckdateibringenundloeschen;seitenwechsel; +vordruckkopfnachhilfsdatei1;zeilenanz1:=zeilenanz2+zeilenanzkopf;ELSE +zeilenanz1:=zeilenanz1+zeilenanz2;FI ;hilfsdatei2nachhilfsdatei1undloeschen;. +hilfsdatei1indruckdateibringenundloeschen:input(f);FOR iFROM 1UPTO zeilenanz1 +REP getline(f,zeile);druckzeileschreiben(zeile);PER ;forget(hilfsdatei1,quiet +).vordruckkopfnachhilfsdatei1:f:=sequentialfile(output,hilfsdatei1);input( +kopfspeicher);FOR iFROM 1UPTO zeilenanzkopfREP getline(kopfspeicher,zeile); +putline(f,zeile)PER .hilfsdatei2nachhilfsdatei1undloeschen:FOR iFROM 1UPTO +zeilenanz2REP getline(g,zeile);putline(f,zeile)PER ;forget(hilfsdatei2,quiet) +.letztehilfsdateiindruckdateibringen:input(f);FOR iFROM 1UPTO zeilenanz1REP +getline(f,zeile);druckzeileschreiben(zeile)PER ;forget(hilfsdateikopf,quiet); +forget(hilfsdatei1,quiet).END PROC druckdateiauskzusammenstellen;PROC +teil1hjdaufbereiten(TEXT CONST vordruck,hilfsdatei):LET wiederholung= +" Wiederholung",zuwiederholen=" zu wiederholen",wirdwiederholt= +" wird wiederholt",swiaufbschuljahr=511,swiwarnung1=512,swibemnr1=513, +swilangtextbemnr1=514,swiwarnung2=515,swibemnr2=516,swilangtextbemnr2=517, +swiversetzung=518,swilangtextversetzung=519,swistartnachpruefungen=520, +swinotenachpruef=527,swistartzeugnisbemerk=528,swistartversaeumtverspaetet= +534,swilangtextbemerknachpruefung=537;INT VAR hilfsindex,i,swi;TEXT VAR wie; +wie:=wert(fnrhjdversetzung);setzesonderwert(swiaufbschuljahr,aufbschuljahr( +fnrhjdsj));setzesonderwert(swiwarnung1,wert(fnrhjdvermblau));setzesonderwert( +swibemnr1,wert(fnrhjdbemblau));setzesonderwert(swilangtextbemnr1,langtext( +suffix12,wert(fnrhjdbemblau)));setzesonderwert(swiwarnung2,wert( +fnrhjdvermnachwarn));setzesonderwert(swibemnr2,wert(fnrhjdbemnachwarn)); +setzesonderwert(swilangtextbemnr2,langtext(suffix13,wert(fnrhjdbemnachwarn))) +;setzesonderwert(swiversetzung,wert(fnrhjdversetzung));setzesonderwert( +swilangtextversetzung,langtext(suffix14,wert(fnrhjdversetzung))); +setzesonderwert(swilangtextbemerknachpruefung,langtext("Bemerkungen", +geklammert(wert(fnrhjdbemnach))));swi:=swistartnachpruefungen;FOR iFROM 1 +UPTO 3REP setzesonderwert(swi,wert(fnrhjdnachfach1+i-1));swiINCR 1; +setzesonderwert(swi,langtextfach(wert(fnrhjdnachfach1+i-1)));swiINCR 1; +hilfsindexINCR 1PER ;setzesonderwert(swi,wert(fnrhjdnachfach)); +setzesonderwert(swinotenachpruef,wert(fnrhjdnacherg));swi:= +swistartzeugnisbemerk;FOR iFROM 1UPTO 3REP setzesonderwert(swi,wert( +fnrhjdbemzeug1+i-1));swiINCR 1;setzesonderwert(swi,langtext(suffix13,wert( +fnrhjdbemzeug1+i-1)));swiINCR 1;hilfsindexINCR 1PER ;swi:= +swistartversaeumtverspaetet;FOR iFROM 1UPTO 3REP setzesonderwert(swi,wert( +fnrhjdversstdm+i-1));swiINCR 1;hilfsindexINCR 1PER ;briefalternative(vordruck +,hilfsdatei).END PROC teil1hjdaufbereiten;PROC teil2hjdaufbereiten(TEXT +CONST vordruck,hilfsdatei):LET swifach=538,swiart=539,swiklau=541,swiknr=542, +swiwarn=543,swinote=544,swibem=545;setzesonderwert(swifach,aufbereiteterwert( +fnrhjdfach,2));setzesonderwert(swiart,aufbereiteterwert(fnrhjdkursart,2)); +setzesonderwert(swiklau,aufbereiteterwert(fnrhjdklausurteiln,1)); +setzesonderwert(swiknr,aufbereiteterwert(fnrhjdlerngrpkenn,4)); +setzesonderwert(swiwarn,aufbereiteterwert(fnrhjdvermwarnung,1)); +setzesonderwert(swinote,aufbereiteterwert(fnrhjdnotepunkte,2)); +setzesonderwert(swibem,aufbereiteterwert(fnrhjdbemerk,3));fuellebemerkungen; +briefalternative(vordruck,hilfsdatei).fuellebemerkungen:LET kuerzelbreite=3; +INT VAR i,l:=length(wert(fnrhjdbemerk))DIV kuerzelbreite,von,bis;TEXT VAR +kuerzel;INT VAR swib:=546;FOR iFROM 1UPTO lREP von:=((i-1)*kuerzelbreite)+1; +bis:=i*kuerzelbreite;kuerzel:=subtext(wert(fnrhjdbemerk),von,bis); +setzesonderwert(swib,kuerzel);swibINCR 1;setzesonderwert(swib,langtext( +suffix13,kuerzel));swibINCR 1PER .END PROC teil2hjdaufbereiten;TEXT PROC +aufbereiteterwert(INT CONST fnr,kuerzelbreite):LET doppelpunkt=":",anzspalten +=13,spaltenbreitetab=4;INT VAR i,l:=length(wert(fnr))DIV kuerzelbreite,von, +bis,blankanz;TEXT VAR zeile:="",kuerzel;#IF l>nullTHEN #FOR iFROM 1UPTO #l# +anzspaltenREP von:=((i-1)*kuerzelbreite)+1;bis:=i*kuerzelbreite;kuerzel:= +subtext(wert(fnr),von,bis);zeile:=zeile+aufbkuerzelPER ;#ELSE zeile:= +anzspalten*(doppelpunkt+spaltenbreitetab*blank)FI ;#zeile.aufbkuerzel:IF +length(kuerzel)<>nullTHEN blankanz:=spaltenbreitetab-length(kuerzel); +doppelpunkt+preblankanz*blank+kuerzel+postblankanz*blankELSE doppelpunkt+ +spaltenbreitetab*blankFI .preblankanz:blankanzDIV 2.postblankanz:blankanz- +preblankanz.ENDPROC aufbereiteterwert;BOOL PROC multistopauskunft:( +schuelerschluessel1=wert(fnrsufamnames))CAND (schuelerschluessel2=wert( +fnrsurufnames)COR schuelerschluessel2="")CAND (schuelerschluessel3= +datumrekonversion(wert(fnrsugebdatums))COR schuelerschluessel3="")END PROC +multistopauskunft;TEXT PROC leerintintext(TEXT CONST t):IF t="0"THEN ""ELSE t +FI END PROC leerintintext;TEXT PROC kurz(TEXT CONST t):TEXT VAR txt:=niltext; +IF t<>niltextTHEN txt:=t+blankFI ;txtEND PROC kurz;END PACKET auskbetroffen; + diff --git a/app/schulis/2.2.1/src/1.erf.abmeldedaten b/app/schulis/2.2.1/src/1.erf.abmeldedaten new file mode 100644 index 0000000..9c5523b --- /dev/null +++ b/app/schulis/2.2.1/src/1.erf.abmeldedaten @@ -0,0 +1,142 @@ +PACKET erfabmeldedatenDEFINES suabmeldedatenbearbeiten, +suabmeldedatenspeichern,suausgesuchteabmeldedatenbearbeiten, +schuelerlistezeigen,pruefungschuelerab:LET maskennameeingang= +"ms schuelerangabe",maskenstammname="ms erf abmeldedaten",aktbestand="ls", +bestandschulen="Schulen",fnrname=2,fnrrufname=3,fnrgebdatum=4,fnrjgst=5, +fnrzug=6,fnrabdatum=7,fnrabgrund=8,fnrneueschule=9,fnrabschluss=10, +meldunglistenerstellung=7,meldungspeicherung=50,pruefemeldung=57, +meldungkeineaenderung=63,meldungletzter=67,meldungkeineliste=68, +meldunggibtsnicht=71,meldungspeicherungfehlerhaft=73,meldungfalschesdatum=157 +;LET leer="",oblitrenner="$";LET anzschluessel=3;#A nzahlderamP +rimärschlüselbeteiligtenF elder#BOOL VAR falschesdatum:=FALSE ;FILE VAR f; +ROW anzschluesselTEXT VAR schluessel;#24.03.87#TAG VAR maske;TEXT VAR +dateiname:="Schülerliste",schuelertid:="";TEXT VAR abdatumsicherung, +abgrundsicherung,abschlusssicherung;LET logtextbeginn= +"Anw. 1.3.1 Änderung """;PROC bearbeitunginitialisieren:forget(dateiname, +quiet).END PROC bearbeitunginitialisieren;PROC suabmeldedatenbearbeiten:BOOL +VAR sudatenexistieren;falschesdatum:=FALSE ;systemdboff;reinitparsing; +bearbeitunginitialisieren;schluessel(1):=standardmaskenfeld(fnrname); +schluessel(2):=standardmaskenfeld(fnrrufname);schluessel(3):= +datumrekonversion(standardmaskenfeld(fnrgebdatum));pruefeobsudatenexistieren( +sudatenexistieren);IF NOT falschesdatumTHEN IF sudatenexistierenTHEN +schluessel(1):=wert(fnrsufamnames);schluessel(2):=wert(fnrsurufnames); +schluessel(3):=datumrekonversion(wert(fnrsugebdatums));standardstartproc( +maskenstammname);bereiteaenderungvor;standardnproc;ELSE standardmeldung( +meldunggibtsnicht,"");return(1)FI ;ELSE return(1)FI .END PROC +suabmeldedatenbearbeiten;PROC bereiteaenderungvor:saveupdateposition( +dnrschueler);schuelertid:=gettid;holedbwerteinmaske;abdatumsicherung:=wert( +fnrsuabgdats);abgrundsicherung:=wert(fnrsuabggrund);abschlusssicherung:=wert( +fnrsuabschluss);infeld(fnrname);standardfelderausgeben;infeld(fnrabdatum). +END PROC bereiteaenderungvor;PROC holedbwerteinmaske:standardmaskenfeld(wert( +fnrsufamnames),fnrname);standardmaskenfeld(wert(fnrsurufnames),fnrrufname); +standardmaskenfeld(datumrekonversion(wert(fnrsugebdatums)),fnrgebdatum); +standardmaskenfeld(jgstaufber(wert(fnrsusgrpjgst)),fnrjgst); +standardmaskenfeld(wert(fnrsusgrpzugtut),fnrzug);standardmaskenfeld( +datumrekonversion(wert(fnrsuabgdats)),fnrabdatum);standardmaskenfeld(wert( +fnrsuabggrund),fnrabgrund);standardmaskenfeld(wert(fnrsuskennnschule), +fnrneueschule);standardmaskenfeld(wert(fnrsuabschluss),fnrabschluss)END PROC +holedbwerteinmaske;PROC pruefeobsudatenexistieren(BOOL VAR suexist):TEXT VAR +datenbankwerte,schluesselwerte;inittupel(dnrschueler);maskenwerteindatenbank; +IF NOT falschesdatumTHEN search(ixsustatfamrufgeb);IF dbstatus=okTHEN +datenbankwerte:=wert(fnrsurufnames)+datumrekonversion(wert(fnrsugebdatums)); +schluesselwerte:=schluessel(2)+schluessel(3);suexist:=(wert(fnrsufamnames)= +schluessel(1)CAND ((schluessel(2)=leerAND schluessel(3)=leer)OR (pos( +datenbankwerte,schluesselwerte)=1)))ELSE suexist:=FALSE FI FI .END PROC +pruefeobsudatenexistieren;PROC maskenwerteindatenbank:putwert(fnrsufamnames, +schluessel(1));putwert(fnrsurufnames,schluessel(2));disablestop;initmaske( +maske,maskennameeingang);putwert(fnrsugebdatums,datumskonversion(schluessel(3 +)));IF iserrorTHEN clearerror;standardmeldung(meldungfalschesdatum,"");infeld +(fnrgebdatum);falschesdatum:=TRUE ;enablestop;ELSE enablestop;putwert( +fnrsustatuss,aktbestand);FI ;END PROC maskenwerteindatenbank;PROC +suabmeldedatenspeichern(BOOL CONST zuspeichern):IF zuspeichernTHEN +bereitespeicherungvorELSE standardmeldung(meldungkeineaenderung,""); +vorbereitendernaechstendatenbehandlungFI .bereitespeicherungvor:INT VAR +fehlerstatus:=0;pruefeplausibilitaet(fehlerstatus);IF datenfehlerfreiTHEN +datenschreiben;vorbereitendernaechstendatenbehandlungELSE fehlerbehandeln; +return(1)FI .datenfehlerfrei:fehlerstatus=0.fehlerbehandeln:infeld( +fehlerstatus).datenschreiben:meldespeicherung;datenindatenbankspeichern. +meldespeicherung:standardmeldung(meldungspeicherung,""). +datenindatenbankspeichern:logeintragvornehmen;setzedbwerte; +abmeldedatenschreiben.logeintragvornehmen:TEXT VAR eintrag:=logtextbeginn; +eintragCAT schluessel(1);eintragCAT ", ";eintragCAT schluessel(2);eintragCAT +", ";eintragCAT datumskonversion(schluessel(3));eintragCAT """";logeintrag( +eintrag).setzedbwerte:putwert(fnrsuabggrund,standardmaskenfeld(fnrabgrund)); +putwert(fnrsuskennnschule,standardmaskenfeld(fnrneueschule));putwert( +fnrsuabschluss,standardmaskenfeld(fnrabschluss));putwert(fnrsuabgdats, +datumskonversion(standardmaskenfeld(fnrabdatum)));.abmeldedatenschreiben:IF +abdatumsicherung<>wert(fnrsuabgdats)THEN restoreupdateposition(dnrschueler); +selupdate(dnrschueler);ELSE replace(dnrschueler,schuelertid)FI ;IF dbstatus<> +0THEN standardmeldung(meldungspeicherungfehlerhaft,"")#dr11.05.88ELIF +grundgeaendertTHEN grundinstatraumaendernELIF abschlussgeaendertTHEN +abschlussinstatraumaendern#FI .#drgrundgeaendert:11.05.88abgrundsicherung<> +wert(fnrsuabggrund).abschlussgeaendert:abschlusssicherung<>wert( +fnrsuabschluss).grundinstatraumaendern:kuerzelaendern(statnrabgrund, +abgrundsicherung,wert(fnrsuabggrund)).abschlussinstatraumaendern: +kuerzelaendern(statnrabschluss,abschlusssicherung,wert(fnrsuabschluss)).#END +PROC suabmeldedatenspeichern;PROC vorbereitendernaechstendatenbehandlung:IF +exists(dateiname)THEN holenaechstenschluesselauslisteELSE enter(2)FI . +holenaechstenschluesselausliste:BOOL VAR ok,kannbearbeitetwerden:=FALSE ; +holenaechstenmehrtlgschluesselausdatei(ok);WHILE okREP +pruefeobsudatenexistieren(ok);IF okTHEN kannbearbeitetwerden:=TRUE ;ok:= +FALSE ELSE holenaechstenmehrtlgschluesselausdatei(ok)FI PER ;IF +kannbearbeitetwerdenTHEN bereiteaenderungvor;return(1)ELSE +behandleendederthesaurusabarbeitungFI .behandleendederthesaurusabarbeitung: +standardmeldung(meldungletzter,"");enter(3).END PROC +vorbereitendernaechstendatenbehandlung;PROC schuelerlistezeigen:BOOL VAR +keineliste;schluessel(1):=standardmaskenfeld(fnrname);schluessel(2):= +standardmaskenfeld(fnrrufname);schluessel(3):=datumrekonversion( +standardmaskenfeld(fnrgebdatum));falschesdatum:=FALSE ;systemdboff; +parsenooffields(5);maskenwerteindatenbank;IF NOT falschesdatumTHEN +objektlistestarten(ixsustatfamrufgeb,schluessel(1),fnrsufamnames,TRUE , +keineliste);IF keinelisteTHEN reinitparsing;standardmeldung(meldungkeineliste +,"");return(1)ELSE standardmeldung(meldunglistenerstellung,""); +datensatzlistenausgabe(PROC (INT CONST )suerfassungschueler,TRUE ,BOOL PROC +pruefungschuelerab)FI ELSE return(1)FI END PROC schuelerlistezeigen;BOOL +PROC pruefungschuelerab:wert(fnrsustatuss)=aktbestandEND PROC +pruefungschuelerab;PROC suausgesuchteabmeldedatenbearbeiten:BOOL VAR ok, +kannbearbeitetwerden:=FALSE ;bearbeitunginitialisieren;objektlistebeenden( +dateiname,TRUE );reinitparsing;holeerstenmehrtlgschluesselausdatei(ok);WHILE +okREP pruefeobsudatenexistieren(ok);IF okTHEN kannbearbeitetwerden:=TRUE ;ok +:=FALSE ELSE holenaechstenmehrtlgschluesselausdatei(ok)FI PER ;IF +kannbearbeitetwerdenTHEN standardstartproc(maskenstammname); +bereiteaenderungvor;standardnprocELSE enter(2)FI .END PROC +suausgesuchteabmeldedatenbearbeiten;PROC holeerstenmehrtlgschluesselausdatei( +BOOL VAR ok):IF NOT exists(dateiname)THEN ok:=FALSE ;LEAVE +holeerstenmehrtlgschluesselausdateiFI ;f:=sequentialfile(input,dateiname); +holenaechstenmehrtlgschluesselausdatei(ok);END PROC +holeerstenmehrtlgschluesselausdatei;PROC +holenaechstenmehrtlgschluesselausdatei(BOOL VAR ok):TEXT VAR thesaurustext:= +"";INT VAR schluesselbeginn:=0;INT VAR schluesseltrennung:=0;INT VAR i:=1, +anzschlfelder:=anzkey(dnrschueler);IF eof(f)THEN ok:=FALSE ; +loeschedieerstellteobjektlisteELSE getline(f,thesaurustext); +bestimmeschluesselausthesaurustext;ok:=TRUE FI . +bestimmeschluesselausthesaurustext:schluesselbeginn:=pos(thesaurustext, +oblitrenner);schluesseltrennung:=pos(thesaurustext,oblitrenner, +schluesselbeginn+1);FOR iFROM 1UPTO anzschlfelderREP IF schluesseltrennung>0 +THEN schluessel(i):=subtext(thesaurustext,schluesselbeginn+1, +schluesseltrennung-1);schluesselbeginn:=schluesseltrennung;schluesseltrennung +:=pos(thesaurustext,oblitrenner,schluesselbeginn+1);ELSE schluessel(i):= +subtext(thesaurustext,schluesselbeginn+1);FI ;PER ;schluessel(3):= +datumrekonversion(schluessel(3));.END PROC +holenaechstenmehrtlgschluesselausdatei;PROC loeschedieerstellteobjektliste: +forget(dateiname,quiet);END PROC loeschedieerstellteobjektliste;PROC +pruefeplausibilitaet(INT VAR fstatus):LET pruefartdatum=5,fmeldnichtimbestand +=55,bestandabgangsgrund="c02 abgang",bestandabschluss="c02 abschluss";fstatus +:=0;standardmeldung(pruefemeldung,"");IF standardmaskenfeld(fnrabgrund)<>leer +THEN IF NOT imschlbestand(standardmaskenfeld(fnrabgrund),bestandabgangsgrund) +THEN fstatus:=fnrabgrund;standardmeldung(fmeldnichtimbestand,"");LEAVE +pruefeplausibilitaetFI ;FI ;IF standardmaskenfeld(fnrneueschule)<>leerTHEN +IF NOT imbestand(standardmaskenfeld(fnrneueschule),bestandschulen)THEN +fstatus:=fnrneueschule;standardmeldung(fmeldnichtimbestand,"");LEAVE +pruefeplausibilitaetFI ;FI ;IF standardmaskenfeld(fnrabschluss)<>leerTHEN IF +NOT imschlbestand(standardmaskenfeld(fnrabschluss),bestandabschluss)THEN +fstatus:=fnrabschluss;standardmeldung(fmeldnichtimbestand,"");LEAVE +pruefeplausibilitaetFI ;FI ;IF standardmaskenfeld(fnrabdatum)<>leerTHEN +standardpruefe(pruefartdatum,fnrabdatum,0,0,"",fstatus);FI ;END PROC +pruefeplausibilitaet;#dr11.05.88PROC kuerzelaendern(INT CONST statnr,TEXT +CONST alterwert,neuerwert):kuerzelsummeeinsrunter(statnr,jgstaufber(wert( +fnrsusgrpjgst)),compress(wert(fnrsusgrpzugtut)),aktbestand,alterwert); +kuerzelsummeeinsrauf(statnr,jgstaufber(wert(fnrsusgrpjgst)),compress(wert( +fnrsusgrpzugtut)),aktbestand,neuerwert)END PROC kuerzelaendern;#END PACKET +erfabmeldedaten + diff --git a/app/schulis/2.2.1/src/1.erf.schuelerdaten b/app/schulis/2.2.1/src/1.erf.schuelerdaten new file mode 100644 index 0000000..fb86963 --- /dev/null +++ b/app/schulis/2.2.1/src/1.erf.schuelerdaten @@ -0,0 +1,605 @@ +PACKET erfschuelerdatenDEFINES sustartunderfassungsbildschirmaufbauen, +suvonerfassungsbildschirmeinlesen,suanmeldungbearbeiten,suanmeldungeinfuegen, +suanmeldungzeigen,suanmeldungloeschen,suanmeldungloeschenausfuehren, +suanmeldungspeichern,suschuelerbsblaettern,sudatenimbildschirmkopieren, +suausgesuchtezurbearbeitung,suanmeldungausgesuchteloeschen, +suzurueckzumanfangsbildschirm,suerfassungswert,suerfassungschueler, +pruefungschueler:LET maskenstammname="ms erf schuelerdaten",maskennameeingang +="ms schuelerangabe",maskennamebearbeitung="ms bearb schuelerdaten";LET +bestandneu5="n05",bestandneu11="n11",bestandneusonst="nso",bestandlaufschulj= +"ls",#bestandschuelergruppen="aktuelle Schülergruppen",#bestandschulen= +"Schulen",kuerzelzugangaktjgst="z";LET meldungloeschfrage=65,meldungloeschung +=83,meldungkeineloeschung=84,meldunggibtsschon=70,meldunggibtsnicht=71, +meldungletzter=67,meldungkeineliste=68,meldungspeicherung=80,meldungaenderung +=81,meldungkeineaenderung=82,meldunglistenerstellung=7, +meldungblaetterngehtnicht=72,meldungspeicherungfehlerhaft=73, +meldungloeschenfehlerhaft=74,meldungangabengenauer=129,meldungfalschesdatum= +157,meldungbittename=166,pruefemeldung=57;LET fmeldbittefuellen=52, +fmeldnichtimbestand=55,fmeldfalschesdatum=157,fmeldnumundbegrenzt=54, +fmeldbitteanderejgst=85,weiblich="w",maennlich="m",bestandstaaten= +"c02 staaten",bestandreligion="c02 relizugehoerigkeit",bestandzugang= +"c02 zugang";LET fbs1=1,fbs2=2,fbs3=3,fbs4=4,erstesfeldbeierfassungbs1=2, +erstesfeldbeierfassungbs2=2,erstesfeldbeierfassungbs3=3, +erstesfeldbeierfassungbs4=3,erstererfbildschirm=2,letztererfbildschirm=4;LET +fnrname=2,fnrnamenszus=3,fnrgebname=4,fnrvornamen=5,fnrrufname=6,fnrsustr=7, +fnrsutelefon=8,fnrsuplzort=9,fnrwohntbei=10,fnrortsteil=11,fnrgebdat=12, +fnrgeschlecht=13,fnrstaatsan=14,fnrreligion=15,fnrverwandt=16,fnrerzname=17, +fnrerznamenszus=18,fnrerzvornamen=19,fnrerzstr=20,fnrerztelefon=21, +fnrerzplzort=22,fnrloeschfeld=23,fnrgebort=3,fnrkreisland=4,fnrmuttersprache= +5,fnraussiedler=6,fnreinschulung=7,fnrschulkuerzel=8,fnrletzteklasse=9, +fnreintrittsdatum=10,fnreintrittjgst=11,fnrsek2=12,fnrjgst=13,fnrzug=14, +fnrzugang=15,fnrneuerzug=16,fnrvermerk1=17,fnrabdatum=23,fnrabgrund=24, +fnrneueschule=25,fnrabschluss=26,fnrreligionunterricht=3, +fnrreligionabmelddatum=4,fnrreligionanmelddatum=5,fnrfremdsprache=6, +fnrkunstmusik=18,fnrag=19,fnrwpsek1=28,fnrauswahlanfang=2,fnrauswahlende=5, +fnrneuan5=2,fnrneuan11=3,fnrneusonst=4,fnrneulaufschulj=5,fnrparamname=6, +fnrparamrufname=7,fnrparamgebdat=8,fnrparambearbname=2,fnrparambearbrufname=3 +,fnrparambearbgebdat=4,fnrerstesausgabefeld=2,fnrletztesausgabefeld=40, +fnrausgabename=2;LET zahldervermerke=6,maxlaengenamebeiaenderung=32, +maxlaengenamebeikeineaenderung=26;LET pruefartdatum=6,pruefartauswahl=5;LET +satzeinfuegen=1,#satzaendern=2,#satzloeschen=3,satzneueschluessel=4;LET +kennungerfassungsprogramm=1,kennungbearbeitungsprogramm=2, +kennungzeigeprogramm=3;LET leer="",leerzeichen=" ",oblitrenner="$", +kennzmeldungauffaellig="#";LET jgst05="05",jgst11="11",jgstufe5=5,jgstufe10= +10,jgstufe11=11,jgstufe13=13;LET bsanzahl=4,maxfelderzahl=100;LET +anzschluesselsu=3;LET aktschuljahr="Schuljahr",akthalbjahr="Schulhalbjahr"; +LET aendern=1,loeschen=2;BOOL VAR zurueckschreiben:=FALSE ;BOOL VAR +neuerschueler,neuenschuelereinfuegen,neuerschuelerersteintrag;BOOL VAR +zeigeprogramm:=FALSE ,mehrereloeschen:=FALSE ,feldschutzzumloeschengesetzt:= +FALSE ;FILE VAR f;INT VAR statussudatei:=0;INT VAR startpos;INT VAR +programmnummer;INT VAR bs,bsdraussen,fnrfehlerfeld;ROW bsanzahlROW +maxfelderzahlTEXT VAR erfassungsfeld;ROW bsanzahlTAG VAR maske;ROW bsanzahl +BOOL VAR maskegeholt;ROW anzschluesselsuTEXT VAR schluessel;ROW +anzschluesselsuTEXT VAR alterschluessel;TEXT VAR dateiname:="Schülerliste", +hjdtid:="",diffdatentid:="";#schultypsich:="",verskennzsich:="";#TEXT VAR +aktbestand,programmname,tupelsich;LET logtextbeginn1="Anw. 1.1.1 ", +logtextbeginn2="Anw. 1.2.2 ";BOOL PROC erfassungsprogramm:programmnummer= +kennungerfassungsprogrammEND PROC erfassungsprogramm;BOOL PROC +bearbeitungsprogramm:programmnummer=kennungbearbeitungsprogrammEND PROC +bearbeitungsprogramm;PROC sustartunderfassungsbildschirmaufbauen(INT CONST +progrnr):IF progrnr=kennungzeigeprogrammTHEN programmnummer:= +kennungbearbeitungsprogramm;zeigeprogramm:=TRUE ELSE programmnummer:=progrnr; +zeigeprogramm:=FALSE FI ;startprozedur;erfassungsbildschirmaufbauen; +suvonerfassungsbildschirmeinlesen.END PROC +sustartunderfassungsbildschirmaufbauen;PROC startprozedur:programmname:=text( +vergleichsknoten);reinitparsing;systemdboff;bildschirmeinitialisieren; +standardkopfmaskeausgeben(programmname);.END PROC startprozedur;PROC +bildschirmeinitialisieren:FOR bsFROM 1UPTO bsanzahlREP maskegeholt(bs):= +FALSE PER ;bs:=1;maskeholen(bs);bsdraussen:=0.END PROC +bildschirmeinitialisieren;PROC erfassungsbildschirmaufbauen:reinitparsing; +standardkopfmaskeaktualisieren(bstitel);erfassungsmaskeausgeben; +feldvorbelegungenbehandeln;felderausgeben.bstitel:IF bs>1THEN programmname+ +" ("+text(bs-1)+".Bildschirm)"ELSE programmnameFI .erfassungsmaskeausgeben: +IF bs<>bsdraussenTHEN zeigemaske;bsdraussen:=bsFI .zeigemaske:show(maske(bs)) +.felderausgeben:startpos:=fnrerstesausgabefeld;put(maske(bs),erfassungsfeld( +bs),startpos);IF zeigeprogrammCAND (bs<>fbs1)THEN feldschutzfuerallefelder; +startpos:=1ELSE startpos:=erstesfeldbeierfassung(bs)FI . +feldschutzfuerallefelder:INT VAR i;protect(maske(bs),1,FALSE );FOR iFROM +fnrerstesausgabefeldUPTO fnrletztesausgabefeldREP protect(maske(bs),i,TRUE ) +PER .END PROC erfassungsbildschirmaufbauen;PROC maskeholen(INT CONST maskennr +):initmaske(maske(maskennr),initmaskenname);maskegeholt(maskennr):=TRUE . +initmaskenname:IF erfassungsprogrammTHEN maskenstammname+text(maskennr)ELSE +maskennamefuerbearbeitungFI .maskennamefuerbearbeitung:SELECT maskennrOF +CASE 1:maskennameeingangCASE 2:maskenstammname+text(maskennr)CASE 3: +maskennamebearbeitung+text(maskennr)CASE 4:maskenstammname+text(maskennr) +OTHERWISE ""END SELECT .END PROC maskeholen;PROC feldvorbelegungenbehandeln: +SELECT bsOF CASE 1:bsfelderinitialisierenCASE 2:vorbelegungen2CASE 3: +vorbelegungen3CASE 4:vorbelegungen4END SELECT .vorbelegungen2: +vorbelegungneuerschueler2;loeschfeldverdecken.loeschfeldverdecken:LET +rahmenzeichen="=";erfassungsfeld(bs)(fnrloeschfeld):=rahmenzeichen. +vorbelegungen3:vorbelegungname3;vorbelegungzugang;vorbelegungeintrittjgst; +feldschutzfuerfelderbeineuanmeldungen;.vorbelegungen4:vorbelegungname4.END +PROC feldvorbelegungenbehandeln;PROC vorbelegungname3:TEXT VAR vor,zus,nach; +vor:=erfassungsfeld(fbs2)(fnrrufname)+leerzeichen;zus:=erfassungsfeld(fbs2)( +fnrnamenszus);IF zus<>leerTHEN zusCAT leerzeichenFI ;nach:=erfassungsfeld( +fbs2)(fnrname);erfassungsfeld(bs)(fnrausgabename):=text(vor+zus+nach, +laengefnrausgabename).laengefnrausgabename:length(maske(bs),fnrausgabename). +END PROC vorbelegungname3;PROC vorbelegungzugang:IF aktbestand<> +bestandlaufschuljTHEN erfassungsfeld(bs)(fnrzugang):=kuerzelzugangaktjgst; +protect(maske(bs),fnrzugang,TRUE )ELSE protect(maske(bs),fnrzugang,FALSE )FI +.END PROC vorbelegungzugang;PROC vorbelegungname4:erfassungsfeld(bs)( +fnrausgabename):=erfassungsfeld(fbs3)(fnrausgabename).END PROC +vorbelegungname4;PROC vorbelegungneuerschueler2:IF neuerschuelerersteintrag +THEN neuerschuelerersteintrag:=FALSE ;erfassungsfeld(fbs2)(fnrname):= +erfassungsfeld(fbs1)(fnrparamname);erfassungsfeld(fbs2)(fnrrufname):= +erfassungsfeld(fbs1)(fnrparamrufname);erfassungsfeld(fbs2)(fnrvornamen):= +erfassungsfeld(fbs1)(fnrparamrufname);erfassungsfeld(fbs2)(fnrgebdat):= +erfassungsfeld(fbs1)(fnrparamgebdat)FI .END PROC vorbelegungneuerschueler2; +PROC vorbelegungeintrittjgst:protect(maske(bs),fnrsek2,FALSE );protect(maske( +bs),fnreintrittjgst,FALSE );IF aktbestand=bestandneu5THEN erfassungsfeld(bs)( +fnreintrittjgst):=jgst05;protect(maske(bs),fnreintrittjgst,TRUE )ELIF +aktbestand=bestandneu11THEN erfassungsfeld(bs)(fnreintrittjgst):=jgst11; +protect(maske(bs),fnreintrittjgst,TRUE );IF neuerschuelerTHEN +eintrittinsek2vorbelegenFI FI .END PROC vorbelegungeintrittjgst;PROC +eintrittinsek2vorbelegen:TEXT VAR schuljahr:=schulkenndatum(aktschuljahr); +schuljahr:=subtext(schuljahr,3,4);schuljahr:=schuljahr+text(int(schuljahr)+1) +;erfassungsfeld(bs)(fnrsek2):=schuljahr;protect(maske(bs),fnrsek2,TRUE ).END +PROC eintrittinsek2vorbelegen;PROC feldschutzfuerfelderbeineuanmeldungen:IF +aktbestand=bestandlaufschuljTHEN protect(maske(bs),fnrzug,FALSE );IF +neuerschuelerTHEN protect(maske(bs),fnrjgst,FALSE )ELSE protect(maske(bs), +fnrjgst,TRUE )FI ELSE protect(maske(bs),fnrjgst,TRUE );protect(maske(bs), +fnrzug,TRUE )FI .END PROC feldschutzfuerfelderbeineuanmeldungen;PROC +suvonerfassungsbildschirmeinlesen:get(maske(bs),erfassungsfeld(bs),startpos); +loeschemeldung(maske(bs)).END PROC suvonerfassungsbildschirmeinlesen;PROC +suanmeldungbearbeiten:neuenschuelereinfuegen:=FALSE ;IF +sinnvolleauswahlgetroffenTHEN bearbeitungvorbereitungbeginnenELSE startpos:= +fnrfehlerfeld;return(1)FI .bearbeitungvorbereitungbeginnen:IF +namenangabenausreichendTHEN bearbeitungbeginnenELSE startpos:=fnrfehlerfeld; +return(1)FI .namenangabenausreichend:IF erfassungsprogrammTHEN +namenangabenausreichendbeierfassungELSE +namenangabenausreichendbeibearbeitungoderzeigenFI .bearbeitungbeginnen: +legeaktuellenbestandfest;BOOL VAR suexistiert:=FALSE ;schluesselbereitstellen +;pruefeobnameexistiert(suexistiert);IF suexistiertTHEN saveupdateposition( +dnrschueler);diffdatenlesen;schluessel(1):=wert(fnrsufamnames);schluessel(2) +:=wert(fnrsurufnames);schluessel(3):=datumrekonversion(wert(fnrsugebdatums)); +loeschedieerstellteobjektliste;zurueckschreiben:=TRUE ;# +schuelerausstatwuerfelentfernen;dr10.05.88#bereiteaenderungvor; +suvonerfassungsbildschirmeinlesenELSE meldeauffaellig(maske(bs), +meldunggibtsnicht);IF erfassungsprogrammTHEN startpos:=fnrparamnameELSE +startpos:=fnrparambearbnameFI ;return(1)FI .END PROC suanmeldungbearbeiten; +BOOL PROC sinnvolleauswahlgetroffen:fnrfehlerfeld:=0;IF erfassungsprogramm +THEN pruefe(pruefartauswahl,maske(bs),erfassungsfeld(fbs1),fnrauswahlanfang, +fnrauswahlende,0,leer,fnrfehlerfeld);IF fnrfehlerfeld=0THEN IF erfassungsfeld +(fbs1)(fnrparamgebdat)<>leerTHEN pruefe(pruefartdatum,maske(bs), +erfassungsfeld(fbs1),fnrparamgebdat,0,0,leer,fnrfehlerfeld);FI FI ; +fnrfehlerfeld=0ELSE IF erfassungsfeld(fbs1)(fnrparambearbgebdat)<>leerTHEN +pruefe(pruefartdatum,maske(bs),erfassungsfeld(fbs1),fnrparambearbgebdat,0,0, +leer,fnrfehlerfeld);FI ;fnrfehlerfeld=0FI .END PROC sinnvolleauswahlgetroffen +;TEXT PROC suerfassungswert(INT CONST feldnr):IF (feldnr>maxfelderzahl)OR ( +feldnr<1)THEN ""ELSE erfassungsfeld(bs)(feldnr)FI .END PROC suerfassungswert; +PROC schluesselbereitstellen:IF erfassungsprogrammTHEN schluessel(1):= +erfassungsfeld(fbs1)(fnrparamname);schluessel(2):=erfassungsfeld(fbs1)( +fnrparamrufname);schluessel(3):=erfassungsfeld(fbs1)(fnrparamgebdat)ELIF +bearbeitungsprogrammTHEN schluessel(1):=erfassungsfeld(fbs1)( +fnrparambearbname);schluessel(2):=erfassungsfeld(fbs1)(fnrparambearbrufname); +schluessel(3):=erfassungsfeld(fbs1)(fnrparambearbgebdat)FI ;alterschluessel(1 +):=schluessel(1);alterschluessel(2):=schluessel(2);alterschluessel(3):= +schluessel(3);END PROC schluesselbereitstellen;PROC pruefeobnameexistiert( +BOOL VAR suexist):TEXT VAR datenbankwerte,schluesselwerte;inittupel( +dnrschueler);putwert(fnrsufamnames,schluessel(1));putwert(fnrsurufnames, +schluessel(2));putwert(fnrsugebdatums,datumskonversion(schluessel(3))); +putwert(fnrsustatuss,aktbestand);IF neuenschuelereinfuegenTHEN search( +dnrschueler,FALSE )ELSE search(ixsustatfamrufgeb,FALSE );FI ;IF (NOT +neuenschuelereinfuegenCAND dbstatus=okCAND wert(fnrsustatuss)=aktbestand)OR ( +neuenschuelereinfuegenCAND dbstatus=ok)THEN datenbankwerte:=wert( +fnrsurufnames)+datumrekonversion(wert(fnrsugebdatums));schluesselwerte:= +schluessel(2)+schluessel(3);suexist:=(wert(fnrsufamnames)=schluessel(1)CAND ( +(schluessel(2)=leerAND schluessel(3)=leer)OR (pos(datenbankwerte, +schluesselwerte)=1)))ELSE suexist:=FALSE FI .END PROC pruefeobnameexistiert; +PROC bereiteaenderungvor:savetupel(dnrschueler,tupelsich);neuerschueler:= +FALSE ;holemaskenfallsnotwendig;fuelledbdateninfelder;bs:=erstererfbildschirm +;erfassungsbildschirmaufbauen.fuelledbdateninfelder:INT VAR bsn;FOR bsnFROM +erstererfbildschirmUPTO letztererfbildschirmREP holedbwerte(bsn)PER .END +PROC bereiteaenderungvor;PROC holemaskenfallsnotwendig:IF NOT (maskegeholt( +erstererfbildschirm))THEN FOR bsFROM erstererfbildschirmUPTO +letztererfbildschirmREP IF NOT maskegeholt(bs)THEN maskeholen(bs)FI ;PER FI . +END PROC holemaskenfallsnotwendig;PROC suanmeldungeinfuegen: +neuenschuelereinfuegen:=TRUE ;IF sinnvolleauswahlgetroffenTHEN +neueintragbeginnenELSE startpos:=fnrfehlerfeld;return(1)FI . +neueintragbeginnen:legeaktuellenbestandfest;BOOL VAR suexistiert:=FALSE ; +schluesselbereitstellen;pruefeobnameexistiert(suexistiert);IF suexistiert +THEN meldeauffaellig(maske(bs),meldunggibtsschon);return(1)ELSE +zurueckschreiben:=FALSE ;bereiteneueintragvor; +suvonerfassungsbildschirmeinlesenFI .bereiteneueintragvor:neuerschueler:= +TRUE ;neuerschuelerersteintrag:=TRUE ;holemaskenfallsnotwendig;bs:= +erstererfbildschirm;erfassungsbildschirmaufbauen.END PROC +suanmeldungeinfuegen;PROC legeaktuellenbestandfest:IF bearbeitungsprogramm +THEN aktbestand:=bestandlaufschuljELIF erfassungsfeld(fbs1)(fnrneuan5)<>leer +THEN aktbestand:=bestandneu5ELIF erfassungsfeld(fbs1)(fnrneuan11)<>leerTHEN +aktbestand:=bestandneu11ELIF erfassungsfeld(fbs1)(fnrneusonst)<>leerTHEN +aktbestand:=bestandneusonstELIF erfassungsfeld(fbs1)(fnrneulaufschulj)<>leer +THEN aktbestand:=bestandlaufschuljFI .END PROC legeaktuellenbestandfest;PROC +suanmeldungspeichern(BOOL CONST zuspeichern):BOOL VAR suexistiert;TEXT VAR +schuelertupel:="";IF NOT zuspeichernTHEN IF neuerschuelerTHEN +vorbereitendesnaechstenneuen;return(1)ELSE IF NOT zeigeprogrammTHEN melde( +maske(bs),meldungkeineaenderung,subtext(namefuermeldung,1, +maxlaengenamebeikeineaenderung)+kennzmeldungauffaellig)FI ; +vorbereitendernaechstenschluesselbehandlungFI ELSE speicherungstartenFI . +speicherungstarten:INT VAR fehlerstatus:=0; +pruefeobbeineuemschuelerschonvorhanden;IF datenfehlerfreiTHEN datenschreiben; +IF statussudatei<>0THEN melde(maske(bs),meldungspeicherungfehlerhaft,text( +statussudatei)+kennzmeldungauffaellig);#altenschuelerwiedereintragen;dr10. +05.88#return(1)ELIF neuerschuelerTHEN #schuelerinstatwuerfeleinfuegen;dr10. +05.88#vorbereitendesnaechstenneuen;return(1)ELSE # +schuelerinstatwuerfeleinfuegen;dr10.05.88# +vorbereitendernaechstenschluesselbehandlungFI ;ELSE fehlerbehandeln;return(1) +FI .pruefeobbeineuemschuelerschonvorhanden:IF falschesdatum(erfassungsfeld( +fbs2)(fnrgebdat))THEN fehlerstatus:=fnrgebdat;bs:=fbs2; +erfassungsbildschirmaufbauen;meldeauffaellig(maske(bs),meldungfalschesdatum); +ELSE schluessel(1):=erfassungsfeld(fbs2)(fnrname);schluessel(2):= +erfassungsfeld(fbs2)(fnrrufname);schluessel(3):=erfassungsfeld(fbs2)( +fnrgebdat);IF geaenderteschluesselfelderTHEN savetupel(dnrschueler, +schuelertupel);pruefeobnameexistiert(suexistiert);restoretupel(dnrschueler, +schuelertupel);IF suexistiertTHEN fehlerstatus:=fnrname;bs:=fbs2; +erfassungsbildschirmaufbauen;meldeauffaellig(maske(bs),meldunggibtsschon); +ELSE pruefeplausibilitaet(fehlerstatus);FI ELSE pruefeplausibilitaet( +fehlerstatus);FI FI .datenfehlerfrei:fehlerstatus=0.fehlerbehandeln:startpos +:=fehlerstatus.END PROC suanmeldungspeichern;PROC datenschreiben: +meldespeicherung;dbwertzuordnung;IF neuerschuelerTHEN logeintragvornehmen( +"Neueinfügen");neueneinfuegenELSE logeintragvornehmen("Änderung"); +bearbeitetenschreibenFI ;.meldespeicherung:IF neuerschuelerTHEN melde(maske( +bs),meldungspeicherung,namefuermeldung+kennzmeldungauffaellig)ELSE melde( +maske(bs),meldungaenderung,subtext(namefuermeldung,1, +maxlaengenamebeiaenderung)+kennzmeldungauffaellig)FI .dbwertzuordnung:INT +VAR bsn;IF neuerschuelerTHEN inittupel(dnrschueler)FI ;FOR bsnFROM +erstererfbildschirmUPTO letztererfbildschirmREP setzedbwerte(bsn)PER ;.END +PROC datenschreiben;TEXT PROC namefuermeldung:LET kennznametrenner=".";( +schluessel(2)SUB 1)+kennznametrenner+schluessel(1).END PROC namefuermeldung; +PROC logeintragvornehmen(TEXT CONST logergaenzung):TEXT VAR eintrag;IF +erfassungsprogrammTHEN eintrag:=logtextbeginn1ELSE eintrag:=logtextbeginn2FI +;eintragCAT logergaenzung;eintragCAT " """;eintragCAT schluessel(1);eintrag +CAT ", ";eintragCAT schluessel(2);eintragCAT ", ";eintragCAT datumskonversion +(schluessel(3));eintragCAT """";logeintrag(eintrag)END PROC +logeintragvornehmen;PROC neueneinfuegen:diffdatentid:="";putwert( +fnrdddiffdatennr,unique(dnrdiffdaten));insert(dnrdiffdaten);IF dbstatus=ok +THEN search(dnrdiffdaten,TRUE );IF dbstatus=okTHEN diffdatentid:=gettid;FI +ELSE fehlerprotokoll(dnrdiffdaten,satzeinfuegen);FI ;putwert( +fnrsudiffdatennrs,wert(fnrdddiffdatennr));putwert(fnrsustatuss,aktbestand); +putwert(fnrsutiddiffdaten,diffdatentid);insert(dnrschueler);statussudatei:= +dbstatus;evtlaenderungderkurswahldatenvollziehenEND PROC neueneinfuegen;PROC +bearbeitetenschreiben:TEXT VAR sj:=schulkenndatum(aktschuljahr),hj:= +schulkenndatum(akthalbjahr);putwert(fnrsustatuss,aktbestand); +restoreupdateposition(dnrschueler);#update(dnrschueler);dr10.05.88#selupdate( +dnrschueler);statussudatei:=dbstatus;replace(dnrdiffdaten,wert( +fnrsutiddiffdaten));IF statussudatei=okCAND aktbestand=bestandlaufschuljTHEN +neueklasseinhalbjahresdateneintragen(schluessel,sj,hj,wert(fnrsusgrpjgst), +wert(fnrsusgrpzugtut))FI ;IF statussudatei=okCAND geaenderteschluesselfelder +THEN hjddateiupdate(dnrhalbjahresdaten,satzneueschluessel); +evtlaenderungderkurswahldatenvollziehenFI END PROC bearbeitetenschreiben; +BOOL PROC geaenderteschluesselfelder:schluessel(1)<>alterschluessel(1)OR +schluessel(2)<>alterschluessel(2)OR schluessel(3)<>alterschluessel(3)END +PROC geaenderteschluesselfelder;PROC +vorbereitendernaechstenschluesselbehandlung:IF exists(dateiname)THEN +holenaechstenschluesselauslisteELSE zurueckschreiben:=FALSE ; +suzurueckzumanfangsbildschirm(2);FI .holenaechstenschluesselausliste:BOOL +VAR ok,kannbearbeitetwerden:=FALSE ;holenaechstenmehrtlgschluesselausdatei(ok +);WHILE okREP pruefeobnameexistiert(ok);IF okTHEN saveupdateposition( +dnrschueler);diffdatenlesen;kannbearbeitetwerden:=TRUE ;ok:=FALSE ELSE +holenaechstenmehrtlgschluesselausdatei(ok)FI PER ;IF kannbearbeitetwerden +THEN zurueckschreiben:=TRUE ;IF mehrereloeschenTHEN bereiteloeschenvor;return +(1)ELSE #schuelerausstatwuerfelentfernen;dr10.05.88#bereiteaenderungvor; +return(1)FI ELSE zurueckschreiben:=FALSE ;behandleendederlistenabarbeitungFI +.behandleendederlistenabarbeitung:mehrereloeschen:=FALSE ;meldeauffaellig( +maske(bs),meldungletzter);suzurueckzumanfangsbildschirm(3).END PROC +vorbereitendernaechstenschluesselbehandlung;PROC sudatenimbildschirmkopieren: +INT VAR curspos:=startpos;IF bs=fbs2THEN IF curspos=fnrrufnameTHEN +erfassungsfeld(bs)(fnrrufname):=erfassungsfeld(bs)(fnrvornamen);put(maske(bs) +,erfassungsfeld(bs)(fnrrufname),fnrrufname)ELIF curspos=fnrerznameTHEN +erfassungsfeld(bs)(fnrerzname):=erfassungsfeld(bs)(fnrname);put(maske(bs), +erfassungsfeld(bs)(fnrerzname),fnrerzname);erfassungsfeld(bs)(fnrerznamenszus +):=erfassungsfeld(bs)(fnrnamenszus);put(maske(bs),erfassungsfeld(bs)( +fnrerznamenszus),fnrerznamenszus);INT VAR i;FOR iFROM 0UPTO fnrerzplzort- +fnrerzstrREP erfassungsfeld(bs)(fnrerzstr+i):=erfassungsfeld(bs)(fnrsustr+i); +put(maske(bs),erfassungsfeld(bs)(fnrerzstr+i),fnrerzstr+i)PER ;FI ;startpos:= +cursposFI ;return(1).END PROC sudatenimbildschirmkopieren;PROC +suanmeldungzeigen:BOOL VAR listeexistiertnicht;IF sinnvolleauswahlgetroffen +THEN listezeigenbeginnenELSE startpos:=fnrfehlerfeld;return(1)FI . +listezeigenbeginnen:schluesselbereitstellen;legeaktuellenbestandfest; +setzedbwerte(bs);meldeauffaellig(maske(bs),meldunglistenerstellung); +parsenooffields(5);putwert(fnrsustatuss,aktbestand);objektlistestarten( +ixsustatfamrufgeb,schluessel(1),fnrsufamnames,TRUE ,listeexistiertnicht);IF +listeexistiertnichtTHEN reinitparsing;meldeauffaellig(maske(bs), +meldungkeineliste);return(1)ELSE bsdraussen:=0;datensatzlistenausgabe(PROC ( +INT CONST )suerfassungschueler,TRUE ,BOOL PROC pruefungschueler)FI .END PROC +suanmeldungzeigen;PROC suerfassungschueler(INT CONST n):LET namenlaenge=63, +trenner=", ";TEXT VAR identizeile,schluesselanhang:="";INT VAR i;identizeile +:=wert(fnrsufamnames)+trenner+wert(fnrsurufnames);identizeile:=text( +identizeile,namenlaenge)+wert(fnrsugebdatums);schluesselkoppeln; +setzeidentiwert(identizeilemitschluesselanhang).schluesselkoppeln:FOR iFROM 1 +UPTO anzschluesselsuREP schluesselanhangCAT oblitrenner;schluesselanhangCAT +wert(dnrschueler+i);PER .identizeilemitschluesselanhang:identizeile+ +schluesselanhang.END PROC suerfassungschueler;BOOL PROC pruefungschueler:wert +(fnrsustatuss)=aktbestandEND PROC pruefungschueler;PROC +suausgesuchtezurbearbeitung:behandlungderausgesuchten(aendern)END PROC +suausgesuchtezurbearbeitung;PROC holeerstenmehrtlgschluesselausdatei(BOOL +VAR ok):IF NOT exists(dateiname)THEN ok:=FALSE ;LEAVE +holeerstenmehrtlgschluesselausdateiFI ;f:=sequentialfile(input,dateiname); +holenaechstenmehrtlgschluesselausdatei(ok);END PROC +holeerstenmehrtlgschluesselausdatei;PROC +holenaechstenmehrtlgschluesselausdatei(BOOL VAR ok):TEXT VAR thesaurustext:= +"";INT VAR schluesselbeginn:=0;INT VAR schluesseltrennung:=0;INT VAR i:=1;IF +eof(f)THEN ok:=FALSE ;loeschedieerstellteobjektlisteELSE getline(f, +thesaurustext);bestimmeschluesselausthesaurustext;ok:=TRUE FI . +bestimmeschluesselausthesaurustext:schluesselbeginn:=pos(thesaurustext, +oblitrenner);schluesseltrennung:=pos(thesaurustext,oblitrenner, +schluesselbeginn+1);FOR iFROM 1UPTO anzschluesselsuREP IF schluesseltrennung> +0THEN schluessel(i):=subtext(thesaurustext,schluesselbeginn+1, +schluesseltrennung-1);schluesselbeginn:=schluesseltrennung;schluesseltrennung +:=pos(thesaurustext,oblitrenner,schluesselbeginn+1);ELSE schluessel(i):= +subtext(thesaurustext,schluesselbeginn+1);FI ;PER ;schluessel(3):= +datumrekonversion(schluessel(3));.END PROC +holenaechstenmehrtlgschluesselausdatei;PROC loeschedieerstellteobjektliste: +forget(dateiname,quiet);END PROC loeschedieerstellteobjektliste;INT PROC +erstesfeldbeierfassung(INT CONST bildschirmnummer):IF bildschirmnummer=fbs1 +THEN erstesfeldbeierfassungbs1ELIF bildschirmnummer=fbs2THEN +erstesfeldbeierfassungbs2ELIF bildschirmnummer=fbs3THEN +erstesfeldbeierfassungbs3ELIF bildschirmnummer=fbs4THEN +erstesfeldbeierfassungbs4ELSE 1FI .END PROC erstesfeldbeierfassung;PROC +suschuelerbsblaettern(BOOL CONST vorwaerts):IF blaetternsinnlosTHEN +meldeauffaellig(maske(bs),meldungblaetterngehtnicht)ELSE +fuehreblaettervorgangdurch;FI ;return(1).blaetternsinnlos:(vorwaertsAND (bs= +letztererfbildschirm))OR (NOT vorwaertsAND (bs=erstererfbildschirm)). +fuehreblaettervorgangdurch:IF vorwaertsTHEN bsINCR 1ELSE bsDECR 1FI ; +erfassungsbildschirmaufbauen.END PROC suschuelerbsblaettern;PROC +bsfelderinitialisieren:INT VAR bsnr;FOR bsnrFROM 1UPTO bsanzahlREP init( +erfassungsfeld(bsnr))PER .END PROC bsfelderinitialisieren;PROC +vorbereitendesnaechstenneuen:bsfelderinitialisieren;bs:=erstererfbildschirm; +erfassungsbildschirmaufbauen.END PROC vorbereitendesnaechstenneuen;PROC +suzurueckzumanfangsbildschirm(INT CONST schritte):bs:=1;IF zurueckschreiben +THEN #schuelerinstatwuerfeleinfuegendr10.05.88#FI ;IF +feldschutzzumloeschengesetztTHEN feldschutzfuerallefelderaufheben; +feldschutzzumloeschengesetzt:=FALSE FI ;erfassungsbildschirmaufbauen;return( +schritte);.feldschutzfuerallefelderaufheben:INT VAR i;FOR iFROM +fnrerstesausgabefeldUPTO fnrloeschfeld-1REP protect(maske(erstererfbildschirm +),i,FALSE )PER ;protect(maske(erstererfbildschirm),fnrloeschfeld,TRUE ).END +PROC suzurueckzumanfangsbildschirm;PROC pruefeplausibilitaet(INT VAR fstatus) +:fstatus:=0;INT VAR fmeld;meldeauffaellig(maske(bs),pruefemeldung);pruefebs2; +IF fstatus<>0THEN fehlerausgabeELSE pruefebs3;IF fstatus<>0THEN fehlerausgabe +ELSE pruefebs4;IF fstatus<>0THEN fehlerausgabeFI FI FI .pruefebs2:IF +erfassungsfeld(fbs2)(fnrname)=leerTHEN fstatus:=fnrname;bs:=fbs2;fmeld:= +fmeldbittefuellen;LEAVE pruefebs2FI ;IF erfassungsfeld(fbs2)(fnrrufname)=leer +THEN fstatus:=fnrrufname;bs:=fbs2;fmeld:=fmeldbittefuellen;LEAVE pruefebs2FI +;IF erfassungsfeld(fbs2)(fnrgebdat)=leerTHEN fstatus:=fnrgebdat;bs:=fbs2; +fmeld:=fmeldbittefuellen;LEAVE pruefebs2ELSE IF falschesdatum(erfassungsfeld( +fbs2)(fnrgebdat))THEN fstatus:=fnrgebdat;bs:=fbs2;fmeld:=fmeldfalschesdatum; +LEAVE pruefebs2FI FI ;IF NOT ((erfassungsfeld(fbs2)(fnrgeschlecht)=weiblich) +OR (erfassungsfeld(fbs2)(fnrgeschlecht)=maennlich))THEN fstatus:= +fnrgeschlecht;bs:=fbs2;fmeld:=fmeldnichtimbestand;LEAVE pruefebs2FI ;IF +erfassungsfeld(fbs2)(fnrstaatsan)<>leerTHEN IF NOT imschlbestand( +erfassungsfeld(fbs2)(fnrstaatsan),bestandstaaten)THEN fstatus:=fnrstaatsan;bs +:=fbs2;fmeld:=fmeldnichtimbestand;LEAVE pruefebs2FI FI ;IF erfassungsfeld( +fbs2)(fnrreligion)<>leerTHEN IF NOT imschlbestand(erfassungsfeld(fbs2)( +fnrreligion),bestandreligion)THEN fstatus:=fnrreligion;bs:=fbs2;fmeld:= +fmeldnichtimbestand;LEAVE pruefebs2FI FI .pruefebs3:INT CONST eintrittsjgst:= +int(erfassungsfeld(fbs3)(fnreintrittjgst));IF erfassungsfeld(fbs3)( +fnreintrittsdatum)=leerTHEN fstatus:=fnreintrittsdatum;bs:=fbs3;fmeld:= +fmeldbittefuellen;LEAVE pruefebs3ELSE IF falschesdatum(erfassungsfeld(fbs3)( +fnreintrittsdatum))THEN fstatus:=fnreintrittsdatum;bs:=fbs3;fmeld:= +fmeldfalschesdatum;LEAVE pruefebs3FI FI ;IF aktbestand=bestandneusonstTHEN +IF erfassungsfeld(fbs3)(fnreintrittjgst)=leerTHEN fstatus:=fnreintrittjgst;bs +:=fbs3;fmeld:=fmeldbittefuellen;LEAVE pruefebs3FI ;IF eintrittsjgst<jgstufe5 +COR eintrittsjgst>jgstufe13THEN fstatus:=fnreintrittjgst;bs:=fbs3;fmeld:= +fmeldnumundbegrenzt;LEAVE pruefebs3FI ;IF eintrittsjgst=jgstufe5COR +eintrittsjgst=jgstufe11THEN fstatus:=fnreintrittjgst;bs:=fbs3;fmeld:= +fmeldbitteanderejgst;LEAVE pruefebs3FI FI ;IF erfassungsfeld(fbs3)( +fnrschulkuerzel)<>leerTHEN IF NOT imbestand(erfassungsfeld(fbs3)( +fnrschulkuerzel),bestandschulen)THEN fstatus:=fnrschulkuerzel;bs:=fbs3;fmeld +:=fmeldnichtimbestand;LEAVE pruefebs3FI FI ;IF aktbestand=bestandlaufschulj +THEN IF erfassungsfeld(fbs3)(fnrzugang)=leerTHEN fstatus:=fnrzugang;bs:=fbs3; +fmeld:=fmeldbittefuellen;LEAVE pruefebs3ELIF NOT imschlbestand(erfassungsfeld +(fbs3)(fnrzugang),bestandzugang)THEN fstatus:=fnrzugang;bs:=fbs3;fmeld:= +fmeldnichtimbestand;LEAVE pruefebs3FI ;FI ;IF bearbeitungsprogrammCAND +erfassungsfeld(fbs3)(fnrneueschule)<>leerTHEN IF NOT imbestand(erfassungsfeld +(fbs3)(fnrneueschule),bestandschulen)THEN fstatus:=fnrneueschule;bs:=fbs3; +fmeld:=fmeldnichtimbestand;LEAVE pruefebs3FI FI ;IF bearbeitungsprogrammCAND +erfassungsfeld(fbs3)(fnrabdatum)<>leerTHEN IF falschesdatum(erfassungsfeld( +fbs3)(fnrabdatum))THEN fstatus:=fnrabdatum;bs:=fbs3;fmeld:=fmeldfalschesdatum +;LEAVE pruefebs3FI FI ;IF aktbestand<>bestandlaufschuljTHEN LEAVE pruefebs3 +FI ;TEXT VAR jgst:=erfassungsfeld(fbs3)(fnrjgst);TEXT VAR zug:=erfassungsfeld +(fbs3)(fnrzug);IF jgst=leerTHEN fstatus:=fnrjgst;bs:=fbs3;fmeld:= +fmeldbittefuellen;LEAVE pruefebs3FI ;IF zug=leerTHEN fstatus:=fnrzug;bs:=fbs3 +;fmeld:=fmeldbittefuellen;LEAVE pruefebs3FI ;IF NOT imbestandschuelergruppen +THEN IF neuerschuelerTHEN fstatus:=fnrjgstELSE fstatus:=fnrzugFI ;bs:=fbs3; +fmeld:=fmeldnichtimbestand;LEAVE pruefebs3FI .pruefebs4:IF erfassungsfeld( +fbs4)(fnrreligionabmelddatum)<>leerTHEN IF falschesdatum(erfassungsfeld(fbs4) +(fnrreligionabmelddatum))THEN fstatus:=fnrreligionabmelddatum;bs:=fbs4;fmeld +:=fmeldfalschesdatum;LEAVE pruefebs4FI FI ;IF erfassungsfeld(fbs4)( +fnrreligionanmelddatum)<>leerTHEN IF falschesdatum(erfassungsfeld(fbs4)( +fnrreligionanmelddatum))THEN fstatus:=fnrreligionanmelddatum;bs:=fbs4;fmeld:= +fmeldfalschesdatum;LEAVE pruefebs4FI FI ;.fehlerausgabe: +erfassungsbildschirmaufbauen;meldeauffaellig(maske(bs),fmeld).END PROC +pruefeplausibilitaet;BOOL PROC imbestandschuelergruppen:TEXT VAR schuljahr:= +schulkenndatum(aktschuljahr),halbjahr:=schulkenndatum(akthalbjahr);INT VAR +dateinummer:=dnraktschuelergruppen;putwert(dateinummer+1,schuljahr);putwert( +dateinummer+2,halbjahr);putwert(dateinummer+3,erfassungsfeld(fbs3)(fnrjgst)); +putwert(dateinummer+4,erfassungsfeld(fbs3)(fnrzug));search(dateinummer,TRUE ) +;dbstatus=0END PROC imbestandschuelergruppen;BOOL PROC falschesdatum(TEXT +CONST pruefdatum):LET falschertag="00";datum(pruefdatum)=nildatumCOR subtext( +pruefdatum,1,2)=falschertag.END PROC falschesdatum;PROC setzedbwerte(INT +CONST bsnr):INT VAR lv,verm;SELECT bsnrOF CASE fbs1:setzedbwertevonbs1CASE +fbs2:setzedbwertevonbs2CASE fbs3:setzedbwertevonbs3CASE fbs4: +setzedbwertevonbs4END SELECT ;IF neuenschuelereinfuegenTHEN putwert( +fnrsutidakthjd,leer)ELSE putwert(fnrsutidakthjd,hjdtid)FI .setzedbwertevonbs1 +:IF NOT bearbeitungsprogrammTHEN putwert(fnrsufamnames,erfassungsfeld[bsnr][ +fnrparamname]);putwert(fnrsurufnames,erfassungsfeld[bsnr][fnrparamrufname]); +putwert(fnrsugebdatums,datumskonversion(erfassungsfeld[bsnr][fnrparamgebdat]) +);ELSE putwert(fnrsufamnames,erfassungsfeld[bsnr][fnrparambearbname]);putwert +(fnrsurufnames,erfassungsfeld[bsnr][fnrparambearbrufname]);putwert( +fnrsugebdatums,datumskonversion(erfassungsfeld[bsnr][fnrparambearbgebdat])); +FI .setzedbwertevonbs2:putwert(fnrsufamnames,erfassungsfeld[bsnr][fnrname]); +putwert(fnrsunamenszusatzs,erfassungsfeld[bsnr][fnrnamenszus]);putwert( +fnrsugebnames,erfassungsfeld[bsnr][fnrgebname]);putwert(fnrsuvornames, +erfassungsfeld[bsnr][fnrvornamen]);putwert(fnrsurufnames,erfassungsfeld[bsnr] +[fnrrufname]);putwert(fnrsustrnrs,erfassungsfeld[bsnr][fnrsustr]);putwert( +fnrsutelnrs,erfassungsfeld[bsnr][fnrsutelefon]);putwert(fnrsuplzorts, +erfassungsfeld[bsnr][fnrsuplzort]);putwert(fnrsuwohntbei,erfassungsfeld[bsnr] +[fnrwohntbei]);putwert(fnrsuortsteils,erfassungsfeld[bsnr][fnrortsteil]); +putwert(fnrsugebdatums,datumskonversion(erfassungsfeld[bsnr][fnrgebdat])); +putwert(fnrsugeschlechts,erfassungsfeld[bsnr][fnrgeschlecht]);putwert( +fnrsustaatsangs,erfassungsfeld[bsnr][fnrstaatsan]);putwert(fnrsureligionsz, +erfassungsfeld[bsnr][fnrreligion]);putwert(fnrsuverhes,erfassungsfeld[bsnr][ +fnrverwandt]);putwert(fnrsufamnamee,erfassungsfeld[bsnr][fnrerzname]);putwert +(fnrsunamenszusatze,erfassungsfeld[bsnr][fnrerznamenszus]);putwert( +fnrsuvornamee,erfassungsfeld[bsnr][fnrerzvornamen]);putwert(fnrsustrnre, +erfassungsfeld[bsnr][fnrerzstr]);putwert(fnrsutelnre,erfassungsfeld[bsnr][ +fnrerztelefon]);putwert(fnrsuplzorte,erfassungsfeld[bsnr][fnrerzplzort]);. +setzedbwertevonbs3:putwert(fnrsugeborts,erfassungsfeld[bsnr][fnrgebort]); +putwert(fnrsugebkreiss,erfassungsfeld[bsnr][fnrkreisland]);putwert( +fnrsumuttersprache,erfassungsfeld[bsnr][fnrmuttersprache]);putwert( +fnrsuspaetaus,erfassungsfeld[bsnr][fnraussiedler]);putwert(fnrsujahreinschul, +erfassungsfeld[bsnr][fnreinschulung]);putwert(fnrsuskennlschule, +erfassungsfeld[bsnr][fnrschulkuerzel]);putwert(fnrsuklasselschule, +erfassungsfeld[bsnr][fnrletzteklasse]);putwert(fnrsueintrittsdats, +datumskonversion(erfassungsfeld[bsnr][fnreintrittsdatum]));putwert( +fnrsujgsteintr,jgstaufber(erfassungsfeld[bsnr][fnreintrittjgst]));putwert( +fnrsueintrittinsek,erfassungsfeld[bsnr][fnrsek2]);putwert(fnrsusgrpjgst, +jgstaufber(erfassungsfeld[bsnr][fnrjgst]));putwert(fnrsusgrpzugtut, +erfassungsfeld[bsnr][fnrzug]);putwert(fnrsuartzugang,erfassungsfeld[bsnr][ +fnrzugang]);putwert(fnrsuneuerzugtut,erfassungsfeld[bsnr][fnrneuerzug]);FOR +vermFROM 0UPTO zahldervermerke-1REP putwert(fnrsuvermerk1+verm,erfassungsfeld +[bsnr][fnrvermerk1+verm])PER ;IF bearbeitungsprogrammTHEN putwert( +fnrsuabgdats,datumskonversion(erfassungsfeld[bsnr][fnrabdatum]));putwert( +fnrsuabggrund,erfassungsfeld[bsnr][fnrabgrund]);putwert(fnrsuskennnschule, +erfassungsfeld[bsnr][fnrneueschule]);putwert(fnrsuabschluss,erfassungsfeld[ +bsnr][fnrabschluss]);FI .setzedbwertevonbs4:putwert(fnrddreliunter, +erfassungsfeld[bsnr][fnrreligionunterricht]);putwert(fnrddreliunter+1, +datumskonversion(erfassungsfeld[bsnr][fnrreligionabmelddatum]));putwert( +fnrddreliunter+2,datumskonversion(erfassungsfeld[bsnr][fnrreligionanmelddatum +]));FOR lvFROM 0UPTO 11REP putwert(fnrdd1fremdfach+lv,erfassungsfeld[bsnr][ +fnrfremdsprache+lv]);PER ;putwert(fnrddkunstmusik,erfassungsfeld[bsnr][ +fnrkunstmusik]);FOR lvFROM 0UPTO 8REP putwert(fnrddagthema1+lv,erfassungsfeld +[bsnr][fnrag+lv]);PER ;FOR lvFROM 0UPTO 7REP putwert(fnrddfach091a+lv, +erfassungsfeld[bsnr][fnrwpsek1+lv]);PER .END PROC setzedbwerte;PROC +holedbwerte(INT CONST bsnr):INT VAR lv,verm;SELECT bsnrOF CASE fbs1: +holedbwertevonbs1CASE fbs2:holedbwertevonbs2CASE fbs3:holedbwertevonbs3CASE +fbs4:holedbwertevonbs4END SELECT ;hjdtid:=wert(fnrsutidakthjd);. +holedbwertevonbs1:IF NOT bearbeitungsprogrammTHEN erfassungsfeld[bsnr][ +fnrparamname]:=wert(fnrsufamnames);erfassungsfeld[bsnr][fnrparamrufname]:= +wert(fnrsurufnames);erfassungsfeld[bsnr][fnrparamgebdat]:=wert(fnrsugebdatums +);ELSE erfassungsfeld[bsnr][fnrparambearbname]:=wert(fnrsufamnames); +erfassungsfeld[bsnr][fnrparambearbrufname]:=wert(fnrsurufnames); +erfassungsfeld[bsnr][fnrparambearbgebdat]:=wert(fnrsugebdatums);FI . +holedbwertevonbs2:erfassungsfeld[bsnr][fnrname]:=wert(fnrsufamnames); +erfassungsfeld[bsnr][fnrnamenszus]:=wert(fnrsunamenszusatzs);erfassungsfeld[ +bsnr][fnrgebname]:=wert(fnrsugebnames);erfassungsfeld[bsnr][fnrvornamen]:= +wert(fnrsuvornames);erfassungsfeld[bsnr][fnrrufname]:=wert(fnrsurufnames); +erfassungsfeld[bsnr][fnrsustr]:=wert(fnrsustrnrs);erfassungsfeld[bsnr][ +fnrsutelefon]:=wert(fnrsutelnrs);erfassungsfeld[bsnr][fnrsuplzort]:=wert( +fnrsuplzorts);erfassungsfeld[bsnr][fnrwohntbei]:=wert(fnrsuwohntbei); +erfassungsfeld[bsnr][fnrortsteil]:=wert(fnrsuortsteils);erfassungsfeld[bsnr][ +fnrgebdat]:=datumrekonversion(wert(fnrsugebdatums));erfassungsfeld[bsnr][ +fnrgeschlecht]:=wert(fnrsugeschlechts);erfassungsfeld[bsnr][fnrstaatsan]:= +wert(fnrsustaatsangs);erfassungsfeld[bsnr][fnrreligion]:=wert(fnrsureligionsz +);erfassungsfeld[bsnr][fnrverwandt]:=wert(fnrsuverhes);erfassungsfeld[bsnr][ +fnrerzname]:=wert(fnrsufamnamee);erfassungsfeld[bsnr][fnrerznamenszus]:=wert( +fnrsunamenszusatze);erfassungsfeld[bsnr][fnrerzvornamen]:=wert(fnrsuvornamee) +;erfassungsfeld[bsnr][fnrerzstr]:=wert(fnrsustrnre);erfassungsfeld[bsnr][ +fnrerztelefon]:=wert(fnrsutelnre);erfassungsfeld[bsnr][fnrerzplzort]:=wert( +fnrsuplzorte);alteschluesselsichern.alteschluesselsichern:alterschluessel(1) +:=erfassungsfeld[bsnr][fnrname];alterschluessel(2):=erfassungsfeld[bsnr][ +fnrrufname];alterschluessel(3):=erfassungsfeld[bsnr][fnrgebdat];. +holedbwertevonbs3:TEXT VAR einjgst:=wert(fnrsujgsteintr),aktjgst:=wert( +fnrsusgrpjgst);erfassungsfeld[bsnr][fnrgebort]:=wert(fnrsugeborts); +erfassungsfeld[bsnr][fnrkreisland]:=wert(fnrsugebkreiss);erfassungsfeld[bsnr] +[fnrmuttersprache]:=wert(fnrsumuttersprache);erfassungsfeld[bsnr][ +fnraussiedler]:=wert(fnrsuspaetaus);erfassungsfeld[bsnr][fnreinschulung]:= +textnichtnull(wert(fnrsujahreinschul));erfassungsfeld[bsnr][fnrschulkuerzel] +:=wert(fnrsuskennlschule);erfassungsfeld[bsnr][fnrletzteklasse]:=wert( +fnrsuklasselschule);erfassungsfeld[bsnr][fnreintrittsdatum]:= +datumrekonversion(wert(fnrsueintrittsdats));erfassungsfeld[bsnr][ +fnreintrittjgst]:=jgstaufber(einjgst);erfassungsfeld[bsnr][fnrsek2]:= +textnichtnull(wert(fnrsueintrittinsek));erfassungsfeld[bsnr][fnrjgst]:= +jgstaufber(aktjgst);erfassungsfeld[bsnr][fnrzug]:=wert(fnrsusgrpzugtut); +erfassungsfeld[bsnr][fnrzugang]:=wert(fnrsuartzugang);erfassungsfeld[bsnr][ +fnrneuerzug]:=wert(fnrsuneuerzugtut);FOR vermFROM 0UPTO zahldervermerke-1REP +erfassungsfeld[bsnr][fnrvermerk1+verm]:=wert(fnrsuvermerk1+verm)PER ;IF +bearbeitungsprogrammTHEN erfassungsfeld[bsnr][fnrabdatum]:=datumrekonversion( +wert(fnrsuabgdats));erfassungsfeld[bsnr][fnrabgrund]:=wert(fnrsuabggrund); +erfassungsfeld[bsnr][fnrneueschule]:=wert(fnrsuskennnschule);erfassungsfeld[ +bsnr][fnrabschluss]:=wert(fnrsuabschluss);FI .holedbwertevonbs4: +erfassungsfeld[bsnr][fnrreligionunterricht]:=wert(fnrddreliunter); +erfassungsfeld[bsnr][fnrreligionabmelddatum]:=datumrekonversion(wert( +fnrddreliunter+1));erfassungsfeld[bsnr][fnrreligionanmelddatum]:= +datumrekonversion(wert(fnrddreliunter+2));FOR lvFROM 0UPTO 11REP +erfassungsfeld[bsnr][fnrfremdsprache+lv]:=wert(fnrdd1fremdfach+lv);PER ; +erfassungsfeld[bsnr][fnrkunstmusik]:=wert(fnrddkunstmusik);FOR lvFROM 0UPTO 8 +REP erfassungsfeld[bsnr][fnrag+lv]:=wert(fnrddagthema1+lv);PER ;FOR lvFROM 0 +UPTO 7REP erfassungsfeld[bsnr][fnrwpsek1+lv]:=wert(fnrddfach091a+lv);PER . +END PROC holedbwerte;PROC suanmeldungloeschen:IF sinnvolleauswahlgetroffen +THEN loeschenvorbereitungbeginnenELSE startpos:=fnrfehlerfeld;return(1)FI . +loeschenvorbereitungbeginnen:IF namenangabenausreichendTHEN loeschenbeginnen +ELSE startpos:=fnrfehlerfeld;return(1)FI .namenangabenausreichend:IF +erfassungsprogrammTHEN namenangabenausreichendbeierfassungELSE +namenangabenausreichendbeibearbeitungoderzeigenFI .loeschenbeginnen: +legeaktuellenbestandfest;BOOL VAR suexistiert:=FALSE ;schluesselbereitstellen +;pruefeobnameexistiert(suexistiert);IF suexistiertTHEN saveupdateposition( +dnrschueler);diffdatenlesen;schluessel(1):=wert(fnrsufamnames);schluessel(2) +:=wert(fnrsurufnames);schluessel(3):=datumrekonversion(wert(fnrsugebdatums)); +loeschedieerstellteobjektliste;zurueckschreiben:=FALSE ;bereiteloeschenvor; +suvonerfassungsbildschirmeinlesenELSE meldeauffaellig(maske(bs), +meldunggibtsnicht);IF erfassungsprogrammTHEN startpos:=fnrparamnameELSE +startpos:=fnrparambearbnameFI ;return(1)FI .END PROC suanmeldungloeschen; +PROC bereiteloeschenvor:bereiteaenderungvor; +feldschutzfuerallefelderausserloeschfeldsetzen;meldeauffaellig(maske(bs), +meldungloeschfrage);startpos:=fnrloeschfeldEND PROC bereiteloeschenvor;PROC +feldschutzfuerallefelderausserloeschfeldsetzen:INT VAR i;FOR iFROM +fnrerstesausgabefeldUPTO fnrloeschfeld-1REP protect(maske(bs),i,TRUE )PER ; +protect(maske(erstererfbildschirm),fnrloeschfeld,FALSE ); +feldschutzzumloeschengesetzt:=TRUE .END PROC +feldschutzfuerallefelderausserloeschfeldsetzen;PROC +suanmeldungloeschenausfuehren(BOOL CONST zuloeschen):IF zuloeschenTHEN melde( +maske(bs),meldungloeschung,namefuermeldung+kennzmeldungauffaellig); +logeintragvornehmen("Entfernen");schuelerloeschen;IF dbstatus<>0THEN melde( +maske(bs),meldungloeschenfehlerhaft,text(dbstatus)+kennzmeldungauffaellig);# +altenschuelerwiedereintragen;dr10.05.88#return(1)ELSE +vorbereitendernaechstenschluesselbehandlungFI ELSE melde(maske(bs), +meldungkeineloeschung,namefuermeldung+kennzmeldungauffaellig); +vorbereitendernaechstenschluesselbehandlungFI .schuelerloeschen: +hjddateiupdate(dnrhalbjahresdaten,satzloeschen);diffdatenloeschen;delete( +dnrschueler);evtlaenderungderkurswahldatenvollziehen.diffdatenloeschen:IF +wert(fnrsudiffdatennrs)<>""THEN putwert(fnrdddiffdatennr,wert( +fnrsudiffdatennrs));search(dnrdiffdaten,TRUE );IF dbstatus=okTHEN delete( +dnrdiffdaten)FI FI .END PROC suanmeldungloeschenausfuehren;PROC +suanmeldungausgesuchteloeschen:behandlungderausgesuchten(loeschen)END PROC +suanmeldungausgesuchteloeschen;PROC behandlungderausgesuchten(INT CONST +wasistzutun):BOOL VAR ok,kannbearbeitetwerden:=FALSE ; +loeschedieerstellteobjektliste;objektlistebeenden(dateiname,TRUE ); +reinitparsing;holeerstenmehrtlgschluesselausdatei(ok);WHILE okREP +pruefeobnameexistiert(ok);IF okTHEN saveupdateposition(dnrschueler); +diffdatenlesen;kannbearbeitetwerden:=TRUE ;ok:=FALSE ELSE +holenaechstenmehrtlgschluesselausdatei(ok)FI PER ;IF kannbearbeitetwerden +THEN zurueckschreiben:=TRUE ;IF wasistzutun=aendernTHEN # +schuelerausstatwuerfelentfernen;dr10.05.88#bereiteaenderungvorELSE +bereiteloeschenvor;mehrereloeschen:=TRUE FI ; +suvonerfassungsbildschirmeinlesenELSE zurueckschreiben:=FALSE ; +suzurueckzumanfangsbildschirm(2)FI .END PROC behandlungderausgesuchten;BOOL +PROC namenangabenausreichendbeierfassung:IF erfassungsfeld(fbs1)(fnrparamname +)=leerTHEN meldeauffaellig(maske(bs),meldungbittename);fnrfehlerfeld:= +fnrparamname;FALSE ELIF erfassungsfeld(fbs1)(fnrparamrufname)=leerCAND +erfassungsfeld(fbs1)(fnrparamgebdat)<>leerTHEN meldeauffaellig(maske(bs), +meldungangabengenauer);fnrfehlerfeld:=fnrparamrufname;FALSE ELSE TRUE FI . +END PROC namenangabenausreichendbeierfassung;BOOL PROC +namenangabenausreichendbeibearbeitungoderzeigen:IF erfassungsfeld(fbs1)( +fnrparambearbname)=leerTHEN meldeauffaellig(maske(bs),meldungbittename); +fnrfehlerfeld:=fnrparambearbname;FALSE ELIF erfassungsfeld(fbs1)( +fnrparambearbrufname)=leerCAND erfassungsfeld(fbs1)(fnrparambearbgebdat)<> +leerTHEN meldeauffaellig(maske(bs),meldungangabengenauer);fnrfehlerfeld:= +fnrparambearbrufname;FALSE ELSE TRUE FI .END PROC +namenangabenausreichendbeibearbeitungoderzeigen;PROC hjddateiupdate(INT +CONST dateinummer,wasistzutun):LET stackgroesse=6;INT VAR anzahltupel:= +stackgroesse;inittupel(dateinummer);putwert(dateinummer+1,alterschluessel(1)) +;putwert(dateinummer+2,alterschluessel(2));putwert(dateinummer+3, +datumskonversion(alterschluessel(3)));multisearchforward(dateinummer, +anzahltupel);WHILE anzahltupel>0REP multisucc;IF gleicherschuelerTHEN SELECT +wasistzutunOF CASE satzloeschen:datenloeschenCASE satzneueschluessel: +schluesselfelderaendernENDSELECT ;anzahltupelDECR 1;IF anzahltupel=0THEN +nachlesenFI ;ELSE LEAVE hjddateiupdateFI PER .gleicherschueler: +alterschluessel(1)=wert(dateinummer+1)CAND alterschluessel(2)=wert( +dateinummer+2)CAND alterschluessel(3)=datumrekonversion(wert(dateinummer+3)). +datenloeschen:delete(dateinummer);fehlerprotokoll(dateinummer,satzloeschen). +schluesselfelderaendern:putwert(dateinummer+1,schluessel(1));putwert( +dateinummer+2,schluessel(2));putwert(dateinummer+3,datumskonversion( +schluessel(3)));#update(dateinummer);dr10.05.88#selupdate(dateinummer); +fehlerprotokoll(dateinummer,satzneueschluessel);putwert(dateinummer+1, +alterschluessel(1));putwert(dateinummer+2,alterschluessel(2));putwert( +dateinummer+3,datumskonversion(alterschluessel(3)));.nachlesen:anzahltupel:= +stackgroesse;multisucc(dateinummer,anzahltupel).END PROC hjddateiupdate;PROC +fehlerprotokoll(INT CONST dateinummer,wasausdrucken):TEXT CONST fehlerdatei:= +"Fehlerprotokoll";ROW 4TEXT VAR fehlerwobei:=ROW 4TEXT :( +"Einfügen in die Datei ","Ändern in der Datei ","Löschen in der Datei ", +"Ändern der Schlüsselfelder der Datei ");IF dbstatus<>okTHEN FILE VAR f:= +sequentialfile(output,fehlerdatei);putline(f, +"Fehlerprotokoll zur Bearbeitung des Schülers:");putline(f,schluessel(2)+ +leerzeichen+schluessel(1)+", geboren am "+datumskonversion(schluessel(3))); +putline(f,leer);putline(f,"Fehler beim "+fehlerwobei[wasausdrucken]+name( +dateinummer));print(fehlerdatei);forget(fehlerdatei,quiet);FI END PROC +fehlerprotokoll;PROC diffdatenlesen:readtid(dnrdiffdaten,wert( +fnrsutiddiffdaten))END PROC diffdatenlesen;PROC +evtlaenderungderkurswahldatenvollziehen:IF dbstatus=0THEN IF aktbestand= +bestandlaufschuljTHEN IF intwert(fnrsusgrpjgst)>=jgstufe10THEN +kurswahlserveraktualisieren(wert(fnrsusgrpjgst),"","")FI ELIF aktbestand= +bestandneu11THEN kurswahlserveraktualisieren(text(jgstufe10),"","")ELIF +aktbestand=bestandneusonstTHEN IF intwert(fnrsujgsteintr)>jgstufe10THEN +kurswahlserveraktualisieren(text(intwert(fnrsujgsteintr)-1),"","")FI FI ;FI +END PROC evtlaenderungderkurswahldatenvollziehen;END PACKET erfschuelerdaten + diff --git a/app/schulis/2.2.1/src/1.halbjahresdaten bearbeiten b/app/schulis/2.2.1/src/1.halbjahresdaten bearbeiten new file mode 100644 index 0000000..3427981 --- /dev/null +++ b/app/schulis/2.2.1/src/1.halbjahresdaten bearbeiten @@ -0,0 +1,679 @@ +PACKET halbjahresdatenbearbeitenDEFINES halbjahresdatenbearbeiten, +halbjahresdatenblaettern,halbjahresdatenspeichern, +listezuhalbjahresdatenzeigen, +halbjahresdatenausgewaehlterschuelerbearbeitenvorbereiten, +halbjahresdatendesschuelersnichtbearbeiten, +halbjahresdatendesschuelersbearbeiten,halbjahresdatenentfernenvorbereiten, +halbjahresdatenentfernen,halbjahresdatennichtentfernen,pruefunghjd, +hjderfassungswert:LET maskennamebearb1="ms bearb halbjahresdaten 1", +maskennamebearb2="ms bearb halbjahresdaten 2",maskennameeingang= +"ms bearb halbjahresdaten 0",fnrname=2,fnrrufname=3,fnrgebdatum=4, +fnrgewschuljahr=5,fnrgewhalbjahr=6,fnrgewjgst=7,fnrabgangbestand=8, +fnrausgabename=2,fnrausgaberufname=3,fnrausgabegebdatum=4,fnrausgabeaktjgst=5 +,fnrausgabeaktzug=6,fnrausgabeabgegangen=7,fnrausgabegewschj=8, +fnrausgabegewhj=9,fnrausgabegewjgst=10,fnrausgabegewzug=11,fnrblbriefwarn=12, +fnrblbriefbem=13,fnrblbriefnwarn=14,fnrblbriefnbem=15,fnrversetzung=16, +fnrnachpr1=17,fnrnachpr2=18,fnrnachpr3=19,fnrnachprbem=20,fnrnachprabgelegt= +21,fnrnachprnote=22,fnrzeugbem1=23,fnrzeugbem2=24,fnrzeugbem3=25, +fnrversaeumtmit=26,fnrversaeumtohne=27,fnrverspaetet=28,fnrfachanf=12, +fnrfachende=24,fnrkursartanf=25,fnrkursartende=37,fnrklausuranf=38, +fnrklausurende=50,fnrkursanf=51,fnrkursende=63,fnrnoteanf=64,fnrnoteende=76, +fnrbemanf=77,fnrbemende=89,fnrwarnunganf=90,fnrwarnungende=102, +schueleraktuell="ls",schuelerabgegangen="abg",schulhalbjahr="Schulhalbjahr", +schuljahr="Schuljahr",bestandblauerbrief="c02 blauer brief", +bestandbemerkungen="c02 bemerkungen",bestandzeugnisnoten="c02 zeugnisnoten", +bestandartlv="c02 art lehrveranstaltung",trenner="�",stdplausileiste= +"0000000000000",paramausgabe="#",anzschluesselsu=3,fmeldnichtimbestand=55, +meldungnureinesderfaechererl=147,meldungfachangabeunzulaessig=310, +meldungversetzungskzunzulaessig=136,meldungwirklichloeschen=65, +meldunggibtsnicht=71,meldunghjdgibtsnicht=168,meldungunerlaubterwert=34, +meldunglistenerstellung=7,meldungkeineliste=68,meldungletzter=67, +meldungspeicherung=50,meldungkeinespeicherung=63,meldungfalschesdatum=157,# +meldungkeinewiederholungsdaten=160,#meldunghalbjahrnichtrelevant=161, +meldungungueltigekursart=164,meldungfeldfuellen=170,meldungschuljahrangeben= +171,meldungjgstangeben=172,meldungfalschejgst=173,meldungfalschefunktion=72, +meldungnichtentfernt=62,meldungentfernt=61,meldungspeicherfehler=73, +meldungvornamepraez=129,meldunginakthjkeineaenderung=379,pruefemeldung=57, +dateiname="Schülerliste",oblitrenner="$",leer="",niltext="",punkt=".", +textabgegangen="abgegangen",schrittefuerobjektliste=2,anzmasken=3,eingang=1, +bearb1=2,bearb2=3,maxfeldbearb0=8,maxfeldbearb1=28,maxfeldbearb2=102, +saetzederliste=17,pruefartdatum=6;BOOL VAR maskebearb1nochnichtda:=TRUE , +maskebearb2nochnichtda:=TRUE ,maskeeingangnochnichtda:=TRUE ,falschesdatum:= +FALSE ;BOOL VAR schuljahrgefuellt,halbjahrgefuellt,jgstgefuellt, +halbjahresdatenschonvorhanden;FILE VAR f;INT VAR fehlerfeld:=0,ind,bs, +posgewhalbjahr,fnrfehler,fehlerstatus,fmeld:=0,lv:=0,feldnummer:=0;ROW +anzschluesselsuTEXT VAR schluessel;ROW anzmaskenROW maxfeldbearb2TEXT VAR +erfassungsfeld;ROW anzmaskenTAG VAR maske;TEXT VAR sicherunghjd:="", +schuelertid:="",hjdtid:="",vergleichszeile:="",hjdfachleiste:="",hjdartleiste +:="",hjdklausurleiste:="",hjdkennungenleiste:="",verglfachleiste:="", +verglartleiste:="",verglklausurleiste:="",verglkennungenleiste:="",leiste, +plausivar:="",plausileiste:="",pruefbestand:="",plausitxt,akthalbjahr:="", +aktschuljahr:="",gewhalbjahr:="",gewschuljahr:="",jgst,zug,vglgewhalbjahr:="" +,vglakthalbjahr:="",gewjgst:="",gewzug:="",aktbestand,spalteninhalte,versetzg +:=trenner+trenner+"v"+trenner+"n"+trenner+"s"+trenner+"f"+trenner+"w"+trenner +,faecher:=trenner+trenner,blbrief:=trenner+trenner,bemerk:=trenner+trenner, +noten:=trenner+trenner,artlv:=trenner+trenner;LET logtextbeginn="Anw. 1.2.3 " +;PROC halbjahresdatenentfernen:standardmeldung(meldungentfernt,niltext); +infeld(fnrname);inittupel(dnrhalbjahresdaten);schluesselfuerhjdsetzen( +dnrhalbjahresdaten,schluessel,gewschuljahr,gewhalbjahr,gewjgst); +logeintragvornehmen("Entfernen");delete(dnrhalbjahresdaten);IF +aktuellesschulhalbjahrinbearbeitungTHEN loeschehjdtidinsu;FI ;enter(2). +loeschehjdtidinsu:inittupel(dnrschueler);putwert(fnrsufamnames,schluessel(1)) +;putwert(fnrsurufnames,schluessel(2));putwert(fnrsugebdatums,schluessel(3)); +search(dnrschueler,TRUE );putwert(fnrsutidakthjd,"");update(dnrschueler).END +PROC halbjahresdatenentfernen;PROC halbjahresdatennichtentfernen: +standardmeldung(meldungnichtentfernt,niltext);infeld(fnrname);return(2)END +PROC halbjahresdatennichtentfernen;PROC halbjahresdatenentfernenvorbereiten: +BOOL VAR suexistiert:=FALSE ;IF maskeeingangnochnichtdaTHEN bs:=1;initmaske( +maske(bs),maskennameeingang);init(bs,maxfeldbearb0);maskeeingangnochnichtda:= +FALSE FI ;IF erfassungsfeld(bs)(fnrname)<>""CAND erfassungsfeld(bs)( +fnrgebdatum)<>""CAND erfassungsfeld(bs)(fnrrufname)=""THEN meldungausgeben( +meldungvornamepraez,fnrrufname);LEAVE halbjahresdatenentfernenvorbereitenFI ; +schluesselbereitstellen;IF NOT falschesdatumTHEN pruefeobnameexistiert( +suexistiert);IF suexistiertTHEN bs:=1;holedbwerte(bs);schluessel(1):= +erfassungsfeld(bs)(fnrname);schluessel(2):=erfassungsfeld(bs)(fnrrufname); +schluessel(3):=datumskonversion(erfassungsfeld(eingang)(fnrgebdatum)); +weiterepruefungELSE meldungausgeben(meldunggibtsnicht,fnrname)FI ELSE +meldungausgeben(meldungfalschesdatum,fnrgebdatum)FI .weiterepruefung:jgst:= +jgstaufber(wert(fnrsusgrpjgst));zug:=wert(fnrsusgrpzugtut);akthalbjahr:= +schulkenndatum(schulhalbjahr);erfassungsfeld(bs)(fnrgewschuljahr):= +standardmaskenfeld(fnrgewschuljahr);erfassungsfeld(bs)(fnrgewhalbjahr):= +standardmaskenfeld(fnrgewhalbjahr);IF int(standardmaskenfeld(fnrgewjgst))=0 +THEN erfassungsfeld(bs)(fnrgewjgst):=niltext;gewjgst:=standardmaskenfeld( +fnrgewjgst);ELSE erfassungsfeld(bs)(fnrgewjgst):=jgstaufber( +standardmaskenfeld(fnrgewjgst));gewjgst:=jgstaufber(standardmaskenfeld( +fnrgewjgst));FI ;gewschuljahr:=standardmaskenfeld(fnrgewschuljahr); +gewhalbjahr:=standardmaskenfeld(fnrgewhalbjahr);fnrfehler:=0; +pruefenobeintraegefuerhjdausreichend;IF fnrfehler=0THEN IF eingabenummerisch( +gewschuljahr)CAND korrekteschuljahreseingabe(gewschuljahr)THEN +weiterevorbereitungnachfehlerpruefungELSE meldungausgeben( +meldungunerlaubterwert,fnrgewschuljahr)FI ELSE meldungausgeben( +meldungfeldfuellen,fnrfehler)FI .pruefenobeintraegefuerhjdausreichend: +schuljahrgefuellt:=standardmaskenfeld(fnrgewschuljahr)<>leer;halbjahrgefuellt +:=standardmaskenfeld(fnrgewhalbjahr)<>leer;jgstgefuellt:=standardmaskenfeld( +fnrgewjgst)<>leer;IF allefelderleerOR nurhalbjahrgefuelltTHEN fnrfehler:= +fnrgewschuljahrELIF nurschuljahrgefuelltOR nurjgstgefuelltOR +nurschuljahrundjgstgefuelltTHEN fnrfehler:=fnrgewhalbjahrFI .allefelderleer:( +NOT schuljahrgefuellt)CAND (NOT halbjahrgefuellt)CAND (NOT jgstgefuellt). +nurhalbjahrgefuellt:(NOT schuljahrgefuellt)CAND (halbjahrgefuellt)CAND (NOT +jgstgefuellt).nurschuljahrgefuellt:(schuljahrgefuellt)CAND (NOT +halbjahrgefuellt)CAND (NOT jgstgefuellt).nurjgstgefuellt:(NOT +schuljahrgefuellt)CAND (NOT halbjahrgefuellt)CAND (jgstgefuellt). +nurschuljahrundjgstgefuellt:(schuljahrgefuellt)CAND (NOT halbjahrgefuellt) +CAND (jgstgefuellt).weiterevorbereitungnachfehlerpruefung: +halbjahresdatenschonvorhanden:=FALSE ;IF allefeldergefuelltTHEN +angabevonsjhjjgstELIF nurschuljahrundhalbjahrgefuelltTHEN angabevonsjhjELIF +nurhalbjahrundjgstgefuelltTHEN angabevonhjjgstFI ;gibmaskemitrowaus(eingang, +fnrname,fnrabgangbestand).allefeldergefuellt:(schuljahrgefuellt)CAND ( +halbjahrgefuellt)CAND (jgstgefuellt).nurschuljahrundhalbjahrgefuellt:( +schuljahrgefuellt)CAND (halbjahrgefuellt)CAND (NOT jgstgefuellt). +nurhalbjahrundjgstgefuellt:(NOT schuljahrgefuellt)CAND (halbjahrgefuellt) +CAND (jgstgefuellt).angabevonsjhjjgst:jgst:=jgstaufber(wert(fnrsusgrpjgst)); +vglgewhalbjahr:=gewjgst+punkt+gewhalbjahr;vglakthalbjahr:=jgst+punkt+ +akthalbjahr;schuelerhjdlesen(dnrhalbjahresdaten,TRUE );IF +halbjahresdatenschonvorhandenTHEN loeschedatensatzELSE meldunghjdgibtesnicht +FI .angabevonsjhj:schuelerhjdlesen(dnrhalbjahresdaten,FALSE );IF +halbjahresdatenschonvorhandenTHEN savetupel(dnrhalbjahresdaten,sicherunghjd); +saveupdateposition(dnrhalbjahresdaten);gewjgst:=jgstaufber(wert(fnrhjdjgst)); +erfassungsfeld(eingang)(fnrgewjgst):=gewjgst;erfassungsfeld(bearb1)( +fnrausgabegewjgst):=gewjgst;loeschedatensatzELSE meldungausgeben( +meldungjgstangeben,fnrgewjgst)FI .angabevonhjjgst:schuelerhjdlesen( +ixhjdfamrufgebjgsthj,TRUE );IF halbjahresdatenschonvorhandenTHEN savetupel( +dnrhalbjahresdaten,sicherunghjd);saveupdateposition(dnrhalbjahresdaten); +gewschuljahr:=wert(fnrhjdsj);erfassungsfeld(eingang)(fnrgewschuljahr):=gew +schuljahr;erfassungsfeld(bearb1)(fnrausgabegewschj):=gewschuljahr;IF +wiederholungvorhanden(dnrhalbjahresdaten,ixhjdfamrufgebjgsthj)THEN +meldungbitteschuljahrangebenELSE restoreupdateposition(dnrhalbjahresdaten); +loeschedatensatzFI ELSE meldungbitteschuljahrangebenFI . +meldungbitteschuljahrangeben:meldungausgeben(meldungschuljahrangeben, +fnrgewschuljahr).meldunghjdgibtesnicht:meldungausgeben(meldunghjdgibtsnicht, +fnrgewschuljahr).loeschedatensatz:standardmaskenfeld(wert(fnrsufamnames), +fnrname);standardmaskenfeld(wert(fnrsurufnames),fnrrufname); +standardmaskenfeld(datumrekonversion(wert(fnrsugebdatums)),fnrgebdatum); +standardmaskenfeld(gewschuljahr,fnrgewschuljahr);standardmaskenfeld( +gewhalbjahr,fnrgewhalbjahr);standardmaskenfeld(gewjgst,fnrgewjgst);IF +aktbestand=schueleraktuellTHEN standardmaskenfeld("",fnrabgangbestand);ELSE +standardmaskenfeld("x",fnrabgangbestand);FI ;infeld(fnrname); +standardfelderausgeben;meldungausgebeneinfach(meldungwirklichloeschen,fnrname +).END PROC halbjahresdatenentfernenvorbereiten;PROC halbjahresdatenblaettern( +BOOL CONST b):IF bTHEN IF bs=2THEN blaetteraufbearb2ELSE fehlermeldungFI +ELSE IF bs=3THEN blaetteraufbearb1ELSE fehlermeldungFI FI .fehlermeldung: +standardmeldung(meldungfalschefunktion,"");return(1).blaetteraufbearb2: +merkeinhaltbearb1;gibbearb2maskeaus;gibinhaltebearb2aus;.merkeinhaltbearb1: +merkemaskeninhalt(bearb1,fnrausgabegewjgst,fnrverspaetet).gibbearb2maskeaus: +IF maskebearb2nochnichtdaTHEN initmaske(maske(bearb2),maskennamebearb2);init( +bearb2,maxfeldbearb2);FI ;standardstartproc(maskennamebearb2). +gibinhaltebearb2aus:bs:=3;fuellehjddateninfelder;maskebearb2nochnichtda:= +FALSE ;infeld(fnrausgabename);standardfelderausgeben;infeld(fnrfachanf); +return(1).blaetteraufbearb1:merkeinhaltbearb2;gibbearb1maskeaus; +gibinhaltebearb1aus.merkeinhaltbearb2:merkemaskeninhalt(bearb2,fnrfachanf, +fnrwarnungende).gibbearb1maskeaus:standardstartproc(maskennamebearb1). +gibinhaltebearb1aus:bs:=2;fuellehjddateninfelder;infeld(fnrausgabename); +standardfelderausgeben;IF akthalbjahr=gewhalbjahrCAND aktschuljahr= +gewschuljahrTHEN infeld(fnrblbriefwarn)ELSE infeld(fnrausgabegewjgst);FI ; +return(1).END PROC halbjahresdatenblaettern;PROC gibmaskemitrowaus(INT CONST +maske,vonfeld,bisfeld):INT VAR lv;FOR lvFROM vonfeldUPTO bisfeldREP +standardmaskenfeld(erfassungsfeld(maske)(lv),lv);PER END PROC +gibmaskemitrowaus;PROC merkemaskeninhalt(INT CONST maske,vonfeld,bisfeld): +INT VAR lv;FOR lvFROM vonfeldUPTO bisfeldREP erfassungsfeld(maske)(lv):= +standardmaskenfeld(lv);PER END PROC merkemaskeninhalt;PROC +halbjahresdatenbearbeiten:BOOL VAR suexistiert:=FALSE ;reinitparsing;bs:= +eingang;IF maskeeingangnochnichtdaTHEN initmaske(maske(bs),maskennameeingang) +;init(bs,maxfeldbearb0);maskeeingangnochnichtda:=FALSE FI ;erfassungsfeld(bs) +(fnrname):=standardmaskenfeld(fnrname);erfassungsfeld(bs)(fnrrufname):= +standardmaskenfeld(fnrrufname);erfassungsfeld(bs)(fnrgebdatum):= +standardmaskenfeld(fnrgebdatum);IF erfassungsfeld(bs)(fnrname)<>""CAND +erfassungsfeld(bs)(fnrgebdatum)<>""CAND erfassungsfeld(bs)(fnrrufname)="" +THEN meldungausgeben(meldungvornamepraez,fnrrufname);LEAVE +halbjahresdatenbearbeitenFI ;schluesselbereitstellen;IF NOT falschesdatum +THEN pruefeobnameexistiert(suexistiert);IF suexistiertTHEN +loeschedieerstellteobjektliste;holedbwerte(bs);schluessel(1):=erfassungsfeld( +bs)(fnrname);schluessel(2):=erfassungsfeld(bs)(fnrrufname);schluessel(3):= +datumskonversion(erfassungsfeld(bs)(fnrgebdatum));jgst:=jgstaufber(wert( +fnrsusgrpjgst));zug:=wert(fnrsusgrpzugtut);akthalbjahr:=schulkenndatum( +schulhalbjahr);aktschuljahr:=schulkenndatum(schuljahr); +halbjahresdatendesschuelersbearbeiten;ELSE meldungausgeben(meldunggibtsnicht, +fnrname)FI ELSE return(1)FI .END PROC halbjahresdatenbearbeiten;PROC +halbjahresdatendesschuelersbearbeiten:maskebearb1nochnichtda:=TRUE ; +maskebearb2nochnichtda:=TRUE ;erfassungsfeld(bs)(fnrgewschuljahr):= +standardmaskenfeld(fnrgewschuljahr);erfassungsfeld(bs)(fnrgewhalbjahr):= +standardmaskenfeld(fnrgewhalbjahr);IF int(standardmaskenfeld(fnrgewjgst))=0 +THEN erfassungsfeld(bs)(fnrgewjgst):=niltext;gewjgst:=standardmaskenfeld( +fnrgewjgst);ELSE erfassungsfeld(bs)(fnrgewjgst):=jgstaufber( +standardmaskenfeld(fnrgewjgst));gewjgst:=erfassungsfeld(bs)(fnrgewjgst)FI ; +gewschuljahr:=standardmaskenfeld(fnrgewschuljahr);gewhalbjahr:= +standardmaskenfeld(fnrgewhalbjahr);infeld(fnrname);gibmaskemitrowaus(eingang, +fnrname,fnrgewjgst);standardfelderausgeben;IF akthalbjahr=gewhalbjahrCAND +aktschuljahr=gewschuljahrTHEN IF erfassungsfeld(bs)(fnrgewjgst)<>niltextCAND +jgst<>gewjgstTHEN meldungausgeben(meldungfalschejgst,fnrgewjgst);LEAVE +halbjahresdatendesschuelersbearbeitenFI ;FI ; +pruefenobeintraegefuerhjdausreichend;#dr16.07.87#IF fnrfehler=0THEN IF +eingabenummerisch(gewschuljahr)CAND korrekteschuljahreseingabe(gewschuljahr) +THEN initmaske(maske(bs),maskennamebearb1);init(bearb1,maxfeldbearb1); +erfassungsfeld(bearb1)(fnrausgabename):=schluessel(1);erfassungsfeld(bearb1)( +fnrausgaberufname):=schluessel(2);erfassungsfeld(bearb1)(fnrausgabegebdatum) +:=erfassungsfeld(eingang)(fnrgebdatum);erfassungsfeld(bearb1)( +fnrausgabeaktjgst):=jgst;erfassungsfeld(bearb1)(fnrausgabeaktzug):=zug;IF +aktbestand="ls"THEN erfassungsfeld(bearb1)(fnrausgabeabgegangen):= +" "ELSE erfassungsfeld(bearb1)(fnrausgabeabgegangen):="abgegangen" +FI ;erfassungsfeld(bearb1)(fnrausgabegewschj):=gewschuljahr;erfassungsfeld( +bearb1)(fnrausgabegewhj):=gewhalbjahr;erfassungsfeld(bearb1)( +fnrausgabegewjgst):=gewjgst;weiterevorbereitungnachfehlerpruefungELSE +meldungausgeben(meldungunerlaubterwert,fnrgewschuljahr)FI ELSE +meldungausgeben(meldungfeldfuellen,fnrfehler)FI . +pruefenobeintraegefuerhjdausreichend:fnrfehler:=0;schuljahrgefuellt:= +standardmaskenfeld(fnrgewschuljahr)<>leer;halbjahrgefuellt:= +standardmaskenfeld(fnrgewhalbjahr)<>leer;jgstgefuellt:=standardmaskenfeld( +fnrgewjgst)<>leer;IF allefelderleerOR nurhalbjahrgefuelltTHEN fnrfehler:= +fnrgewschuljahrELIF nurschuljahrgefuelltOR nurjgstgefuelltOR +nurschuljahrundjgstgefuelltTHEN fnrfehler:=fnrgewhalbjahrFI .allefelderleer:( +NOT schuljahrgefuellt)CAND (NOT halbjahrgefuellt)CAND (NOT jgstgefuellt). +nurhalbjahrgefuellt:(NOT schuljahrgefuellt)CAND (halbjahrgefuellt)CAND (NOT +jgstgefuellt).nurschuljahrgefuellt:(schuljahrgefuellt)CAND (NOT +halbjahrgefuellt)CAND (NOT jgstgefuellt).nurjgstgefuellt:(NOT +schuljahrgefuellt)CAND (NOT halbjahrgefuellt)CAND (jgstgefuellt). +nurschuljahrundjgstgefuellt:(schuljahrgefuellt)CAND (NOT halbjahrgefuellt) +CAND (jgstgefuellt).weiterevorbereitungnachfehlerpruefung: +halbjahresdatenschonvorhanden:=FALSE ;IF allefeldergefuelltTHEN +angabevonsjhjjgstELIF nurschuljahrundhalbjahrgefuelltTHEN angabevonsjhjELIF +nurhalbjahrundjgstgefuelltTHEN angabevonhjjgstFI ;gibmaskemitrowaus(bearb1, +fnrname,fnrabgangbestand).allefeldergefuellt:(schuljahrgefuellt)CAND ( +halbjahrgefuellt)CAND (jgstgefuellt).nurschuljahrundhalbjahrgefuellt:( +schuljahrgefuellt)CAND (halbjahrgefuellt)CAND (NOT jgstgefuellt). +nurhalbjahrundjgstgefuellt:(NOT schuljahrgefuellt)CAND (halbjahrgefuellt) +CAND (jgstgefuellt).angabevonsjhjjgst:IF halbjahrrelevantTHEN +schuelerhjdlesen(dnrhalbjahresdaten,TRUE );IF halbjahresdatenschonvorhanden +THEN savetupel(dnrhalbjahresdaten,sicherunghjd);saveupdateposition( +dnrhalbjahresdaten);IF passendejgstTHEN aenderungsvorbereitungELSE +meldungausgeben(meldungfalschejgst,fnrgewjgst);LEAVE +halbjahresdatendesschuelersbearbeitenFI ;ELSE aenderungsvorbereitungFI ;ELSE +meldungausgeben(meldunghalbjahrnichtrelevant,fnrgewjgst);LEAVE +halbjahresdatendesschuelersbearbeitenFI .passendejgst:int(gewjgst)=intwert( +fnrhjdjgst).angabevonsjhj:schuelerhjdlesen(dnrhalbjahresdaten,FALSE );IF +halbjahresdatenschonvorhandenTHEN savetupel(dnrhalbjahresdaten,sicherunghjd); +saveupdateposition(dnrhalbjahresdaten);gewjgst:=jgstaufber(wert(fnrhjdjgst)); +erfassungsfeld(eingang)(fnrgewjgst):=gewjgst;erfassungsfeld(bearb1)( +fnrausgabegewjgst):=gewjgst;infeld(fnrgewjgst);standardmaskenfeld(gewjgst, +fnrgewjgst);standardfelderausgeben;vglgewhalbjahr:=gewjgst+punkt+gewhalbjahr; +vglakthalbjahr:=jgst+punkt+akthalbjahr;aenderungsvorbereitungELIF akthalbjahr +=gewhalbjahrCAND aktschuljahr=gewschuljahrTHEN infeld(fnrgewjgst); +standardmaskenfeld(jgst,fnrgewjgst);standardfelderausgeben;erfassungsfeld( +bearb1)(fnrausgabegewjgst):=jgst;vglgewhalbjahr:=gewjgst+punkt+gewhalbjahr; +vglakthalbjahr:=jgst+punkt+akthalbjahr;aenderungsvorbereitungELSE +meldungausgeben(meldungjgstangeben,fnrgewjgst);LEAVE +halbjahresdatendesschuelersbearbeitenFI .angabevonhjjgst:IF halbjahrrelevant +THEN schuelerhjdlesen(ixhjdfamrufgebjgsthj,TRUE );IF +halbjahresdatenschonvorhandenTHEN savetupel(dnrhalbjahresdaten,sicherunghjd); +saveupdateposition(dnrhalbjahresdaten);gewschuljahr:=wert(fnrhjdsj); +erfassungsfeld(eingang)(fnrgewschuljahr):=gewschuljahr;erfassungsfeld(bearb1) +(fnrausgabegewschj):=gewschuljahr;IF wiederholungvorhanden(dnrhalbjahresdaten +,ixhjdfamrufgebjgsthj)THEN meldungbitteschuljahrangeben;LEAVE +halbjahresdatendesschuelersbearbeitenELSE infeld(fnrgewschuljahr); +standardmaskenfeld(gewschuljahr,fnrgewschuljahr);standardfelderausgeben; +aenderungsvorbereitungFI ELSE meldungbitteschuljahrangeben;LEAVE +halbjahresdatendesschuelersbearbeitenFI ELSE meldungausgeben( +meldunghalbjahrnichtrelevant,fnrgewjgst);LEAVE +halbjahresdatendesschuelersbearbeitenFI .meldungbitteschuljahrangeben: +meldungausgeben(meldungschuljahrangeben,fnrgewschuljahr). +aenderungsvorbereitung:standardstartproc(maskennamebearb1);bs:=bearb1;IF +maskebearb1nochnichtdaTHEN maskebearb1nochnichtda:=FALSE FI ; +bereiteaenderungvor.halbjahrrelevant:vglgewhalbjahr:=gewjgst+punkt+ +gewhalbjahr;vglakthalbjahr:=jgst+punkt+akthalbjahr;lieferehalbjahreszeile( +vergleichszeile,vglakthalbjahr);posgewhalbjahr:=pos(vergleichszeile, +vglgewhalbjahr);posgewhalbjahr>0.END PROC +halbjahresdatendesschuelersbearbeiten;PROC meldungausgeben(INT CONST welche, +fehlerfeld):standardmeldung(welche,niltext);infeld(fehlerfeld);return(1)END +PROC meldungausgeben;PROC meldungausgebeneinfach(INT CONST welche,fehlerfeld) +:standardmeldung(welche,niltext);infeld(fehlerfeld);standardnprocEND PROC +meldungausgebeneinfach;PROC schluesselbereitstellen:falschesdatum:=FALSE ; +fehlerfeld:=0;schluessel(1):=standardmaskenfeld(fnrname);schluessel(2):= +standardmaskenfeld(fnrrufname);schluessel(3):=datumrekonversion( +standardmaskenfeld(fnrgebdatum));IF standardmaskenfeld(fnrgebdatum)<>niltext +THEN pruefe(pruefartdatum,maske(bs),TEXT PROC (INT CONST )hjderfassungswert, +fnrgebdatum,0,0,niltext,fehlerfeld);IF fehlerfeld<>0THEN infeld(fehlerfeld); +falschesdatum:=TRUE ;FI FI ;IF NOT falschesdatumTHEN legeaktuellenbestandfest +FI .END PROC schluesselbereitstellen;PROC legeaktuellenbestandfest: +erfassungsfeld(bs)(fnrabgangbestand):=standardmaskenfeld(fnrabgangbestand); +IF standardmaskenfeld(fnrabgangbestand)=""THEN aktbestand:=schueleraktuell +ELSE aktbestand:=schuelerabgegangenFI END PROC legeaktuellenbestandfest;PROC +pruefeobnameexistiert(BOOL VAR suexist):TEXT VAR datenbankwerte, +schluesselwerte;inittupel(dnrschueler);maskenwerteindatenbank;IF NOT +falschesdatumTHEN search(ixsustatfamrufgeb,FALSE );IF dbstatus=okCAND wert( +fnrsustatuss)=aktbestandTHEN schuelertid:=gettid;hjdtid:=wert(fnrsutidakthjd) +;datenbankwerte:=wert(fnrsurufnames)+datumrekonversion(wert(fnrsugebdatums)); +schluesselwerte:=schluessel(2)+schluessel(3);suexist:=(wert(fnrsufamnames)= +schluessel(1)CAND ((schluessel(2)=leerAND schluessel(3)=leer)OR (pos( +datenbankwerte,schluesselwerte)=1)))ELSE suexist:=FALSE FI FI .END PROC +pruefeobnameexistiert;PROC maskenwerteindatenbank:putwert(fnrsufamnames, +schluessel(1));putwert(fnrsurufnames,schluessel(2));disablestop;putwert( +fnrsugebdatums,datumskonversion(schluessel(3)));IF iserrorTHEN clearerror; +standardmeldung(meldungfalschesdatum,"");infeld(fnrgebdatum);falschesdatum:= +TRUE ;ELSE putwert(fnrsustatuss,aktbestand);FI ;enablestopEND PROC +maskenwerteindatenbank;PROC bereiteaenderungvor:IF +halbjahresdatenschonvorhandenTHEN restoretupel(dnrhalbjahresdaten, +sicherunghjd);holedbwerte(bearb1);FI ;IF aktuelleshalbjahrTHEN IF NOT +halbjahresdatenschonvorhandenTHEN erfassungsfeld(bearb1)(fnrausgabegewzug):= +zug;FI ;fuellehjddateninfelder;infeld(fnrausgabename);standardfelderausgeben; +infeld(fnrblbriefwarn)ELSE IF NOT halbjahresdatenschonvorhandenTHEN +erfassungsfeld(bearb1)(fnrausgabegewzug):=gewzug;FI ;fuellehjddateninfelder; +infeld(fnrausgabename);standardfelderausgeben;infeld(fnrausgabegewjgst)FI ; +standardnproc.aktuelleshalbjahr:akthalbjahr=gewhalbjahrCAND aktschuljahr= +gewschuljahr.END PROC bereiteaenderungvor;BOOL PROC wiederholungvorhanden( +INT CONST dnr,index):ROW 5TEXT VAR feld;feld(1):=wert(dnr+1);feld(2):=wert( +dnr+2);feld(3):=wert(dnr+3);feld(4):=wert(dnr+5);feld(5):=wert(dnr+6);succ( +index);dbstatus=okCAND feld(1)=wert(dnr+1)CAND feld(2)=wert(dnr+2)CAND feld(3 +)=wert(dnr+3)CAND feld(4)=wert(dnr+5)CAND feld(5)=wert(dnr+6).END PROC +wiederholungvorhanden;PROC fuellehjddateninfelder:IF bs=2THEN +gibmaskemitrowaus(bearb1,fnrname,fnrverspaetet);ELSE gibmaskemitrowaus(bearb1 +,fnrname,fnrausgabegewzug);IF maskebearb2nochnichtdaTHEN fachfuellen; +artfuellen;klausurfuellen;kursfuellen;notefuellen;bemfuellen;warnungfuellen; +ELSE gibmaskemitrowaus(bearb2,fnrfachanf,fnrwarnungende)FI FI .fachfuellen: +hjdfachleiste:=wert(fnrhjdfach);FOR indFROM 0UPTO (fnrfachende-fnrfachanf) +REP standardmaskenfeld(wert(fnrhjdfach,(ind*2+1),2),(fnrfachanf+ind))PER . +artfuellen:hjdartleiste:=wert(fnrhjdkursart);FOR indFROM 0UPTO ( +fnrkursartende-fnrkursartanf)REP standardmaskenfeld(wert(fnrhjdkursart,(ind*2 ++1),2),(fnrkursartanf+ind))PER .klausurfuellen:hjdklausurleiste:=wert( +fnrhjdklausurteiln);FOR indFROM 0UPTO (fnrklausurende-fnrklausuranf)REP +standardmaskenfeld(wert(fnrhjdklausurteiln,(ind+1),1),(fnrklausuranf+ind)) +PER .kursfuellen:TEXT VAR klzeichen;hjdkennungenleiste:=wert( +fnrhjdlerngrpkenn);FOR indFROM 0UPTO (fnrkursende-fnrkursanf)REP +standardmaskenfeld(wert(fnrhjdlerngrpkenn,(4*ind+1),4),(fnrkursanf+ind))PER . +notefuellen:FOR indFROM 0UPTO (fnrnoteende-fnrnoteanf)REP standardmaskenfeld( +wert(fnrhjdnotepunkte,(2*ind+1),2),(fnrnoteanf+ind))PER .bemfuellen:FOR ind +FROM 0UPTO (fnrbemende-fnrbemanf)REP standardmaskenfeld(wert(fnrhjdbemerk,(3* +ind+1),3),(fnrbemanf+ind))PER .warnungfuellen:FOR indFROM 0UPTO ( +fnrwarnungende-fnrwarnunganf)REP standardmaskenfeld(wert(fnrhjdvermwarnung,( +ind+1),1),(fnrwarnunganf+ind))PER .END PROC fuellehjddateninfelder;PROC +loeschedieerstellteobjektliste:forget(dateiname,quiet);END PROC +loeschedieerstellteobjektliste;PROC schuelerhjdlesen(INT CONST index,BOOL +CONST jgstgesetzt):IF jgstgesetztTHEN IF aktuellesschulhalbjahrinbearbeitung +THEN IF hjdtid<>leerTHEN readtid(dnrhalbjahresdaten,hjdtid); +halbjahresdatenschonvorhanden:=dbstatus=0ELSE inittupel(dnrhalbjahresdaten); +halbjahresdatenschonvorhanden:=FALSE FI ELSE richtigsuchenundlesenFI ELSE +richtigsuchenundlesenFI ;IF halbjahresdatenschonvorhandenAND wert( +fnrhjdkennung)<>""THEN gewzug:=wert(fnrhjdkennung)ELSE gewzug:=""FI . +richtigsuchenundlesen:inittupel(dnrhalbjahresdaten);schluesselfuerhjdsetzen( +dnrhalbjahresdaten,schluessel,gewschuljahr,gewhalbjahr,gewjgst);search(index, +TRUE );halbjahresdatenschonvorhanden:=dbstatus=0.END PROC schuelerhjdlesen; +PROC halbjahresdatenspeichern(BOOL CONST speichern):INT VAR aktjg:=int(jgst); +IF speichernTHEN IF faecher=trenner+trennerTHEN holeaktdatenFI ;fehlerstatus +:=0;merkeinhaltdesaktuellenschirms;pruefeplausibilitaet(fehlerstatus);IF +datenfehlerfreiTHEN standardmeldung(meldungspeicherung,"");datenspeichern;# +eventuellinstatwuerfeleintragen;dr11.05.88# +ueberpruefobkurswahlbasisnochaktuell; +vorbereitendernaechstenschluesselbehandlung(2)ELSE return(1)FI ELSE +standardmeldung(meldungkeinespeicherung,""); +vorbereitendernaechstenschluesselbehandlung(2)FI . +ueberpruefobkurswahlbasisnochaktuell:IF NOT maskebearb2nochnichtdaTHEN IF +sek2jgstTHEN IF aktoderzukhjTHEN IF aenderunginkurswahldatenTHEN +loeschspezkurswahlbasisFI FI FI FI .sek2jgst:aktjg>9.aktoderzukhj:(int( +gewjgst)=aktjgCAND int(gewhalbjahr)>=int(akthalbjahr))COR int(gewjgst)>aktjg. +aenderunginkurswahldaten:hjdfachleiste<>verglfachleisteCOR hjdartleiste<> +verglartleisteCOR hjdklausurleiste<>verglklausurleisteCOR hjdkennungenleiste +<>verglkennungenleiste.loeschspezkurswahlbasis:kurswahlserveraktualisieren( +jgst,gewjgst,gewhalbjahr).holeaktdaten:holeblbrief;holebemerk;holenoten; +holefaecher;holeartlv.holeblbrief:inittupel(dnrschluessel);statleseschleife( +dnrschluessel,bestandblauerbrief,"",fnrschlsachgebiet,fnrschlschluessel,PROC +briefcat).holebemerk:inittupel(dnrschluessel);statleseschleife(dnrschluessel, +bestandbemerkungen,"",fnrschlsachgebiet,fnrschlschluessel,PROC bemerkcat). +holenoten:inittupel(dnrschluessel);statleseschleife(dnrschluessel, +bestandzeugnisnoten,"",fnrschlsachgebiet,fnrschlschluessel,PROC notencat). +holefaecher:inittupel(dnrfaecher);statleseschleife(dnrfaecher,"","",fnrffach, +fnrffachbez,PROC fachcat).holeartlv:inittupel(dnrschluessel);statleseschleife +(dnrschluessel,bestandartlv,"",fnrschlsachgebiet,fnrschlschluessel,PROC +artcat).merkeinhaltdesaktuellenschirms:IF bs=2THEN merkemaskeninhalt(bearb1, +fnrausgabegewjgst,fnrverspaetet)ELSE merkemaskeninhalt(bearb2,fnrfachanf, +fnrwarnungende);FI .datenfehlerfrei:fehlerstatus=0.datenspeichern:IF +halbjahresdatenschonvorhandenTHEN logeintragvornehmen("Änderung"); +datenaendernELSE logeintragvornehmen("Neueinfügen");schluesselsetzen( +dnrhalbjahresdaten);dateneinfuegenFI .datenaendern:dbwertesetzen; +restoreupdateposition(dnrhalbjahresdaten);selupdate(dnrhalbjahresdaten); +statusabfrage.dateneinfuegen:dbwertesetzen;insert(dnrhalbjahresdaten); +statusabfrage;IF dbstatus=ok#dr11.05.88#THEN hjdtid:=gettid; +eventuellneueshjdtideintragenFI .END PROC halbjahresdatenspeichern;PROC +logeintragvornehmen(TEXT CONST logergaenzung):TEXT VAR eintrag:=logtextbeginn +;eintragCAT logergaenzung;eintragCAT " """;eintragCAT schluessel(1);eintrag +CAT ", ";eintragCAT schluessel(2);eintragCAT ", ";eintragCAT schluessel(3); +eintragCAT """";logeintrag(eintrag)END PROC logeintragvornehmen;PROC fachcat( +BOOL VAR b):IF dbstatus<>0THEN b:=TRUE ELSE faecherCAT wert(fnrffach);faecher +CAT trennerFI END PROC fachcat;PROC artcat(BOOL VAR b):IF wert( +fnrschlsachgebiet)>bestandartlvCOR dbstatus<>0THEN b:=TRUE ELSE artlvCAT wert +(fnrschlschluessel);artlvCAT trennerFI END PROC artcat;PROC briefcat(BOOL +VAR b):IF wert(fnrschlsachgebiet)>bestandblauerbriefCOR dbstatus<>0THEN b:= +TRUE ELSE blbriefCAT wert(fnrschlschluessel);blbriefCAT trennerFI END PROC +briefcat;PROC bemerkcat(BOOL VAR b):IF wert(fnrschlsachgebiet)> +bestandbemerkungenCOR dbstatus<>0THEN b:=TRUE ELSE bemerkCAT wert( +fnrschlschluessel);bemerkCAT trennerFI END PROC bemerkcat;PROC notencat(BOOL +VAR b):IF wert(fnrschlsachgebiet)>bestandzeugnisnotenCOR dbstatus<>0THEN b:= +TRUE ELSE notenCAT wert(fnrschlschluessel);notenCAT trennerFI END PROC +notencat;PROC statusabfrage:IF dbstatus<>0THEN standardmeldung( +meldungspeicherfehler,text(dbstatus)+paramausgabe);pauseFI .END PROC +statusabfrage;PROC schluesselsetzen(INT CONST dateinummer): +schluesselfuerhjdsetzen(dateinummer,schluessel,gewschuljahr,gewhalbjahr, +gewjgst)END PROC schluesselsetzen;PROC dbwertesetzen:INT VAR lv;IF bs=2THEN +datenbearb1vombsholen;datenbearb2setzenELSE datenbearb1setzen; +datenbearb2vombsholenFI .datenbearb1vombsholen:FOR lvFROM fnrausgabegewjgst +UPTO fnrverspaetetREP erfassungsfeld(bearb1)(lv):=standardmaskenfeld(lv)PER ; +setzedbwerte(bearb1);setzekennung;.setzekennung:IF +aktuellesschulhalbjahrinbearbeitungTHEN putwert(fnrhjdkennung,compress(zug)) +FI .datenbearb2setzen:IF NOT maskebearb2nochnichtdaTHEN setzedbwerte(bearb2) +FI .datenbearb1setzen:setzedbwerte(bearb1).datenbearb2vombsholen:fachsetzen; +artsetzen;klausursetzen;kurssetzen;notesetzen;bemerksetzen;kurswarnungsetzen. +fachsetzen:spalteninhalte:="";FOR indFROM fnrfachanfUPTO fnrfachendeREP +plausivar:=standardmaskenfeld(ind);IF compress(plausivar)<>""THEN +spalteninhalteCAT text(plausivar,2)FI ;PER ;putwert(fnrhjdfach,spalteninhalte +).artsetzen:spalteninhalte:="";FOR indFROM fnrkursartanfUPTO fnrkursartende +REP IF (plausileisteSUB ((ind+1)MOD 13+1))="1"THEN spalteninhalteCAT text( +standardmaskenfeld(ind),2)FI ;PER ;putwert(fnrhjdkursart,spalteninhalte). +klausursetzen:spalteninhalte:="";FOR indFROM fnrklausuranfUPTO fnrklausurende +REP IF (plausileisteSUB ((ind+1)MOD 13+1))="1"THEN spalteninhalteCAT text( +standardmaskenfeld(ind),1)FI ;PER ;putwert(fnrhjdklausurteiln,spalteninhalte) +.kurssetzen:spalteninhalte:="";FOR indFROM fnrkursanfUPTO fnrkursendeREP IF ( +plausileisteSUB ((ind+1)MOD 13+1))="1"THEN spalteninhalteCAT text( +standardmaskenfeld(ind),4)FI ;PER ;putwert(fnrhjdlerngrpkenn,spalteninhalte). +notesetzen:spalteninhalte:="";FOR indFROM fnrnoteanfUPTO fnrnoteendeREP IF ( +plausileisteSUB ((ind+1)MOD 13+1))="1"THEN spalteninhalteCAT text( +standardmaskenfeld(ind),2)FI ;PER ;putwert(fnrhjdnotepunkte,spalteninhalte). +bemerksetzen:spalteninhalte:="";FOR indFROM fnrbemanfUPTO fnrbemendeREP IF ( +plausileisteSUB ((ind+1)MOD 13+1))="1"THEN spalteninhalteCAT text( +standardmaskenfeld(ind),3)FI ;PER ;putwert(fnrhjdbemerk,spalteninhalte). +kurswarnungsetzen:spalteninhalte:="";FOR indFROM fnrwarnunganfUPTO +fnrwarnungendeREP IF (plausileisteSUB ((ind+1)MOD 13+1))="1"THEN +spalteninhalteCAT text(standardmaskenfeld(ind),1)FI ;PER ;putwert( +fnrhjdvermwarnung,spalteninhalte).END PROC dbwertesetzen;PROC +vorbereitendernaechstenschluesselbehandlung(INT CONST rueckschritte):IF +exists(dateiname)THEN holenaechstenschluesselauslisteELSE enter(2)FI . +holenaechstenschluesselausliste:BOOL VAR ok,kannbearbeitetwerden:=FALSE ; +holenaechstenmehrtlgschluesselausdatei(ok);WHILE okREP pruefeobnameexistiert( +ok);IF okTHEN kannbearbeitetwerden:=TRUE ;ok:=FALSE ELSE +holenaechstenmehrtlgschluesselausdatei(ok)FI PER ;IF kannbearbeitetwerden +THEN bereiteeingangsmaskefuerausgewaehltenvor;return(rueckschritte)ELSE +behandleendederlistenabarbeitungFI .behandleendederlistenabarbeitung: +standardmeldung(meldungletzter,"");enter(rueckschritte+ +schrittefuerobjektliste).END PROC vorbereitendernaechstenschluesselbehandlung +;PROC bereiteeingangsmaskefuerausgewaehltenvor:standardstartproc( +maskennameeingang);bs:=eingang;IF maskeeingangnochnichtdaTHEN initmaske(maske +(bs),maskennameeingang);init(bs,maxfeldbearb0);maskeeingangnochnichtda:= +FALSE FI ;jgst:=wert(fnrsusgrpjgst);zug:=wert(fnrsusgrpzugtut);akthalbjahr:= +schulkenndatum(schulhalbjahr);fuellemaskenfeldereingang;gibmaskemitrowaus( +eingang,fnrname,fnrabgangbestand);infeld(fnrname);standardfelderausgeben; +setzefeldschutz;infeld(fnrgewschuljahr)END PROC +bereiteeingangsmaskefuerausgewaehltenvor;PROC pruefeplausibilitaet(INT VAR +fstatus):fmeld:=0;feldnummer:=0;pruefbestand:="";fstatus:=0;standardmeldung( +pruefemeldung,"");pruefeplausibilitaetbearb1;IF NOT maskebearb2nochnichtda +THEN pruefeplausibilitaetbearb2FI .fehlerbehandlungbearb1:IF bs=3THEN +standardstartproc(maskennamebearb1);bs:=2;fuellehjddateninfelder;infeld( +fnrausgabename);standardfelderausgeben;FI ;fehlerausgabespeziell;infeld( +fstatus);LEAVE pruefeplausibilitaet.fehlerausgabespeziell:IF fmeld= +meldungversetzungskzunzulaessigTHEN standardmeldung(fmeld,erfassungsfeld( +bearb1)(fnrversetzung)+paramausgabe);ELIF fmeld=meldungnureinesderfaechererl +THEN standardmeldung(fmeld,plausitxt+paramausgabe);ELIF fmeld= +meldunginakthjkeineaenderungTHEN standardmeldung(fmeld,erfassungsfeld(bearb1) +(fnrrufname)+" "+erfassungsfeld(bearb1)(fnrname)+paramausgabe+jgst+zug+ +paramausgabe)ELSE standardmeldung(fmeld,"")FI .fehlerbehandlungbearb2:IF bs=2 +THEN standardstartproc(maskennamebearb2);bs:=3;fuellehjddateninfelder;infeld( +fnrausgabename);standardfelderausgeben;FI ;fehlerausgabe;LEAVE +pruefeplausibilitaet.fehlerausgabe:infeld(fstatus);standardmeldung(fmeld,""). +pruefeplausibilitaetbearb1:IF erfassungsfeld(bearb1)(fnrausgabegewjgst)="" +THEN fstatus:=fnrausgabegewjgst;fmeld:=meldungjgstangeben; +fehlerbehandlungbearb1ELIF erfassungsfeld(bearb1)(fnrausgabegewzug)=""THEN +fstatus:=fnrausgabegewzug;fmeld:=meldungfeldfuellen;fehlerbehandlungbearb1 +ELIF erfassungsfeld(bearb1)(fnrausgabegewjgst)<>jgstCAND aktuellessjhjTHEN +fstatus:=fnrausgabegewjgst;fmeld:=meldunginakthjkeineaenderung; +fehlerbehandlungbearb1ELIF erfassungsfeld(bearb1)(fnrausgabegewzug)<>zugCAND +aktuellessjhjTHEN fstatus:=fnrausgabegewzug;fmeld:= +meldunginakthjkeineaenderung;fehlerbehandlungbearb1ELSE gewjgst:=jgstaufber( +erfassungsfeld(bearb1)(fnrausgabegewjgst));vglgewhalbjahr:=gewjgst+punkt+ +gewhalbjahr;vglakthalbjahr:=jgst+punkt+akthalbjahr;lieferehalbjahreszeile( +vergleichszeile,vglakthalbjahr);posgewhalbjahr:=pos(vergleichszeile, +vglgewhalbjahr);IF posgewhalbjahr<1THEN fstatus:=fnrausgabegewjgst;fmeld:= +meldunghalbjahrnichtrelevant;fehlerbehandlungbearb1FI ;FI ;IF pos(blbrief, +trenner+erfassungsfeld(bearb1)(fnrblbriefwarn)+trenner)<1THEN fstatus:= +fnrblbriefwarn;fmeld:=fmeldnichtimbestand;fehlerbehandlungbearb1FI ;IF pos( +blbrief,trenner+erfassungsfeld(bearb1)(fnrblbriefnwarn)+trenner)<1THEN +fstatus:=fnrblbriefnwarn;fmeld:=fmeldnichtimbestand;fehlerbehandlungbearb1FI +;IF pos(bemerk,trenner+erfassungsfeld(bearb1)(fnrblbriefbem)+trenner)<1THEN +fstatus:=fnrblbriefbem;fmeld:=fmeldnichtimbestand;fehlerbehandlungbearb1FI ; +IF pos(bemerk,trenner+erfassungsfeld(bearb1)(fnrblbriefnbem)+trenner)<1THEN +fstatus:=fnrblbriefnbem;fmeld:=fmeldnichtimbestand;fehlerbehandlungbearb1FI ; +IF pos(versetzg,trenner+erfassungsfeld(bearb1)(fnrversetzung)+trenner)<1THEN +fstatus:=fnrversetzung;fmeld:=meldungversetzungskzunzulaessig; +fehlerbehandlungbearb1FI ;IF pos(faecher,trenner+erfassungsfeld(bearb1)( +fnrnachpr1)+trenner)<1THEN fstatus:=fnrnachpr1;fmeld:= +meldungfachangabeunzulaessig;fehlerbehandlungbearb1FI ;IF pos(faecher,trenner ++erfassungsfeld(bearb1)(fnrnachpr2)+trenner)<1THEN fstatus:=fnrnachpr2;fmeld +:=meldungfachangabeunzulaessig;fehlerbehandlungbearb1FI ;IF pos(faecher, +trenner+erfassungsfeld(bearb1)(fnrnachpr3)+trenner)<1THEN fstatus:=fnrnachpr3 +;fmeld:=meldungfachangabeunzulaessig;fehlerbehandlungbearb1FI ;IF pos(bemerk, +trenner+erfassungsfeld(bearb1)(fnrnachprbem)+trenner)<1THEN fstatus:= +fnrnachprbem;fmeld:=fmeldnichtimbestand;fehlerbehandlungbearb1FI ;plausitxt:= +"";plausitxtCAT trenner;plausitxtCAT erfassungsfeld(bearb1)(fnrnachpr1); +plausitxtCAT trenner;plausitxtCAT erfassungsfeld(bearb1)(fnrnachpr2); +plausitxtCAT trenner;plausitxtCAT erfassungsfeld(bearb1)(fnrnachpr3); +plausitxtCAT trenner;IF pos(plausitxt,trenner+erfassungsfeld(bearb1)( +fnrnachprabgelegt)+trenner)<1THEN plausitxt:="";IF erfassungsfeld(bearb1)( +fnrnachpr1)<>""THEN plausitxtCAT erfassungsfeld(bearb1)(fnrnachpr1);FI ;IF +erfassungsfeld(bearb1)(fnrnachpr2)<>""THEN plausitxtCAT ",";plausitxtCAT +erfassungsfeld(bearb1)(fnrnachpr2);FI ;IF erfassungsfeld(bearb1)(fnrnachpr3) +<>""THEN plausitxtCAT ",";plausitxtCAT erfassungsfeld(bearb1)(fnrnachpr3);FI +;fstatus:=fnrnachprabgelegt;fmeld:=meldungnureinesderfaechererl; +fehlerbehandlungbearb1FI ;IF pos(noten,trenner+erfassungsfeld(bearb1)( +fnrnachprnote)+trenner)<1THEN fstatus:=fnrnachprnote;fmeld:= +fmeldnichtimbestand;fehlerbehandlungbearb1FI ;IF pos(bemerk,trenner+ +erfassungsfeld(bearb1)(fnrzeugbem1)+trenner)<1THEN fstatus:=fnrzeugbem1;fmeld +:=fmeldnichtimbestand;fehlerbehandlungbearb1FI ;IF pos(bemerk,trenner+ +erfassungsfeld(bearb1)(fnrzeugbem2)+trenner)<1THEN fstatus:=fnrzeugbem2;fmeld +:=fmeldnichtimbestand;fehlerbehandlungbearb1FI ;IF pos(bemerk,trenner+ +erfassungsfeld(bearb1)(fnrzeugbem3)+trenner)<1THEN fstatus:=fnrzeugbem3;fmeld +:=fmeldnichtimbestand;fehlerbehandlungbearb1FI ;plausitxt:=erfassungsfeld( +bearb1)(fnrversaeumtmit);IF plausitxt<>""CAND plausitxt<>"0"THEN IF int( +plausitxt)=0THEN fstatus:=fnrversaeumtmit;fmeld:=meldungunerlaubterwert; +fehlerbehandlungbearb1FI FI ;plausitxt:=erfassungsfeld(bearb1)( +fnrversaeumtohne);IF plausitxt<>""CAND plausitxt<>"0"THEN IF int(plausitxt)=0 +THEN fstatus:=fnrversaeumtohne;fmeld:=meldungunerlaubterwert; +fehlerbehandlungbearb1FI FI ;plausitxt:=erfassungsfeld(bearb1)(fnrverspaetet) +;IF plausitxt<>""CAND plausitxt<>"0"THEN IF int(plausitxt)=0THEN fstatus:= +fnrverspaetet;fmeld:=meldungunerlaubterwert;fehlerbehandlungbearb1FI FI . +aktuellessjhj:akthalbjahr=gewhalbjahrCAND aktschuljahr=gewschuljahr. +pruefeplausibilitaetbearb2:verglfachleiste:="";verglartleiste:=""; +verglklausurleiste:="";verglkennungenleiste:="";plausileiste:=stdplausileiste +;FOR lvFROM 0UPTO fnrfachende-fnrfachanfREP plausitxt:=erfassungsfeld(bearb2) +(fnrfachanf+lv);IF plausitxt<>""THEN replace(plausileiste,lv+1,"1"); +verglfachleisteCAT text(plausitxt,2);IF pos(faecher,trenner+plausitxt+trenner +)<1THEN fstatus:=fnrfachanf+lv;fmeld:=meldungfachangabeunzulaessig; +fehlerbehandlungbearb2FI FI PER ;FOR lvFROM 0UPTO fnrkursartende- +fnrkursartanfREP plausitxt:=erfassungsfeld(bearb2)(fnrkursartanf+lv);IF ( +plausileisteSUB (lv+1))="1"THEN verglartleisteCAT text(plausitxt,2)FI ;IF +plausitxt<>""THEN IF pos(artlv,trenner+plausitxt+trenner)<1THEN fstatus:= +fnrkursartanf+lv;fmeld:=meldungungueltigekursart;fehlerbehandlungbearb2FI ; +FI PER ;FOR lvFROM 0UPTO fnrkursende-fnrkursanfREP plausitxt:=erfassungsfeld( +bearb2)(fnrkursanf+lv);IF (plausileisteSUB (lv+1))="1"THEN +verglkennungenleisteCAT text(plausitxt,4)FI PER ;FOR lvFROM 0UPTO +fnrklausurende-fnrklausuranfREP plausitxt:=erfassungsfeld(bearb2)( +fnrklausuranf+lv);IF (plausileisteSUB (lv+1))="1"THEN verglklausurleisteCAT +text(plausitxt,1)FI PER ;FOR lvFROM 0UPTO fnrnoteende-fnrnoteanfREP plausitxt +:=erfassungsfeld(bearb2)(fnrnoteanf+lv);IF plausitxt<>""THEN IF pos(noten, +trenner+plausitxt+trenner)<1THEN fstatus:=fnrnoteanf+lv;fmeld:= +fmeldnichtimbestand;fehlerbehandlungbearb2FI FI ;PER ;FOR lvFROM 0UPTO +fnrbemende-fnrbemanfREP plausitxt:=erfassungsfeld(bearb2)(fnrbemanf+lv);IF +plausitxt<>""THEN IF pos(bemerk,trenner+plausitxt+trenner)<1THEN fstatus:= +fnrbemanf+lv;fmeld:=fmeldnichtimbestand;fehlerbehandlungbearb2FI FI ;PER ; +FOR lvFROM 0UPTO fnrwarnungende-fnrwarnunganfREP plausitxt:=erfassungsfeld( +bearb2)(fnrwarnunganf+lv);IF plausitxt<>""THEN IF pos(blbrief,trenner+ +plausitxt+trenner)<1THEN fstatus:=fnrwarnunganf+lv;fmeld:=fmeldnichtimbestand +;fehlerbehandlungbearb2FI FI ;PER .END PROC pruefeplausibilitaet;PROC +listezuhalbjahresdatenzeigen:BOOL VAR listeexistiertnicht;falschesdatum:= +FALSE ;bs:=eingang;IF maskeeingangnochnichtdaTHEN initmaske(maske(bs), +maskennameeingang);init(bs,maxfeldbearb0);maskeeingangnochnichtda:=FALSE FI ; +gewschuljahr:=standardmaskenfeld(fnrgewschuljahr);gewhalbjahr:= +standardmaskenfeld(fnrgewhalbjahr);IF int(standardmaskenfeld(fnrgewjgst))=0 +THEN gewjgst:=standardmaskenfeld(fnrgewjgst);ELSE gewjgst:=jgstaufber( +standardmaskenfeld(fnrgewjgst));FI ;schluesselbereitstellen;IF NOT +falschesdatumTHEN putwert(fnrsustatuss,aktbestand);standardmeldung( +meldunglistenerstellung,"");initobli(saetzederliste);parsenooffields(5); +objektlistestarten(ixsustatfamrufgeb,standardmaskenfeld(fnrname), +fnrsufamnames,TRUE ,listeexistiertnicht);IF listeexistiertnichtTHEN +reinitparsing;standardmeldung(meldungkeineliste,"");return(1)ELSE +datensatzlistenausgabe(PROC (INT CONST )suerfassungschueler,TRUE ,BOOL PROC +pruefunghjd);FI ELSE return(1)FI .END PROC listezuhalbjahresdatenzeigen;BOOL +PROC pruefunghjd:wert(fnrsustatuss)=aktbestandEND PROC pruefunghjd;PROC +halbjahresdatenausgewaehlterschuelerbearbeitenvorbereiten:BOOL VAR ok, +kannbearbeitetwerden:=FALSE ;loeschedieerstellteobjektliste; +objektlistebeenden(dateiname,TRUE );reinitparsing; +holeerstenmehrtlgschluesselausdatei(ok);WHILE okREP pruefeobnameexistiert(ok) +;IF okTHEN kannbearbeitetwerden:=TRUE ;ok:=FALSE ELSE +holenaechstenmehrtlgschluesselausdatei(ok)FI PER ;IF kannbearbeitetwerden +THEN bereiteeingangsmaskefuerausgewaehltenvor;standardnprocELSE +standardmeldung(meldungletzter,"");enter(2)FI .END PROC +halbjahresdatenausgewaehlterschuelerbearbeitenvorbereiten;PROC +fuellemaskenfeldereingang:INT VAR lv;holedbwerte(bs);erfassungsfeld(bs)( +fnrgewschuljahr):=gewschuljahr;erfassungsfeld(bs)(fnrgewhalbjahr):= +gewhalbjahr;erfassungsfeld(bs)(fnrgewjgst):=gewjgst;IF aktbestand= +schueleraktuellTHEN erfassungsfeld(bs)(fnrabgangbestand):=""ELSE +erfassungsfeld(bs)(fnrabgangbestand):="x"FI ;FOR lvFROM fnrnameUPTO +fnrabgangbestandREP standardmaskenfeld(erfassungsfeld(bs)(lv),lv)PER .END +PROC fuellemaskenfeldereingang;PROC setzefeldschutz:INT VAR i;FOR iFROM +fnrnameUPTO fnrabgangbestandREP feldschutz(i)PER ;feldfrei(fnrgewschuljahr); +feldfrei(fnrgewhalbjahr);feldfrei(fnrgewjgst);.END PROC setzefeldschutz;PROC +holeerstenmehrtlgschluesselausdatei(BOOL VAR ok):IF NOT exists(dateiname) +THEN ok:=FALSE ;LEAVE holeerstenmehrtlgschluesselausdateiFI ;f:= +sequentialfile(input,dateiname);holenaechstenmehrtlgschluesselausdatei(ok). +END PROC holeerstenmehrtlgschluesselausdatei;PROC +holenaechstenmehrtlgschluesselausdatei(BOOL VAR ok):TEXT VAR thesaurustext:= +"";INT VAR schluesselbeginn:=0;INT VAR schluesseltrennung:=0;INT VAR i:=1;IF +eof(f)THEN ok:=FALSE ;loeschedieerstellteobjektlisteELSE getline(f, +thesaurustext);bestimmeschluesselausthesaurustext;ok:=TRUE FI . +bestimmeschluesselausthesaurustext:schluesselbeginn:=pos(thesaurustext, +oblitrenner);schluesseltrennung:=pos(thesaurustext,oblitrenner, +schluesselbeginn+1);FOR iFROM 1UPTO anzschluesselsuREP IF schluesseltrennung> +0THEN schluessel(i):=subtext(thesaurustext,schluesselbeginn+1, +schluesseltrennung-1);schluesselbeginn:=schluesseltrennung;schluesseltrennung +:=pos(thesaurustext,oblitrenner,schluesselbeginn+1);ELSE schluessel(i):= +subtext(thesaurustext,schluesselbeginn+1);FI ;schluessel(3):= +datumrekonversion(schluessel(3));PER ;.END PROC +holenaechstenmehrtlgschluesselausdatei;PROC +halbjahresdatendesschuelersnichtbearbeiten: +vorbereitendernaechstenschluesselbehandlung(1)END PROC +halbjahresdatendesschuelersnichtbearbeiten;TEXT PROC hjderfassungswert(INT +CONST feldnr):IF (feldnr>maxfeldbearb2)OR (feldnr<1)THEN ""ELSE +erfassungsfeld(bs)(feldnr)FI .END PROC hjderfassungswert;PROC setzedbwerte( +INT CONST mnr):SELECT mnrOF CASE eingang:setzedbwerteeingangCASE bearb1: +setzedbwertebearb1CASE bearb2:setzedbwertebearb2END SELECT . +setzedbwerteeingang:putwert(fnrsufamnames,erfassungsfeld[mnr][fnrname]); +putwert(fnrsurufnames,erfassungsfeld[mnr][fnrrufname]);putwert(fnrsugebdatums +,datumskonversion(erfassungsfeld[mnr][fnrgebdatum]));.setzedbwertebearb1: +putwert(fnrhjdjgst,erfassungsfeld[mnr][fnrausgabegewjgst]);putwert( +fnrhjdkennung,erfassungsfeld[mnr][fnrausgabegewzug]);putwert(fnrhjdvermblau, +erfassungsfeld[mnr][fnrblbriefwarn]);putwert(fnrhjdbemblau,erfassungsfeld[mnr +][fnrblbriefbem]);putwert(fnrhjdvermnachwarn,erfassungsfeld[mnr][ +fnrblbriefnwarn]);putwert(fnrhjdbemnachwarn,erfassungsfeld[mnr][ +fnrblbriefnbem]);putwert(fnrhjdversetzung,erfassungsfeld[mnr][fnrversetzung]) +;putwert(fnrhjdnachfach1,erfassungsfeld[mnr][fnrnachpr1]);putwert( +fnrhjdnachfach2,erfassungsfeld[mnr][fnrnachpr2]);putwert(fnrhjdnachfach3, +erfassungsfeld[mnr][fnrnachpr3]);putwert(fnrhjdbemnach,erfassungsfeld[mnr][ +fnrnachprbem]);putwert(fnrhjdnachfach,erfassungsfeld[mnr][fnrnachprabgelegt]) +;putwert(fnrhjdnacherg,erfassungsfeld[mnr][fnrnachprnote]);putwert( +fnrhjdbemzeug1,erfassungsfeld[mnr][fnrzeugbem1]);putwert(fnrhjdbemzeug2, +erfassungsfeld[mnr][fnrzeugbem2]);putwert(fnrhjdbemzeug3,erfassungsfeld[mnr][ +fnrzeugbem3]);putwert(fnrhjdversstdm,erfassungsfeld[mnr][fnrversaeumtmit]); +putwert(fnrhjdversstdo,erfassungsfeld[mnr][fnrversaeumtohne]);putwert( +fnrhjdverspaet,erfassungsfeld[mnr][fnrverspaetet]);.setzedbwertebearb2: +setzedbwertfach;setzedbwertart;setzedbwertklausur;setzedbwertkurs; +setzedbwertnote;setzedbwertbem;setzedbwertwarnung.setzedbwertfach: +spalteninhalte:="";FOR indFROM fnrfachanfUPTO fnrfachendeREP spalteninhalte +CAT text(erfassungsfeld[mnr][ind],2)PER ;putwert(fnrhjdfach,spalteninhalte). +setzedbwertart:spalteninhalte:="";FOR indFROM fnrkursartanfUPTO +fnrkursartendeREP spalteninhalteCAT text(erfassungsfeld[mnr][ind],2)PER ; +putwert(fnrhjdkursart,spalteninhalte).setzedbwertklausur:spalteninhalte:=""; +FOR indFROM fnrklausuranfUPTO fnrklausurendeREP spalteninhalteCAT text( +erfassungsfeld[mnr][ind],1)PER ;putwert(fnrhjdklausurteiln,spalteninhalte). +setzedbwertkurs:spalteninhalte:="";FOR indFROM fnrkursanfUPTO fnrkursendeREP +spalteninhalteCAT text(erfassungsfeld[mnr][ind],4)PER ;putwert( +fnrhjdlerngrpkenn,spalteninhalte).setzedbwertnote:spalteninhalte:="";FOR ind +FROM fnrnoteanfUPTO fnrnoteendeREP spalteninhalteCAT text(erfassungsfeld[mnr] +[ind],2)PER ;putwert(fnrhjdnotepunkte,spalteninhalte).setzedbwertbem: +spalteninhalte:="";FOR indFROM fnrbemanfUPTO fnrbemendeREP spalteninhalteCAT +text(erfassungsfeld[mnr][ind],3)PER ;putwert(fnrhjdbemerk,spalteninhalte). +setzedbwertwarnung:spalteninhalte:="";FOR indFROM fnrwarnunganfUPTO +fnrwarnungendeREP spalteninhalteCAT text(erfassungsfeld[mnr][ind],1)PER ; +putwert(fnrhjdvermwarnung,spalteninhalte).END PROC setzedbwerte;PROC +holedbwerte(INT CONST mnr):SELECT mnrOF CASE eingang:holedbwerteeingangCASE +bearb1:holedbwertebearb1CASE bearb2:holedbwertebearb2END SELECT . +holedbwerteeingang:erfassungsfeld[mnr][fnrname]:=wert(fnrsufamnames); +erfassungsfeld[mnr][fnrrufname]:=wert(fnrsurufnames);erfassungsfeld[mnr][ +fnrgebdatum]:=datumrekonversion(wert(fnrsugebdatums));.holedbwertebearb1: +erfassungsfeld[mnr][fnrausgabegewjgst]:=jgstaufber(wert(fnrhjdjgst)); +erfassungsfeld[mnr][fnrausgabegewzug]:=wert(fnrhjdkennung);erfassungsfeld[mnr +][fnrblbriefwarn]:=wert(fnrhjdvermblau);erfassungsfeld[mnr][fnrblbriefbem]:= +wert(fnrhjdbemblau);erfassungsfeld[mnr][fnrblbriefnwarn]:=wert( +fnrhjdvermnachwarn);erfassungsfeld[mnr][fnrblbriefnbem]:=wert( +fnrhjdbemnachwarn);erfassungsfeld[mnr][fnrversetzung]:=wert(fnrhjdversetzung) +;erfassungsfeld[mnr][fnrnachpr1]:=wert(fnrhjdnachfach1);erfassungsfeld[mnr][ +fnrnachpr2]:=wert(fnrhjdnachfach2);erfassungsfeld[mnr][fnrnachpr3]:=wert( +fnrhjdnachfach3);erfassungsfeld[mnr][fnrnachprbem]:=wert(fnrhjdbemnach); +erfassungsfeld[mnr][fnrnachprabgelegt]:=wert(fnrhjdnachfach);erfassungsfeld[ +mnr][fnrnachprnote]:=wert(fnrhjdnacherg);erfassungsfeld[mnr][fnrzeugbem1]:= +wert(fnrhjdbemzeug1);erfassungsfeld[mnr][fnrzeugbem2]:=wert(fnrhjdbemzeug2); +erfassungsfeld[mnr][fnrzeugbem3]:=wert(fnrhjdbemzeug3);erfassungsfeld[mnr][ +fnrversaeumtmit]:=wert(fnrhjdversstdm);erfassungsfeld[mnr][fnrversaeumtohne] +:=wert(fnrhjdversstdo);erfassungsfeld[mnr][fnrverspaetet]:=wert( +fnrhjdverspaet).holedbwertebearb2:.END PROC holedbwerte;BOOL PROC +korrekteschuljahreseingabe(TEXT CONST eingabe):eingabe=niltextOR eingabe= +"9900"OR int(subtext(eingabe,1,2))=int(subtext(eingabe,3,4))-1END PROC +korrekteschuljahreseingabe;PROC eventuellneueshjdtideintragen:IF +aktuellesschulhalbjahrinbearbeitungTHEN neueshjdtideintragenFI . +neueshjdtideintragen:readtid(dnrschueler,schuelertid);putwert(fnrsutidakthjd, +hjdtid);replace(dnrschueler,schuelertid).END PROC +eventuellneueshjdtideintragen;#dr11.05.88PROC eventuellinstatwuerfeleintragen +:IF aktuellesschulhalbjahrinbearbeitungCAND versetzungseintrag<>wert( +fnrhjdversetzung)THEN kuerzelsummeeinsrunter(statnrversetzung,jgst,zug, +aktbestand,versetzungseintrag);kuerzelsummeeinsrauf(statnrversetzung,jgst,zug +,aktbestand,wert(fnrhjdversetzung));FI END PROC +eventuellinstatwuerfeleintragen;#BOOL PROC +aktuellesschulhalbjahrinbearbeitung:vglgewhalbjahr=vglakthalbjahrCAND +gewschuljahr=schulkenndatum(schuljahr)END PROC +aktuellesschulhalbjahrinbearbeitung;TEXT PROC ohnestrich(TEXT CONST txt): +TEXT VAR t:=txt;changeall(t,"_",niltext);tEND PROC ohnestrich;PROC init(INT +CONST bsnr,maxfeld):FOR lvFROM 1UPTO maxfeldREP erfassungsfeld(bsnr)(lv):="" +PER END PROC init;END PACKET halbjahresdatenbearbeiten; + diff --git a/app/schulis/2.2.1/src/1.hoeherstufen anw do.prog b/app/schulis/2.2.1/src/1.hoeherstufen anw do.prog new file mode 100644 index 0000000..d7dc1ea --- /dev/null +++ b/app/schulis/2.2.1/src/1.hoeherstufen anw do.prog @@ -0,0 +1,43 @@ +PACKET hoeherstufenanwdoprogDEFINES halbjahreswechselbearbeitung, +hochsetzeneingangsbehandlung,hochsetzenbearbeitung,hochsetzenprotokolldrucken +:#LET schuljahreswechsel="isp.hoeherstufen local.sj",halbjahreswechsel= +"isp.hoeherstufen local.hj";#LET niltext="",tofather=1,tograndfather=2, +maxjahr=100,minjahr="00";LET zumschuljahresende=1,zumhalbjahresende=0;LET +schluesselschuljahr="Schuljahr",schluesselhalbjahr="Schulhalbjahr", +schuljahresfeld=2,infofeld=3;LET meldende=110,melddruck=58,meldwarten=156; +LET protname="Fehlerprotokoll";LET rcodeprot=1001;DATASPACE VAR ds;INT VAR +kanal:=channel,rcode;TAG VAR aktuellemaske;TEXT VAR aktschuljahr,akthalbjahr, +kommendesschuljahr;LET logbucheintragsjwechsel="Anw. 1.5.1 Hochsetzen ", +logbucheintraghjwechsel="Anw. 1.5.2 Halbjahreswechsel ";TEXT VAR +logbuchtextanfang;PROC hochsetzeneingangsbehandlung:reinitparsing; +eingangsbildschirmzeigen;schuljahrzeigen;aufaktionwarten. +eingangsbildschirmzeigen:initmaske(aktuellemaske,maske(vergleichsknoten)); +standardstartproc(maske(vergleichsknoten)).schuljahrzeigen:schuljahrIN +schuljahresfeld.schuljahr:aktschuljahr:=schulkenndatum(schluesselschuljahr); +akthalbjahr:=schulkenndatum(schluesselhalbjahr);kommendesschuljahr:=subtext( +aktschuljahr,3,4);kommendesschuljahrCAT (jahrestext(int(kommendesschuljahr)+1 +));aktschuljahr.aufaktionwarten:infeld(infofeld);standardnproc.END PROC +hochsetzeneingangsbehandlung;PROC halbjahreswechselbearbeitung: +logbuchtextanfang:=logbucheintraghjwechsel;logeintrag(logbucheintraghjwechsel ++"gestartet");abschnittsendebearbeitung(zumhalbjahresende)END PROC +halbjahreswechselbearbeitung;PROC hochsetzenbearbeitung:logbuchtextanfang:= +logbucheintragsjwechsel;logeintrag(logbucheintragsjwechsel+"gestartet"); +abschnittsendebearbeitung(zumschuljahresende)END PROC hochsetzenbearbeitung; +PROC abschnittsendebearbeitung(INT CONST zeitpunkt):meldewarten; +fehlerbehandlungvorbereiten;verarbeitung;reinitparsing;fehlerauswertung. +meldewarten:standardmeldung(meldwarten,niltext).fehlerbehandlungvorbereiten: +forget(protname,quiet);disablestop.verarbeitung:kanal:=channel;#17.10.88dr# +putsndparam(1,text(kanal));break(quiet);IF zeitpunkt=zumschuljahresendeTHEN +doonserver("schuljahreswechsel",rcode)ELSE doonserver("halbjahreswechsel", +rcode)FI ;continue(kanal).fehlerauswertung:loeschemeldung(aktuellemaske);IF +rcode=rcodeprotTHEN ds:=getrcvds;copy(ds,protname);forget(ds);logeintrag( +logbuchtextanfang+"beendet mit Fehlern");zeigefehlerprotokollELSE logeintrag( +logbuchtextanfang+"beendet ohne Fehler");fertigmeldungFI . +zeigefehlerprotokoll:store(FALSE );clearerror;enablestop;editiere(protname). +fertigmeldung:IF NOT iserrorTHEN standardmeldung(meldende,niltext);FI ;return +(tofather).END PROC abschnittsendebearbeitung;PROC hochsetzenprotokolldrucken +:print(protname);forget(protname,quiet);reorganizescreen;standardmeldung( +melddruck,niltext);return(tograndfather)END PROC hochsetzenprotokolldrucken; +TEXT PROC jahrestext(INT CONST jahr):IF jahr=maxjahrTHEN minjahrELSE text( +jahr)FI END PROC jahrestext;END PACKET hoeherstufenanwdoprog + diff --git a/app/schulis/2.2.1/src/1.listen.abgem b/app/schulis/2.2.1/src/1.listen.abgem new file mode 100644 index 0000000..da5fb1b --- /dev/null +++ b/app/schulis/2.2.1/src/1.listen.abgem @@ -0,0 +1,115 @@ +PACKET abgemlistenDEFINES abgemlispezielleteile:LET niltext="",blank=" ", +mittestrich="-",null=0,ueberschriftenzeilen=1,spalte1breite=7,spalte3breite=8 +,spalte4breite=8,spalte5breite=7,anzspaltentrenner=4,ausgkopflaenge=3, +ausgfeldlaenge=2,AUSGFELD =ROW ausgfeldlaengeTEXT ,AUSGKOPF =ROW +ausgkopflaengeTEXT ,abgemlieingangsmaske="mu liste einfach eingang", +abgemlianfpos=2,mnrbearbeitetwirdjgst=106,#ixsustatabgdat=260,dnrschueler=2, +fnrsufamnames=3,fnrsurufnames=4,fnrsugebdatums=5,fnrsustatuss=6,fnrsusgrpjgst +=7,fnrsusgrpzugtut=8,fnrsunamenszusatzs=21,fnrsuabgdats=16,fnrsuabggrund=17, +fnrsuabschluss=18,#anfangsj="Anfang Schulhalbjahr",endesj= +"Ende Schulhalbjahr";INT CONST spalte2bildbreite:=bildbreite- +anzspaltentrenner-spalte1breite-spalte3breite-spalte4breite-spalte5breite; +INT VAR spalte2druckbreite,druckzeilenzahl,aktuelleindexnr,bildanf, +eingabestatus,breite;TEXT VAR abgemliueberschrift,bearbeitetwirdjgst, +schuljahr,jahr1,jahr2,schuelername,schuelerrufname,schuelernamenszus, +schuelerjgst,schuelerzug,schuelergebdat,schuelerabdat,schuelerabgrund, +schuelerabqual,jgst,neuejgst,startwert,klasse,neueklasse,anfangsdatum:="", +endedatum:="";TEXT VAR druckstrich;TEXT CONST bildstrich:=bildbreite* +mittestrich;AUSGFELD VAR ausgfeld;AUSGKOPF VAR ausgkopf;BOOL VAR +ersteraufbildschirm,klassegeaendert:=FALSE ;BOOL PROC multistop:BOOL VAR b:=( +date(wert(fnrsuabgdats))>=date(anfangsdatum))CAND (date(wert(fnrsuabgdats))<= +date(endedatum))CAND (wert(fnrsustatuss)="ls");bEND PROC multistop;BOOL PROC +multistopdruck:BOOL VAR b:=multistop;setzebestandende(NOT b);bENDPROC +multistopdruck;PROC abgemlispezielleteile(INT CONST nr):SELECT nrOF CASE 1: +abgemlidialogvorbereitenCASE 2:abgemlieingabenrichtigCASE 3: +abgemlilistenvorbereitenCASE 4:abgemlidruckvorbereitenCASE 5: +abgemliseitedruckenCASE 6:abgemlibildschirmvorbereitenCASE 7: +abgemliseitezeigenENDSELECT .END PROC abgemlispezielleteile;PROC +abgemlidialogvorbereiten:abgemliueberschrift:=text(vergleichsknoten); +setzeanfangswerte(abgemlieingangsmaske,abgemlianfpos)END PROC +abgemlidialogvorbereiten;PROC abgemlieingabenrichtig:LET fnrausgdrucker=2, +fnrausgbild=3;standardpruefe(5,fnrausgdrucker,fnrausgbild,null,niltext, +eingabestatus);IF eingabestatus<>0THEN infeld(eingabestatus);setzeeingabetest +(FALSE )ELSE setzeausgabedrucker(standardmaskenfeld(fnrausgbild)=niltext); +setzeeingabetest(TRUE )FI .END PROC abgemlieingabenrichtig;PROC +abgemlilistenvorbereiten:BOOL VAR b:=FALSE ;LET schluessel="Schuljahr"; +aktuellesschuljahrermitteln;aktuelleindexnr:=ixsustatabgdat;startwert:="ls"; +inittupel(dnrschueler);initobli(8);parsenooffields(21);setzeidentiwert(""); +putwert(fnrsustatuss,startwert);putwert(fnrsuabgdats,anfangsdatum);# +objektlistestarten(aktuelleindexnr,"",3,TRUE ,b);#objektlistestarten( +aktuelleindexnr,"",fnrsuabgdats,TRUE ,b);setzebestandende(NOT multistopOR b). +aktuellesschuljahrermitteln:schuljahr:=schulkenndatum(schluessel);jahr1:= +subtext(schuljahr,1,2);jahr2:=subtext(schuljahr,3,4);anfangsdatum:= +schulkenndatum(anfangsj);endedatum:=schulkenndatum(endesj).END PROC +abgemlilistenvorbereiten;PROC abgemlibildschirmvorbereiten:LET fnrausganf=2; +standardkopfmaskeaktualisieren(abgemliueberschrift);breite:=bildbreite; +initspalten;setzespaltenbreiten(spalte2bildbreite);initausgabekopf(bildstrich +);bildanf:=fnrausganf;INT VAR i;FOR iFROM 1UPTO ausgkopflaengeREPEAT ausgkopf +(i)IN bildanf;bildanfINCR 1END REPEAT ;klasse:=niltext; +setzebildanfangsposition(bildanf).END PROC abgemlibildschirmvorbereiten;PROC +abgemliseitezeigen:ersteraufbildschirm:=TRUE ;setzescanendewert(endedatum); +setzescanstartwert(anfangsdatum);blaettern(PROC (INT CONST )schuelerzeigen, +aktion,TRUE ,TRUE ,BOOL PROC multistop);setzescanendewert("�"); +setzescanstartwert("�")END PROC abgemliseitezeigen;PROC schuelerzeigen(INT +CONST x):schuelerholen;IF ersteraufbildschirmTHEN klassegeaendert:=TRUE ; +ersteraufbildschirm:=FALSE FI ;schueleraufbereiten;schueleraufbildschirm.END +PROC schuelerzeigen;PROC schueleraufbildschirm:INT VAR i;FOR iFROM 1UPTO +ausgfeldlaengeREPEAT ausgfeld(i)IN ausgabepos;erhoeheausgabeposumeinsEND +REPEAT .END PROC schueleraufbildschirm;PROC abgemlidruckvorbereiten:LET +uebteil1="Liste der im Schuljahr ",uebteil2=" abgemeldeten Schüler";TEXT VAR +ueberschrift;jgst:=niltext;klasse:=niltext;druckvorbereiten; +variablenfuerdrucksetzen;ueberschriftvorbereitendruck;initdruckkopf(zentriert +(ueberschrift,druckbreite));breite:=druckbreite;initspalten; +setzespaltenbreiten(spalte2druckbreite);initausgabekopf(druckstrich); +holemeldung;inittupel(dnrschueler);putwert(fnrsustatuss,startwert);putwert( +fnrsuabgdats,anfangsdatum);lesenvorbereitendruck(PROC (INT CONST ,BOOL PROC , +INT VAR )scanforward,BOOL PROC multistopdruck).holemeldung:meldungstext( +mnrbearbeitetwirdjgst,bearbeitetwirdjgst).variablenfuerdrucksetzen: +druckstrich:=druckbreite*mittestrich;spalte2druckbreite:=druckbreite- +anzspaltentrenner-spalte1breite-spalte3breite-spalte4breite-spalte5breite; +druckzeilenzahl:=drucklaenge(ueberschriftenzeilen)-ausgkopflaenge. +ueberschriftvorbereitendruck:ueberschrift:=uebteil1+aufbereitetesschuljahr+ +uebteil2.aufbereitetesschuljahr:"19"+jahr1+"/"+jahr2.END PROC +abgemlidruckvorbereiten;PROC abgemliseitedrucken:abgemliueberschriftdrucken; +seitedrucken(PROC (INT VAR )schuelerdrucken,druckzeilenzahl,ausgfeldlaenge, +BOOL PROC multistopdruck);seitenwechsel.END PROC abgemliseitedrucken;PROC +abgemliueberschriftdrucken:druckkopfschreiben;INT VAR i;FOR iFROM 1UPTO +ausgkopflaengeREPEAT druckzeileschreiben(ausgkopf(i))END REPEAT .END PROC +abgemliueberschriftdrucken;PROC schuelerdrucken(INT VAR zeilenzaehler):LET +markiert="#";schuelerholen;IF zeilenzaehler=nullTHEN klassegeaendert:=TRUE +FI ;ggflmeldungjgst;schueleraufbereiten;zeilenzaehlerINCR ausgfeldlaenge; +schuelerindruckdatei.ggflmeldungjgst:IF jgstgeaendertTHEN zwischenmeldungFI . +jgstgeaendert:neuejgst:=schuelerjgst;jgst<>neuejgst.zwischenmeldung: +standardmeldung(bearbeitetwirdjgst,neuejgst+markiert);jgst:=neuejgst;END +PROC schuelerdrucken;PROC schuelerindruckdatei:INT VAR i;FOR iFROM 1UPTO +ausgfeldlaengeREPEAT druckzeileschreiben(ausgfeld(i))END REPEAT .END PROC +schuelerindruckdatei;PROC setzespaltenbreiten(INT CONST spalte2breite): +setzespaltenbreite(spalte1breite);setzespaltenbreite(spalte2breite); +setzespaltenbreite(spalte3breite);setzespaltenbreite(spalte4breite); +setzespaltenbreite(spalte5breite);END PROC setzespaltenbreiten;PROC +initausgabekopf(TEXT CONST strich):LET jgst="Jgst.",klasse=" Kl.",name= +"Familienname",rufname=" Rufname",geb="Geburts-",abg="Abgangs-",datum= +"datum",grund="Grund",qual=" Qual.";spaltenweise(jgst);spaltenweise(name); +spaltenweise(geb);spaltenweise(abg);spaltenweise(grund);ausgkopf(1):=zeile; +spaltenweise(klasse);spaltenweise(rufname);spaltenweise(datum);spaltenweise( +datum);spaltenweise(qual);ausgkopf(2):=zeile;ausgkopf(3):=strich;END PROC +initausgabekopf;PROC schuelerholen:schuelername:=wert(fnrsufamnames); +schuelerrufname:=wert(fnrsurufnames);schuelernamenszus:=wert( +fnrsunamenszusatzs);schuelerjgst:=wert(fnrsusgrpjgst);schuelerzug:=wert( +fnrsusgrpzugtut);schuelergebdat:=wert(fnrsugebdatums);schuelerabdat:=wert( +fnrsuabgdats);schuelerabgrund:=wert(fnrsuabggrund);schuelerabqual:=wert( +fnrsuabschluss);neueklasse:=schuelerjgst+schuelerzug;klassegeaendert:=klasse +<>neueklasse;klasse:=neueklasse.END PROC schuelerholen;PROC +schueleraufbereiten:LET minus="-";schreibenameabdaten;schreiberufname. +schreibenameabdaten:spaltenweise(aufbschuelerklasse);spaltenweise( +aufbschuelername);spaltenweise(schuelergebdat);spaltenweise(schuelerabdat); +spaltenweise(blank+aufbschuelerabgrund+blank+aufbschuelerabqual);ausgfeld(1) +:=zeile.schreiberufname:ausgfeld(2):=text(aufbrufname,breite). +aufbschuelerklasse:IF klassegeaendertTHEN schuelerjgst+blank+schuelerzugELSE +spalte1breite*blankFI .aufbschuelername:IF schuelernamenszus=niltextTHEN +schuelernameELSE schuelernamenszus+blank+schuelernameFI .aufbschuelerabqual: +IF schuelerabqual=niltextTHEN minusELSE schuelerabqualFI .aufbschuelerabgrund +:IF schuelerabgrund=niltextTHEN minusELSE schuelerabgrundFI .aufbrufname:( +spalte1breite+3)*blank+schuelerrufname.END PROC schueleraufbereiten;END +PACKET abgemlisten; + diff --git a/app/schulis/2.2.1/src/1.listen.adressen b/app/schulis/2.2.1/src/1.listen.adressen new file mode 100644 index 0000000..0a45d7b --- /dev/null +++ b/app/schulis/2.2.1/src/1.listen.adressen @@ -0,0 +1,186 @@ +PACKET adressenlistenDEFINES adrlispezielleteile:LET niltext="",blank=" ", +mittestrich="-",null=0,komma=",",altervolljaehrig=18,uebteil21="Jgst. ", +uebteil22="Klasse ",uebteil23="Tutorenkurs ",uebteil24="alphabetisch", +ueberschriftenzeilen=2,#bestand1="c12 schueler",bestand2= +"c11 akt schuelergruppen",praefix1="c12 jgst",praefix2="c12 sg",# +ausgfeldlaenge=9,AUSGFELD =ROW ausgfeldlaengeTEXT ,adrlieingangsmaske= +"ms liste adressen eingang",adrlianfpos=2,#dnrschueler=2,fnrsufamnames=3, +fnrsurufnames=4,fnrsustatuss=6,fnrsunamenszusatzs=21,fnrsugebnames=22, +fnrsugebdatums=5,fnrsusgrpjgst=7,fnrsusgrpzugtut=8,fnrsuwohntbei=23, +fnrsustrnrs=24,fnrsuplzorts=25,fnrsutelnrs=26,fnrsufamnamee=28,fnrsuvornamee= +29,fnrsunamenszusatzs=30,fnrsustrnre=31,fnrsuplzorte=32,fnrsutelnre=33, +ixsustatjgstzug=255,ixsustatjgst=261,ixstatfamrufgeb=254,stattnachfolgendemI +ndexixsustat=252,#mnrbearbeitetwerden=102,mnrbearbeitetwird=100, +mnrauswahlnichtsinnvoll=56,mnrlistewirdgedruckt=58;INT VAR aktuelleindexnr, +druckzeilenzahl,bildanf,vergldatum,ausgfeldzeile,eingabestatus,zaehler;TEXT +VAR adrliueberschrift,ueberschrift1,ueberschrift2,anfbuchstabe, +neueranfbuchstabe,startjahr,startzug,bearbeitetwerden,bearbeitetwird, +schuelername,schuelervorname,schuelernamenszusatz,schuelergebname,gebdat, +jahrgangsstufe,zug,adressename,adressestrasse,adresseort,adressetelnr, +erzbername,erzbervorname,erzbernamenszusatz,erzberstrasse,erzberort, +erzbertelnr;AUSGFELD VAR ausgfeld;ausgfeld(ausgfeldlaenge):=niltext;TEXT VAR +druckstrich;BOOL VAR einjahrgang,alle,sortalpha,neueklasse;BOOL PROC +multistop:BOOL VAR b:=FALSE ;IF wert(fnrsustatuss)="ls"THEN IF startjahr<> +niltextTHEN IF startzug=niltextTHEN b:=(wert(fnrsusgrpjgst)=startjahr)ELSE b +:=(wert(fnrsusgrpzugtut)=startzugAND wert(fnrsusgrpjgst)=startjahr)FI ELSE b +:=dbstatus=okFI ;FI ;bEND PROC multistop;BOOL PROC multistopsim:BOOL VAR b:= +multistop;setzebestandende(NOT b);bENDPROC multistopsim;PROC +adrlispezielleteile(INT CONST nr):SELECT nrOF CASE 1:adrlidialogvorbereiten +CASE 2:adrlieingabenrichtigCASE 3:adrlilistenvorbereitenCASE 4: +adrlidruckvorbereitenCASE 5:adrliseitedruckenCASE 6: +adrlibildschirmvorbereitenCASE 7:adrliseitezeigenENDSELECT .END PROC +adrlispezielleteile;PROC adrlidialogvorbereiten:adrliueberschrift:=text( +vergleichsknoten);setzeanfangswerte(adrlieingangsmaske,adrlianfpos).END PROC +adrlidialogvorbereiten;PROC adrlieingabenrichtig:LET fnrjgst=2,fnrzug=3, +fnralphasort=4,fnrklassensort=5,fnrausgdrucker=6,fnrausgbild=7;alle:=FALSE ; +einjahrgang:=FALSE ;sortalpha:=FALSE ;wohinausgabepruefen;IF +falschausgefuelltTHEN infeld(eingabestatus);setzeeingabetest(FALSE )ELSE +jahrgangsstufe:=standardmaskenfeld(fnrjgst);zug:=standardmaskenfeld(fnrzug); +wasausgabepruefenFI .wohinausgabepruefen:standardpruefe(5,fnrausgdrucker, +fnrausgbild,null,niltext,eingabestatus).wasausgabepruefen:IF jahrgangsstufe= +niltextTHEN IF zug=niltextTHEN wieausgabepruefen;IF falschausgefuelltTHEN +infeld(eingabestatus);setzeeingabetest(FALSE )ELSE alle:=TRUE ; +wertesetzenfuerweiterebearbeitungFI ELSE meldefehler;infeld(fnrzug); +setzeeingabetest(FALSE )FI ELSE standardpruefe(3,fnrjgst,5,13,niltext, +eingabestatus);IF falschausgefuelltTHEN infeld(eingabestatus); +setzeeingabetest(FALSE )ELSE jahrgangsstufe:=zweistellig(jahrgangsstufe); +einjahrgang:=(zug=niltext);IF einjahrgangTHEN wieausgabepruefen;IF +falschausgefuelltTHEN infeld(eingabestatus);setzeeingabetest(FALSE )ELSE +wertesetzenfuerweiterebearbeitungFI ELSE wertesetzenfuerweiterebearbeitung; +sortalpha:=TRUE FI ;FI ;FI .wieausgabepruefen:standardpruefe(5,fnralphasort, +fnrklassensort,null,niltext,eingabestatus).wertesetzenfuerweiterebearbeitung: +sortalpha:=standardmaskenfeld(fnrklassensort)=niltext;setzeausgabedrucker( +standardmaskenfeld(fnrausgbild)=niltext);setzeeingabetest(TRUE ). +falschausgefuellt:eingabestatus<>0.meldefehler:standardmeldung( +mnrauswahlnichtsinnvoll,niltext).END PROC adrlieingabenrichtig;PROC +adrlilistenvorbereiten:BOOL VAR b:=FALSE ;INT VAR staticfield:=dnrschueler+1; +vergldatum:=vergleichsdatum(altervolljaehrig);startjahr:=jahrgangsstufe; +startzug:=zug;IF sortalphaTHEN IF startjahr<>niltextTHEN IF startzug<>niltext +THEN aktuelleindexnr:=ixsustatjgstzugELSE aktuelleindexnr:=ixsustatjgstFI ; +ELSE staticfield:=fnrsustatuss;#?????#aktuelleindexnr:=ixsustatfamrufgeb# +aktuelleindexnr:=ixsustat#FI ;ELSE IF startjahr=""THEN staticfield:= +fnrsusgrpjgstELSE staticfield:=fnrsusgrpzugtutFI ;aktuelleindexnr:= +ixsustatjgstzugFI ;inittupel(dnrschueler);initobli(2);parsenooffields(34); +setzeidentiwert("");putwert(fnrsusgrpjgst,startjahr);putwert(fnrsusgrpzugtut, +startzug);putwert(fnrsustatuss,"ls");#objektlistestarten(aktuelleindexnr,"", +fnrsustatuss,TRUE ,b);#objektlistestarten(aktuelleindexnr,"",staticfield, +TRUE ,b);setzebestandende(NOT multistopCOR b)END PROC adrlilistenvorbereiten; +PROC adrlibildschirmvorbereiten:LET fnrausganf=2;ueberschriftvorbereitenbild; +standardkopfmaskeaktualisieren(ueberschrift1);bildanf:=fnrausganf;# +setzenderhilfsgroessenfuersblaettern(min(maxblocklaenge,bildblocklaenge), +bildsatzzahl);#setzebildanfangsposition(bildanf).END PROC +adrlibildschirmvorbereiten;PROC ueberschriftvorbereitenbild:LET aufein="", +aufaus=" ";ueberschrift1:=adrliueberschrift;IF NOT alleTHEN ueberschrift1:= +ueberschrift1+komma+blank;IF einjahrgangTHEN ueberschrift1:=ueberschrift1+ +uebteil21+aufein+jahrgangsstufe+aufausELSE IF int(jahrgangsstufe)<11THEN +ueberschrift1:=ueberschrift1+uebteil22ELSE ueberschrift1:=ueberschrift1+ +uebteil23FI ;ueberschrift1:=ueberschrift1+aufein+jahrgangsstufe+blank+zug+ +aufausFI FI ;END PROC ueberschriftvorbereitenbild;PROC adrliseitezeigen: +blaettern(PROC (INT CONST )adressdatenzeigen,aktion,TRUE ,aktuelleindexnr<> +dnrschueler,BOOL PROC multistop)END PROC adrliseitezeigen;PROC +adressdatenzeigen(INT CONST x):TEXT CONST leerzeile:=text(blank,bildbreite); +INT VAR i;adressdatenholen;adressdatenaufbereiten(bildbreite); +ggfleerzeilenfuellen;adressdatenaufbildschirm.ggfleerzeilenfuellen: +ausgfeldzeileINCR 1;FOR iFROM ausgfeldzeileUPTO ausgfeldlaenge-1REP ausgfeld( +i):=leerzeilePER .END PROC adressdatenzeigen;PROC adressdatenaufbildschirm: +INT VAR i;FOR iFROM 1UPTO ausgfeldlaengeREPEAT ausgfeld(i)IN ausgabepos; +erhoeheausgabeposumeinsEND REPEAT .END PROC adressdatenaufbildschirm;PROC +adrlidruckvorbereiten:IF (alleOR einjahrgang)AND NOT sortalphaTHEN zaehler:= +null;neueklasse:=TRUE ELSE anfbuchstabe:=niltextFI ;druckvorbereiten; +variablenfuerdrucksetzen;holemeldungen;inittupel(dnrschueler);putwert( +fnrsusgrpjgst,startjahr);putwert(fnrsusgrpzugtut,startzug);putwert( +fnrsustatuss,"ls");lesenvorbereitendruck(PROC (INT CONST ,BOOL PROC ,INT VAR +)scanforward,BOOL PROC multistopsim);ueberschriftvorbereitendruck; +initdruckkopf(zentriert(ueberschrift1,druckbreite),zentriert(ueberschrift2, +druckbreite)).variablenfuerdrucksetzen:druckzeilenzahl:=drucklaenge( +ueberschriftenzeilen);druckstrich:=druckbreite*mittestrich.holemeldungen: +meldungstext(mnrbearbeitetwird,bearbeitetwird);meldungstext( +mnrbearbeitetwerden,bearbeitetwerden).END PROC adrlidruckvorbereiten;PROC +ueberschriftvorbereitendruck:jahrgangsstufe:=wert(fnrsusgrpjgst);zug:=wert( +fnrsusgrpzugtut);ueberschrift1:=compress(adrliueberschrift);#dr28.03.88#IF +alleTHEN IF sortalphaTHEN ueberschrift2:=uebteil24ELSE klassenueberschriftFI +ELSE IF einjahrgangTHEN IF sortalphaTHEN ueberschrift2:=uebteil21+ +jahrgangsstufe+komma+blank+uebteil24ELSE klassenueberschriftFI ELSE +klassenueberschriftFI FI .klassenueberschrift:IF int(jahrgangsstufe)<11THEN +ueberschrift2:=uebteil22ELSE ueberschrift2:=uebteil23FI ;ueberschrift2:= +ueberschrift2+jahrgangsstufe+blank+zug.END PROC ueberschriftvorbereitendruck; +PROC adrliseitedrucken:adrliueberschriftdrucken;IF (alleOR einjahrgang)AND +NOT sortalphaTHEN seitedrucken(PROC (INT VAR )adressdatendrucken, +druckzeilenzahl,ausgfeldlaenge,PROC bestandendesimulierenbeiklassenwechsel, +BOOL PROC multistopsim);IF neueklasseTHEN simuliertesendezuruecknehmen; +neuelistevorbereitenELSE seitenwechselFI ELSE seitedrucken(PROC (INT VAR ) +adressdatendrucken,druckzeilenzahl,ausgfeldlaenge,BOOL PROC multistopsim); +seitenwechselFI .simuliertesendezuruecknehmen:setzebestandende(FALSE ). +neuelistevorbereiten:meldelistewirdgedruckt;drucknachbereiten; +druckvorbereiten;zaehler:=null;ueberschriftvorbereitendruck;initdruckkopf( +zentriert(ueberschrift1,druckbreite),zentriert(ueberschrift2,druckbreite)). +meldelistewirdgedruckt:standardmeldung(mnrlistewirdgedruckt,"").END PROC +adrliseitedrucken;PROC adrliueberschriftdrucken:druckkopfschreiben.END PROC +adrliueberschriftdrucken;PROC adressdatendrucken(INT VAR zeilenzaehler):LET +markiert="#";adressdatenholen;ggfmeldung;zaehlerINCR 1;adressdatenaufbereiten +(druckbreite);zeilenzaehlerINCR ausgfeldzeile;adressdatenindruckdatei. +ggfmeldung:IF (alleOR einjahrgang)AND NOT sortalphaTHEN ggfmeldungklasseELSE +ggfmeldunganfbuchstabeEND IF .ggfmeldungklasse:IF zaehler=nullTHEN +standardmeldung(bearbeitetwird,jahrgangsstufe+blank+zug+markiert)FI . +ggfmeldunganfbuchstabe:IF anfangsbuchstabegeaendertTHEN meldunganfbuchstabe +END IF .anfangsbuchstabegeaendert:neueranfbuchstabe:=schuelernameSUB 1; +anfbuchstabe<>neueranfbuchstabe.meldunganfbuchstabe:standardmeldung( +bearbeitetwerden,neueranfbuchstabe+markiert);anfbuchstabe:=neueranfbuchstabe. +END PROC adressdatendrucken;PROC adressdatenindruckdatei:INT VAR i;FOR iFROM +1UPTO ausgfeldzeileREP druckzeileschreiben(ausgfeld(i))PER .END PROC +adressdatenindruckdatei;PROC bestandendesimulierenbeiklassenwechsel:IF +bestandendeTHEN neueklasse:=FALSE ELSE nochklassezubearbeiten;IF neueklasse +THEN setzebestandende(TRUE )FI ;FI .nochklassezubearbeiten:neueklasse:=zug<> +wert(fnrsusgrpzugtut);IF alleTHEN neueklasse:=neueklasseOR (int( +jahrgangsstufe)<>int(wert(fnrsusgrpjgst)))FI .END PROC +bestandendesimulierenbeiklassenwechsel;PROC adressdatenholen:schuelername:= +wert(fnrsufamnames);schuelervorname:=wert(fnrsurufnames);schuelernamenszusatz +:=wert(fnrsunamenszusatzs);schuelergebname:=wert(fnrsugebnames);gebdat:=wert( +fnrsugebdatums);jahrgangsstufe:=wert(fnrsusgrpjgst);zug:=wert(fnrsusgrpzugtut +);adressename:=wert(fnrsuwohntbei);adressestrasse:=wert(fnrsustrnrs); +adresseort:=wert(fnrsuplzorts);adressetelnr:=wert(fnrsutelnrs);erzbername:= +wert(fnrsufamnamee);erzbervorname:=wert(fnrsuvornamee);erzbernamenszusatz:= +wert(fnrsunamenszusatze);erzberstrasse:=wert(fnrsustrnre);erzberort:=wert( +fnrsuplzorte);erzbertelnr:=wert(fnrsutelnre)END PROC adressdatenholen;PROC +adressdatenaufbereiten(INT CONST breite):LET prebreite=19,klassetelnrbreite= +21,deutsch="D",namevornametrenner=", ",gebnamepre=", geb. ",gebdatpre= +" Geb.Dat.: ",vollj="(Vollj.)",klassepre="Klasse: ",adressepre= +" Adresse : ",preleer=" ",adressnamepre="bei ", +telnrpre="Tel.: ",erzberpre=" Erz.Ber.: ";INT CONST breiteohnepre:= +breite-prebreite,ortgebdatbreite:=breiteohnepre-klassetelnrbreite; +schreibenamenszeile;schreibegebdatundggfklasse;schreibeschueleradresse; +schreibeggferzberadresse.schreibenamenszeile:ausgfeld(1):=text( +zusammengesetztername,breite).zusammengesetztername:subtext(schuelername+ +namevornametrenner+schuelervorname+blank+schuelernamenszusatz+gebname,1, +breite).gebname:IF schuelergebname=niltextTHEN niltextELSE gebnamepre+ +schuelergebnameEND IF .schreibegebdatundggfklasse:ausgfeld(2):=gebdatpre+ +gebdatundggfklasse.gebdatundggfklasse:IF alleOR einjahrgangTHEN text(gebdat+ +ggfvollj,ortgebdatbreite)+text(klassepre+klasse,klassetelnrbreite)ELSE text( +gebdat+ggfvollj,breiteohnepre)FI .klasse:jahrgangsstufe+blank+zug.ggfvollj: +IF volljaehrig(datum(gebdat))THEN volljELSE niltextEND IF . +schreibeschueleradresse:IF adressename=niltextTHEN ausgfeld(3):=text( +adressepre+adressestrasse,breite);ausgfeldzeile:=4ELSE ausgfeld(3):=text( +adressepre+adressnamepre+adressename,breite);ausgfeld(4):=text(preleer+ +adressestrasse,breite);ausgfeldzeile:=5FI ;ausgfeld(ausgfeldzeile):=preleer+ +ortundggftelefon.ortundggftelefon:IF adressetelnr=niltextTHEN text( +adresseggflandundort,breiteohnepre)ELSE text(adresseggflandundort, +ortgebdatbreite)+text(telnrpre+adressetelnr,klassetelnrbreite)FI . +adresseggflandundort:adresseort.schreibeggferzberadresse:IF erzbername= +niltextTHEN schreibeleerzeileELSE schreibeerzberadresseFI . +schreibeerzberadresse:schreibeerzbername;schreibeggferzberstrort. +schreibeerzbername:ausgfeldzeileINCR 1;ausgfeld(ausgfeldzeile):=text( +erzberpre+ggferzbernamenszusatz+erzbername+namevornametrenner+erzbervorname, +breite).ggferzbernamenszusatz:IF erzbernamenszusatz<>niltextTHEN +erzbernamenszusatz+blankELSE niltextFI .schreibeggferzberstrort:IF ( +erzberstrasse=niltext)AND (erzberort=niltext)THEN schreibeleerzeileELSE +schreibeerzberstrasse;schreibeerzberortundggftelnrFI .schreibeerzberstrasse: +ausgfeldzeileINCR 1;ausgfeld(ausgfeldzeile):=text(preleer+erzberstrasse, +breite).schreibeerzberortundggftelnr:ausgfeldzeileINCR 1;ausgfeld( +ausgfeldzeile):=preleer+erzberortundggftelefon.erzberortundggftelefon:IF +erzbertelnr=niltextTHEN text(erzberggflandundort,breiteohnepre)ELSE text( +erzberggflandundort,ortgebdatbreite)+text(telnrpre+erzbertelnr, +klassetelnrbreite)FI .erzberggflandundort:erzberort.schreibeleerzeile: +ausgfeldzeileINCR 1;ausgfeld(ausgfeldzeile):=text(blank,breite).END PROC +adressdatenaufbereiten;BOOL PROC volljaehrig(INT CONST geburtstag):geburtstag +<=vergldatumEND PROC volljaehrig;END PACKET adressenlisten; + diff --git a/app/schulis/2.2.1/src/1.listen.anherk b/app/schulis/2.2.1/src/1.listen.anherk new file mode 100644 index 0000000..fb9a34e --- /dev/null +++ b/app/schulis/2.2.1/src/1.listen.anherk @@ -0,0 +1,124 @@ +PACKET anherklistenDEFINES anherklispezielleteile:#LET dnrschueler=2, +fnrsufamnames=3,fnrsurufnames=4,fnrsugebdatums=5,fnrsustatuss=6, +fnrsuskennlschule=14,fnrsuklasselschule=15,fnrsunamenszusatzs=21,dnrschulen= +120,fnrschkennung=121,fnrschname=122,fnrschstrnr=124,fnrschplzort=125, +ixsustatschulkenn=253,#LET mnrbearbeitetwirdschule=103,mnrlistewirdgedruckt= +58;TEXT VAR bearbeitetwirdschule:="",listewirdgedruckt:="",startwert:="";LET +niltext="",blank=" ",mittestrich="-",null=0,komma=",",ueberschriftenzeilen=1, +spalte2breite=8,spalte3breite=27,anzspaltentrenner=2,spaltentrenner=":", +ausgkopflaenge=3,ausgfeldlaenge=1,AUSGFELD =ROW ausgfeldlaengeTEXT ,AUSGKOPF +=ROW ausgkopflaengeTEXT ,anherklieingangsmaske="ms liste anherk eingang", +anherklianfpos=2;INT VAR druckzeilenzahl,druckzeilenzahlseite1, +druckzeilenzahlfolgeseiten,spalte1breite,eingabestatus;TEXT VAR # +anherkliueberschrift,#schuelername,schuelerrufname,schuelernamenszus, +schuelergebdat,schulkuerzel,letzteklasse,vordruck,vordruckueberarbeitet;TEXT +VAR druckstrich;AUSGFELD VAR ausgfelddruck;AUSGKOPF VAR ausgkopfdruck;BOOL +VAR jgst5,neueherkschule;FILE VAR textanschr;PROC anherklispezielleteile(INT +CONST nr):SELECT nrOF CASE 1:anherklidialogvorbereitenCASE 2: +anherklieingabenrichtigCASE 3:anherklilistenvorbereitenCASE 4: +anherklidruckvorbereitenCASE 5:anherkliseitedruckenENDSELECT .END PROC +anherklispezielleteile;PROC anherklidialogvorbereiten:setzeanfangswerte( +anherklieingangsmaske,anherklianfpos).END PROC anherklidialogvorbereiten; +PROC anherklieingabenrichtig:LET fnrjgst5=2,fnrjgst11=3;standardpruefe(5, +fnrjgst5,fnrjgst11,null,niltext,eingabestatus);IF eingabestatus<>0THEN infeld +(eingabestatus);setzeeingabetest(FALSE )ELSE jgst5:=(standardmaskenfeld( +fnrjgst11)=niltext);setzeausgabedrucker(TRUE );setzeeingabetest(TRUE )FI . +END PROC anherklieingabenrichtig;PROC anherklilistenvorbereiten:BOOL VAR b:= +FALSE ;IF jgst5THEN startwert:="n05"ELSE startwert:="n11"FI ;meldungstext( +mnrbearbeitetwirdschule,bearbeitetwirdschule);meldungstext( +mnrlistewirdgedruckt,listewirdgedruckt);inittupel(dnrschueler); +parsenooffields(21);setzeidentiwert("");putwert(fnrsustatuss,startwert); +putwert(fnrsuskennlschule," ");objektlistestarten(ixsustatschulkenn,"",# +fnrsustatuss#dnrschueler+1,TRUE ,b);setzebestandende(b)END PROC +anherklilistenvorbereiten;PROC anherklidruckvorbereiten:LET vordr1= +"vordruck fuer anschreiben an herkunftsschulen fuer jgst 5",vordr2= +"vordruck fuer anschreiben an herkunftsschulen fuer jgst 11",vordrueberarb= +"vordruck ueberarbeitet",manager="anschreiben server";neueherkschule:=TRUE ; +druckvorbereiten;festenanschreibentextholen;variablenfuerdrucksetzen; +inittupel(dnrschueler);putwert(fnrsustatuss,startwert);putwert( +fnrsuskennlschule," ");lesenvorbereitendruck(PROC (INT CONST ,BOOL PROC ,INT +VAR )scanforward,BOOL PROC multistopsim);initdruckkopf;initspalten; +initausgabekopfdruck.festenanschreibentextholen:IF jgst5THEN vordruck:=vordr1 +ELSE vordruck:=vordr2FI ;vordruckueberarbeitet:=vordrueberarb;forget(vordruck +,quiet);forget(vordruckueberarbeitet,quiet);fetch(vordruck,/manager); +briefalternative(vordruck,vordruckueberarbeitet).variablenfuerdrucksetzen: +druckstrich:=druckbreite*mittestrich;spalte1breite:=druckbreite- +anzspaltentrenner-spalte2breite-spalte3breite;druckzeilenzahlseite1:= +drucklaenge(ueberschriftenzeilen)-ausgkopflaenge;druckzeilenzahlfolgeseiten:= +drucklaenge-ausgkopflaenge.END PROC anherklidruckvorbereiten;PROC +initausgabekopfdruck:LET name="Name",geb="Geburts-",dat="datum",letzte= +"letzte:",klasse="Klasse:",bedingung="Bed. 2. Fremdsprache",erfuellt= +"erfüllt für";hilfsfeldervorbelegen;spaltenweise(niltext);spaltenweise(geb); +IF jgst5THEN spaltenweise(letzte)ELSE spaltenweise(letzte+bedingung)FI ; +ausgkopfdruck(1):=zeile;spaltenweise(name);spaltenweise(dat);IF jgst5THEN +spaltenweise(klasse)ELSE spaltenweise(klasse+erfuellt)FI ;ausgkopfdruck(2):= +zeile;ausgkopfdruck(3):=druckstrich.hilfsfeldervorbelegen:setzespaltentrenner +(spaltentrenner);setzespaltenbreite(spalte1breite);setzespaltenbreite( +spalte2breite);setzespaltenbreite(spalte3breite).END PROC +initausgabekopfdruck;BOOL PROC multistopsim:BOOL VAR b;IF jgst5THEN b:=wert( +fnrsustatuss)="n05"ELSE b:=wert(fnrsustatuss)="n11"FI ;setzebestandende(NOT b +);bENDPROC multistopsim;PROC anherkliseitedrucken:anherkliueberschriftdrucken +;seitedrucken(PROC (INT VAR )schuelerdatendrucken,druckzeilenzahl, +ausgfeldlaenge,PROC bestandendesimulierenbeischulwechsel,BOOL PROC +multistopsim);IF neueherkschuleTHEN simuliertesendezuruecknehmen; +neuelistevorbereitenELSE seitenwechselFI .simuliertesendezuruecknehmen: +setzebestandende(FALSE ).neuelistevorbereiten:meldelistewirdgedruckt; +drucknachbereiten;druckvorbereiten;initdruckkopf.meldelistewirdgedruckt: +standardmeldung(listewirdgedruckt,"").END PROC anherkliseitedrucken;PROC +anherkliueberschriftdrucken:LET anzleerzeilen=3,markiert="#";INT VAR i;IF +neueherkschuleTHEN zwischenmeldung;druckzeilenzahl:=druckzeilenzahlseite1; +druckkopfschreiben;anschreibenschreibenELSE druckzeilenzahl:= +druckzeilenzahlfolgeseitenFI ;FOR iFROM 1UPTO ausgkopflaengeREPEAT +druckzeileschreiben(ausgkopfdruck(i))END REPEAT .zwischenmeldung: +standardmeldung(bearbeitetwirdschule,wert(fnrsuskennlschule)+markiert). +anschreibenschreiben:#ROW 3TEXT VAR herkschuldaten,merker;##dbwertemerken;# +adresseherkschuleholen;adresseherkschuleschreiben;festentextschreiben; +unterschriftschreiben;#dbwertezurueckholen.#.#dbwertemerken:FOR iFROM 1UPTO 3 +REP merker(i):=dbwert(i)PER .#adresseherkschuleholen:putwert(fnrschkennung, +wert(fnrsuskennlschule));search(dnrschulen,TRUE );IF NOT gefundenTHEN +inittupel(dnrschulen)FI .gefunden:dbstatus=ok.adresseherkschuleschreiben:LET +an="An",zeilenzahladresse=7;ausgfelddruck(1):=text(an,druckbreite); +druckzeileschreiben(ausgfelddruck(1));drucke(text(wert(fnrschname), +druckbreite));drucke(text(wert(fnrschstrnr),druckbreite));drucke(text(wert( +fnrschplzort),druckbreite));#FOR iFROM 1UPTO 3REP ausgfelddruck(1):=text( +herkschuldaten(i),druckbreite);druckzeileschreiben(ausgfelddruck(1))PER ;# +FOR iFROM 1UPTO anzleerzeilenREP ausgfelddruck(1):=text(niltext,druckbreite); +druckzeileschreiben(ausgfelddruck(1))PER ;druckzeilenzahl:=druckzeilenzahl- +zeilenzahladresse.festentextschreiben:textanschr:=sequentialfile(input, +vordruckueberarbeitet);WHILE NOT eof(textanschr)REP getline(textanschr, +ausgfelddruck(1));druckzeileschreiben(ausgfelddruck(1));druckzeilenzahlDECR 1 +PER ;FOR iFROM 1UPTO anzleerzeilenREP ausgfelddruck(1):=text(niltext, +druckbreite);druckzeileschreiben(ausgfelddruck(1));druckzeilenzahlDECR 1PER . +unterschriftschreiben:LET schluessel="Schulleiter",klammer1="(",klammer2=")", +anzblank=5;TEXT VAR schulleiter;schulleiter:=schulkenndatum("Schulleiter"); +ausgfelddruck(1):=text(varanzblank*blank+klammer1+schulleiter+klammer2, +druckbreite);druckzeileschreiben(ausgfelddruck(1));druckzeilenzahlDECR 1; +ausgfelddruck(1):=text(anzblank*blank+schluessel,druckbreite); +druckzeileschreiben(ausgfelddruck(1));druckzeilenzahlDECR 1;FOR iFROM 1UPTO +anzleerzeilenREP ausgfelddruck(1):=text(niltext,druckbreite); +druckzeileschreiben(ausgfelddruck(1));druckzeilenzahlDECR 1PER .varanzblank: +anzblank-((length(schulleiter)+2-length(schluessel))DIV 2).# +dbwertezurueckholen:FOR iFROM 1UPTO 3REP dbwert(merker(i),i)PER .#END PROC +anherkliueberschriftdrucken;PROC drucke(TEXT CONST drucktext):ausgfelddruck(1 +):=drucktext;druckzeileschreiben(ausgfelddruck(1))ENDPROC drucke;PROC +schuelerdatendrucken(INT VAR zeilenzaehler):schuelerdatenholen; +schuelerdatenaufbereiten;zeilenzaehlerINCR ausgfeldlaenge; +schuelerdatenindruckdatei.END PROC schuelerdatendrucken;PROC +schuelerdatenholen:schuelername:=wert(fnrsufamnames);schuelerrufname:=wert( +fnrsurufnames);schuelernamenszus:=wert(fnrsunamenszusatzs);schuelergebdat:= +wert(fnrsugebdatums);schulkuerzel:=wert(fnrsuskennlschule);letzteklasse:=wert +(fnrsuklasselschule).END PROC schuelerdatenholen;PROC +schuelerdatenaufbereiten:LET restjgst5=" :",restjgst11=" : _________"; +schreibenamegebdatletzteklasse.schreibenamegebdatletzteklasse:spaltenweise( +schuelernameaufber);spaltenweise(schuelergebdat);IF jgst5THEN spaltenweise( +blank+letzteklasseaufber+restjgst5)ELSE spaltenweise(blank+letzteklasseaufber ++restjgst11)FI ;ausgfelddruck(1):=zeile.schuelernameaufber:schuelername+komma ++blank+schuelerrufname+blank+schuelernamenszus.letzteklasseaufber:IF +letzteklasse=niltextTHEN 3*blankELSE ((3-length(letzteklasse))*blank)+ +letzteklasseFI .END PROC schuelerdatenaufbereiten;PROC +schuelerdatenindruckdatei:druckzeileschreiben(ausgfelddruck(1)).END PROC +schuelerdatenindruckdatei;PROC bestandendesimulierenbeischulwechsel:IF +bestandendeTHEN neueherkschule:=FALSE ELSE neueherkschule:=schulkuerzel<>wert +(fnrsuskennlschule);IF neueherkschuleTHEN setzebestandende(TRUE )FI ;FI .END +PROC bestandendesimulierenbeischulwechsel;END PACKET anherklisten; + diff --git a/app/schulis/2.2.1/src/1.listen.gebu b/app/schulis/2.2.1/src/1.listen.gebu new file mode 100644 index 0000000..a025331 --- /dev/null +++ b/app/schulis/2.2.1/src/1.listen.gebu @@ -0,0 +1,125 @@ +PACKET geburtslistenDEFINES gebulispezielleteile:LET niltext="",blank=" ", +mittestrich="-",null=0,komma=",",ueberschriftenzeilen=2,klas="Klasse",name= +"Name, Rufname",gebtag="Geburtstag",spalte1breite=7,spalte3breite=12, +anzspaltentrenner=2,ausgkopflaenge=2,ausgfeldlaenge=1,AUSGFELD =ROW +ausgfeldlaengeTEXT ,AUSGKOPF =ROW ausgkopflaengeTEXT ,gebulieingangsmaske= +"ms liste gebjahr eingang",gebulianfpos=2,mnrbearbeitetwird=100;INT CONST +spalte2bildbreite:=bildbreite-anzspaltentrenner-spalte1breite-spalte3breite; +INT VAR spalte2druckbreite,druckzeilenzahl,bildanf,eingabestatus, +aktuelleindexnr;TEXT VAR gebjahreingang,schuelername,schuelerrufname, +schuelernamenszus,schuelergebdat,klasse,alteklasse,druckstrich,bearbeitetwird +,startjahr,startgeschl;TEXT CONST bildstrich:=bildbreite*mittestrich; +AUSGFELD VAR ausgfeld;AUSGKOPF VAR ausgkopf;BOOL VAR weibl,maennl, +ersteraufbildschirm,klassegeaendert:=FALSE ;#DBMASKE VAR sortiertnachgebjahr, +sortiertnachgebjahrgeschl,sortiertnachklassename;#BOOL PROC multistopstatus: +BOOL VAR b:=wert(fnrsustatuss)="ls";setzebestandende(NOT b);bENDPROC +multistopstatus;BOOL PROC multistopdrucken:BOOL VAR b:=multistopmitdbstatus( +FALSE );setzebestandende(NOT b);bENDPROC multistopdrucken;BOOL PROC +multistopmitdbstatusdrucken:BOOL VAR b:=multistopmitdbstatus(TRUE ); +setzebestandende(NOT b);bENDPROC multistopmitdbstatusdrucken;BOOL PROC +multistop:multistopmitdbstatus(FALSE )ENDPROC multistop;BOOL PROC +multistopmitdbstatus:multistopmitdbstatus(TRUE )ENDPROC multistopmitdbstatus; +BOOL PROC multistopmitdbstatus(BOOL CONST mitdbstatus):BOOL VAR b:=FALSE ;IF +wert(fnrsustatuss)="ls"THEN IF startgeschl<>""THEN IF wert(fnrsugeschlechts)= +startgeschlTHEN b:=(subtext(wert(fnrsugebdatums),7,8)=gebjahreingang)ELSE b:= +FALSE FI ELSE b:=(subtext(wert(fnrsugebdatums),7,8)=gebjahreingang);IF +mitdbstatusTHEN b:=bCAND (dbstatus=ok)FI FI ;FI ;bEND PROC +multistopmitdbstatus;PROC gebulispezielleteile(INT CONST nr):SELECT nrOF +CASE 1:gebulidialogvorbereitenCASE 2:gebulieingabenrichtigCASE 3: +gebulilistenvorbereitenCASE 4:gebulidruckvorbereitenCASE 5:gebuliseitedrucken +CASE 6:gebulibildschirmvorbereitenCASE 7:gebuliseitezeigenENDSELECT .END +PROC gebulispezielleteile;PROC gebulidialogvorbereiten:setzeanfangswerte( +gebulieingangsmaske,gebulianfpos)END PROC gebulidialogvorbereiten;PROC +gebulieingabenrichtig:LET fnrgebjahr=2,fnrmaennlich=3,fnrweiblich=4, +fnrausgdrucker=5,fnrausgbild=6;standardpruefe(2,fnrgebjahr,null,null,niltext, +eingabestatus);IF eingabestatus<>0THEN infeld(eingabestatus);setzeeingabetest +(FALSE )ELSE waspruefen;wohinpruefen;IF eingabestatus<>0THEN infeld( +eingabestatus);setzeeingabetest(FALSE )ELSE setzegeburtsjahr; +setzeausgabedrucker(standardmaskenfeld(fnrausgbild)=niltext);setzeeingabetest +(TRUE )FI FI .waspruefen:weibl:=(standardmaskenfeld(fnrmaennlich)=niltext) +AND (standardmaskenfeld(fnrweiblich)<>niltext);maennl:=(standardmaskenfeld( +fnrweiblich)=niltext)AND (standardmaskenfeld(fnrmaennlich)<>niltext). +wohinpruefen:standardpruefe(5,fnrausgdrucker,fnrausgbild,null,niltext, +eingabestatus).setzegeburtsjahr:gebjahreingang:=standardmaskenfeld(fnrgebjahr +);IF int(gebjahreingang)<10THEN gebjahreingang:=text(null)+text(int( +gebjahreingang))FI .END PROC gebulieingabenrichtig;PROC +gebulilistenvorbereiten:#bestanderstellen(PROC +bestandgeburtsjahrgaengeerstellen).#BOOL VAR b:=FALSE ;startjahr:="01.01."+ +gebjahreingang;setzescanendewert("01.01."+text(int(gebjahreingang)+1)); +setzescanstartwert(startjahr);IF weiblTHEN startgeschl:="w";ELIF maennlTHEN +startgeschl:="m";ELSE startgeschl:="";FI ;IF startgeschl=""THEN +aktuelleindexnr:=ixsustatgebELSE aktuelleindexnr:=ixsustatgeschlgeb;FI ; +inittupel(dnrschueler);initobli(14);parsenooffields(19);setzeidentiwert(""); +putdatumwert(fnrsugebdatums,startjahr);putwert(fnrsugeschlechts,startgeschl); +putwert(fnrsustatuss,"ls");dbstatus(ok);objektlistestarten(aktuelleindexnr,"" +,fnrsugebdatums,TRUE ,b);setzebestandende(NOT multistopmitdbstatus)END PROC +gebulilistenvorbereiten;PROC gebulibildschirmvorbereiten:LET fnrausganf=2, +gebuliueberschriftneu="Schülerliste Geburtsjahrgang 19";INT VAR i; +standardkopfmaskeaktualisieren(gebuliueberschriftneu+gebjahreingang); +initspalten;setzespaltenbreite(spalte1breite);setzespaltenbreite( +spalte2bildbreite);setzespaltenbreite(spalte3breite);initausgabekopf( +bildstrich);bildanf:=fnrausganf;FOR iFROM 1UPTO ausgkopflaengeREPEAT ausgkopf +(i)IN bildanf;bildanfINCR 1END REPEAT ;klasse:=niltext;# +setzenderhilfsgroessenfuersblaettern(min(bildblocklaenge,maxblocklaenge), +bildsatzzahl);#setzebildanfangsposition(bildanf).END PROC +gebulibildschirmvorbereiten;PROC gebuliseitezeigen:ersteraufbildschirm:=TRUE +;blaettern(PROC (INT CONST )schuelerzeigen,aktion,TRUE ,TRUE ,BOOL PROC +multistop).END PROC gebuliseitezeigen;PROC schuelerzeigen(INT CONST x): +schuelerholen1;schuelerholen2;IF ersteraufbildschirmTHEN klassegeaendert:= +TRUE ;ersteraufbildschirm:=FALSE FI ;schueleraufbereiten; +schueleraufbildschirm.END PROC schuelerzeigen;PROC schueleraufbildschirm:INT +VAR i;FOR iFROM 1UPTO ausgfeldlaengeREPEAT ausgfeld(i)IN ausgabepos; +erhoeheausgabeposumeinsEND REPEAT .END PROC schueleraufbildschirm;PROC +gebulidruckvorbereiten:LET uebteil1="Liste der im Jahr 19",uebteil2= +" geborenen ",uebteil31="weiblichen ",uebteil32="männlichen ",uebteil4= +"Schüler";TEXT VAR ueberschrift;klasse:=niltext;druckvorbereiten; +variablenfuerdrucksetzen;ueberschriftvorbereitendruck;initdruckkopf( +ueberschrift);initspalten;setzespaltenbreite(spalte1breite); +setzespaltenbreite(spalte2druckbreite);setzespaltenbreite(spalte3breite); +initausgabekopf(druckstrich);holemeldungen;#putwert(dateinr(primdatid( +aktuelleindexnr))+1,"");putwert(fnrsugebdatums,"01.01."+gebjahreingang); +dbstatus(ok);#inittupel(dnrschueler);putwert(fnrsustatuss,"ls"); +aktuelleindexnr:=ixsustatjgstzug;BOOL VAR b;objektlistestarten( +aktuelleindexnr,"",fnrsusgrpzugtut,TRUE ,b);lesenvorbereitendruck(PROC (INT +CONST ,BOOL PROC ,INT VAR )scanforward,#BOOL PROC multistopmitdbstatusdrucken +#BOOL PROC multistopstatus).variablenfuerdrucksetzen:druckstrich:=druckbreite +*mittestrich;spalte2druckbreite:=druckbreite-anzspaltentrenner-spalte1breite- +spalte3breite;druckzeilenzahl:=drucklaenge(ueberschriftenzeilen)- +ausgkopflaenge.ueberschriftvorbereitendruck:ueberschrift:=uebteil1+ +gebjahreingang+uebteil2;IF weiblTHEN ueberschrift:=ueberschrift+uebteil31 +ELSE IF maennlTHEN ueberschrift:=ueberschrift+uebteil32FI ;FI ;ueberschrift:= +ueberschrift+uebteil4.holemeldungen:meldungstext(mnrbearbeitetwird, +bearbeitetwird).END PROC gebulidruckvorbereiten;PROC gebuliseitedrucken: +gebuliueberschriftdrucken;seitedrucken(PROC (INT VAR )schuelerdrucken, +druckzeilenzahl,ausgfeldlaenge,#BOOL PROC multistopdrucken#BOOL PROC +multistopstatus);seitenwechsel.END PROC gebuliseitedrucken;PROC +gebuliueberschriftdrucken:INT VAR i;druckkopfschreiben;FOR iFROM 1UPTO +ausgkopflaengeREPEAT druckzeileschreiben(ausgkopf(i))END REPEAT .END PROC +gebuliueberschriftdrucken;PROC schuelerdrucken(INT VAR zeilenzaehler):LET +markiert="#";schuelerholen1;evtleave;schuelerholen2;ggflmeldungklasse;IF +zeilenzaehler=nullTHEN klassegeaendert:=TRUE FI ;IF klassegeaendertTHEN +leerzeileindruckdateiFI ;schueleraufbereiten;zeilenzaehlerINCR ausgfeldlaenge +;schuelerindruckdatei.evtleave:IF jahrstimmtnichtCOR geschlechtstimmtnicht +THEN LEAVE schuelerdruckenFI .jahrstimmtnicht:subtext(wert(fnrsugebdatums),7, +8)<>gebjahreingang.geschlechtstimmtnicht:startgeschl<>""CAND wert( +fnrsugeschlechts)<>startgeschl.ggflmeldungklasse:IF klassegeaendertTHEN +meldungklasseFI .meldungklasse:standardmeldung(bearbeitetwird,klasse+markiert +).leerzeileindruckdatei:ausgfeld(1):=text(blank,druckbreite); +druckzeileschreiben(ausgfeld(1));zeilenzaehlerINCR 1.END PROC schuelerdrucken +;PROC schuelerindruckdatei:INT VAR i;FOR iFROM 1UPTO ausgfeldlaengeREPEAT +druckzeileschreiben(ausgfeld(i))END REPEAT .END PROC schuelerindruckdatei; +PROC initausgabekopf(TEXT CONST strich):spaltenweise(klas);spaltenweise(name) +;spaltenweise(gebtag);ausgkopf(1):=zeile;ausgkopf(2):=strich;END PROC +initausgabekopf;PROC schuelerholen1:schuelergebdat:=wert(fnrsugebdatums); +schuelername:=wert(fnrsufamnames);schuelerrufname:=wert(fnrsurufnames); +schuelernamenszus:=wert(fnrsunamenszusatzs);#alteklasse:=klasse;klasse:=wert( +fnrsusgrpjgst)+blank+wert(fnrsusgrpzugtut);klassegeaendert:=alteklasse<> +klasse.#END PROC schuelerholen1;PROC schuelerholen2:alteklasse:=klasse;klasse +:=wert(fnrsusgrpjgst)+blank+wert(fnrsusgrpzugtut);klassegeaendert:=alteklasse +<>klasse.END PROC schuelerholen2;PROC schueleraufbereiten: +schreibeklassenamegebdat.schreibeklassenamegebdat:IF klassegeaendertTHEN +spaltenweise(klasse)ELSE spaltenweise(blank)FI ;spaltenweise( +schuelernameaufber);spaltenweise(schuelergebdat);ausgfeld(1):=zeile. +schuelernameaufber:schuelername+komma+blank+schuelerrufname+blank+ +schuelernamenszus.END PROC schueleraufbereiten;END PACKET geburtslisten; + diff --git a/app/schulis/2.2.1/src/1.listen.gesamt b/app/schulis/2.2.1/src/1.listen.gesamt new file mode 100644 index 0000000..2ec7ee7 --- /dev/null +++ b/app/schulis/2.2.1/src/1.listen.gesamt @@ -0,0 +1,106 @@ +PACKET gesamtlisteDEFINES geslispezielleteile:#LET dnrschueler=2, +ixsustatfamrufgeb=254,stattnachfolgendemI ndexixsustat=252,fnrsufamnames=3, +fnrsurufnames=4,fnrsustatuss=6,fnrsunamenszusatzs=21,fnrsugebdatums=5, +fnrsuabgdats=16,fnrsusgrpjgst=7,fnrsusgrpzugtut=8;#LET niltext="",nildatum= +"01.01.00",blank=" ",mittestrich="-",null=0,komma=",",kleina="a",stern="*", +ueberschriftenzeilen=1,altervolljaehrig=18,spalte2breite=10,spalte3breite=9, +anzspaltentrenner=2,spaltentrenner=":",ausgkopflaengebild=2, +ausgkopflaengedruck=6,ausgfeldlaenge=1,AUSGKOPFBILD =ROW ausgkopflaengebild +TEXT ,AUSGKOPFDRUCK =ROW ausgkopflaengedruckTEXT ,AUSGFELD =ROW +ausgfeldlaengeTEXT ,geslieingangsmaske="mu liste einfach eingang",geslianfpos +=2,nname="Name, Rufname",gebdat=" Geb.Dat.",klasse="Jgst./Kl.";INT CONST +spalte1bildbreite:=bildbreite-anzspaltentrenner-spalte2breite-spalte3breite; +INT VAR spalte1druckbreite,druckzeilenzahl,bildanf,vergldatum,eingabestatus; +TEXT VAR gesliueberschrift,schuelername,schuelerrufname,schuelernamenszus, +schuelergebdat,schuelerabdat,schuelernameaufber,gebdataufber,klasseaufber, +jahrgang,zug,anfbuchstabe,neueranfbuchstabe;TEXT VAR druckstrich;TEXT CONST +bildstrich:=bildbreite*mittestrich;AUSGFELD VAR ausgfeld;AUSGKOPFDRUCK VAR +ausgkopfdruck;AUSGKOPFBILD VAR ausgkopfbild;PROC geslispezielleteile(INT +CONST nr):SELECT nrOF CASE 1:geslidialogvorbereitenCASE 2: +geslieingabenrichtigCASE 3:geslilistenvorbereitenCASE 4:geslidruckvorbereiten +CASE 5:gesliseitedruckenCASE 6:geslibildschirmvorbereitenCASE 7: +gesliseitezeigenENDSELECT .END PROC geslispezielleteile;PROC +geslidialogvorbereiten:gesliueberschrift:=text(vergleichsknoten); +setzeanfangswerte(geslieingangsmaske,geslianfpos).END PROC +geslidialogvorbereiten;PROC geslieingabenrichtig:LET fnrausgdrucker=2, +fnrausgbild=3;standardpruefe(5,fnrausgdrucker,fnrausgbild,null,niltext, +eingabestatus);IF eingabestatus<>0THEN infeld(eingabestatus);setzeeingabetest +(FALSE )ELSE setzeausgabedrucker(standardmaskenfeld(fnrausgbild)=niltext); +setzeeingabetest(TRUE )FI .END PROC geslieingabenrichtig;PROC +geslilistenvorbereiten:BOOL VAR b;setzespaltentrenner(spaltentrenner); +vergldatum:=vergleichsdatum(altervolljaehrig);inittupel(dnrschueler);initobli +(17);parsenooffields(21);setzeidentiwert("");putwert(fnrsustatuss,"ls"); +objektlistestarten(ixsustatfamrufgeb,"",fnrsufamnames,TRUE ,b); +setzebestandende(NOT multistopCOR b)END PROC geslilistenvorbereiten;BOOL +PROC multistop:wert(fnrsustatuss)="ls"ENDPROC multistop;BOOL PROC +multistopdruck:BOOL VAR b:=multistop;setzebestandende(NOT b);bENDPROC +multistopdruck;PROC geslibildschirmvorbereiten:LET fnrausganf=2; +standardkopfmaskeaktualisieren(gesliueberschrift);initspalten; +setzespaltenbreite(spalte1bildbreite);setzespaltenbreite(spalte2breite); +setzespaltenbreite(spalte3breite);initausgabekopfbild;bildanf:=fnrausganf; +INT VAR i;FOR iFROM 1UPTO ausgkopflaengebildREPEAT ausgkopfbild(i)IN bildanf; +bildanfINCR 1END REPEAT ;setzebildanfangsposition(bildanf).END PROC +geslibildschirmvorbereiten;PROC initausgabekopfbild:spaltenweise(nname); +spaltenweise(gebdat);spaltenweise(klasse);ausgkopfbild(1):=zeile;ausgkopfbild +(2):=bildstrich;END PROC initausgabekopfbild;PROC gesliseitezeigen:blaettern( +PROC (INT CONST )schuelerzeigen,aktion,TRUE ,TRUE ,BOOL PROC multistop)END +PROC gesliseitezeigen;BOOL PROC dummystop:#dbstatus<>ok#TRUE ENDPROC +dummystop;PROC schuelerzeigen(INT CONST x):schuelerholen;schueleraufbereiten; +schueleraufbildschirm;END PROC schuelerzeigen;PROC schueleraufbildschirm:INT +VAR i;FOR iFROM 1UPTO ausgfeldlaengeREPEAT ausgfeld(i)IN ausgabepos; +erhoeheausgabeposumeinsEND REPEAT .END PROC schueleraufbildschirm;PROC +geslidruckvorbereiten:anfbuchstabe:=niltext;druckvorbereiten; +variablenfuerdrucksetzen;inittupel(dnrschueler);putwert(fnrsustatuss,"ls"); +lesenvorbereitendruck(PROC (INT CONST ,BOOL PROC ,INT VAR )scanforward,BOOL +PROC multistopdruck);initdruckkopf(zentriert(gesliueberschrift,druckbreite)); +initspalten;setzespaltenbreite(spalte1druckbreite);setzespaltenbreite( +spalte2breite);setzespaltenbreite(spalte3breite);initausgabekopfdruck. +variablenfuerdrucksetzen:druckstrich:=druckbreite*mittestrich; +spalte1druckbreite:=druckbreite-anzspaltentrenner-spalte2breite-spalte3breite +;druckzeilenzahl:=drucklaenge(ueberschriftenzeilen)-ausgkopflaengedruck.END +PROC geslidruckvorbereiten;PROC initausgabekopfdruck:LET kommentar1= +"Die abgemeldeten Schüler sind mit einem a vor Jgst./",kommentar2= +"Kl. markiert,",kommentar3="die volljährigen Schüler mit einem * vor dem ", +kommentar4="Geburtsdatum.";ausgkopfdruck(1):=text(kommentar1+kommentar2, +druckbreite);ausgkopfdruck(2):=text(kommentar3+kommentar4,druckbreite); +ausgkopfdruck(3):=text(niltext,druckbreite);ausgkopfdruck(4):=text(niltext, +druckbreite);spaltenweise(nname);spaltenweise(gebdat);spaltenweise(klasse); +ausgkopfdruck(5):=zeile;ausgkopfdruck(6):=druckstrich;END PROC +initausgabekopfdruck;PROC gesliseitedrucken:gesliueberschriftdrucken; +seitedrucken(PROC (INT VAR )schuelerdrucken,druckzeilenzahl,ausgfeldlaenge, +BOOL PROC multistopdruck);seitenwechsel.END PROC gesliseitedrucken;PROC +gesliueberschriftdrucken:druckkopfschreiben;INT VAR i;FOR iFROM 1UPTO +ausgkopflaengedruckREPEAT druckzeileschreiben(ausgkopfdruck[i])END REPEAT . +END PROC gesliueberschriftdrucken;PROC schuelerdrucken(INT VAR zeilenzaehler) +:LET bearbeitetwerden=102,markiert="#";schuelerholen;ggflmeldunganfbuchstabe; +schueleraufbereiten;zeilenzaehlerINCR ausgfeldlaenge;schuelerindruckdatei. +ggflmeldunganfbuchstabe:IF anfbuchstabegeaendertTHEN meldunganfbuchstabeFI . +anfbuchstabegeaendert:neueranfbuchstabe:=schuelernameSUB 1;anfbuchstabe<> +neueranfbuchstabe.meldunganfbuchstabe:standardmeldung(bearbeitetwerden, +neueranfbuchstabe+markiert);anfbuchstabe:=neueranfbuchstabe.END PROC +schuelerdrucken;PROC schuelerindruckdatei:druckzeileschreiben(ausgfeld(1)). +END PROC schuelerindruckdatei;#PROC schuelerbestanderstellen(TEXT VAR aktbest +,DBMASKE VAR nameklassegebdat):setzemaske(nameklassegebdat, +"t c12 familienname/"+"t c12 rufname/"+"t c12 namenszusaetze(1)/"+ +"i c12 geburtsdatum/"+"i c12 abgangsdatum/"+"t c12 aktuelle schuelergruppe"); +aktbest:=bestand.END PROC schuelerbestanderstellen;#PROC schueleraufbereiten: +schuelervorbereiten;schreibenamegebdatklasse.schreibenamegebdatklasse: +ausgfeld(1):=zeile.END PROC schueleraufbereiten;PROC schuelervorbereiten: +schuelernamevorbereiten;gebdatvorbereiten;klassevorbereiten;zeilefuellen. +schuelernamevorbereiten:schuelernameaufber:=niltext;IF schuelernamenszus<> +niltextTHEN schuelernameaufber:=schuelernamenszus+blankFI ;schuelernameaufber +:=schuelernameaufber+schuelername+komma+blank+schuelerrufname. +gebdatvorbereiten:IF (schuelergebdat<>niltext)THEN IF volljaehrig(datum( +schuelergebdat))THEN gebdataufber:=sternELSE gebdataufber:=blankFI ; +gebdataufber:=gebdataufber+blank+schuelergebdatELSE gebdataufber:=niltextFI . +klassevorbereiten:IF (schuelerabdat<>nildatum)THEN klasseaufber:=kleinaELSE +klasseaufber:=blankFI ;klasseaufber:=klasseaufber+blank+jahrgang+blank+zug. +zeilefuellen:spaltenweise(schuelernameaufber);spaltenweise(gebdataufber); +spaltenweise(klasseaufber).END PROC schuelervorbereiten;BOOL PROC volljaehrig +(INT CONST geburtstag):geburtstag<=vergldatumEND PROC volljaehrig;PROC +schuelerholen:schuelername:=wert(fnrsufamnames);schuelerrufname:=wert( +fnrsurufnames);schuelernamenszus:=wert(fnrsunamenszusatzs);schuelergebdat:= +wert(fnrsugebdatums);schuelerabdat:=wert(fnrsuabgdats);jahrgang:=wert( +fnrsusgrpjgst);zug:=wert(fnrsusgrpzugtut);END PROC schuelerholen;END PACKET +gesamtliste; + diff --git a/app/schulis/2.2.1/src/1.listen.klassen b/app/schulis/2.2.1/src/1.listen.klassen new file mode 100644 index 0000000..7b4d39b --- /dev/null +++ b/app/schulis/2.2.1/src/1.listen.klassen @@ -0,0 +1,157 @@ +PACKET klassenlistenDEFINES klalispezielleteile:LET niltext="",blank=" ", +mittestrich="-",null=0,komma=",",stern="*",ueb1teil1="Klassenliste",ueb1teil2 +=" für Klasse ",ueb1teil3="Klassenlehrer: ",ueb2teil1="Tutorenkursliste", +ueb2teil21=" für Jahrgangsstufe ",ueb2teil22=" für den Kurs ",ueb2teil3= +"Tutor: ",ueb3="n der Jahrgangsstufe ",ueberschriftenzeilen=2, +spalte1druckbreite=3,spalte2bildbreite=7,anzspaltentrenner=1,ausgkopflaenge=2 +,ausgfeldlaenge=1,AUSGFELDDRUCK =ROW ausgfeldlaengeTEXT ,AUSGFELDBILD =ROW +ausgfeldlaengeTEXT ,AUSGKOPFDRUCK =ROW ausgkopflaengeTEXT ,AUSGKOPFBILD =ROW +ausgkopflaengeTEXT ,klalieingangsmaske="ms liste klassen eingang",klalianfpos +=2,nr="Nr.",name="Name, Rufname",sternvolljaehrig= +" ( * entspricht volljährig )",klasse="Klasse",altervolljaehrig=18, +mnrbearbeitetwird=100,mnrlistewirdgedruckt=58,mnrauswahlnichtsinnvoll=56;INT +CONST spalte1bildbreite:=bildbreite-anzspaltentrenner-spalte2bildbreite;INT +VAR spalte2druckbreite,druckzeilenzahlmax,druckzeilenzahl,bildanf,zaehler, +vergldatum,aktuelleindexnr,eingabestatus;TEXT VAR klaliueberschrift, +schuelername,schuelerrufname,schuelernamenszus,schuelergebdat, +schuelernameaufber,zaehleraufber,ueberschrift1,ueberschrift2,lehrer,jahrgang, +zug,startjgst,startzug,bearbeitetwird,listewirdgedruckt,auswahlnichtsinnvoll; +TEXT VAR druckstrich;TEXT CONST bildstrich:=bildbreite*mittestrich; +AUSGFELDDRUCK VAR ausgfelddruck;AUSGFELDBILD VAR ausgfeldbild;AUSGKOPFDRUCK +VAR ausgkopfdruck;AUSGKOPFBILD VAR ausgkopfbild;BOOL VAR einjahrgang,alle, +voll,neueklasse;BOOL PROC multistop:BOOL VAR b;IF startjgst<>""THEN IF +einjahrgangTHEN b:=wert(fnrsusgrpjgst)=startjgst;ELSE b:=wert(fnrsusgrpjgst)= +startjgstAND wert(fnrsusgrpzugtut)=startzug;FI ELSE b:=wert(fnrsustatuss)= +"ls";FI ;bEND PROC multistop;BOOL PROC multistopsim:BOOL VAR b:=multistop; +setzebestandende(NOT b);bENDPROC multistopsim;PROC klalispezielleteile(INT +CONST nr):SELECT nrOF CASE 1:klalidialogvorbereitenCASE 2: +klalieingabenrichtigCASE 3:klalilistenvorbereitenCASE 4:klalidruckvorbereiten +CASE 5:klaliseitedruckenCASE 6:klalibildschirmvorbereitenCASE 7: +klaliseitezeigenENDSELECT .END PROC klalispezielleteile;PROC +klalidialogvorbereiten:klaliueberschrift:=text(vergleichsknoten); +setzeanfangswerte(klalieingangsmaske,klalianfpos).END PROC +klalidialogvorbereiten;PROC klalieingabenrichtig:LET fnrjgst=2,fnrzug=3, +fnrvoll=4,fnrausgdrucker=5,fnrausgbild=6;alle:=FALSE ;einjahrgang:=FALSE ; +voll:=FALSE ;standardpruefe(5,fnrausgdrucker,fnrausgbild,null,niltext, +eingabestatus);IF eingabestatus<>0THEN infeld(eingabestatus);setzeeingabetest +(FALSE )ELSE zug:=standardmaskenfeld(fnrzug);jahrgang:=standardmaskenfeld( +fnrjgst);IF standardmaskenfeld(fnrjgst)=niltextTHEN IF zug=niltextTHEN alle:= +TRUE ;voll:=(standardmaskenfeld(fnrvoll)<>niltext);setzeausgabedrucker( +standardmaskenfeld(fnrausgbild)=niltext);setzeeingabetest(TRUE )ELSE +meldefehler;infeld(fnrzug);setzeeingabetest(FALSE )FI ELSE standardpruefe(3, +fnrjgst,5,13,niltext,eingabestatus);IF eingabestatus<>0THEN infeld( +eingabestatus);setzeeingabetest(FALSE )ELSE jahrgang:=zweistellig( +standardmaskenfeld(fnrjgst));einjahrgang:=(zug=niltext);voll:=( +standardmaskenfeld(fnrvoll)<>niltext);setzeausgabedrucker(standardmaskenfeld( +fnrausgbild)=niltext);setzeeingabetest(TRUE )FI FI FI .meldefehler: +meldungstext(mnrauswahlnichtsinnvoll,auswahlnichtsinnvoll);standardmeldung( +auswahlnichtsinnvoll,niltext).END PROC klalieingabenrichtig;PROC +klalilistenvorbereiten:BOOL VAR b:=FALSE ;startjgst:=jahrgang;startzug:=zug; +neueklasse:=FALSE ;aktuelleindexnr:=ixsustatjgstzug;inittupel(dnrschueler); +initobli(17);parsenooffields(19);setzeidentiwert("");putwert(fnrsustatuss, +"ls");putwert(fnrsusgrpjgst,startjgst);putwert(fnrsusgrpzugtut,startzug); +vergldatum:=vergleichsdatum(altervolljaehrig);#objektlistestarten( +aktuelleindexnr,"",fnrsustatuss,TRUE ,b);#objektlistestarten(aktuelleindexnr, +"",staticfield,TRUE ,b);setzebestandende(NOT multistopCOR b).staticfield:IF +startjgst=niltextTHEN fnrsusgrpjgstELSE IF startzug=niltextTHEN +fnrsusgrpzugtutELSE dnrschueler+1FI FI .END PROC klalilistenvorbereiten;PROC +klalibildschirmvorbereiten:LET fnrausganf=2;ueberschriftvorbereitenbild; +standardkopfmaskeaktualisieren(ueberschrift1);initspalten;initausgabekopfbild +;bildanf:=fnrausganf;INT VAR i;FOR iFROM 1UPTO ausgkopflaengeREPEAT +ausgkopfbild(i)IN bildanf;bildanfINCR 1END REPEAT ;setzebildanfangsposition( +bildanf).END PROC klalibildschirmvorbereiten;PROC ueberschriftvorbereitenbild +:LET aufein="",aufaus=" ";IF alleTHEN ueberschrift1:=klaliueberschriftELSE +IF einjahrgangTHEN IF int(jahrgang)<11THEN ueberschrift1:=ueb1teil1ELSE +ueberschrift1:=ueb2teil1FI ;ueberschrift1:=ueberschrift1+ueb3+aufein+jahrgang ++aufausELSE IF int(jahrgang)<11THEN ueberschrift1:=ueb1teil1+ueb1teil2ELSE +ueberschrift1:=ueb2teil1+ueb2teil22FI ;ueberschrift1:=ueberschrift1+aufein+ +jahrgang+blank+wert(fnrsusgrpzugtut)+aufausFI FI ;END PROC +ueberschriftvorbereitenbild;PROC initausgabekopfbild:IF einjahrgangOR alle +THEN hilfsfeldervorbelegen;ausgkopfbild(1):=zeileELSE ausgkopfbild(1):=text( +name,bildbreite)FI ;ausgkopfbild(2):=bildstrich.hilfsfeldervorbelegen: +setzespaltenbreite(spalte1bildbreite);setzespaltenbreite(spalte2bildbreite); +IF vollTHEN spaltenweise(name+sternvolljaehrig)ELSE spaltenweise(name)FI ; +spaltenweise(klasse).END PROC initausgabekopfbild;PROC klaliseitezeigen: +blaettern(PROC (INT CONST )schuelerdatenzeigen,aktion,TRUE ,TRUE ,BOOL PROC +multistop)END PROC klaliseitezeigen;PROC schuelerdatenzeigen(INT CONST x): +schuelerdatenholen;schuelerdatenaufbereitenbild;schuelerdatenaufbildschirm. +END PROC schuelerdatenzeigen;PROC schuelerdatenaufbereitenbild: +schuelernameaufbereiten;IF alleOR einjahrgangTHEN schreibenamerufnameklasse +ELSE schreibenamerufnameFI .schreibenamerufnameklasse:spaltenweise( +schuelernameaufber);spaltenweise(jahrgang+blank+wert(fnrsusgrpzugtut)); +ausgfeldbild(1):=zeile.schreibenamerufname:ausgfeldbild(1):=text( +schuelernameaufber,bildbreite).END PROC schuelerdatenaufbereitenbild;PROC +schuelerdatenaufbildschirm:INT VAR i;FOR iFROM 1UPTO ausgfeldlaengeREPEAT +ausgfeldbild(i)IN ausgabepos;erhoeheausgabeposumeinsEND REPEAT .END PROC +schuelerdatenaufbildschirm;PROC klalidruckvorbereiten:zaehler:=null; +neueklasse:=TRUE ;druckvorbereiten;variablenfuerdrucksetzen;druckzeilenzahl:= +druckzeilenzahlmax;IF vollTHEN druckzeilenzahl:=druckzeilenzahl-2FI ; +holemeldung;inittupel(dnrschueler);putwert(fnrsusgrpjgst,startjgst);putwert( +fnrsusgrpzugtut,startzug);putwert(fnrsustatuss,"ls");lesenvorbereitendruck( +PROC (INT CONST ,BOOL PROC ,INT VAR )scanforward,BOOL PROC multistopsim); +ueberschriftvorbereitendruck;initdruckkopf(ueberschrift1,ueberschrift2); +initspalten;initausgabekopfdruck.variablenfuerdrucksetzen:druckstrich:= +druckbreite*mittestrich;spalte2druckbreite:=druckbreite-anzspaltentrenner- +spalte1druckbreite;druckzeilenzahlmax:=drucklaenge(ueberschriftenzeilen)- +ausgkopflaenge.holemeldung:meldungstext(mnrbearbeitetwird,bearbeitetwird). +END PROC klalidruckvorbereiten;PROC ueberschriftvorbereitendruck:IF int( +jahrgang)<11THEN ueberschrift1:=ueb1teil1+ueb1teil2+wert(fnrsusgrpjgst)+blank ++wert(fnrsusgrpzugtut);ueberschrift2:=ueb1teil3ELSE ueberschrift1:=ueb2teil1+ +ueb2teil21+jahrgang;ueberschrift2:=ueb2teil3FI ;klassenlehrer(lehrer,jahrgang +,wert(fnrsusgrpzugtut));ueberschrift2:=ueberschrift2+lehrer;END PROC +ueberschriftvorbereitendruck;PROC klassenlehrer(TEXT VAR lehrer,TEXT CONST +jahrgang,TEXT CONST zug):putwert(fnrsgrpsj,schulkenndatum("Schuljahr")); +putwert(fnrsgrphj,schulkenndatum("Schulhalbjahr"));putwert(fnrsgrpjgst, +jahrgang);putwert(fnrsgrpkennung,zug);search(dnraktschuelergruppen,TRUE );IF +dbstatus=okTHEN putwert(fnrlparaphe,wert(fnrsgrplehrer));search(dnrlehrer, +TRUE );IF dbstatus=okTHEN lehrer:=wert(fnrlfamname)ELSE lehrer:=""FI ;ELSE +lehrer:=""FI END PROC klassenlehrer;PROC initausgabekopfdruck: +hilfsfeldervorbelegen;ausgkopfdruck(1):=zeile;ausgkopfdruck(2):=druckstrich. +hilfsfeldervorbelegen:setzespaltenbreite(spalte1druckbreite); +setzespaltenbreite(spalte2druckbreite);spaltenweise(nr);spaltenweise(name). +END PROC initausgabekopfdruck;PROC klaliseitedrucken:LET kommentar= +"* Schüler ist am Tag der Listenerstellung volljährig"; +klaliueberschriftdrucken;seitedrucken(PROC (INT VAR )schuelerdatendrucken, +druckzeilenzahl,ausgfeldlaenge,PROC bestandendesimulierenbeiklassenwechsel, +BOOL PROC multistopsim);ggflkommentarzeile;IF neueklasseTHEN +simuliertesendezuruecknehmen;neuelistevorbereitenELSE seitenwechselFI . +ggflkommentarzeile:IF vollTHEN kommentarzeiledruckenFI .kommentarzeiledrucken +:ausgfelddruck(1):=text(niltext,druckbreite);druckzeileschreiben( +ausgfelddruck(1));ausgfelddruck(1):=text(kommentar,druckbreite); +druckzeileschreiben(ausgfelddruck(1)).simuliertesendezuruecknehmen: +setzebestandende(FALSE ).neuelistevorbereiten:meldelistewirdgedruckt; +drucknachbereiten;druckvorbereiten;zaehler:=null;schuelerdatenholen; +ueberschriftvorbereitendruck;initdruckkopf(ueberschrift1,ueberschrift2). +meldelistewirdgedruckt:meldungstext(mnrlistewirdgedruckt,listewirdgedruckt); +standardmeldung(listewirdgedruckt,niltext).END PROC klaliseitedrucken;PROC +klaliueberschriftdrucken:druckkopfschreiben;INT VAR i;FOR iFROM 1UPTO +ausgkopflaengeREPEAT druckzeileschreiben(ausgkopfdruck(i))END REPEAT .END +PROC klaliueberschriftdrucken;PROC schuelerdatendrucken(INT VAR zeilenzaehler +):LET markiert="#";schuelerdatenholen;ggflmeldungklasse;zaehlerINCR 1; +schuelerdatenaufbereitendruck;zeilenzaehlerINCR ausgfeldlaenge; +schuelerdatenindruckdatei.ggflmeldungklasse:IF zaehler=nullTHEN +standardmeldung(bearbeitetwird,jahrgang+blank+zug+markiert)FI .END PROC +schuelerdatendrucken;PROC schuelerdatenaufbereitendruck:zaehleraufbereiten; +schuelernameaufbereiten;schreibenrnamerufname.zaehleraufbereiten:IF zaehler< +10THEN zaehleraufber:=blankELSE zaehleraufber:=niltextFI ;zaehleraufber:= +zaehleraufber+text(zaehler).schreibenrnamerufname:spaltenweise(zaehleraufber) +;spaltenweise(schuelernameaufber);ausgfelddruck(1):=zeile;END PROC +schuelerdatenaufbereitendruck;PROC schuelerdatenindruckdatei: +druckzeileschreiben(ausgfelddruck(1)).END PROC schuelerdatenindruckdatei; +PROC bestandendesimulierenbeiklassenwechsel:IF bestandendeTHEN neueklasse:= +FALSE ELSE nochklassezubearbeiten;IF neueklasseTHEN setzebestandende(TRUE ) +FI ;FI .nochklassezubearbeiten:neueklasse:=zug<>wert(fnrsusgrpzugtut);IF alle +THEN neueklasse:=neueklasseOR (int(jahrgang)<>int(wert(fnrsusgrpjgst)))FI . +END PROC bestandendesimulierenbeiklassenwechsel;PROC schuelernameaufbereiten: +schuelernameaufber:=niltext;IF schuelernamenszus<>niltextTHEN +schuelernameaufber:=schuelernamenszus+blankFI ;schuelernameaufber:= +schuelernameaufber+schuelername+komma+blank+schuelerrufname;IF vollCAND ( +schuelergebdat<>niltext)CAND volljaehrig(datum(schuelergebdat))THEN +schuelernameaufber:=schuelernameaufber+blank+sternFI ;END PROC +schuelernameaufbereiten;BOOL PROC volljaehrig(INT CONST geburtstag): +geburtstag<=vergldatumEND PROC volljaehrig;PROC schuelerdatenholen: +schuelername:=wert(fnrsufamnames);schuelerrufname:=wert(fnrsurufnames); +schuelernamenszus:=wert(fnrsunamenszusatzs);schuelergebdat:=wert( +fnrsugebdatums);jahrgang:=wert(fnrsusgrpjgst);zug:=wert(fnrsusgrpzugtut).END +PROC schuelerdatenholen;END PACKET klassenlisten; + diff --git a/app/schulis/2.2.1/src/1.listen.klassenbuch b/app/schulis/2.2.1/src/1.listen.klassenbuch new file mode 100644 index 0000000..e0c2386 --- /dev/null +++ b/app/schulis/2.2.1/src/1.listen.klassenbuch @@ -0,0 +1,237 @@ +PACKET klassenbuchlistenDEFINES klabulispezielleteile:LET nildatumdb= +"01.01.00",niltext="",blank=" ",mittestrich="-",null=0,slspalte3breite=16, +slanzspaltentrenner=2,ausgkopflaenge=3,ausgfeldlaenge=3,maxanzproseite=50, +AUSGFELD =ROW ausgfeldlaengeTEXT ,AUSGKOPF =ROW ausgkopflaengeTEXT ,SPEICHER +=ROW maxanzproseiteTEXT ,klabulieingangsmaske="ms liste klabuch eingang", +klabulianfpos=2,#dnrschueler=2,fnrsufamnames=3,fnrsurufnames=4,fnrsugebdatums +=5,fnrsustatuss=6,fnrsusgrpjgst=7,fnrsusgrpzugtut=8,fnrsugeschlechts=12, +fnrsunamenszusatzs=21,fnrsustrnrs=24,fnrsuplzorts=25,dbiplz=--,fnrsutelnrs=26 +,fnrsutidiffdaten=52,dnrdiffdaten=53,fnrddreliunter=67,fnrddreliunteranmeld= +69,fnrddreliunterabmeld=68,fnrddkunstmusik=70,fnrddfach091a=71,fnrddfach091b= +72,fnrddfach092a=73,fnrddfach092b=74,fnrddfach101a=75,fnrddfach101b=76, +fnrddfach102a=77,fnrddfach102b=78,fnrhjdfamnames=89,fnrhjdrufnames=90, +fnrhjdgebdats=91,fnrhjdhj=93,fnrhjdjgst=94,fnrhjdfach=113,fnrhjdkursart=114, +dnrfaecher=141,fnrffach=142,fnrffachbez=143,ixhjdfamrufgebjgsthj=276, +ixsustatjgstzug=255,#mnrlistewirdgedruckt=58,mnrbearbeitetwird=100, +mnrauswahlnichtsinnvoll=56;INT VAR slspalte1breite,slspalte2breite, +druckzeilenzahlgrund,druckzeilenzahl,druckzeilenzahlrest,zaehler,anzzaehler, +indexspeicher,eingabestatus,aktuelleindexnr;TEXT VAR vordruck, +vordruckueberarbsl,vordruckueberarbsr,klabuliueberschrift, +auswahlnichtsinnvoll,listewirdgedruckt,bearbeitetwird,startjahr,startzug, +schuelername,schuelerrufname,schuelernamenszus,jahrgang,zug,schuelerstrasse, +schuelerort,schuelertelefon,schuelergebdat,schuelergeschlecht,schuelerreliunt +,schuelersprachen,schuelermusfach,schuelerwpffach,schuelerkursfachbez, +schuelerkursartbez,zaehleraufber,lehrer,puffer1,puffer2,druckstrich;AUSGFELD +VAR ausgfeld;AUSGKOPF VAR slausgkopf,srausgkopf;SPEICHER VAR speicher;FILE +VAR f,g;BOOL VAR einjahrgang,alle,elementsek1,neueklasse:=FALSE ;BOOL PROC +multistopsim:BOOL VAR b:=FALSE ;IF wert(fnrsustatuss)="ls"THEN IF startjahr<> +""THEN b:=wert(fnrsusgrpjgst)=startjahr;IF bCAND startzug<>""THEN b:=wert( +fnrsusgrpzugtut)=startzugFI ELSE #b:=dbstatus=ok;#b:=wert(fnrsustatuss)="ls" +FI ;FI ;setzebestandende(NOT b);bEND PROC multistopsim;PROC +klabulispezielleteile(INT CONST nr):SELECT nrOF CASE 1: +klabulidialogvorbereiten;CASE 2:klabulieingabenrichtig;CASE 3: +klabulilistenvorbereiten;CASE 4:klabulidruckvorbereiten;CASE 5: +klabuliseitedrucken;ENDSELECT .END PROC klabulispezielleteile;PROC +klabulidialogvorbereiten:klabuliueberschrift:=text(vergleichsknoten); +setzeanfangswerte(klabulieingangsmaske,klabulianfpos).END PROC +klabulidialogvorbereiten;PROC klabulieingabenrichtig:LET fnrjgst=2,fnrzug=3; +alle:=FALSE ;einjahrgang:=FALSE ;reinitparsing;zug:=standardmaskenfeld(fnrzug +);jahrgang:=standardmaskenfeld(fnrjgst);IF standardmaskenfeld(fnrjgst)= +niltextTHEN IF zug=niltextTHEN alle:=TRUE ;setzeausgabedrucker(TRUE ); +setzeeingabetest(TRUE )ELSE meldefehler;infeld(fnrzug);setzeeingabetest( +FALSE )FI ELSE standardpruefe(3,fnrjgst,5,13,niltext,eingabestatus);IF +eingabestatus<>0THEN infeld(eingabestatus);setzeeingabetest(FALSE )ELSE +jahrgang:=zweistellig(standardmaskenfeld(fnrjgst));einjahrgang:=(zug=niltext) +;setzeausgabedrucker(TRUE );setzeeingabetest(TRUE )FI FI .meldefehler: +meldungstext(mnrauswahlnichtsinnvoll,auswahlnichtsinnvoll);standardmeldung( +auswahlnichtsinnvoll,niltext).END PROC klabulieingabenrichtig;PROC +klabulilistenvorbereiten:BOOL VAR b;startjahr:=jahrgang;startzug:=zug; +aktuelleindexnr:=ixsustatjgstzug;inittupel(dnrschueler);initobli(9); +setzeidentiwert("");putwert(fnrsusgrpjgst,startjahr);putwert(fnrsusgrpzugtut, +startzug);putwert(fnrsustatuss,"ls");#objektlistestarten(aktuelleindexnr,"", +fnrsusgrpjgst,TRUE ,b);#objektlistestarten(aktuelleindexnr,"",fnrsustatuss, +TRUE ,b);setzebestandende(NOT multistopsim)END PROC klabulilistenvorbereiten; +PROC klabulidruckvorbereiten:LET vordr="vordruck klassenbuchliste",manager= +"anschreiben server";setzemitseitennummern(FALSE );zaehler:=null;neueklasse:= +TRUE ;druckvorbereiten;variablenfuerdrucksetzen;holemeldungen;inittupel( +dnrschueler);putwert(fnrsusgrpjgst,startjahr);putwert(fnrsusgrpzugtut, +startzug);putwert(fnrsustatuss,"ls");lesenvorbereitendruck(PROC (INT CONST , +BOOL PROC ,INT VAR )scanforward,BOOL PROC multistopsim); +vordruckvommanagerholen;ueberschriftenvorbereiten;initspalten; +ausgabekoepfevorbereiten;ausgfeld(3):=druckstrich.holemeldungen:meldungstext( +mnrbearbeitetwird,bearbeitetwird).variablenfuerdrucksetzen:druckstrich:= +druckbreite*mittestrich;slspalte2breite:=(druckbreite-slanzspaltentrenner- +slspalte3breite)DIV 2;slspalte1breite:=druckbreite-slanzspaltentrenner- +slspalte2breite-slspalte3breite;druckzeilenzahlgrund:=drucklaenge- +ausgkopflaenge.vordruckvommanagerholen:vordruck:=vordr;forget(vordruck,quiet) +;fetch(vordruck,/manager).END PROC klabulidruckvorbereiten;PROC +ueberschriftenvorbereiten:LET swischuledatum=511,swiuebzeile=512, +vordrueberarbsl="vordruck ueberarbeitet sl",vordrueberarbsr= +"vordruck ueberarbeitet sr",beginnsek2=11,uebteil1sek1="Klasse: ", +uebteil1sek2="Tutorenkurs: ",ueb1teil2sek1=" Klassenlehrer: ",ueb1teil2sek2 +=" Tutor: ",ueb2teil2="Schuljahr ";jahrgangundzugholen;elementsek1bestimmen +;#puffer1:=wert();#setzesonderwerteschulkenndaten;#putwert(,puffer1);# +vordruckfuellenfuerueberschrift1;vordruckfuellenfuerueberschrift2; +verbleibendedruckzeilenzahlbestimmen.jahrgangundzugholen:jahrgang:=wert( +fnrsusgrpjgst);zug:=wert(fnrsusgrpzugtut).elementsek1bestimmen:elementsek1:= +FALSE ;IF int(jahrgang)<beginnsek2THEN elementsek1:=TRUE FI . +vordruckfuellenfuerueberschrift1:setzesonderwert(swischuledatum, +aufbereiteteschuledatum);setzesonderwert(swiuebzeile,aufbereiteteklasselehrer +);vordruckueberarbsl:=vordrueberarbsl;forget(vordruckueberarbsl,quiet); +briefalternative(vordruck,vordruckueberarbsl);f:=sequentialfile(input, +vordruckueberarbsl).vordruckfuellenfuerueberschrift2:setzesonderwert( +swischuledatum,aufbereiteteschuledatum);setzesonderwert(swiuebzeile, +aufbereiteteklasseschuljahr);vordruckueberarbsr:=vordrueberarbsr;forget( +vordruckueberarbsr,quiet);briefalternative(vordruck,vordruckueberarbsr);g:= +sequentialfile(input,vordruckueberarbsr).aufbereiteteschuledatum:puffer1:= +sonderwert(501);puffer2:=sonderwert(502);puffer2+(druckbreite-length(puffer2) +-length(puffer1))*blank+puffer1.aufbereiteteklasselehrer:klassenlehrer(lehrer +,jahrgang,zug);puffer2:=jahrgang+blank+zug;IF int(jahrgang)<11THEN +uebteil1sek1+puffer2+ueb1teil2sek1+lehrerELSE uebteil1sek2+puffer2+ +ueb1teil2sek2+lehrerFI .aufbereiteteklasseschuljahr:puffer1:=ueb2teil2+ +sonderwert(505);puffer2:=jahrgang+blank+zug;IF int(jahrgang)<11THEN puffer2:= +uebteil1sek1+puffer2ELSE puffer2:=uebteil1sek2+puffer2FI ;puffer2+( +druckbreite-length(puffer2)-length(puffer1))*blank+puffer1. +verbleibendedruckzeilenzahlbestimmen:druckzeilenzahl:=druckzeilenzahlgrund- +max(lines(f),lines(g));druckzeilenzahl:=min((maxanzproseiteDIV ( +ausgfeldlaenge-1))*ausgfeldlaenge,druckzeilenzahl).END PROC +ueberschriftenvorbereiten;PROC klassenlehrer(TEXT VAR lehrer,TEXT CONST +jahrgang,TEXT CONST zug):putwert(fnrsgrpsj,schulkenndatum("Schuljahr")); +putwert(fnrsgrphj,schulkenndatum("Schulhalbjahr"));putwert(fnrsgrpjgst, +jahrgang);putwert(fnrsgrpkennung,zug);search(dnraktschuelergruppen,TRUE );IF +dbstatus=okTHEN putwert(fnrlparaphe,wert(fnrsgrplehrer));search(dnrlehrer, +TRUE );IF dbstatus=okTHEN lehrer:=wert(fnrlfamname)ELSE lehrer:=""FI ;ELSE +lehrer:=""FI END PROC klassenlehrer;PROC ausgabekoepfevorbereiten:LET name= +" Familienname",strasse="Straße Hausnummer",telefon="Telefonnummer", +nrrufname="Nr. Rufname Namenszusatz",ort="Plz Ort";ausgabekopfslvorbelegen; +ausgabekopfsrvorbelegen.ausgabekopfslvorbelegen:hilfsfeldervorbelegen; +spaltenweise(name);spaltenweise(strasse);spaltenweise(telefon);slausgkopf(1) +:=zeile;spaltenweise(nrrufname);spaltenweise(ort);spaltenweise(blank); +slausgkopf(2):=zeile;slausgkopf(3):=druckstrich.hilfsfeldervorbelegen: +setzespaltenbreite(slspalte1breite);setzespaltenbreite(slspalte2breite); +setzespaltenbreite(slspalte3breite).END PROC ausgabekoepfevorbereiten;PROC +ausgabekopfsrvorbelegen:LET srkopft1=" Geburts- J/M ",srkopft2= +"Nr. datum ",srkopf1t1="Unterr. Sprachen musisches Wahlpflicht-" +,srkopf1t2="Religion Fach fächer",srkopf2t1="Fächer", +srkopf2t2="Kurskennungen";IF elementsek1THEN srausgkopf(1):=srkopft1+ +srkopf1t1;srausgkopf(2):=srkopft2+srkopf1t2ELSE srausgkopf(1):=srkopft1+ +srkopf2t1;srausgkopf(2):=srkopft2+srkopf2t2FI ;srausgkopf(3):=druckstrich. +END PROC ausgabekopfsrvorbelegen;PROC klabuliseitedrucken: +speicherrechteseiteloeschen;klabulislueberschriftdrucken;anzzaehler:=null; +seitedrucken(PROC (INT VAR )schuelerdatendrucken,druckzeilenzahl, +ausgfeldlaenge,PROC bestandendesimulierenbeiklassenwechsel,BOOL PROC +multistopsim);IF neueklasseTHEN simuliertesendezuruecknehmen; +neuelistevorbereitenELSE IF NOT bestandendeTHEN rechteseitedrucken; +seitenwechselFI FI .speicherrechteseiteloeschen:FOR indexspeicherFROM 1UPTO +maxanzproseiteREP speicher(indexspeicher):=niltextPER ;indexspeicher:=null. +simuliertesendezuruecknehmen:setzebestandende(FALSE ).neuelistevorbereiten: +leereschuelereintragen;rechteseitedrucken;meldelistewirdgedruckt; +drucknachbereiten;druckvorbereiten;zaehler:=null;ueberschriftenvorbereiten. +meldelistewirdgedruckt:meldungstext(mnrlistewirdgedruckt,listewirdgedruckt); +standardmeldung(listewirdgedruckt,niltext).END PROC klabuliseitedrucken;PROC +klabulislueberschriftdrucken:INT VAR i;input(f);WHILE NOT eof(f)REP getline(f +,ausgfeld(1));druckzeileschreiben(ausgfeld(1));PER ;druckzeileschreiben( +druckstrich);FOR iFROM 1UPTO ausgkopflaengeREPEAT druckzeileschreiben( +slausgkopf(i))END REPEAT ;druckzeilenzahlrest:=druckzeilenzahl.END PROC +klabulislueberschriftdrucken;PROC bestandendesimulierenbeiklassenwechsel:IF +bestandendeTHEN leereschuelereintragen;rechteseitedrucken;neueklasse:=FALSE +ELSE nochklassezubearbeiten;IF neueklasseTHEN setzebestandende(TRUE )FI ;FI . +nochklassezubearbeiten:IF alleTHEN neueklasse:=int(jahrgang)<>int(wert( +fnrsusgrpjgst));IF neueklasseTHEN ausgabekopfsrvorbelegenFI ;neueklasse:= +neueklasseOR (zug<>wert(fnrsusgrpzugtut));ELSE neueklasse:=zug<>wert( +fnrsusgrpzugtut)FI .END PROC bestandendesimulierenbeiklassenwechsel;PROC +schuelerdatendrucken(INT VAR zeilenzaehler):LET markiert="#"; +schuelerdatenholen;ggflmeldungklasse;zaehlerINCR 1;anzzaehlerINCR 1; +schuelerdatenaufbereiten;zeilenzaehlerINCR ausgfeldlaenge; +schuelerdatenindruckdatei.ggflmeldungklasse:IF zaehler=nullTHEN +standardmeldung(bearbeitetwird,jahrgang+blank+zug+markiert)FI .END PROC +schuelerdatendrucken;PROC schuelerdatenholen:LET weiblich="w",maennlich="m", +junge="J",maedchen="M",anzsprachen=4,prosprache=3;INT VAR i,j;schuelername:= +wert(fnrsufamnames);schuelerrufname:=2*blank+wert(fnrsurufnames); +schuelernamenszus:=wert(fnrsunamenszusatzs);jahrgang:=wert(fnrsusgrpjgst);zug +:=wert(fnrsusgrpzugtut);schuelerstrasse:=wert(fnrsustrnrs);schuelerort:=wert( +fnrsuplzorts);schuelertelefon:=wert(fnrsutelnrs);schuelergebdat:=wert( +fnrsugebdatums);IF wert(fnrsugeschlechts)=weiblichTHEN schuelergeschlecht:= +maedchenELIF wert(fnrsugeschlechts)=maennlichTHEN schuelergeschlecht:=junge +ELSE schuelergeschlecht:=blankFI ;IF elementsek1THEN +diffdatenholenundaufbereitenELSE schuelerkursfachbez:=niltext; +schuelerkursartbez:=niltext;kursdatenholenundaufbereitenFI . +diffdatenholenundaufbereiten:INT VAR difstatus:=0;inittupel(dnrdiffdaten);IF +wert(fnrsutiddiffdaten)<>""THEN disablestop;readtid(dnrdiffdaten,wert( +fnrsutiddiffdaten));IF iserrorTHEN clearerror;difstatus:=1FI ;enablestopFI ; +IF difstatus=0THEN schuelersprachen:=niltext;sprachenaufbereiten; +schuelerreliunt:=wert(fnrddreliunter);schuelermusfach:=wert(fnrddkunstmusik); +schuelerwpffach:=niltext;IF jahrgang="09"THEN wpf9aufbereitenELIF jahrgang= +"10"THEN wpf10aufbereitenFI FI .sprachenaufbereiten:FOR iFROM 0UPTO +anzsprachen-1REP j:=(3*i)+55;puffer1:=wert(j);schuelersprachen:= +schuelersprachen+puffer1+(prosprache-length(puffer1))*blankPER . +wpf9aufbereiten:puffer1:=wert(fnrddfach091a);schuelerwpffach:=puffer1+(5- +length(puffer1))*blank;puffer1:=wert(fnrddfach091b);schuelerwpffach:= +schuelerwpffach+puffer1+(5-length(puffer1))*blank;puffer1:=wert(fnrddfach092a +);schuelerwpffach:=schuelerwpffach+puffer1+(5-length(puffer1))*blank;puffer1 +:=wert(fnrddfach092b);schuelerwpffach:=schuelerwpffach+puffer1+(5-length( +puffer1))*blank.wpf10aufbereiten:puffer1:=wert(fnrddfach101a);schuelerwpffach +:=puffer1+(5-length(puffer1))*blank;puffer1:=wert(fnrddfach101b); +schuelerwpffach:=schuelerwpffach+puffer1+(5-length(puffer1))*blank;puffer1:= +wert(fnrddfach102a);schuelerwpffach:=schuelerwpffach+puffer1+(5-length( +puffer1))*blank;puffer1:=wert(fnrddfach102b);schuelerwpffach:=schuelerwpffach ++puffer1+(5-length(puffer1))*blank.kursdatenholenundaufbereiten:putwert( +fnrhjdfamnames,schuelername);putwert(fnrhjdrufnames,compress(schuelerrufname) +);putwert(fnrhjdgebdats,schuelergebdat);putwert(fnrhjdjgst,jahrgang);putwert( +fnrhjdhj,schulkenndatum("Schulhalbjahr"));search(ixhjdfamrufgebjgsthj,TRUE ); +pause(5);IF dbstatus=okTHEN kursartzuweisenFI .#dr31.03.88kursartzuweisen: +TEXT VAR suchbegriff:="";FOR iFROM 1UPTO (length(wert(fnrhjdfach))DIV 2)REP +puffer1:=wert(fnrhjdkursart)SUB i;schuelerkursartbez:=schuelerkursartbez+ +puffer1+(2-length(puffer1))*blank;suchbegriff:=subtext(wert(fnrhjdfach),(2*i) +-1,2*i);suchbegriff:=compress(suchbegriff);putwert(fnrffach,suchbegriff); +search(dnrfaecher,TRUE );IF dbstatus=okTHEN puffer1:=wert(fnrffachbez); +schuelerkursfachbez:=schuelerkursfachbez+puffer1+(3-length(puffer1))*blank; +FI ;PER .#kursartzuweisen:TEXT VAR suchbegriff:="";FOR iFROM 1UPTO (length( +wert(fnrhjdfach))DIV 2)REP suchbegriff:=subtext(wert(fnrhjdfach),(2*i)-1,2*i) +;suchbegriff:=compress(suchbegriff);putwert(fnrffach,suchbegriff);search( +dnrfaecher,TRUE );IF dbstatus=okTHEN puffer1:=wert(fnrffach); +schuelerkursfachbez:=schuelerkursfachbez+text(puffer1,3);puffer1:=wert( +fnrhjdkursart)SUB i;schuelerkursartbez:=schuelerkursartbez+text(puffer1,3); +ELSE schuelerkursfachbez:=schuelerkursfachbez+(3*blank);schuelerkursartbez:= +schuelerkursartbez+(3*blank);FI ;PER .END PROC schuelerdatenholen;PROC +schuelerdatenaufbereiten:zaehleraufbereiten;schreibenrnamestrassetelnr; +schreiberufnameort;datenfuerrechteseitespeichern.schreibenrnamestrassetelnr: +spaltenweise(zaehleraufber+2*blank+schuelername);spaltenweise(schuelerstrasse +);spaltenweise(schuelertelefon);ausgfeld(1):=zeile.schreiberufnameort: +spaltenweise(4*blank+schuelerrufname+blank+schuelernamenszus);spaltenweise( +schuelerort);spaltenweise(blank);ausgfeld(2):=zeile. +datenfuerrechteseitespeichern:indexspeicherINCR 1;speicher(indexspeicher):= +zaehleraufber+2*blank+aufbgebdat+3*blank+schuelergeschlecht;IF elementsek1 +THEN speicher(indexspeicher):=speicher(indexspeicher)+6*blank+aufbreliunt+5* +blank+schuelersprachen+4*blank+aufbmusfach+6*blank+schuelerwpffach; +indexspeicherINCR 1ELSE speicher(indexspeicher):=speicher(indexspeicher)+3* +blank+schuelerkursfachbez;indexspeicherINCR 1;speicher(indexspeicher):=19* +blank+schuelerkursartbezFI .aufbgebdat:IF schuelergebdat=niltextTHEN 8*blank +ELSE schuelergebdatFI .aufbreliunt:IF schuelerreliunt=niltextOR (reliabmeld +AND NOT relianmeld)THEN 2*blankELSE schuelerreliuntFI .reliabmeld:wert( +fnrddabmeldedatreli)<>nildatumdb.relianmeld:wert(fnrddanmeldedatreli)<> +nildatumdb.aufbmusfach:IF schuelermusfach=niltextTHEN 2*blankELSE +schuelermusfachFI .END PROC schuelerdatenaufbereiten;PROC +schuelerdatenindruckdatei:INT VAR i;FOR iFROM 1UPTO ausgfeldlaengeREP +druckzeileschreiben(ausgfeld(i))PER ;druckzeilenzahlrestDECR ausgfeldlaenge. +END PROC schuelerdatenindruckdatei;PROC leereschuelereintragen:INT VAR +leereschuelermoeglich,i;indexspeicherINCR 1;moeglicheschuelereintragen. +moeglicheschuelereintragen:leereschuelermoeglich:=druckzeilenzahlrestDIV +ausgfeldlaenge;FOR iFROM 1UPTO leereschuelermoeglichREP zaehlerINCR 1; +zaehleraufbereiten;ausgfeld(1):=text(zaehleraufber,druckbreite);ausgfeld(2):= +text(blank,druckbreite);schuelerdatenindruckdatei; +leerenschuelerfuerrechteseitespeichernPER . +leerenschuelerfuerrechteseitespeichern:anzzaehlerINCR 1;speicher( +indexspeicher):=text(zaehleraufber,druckbreite);indexspeicherINCR 2.END PROC +leereschuelereintragen;PROC rechteseitedrucken:INT VAR i,j;seitenwechsel; +klabulisrueberschriftdrucken;FOR iFROM 1UPTO anzzaehlerREP j:=2*i;ausgfeld(1) +:=speicher(j-1);ausgfeld(2):=speicher(j);schuelerdatenindruckdateiPER .END +PROC rechteseitedrucken;PROC klabulisrueberschriftdrucken:INT VAR i;input(g); +WHILE NOT eof(g)REP getline(g,ausgfeld(1));druckzeileschreiben(ausgfeld(1)); +PER ;druckzeileschreiben(druckstrich);FOR iFROM 1UPTO ausgkopflaengeREPEAT +druckzeileschreiben(srausgkopf(i))END REPEAT .END PROC +klabulisrueberschriftdrucken;PROC zaehleraufbereiten:LET zaehlerzweistellig= +10;IF zaehler<zaehlerzweistelligTHEN zaehleraufber:=blankELSE zaehleraufber:= +niltextFI ;zaehleraufber:=zaehleraufber+text(zaehler).END PROC +zaehleraufbereiten;END PACKET klassenbuchlisten; + diff --git a/app/schulis/2.2.1/src/1.listen.nachpruefung b/app/schulis/2.2.1/src/1.listen.nachpruefung new file mode 100644 index 0000000..0247060 --- /dev/null +++ b/app/schulis/2.2.1/src/1.listen.nachpruefung @@ -0,0 +1,155 @@ +PACKET nachprueflistenDEFINES nachprlispezielleteile:LET +mnrbearbeitetwirdjgst=106,nurimzweitenhj=193,schluesselnachpruefler="n";TEXT +VAR aktuellesschuljahr,endewertjgst,startwertjgst,bearbeitetwirdjgst;LET +niltext="",blank=" ",mittestrich="-",null=0,ueberschriftenzeilen=2, +spalte1breite=7,spalte3breite=40,anzspaltentrenner=2,spaltentrenner=":", +ausgkopflaenge=3,ausgfeldlaenge=4,AUSGFELD =ROW ausgfeldlaengeTEXT ,AUSGKOPF +=ROW ausgkopflaengeTEXT ,nachprlieingangsmaske= +"ms liste versetz nachpr eingang",nachprlianfpos=2;INT CONST +spalte2bildbreite:=bildbreite-anzspaltentrenner-spalte1breite-spalte3breite; +INT VAR spalte2druckbreite,druckzeilenzahl,bildanf,eingabestatus,breite, +ausgfeldlaengereal;TEXT VAR nachprliueberschrift,schuljahr,jahr1,jahr2, +schuelername,schuelerrufname,schuelernamenszus,schuelerjgst,schuelerzug,fach1 +,fach2,fach3,paraphe1,paraphe2,paraphe3,jgst,neuejgst,klasse,neueklasse;TEXT +VAR druckstrich;TEXT CONST bildstrich:=bildbreite*mittestrich;AUSGFELD VAR +ausgfeld;AUSGKOPF VAR ausgkopf;BOOL VAR sek1,sek2,ersteraufbildschirm, +klassegeaendert:=FALSE ;PROC nachprlispezielleteile(INT CONST nr):SELECT nr +OF CASE 1:nachprlidialogvorbereitenCASE 2:nachprlieingabenrichtigCASE 3: +nachprlilistenvorbereitenCASE 4:nachprlidruckvorbereitenCASE 5: +nachprliseitedruckenCASE 6:nachprlibildschirmvorbereitenCASE 7: +nachprliseitezeigenENDSELECT .END PROC nachprlispezielleteile;PROC +nachprlidialogvorbereiten:nachprliueberschrift:=text(vergleichsknoten); +setzeanfangswerte(nachprlieingangsmaske,nachprlianfpos)END PROC +nachprlidialogvorbereiten;PROC nachprlieingabenrichtig:LET fnrsek1=2,fnrsek2= +3,fnrjgst=4,fnrausgdrucker=5,fnrausgbild=6,auswahlnichtsinnvoll=56;IF int( +schulkenndatum("Schulhalbjahr"))=1THEN standardmeldung(nurimzweitenhj,"2.#"); +setzeeingabetest(FALSE )ELSE wohinpruefenFI .wohinpruefen:standardpruefe(5, +fnrausgdrucker,fnrausgbild,null,niltext,eingabestatus);IF eingabestatus<>0 +THEN infeld(eingabestatus);setzeeingabetest(FALSE )ELSE waspruefenFI . +waspruefen:sek1:=FALSE ;sek2:=FALSE ;fach1:="";fach2:="";fach3:=""; +reinitparsing;IF standardmaskenfeld(fnrjgst)=niltextTHEN standardpruefe(5, +fnrsek1,fnrsek2,null,niltext,eingabestatus);IF eingabestatus<>0THEN infeld( +eingabestatus);setzeeingabetest(FALSE )ELSE sek1:=standardmaskenfeld(fnrsek2) +=niltext;sek2:=NOT sek1;setzeausgabedrucker(standardmaskenfeld(fnrausgbild)= +niltext);setzeeingabetest(TRUE )FI ;ELSE IF (standardmaskenfeld(fnrsek1)= +niltext)AND (standardmaskenfeld(fnrsek2)=niltext)THEN standardpruefe(3, +fnrjgst,5,13,niltext,eingabestatus);IF eingabestatus<>0THEN infeld( +eingabestatus);setzeeingabetest(FALSE )ELSE jgst:=zweistellig( +standardmaskenfeld(fnrjgst));setzeausgabedrucker(standardmaskenfeld( +fnrausgbild)=niltext);setzeeingabetest(TRUE )FI ;ELSE meldefehler;infeld( +fnrsek1);setzeeingabetest(FALSE )FI ;FI .meldefehler:standardmeldung( +auswahlnichtsinnvoll,niltext).END PROC nachprlieingabenrichtig;PROC +nachprlilistenvorbereiten:BOOL VAR b;LET schluessel="Schuljahr"; +startwertjgstbestimmen;aktuellesschuljahrermitteln;inittupel( +dnrhalbjahresdaten);initobli(4);setzeidentiwert("");startwertesetzen; +objektlistestarten(ixhjdversjhjjgstkenn,"",fnrhjdjgst,TRUE ,b); +setzebestandende(NOT multistopnachprueflerCOR b).startwertjgstbestimmen: +aktuellesschuljahr:=schulkenndatum("Schuljahr");endewertjgst:=endeberechnung; +startwertjgst:=anfangsberechnung;.anfangsberechnung:IF sek1THEN "05"ELIF sek2 +THEN "11"ELSE jgstFI .endeberechnung:IF sek1THEN "11"ELIF sek2THEN "14"ELSE +text(int(jgst)+1)FI .startwertesetzen:putwert(fnrhjdversetzung, +schluesselnachpruefler);putwert(fnrhjdjgst,startwertjgst);putwert(fnrhjdsj, +aktuellesschuljahr);putintwert(fnrhjdhj,2).aktuellesschuljahrermitteln: +schuljahr:=schulkenndatum(schluessel);jahr1:=subtext(schuljahr,1,2);jahr2:= +subtext(schuljahr,3,4).END PROC nachprlilistenvorbereiten;PROC +nachprlibildschirmvorbereiten:LET fnrausganf=2;standardkopfmaskeaktualisieren +(nachprliueberschrift);breite:=bildbreite;initspalten;setzespaltentrenner( +spaltentrenner);setzespaltenbreiten(spalte2bildbreite);initausgabekopf( +bildstrich);bildanf:=fnrausganf;INT VAR i;FOR iFROM 1UPTO ausgkopflaenge +REPEAT ausgkopf(i)IN bildanf;bildanfINCR 1END REPEAT ;klasse:=niltext; +setzebildanfangsposition(bildanf).END PROC nachprlibildschirmvorbereiten; +PROC nachprliseitezeigen:setzescanstartwert(startwertjgst);setzescanendewert( +endewertjgst);blaettern(PROC (INT CONST )schuelerzeigen,aktion,TRUE ,TRUE , +BOOL PROC multistopnachpruefler);setzescanstartwert("");setzescanendewert("�" +).#endewertjgstpluseinsbeigleichheit:IF startwertjgst=endewertjgstTHEN text( +int(endewertjgst)+1)ELSE endewertjgstFI .#END PROC nachprliseitezeigen;PROC +schuelerzeigen(INT CONST x):schuelerholen;IF ersteraufbildschirmTHEN +klassegeaendert:=TRUE ;ersteraufbildschirm:=FALSE FI ;schueleraufbereiten; +schueleraufbildschirm.END PROC schuelerzeigen;PROC schueleraufbildschirm:INT +VAR i;FOR iFROM 1UPTO ausgfeldlaengeREPEAT ausgfeld(i)IN ausgabepos; +erhoeheausgabeposumeinsEND REPEAT .END PROC schueleraufbildschirm;PROC +nachprlidruckvorbereiten:LET uebteil11= +"Liste der zur Nachprüfung berechtigten Schüler, ",uebteil12="Sek.I", +uebteil13="Sek.II",uebteil14="Jgst. ",uebteil2="Schuljahr: ";TEXT VAR +ueberschrift1,ueberschrift2;ueberschriftvorbereitendruck;jgst:=niltext;klasse +:=niltext;druckvorbereiten;variablenfuerdrucksetzen;initdruckkopf( +ueberschrift1,ueberschrift2);breite:=druckbreite;initspalten; +setzespaltentrenner(spaltentrenner);setzespaltenbreiten(spalte2druckbreite); +initausgabekopf(druckstrich);holemeldungen;setzewerte;lesenvorbereitendruck( +PROC (INT CONST ,BOOL PROC ,INT VAR )scanforward,BOOL PROC +multistopnachprueflersim).holemeldungen:meldungstext(mnrbearbeitetwirdjgst, +bearbeitetwirdjgst).setzewerte:inittupel(dnrhalbjahresdaten);putwert( +fnrhjdversetzung,schluesselnachpruefler);putwert(fnrhjdjgst,startwertjgst); +putwert(fnrhjdsj,aktuellesschuljahr);putintwert(fnrhjdhj,2). +ueberschriftvorbereitendruck:ueberschrift1:=uebteil11;IF sek1THEN +ueberschrift1:=ueberschrift1+uebteil12ELSE IF sek2THEN ueberschrift1:= +ueberschrift1+uebteil13ELSE ueberschrift1:=ueberschrift1+uebteil14+jgstFI ; +FI ;ueberschrift2:=uebteil2+aufbereitetesschuljahr.aufbereitetesschuljahr: +"19"+jahr1+"/"+jahr2.variablenfuerdrucksetzen:druckstrich:=druckbreite* +mittestrich;spalte2druckbreite:=druckbreite-anzspaltentrenner-spalte1breite- +spalte3breite;druckzeilenzahl:=drucklaenge(ueberschriftenzeilen)- +ausgkopflaenge.END PROC nachprlidruckvorbereiten;PROC nachprliseitedrucken: +nachprliueberschriftdrucken;seitedrucken(PROC (INT VAR )schuelerdrucken, +druckzeilenzahl,ausgfeldlaenge,BOOL PROC multistopnachprueflersim); +seitenwechsel.END PROC nachprliseitedrucken;PROC nachprliueberschriftdrucken: +druckkopfschreiben;INT VAR i;FOR iFROM 1UPTO ausgkopflaengeREPEAT +druckzeileschreiben(ausgkopf(i))END REPEAT .END PROC +nachprliueberschriftdrucken;PROC schuelerdrucken(INT VAR zeilenzaehler):LET +markiert="#";schuelerholen;IF zeilenzaehler=nullTHEN klassegeaendert:=TRUE +FI ;ggflmeldungjgst;schueleraufbereiten;zeilenzaehlerINCR ausgfeldlaengereal; +schuelerindruckdatei.ggflmeldungjgst:IF jgstgeaendertTHEN zwischenmeldungFI . +jgstgeaendert:neuejgst:=schuelerjgst;jgst<>neuejgst.zwischenmeldung: +standardmeldung(bearbeitetwirdjgst,neuejgst+markiert);jgst:=neuejgst;END +PROC schuelerdrucken;PROC schuelerindruckdatei:INT VAR i;FOR iFROM 1UPTO +ausgfeldlaengerealREPEAT druckzeileschreiben(ausgfeld(i))END REPEAT .END +PROC schuelerindruckdatei;PROC setzespaltenbreiten(INT CONST spalte2breite): +setzespaltenbreite(spalte1breite);setzespaltenbreite(spalte2breite); +setzespaltenbreite(spalte3breite);END PROC setzespaltenbreiten;PROC +initausgabekopf(TEXT CONST strich):LET jgst="Jgst.",zugtut="Zug/Tut",name= +"Familienname",rufname=" Rufname",rest1= +"Meldg. :Prüfer :Datum : : ",rest2= +" :Fach:Fach:Vors:Beis: Zeit:Raum:Note";spaltenweise(jgst);spaltenweise( +name);spaltenweise(rest1);ausgkopf(1):=zeile;spaltenweise(zugtut); +spaltenweise(rufname);spaltenweise(rest2);ausgkopf(2):=zeile;ausgkopf(3):= +strich;END PROC initausgabekopf;PROC schuelerholen:schuelername:=wert( +fnrhjdfamnames);schuelerrufname:=wert(fnrhjdrufnames);#schuelernamenszus:= +wert(fnrhjdzusatz);#schuelernamenszus:="";schuelerjgst:=wert(fnrhjdjgst); +schuelerzug:=wert(fnrhjdkennung);fach1:=wert(fnrhjdnachfach1);fach2:=wert( +fnrhjdnachfach2);fach3:=wert(fnrhjdnachfach3);fachlehrersuchen(fach1,paraphe1 +);fachlehrersuchen(fach2,paraphe2);fachlehrersuchen(fach3,paraphe3); +neueklasse:=schuelerjgst+schuelerzug;klassegeaendert:=klasse<>neueklasse; +klasse:=neueklasse.END PROC schuelerholen;PROC fachlehrersuchen(TEXT CONST +fach,TEXT VAR paraphe):putwert(fnrlvhj,wert(fnrhjdhj));putwert(fnrlvsj,wert( +fnrhjdsj));putwert(fnrlvjgst,wert(fnrhjdjgst));#putwert(fnrlvzug,wert( +fnrhjdkennung));#putwert(fnrlvfachkennung,fach+wert(fnrhjdkennung));search( +dnrlehrveranstaltungen,TRUE );IF dbstatus=okTHEN paraphe:=wert(fnrlvparaphe) +ELSE paraphe:=""FI END PROC fachlehrersuchen;PROC schueleraufbereiten:LET +zwizeile=" : : : : : : :";INT VAR posausgfeld; +posausgfeld:=null;schreibeklassenamefach1;schreiberufnamefach2;IF +ausgabedruckerTHEN schreibeggffach3ELSE schreibefach3FI ; +schreibezwischenzeile.schreibeklassenamefach1:spaltenweise(aufbschuelerklasse +);spaltenweise(aufbschuelername);spaltenweise(aufbfach1);posausgfeldINCR 1; +ausgfeld(posausgfeld):=zeile;posausgfeldINCR 1.schreiberufnamefach2: +spaltenweise(blank);spaltenweise(aufbrufname);spaltenweise(aufbfach2); +ausgfeld(posausgfeld):=zeile;posausgfeldINCR 1.schreibeggffach3:IF fach3<> +niltextTHEN schreibefach3FI ;ausgfeldlaengereal:=posausgfeld.schreibefach3: +spaltenweise(blank);spaltenweise(blank);spaltenweise(aufbfach3);ausgfeld( +posausgfeld):=zeile;posausgfeldINCR 1.schreibezwischenzeile:spaltenweise( +blank);spaltenweise(blank);spaltenweise(zwizeile);ausgfeld(posausgfeld):= +zeile.aufbschuelerklasse:IF klassegeaendertTHEN schuelerjgst+blank+ +schuelerzugELSE blankFI .aufbschuelername:IF schuelernamenszus=niltextTHEN +schuelernameELSE schuelernamenszus+blank+schuelernameFI .aufbfach1:aufbfach( +fach1,paraphe1).aufbrufname:2*blank+schuelerrufname.aufbfach2:aufbfach(fach2, +paraphe2).aufbfach3:aufbfach(fach3,paraphe3).END PROC schueleraufbereiten; +TEXT PROC aufbfach(TEXT CONST fach,paraphe):LET vorfach="__: ",nachfach= +":____:____:_______:____:____";vorfach+fach+(3-length(fach))*blank+ +spaltentrenner+paraphe+(4-length(paraphe))*blank+nachfach.END PROC aufbfach; +BOOL PROC elementsek1:sek1COR int(startwertjgst)<11ENDPROC elementsek1;BOOL +PROC multistopnachpruefler:BOOL VAR b;b:=nachprueflerundrichtigesdatumCAND +int(wert(fnrhjdjgst))>=int(startwertjgst)CAND int(wert(fnrhjdjgst))<#=#int( +endewertjgst);b.nachprueflerundrichtigesdatum:wert(fnrhjdversetzung)= +schluesselnachprueflerCAND wert(fnrhjdsj)=aktuellesschuljahrCAND wert( +fnrhjdhj)="2".ENDPROC multistopnachpruefler;BOOL PROC +multistopnachprueflersim:BOOL VAR b:=multistopnachpruefler;setzebestandende( +NOT b);bENDPROC multistopnachprueflersim;END PACKET nachprueflisten; + diff --git a/app/schulis/2.2.1/src/1.listen.neuan b/app/schulis/2.2.1/src/1.listen.neuan new file mode 100644 index 0000000..6fd7fc5 --- /dev/null +++ b/app/schulis/2.2.1/src/1.listen.neuan @@ -0,0 +1,121 @@ +PACKET neuanlistenDEFINES neuanlispezielleteile:LET niltext="",blank=" ", +mittestrich="-",null=0,komma=",",ueberschriftenzeilen=2,nname="Name",schule= +"Schule",klasse="Klasse",spalte3breite=6,anzspaltentrenner=2,ausgkopflaenge=2 +,ausgfeldlaenge=2,AUSGFELD =ROW ausgfeldlaengeTEXT ,AUSGKOPF =ROW +ausgkopflaengeTEXT ,neuanlieingangsmaske="ms liste neuanmeld eingang", +neuanlianfpos=2,#fnrsustatuss=6,fnrsunamenszusatzs=21,fnrsuskennlschule=14, +fnrsuklasselschule=15,ixsustatschulkenn=253,ixsustatfamrufgeb=254dnrschueler= +2,dnrschulen=120,fnrschkennung=121,fnrschname=122,#mnrbearbeitetwerdenschulen +=101,mnrbearbeitetwerdenschueler=102;INT CONST spalte1bildbreite:=(bildbreite +-anzspaltentrenner-spalte3breite)DIV 2,spalte2bildbreite:=spalte1bildbreite;# +bildsatzzahl:=(bildlaenge-ausgkopflaenge)DIV ausgfeldlaenge,bildblocklaenge:= +(bildsatzzahl+1)DIV 2;#INT VAR spalte1druckbreite,spalte2druckbreite, +druckzeilenzahl,bildanf,eingabestatus,aktuelleindexnr;TEXT VAR schuljahr, +schuelername,schuelerrufname,schuelernamenszus,schuelerherkschule, +schuelerherkklasse,schuelernameaufber,jahrgang,#sortbest,#anfbuchstabe, +neueranfbuchstabe,startwert,bearbeitetwerdenschulen,bearbeitetwerdenschueler; +TEXT VAR druckstrich;TEXT CONST bildstrich:=bildbreite*mittestrich;AUSGFELD +VAR ausgfeld;AUSGKOPF VAR ausgkopf;BOOL VAR sortalpha,jgst5,jgst11;BOOL PROC +multistop:BOOL VAR b;IF jgst5THEN b:=wert(fnrsustatuss)="n05"ELIF jgst11THEN +b:=wert(fnrsustatuss)="n11"ELSE b:=wert(fnrsustatuss)="nso"FI ;bENDPROC +multistop;BOOL PROC multistopsim:BOOL VAR b:=multistop;setzebestandende(NOT b +);bENDPROC multistopsim;PROC neuanlispezielleteile(INT CONST nr):SELECT nrOF +CASE 1:neuanlidialogvorbereitenCASE 2:neuanlieingabenrichtigCASE 3: +neuanlilistenvorbereitenCASE 4:neuanlidruckvorbereitenCASE 5: +neuanliseitedruckenCASE 6:neuanlibildschirmvorbereitenCASE 7: +neuanliseitezeigenENDSELECT .END PROC neuanlispezielleteile;PROC +neuanlidialogvorbereiten:setzeanfangswerte(neuanlieingangsmaske,neuanlianfpos +)END PROC neuanlidialogvorbereiten;PROC neuanlieingabenrichtig:LET fnrjgst5=2 +,fnrjgst11=3,fnrjgstsonst=4,fnrsortalpha=5,fnrsortschule=6,fnrausgdrucker=7, +fnrausgbild=8;standardpruefe(5,fnrjgst5,fnrjgstsonst,null,niltext, +eingabestatus);IF eingabestatus<>0THEN infeld(eingabestatus);setzeeingabetest +(FALSE )ELSE standardpruefe(5,fnrsortalpha,fnrsortschule,null,niltext, +eingabestatus);IF eingabestatus<>0THEN infeld(eingabestatus);setzeeingabetest +(FALSE )ELSE standardpruefe(5,fnrausgdrucker,fnrausgbild,null,niltext, +eingabestatus);IF eingabestatus<>0THEN infeld(eingabestatus);setzeeingabetest +(FALSE )ELSE jgst5:=standardmaskenfeld(fnrjgst5)<>niltext;jgst11:= +standardmaskenfeld(fnrjgst11)<>niltext;sortalpha:=standardmaskenfeld( +fnrsortschule)=niltext;#note("-->"+standardmaskenfeld(fnrsortschule)+"<--"); +noteline;#setzeausgabedrucker(standardmaskenfeld(fnrausgbild)=niltext); +setzeeingabetest(TRUE )FI FI FI .END PROC neuanlieingabenrichtig;PROC +neuanlilistenvorbereiten:LET fuenf="05",elf="11",sonst="sonst";BOOL VAR b:= +FALSE ;IF jgst5THEN jahrgang:=fuenf;startwert:="n05"ELSE IF jgst11THEN +jahrgang:=elf;startwert:="n11"ELSE jahrgang:=sonst;startwert:="nso"FI ;FI ; +IF sortalphaTHEN aktuelleindexnr:=ixsustatfamrufgebELSE aktuelleindexnr:= +ixsustatschulkennFI ;#note("Nr,: "+text(aktuelleindexnr));noteline;#inittupel +(dnrschueler);initobli(8);parsenooffields(21);setzeidentiwert("");putwert( +fnrsustatuss,startwert);#objektlistestarten(aktuelleindexnr,"",fnrsustatuss, +TRUE ,b);#objektlistestarten(aktuelleindexnr,"",staticfield,TRUE ,b); +setzebestandende(b).staticfield:IF sortalphaTHEN dnrschueler+1ELSE +fnrsuskennlschuleFI .END PROC neuanlilistenvorbereiten;PROC +neuanlibildschirmvorbereiten:LET fnrausganf=2,aufein="",aufaus=" ", +neuanliueberschriftneu1="Liste der Neuanmeldungen zur Jgst. ", +neuanliueberschriftneu2="Liste der sonstigen Neuanmeldungen"; +standardkopfmaskeaktualisieren(neueueberschrift);initspalten; +setzespaltenbreite(spalte1bildbreite);setzespaltenbreite(spalte2bildbreite); +setzespaltenbreite(spalte3breite);initausgabekopf(bildstrich);bildanf:= +fnrausganf;INT VAR i;FOR iFROM 1UPTO ausgkopflaengeREPEAT ausgkopf(i)IN +bildanf;bildanfINCR 1END REPEAT ;setzebildanfangsposition(bildanf). +neueueberschrift:IF (jgst5OR jgst11)THEN neuanliueberschriftneu1+aufein+ +jahrgang+aufausELSE neuanliueberschriftneu2FI .END PROC +neuanlibildschirmvorbereiten;PROC neuanliseitezeigen:blaettern(PROC (INT +CONST )schuelerzeigen,aktion,TRUE ,TRUE ,BOOL PROC multistop)END PROC +neuanliseitezeigen;PROC schuelerzeigen(INT CONST x):schuelerholen; +schueleraufbereiten;schueleraufbildschirmEND PROC schuelerzeigen;PROC +schueleraufbildschirm:INT VAR i;FOR iFROM 1UPTO ausgfeldlaengeREPEAT ausgfeld +(i)IN ausgabepos;erhoeheausgabeposumeinsEND REPEAT .END PROC +schueleraufbildschirm;PROC neuanlidruckvorbereiten:LET schluessel="Schuljahr" +,uebteil1="Folgende Schüler wurden zum Schuljahr ",uebteil2=" für die", +uebteil31="Jahrgangsstufe ",uebteil32="sonstigen Jahrgangsstufen ",uebteil4= +" angemeldet:";TEXT VAR ueberschrift1,ueberschrift2;anfbuchstabe:=blank; +druckvorbereiten;variablenfuerdrucksetzen;ueberschriftvorbereitendruck; +initdruckkopf(ueberschrift1,ueberschrift2);initspalten;setzespaltenbreite( +spalte1druckbreite);setzespaltenbreite(spalte2druckbreite);setzespaltenbreite +(spalte3breite);initausgabekopf(druckstrich);holemeldungen;inittupel( +dnrschueler);putwert(fnrsustatuss,startwert);lesenvorbereitendruck(PROC (INT +CONST ,BOOL PROC ,INT VAR )scanforward,BOOL PROC multistopsim). +variablenfuerdrucksetzen:druckstrich:=druckbreite*mittestrich; +spalte1druckbreite:=(druckbreite-anzspaltentrenner-spalte3breite)DIV 2; +spalte2druckbreite:=spalte1druckbreite;druckzeilenzahl:=drucklaenge( +ueberschriftenzeilen)-ausgkopflaenge.ueberschriftvorbereitendruck:schuljahr:= +schulkenndatum(schluessel);schuljahraufbereiten;ueberschrift1:=uebteil1+ +schuljahr+uebteil2;IF (jgst5OR jgst11)THEN ueberschrift2:=uebteil31+jahrgang+ +uebteil4ELSE ueberschrift2:=uebteil32+uebteil4FI .schuljahraufbereiten: +schuljahr:="19"+subtext(schuljahr,1,2)+"/"+subtext(schuljahr,3,4). +holemeldungen:meldungstext(mnrbearbeitetwerdenschulen,bearbeitetwerdenschulen +);meldungstext(mnrbearbeitetwerdenschueler,bearbeitetwerdenschueler).END +PROC neuanlidruckvorbereiten;PROC neuanliseitedrucken: +neuanliueberschriftdrucken;seitedrucken(PROC (INT VAR )schuelerdrucken, +druckzeilenzahl,ausgfeldlaenge,BOOL PROC multistopsim);seitenwechsel.END +PROC neuanliseitedrucken;PROC neuanliueberschriftdrucken:druckkopfschreiben; +INT VAR i;FOR iFROM 1UPTO ausgkopflaengeREPEAT druckzeileschreiben(ausgkopf(i +))END REPEAT .END PROC neuanliueberschriftdrucken;PROC schuelerdrucken(INT +VAR zeilenzaehler):LET markiert="#";schuelerholen;ggflmeldunganfbuchstabe; +schueleraufbereiten;zeilenzaehlerINCR ausgfeldlaenge;schuelerindruckdatei. +ggflmeldunganfbuchstabe:IF anfbuchstabegeaendertTHEN zwischenmeldungFI . +anfbuchstabegeaendert:IF sortalphaTHEN neueranfbuchstabe:=schuelernameSUB 1 +ELSE neueranfbuchstabe:=schuelerherkschuleSUB 1FI ;anfbuchstabe<> +neueranfbuchstabe.zwischenmeldung:IF sortalphaTHEN standardmeldung( +bearbeitetwerdenschueler,neueranfbuchstabe+markiert)ELSE standardmeldung( +bearbeitetwerdenschulen,neueranfbuchstabe+markiert)FI ;anfbuchstabe:= +neueranfbuchstabe;END PROC schuelerdrucken;PROC schuelerindruckdatei:INT VAR +i;FOR iFROM 1UPTO ausgfeldlaengeREPEAT druckzeileschreiben(ausgfeld(i))END +REPEAT .END PROC schuelerindruckdatei;PROC initausgabekopf(TEXT CONST strich) +:spaltenweise(nname);spaltenweise(schule);spaltenweise(klasse);ausgkopf(1):= +zeile;ausgkopf(2):=strich;END PROC initausgabekopf;PROC schuelerholen: +schuelername:=wert(3);schuelerrufname:=2*blank+wert(4);schuelernamenszus:= +wert(fnrsunamenszusatzs);sucheschule;schuelerherkklasse:=wert( +fnrsuklasselschule).sucheschule:putwert(fnrschkennung,wert(fnrsuskennlschule) +);search(dnrschulen,TRUE );IF dbstatus=okTHEN schuelerherkschule:=wert( +fnrschname)ELSE schuelerherkschule:=wert(fnrsuskennlschule)FI .END PROC +schuelerholen;PROC schueleraufbereiten:schuelernameaufbereiten; +schreibenameschuleklasse;schreiberufname.schreibenameschuleklasse: +spaltenweise(schuelernameaufber);spaltenweise(schuelerherkschule); +spaltenweise(schuelerherkklasse);ausgfeld(1):=zeile.schreiberufname: +spaltenweise(schuelerrufname);spaltenweise(blank);spaltenweise(blank); +ausgfeld(2):=zeile.END PROC schueleraufbereiten;PROC schuelernameaufbereiten: +schuelernameaufber:=niltext;IF schuelernamenszus<>niltextTHEN +schuelernameaufber:=schuelernamenszus+blankFI ;schuelernameaufber:= +schuelernameaufber+schuelername+komma;END PROC schuelernameaufbereiten;END +PACKET neuanlisten; + diff --git a/app/schulis/2.2.1/src/1.listen.prot versetzkonferenz b/app/schulis/2.2.1/src/1.listen.prot versetzkonferenz new file mode 100644 index 0000000..976d67c --- /dev/null +++ b/app/schulis/2.2.1/src/1.listen.prot versetzkonferenz @@ -0,0 +1,162 @@ +PACKET protversetzkonflistenDEFINES konfprolispezielleteile:LET +mnrbearbeitetwirdjgst=106,mnrbearbeitetwirdklasse=107,mnrbearbeitetwirdkurs= +108;TEXT VAR bearbeitetwirdjgst,bearbeitetwirdklasse,bearbeitetwirdkurs, +startjahr,startzug;INT VAR aktuelleindexnr;LET niltext="",nildatum="01.01.00" +,null=0,blank=" ",mittestrich="-",doppelpunkt=":",vordr1ueberarb= +"vordruck1 ueberarbeitet",vordr2ueberarb="vordruck2 ueberarbeitet", +vordr3ueberarb="vordruck3 ueberarbeitet",spalte2breite=52,anzspaltentrenner=1 +,ausgkopflaenge=3,ausgfeldlaenge=2,AUSGFELD =ROW ausgfeldlaengeTEXT , +AUSGKOPF =ROW ausgkopflaengeTEXT ,konfprolieingangsmaske= +"ms liste konfpro eingang",konfprolianfpos=2;INT VAR spalte1breite, +druckzeilenzahl,druckzeilenzahlrest,zeilenanz,schuelerzaehler,eingabestatus; +TEXT VAR konfproliueberschrift,zug,jahrgang,schuelername,schuelerrufname, +schuelernamenszus,schuelergebdat,zugangjgst,abmeldedat,schuelerjgst, +schuelerzug,vordruck,vordruckueberarbeitet,druckstrich;AUSGFELD VAR +ausgfelddruck;AUSGKOPF VAR ausgkopfdruck;BOOL VAR sek1,einjahrgang,alle, +neuesmerkmal;FILE VAR f;PROC konfprolispezielleteile(INT CONST nr):SELECT nr +OF CASE 1:konfprolidialogvorbereitenCASE 2:konfprolieingabenrichtigCASE 3: +konfprolilistenvorbereitenCASE 4:konfprolidruckvorbereitenCASE 5: +konfproliseitedruckenENDSELECT .END PROC konfprolispezielleteile;PROC +konfprolidialogvorbereiten:konfproliueberschrift:=text(vergleichsknoten); +setzeanfangswerte(konfprolieingangsmaske,konfprolianfpos).END PROC +konfprolidialogvorbereiten;PROC konfprolieingabenrichtig:LET fnrmskjgst=2, +fnrmskzug=3,auswahlnichtsinnvoll=56;sek1:=FALSE ;alle:=FALSE ;einjahrgang:= +FALSE ;jahrgang:="";zug:=compress(standardmaskenfeld(fnrmskzug));IF +standardmaskenfeld(fnrmskjgst)=niltextTHEN IF zug=niltextTHEN alle:=TRUE ; +sek1:=TRUE ;setzeausgabedrucker(TRUE );setzeeingabetest(TRUE )ELSE +meldefehler;infeld(fnrmskzug);setzeeingabetest(FALSE )FI ELSE standardpruefe( +3,fnrmskjgst,5,13,niltext,eingabestatus);IF eingabestatus<>0THEN infeld( +eingabestatus);setzeeingabetest(FALSE )ELSE jahrgang:=zweistellig( +standardmaskenfeld(fnrmskjgst));einjahrgang:=(zug=niltext);IF int(jahrgang)< +11THEN sek1:=TRUE FI ;setzeausgabedrucker(TRUE );setzeeingabetest(TRUE )FI +FI .meldefehler:standardmeldung(auswahlnichtsinnvoll,niltext).END PROC +konfprolieingabenrichtig;PROC konfprolilistenvorbereiten:BOOL VAR b:=FALSE ; +startjahr:=jahrgang;startzug:=zug;IF startjahr>"10"CAND startzug=niltextTHEN +aktuelleindexnr:=ixsustatjgstELSE aktuelleindexnr:=ixsustatjgstzugFI ; +dbstatus(ok);inittupel(dnrschueler);initobli(1);parsenooffields(19); +setzeidentiwert("");putwert(fnrsusgrpjgst,startjahr);putwert(fnrsusgrpzugtut, +startzug);putwert(fnrsustatuss,"ls");#objektlistestarten(aktuelleindexnr,"", +fnrsusgrpjgst,TRUE ,b);#objektlistestarten(aktuelleindexnr,"",staticfield, +TRUE ,b);setzebestandende(NOT multistopkonf).staticfield:IF aktuelleindexnr= +ixsustatjgstzugTHEN fnrsusgrpzugtutELSE dnrschueler+1FI .END PROC +konfprolilistenvorbereiten;PROC konfprolidruckvorbereiten:LET prevordruck= +"vordruck",postvordruck=" protokoll versetzkonf",vordr3= +"vordruck3 protokoll versetzkonf",anzvordrucke=3,manager="anschreiben server" +;INT VAR i;schuelerzaehler:=null;jahrgang:=wert(fnrsusgrpjgst);zug:=wert( +fnrsusgrpzugtut);aktuellevordruckevommanagerholen;neuesmerkmal:=TRUE ; +druckvorbereiten;variablenfuerdrucksetzen;vordruck3fuellen; +setzesonderwerteschulkenndaten;holemeldungen;putwert(dateinr(primdatid( +aktuelleindexnr))+1,"");putwert(fnrsusgrpjgst,startjahr);putwert( +fnrsusgrpzugtut,startzug);lesenvorbereitendruck(PROC (INT CONST ,BOOL PROC , +INT VAR )scanforward,BOOL PROC multistopkonfsim);initspalten; +initausgabekopfdruck.holemeldungen:meldungstext(mnrbearbeitetwirdjgst, +bearbeitetwirdjgst);meldungstext(mnrbearbeitetwirdklasse,bearbeitetwirdklasse +);meldungstext(mnrbearbeitetwirdkurs,bearbeitetwirdkurs). +aktuellevordruckevommanagerholen:FOR iFROM 1UPTO anzvordruckeREP forget( +prevordruck+text(i)+postvordruck,quiet);fetch(prevordruck+text(i)+ +postvordruck,/manager);PER .variablenfuerdrucksetzen:druckstrich:=druckbreite +*mittestrich;spalte1breite:=druckbreite-anzspaltentrenner-spalte2breite. +vordruck3fuellen:vordruck:=vordr3;vordruckueberarbeitet:=vordr3ueberarb; +forget(vordruckueberarbeitet,quiet);briefalternative(vordruck, +vordruckueberarbeitet).END PROC konfprolidruckvorbereiten;PROC +initausgabekopfdruck:LET name=" :Familienname",rufname=" : Rufname", +rest1=" : :Erg. :Fächer:",rest2= +"Geb.dat.:Bem.:v/w/n :Nachpr:Gründe";hilfsfeldervorbelegen;spaltenweise(name) +;spaltenweise(rest1);ausgkopfdruck(1):=zeile;spaltenweise(rufname); +spaltenweise(rest2);ausgkopfdruck(2):=zeile;ausgkopfdruck(3):=druckstrich. +hilfsfeldervorbelegen:setzespaltentrenner(blank);setzespaltenbreite( +spalte1breite);setzespaltenbreite(spalte2breite).END PROC +initausgabekopfdruck;PROC konfproliseitedrucken:LET listewirdgedruckt=58; +konfproliueberschriftdrucken;seitedrucken(PROC (INT VAR )schuelerdatendrucken +,druckzeilenzahl,ausgfeldlaenge,PROC bestandendesimulierenbeimerkmalwechsel, +BOOL PROC multistopkonfsim);IF neuesmerkmalTHEN simuliertesendezuruecknehmen; +konfproliunterschriftdrucken;meldelistewirdgedruckt;drucknachbereiten; +schuelerzaehler:=null;neuelistevorbereitenELIF NOT bestandendeTHEN +seitenwechselFI .simuliertesendezuruecknehmen:setzebestandende(FALSE ). +meldelistewirdgedruckt:standardmeldung(listewirdgedruckt,niltext). +neuelistevorbereiten:druckvorbereiten.END PROC konfproliseitedrucken;PROC +konfproliueberschriftdrucken:LET vordr1="vordruck1 protokoll versetzkonf", +vordr2="vordruck2 protokoll versetzkonf",anzleerzeilen=2,markiert="#";INT +VAR i;TEXT VAR klassejgstaufber;IF neuesmerkmalTHEN +zwischenmeldungundvordruckefuellenFI ;vordruck1schreiben;IF neuesmerkmalTHEN +vordruck2schreibenFI ;leerzeilenschreiben;ausgabekopfschreiben. +zwischenmeldungundvordruckefuellen:LET swiklassebzwjgst=511, +swianwesendelehrer=512,klasse="Klasse ",kurs="Tutorenkurs ",jgst="Jgst. "; +klassejgstaufber:=jahrgang;IF (alleOR einjahrgang)AND NOT sek1THEN +standardmeldung(bearbeitetwirdjgst,klassejgstaufber+markiert); +klassejgstaufber:=jgst+klassejgstaufberELSE klassejgstaufber:= +klassejgstaufber+blank+zug;IF sek1THEN standardmeldung(bearbeitetwirdklasse, +klassejgstaufber+markiert);klassejgstaufber:=klasse+klassejgstaufberELSE +standardmeldung(bearbeitetwirdkurs,klassejgstaufber+markiert); +klassejgstaufber:=kurs+klassejgstaufberFI ;FI ;festesonderwertesetzen; +vordruck:=vordr1;vordruckueberarbeitet:=vordr1ueberarb;forget( +vordruckueberarbeitet,quiet);briefalternative(vordruck,vordruckueberarbeitet) +;vordruck:=vordr2;vordruckueberarbeitet:=vordr2ueberarb;forget( +vordruckueberarbeitet,quiet);briefalternative(vordruck,vordruckueberarbeitet) +.festesonderwertesetzen:setzesonderwert(swiklassebzwjgst,klassejgstaufber); +setzesonderwert(swianwesendelehrer,blank).vordruck2schreiben: +vordruckueberarbeitet:=vordr2ueberarb;f:=sequentialfile(input, +vordruckueberarbeitet);zeilenanz:=lines(f);FOR iFROM 1UPTO zeilenanzREP +getline(f,ausgfelddruck(1));druckzeileschreiben(ausgfelddruck(1));PER ; +druckzeilenzahlDECR zeilenanz.leerzeilenschreiben:FOR iFROM 1UPTO +anzleerzeilenREP druckzeileschreiben(blank)PER ;druckzeilenzahlDECR +anzleerzeilen.ausgabekopfschreiben:FOR iFROM 1UPTO ausgkopflaengeREP +druckzeileschreiben(ausgkopfdruck(i))PER ;druckzeilenzahlDECR ausgkopflaenge; +druckzeilenzahlrest:=druckzeilenzahl.END PROC konfproliueberschriftdrucken; +PROC konfproliunterschriftdrucken:INT VAR i;vordruck3holen;vordruck3schreiben +.vordruck3holen:vordruckueberarbeitet:=vordr3ueberarb;f:=sequentialfile(input +,vordruckueberarbeitet);zeilenanz:=lines(f).vordruck3schreiben:IF zeilenanz> +druckzeilenzahlrestTHEN seitenwechselmitneuemkopfFI ;FOR iFROM 1UPTO +zeilenanzREP getline(f,ausgfelddruck(1));druckzeileschreiben(ausgfelddruck(1) +);PER ;druckzeilenzahlrestDECR zeilenanz.seitenwechselmitneuemkopf: +seitenwechsel;vordruck1schreiben;druckzeilenzahlrest:=druckzeilenzahl; +vordruck3holen.END PROC konfproliunterschriftdrucken;PROC vordruck1schreiben: +INT VAR i;druckzeilenzahl:=drucklaenge;vordruckueberarbeitet:=vordr1ueberarb; +f:=sequentialfile(input,vordruckueberarbeitet);zeilenanz:=lines(f);FOR iFROM +1UPTO zeilenanzREP getline(f,ausgfelddruck(1));druckzeileschreiben( +ausgfelddruck(1));PER ;druckzeilenzahlDECR zeilenanz.END PROC +vordruck1schreiben;PROC schuelerdatendrucken(INT VAR zeilenzaehler): +schuelerdatenholen;schuelerdatenaufbereiten;zeilenzaehlerINCR ausgfeldlaenge; +schuelerdatenindruckdatei.END PROC schuelerdatendrucken;PROC +schuelerdatenholen:schuelername:=wert(fnrsufamnames);schuelerrufname:=wert( +fnrsurufnames);schuelernamenszus:=wert(fnrsunamenszusatzs);schuelergebdat:= +wert(fnrsugebdatums);zugangjgst:=wert(fnrsuartzugang);abmeldedat:=wert( +fnrsuabgdats);schuelerjgst:=wert(fnrsusgrpjgst);schuelerzug:=wert( +fnrsusgrpzugtut).END PROC schuelerdatenholen;PROC schuelerdatenaufbereiten: +LET unterstrich="_",bem1="w",bem2="x",abgemeldet="ab",gebdatlaenge=8, +zugangjgstlaenge=4,ausgleich1=3,ausgleich2=2,abgemlaenge1=4,abgemlaenge2=2, +rest1=": : :",rest2=":______:______:________________________"; +schuelerzaehlerINCR 1;schreibenamegebdatbemerkungen. +schreibenamegebdatbemerkungen:setzespaltentrenner(blank);spaltenweise( +schuelernameundnraufber);spaltenweise(schuelerbemteil1aufber);ausgfelddruck(1 +):=zeile;setzespaltentrenner(unterstrich);spaltenweise(schuelerrufnameaufber) +;spaltenweise(schuelerbemteil2aufber);ausgfelddruck(2):=zeile. +schuelernameundnraufber:IF schuelernamenszus=niltextTHEN nr+doppelpunkt+ +schuelernameELSE nr+doppelpunkt+schuelernamenszus+blank+schuelernameFI .nr:( +ausgleich1-length(text(schuelerzaehler)))*blank+text(schuelerzaehler). +schuelerbemteil1aufber:gebdatlaenge*blank+doppelpunkt+zugangjgstaufber+rest1. +zugangjgstaufber:IF (zugangjgst=bem1)OR (zugangjgst=bem2)THEN zugangjgst+( +zugangjgstlaenge-length(zugangjgst))*blankELSE zugangjgstlaenge*blankFI . +schuelerrufnameaufber:ausgleich1*unterstrich+doppelpunkt+ausgleich2* +unterstrich+schuelerrufname+anzunterstriche*unterstrich. +schuelerbemteil2aufber:schuelergebdat+doppelpunkt+abgemeldetaufber+rest2. +anzunterstriche:spalte1breite-ausgleich2-length(schuelerrufname). +abgemeldetaufber:IF abmeldedat=nildatumTHEN abgemlaenge1*unterstrichELSE +abgemeldet+abgemlaenge2*unterstrichFI .END PROC schuelerdatenaufbereiten; +PROC schuelerdatenindruckdatei:INT VAR i;FOR iFROM 1UPTO ausgfeldlaengeREP +druckzeileschreiben(ausgfelddruck(i))PER ;druckzeilenzahlrestDECR +ausgfeldlaenge.END PROC schuelerdatenindruckdatei;PROC +bestandendesimulierenbeimerkmalwechsel:IF bestandendeTHEN neuesmerkmal:= +FALSE ;konfproliunterschriftdruckenELSE nochklassebzwjgstzubearbeiten;IF +neuesmerkmalTHEN setzebestandende(TRUE )FI ;FI .nochklassebzwjgstzubearbeiten +:jahrgang:=wert(fnrsusgrpjgst);zug:=wert(fnrsusgrpzugtut);neuesmerkmal:= +neuejgst;IF neuesmerkmalAND int(jahrgang)>10THEN sek1:=FALSE FI ;IF sek1THEN +neuesmerkmal:=neuesmerkmalOR neuerzugFI .neuejgst:schuelerjgst<>jahrgang. +neuerzug:schuelerzug<>zug.END PROC bestandendesimulierenbeimerkmalwechsel; +BOOL PROC multistopkonf:BOOL VAR b:=#TRUE ;#FALSE ;IF wert(fnrsustatuss)="ls" +THEN b:=TRUE ;IF startjahr<>""THEN IF startzug=niltextTHEN b:=(wert( +fnrsusgrpjgst)=startjahr)ELSE b:=(wert(fnrsusgrpzugtut)=startzugAND wert( +fnrsusgrpjgst)=startjahr)FI ;FI ;FI ;bEND PROC multistopkonf;BOOL PROC +multistopkonfsim:BOOL VAR b:=multistopkonf;setzebestandende(NOT b);bENDPROC +multistopkonfsim;END PACKET protversetzkonflisten; + diff --git a/app/schulis/2.2.1/src/1.listen.wiederholer b/app/schulis/2.2.1/src/1.listen.wiederholer new file mode 100644 index 0000000..e0541d2 --- /dev/null +++ b/app/schulis/2.2.1/src/1.listen.wiederholer @@ -0,0 +1,160 @@ +PACKET versetzlistenDEFINES verslispezielleteile:LET schluesselwiederholer= +"w";INT CONST mnrbearbeitetwirdjgst:=106,nurimzweitenhj:=193;TEXT VAR +bearbeitetwirdjgst:="",aktuellesschuljahr:="",endewertjgst:="",startwertjgst +:="";LET niltext="",nildatum="01.01.00",blank=" ",mittestrich="-",null=0, +komma=",",ueberschriftenzeilen=2,spalte1breitesek1=5,spalte3breitesek1=32, +spalte1breitesek2=8,spalte3breitesek2=25,anzspaltentrenner=2,spaltentrenner= +":",ausgkopflaenge=3,ausgfeldlaenge=1,AUSGFELD =ROW ausgfeldlaengeTEXT , +AUSGKOPF =ROW ausgkopflaengeTEXT ,verslieingangsmaske= +"ms liste versetz nachpr eingang",verslianfpos=2;INT CONST +spalte2bildbreitesek1:=bildbreite-anzspaltentrenner-spalte1breitesek1- +spalte3breitesek1,spalte2bildbreitesek2:=bildbreite-anzspaltentrenner- +spalte1breitesek2-spalte3breitesek2;INT VAR spalte2druckbreite, +druckzeilenzahl,bildanf,eingabestatus,breite;TEXT VAR versliueberschrift, +jahr1,jahr2,schuelername,schuelerrufname,schuelernamenszus,schuelerjgst, +schuelerzug,schuelerabdat,ortsteil,erstesprache,religionsunt,kuodermu,jgst, +neuejgst,klasse,neueklasse;TEXT VAR druckstrich;TEXT CONST bildstrich:= +bildbreite*mittestrich;AUSGFELD VAR ausgfeld;AUSGKOPF VAR ausgkopf;BOOL VAR +sek1,sek2,ersteraufbildschirm,klassegeaendert:=FALSE ;PROC +verslispezielleteile(INT CONST nr):SELECT nrOF CASE 1:verslidialogvorbereiten +CASE 2:verslieingabenrichtigCASE 3:verslilistenvorbereitenCASE 4: +verslidruckvorbereitenCASE 5:versliseitedruckenCASE 6: +verslibildschirmvorbereitenCASE 7:versliseitezeigenENDSELECT .END PROC +verslispezielleteile;PROC verslidialogvorbereiten:versliueberschrift:=text( +vergleichsknoten);setzeanfangswerte(verslieingangsmaske,verslianfpos); +reinitparsingEND PROC verslidialogvorbereiten;PROC verslieingabenrichtig:LET +fnrsek1=2,fnrsek2=3,fnrjgst=4,fnrausgdrucker=5,fnrausgbild=6, +auswahlnichtsinnvoll=56;IF int(schulkenndatum("Schulhalbjahr"))=1THEN +standardmeldung(nurimzweitenhj,"2.#");setzeeingabetest(FALSE )ELSE +wohinpruefenFI .wohinpruefen:standardpruefe(5,fnrausgdrucker,fnrausgbild,null +,niltext,eingabestatus);IF eingabestatus<>0THEN infeld(eingabestatus); +setzeeingabetest(FALSE )ELSE waspruefenFI .waspruefen:sek1:=FALSE ;sek2:= +FALSE ;jgst:="";IF standardmaskenfeld(fnrjgst)=niltextTHEN standardpruefe(5, +fnrsek1,fnrsek2,null,niltext,eingabestatus);IF eingabestatus<>0THEN infeld( +eingabestatus);setzeeingabetest(FALSE )ELSE sek1:=standardmaskenfeld(fnrsek2) +=niltext;sek2:=NOT sek1;setzeausgabedrucker(standardmaskenfeld(fnrausgbild)= +niltext);setzeeingabetest(TRUE )FI ;ELSE IF (standardmaskenfeld(fnrsek1)= +niltext)AND (standardmaskenfeld(fnrsek2)=niltext)THEN standardpruefe(3, +fnrjgst,5,13,niltext,eingabestatus);IF eingabestatus<>0THEN infeld( +eingabestatus);setzeeingabetest(FALSE )ELSE jgst:=zweistellig( +standardmaskenfeld(fnrjgst));setzeausgabedrucker(standardmaskenfeld( +fnrausgbild)=niltext);setzeeingabetest(TRUE )FI ;ELSE meldefehler;infeld( +fnrsek1);setzeeingabetest(FALSE )FI ;FI .meldefehler:standardmeldung( +auswahlnichtsinnvoll,niltext).END PROC verslieingabenrichtig;PROC +verslilistenvorbereiten:BOOL VAR b;LET schluessel="Schuljahr"; +aktuellesschuljahrermitteln;startwertjgstbestimmen;inittupel( +dnrhalbjahresdaten);initobli(16);setzeidentiwert("");startwertesetzen; +objektlistestarten(ixhjdversjhjjgstkenn,"",fnrhjdjgst,TRUE ,b); +setzebestandende(NOT multistopniverCOR b).aktuellesschuljahrermitteln: +aktuellesschuljahr:=schulkenndatum(schluessel);jahr1:=subtext( +aktuellesschuljahr,1,2);jahr2:=subtext(aktuellesschuljahr,3,4). +startwertjgstbestimmen:endewertjgst:=endeberechnung;startwertjgst:= +anfangsberechnung;.anfangsberechnung:IF sek1THEN "05"ELIF sek2THEN "11"ELSE +jgstFI .endeberechnung:IF sek1THEN "11"ELIF sek2THEN "14"ELSE text(int(jgst)+ +1)FI .startwertesetzen:putwert(fnrhjdversetzung,schluesselwiederholer); +putwert(fnrhjdjgst,startwertjgst);putwert(fnrhjdsj,aktuellesschuljahr); +putintwert(fnrhjdhj,2).END PROC verslilistenvorbereiten;BOOL PROC +multistopniver:BOOL VAR b;b:=wiederholerundrichtigesdatumCAND int(wert( +fnrhjdjgst))>=int(startwertjgst)CAND int(wert(fnrhjdjgst))<#=#int( +endewertjgst);b.wiederholerundrichtigesdatum:wert(fnrhjdversetzung)= +schluesselwiederholerCAND wert(fnrhjdsj)=aktuellesschuljahrCAND wert(fnrhjdhj +)="2".ENDPROC multistopniver;BOOL PROC multistopniversim:BOOL VAR b:= +multistopniver;setzebestandende(NOT b);bENDPROC multistopniversim;PROC +verslibildschirmvorbereiten:LET fnrausganf=2;standardkopfmaskeaktualisieren( +versliueberschrift);breite:=bildbreite;initspalten;setzespaltentrenner( +spaltentrenner);IF elementsek1THEN setzespaltenbreitensek1( +spalte2bildbreitesek1);initausgabekopfsek1(bildstrich)ELSE +setzespaltenbreitensek2(spalte2bildbreitesek2);initausgabekopfsek2(bildstrich +)FI ;bildanf:=fnrausganf;INT VAR i;FOR iFROM 1UPTO ausgkopflaengeREPEAT +ausgkopf(i)IN bildanf;bildanfINCR 1END REPEAT ;klasse:=niltext; +setzebildanfangsposition(bildanf).END PROC verslibildschirmvorbereiten;PROC +versliseitezeigen:setzescanstartwert(startwertjgst);setzescanendewert( +endewertjgstpluseinsbeigleichheit);blaettern(PROC (INT CONST )schuelerzeigen, +aktion,TRUE ,TRUE ,BOOL PROC multistopniver);setzescanstartwert(""); +setzescanendewert("�").endewertjgstpluseinsbeigleichheit:IF startwertjgst= +endewertjgstTHEN text(int(endewertjgst)+1)ELSE endewertjgstFI .END PROC +versliseitezeigen;PROC schuelerzeigen(INT CONST x):schuelerholen;IF +ersteraufbildschirmTHEN klassegeaendert:=TRUE ;ersteraufbildschirm:=FALSE FI +;schueleraufbereiten;schueleraufbildschirm.END PROC schuelerzeigen;PROC +schueleraufbildschirm:INT VAR i;FOR iFROM 1UPTO ausgfeldlaengeREPEAT ausgfeld +(i)IN ausgabepos;erhoeheausgabeposumeinsEND REPEAT .END PROC +schueleraufbildschirm;PROC verslidruckvorbereiten:LET uebteil11= +"Liste der nicht versetzten Schüler, ",uebteil12="Sek.I",uebteil13="Sek.II", +uebteil14="Jgst. ",uebteil2="Schuljahr: ";TEXT VAR ueberschrift1, +ueberschrift2;ueberschriftvorbereitendruck;jgst:=niltext;klasse:=niltext; +druckvorbereiten;variablenfuerdrucksetzen;initdruckkopf(ueberschrift1, +ueberschrift2);breite:=druckbreite;initspalten;setzespaltentrenner( +spaltentrenner);IF elementsek1THEN setzespaltenbreitensek1(spalte2druckbreite +);initausgabekopfsek1(druckstrich)ELSE setzespaltenbreitensek2( +spalte2druckbreite);initausgabekopfsek2(druckstrich)FI ;holemeldungen; +setzewerte;lesenvorbereitendruck(PROC (INT CONST ,BOOL PROC ,INT VAR ) +scanforward,BOOL PROC multistopniversim).holemeldungen:meldungstext( +mnrbearbeitetwirdjgst,bearbeitetwirdjgst).setzewerte:inittupel( +dnrhalbjahresdaten);putwert(fnrhjdversetzung,schluesselwiederholer);putwert( +fnrhjdjgst,startwertjgst);putwert(fnrhjdsj,aktuellesschuljahr);putintwert( +fnrhjdhj,2).ueberschriftvorbereitendruck:ueberschrift1:=uebteil11;IF sek1 +THEN ueberschrift1:=ueberschrift1+uebteil12ELSE IF sek2THEN ueberschrift1:= +ueberschrift1+uebteil13ELSE ueberschrift1:=ueberschrift1+uebteil14+jgstFI ; +FI ;ueberschrift2:=uebteil2+aufbereitetesschuljahr.aufbereitetesschuljahr: +"19"+jahr1+"/"+jahr2.variablenfuerdrucksetzen:druckstrich:=druckbreite* +mittestrich;spalte2druckbreite:=druckbreite-anzspaltentrenner;IF elementsek1 +THEN spalte2druckbreite:=spalte2druckbreite-spalte1breitesek1- +spalte3breitesek1ELSE spalte2druckbreite:=spalte2druckbreite- +spalte1breitesek2-spalte3breitesek2FI ;druckzeilenzahl:=drucklaenge( +ueberschriftenzeilen)-ausgkopflaenge.END PROC verslidruckvorbereiten;PROC +versliseitedrucken:versliueberschriftdrucken;seitedrucken(PROC (INT VAR ) +schuelerdrucken,druckzeilenzahl,ausgfeldlaenge,BOOL PROC multistopniversim); +seitenwechsel.END PROC versliseitedrucken;PROC versliueberschriftdrucken: +druckkopfschreiben;INT VAR i;FOR iFROM 1UPTO ausgkopflaengeREPEAT +druckzeileschreiben(ausgkopf(i))END REPEAT .END PROC +versliueberschriftdrucken;PROC schuelerdrucken(INT VAR zeilenzaehler):LET +markiert="#";schuelerholen;IF zeilenzaehler=nullTHEN klassegeaendert:=TRUE +FI ;ggflmeldungjgst;schueleraufbereiten;zeilenzaehlerINCR ausgfeldlaenge; +schuelerindruckdatei.ggflmeldungjgst:IF jgstgeaendertTHEN zwischenmeldungFI . +jgstgeaendert:neuejgst:=schuelerjgst;jgst<>neuejgst.zwischenmeldung: +standardmeldung(bearbeitetwirdjgst,neuejgst+markiert);jgst:=neuejgst;END +PROC schuelerdrucken;PROC schuelerindruckdatei:INT VAR i;FOR iFROM 1UPTO +ausgfeldlaengeREPEAT druckzeileschreiben(ausgfeld(i))END REPEAT .END PROC +schuelerindruckdatei;PROC setzespaltenbreitensek1(INT CONST spalte2breitesek1 +):setzespaltenbreite(spalte1breitesek1);setzespaltenbreite(spalte2breitesek1) +;setzespaltenbreite(spalte3breitesek1);END PROC setzespaltenbreitensek1;PROC +setzespaltenbreitensek2(INT CONST spalte2breitesek2):setzespaltenbreite( +spalte1breitesek2);setzespaltenbreite(spalte2breitesek2);setzespaltenbreite( +spalte3breitesek2);END PROC setzespaltenbreitensek2;PROC initausgabekopfsek1( +TEXT CONST strich):LET jgst="Jgst.",zug=" Zug",name="Name",rest1= +"Orts-:Rel.: L : KU : Klasse",rest2="teil :unt.: F : MU :Wunsch:neu"; +spaltenweise(jgst);spaltenweise(blank);spaltenweise(rest1);ausgkopf(1):=zeile +;spaltenweise(zug);spaltenweise(name);spaltenweise(rest2);ausgkopf(2):=zeile; +ausgkopf(3):=strich;END PROC initausgabekopfsek1;PROC initausgabekopfsek2( +TEXT CONST strich):LET jgst="Jgst.",tutor=" Tutor",name="Name",rest1= +"Abmeldung";spaltenweise(jgst);spaltenweise(blank);spaltenweise(blank); +ausgkopf(1):=zeile;spaltenweise(tutor);spaltenweise(name);spaltenweise(rest1) +;ausgkopf(2):=zeile;ausgkopf(3):=strich;END PROC initausgabekopfsek2;PROC +schuelerholen:sucheschueler;schuelername:=wert(fnrsufamnames);schuelerrufname +:=wert(fnrsurufnames);schuelernamenszus:=wert(fnrsunamenszusatzs); +schuelerjgst:=wert(fnrhjdjgst);schuelerzug:=wert(fnrhjdkennung);schuelerabdat +:=wert(fnrsuabgdats);IF elementsek1THEN ortsteil:=wert(fnrsuortsteils); +erstesprache:=wert(fnrdd1fremdfach);religionsunt:=wert(fnrddreliunter); +kuodermu:=wert(fnrddkunstmusik)FI ;neueklasse:=schuelerjgst+schuelerzug; +klassegeaendert:=klasse<>neueklasse;klasse:=neueklasse.sucheschueler: +uebernehmewerte;search(dnrschueler,TRUE );IF dbstatus=okTHEN readtid( +dnrdiffdaten,zugriff(fnrsutiddiffdaten))ELSE inittupel(dnrdiffdaten)FI . +uebernehmewerte:putwert(fnrsufamnames,wert(fnrhjdfamnames));putwert( +fnrsurufnames,wert(fnrhjdrufnames));putwert(fnrsugebdatums,wert(fnrhjdgebdats +)).END PROC schuelerholen;PROC schueleraufbereiten:LET abgemsek1="abgem.", +abgemsek2="abgemeldet";schreibeklassenamerest.schreibeklassenamerest: +spaltenweise(aufbschuelerklasse);spaltenweise(aufbschuelername);spaltenweise( +aufbrest);ausgfeld(1):=zeile.aufbschuelerklasse:IF klassegeaendertTHEN +schuelerjgst+blank+schuelerzugELSE blankFI .aufbschuelername:IF +schuelernamenszus=niltextTHEN schuelername+komma+blank+schuelerrufnameELSE +schuelernamenszus+blank+schuelername+komma+blank+schuelerrufnameFI .aufbrest: +IF elementsek1THEN ganzerrestsek1ELSE abmeldungsek2FI .ganzerrestsek1:blank+ +text(ortsteil,3)+blank+spaltentrenner+blank+text(religionsunt,2)+blank+ +spaltentrenner+blank+text(erstesprache,1)+blank+spaltentrenner+blank+text( +kuodermu,2)+blank+spaltentrenner+abmeldungsek1.abmeldungsek1:IF ( +schuelerabdat=niltext)OR (schuelerabdat=nildatum)THEN text(blank,6)+ +spaltentrennerELSE abgemsek1+spaltentrenner+blank+mittestrichFI . +abmeldungsek2:IF (schuelerabdat=niltext)OR (schuelerabdat=nildatum)THEN blank +ELSE abgemsek2FI .END PROC schueleraufbereiten;BOOL PROC elementsek1:sek1COR +int(startwertjgst)<11ENDPROC elementsek1;END PACKET versetzlisten; + diff --git a/app/schulis/2.2.1/src/1.listenweise dif dat erf b/app/schulis/2.2.1/src/1.listenweise dif dat erf new file mode 100644 index 0000000..0ef8cfd --- /dev/null +++ b/app/schulis/2.2.1/src/1.listenweise dif dat erf @@ -0,0 +1,255 @@ +PACKET listenweisedifdaterfDEFINES bearbeitungdifdaterf, +difdaterfnichtspeichern,difdaterfspeichern:LET tofather=1,tograndfather=2, +maxsek1="10",niltext="",blank=" ",namenstrenner=", ",null=0,meldtrenner="#"; +LET maskennamepreallg="ms dif dat erf bearbeitung";LET jgst5=5,jgst13=13, +standardanfang=1;LET maxschueler=14,schuelerproseite=15;LET meldbestleer=59, +meldnichtspeichern=63,meldplausi=57,meldwarten=69,meldspeicherung=132, +meldspeicherfehler=131,meldnrfalschesdatum=157,meldnrfalscherschluessel=34; +LET pruefartalternative=5,pruefartgrenzen=3;LET fnrjgst=2,fnrtutor=3,fnrfs1=4 +,fnrag=12,fnrmaskentitel=3,fnrklasse=2;LET mnr1=1,mnr2=2,mnr3=3,mnr4=4,mnr5=5 +,titel09="09",titel10="10",ef1=4,fpz1=4,ef2=3,fpz3=2,fpz4=5;LET awfs1=1,awfs2 +=2,awfs3=3,awfs4=4,awreli=5,awkunst=6,awwp9=7,awwp10=8,awag=9, +auswertungsdistanz=3;LET maxag=3;LET allespruefen=1,einejgstpruefen=2, +eineklassepruefen=3;LET schuelerbestand="ls";LET logtextbeginn="Anw. 1.4.2 ", +logtextalleklassen="alle Klassen";LET logtext1=".Fremdsprache",logtext2= +"Teilnahme am Religionsunterricht",logtext3="Kunst/Musik",logtext4= +"Wahlpflichtfächer",logtext5="Arbeitsgemeinschaften";TEXT VAR logarttext; +BOOL VAR nochwelcheda,alleklassen,tutorenkurs,sek2,eineklasse, +nochweiterebestaende,einejgst;INT VAR fremdsprachenindex,wpindex,waspruefen, +erstesfeld,felderprozeile,standardeinstieg,laengename,laengeklasse, +schuelerzahl,aktuellesfeld,auswertungsnr;ROW schuelerproseiteTEXT VAR name; +ROW schuelerproseiteTEXT VAR rufname;ROW schuelerproseiteTEXT VAR gebdat;ROW +schuelerproseiteTEXT VAR altedaten;TEXT VAR vergleichsjgst,vergleichszug, +sicherungstupel;PROC bearbeitungdifdaterf:TEXT VAR jgst,zug;reinitparsing; +eingangsbildschirmpruefen;IF eingangsbildschirmokTHEN +initialisierungenvornehmen;naechsteportionlesen;IF keinemehrdaTHEN +bestandleermelden;enter(tofather)ELSE standardnprocFI ELSE +eingangsmaskenfehler;return(tofather)FI .eingangsbildschirmok:pruefstatus=0. +eingangsbildschirmpruefen:ankreuzfelderpruefen;IF eingangsbildschirmokTHEN +jgstzugpruefenFI .ankreuzfelderpruefen:INT VAR pruefstatus;standardpruefe( +pruefartalternative,fnrfs1,fnrag,null,niltext,pruefstatus);.jgstzugpruefen: +alleklassen:=FALSE ;IF standardmaskenfeld(fnrjgst)<>niltextTHEN +standardpruefe(pruefartgrenzen,fnrjgst,jgst5,jgst13,niltext,pruefstatus)ELIF +standardmaskenfeld(fnrtutor)<>niltextTHEN pruefstatus:=fnrtutorELSE +alleklassen:=TRUE FI .initialisierungenvornehmen:bestandundmaskesetzen; +bearbeitungsmaskevorbereiten;laengenfestlegen;IF sek2CAND NOT tutorenkurs +THEN startebildschirmblock(ixsustatjgst,maxschueler)ELSE +startebildschirmblock(ixsustatjgstzug,maxschueler)FI . +bearbeitungsmaskevorbereiten:standardstartproc(maskennamepreallg+text( +auswertungsmaskennr));IF maskentitel<>niltextTHEN standardmaskenfeld( +maskentitel,fnrmaskentitel)FI ;SELECT auswertungsmaskennrOF CASE mnr1: +erstesfeld:=ef1;felderprozeile:=fpz1CASE mnr2:erstesfeld:=ef2;felderprozeile +:=fpz1CASE mnr3:erstesfeld:=ef2;felderprozeile:=fpz3CASE mnr4:erstesfeld:=ef1 +;felderprozeile:=fpz4CASE mnr5:erstesfeld:=ef2;felderprozeile:=fpz1END +SELECT ;standardeinstieg:=erstesfeld+1.laengenfestlegen:laengeklasse:= +standardfeldlaenge(fnrklasse);laengename:=standardfeldlaenge(erstesfeld). +naechsteportionlesen:blocklesenundausgeben.keinemehrda:NOT nochwelcheda. +bestandleermelden:standardmeldung(meldbestleer,niltext).eingangsmaskenfehler: +#standardmeldung(meldfalscheauswahl,niltext);#infeld(pruefstatus). +bestandundmaskesetzen:standardmeldung(meldwarten,niltext);bestimmebestand; +setzestartkeys;pruefebestand;bestimmemaske.bestimmebestand:eineklasse:=FALSE +;einejgst:=FALSE ;jgst:=jgstaufber(standardmaskenfeld(fnrjgst));zug:= +standardmaskenfeld(fnrtutor);IF alleklassenTHEN alleklassensetzenELIF +nureineklasseTHEN setzeklasseELSE setzejgstFI .alleklassensetzen:waspruefen:= +allespruefen;sek2:=FALSE ;vergleichsjgst:=niltext;infeld(fnrjgst). +nureineklasse:tutorenkurs:=zug<>niltext;tutorenkurs.setzeklasse:eineklasse:= +TRUE ;waspruefen:=eineklassepruefen;vergleichsjgst:=jgst;vergleichszug:=zug; +sek2:=FALSE ;infeld(fnrtutor).setzejgst:sek2:=istsek2(jgst);einejgst:=TRUE ; +waspruefen:=einejgstpruefen;vergleichsjgst:=jgst;infeld(fnrjgst). +setzestartkeys:inittupel(dnrschueler);putwert(fnrsustatuss,schuelerbestand); +putwert(fnrsusgrpjgst,jgst);putwert(fnrsusgrpzugtut,zug);.pruefebestand: +search(ixsustatjgstzug,FALSE );IF dbstatus=nullCAND (pruefungspeziell( +waspruefen))THEN vergleichsjgst:=wert(fnrsusgrpjgst);vergleichszug:=wert( +fnrsusgrpzugtut);nochwelcheda:=TRUE ;IF alleklassenTHEN waspruefen:= +eineklassepruefenELIF NOT sek2CAND waspruefen=einejgstpruefenTHEN waspruefen +:=eineklassepruefenFI ELSE bestandleermelden;return(tofather);LEAVE +bearbeitungdifdaterfFI .bestimmemaske:setzeauswertungsnr;SELECT auswertungsnr +OF CASE awfs1,awfs2,awfs3,awfs4:auswertungfremdspracheCASE awreli: +auswertungreliCASE awkunst:auswertungkunstCASE awwp9:auswertungwp9CASE awwp10 +:auswertungwp10CASE awag:auswertungagEND SELECT .auswertungfremdsprache:INT +VAR auswertungsmaskennr:=mnr1;maskentitel:=text(auswertungsnr);logarttext:= +maskentitel;logarttextCAT logtext1.auswertungreli:auswertungsmaskennr:=mnr2; +logarttext:=logtext2.auswertungkunst:auswertungsmaskennr:=mnr3;logarttext:= +logtext3.auswertungwp9:auswertungsmaskennr:=mnr4;maskentitel:=titel09; +logarttext:=logtext4.auswertungwp10:auswertungsmaskennr:=mnr4;maskentitel:= +titel10;logarttext:=logtext4.auswertungag:auswertungsmaskennr:=mnr5; +logarttext:=logtext5.setzeauswertungsnr:INT VAR indauswertungsnr;TEXT VAR +maskentitel:=niltext;FOR indauswertungsnrFROM fnrfs1UPTO fnragREP IF +standardmaskenfeld(indauswertungsnr)<>niltextTHEN auswertungsnr:= +indauswertungsnr-auswertungsdistanz;LEAVE setzeauswertungsnrFI PER .END PROC +bearbeitungdifdaterf;PROC difdaterfnichtspeichern:nichtspeichernmelden; +startkeyssetzen;neuerblock.nichtspeichernmelden:standardmeldung( +meldnichtspeichern,niltext);pause(10).startkeyssetzen:restoretupel( +dnrschueler,sicherungstupel);changeindex.END PROC difdaterfnichtspeichern; +PROC difdaterfspeichern:BOOL VAR falschesdatum:=FALSE ;INT VAR lv; +pruefeplausibilitaet;IF dateninordnungTHEN speicherungdurchfuehren; +startkeyssetzen;neuerblockELSE eingabefehler;return(tofather);FI . +pruefeplausibilitaet:BOOL VAR dateninordnung:=TRUE ;standardmeldung( +meldplausi,niltext);aktuellesfeldvorbelegen;FOR suindFROM 1UPTO schuelerzahl +REP pruefezeile;IF NOT dateninordnungTHEN LEAVE pruefeplausibilitaetFI PER . +aktuellesfeldvorbelegen:SELECT auswertungsnrOF CASE awfs1,awfs2,awfs3,awfs4: +vorbelegungmitsprungCASE awreli:vorbelegungmitsprungCASE awkunst: +vorbelegungmitsprungCASE awwp9,awwp10:vorbelegungohnesprungCASE awag: +vorbelegungohnesprungEND SELECT .vorbelegungmitsprung:aktuellesfeld:= +erstesfeld+1-felderprozeile.vorbelegungohnesprung:aktuellesfeld:=erstesfeld. +pruefezeile:falschesdatum:=FALSE ;SELECT auswertungsnrOF CASE awfs1,awfs2, +awfs3,awfs4:ueberpruefefachmitsprungCASE awreli:ueberpruefefachmitsprungCASE +awkunst:ueberpruefefachmitsprungCASE awwp9,awwp10:ueberpruefefachinreiheCASE +awag:ueberpruefefachinreiheEND SELECT .ueberpruefefachmitsprung:aktuellesfeld +:=aktuellesfeld+felderprozeile;dateninordnung:=schluesselexistiert;IF +auswertungsnr=awreliTHEN disablestop;FOR lvFROM 1UPTO 2REP putwert( +fnrddreliunter+lv,datumskonversion(standardmaskenfeld(aktuellesfeld+lv)));IF +iserrorTHEN clearerror;falschesdatum:=TRUE ;dateninordnung:=FALSE ;enablestop +;LEAVE ueberpruefefachmitsprungFI ;PER ;enablestop;FI .ueberpruefefachinreihe +:INT VAR i;FOR iFROM 1UPTO felderprozeile-1REP aktuellesfeldINCR 1; +dateninordnung:=schluesselexistiert;IF NOT dateninordnungTHEN LEAVE +ueberpruefefachinreiheFI PER ;aktuellesfeldINCR 1.schluesselexistiert:TEXT +CONST schleintrag:=compress(subtext(standardmaskenfeld(aktuellesfeld),1,2));( +schleintrag=niltext)COR schluesselvorhanden(schleintrag). +speicherungdurchfuehren:logeintragvornehmen;aendernschleife;kurzwarten. +logeintragvornehmen:TEXT VAR eintrag:=logtextbeginn;eintragCAT logarttext; +eintragCAT " für ";IF alleklassenTHEN eintragCAT logtextalleklassenELSE +eintragCAT vergleichsjgst;eintragCAT vergleichszugFI ;logeintrag(eintrag). +kurzwarten:pause(10).aendernschleife:INT VAR suind;INT VAR zahlderaenderungen +:=null;INT VAR satzindex:=erstesfeld;FOR suindFROM 1UPTO schuelerzahlREP +behandleschuelersatz;satzindexINCR felderprozeilePER .behandleschuelersatz: +IF datenveraendertTHEN fuehreaenderungaus;meldevollzugFI .fuehreaenderungaus: +lesenvorbereiten;lesen;zurueckschreiben;.lesenvorbereiten:zahlderaenderungen +INCR 1;putwert(fnrsufamnames,name(suind));putwert(fnrsurufnames,rufname(suind +));putwert(fnrsugebdatums,gebdat(suind)).lesen:search(dnrschueler,TRUE );IF +dbstatus=okCAND wert(fnrsutiddiffdaten)<>niltextTHEN readtid(dnrdiffdaten, +wert(fnrsutiddiffdaten))ELSE dbstatus(notfound)FI .zurueckschreiben:IF +dbstatus=0THEN dbwertesetzen;aenderntransaktionFI .dbwertesetzen: +aktuellesfeld:=satzindex+1;SELECT auswertungsnrOF CASE awfs1,awfs2,awfs3, +awfs4:setzefremdsprachenCASE awreli:setzereliCASE awkunst:setzekunstCASE +awwp9,awwp10:setzewpCASE awag:setzeagEND SELECT .aenderntransaktion:replace( +dnrdiffdaten,wert(fnrsutiddiffdaten)).meldevollzug:TEXT VAR meldungstext;IF +dbstatus=0THEN meldungstext:=compress(standardmaskenfeld(satzindex))+ +meldtrenner;standardmeldung(meldspeicherung,meldungstext)ELSE meldungstext:= +text(dbstatus)+meldtrenner;meldungstextCAT compress(standardmaskenfeld( +satzindex));meldungstextCAT meldtrenner;standardmeldung(meldspeicherfehler, +meldungstext);return(tofather);LEAVE difdaterfspeichernFI ;infeld(satzindex+1 +).datenveraendert:altedaten(suind)<>jetzigedaten.jetzigedaten:INT VAR datind; +TEXT VAR datenindermaske:=niltext;FOR datindFROM 1UPTO felderprozeile-1REP +datenindermaskeCAT text(standardmaskenfeld(satzindex+datind), +standardfeldlaenge(satzindex+datind))PER ;datenindermaske.startkeyssetzen: +restoretupel(dnrschueler,sicherungstupel);changeindex.eingabefehler:IF +falschesdatumTHEN standardmeldung(meldnrfalschesdatum,niltext);infeld( +aktuellesfeld+lv)ELSE standardmeldung(meldnrfalscherschluessel,niltext); +infeld(aktuellesfeld)FI ;.END PROC difdaterfspeichern;BOOL PROC +schluesselvorhanden(TEXT CONST eingabe):putwert(fnrffach,eingabe);search( +dnrfaecher,TRUE );dbstatus=okEND PROC schluesselvorhanden;PROC neuerblock: +evtlnaechsterbestand;blocklesenundausgeben;IF nochwelchedaTHEN return( +tofather)ELSE enter(tograndfather)FI .evtlnaechsterbestand:IF schuelerzahl= +maxschuelerTHEN IF sek2CAND NOT tutorenkursTHEN succ(ixsustatjgst)ELSE succ( +ixsustatjgstzug);FI ;IF dbstatus<>0THEN nochwelcheda:=FALSE ; +nochweiterebestaende:=FALSE ;FI FI ;IF NOT pruefungspeziell(waspruefen)THEN +IF naechsterbestandTHEN changeindex;vergleichsjgst:=wert(fnrsusgrpjgst); +vergleichszug:=wert(fnrsusgrpzugtut);startebildschirmblock(ixsustatjgstzug, +maxschueler)ELSE nochwelcheda:=FALSE FI ELSE restoretupel(dnrschueler, +sicherungstupel);changeindexFI .END PROC neuerblock;PROC +blocklesenundausgeben:REP vorbereiten;gewuenschteszeigen;nachbereitenPER . +vorbereiten:IF NOT nochwelchedaTHEN LEAVE blocklesenundausgebenFI ; +standardmeldung(meldwarten,niltext);schuelerzahl:=null;aktuellesfeld:= +erstesfeld.nachbereiten:nochwelcheda:=(schuelerzahl>null);IF nochwelcheda +THEN savetupel(dnrschueler,sicherungstupel);restlichezeilenloeschen;infeld( +standardanfang);standardfelderausgeben;infeld(standardeinstieg);LEAVE +blocklesenundausgebenELIF naechsterbestandTHEN vergleichsjgst:=wert( +fnrsusgrpjgst);vergleichszug:=wert(fnrsusgrpzugtut);#???# +startebildschirmblock(ixsustatjgstzug,maxschueler);nochwelcheda:=TRUE ELSE +LEAVE blocklesenundausgebenFI ;.restlichezeilenloeschen:INT VAR zeilenzaehler +;INT VAR zeilenfeld:=(schuelerzahl*felderprozeile)+(erstesfeld-1);FOR +zeilenzaehlerFROM schuelerzahlUPTO maxschuelerREP loeschezeilePER . +loeschezeile:INT VAR zeilenincr;FOR zeilenincrFROM 1UPTO felderprozeileREP +zeilenfeldINCR 1;standardmaskenfeld(standardfeldlaenge(zeilenfeld)*blank, +zeilenfeld);feldschutz(zeilenfeld)PER ;.gewuenschteszeigen:SELECT +auswertungsnrOF CASE awfs1:zeigefremdsprache1CASE awfs2:zeigefremdsprache2 +CASE awfs3:zeigefremdsprache3CASE awfs4:zeigefremdsprache4CASE awreli: +zeigereliCASE awkunst:zeigekunstCASE awwp9:zeigewp9CASE awwp10:zeigewp10CASE +awag:zeigeagEND SELECT ;.zeigefremdsprache1:fremdsprachenindex:= +fnrdd1fremdfach;bildschirmblock(PROC fremdsprachezeigen,BOOL PROC (INT CONST +)pruefungspeziell,waspruefen).zeigefremdsprache2:fremdsprachenindex:= +fnrdd2fremdfach;bildschirmblock(PROC fremdsprachezeigen,BOOL PROC (INT CONST +)pruefungspeziell,waspruefen).zeigefremdsprache3:fremdsprachenindex:= +fnrdd3fremdfach;bildschirmblock(PROC fremdsprachezeigen,BOOL PROC (INT CONST +)pruefungspeziell,waspruefen).zeigefremdsprache4:fremdsprachenindex:= +fnrdd4fremdfach;bildschirmblock(PROC fremdsprachezeigen,BOOL PROC (INT CONST +)pruefungspeziell,waspruefen).zeigereli:bildschirmblock(PROC relizeigen,BOOL +PROC (INT CONST )pruefungspeziell,waspruefen).zeigekunst:bildschirmblock( +PROC kunstzeigen,BOOL PROC (INT CONST )pruefungspeziell,waspruefen).zeigewp9: +wpindex:=fnrddfach091a;bildschirmblock(PROC wpzeigen,BOOL PROC (INT CONST ) +pruefungspeziell,waspruefen).zeigewp10:wpindex:=fnrddfach101a;bildschirmblock +(PROC wpzeigen,BOOL PROC (INT CONST )pruefungspeziell,waspruefen).zeigeag: +bildschirmblock(PROC agzeigen,BOOL PROC (INT CONST )pruefungspeziell, +waspruefen).END PROC blocklesenundausgeben;PROC namezeigen:IF ersterTHEN +klassezeigenundrettenFI ;namenretten;standardmaskenfeld(text(schuelername+ +namenstrenner+schuelervorname,laengename),aktuellesfeld);readtid(dnrdiffdaten +,wert(fnrsutiddiffdaten));aktuellesfeldINCR 1.erster:schuelerzahl=null. +klassezeigenundretten:sek2:=istsek2(wert(fnrsusgrpjgst));IF sek2CAND (NOT +tutorenkurs)THEN sek2sonderbehandlungELSE normalbehandlungFI . +normalbehandlung:vergleichsjgst:=wert(fnrsusgrpjgst);vergleichszug:=wert( +fnrsusgrpzugtut);standardmaskenfeld(text(vergleichsjgst+vergleichszug, +laengeklasse),fnrklasse).sek2sonderbehandlung:vergleichsjgst:=wert( +fnrsusgrpjgst);standardmaskenfeld(text(vergleichsjgst,laengeklasse),fnrklasse +).namenretten:TEXT VAR schuelername,schuelervorname;schuelername:=wert( +fnrsufamnames);schuelervorname:=wert(fnrsurufnames);schuelerzahlINCR 1;name( +schuelerzahl):=schuelername;rufname(schuelerzahl):=schuelervorname;gebdat( +schuelerzahl):=wert(fnrsugebdatums).END PROC namezeigen;PROC +fremdsprachezeigen:namezeigen;gewaehltefremdsprachezeigen. +gewaehltefremdsprachezeigen:TEXT VAR was;INT VAR lv;altedaten(schuelerzahl):= +niltext;FOR lvFROM fremdsprachenindexUPTO fremdsprachenindex+2REP was:=wert( +lv);standardmaskenfeld(was,aktuellesfeld);altedaten(schuelerzahl)CAT text(was +,standardfeldlaenge(aktuellesfeld));feldfrei(aktuellesfeld);aktuellesfeld +INCR 1PER .END PROC fremdsprachezeigen;PROC setzefremdsprachen:TEXT VAR was; +INT VAR lv;FOR lvFROM fremdsprachenindexUPTO fremdsprachenindex+2REP was:= +standardmaskenfeld(aktuellesfeld);putwert(lv,was);aktuellesfeldINCR 1;PER . +END PROC setzefremdsprachen;PROC relizeigen:namezeigen;relidatenzeigen. +relidatenzeigen:INT VAR was:=fnrddreliunter,lv;TEXT VAR daten;altedaten( +schuelerzahl):=niltext;FOR lvFROM wasUPTO was+2REP IF lv=wasTHEN daten:=(wert +(lv));ELSE daten:=datumrekonversion(wert(lv))FI ;standardmaskenfeld(daten, +aktuellesfeld);altedaten(schuelerzahl)CAT text(daten,standardfeldlaenge( +aktuellesfeld));feldfrei(aktuellesfeld);aktuellesfeldINCR 1PER .END PROC +relizeigen;PROC setzereli:INT VAR was:=fnrddreliunter,lv;TEXT VAR daten;FOR +lvFROM wasUPTO was+2REP IF lv=wasTHEN daten:=standardmaskenfeld(aktuellesfeld +);ELSE daten:=datumskonversion(standardmaskenfeld(aktuellesfeld));FI ;putwert +(lv,daten);aktuellesfeldINCR 1PER END PROC setzereli;PROC kunstzeigen: +namezeigen;fachzeigen;merken.fachzeigen:TEXT VAR fach:=wert(fnrddkunstmusik); +standardmaskenfeld(fach,aktuellesfeld);feldfrei(aktuellesfeld);aktuellesfeld +INCR 1.merken:altedaten(schuelerzahl):=text(fach,2).END PROC kunstzeigen; +PROC setzekunst:putwert(fnrddkunstmusik,standardmaskenfeld(aktuellesfeld)); +END PROC setzekunst;PROC wpzeigen:namezeigen;zeigefaecher;merken.zeigefaecher +:INT VAR lv;TEXT VAR wpfaecher:=niltext,fach;FOR lvFROM wpindexUPTO wpindex+3 +REP fach:=wert(lv);standardmaskenfeld(fach,aktuellesfeld);feldfrei( +aktuellesfeld);aktuellesfeldINCR 1;wpfaecherCAT text(fach,2)PER .merken: +altedaten(schuelerzahl):=wpfaecher.END PROC wpzeigen;PROC setzewp:INT VAR lv; +TEXT VAR fach;FOR lvFROM wpindexUPTO wpindex+3REP fach:=standardmaskenfeld( +aktuellesfeld);putwert(lv,fach);aktuellesfeldINCR 1PER END PROC setzewp;PROC +agzeigen:namezeigen;agdatenzeigen.agdatenzeigen:INT VAR agind,woher:=0, +laengeag:=2;TEXT VAR ag:=niltext;altedaten(schuelerzahl):=niltext;FOR agind +FROM 0UPTO maxag-1REP ag:=text(wert(fnrddagthema1+woher),laengeag);agCAT text +(wert(fnrddagthema1b+woher),laengeag+1);agCAT text(wert(fnrddagthema1e+woher) +,laengeag+1);IF compress(ag)<>niltextTHEN standardmaskenfeld(ag,aktuellesfeld +);ELSE standardmaskenfeld(niltext,aktuellesfeld);FI ;altedaten(schuelerzahl) +CAT text(ag,standardfeldlaenge(aktuellesfeld));feldfrei(aktuellesfeld); +aktuellesfeldINCR 1;woherINCR 3PER .END PROC agzeigen;PROC setzeag:INT VAR +agind,wohin:=0;TEXT VAR ag:=niltext;FOR agindFROM 0UPTO maxag-1REP ag:= +standardmaskenfeld(aktuellesfeld);putwert(fnrddagthema1+wohin,subtext(ag,1,2) +);putwert(fnrddagthema1b+wohin,subtext(ag,3,5));putwert(fnrddagthema1e+wohin, +subtext(ag,6,8));wohinINCR 3;aktuellesfeldINCR 1;PER END PROC setzeag;PROC +feldloeschen(INT CONST laenge):standardmaskenfeld(laenge*blank,aktuellesfeld) +END PROC feldloeschen;BOOL PROC istsek2(TEXT CONST jgst):jgst>maxsek1END +PROC istsek2;BOOL PROC naechsterbestand:nochweiterebestaende:=(alleklassen +CAND pruefungspeziell(allespruefen))OR (einejgstCAND pruefungspeziell( +einejgstpruefen))OR (eineklasseCAND pruefungspeziell(eineklassepruefen)); +nochweiterebestaendeEND PROC naechsterbestand;BOOL PROC pruefungspeziell(INT +CONST wasistzutun):BOOL VAR b:=FALSE ;SELECT wasistzutunOF CASE allespruefen: +pruefungalleklassen(b)CASE einejgstpruefen:pruefungeinejgst(b)CASE +eineklassepruefen:pruefungeineklasse(b)END SELECT ;bEND PROC pruefungspeziell +;PROC pruefungalleklassen(BOOL VAR bool):bool:=wert(fnrsustatuss)= +schuelerbestandEND PROC pruefungalleklassen;PROC pruefungeinejgst(BOOL VAR +bool):bool:=(wert(fnrsustatuss)=schuelerbestandCAND wert(fnrsusgrpjgst)= +vergleichsjgst)END PROC pruefungeinejgst;PROC pruefungeineklasse(BOOL VAR +bool):bool:=(wert(fnrsustatuss)=schuelerbestandCAND wert(fnrsusgrpjgst)= +vergleichsjgstCAND wert(fnrsusgrpzugtut)=vergleichszug)END PROC +pruefungeineklasse;END PACKET listenweisedifdaterf + diff --git a/app/schulis/2.2.1/src/1.listenweise erg nachpr b/app/schulis/2.2.1/src/1.listenweise erg nachpr new file mode 100644 index 0000000..6b5a676 --- /dev/null +++ b/app/schulis/2.2.1/src/1.listenweise erg nachpr @@ -0,0 +1,250 @@ +PACKET listenweiseergnachprDEFINES bearbeitungergnachpr, +ergnachprnichtspeichern,ergnachprspeichern:LET tofather=1,tograndfather=2, +jgst5=5,jgst13=13,niltext="",blank=" ",namenstrenner=", ",null=0,punkt=".", +meldtrenner="#";LET jgstufe10=10;LET einejgst=2,eineklasse=3;LET +geaendertersatz="x",kznachpruefung="n",dreizehnnachprsatz="N";LET +standardanfang=1,standardeinstieg=2,abstandzumnamen=2;LET maxschueler=15, +erstesfeld=5,felderprozeile=6,schuelerproseite=16;LET gwklasse=1;LET +bestandengrenzeeinstellig=4,bestandengrenzezweistellig="05",minnoteeinstellig +=1,maxnoteeinstellig=6,minnotezweistellig="00",maxnotezweistellig="15", +leernote="";LET meldbestleer=59,meldnichtspeichern=63,meldwarten=69, +meldspeicherung=132,meldspeicherfehler=131,meldfalschesfach=147, +meldungueltigenote=148,meldfalschesg=134,meldfehlendesfach=52, +meldtransaktionsfehler=138,meldplausi=57,meldfalscheauswahl=56, +meldzugtutorfehlt=52;LET pruefartgrenzen=3;LET fnrjgst=2,fnrtutor=3,fnrklasse +=2,fnrname=3,fnrbetr=4,fnrfach=5,fnrnote=6,fnrzug=7;LET schuljahrkey= +"Schuljahr",anfangschuljahrkey="Anfang Schulhalbjahr",halbjahr1="1",halbjahr2 +="2",bestandlaufsj="ls",bestandabgegangene="abg";LET allespruefen=1, +einejgstpruefen=2,eineklassepruefen=3;LET anzkenndaten=3,sek2min=11;LET +logtextbeginn="Anw. 1.4.9 Nachprüfungen für ",logtextalleklassen= +"alle Klassen";BOOL VAR nochwelcheda,alleklassen;INT VAR waspruefen, +laengeklasse,laengename,laengebetr,laengefach,laengenote,laengezugtutor, +bestandindex,schuelerzahl,aktuellesfeld;ROW schuelerproseiteTEXT VAR name; +ROW schuelerproseiteTEXT VAR rufname;ROW schuelerproseiteTEXT VAR gebdatum; +ROW schuelerproseiteBOOL VAR dreizehner;ROW schuelerproseiteTEXT VAR +altedaten;ROW schuelerproseiteTEXT VAR npfaecher;ROW anzkenndatenTEXT VAR key +;TEXT VAR startkey1,startkey2,aktschuljahr,schuljahr,schulhalbjahr,hjdtupel, +schuelertupel,sichtupel;PROC bearbeitungergnachpr:reinitparsing; +eingangsbildschirmpruefen;IF eingangsbildschirmokTHEN +initialisierungenvornehmen;naechsteportionlesen;IF keinemehrdaTHEN +bestandleermelden;enter(tofather)ELSE standardnprocFI ELSE +eingangsmaskenfehler;return(tofather)FI .eingangsbildschirmpruefen:INT VAR +pruefstatus:=null;startkey1:=niltext;startkey2:=niltext;alleklassen:=FALSE ; +IF standardmaskenfeld(fnrjgst)<>niltextTHEN standardpruefe(pruefartgrenzen, +fnrjgst,jgst5,jgst13,niltext,pruefstatus);IF pruefstatus=nullTHEN startkey1:= +jgstaufber(standardmaskenfeld(fnrjgst));startkey2:=standardmaskenfeld( +fnrtutor);IF standardmaskenfeld(fnrtutor)=niltextTHEN bestandindex:=einejgst +ELSE bestandindex:=eineklasseFI FI ELIF standardmaskenfeld(fnrtutor)<>niltext +THEN pruefstatus:=fnrtutorELSE alleklassen:=TRUE FI .eingangsbildschirmok: +pruefstatus=null.initialisierungenvornehmen:plausipruefungvorbereiten; +bestandsetzen;standardstartproc(maske(vergleichsknoten));laengenfestlegen;IF +waspruefen=einejgstpruefenAND sek2THEN startebildschirmblock( +ixhjdsjhjverjgstkenn,maxschueler);ELSE startebildschirmblock(ixhjdsjhjverjgst +,maxschueler);FI .sek2:int(startkey1)>=sek2min.bestandsetzen:bestimmebestand; +setzestartkeys;pruefebestand.bestimmebestand:aktschuljahr:=schulkenndatum( +schuljahrkey);schuljahr:=subtext(aktschuljahr,1,2);schuljahr:=text(int( +schuljahr)-1)+schuljahr;schulhalbjahr:=halbjahr2;IF alleklassenTHEN +alleklassensetzenELSE SELECT bestandindexOF CASE einejgst:bestandjgstCASE +eineklasse:bestandklasseEND SELECT FI ;.alleklassensetzen:waspruefen:= +allespruefen;infeld(fnrjgst).bestandjgst:waspruefen:=einejgstpruefen;infeld( +fnrjgst).bestandklasse:waspruefen:=eineklassepruefen;infeld(fnrtutor). +setzestartkeys:putwert(fnrhjdsj,schuljahr);putwert(fnrhjdhj,schulhalbjahr); +putwert(fnrhjdjgst,startkey1);putwert(fnrhjdkennung,startkey2);putwert( +fnrhjdversetzung,kznachpruefung).pruefebestand:search(ixhjdsjhjverjgstkenn, +FALSE );IF dbstatus<>nullOR (NOT pruefungspeziell(waspruefen))THEN +bestandleermelden;return(tofather);LEAVE bearbeitungergnachprELSE +nochwelcheda:=TRUE FI .laengenfestlegen:laengeklasse:=standardfeldlaenge( +fnrklasse);laengename:=standardfeldlaenge(fnrname);laengebetr:= +standardfeldlaenge(fnrbetr);laengefach:=standardfeldlaenge(fnrfach); +laengenote:=standardfeldlaenge(fnrnote);laengezugtutor:=standardfeldlaenge( +fnrzug).plausipruefungvorbereiten:standardmeldung(meldwarten,niltext);. +naechsteportionlesen:blocklesenundausgeben.keinemehrda:NOT nochwelcheda. +bestandleermelden:infeld(fnrjgst);standardmeldung(meldbestleer,niltext). +eingangsmaskenfehler:standardmeldung(meldfalscheauswahl,niltext);infeld( +pruefstatus).END PROC bearbeitungergnachpr;PROC ergnachprnichtspeichern: +nichtspeichernmelden;startkeyssetzen;neuerblock.nichtspeichernmelden: +standardmeldung(meldnichtspeichern,niltext);pause(10).startkeyssetzen: +restoretupel(dnrhalbjahresdaten,hjdtupel);changeindex.END PROC +ergnachprnichtspeichern;PROC ergnachprspeichern:BOOL VAR +halbjahresdateninzwischengeaendert,schuelerdateninzwischengeaendert;TEXT VAR +altejgst:="",alterzug:="",neuejgst:="";pruefeplausibilitaet;IF dateninordnung +THEN speicherungdurchfuehren;startkeyssetzen;neuerblockELSE eingabefehler; +return(tofather)FI .pruefeplausibilitaet:standardmeldung(meldplausi,niltext); +BOOL VAR dateninordnung:=TRUE ;INT VAR satzindex:=erstesfeld;INT VAR fehlernr +;TEXT VAR fehlertext:=niltext;FOR suindFROM 1UPTO schuelerzahlREP pruefezeile +;IF NOT dateninordnungTHEN LEAVE pruefeplausibilitaetFI ;satzindexINCR +felderprozeilePER .pruefezeile:dateninordnung:=allesfreiCOR allesrichtig. +allesrichtig:((noterichtig)CAND (schuelergrupperichtig))CAND (fachrichtig). +noterichtig:((NOT fehlendertutor)CAND (gueltigenote))CAND (NOT fehlendesfach) +.fehlendertutor:fehlernr:=meldzugtutorfehlt;aktuellesfeld:=satzindex+2; +sitzengebliebenCAND keintutor.sitzengeblieben:IF length(eingegebenenote)=1 +THEN int(eingegebenenote)>bestandengrenzeeinstelligELSE eingegebenenote< +bestandengrenzezweistelligFI .eingegebenenote:standardmaskenfeld(satzindex+1) +.gueltigenote:fehlernr:=meldungueltigenote;aktuellesfeld:=satzindex+1;TEXT +VAR pruefungsnote:=eingegebenenote;noteimbereich.noteimbereich:pruefungsnote= +leernoteOR (notenichtzukleinCAND notenichtzugross).notenichtzuklein:IF length +(pruefungsnote)=1THEN int(pruefungsnote)>=minnoteeinstelligELSE pruefungsnote +>=minnotezweistelligFI .notenichtzugross:IF length(pruefungsnote)=1THEN int( +pruefungsnote)<=maxnoteeinstelligELSE pruefungsnote<=maxnotezweistelligFI . +fehlendesfach:fehlernr:=meldfehlendesfach;aktuellesfeld:=satzindex;bestanden +CAND keinfach.bestanden:NOT sitzengeblieben.schuelergrupperichtig:fehlernr:= +meldfalschesg;aktuellesfeld:=satzindex+2;fehlertext:=standardmaskenfeld( +aktuellesfeld)+meldtrenner;keintutorCOR schuelergruppeimbestand. +schuelergruppeimbestand:#????#putwert(fnrsgrpsj,aktschuljahr);putwert( +fnrsgrphj,halbjahr1);putwert(fnrsgrpjgst,schuelergruppenschluessel);putwert( +fnrsgrpkennung,eingegebenertutor);search(dnraktschuelergruppen,TRUE ); +dbstatus=null.schuelergruppenschluessel:IF bestandenCAND NOT +dreizehnernachprueflingTHEN jahrgangsstufeeinshoeherELSE +bisherigejahrgangsstufeFI .bisherigejahrgangsstufe:subtext(altedaten(suind),1 +,2).jahrgangsstufeeinshoeher:jgstaufber(text(int(bisherigejahrgangsstufe)+1)) +.eingegebenertutor:standardmaskenfeld(satzindex+2).fachrichtig:fehlernr:= +meldfalschesfach;aktuellesfeld:=satzindex;fehlertext:=npfaecher(suind)+ +meldtrenner;keinfachCOR ausdemvorgegebenenbereich.ausdemvorgegebenenbereich: +pos(fehlertext,eingegebenesfach)>null.eingegebenesfach:standardmaskenfeld( +satzindex).allesfrei:(keintutorCAND keinfach)CAND keinenote.keintutor: +eingegebenertutor=niltextCOR eingegebenertutor="abg.".keinenote: +standardmaskenfeld(satzindex+1)=niltext.keinfach:eingegebenesfach=niltext. +speicherungdurchfuehren:logeintragvornehmen;aendernschleife;kurzwarten. +logeintragvornehmen:TEXT VAR eintrag:=logtextbeginn;IF alleklassenTHEN +eintragCAT logtextalleklassenELSE eintragCAT startkey1;eintragCAT startkey2 +FI ;logeintrag(eintrag).kurzwarten:pause(10).aendernschleife:INT VAR suind; +INT VAR zahlderaenderungen:=null;satzindex:=erstesfeld-abstandzumnamen;FOR +suindFROM 1UPTO schuelerzahlREP behandleschuelersatz;satzindexINCR +felderprozeilePER .behandleschuelersatz:IF datenveraendertTHEN +aenderungvorbereiten;IF zwischenzeitlichgeaendertTHEN transaktionsfehlerELSE +dateninpuffersetzen;schreibtransaktion;meldevollzugFI ;FI ;.datenveraendert: +subtext(altedaten(suind),laengeklasse+1)<>jetzigedaten.jetzigedaten:INT VAR +datenfeldanfang:=satzindex+abstandzumnamen;standardmaskenfeld(datenfeldanfang +)+standardmaskenfeld(datenfeldanfang+1)+standardmaskenfeld(datenfeldanfang+2) +.aenderungvorbereiten:lesenvorbereiten;lesen.lesenvorbereiten: +zahlderaenderungenINCR 1;key(1):=name(suind);key(2):=rufname(suind);key(3):= +datumrekonversion(gebdatum(suind));schluesselfuerhjddateisetzen. +schluesselfuerhjddateisetzen:schluesselfuerhjdsetzen(dnrhalbjahresdaten,key, +schuljahr,halbjahr2,"").lesen:search(dnrhalbjahresdaten,TRUE ); +halbjahresdateninzwischengeaendert:=(dbstatus<>ok);IF dbstatus=okTHEN +saveupdateposition(dnrhalbjahresdaten);savetupel(dnrhalbjahresdaten,sichtupel +);altejgst:=jgstaufber(wert(fnrhjdjgst));schluesselfuerschuelerdateisetzen; +search(dnrschueler,TRUE );schuelerdateninzwischengeaendert:=(dbstatus<>ok); +IF dbstatus=okTHEN alterzug:=wert(fnrsusgrpzugtut);saveupdateposition( +dnrschueler);savetupel(dnrschueler,schuelertupel)FI FI . +zwischenzeitlichgeaendert:halbjahresdateninzwischengeaendertOR +schuelerdateninzwischengeaendert.transaktionsfehler:standardmeldung( +meldtransaktionsfehler,niltext);return(tofather);infeld(satzindex+ +abstandzumnamen);LEAVE ergnachprspeichern.dateninpuffersetzen:IF jetzigedaten +=niltextTHEN noteundfachsetzen;schuelerdatenaendernELIF nichtbestandenTHEN +nichtbestandenneuELSE notenfachundneuerzugFI ;neuerzugtutorloeschen. +schuelerdatenaendern:putwert(fnrsustatuss,bestandlaufsj);IF +dreizehnernachprueflingTHEN putwert(fnrsusgrpjgst,text(jgst13));putwert( +fnrsuartzugang,dreizehnnachprsatz)ELSE neuejgst:=jgstaufber(text(int(altejgst +)+1));putwert(fnrsusgrpjgst,neuejgst);putwert(fnrsusgrpzugtut,wert( +fnrhjdkennung));putwert(fnrsuartzugang,kznachpruefung)FI .nichtbestanden: +datenfeldanfang:=satzindex+abstandzumnamen;IF length(standardmaskenfeld( +datenfeldanfang+1))=1THEN int(standardmaskenfeld(datenfeldanfang+1))> +bestandengrenzeeinstelligELSE standardmaskenfeld(datenfeldanfang+1)< +bestandengrenzezweistelligFI .notenfachundneuerzug:noteundfachsetzen;IF +dreizehnernachprueflingTHEN dreizehnerabmeldenELSE neuejgst:=jgstaufber(text( +int(altejgst)+1));putwert(fnrsusgrpjgst,neuejgst);putwert(fnrsuartzugang, +kznachpruefung);neuerzugsetzenFI .noteundfachsetzen:TEXT VAR fach:= +standardmaskenfeld(datenfeldanfang);TEXT VAR note:=standardmaskenfeld( +datenfeldanfang+1);putwert(fnrhjdnachfach,fach);putwert(fnrhjdnacherg,note). +dreizehnernachpruefling:dreizehner(suind).dreizehnerabmelden:putwert( +fnrsustatuss,bestandabgegangene);putwert(fnrsuabgdats,schulkenndatum( +anfangschuljahrkey)).neuerzugsetzen:TEXT VAR neuerzug;neuerzug:= +standardmaskenfeld(datenfeldanfang+2);IF neuerzug<>niltextTHEN IF neuerzug<> +alterzugTHEN putwert(fnrsusgrpzugtut,neuerzug);FI ELSE IF jgstaufber(wert( +fnrsusgrpjgst))=altejgstTHEN putwert(fnrsusgrpzugtut,wert(fnrhjdkennung))FI +FI ;zuginakthjdaendern.zuginakthjdaendern:savetupel(dnrhalbjahresdaten, +sichtupel);neueklasseinhalbjahresdateneintragen(key,aktschuljahr,halbjahr1, +neuejgst,neuerzug);IF dbstatus=okTHEN putwert(fnrsutidakthjd,gettid)FI ; +restoretupel(dnrhalbjahresdaten,sichtupel).nichtbestandenneu: +noteundfachsetzen;setzezugang;savetupel(dnrhalbjahresdaten,sichtupel); +setzejgstrunter;halbjahresdatenbearbeiten;restoretupel(dnrhalbjahresdaten, +sichtupel).setzezugang:putwert(fnrsuartzugang,geaendertersatz). +setzejgstrunter:neuejgst:=jgstaufber(text(int(altejgst)));neuerzug:= +standardmaskenfeld(datenfeldanfang+2);putwert(fnrsusgrpjgst,neuejgst);putwert +(fnrsusgrpzugtut,neuerzug);putwert(fnrsustatuss,bestandlaufsj);. +halbjahresdatenbearbeiten:IF NOT dreizehnernachprueflingTHEN +nachfolgendehjdsloeschen;FI .nachfolgendehjdsloeschen:halbjahresdatenloeschen +(PROC (INT CONST )succ,key,halbjahr2,int(neuejgst),FALSE );. +neuerzugtutorloeschen:putwert(fnrsuneuerzugtut,niltext).schreibtransaktion: +restoreupdateposition(dnrhalbjahresdaten);selupdate(dnrhalbjahresdaten);IF +dbstatus<>okTHEN restoretupel(dnrschueler,schuelertupel)ELSE +restoreupdateposition(dnrschueler);selupdate(dnrschueler);IF dbstatus<>ok +THEN restoretupel(dnrschueler,schuelertupel)ELSE IF int(neuejgst)=int( +altejgst)THEN evtlkurswahldatenfuerwiederholerbehandelnFI ;FI FI . +evtlkurswahldatenfuerwiederholerbehandeln:IF int(neuejgst)>=jgstufe10THEN +kurswahlserveraktualisieren(neuejgst,"","")FI ;IF (int(neuejgst)+1)>= +jgstufe10THEN kurswahlserveraktualisieren(text(int(neuejgst)+1),"","")FI . +meldevollzug:TEXT VAR meldungstext;IF dbstatus=0THEN meldungstext:=compress( +standardmaskenfeld(satzindex))+meldtrenner;standardmeldung(meldspeicherung, +meldungstext)ELSE meldungstext:=text(dbstatus)+meldtrenner;meldungstextCAT +compress(standardmaskenfeld(satzindex));meldungstextCAT meldtrenner; +standardmeldung(meldspeicherfehler,meldungstext);return(tofather);LEAVE +ergnachprspeichernFI ;infeld(satzindex+abstandzumnamen).startkeyssetzen: +restoretupel(dnrhalbjahresdaten,hjdtupel);changeindex.eingabefehler: +standardmeldung(fehlernr,fehlertext);infeld(aktuellesfeld).END PROC +ergnachprspeichern;PROC neuerblock:blocklesenundausgeben;IF nochwelchedaTHEN +return(tofather)ELSE enter(tograndfather)FI .END PROC neuerblock;PROC +blocklesenundausgeben:vorbereiten;initgruppenwechsel;gewuenschteszeigen; +nachbereiten.vorbereiten:IF NOT nochwelchedaTHEN LEAVE blocklesenundausgeben +FI ;standardmeldung(meldwarten,niltext);schuelerzahl:=null;aktuellesfeld:= +standardeinstieg.gewuenschteszeigen:bildschirmblock(PROC datenzeigen,BOOL +PROC (INT CONST )pruefungspeziell,waspruefen).nachbereiten:nochwelcheda:=( +schuelerzahl>null);IF nochwelchedaTHEN savetupel(dnrhalbjahresdaten,hjdtupel) +;restlichezeilenloeschen;infeld(standardanfang);standardfelderausgebenELSE +LEAVE blocklesenundausgebenFI ;infeld(erstesfeld).restlichezeilenloeschen: +INT VAR zeilenzaehler;INT VAR zeilenfeld:=(schuelerzahl*felderprozeile)+1; +FOR zeilenzaehlerFROM schuelerzahlUPTO schuelerproseite-1REP loeschezeilePER +.loeschezeile:INT VAR zeilenincr;FOR zeilenincrFROM 1UPTO felderprozeileREP +zeilenfeldINCR 1;standardmaskenfeld(standardfeldlaenge(zeilenfeld)*blank, +zeilenfeld);feldschutz(zeilenfeld)PER ;.END PROC blocklesenundausgeben;PROC +datenzeigen:TEXT VAR merkdaten:=niltext;zaehlen;zeigenundmerken.zaehlen: +schuelerzahlINCR 1.zeigenundmerken:altejgstzeigen;namezeigen;aktjgstzeigen; +fachzeigen;npfaechermerken;notezeigen;neuerzugtutorzeigen.altejgstzeigen:IF +dreizehnerzurnachpruefungTHEN aenderungsetzenELSE neusetzenFI ; +betreffendeszeigen.dreizehnerzurnachpruefung:intwert(fnrhjdjgst)=jgst13. +aenderungsetzen:BOOL VAR satzgeaendert:=TRUE ;.neusetzen:satzgeaendert:= +FALSE ;.betreffendeszeigen:TEXT VAR alteklasse:=jgstaufber(wert(fnrhjdjgst))+ +wert(fnrhjdkennung);dreizehner(schuelerzahl):=satzgeaendert; +standardmaskenfeld(text(alteklasse,laengeklasse),aktuellesfeld);merkdaten:= +text(alteklasse,laengeklasse);gruppenwechsel(alteklasse,gwklasse,laengeklasse +,1,aktuellesfeld);.namezeigen:namenretten;standardmaskenfeld(text( +schuelername+namenstrenner+schuelervorname,laengename),aktuellesfeld); +aktuellesfeldINCR 1.namenretten:TEXT VAR schuelername,schuelervorname; +schuelername:=wert(fnrhjdfamnames);schuelervorname:=wert(fnrhjdrufnames);name +(schuelerzahl):=schuelername;rufname(schuelerzahl):=schuelervorname;gebdatum( +schuelerzahl):=wert(fnrhjdgebdats).aktjgstzeigen:TEXT VAR aktklasse:=niltext; +schluesselfuerschuelerdateisetzen;search(dnrschueler,TRUE );IF dbstatus=ok +THEN aktklasse:=jgstaufber(wert(fnrsusgrpjgst))+wert(fnrsusgrpzugtut)FI ; +standardmaskenfeld(aktklasse,aktuellesfeld);aktuellesfeldINCR 1.fachzeigen: +TEXT VAR fach:=niltext,faecher:=niltext;fach:=wert(fnrhjdnachfach);merkdaten +CAT fach;standardmaskenfeld(fach,aktuellesfeld);feldfrei(aktuellesfeld); +aktuellesfeldINCR 1.npfaechermerken:INT VAR fachind;FOR fachindFROM +fnrhjdnachfach1UPTO fnrhjdnachfach1+2REP faecherCAT wert(fachind);faecherCAT +namenstrenner;PER ;npfaecher(schuelerzahl):=faecher.notezeigen:TEXT VAR note; +note:=wert(fnrhjdnacherg);merkdatenCAT note;standardmaskenfeld(note, +aktuellesfeld);feldfrei(aktuellesfeld);aktuellesfeldINCR 1. +neuerzugtutorzeigen:#????#TEXT VAR tutor;IF wert(fnrsustatuss)= +bestandabgegangeneTHEN tutor:=bestandabgegangene+punktELSE tutor:=niltext;# +wert(fnrsusgrpzugtut);15.07.87dr#FI ;merkdatenCAT tutor;standardmaskenfeld( +tutor,aktuellesfeld);altedaten(schuelerzahl):=merkdaten;feldfrei( +aktuellesfeld);aktuellesfeldINCR 1.END PROC datenzeigen;PROC +schluesselfuerschuelerdateisetzen:inittupel(dnrschueler);putwert( +fnrsufamnames,wert(fnrhjdfamnames));putwert(fnrsurufnames,wert(fnrhjdrufnames +));putwert(fnrsugebdatums,wert(fnrhjdgebdats));.END PROC +schluesselfuerschuelerdateisetzen;PROC feldloeschen(INT CONST laenge): +standardmaskenfeld(laenge*blank,aktuellesfeld)END PROC feldloeschen;BOOL +PROC pruefungspeziell(INT CONST wasistzutun):BOOL VAR b:=FALSE ;SELECT +wasistzutunOF CASE allespruefen:pruefungalleklassen(b)CASE einejgstpruefen: +pruefungeinejgst(b)CASE eineklassepruefen:pruefungeineklasse(b)END SELECT ;b +END PROC pruefungspeziell;PROC pruefungalleklassen(BOOL VAR bool):bool:=(wert +(fnrhjdsj)=schuljahrCAND wert(fnrhjdhj)=schulhalbjahrCAND wert( +fnrhjdversetzung)=kznachpruefung)END PROC pruefungalleklassen;PROC +pruefungeinejgst(BOOL VAR bool):bool:=(wert(fnrhjdsj)=schuljahrCAND wert( +fnrhjdhj)=schulhalbjahrCAND wert(fnrhjdversetzung)=kznachpruefungCAND +jgstaufber(wert(fnrhjdjgst))=startkey1)END PROC pruefungeinejgst;PROC +pruefungeineklasse(BOOL VAR bool):bool:=(wert(fnrhjdsj)=schuljahrCAND wert( +fnrhjdhj)=schulhalbjahrCAND wert(fnrhjdversetzung)=kznachpruefungCAND +jgstaufber(wert(fnrhjdjgst))=startkey1CAND wert(fnrhjdkennung)=startkey2)END +PROC pruefungeineklasse;END PACKET listenweiseergnachpr + diff --git a/app/schulis/2.2.1/src/1.listenweise erg vers konf b/app/schulis/2.2.1/src/1.listenweise erg vers konf new file mode 100644 index 0000000..83ce515 --- /dev/null +++ b/app/schulis/2.2.1/src/1.listenweise erg vers konf @@ -0,0 +1,219 @@ +PACKET listenweiseergverskonfDEFINES bearbeitungergverskonf, +ergverskonfnichtspeichern,ergverskonfspeichern:LET tofather=1,tograndfather=2 +,jgst5=5,jgst13=13,leerejgst=" ",maxfach=3,niltext="",blank=" ", +namenstrenner=", ",unterstrich="_",null=0,leererzug=" ",meldtrenner="#"; +LET nachpruefling="n",versetzter="vs",wiederholer="wf";LET schuljahrkey= +"Schuljahr",schulhalbjahrkey="Schulhalbjahr";LET maxschueler=15,erstesfeld=2, +felderprozeile=4,schuelerproseite=16,laengefach=2;LET gwklasse=1;LET +meldbestleer=59,meldnichtspeichern=63,meldplausi=57,meldwarten=69, +meldspeicherung=132,meldspeicherfehler=131,meldfalscheauswahl=56, +meldtransaktionsfehler=138,meldfalscheeingabe1=136,meldfalscheeingabe2=137, +meldungueltigesfach=149;LET pruefartgrenzen=3;LET fnrjgst=2,fnrtutor=3, +fnrklasse=2,fnrname=3,fnrvers=4,fnrnachprfaecher=5;LET einejgst=2,eineklasse= +3;LET standardanfang=1,standardeinstieg=4;LET allespruefen=1,einejgstpruefen= +2,eineklassepruefen=3;LET anzkenndaten=3,sek2min=11,laufbestand="ls";LET +logtextbeginn="Anw. 1.4.4 Versetzungen für ",logtextalleklassen= +"alle Klassen";BOOL VAR nochwelcheda,alleklassen;INT VAR waspruefen:=0;INT +VAR laengeklasse,laengename,laengenachprfaecher,bestandindex,laengevers, +schuelerzahl,aktuellesfeld;ROW schuelerproseiteROW anzkenndatenTEXT VAR +kenndatum;ROW schuelerproseiteTEXT VAR altedaten;TEXT VAR schuelertid:="", +hjdtid:="";TEXT VAR versetzungszeichen:="";TEXT VAR startkey1,startkey2, +sicherungstupel,vergleichsjgst,zulaessigekuerzel,schuljahr,schulhalbjahr, +gueltigejgst,gueltigerzug;TEXT VAR fachkatalog:="";LET trenner="�";PROC +bearbeitungergverskonf:reinitparsing;eingangsbildschirmpruefen;IF +eingangsbildschirmokTHEN initialisierungenvornehmen;naechsteportionlesen;IF +keinemehrdaTHEN bestandleermelden;enter(tofather)ELSE standardnprocFI ELSE +eingangsmaskenfehler;return(tofather)FI .eingangsbildschirmpruefen:INT VAR +pruefstatus:=null;startkey1:=niltext;startkey2:=niltext;vergleichsjgst:= +niltext;alleklassen:=FALSE ;IF standardmaskenfeld(fnrjgst)<>niltextTHEN +standardpruefe(pruefartgrenzen,fnrjgst,jgst5,jgst13,niltext,pruefstatus);IF +pruefstatus=nullTHEN startkey1:=jgstaufber(standardmaskenfeld(fnrjgst)); +vergleichsjgst:=startkey1;startkey2:=standardmaskenfeld(fnrtutor);IF +standardmaskenfeld(fnrtutor)=niltextTHEN bestandindex:=einejgstELSE +bestandindex:=eineklasseFI FI ELIF standardmaskenfeld(fnrtutor)<>niltextTHEN +pruefstatus:=fnrtutorELSE alleklassen:=TRUE FI .eingangsbildschirmok: +pruefstatus=null.initialisierungenvornehmen:plausipruefungvorbereiten; +bestandsetzen;standardstartproc(maske(vergleichsknoten));laengenfestlegen;IF +waspruefen=einejgstpruefenCAND sek2THEN startebildschirmblock(ixsustatjgst, +maxschueler);ELSE startebildschirmblock(ixsustatjgstzug,maxschueler);FI .sek2 +:int(startkey1)>=sek2min.bestandsetzen:bestimmebestand;setzestartkeys; +pruefebestand.bestimmebestand:schuljahr:=schulkenndatum(schuljahrkey); +schulhalbjahr:=schulkenndatum(schulhalbjahrkey);IF alleklassenTHEN +alleklassensetzenELSE SELECT bestandindexOF CASE einejgst:bestandjgstCASE +eineklasse:bestandklasseEND SELECT FI ;.alleklassensetzen:waspruefen:= +allespruefen;infeld(fnrjgst).bestandjgst:waspruefen:=einejgstpruefen;infeld( +fnrjgst).bestandklasse:waspruefen:=eineklassepruefen;infeld(fnrtutor). +setzestartkeys:inittupel(dnrschueler);putwert(fnrsustatuss,laufbestand); +putwert(fnrsusgrpjgst,startkey1);putwert(fnrsusgrpzugtut,startkey2);. +pruefebestand:IF waspruefen=einejgstpruefenCAND sek2THEN search(ixsustatjgst, +FALSE )ELSE search(ixsustatjgstzug,FALSE )FI ;IF dbstatus<>nullCOR (NOT +pruefungspeziell(waspruefen))THEN bestandleermelden;return(tofather);LEAVE +bearbeitungergverskonfELSE nochwelcheda:=TRUE FI .laengenfestlegen: +laengeklasse:=standardfeldlaenge(fnrklasse);laengename:=standardfeldlaenge( +fnrname);laengevers:=standardfeldlaenge(fnrvers);laengenachprfaecher:= +standardfeldlaenge(fnrnachprfaecher).plausipruefungvorbereiten: +standardmeldung(meldwarten,niltext);zulaessigekuerzel:=nachpruefling+ +versetzter+wiederholer+blank.naechsteportionlesen:blocklesenundausgeben. +keinemehrda:NOT nochwelcheda.bestandleermelden:infeld(fnrjgst); +standardmeldung(meldbestleer,niltext).eingangsmaskenfehler:standardmeldung( +meldfalscheauswahl,niltext);infeld(pruefstatus).END PROC +bearbeitungergverskonf;PROC ergverskonfnichtspeichern:nichtspeichernmelden; +startkeyssetzen;neuerblock.nichtspeichernmelden:standardmeldung( +meldnichtspeichern,niltext);pause(10).startkeyssetzen:restoretupel( +dnrschueler,sicherungstupel);#dr02.05.88#changeindex.END PROC +ergverskonfnichtspeichern;PROC ergverskonfspeichern:BOOL VAR hjdgefunden:= +FALSE ;pruefeplausibilitaet;IF dateninordnungTHEN speicherungdurchfuehren; +startkeyssetzen;neuerblockELSE eingabefehler;return(tofather)FI . +pruefeplausibilitaet:standardmeldung(meldplausi,niltext);BOOL VAR +dateninordnung:=TRUE ,richtigesverskz,ungueltigefachangaben:=FALSE , +fachfehler:=FALSE ;INT VAR versfeld:=felderprozeile;FOR suindFROM 1UPTO +schuelerzahlREP pruefezeile;IF NOT dateninordnungTHEN LEAVE +pruefeplausibilitaetFI ;versfeldINCR felderprozeilePER .pruefezeile:TEXT VAR +gefundenesverskz:=standardmaskenfeld(versfeld);richtigesverskz:= +gefundenesverskz=niltextOR (pos(zulaessigekuerzel,gefundenesverskz)>null);IF +richtigesverskzTHEN pruefefachangabenzuverskz;IF ungueltigefachangabenTHEN +dateninordnung:=FALSE FI ELSE dateninordnung:=FALSE FI . +pruefefachangabenzuverskz:IF gefundenesverskz<>nachprueflingTHEN IF NOT +keineeingabenTHEN ungueltigefachangaben:=TRUE FI ELSE pruefefachangaben;IF +fachfehlerTHEN ungueltigefachangaben:=TRUE FI FI .pruefefachangaben:IF +fachkatalog=niltextTHEN holeaktuellenfachkatalogFI ;TEXT VAR fachangaben:= +standardmaskenfeld(versfeld+1);INT VAR lenfachang:=length(fachangaben);INT +VAR fachanzahl:=(lenfachang+1)DIV laengefach;INT VAR i;TEXT VAR fach;FOR i +FROM 0UPTO fachanzahl-1REP fach:=subtext(fachangaben,i*laengefach+1,i* +laengefach+laengefach);changeall(fach,unterstrich,niltext);fach:=compress( +fach);IF fach<>niltextCAND fachungueltig(fach)THEN fachfehler:=TRUE FI UNTIL +fachfehlerPER .keineeingaben:BOOL VAR b:=TRUE ;INT VAR lv;TEXT VAR t:= +standardmaskenfeld(versfeld+1);FOR lvFROM 1UPTO length(t)REP b:=(tSUB lv)= +unterstrichUNTIL NOT bPER ;b.speicherungdurchfuehren:vorbereiten; +logeintragvornehmen;aendernschleife;kurzwarten.logeintragvornehmen:TEXT VAR +eintrag:=logtextbeginn;IF alleklassenTHEN eintragCAT logtextalleklassenELSE +eintragCAT startkey1;eintragCAT startkey2FI ;logeintrag(eintrag).kurzwarten: +pause(10).vorbereiten:gueltigejgst:=vergleichsjgst;gueltigerzug:=startkey2;. +aendernschleife:INT VAR suind;INT VAR zahlderaenderungen:=null;INT VAR +satzindex:=felderprozeile-1;FOR suindFROM 1UPTO schuelerzahlREP +behandleschuelersatz;satzindexINCR felderprozeilePER .behandleschuelersatz: +IF vergleichsjgst=niltextTHEN gueltigejgstneubestimmenFI ;IF startkey2= +niltextTHEN gueltigenzugneubestimmenFI ;IF datenveraendertTHEN +fuehreaenderungaus;meldevollzugFI .gueltigejgstneubestimmen:TEXT VAR +pruefjgst:=subtext(standardmaskenfeld(satzindex-1),1,2);IF pruefjgst<> +leerejgstTHEN gueltigejgst:=pruefjgstFI ;.gueltigenzugneubestimmen:TEXT VAR +pruefzug:=subtext(standardmaskenfeld(satzindex-1),3,6);IF pruefzug<>leererzug +THEN gueltigerzug:=pruefzugFI .datenveraendert:altedaten(suind)<>( +standardmaskenfeld(satzindex+1)+standardmaskenfeld(satzindex+2)). +fuehreaenderungaus:lesenvorbereiten;lesen;hjdgefunden:=dbstatus=ok;IF +dbstatus=okTHEN saveupdateposition(dnrhalbjahresdaten);hjdtid:=gettid; +versetzungszeichen:=wert(fnrhjdversetzung);zurueckschreiben;ELSE +versetzungszeichen:=niltext;neuensatzankoppelnFI .lesenvorbereiten: +zahlderaenderungenINCR 1;schluesselfuerhjdsetzen(dnrhalbjahresdaten,kenndatum +[suind],schuljahr,schulhalbjahr,gueltigejgst);.lesen:search( +dnrhalbjahresdaten,TRUE );.zurueckschreiben:IF datenaenderungTHEN +transaktionsfehlerELSE schreibtransaktionFI .datenaenderung:( +versetzungsergebnis+nachpruefungsfaecher)<>altedaten(suind). +versetzungsergebnis:wert(fnrhjdversetzung).transaktionsfehler:standardmeldung +(meldtransaktionsfehler,niltext);return(tofather);infeld(suind*felderprozeile +);LEAVE ergverskonfspeichern.schreibtransaktion:setzedaten; +vorhandenensatzaendern.setzedaten:setzeverskz;setzefaecherdaten.setzeverskz: +putwert(fnrhjdversetzung,standardmaskenfeld(satzindex+1)).setzefaecherdaten: +INT VAR fachindanfang:=1,fachindende:=2;INT VAR fachind;TEXT VAR +eingegebenenpfaecher:=standardmaskenfeld(satzindex+2);TEXT VAR einzelfach; +FOR fachindFROM 0UPTO maxfach-1REP einzelfach:=subtext(eingegebenenpfaecher, +fachindanfang,fachindende);IF einzelfach<>laengefach*unterstrichTHEN +changeall(einzelfach,unterstrich,niltext);putwert(fnrhjdnachfach1+fachind, +compress(einzelfach))ELSE putwert(fnrhjdnachfach1+fachind,niltext)FI ; +fachindanfangINCR laengefach;fachindendeINCR laengefach;PER . +vorhandenensatzaendern:IF standardmaskenfeld(satzindex+1)<>versetzungszeichen +THEN restoreupdateposition(dnrhalbjahresdaten);#update(dnrhalbjahresdaten); +dr10.05.88#selupdate(dnrhalbjahresdaten)ELSE replace(dnrhalbjahresdaten, +hjdtid)FI .neuensatzankoppeln:setzedaten;putwert(fnrhjdkennung,compress( +gueltigerzug));insert(dnrhalbjahresdaten);hjdtid:=gettid;.meldevollzug:TEXT +VAR meldungstext;IF dbstatus=0THEN IF NOT hjdgefundenTHEN +neueshjdtidinschuelerdateieintragen(satzindex+1);FI ;#dr04.05.88hjdtid:= +gettid;neueshjdtidinschuelerdateieintragen(satzindex+1);##dr10.05.88 +eventuellinstatwuerfelaendern(satzindex+1);#meldungstext:=compress( +standardmaskenfeld(satzindex))+meldtrenner;standardmeldung(meldspeicherung, +meldungstext)ELSE meldungstext:=text(dbstatus)+meldtrenner;meldungstextCAT +compress(standardmaskenfeld(satzindex));meldungstextCAT meldtrenner; +standardmeldung(meldspeicherfehler,meldungstext);return(tofather);LEAVE +ergverskonfspeichernFI ;infeld(satzindex+1).startkeyssetzen:restoretupel( +dnrschueler,sicherungstupel);#dr02.05.88#changeindex.eingabefehler:IF NOT +richtigesverskzTHEN standardmeldung(meldfalscheeingabe1,standardmaskenfeld( +versfeld)+meldtrenner);infeld(versfeld)ELIF fachfehlerTHEN standardmeldung( +meldungueltigesfach,fach+meldtrenner);infeld(versfeld+1)ELSE standardmeldung( +meldfalscheeingabe2,niltext);infeld(versfeld+1)FI .END PROC +ergverskonfspeichern;PROC neuerblock:blocklesenundausgeben;IF nochwelcheda +THEN return(tofather)ELSE enter(tograndfather)FI .END PROC neuerblock;PROC +blocklesenundausgeben:parsenooffields(fnrhjdnachfach3-dnrhalbjahresdaten); +vorbereiten;initgruppenwechsel;gewuenschteszeigen;nachbereiten;reinitparsing. +vorbereiten:IF NOT nochwelchedaTHEN reinitparsing;LEAVE blocklesenundausgeben +FI ;standardmeldung(meldwarten,niltext);schuelerzahl:=null;aktuellesfeld:= +erstesfeld.gewuenschteszeigen:parsenooffields(12);#dr04.05.88#bildschirmblock +(PROC datenzeigen,BOOL PROC (INT CONST )pruefungspeziell,waspruefen); +reinitparsing#dr04.05.88#.nachbereiten:nochwelcheda:=(schuelerzahl>null);IF +nochwelchedaTHEN savetupel(dnrschueler,sicherungstupel);#dr02.05.88# +restlichezeilenloeschen;infeld(standardanfang);standardfelderausgebenELSE +LEAVE blocklesenundausgebenFI ;infeld(standardeinstieg). +restlichezeilenloeschen:INT VAR zeilenzaehler;INT VAR zeilenfeld:=( +schuelerzahl*felderprozeile)+1;FOR zeilenzaehlerFROM schuelerzahlUPTO +maxschuelerREP loeschezeilePER .loeschezeile:INT VAR zeilenincr;FOR +zeilenincrFROM 1UPTO felderprozeileREP zeilenfeldINCR 1;standardmaskenfeld( +standardfeldlaenge(zeilenfeld)*blank,zeilenfeld);feldschutz(zeilenfeld)PER . +END PROC blocklesenundausgeben;PROC namezeigen:namenretten;standardmaskenfeld +(text(schuelername+namenstrenner+schuelervorname,laengename),aktuellesfeld); +aktuellesfeldINCR 1.namenretten:TEXT VAR schuelername,schuelervorname; +schuelername:=wert(fnrsufamnames);schuelervorname:=wert(fnrsurufnames); +kenndatum[schuelerzahl][1]:=schuelername;kenndatum[schuelerzahl][2]:= +schuelervorname;kenndatum[schuelerzahl][3]:=datumrekonversion(wert( +fnrsugebdatums));.END PROC namezeigen;PROC datenzeigen:BOOL VAR neuerstellen +:=FALSE ;zeigen;merken.zeigen:vorbereiten;alteklassezeigen;namezeigen; +halbjahresdatensuchen;versetzungsdatenzeigen.vorbereiten:schuelerzahlINCR 1; +TEXT VAR merkdaten:=niltext.alteklassezeigen:TEXT CONST alteklasse:= +jgstaufber(wert(fnrsusgrpjgst))+wert(fnrsusgrpzugtut);gruppenwechsel( +alteklasse,gwklasse,laengeklasse,1,aktuellesfeld).halbjahresdatensuchen: +inittupel(dnrhalbjahresdaten);#schluesselfuerhjdsetzen(dnrhalbjahresdaten, +kenndatum[schuelerzahl],schuljahr,schulhalbjahr,startkey1);search( +dnrhalbjahresdaten,TRUE );neuerstellen:=dbstatus<>ok##dr04.05.88#IF wert( +fnrsutidakthjd)<>niltext#neudr04.05.88#THEN disablestop;readtid( +dnrhalbjahresdaten,wert(fnrsutidakthjd));IF iserrorTHEN clearerror; +neuerstellen:=TRUE ELSE neuerstellen:=FALSE FI ;enablestopELSE neuerstellen:= +TRUE FI .versetzungsdatenzeigen:versetzunginmaske;feldfreigeben; +nachprfaecherinmaske;feldfreigeben.versetzunginmaske:TEXT VAR versetzungskz:= +niltext;IF NOT neuerstellenTHEN versetzungskz:=wert(fnrhjdversetzung);FI ; +merkdatenCAT versetzungskz;standardmaskenfeld(versetzungskz,aktuellesfeld). +nachprfaecherinmaske:TEXT VAR nachprfaecher:=niltext;IF NOT neuerstellenTHEN +nachprfaecher:=nachpruefungsfaecher;FI ;merkdatenCAT nachprfaecher; +standardmaskenfeld(nachprfaecher,aktuellesfeld).feldfreigeben:feldfrei( +aktuellesfeld);aktuellesfeldINCR 1.merken:altedaten(schuelerzahl):=merkdaten. +END PROC datenzeigen;TEXT PROC nachpruefungsfaecher:TEXT VAR nfaecher:= +niltext;INT VAR fachind;FOR fachindFROM 0UPTO maxfach-1REP IF wert( +fnrhjdnachfach1+fachind)=niltextTHEN nfaecherCAT (laengefach*unterstrich) +ELSE nfaecherCAT text(wert(fnrhjdnachfach1+fachind),laengefach);FI PER ; +nfaecherEND PROC nachpruefungsfaecher;PROC feldloeschen(INT CONST laenge): +standardmaskenfeld(laenge*blank,aktuellesfeld)END PROC feldloeschen;BOOL +PROC pruefungspeziell(INT CONST wasistzutun):BOOL VAR b:=FALSE ;SELECT +wasistzutunOF CASE allespruefen:pruefungalleklassen(b)CASE einejgstpruefen: +pruefungeinejgst(b)CASE eineklassepruefen:pruefungeineklasse(b)END SELECT ;b +END PROC pruefungspeziell;PROC pruefungalleklassen(BOOL VAR bool):bool:=(wert +(fnrsustatuss)=laufbestand)END PROC pruefungalleklassen;PROC pruefungeinejgst +(BOOL VAR bool):bool:=(wert(fnrsustatuss)=laufbestandCAND jgstaufber(wert( +fnrsusgrpjgst))=startkey1)END PROC pruefungeinejgst;PROC pruefungeineklasse( +BOOL VAR bool):bool:=(wert(fnrsustatuss)=laufbestandCAND jgstaufber(wert( +fnrsusgrpjgst))=startkey1CAND wert(fnrsusgrpzugtut)=startkey2)END PROC +pruefungeineklasse;PROC neueshjdtidinschuelerdateieintragen(INT CONST nr):IF +standardmaskenfeld(nr)<>versetzungszeichenTHEN inittupel(dnrschueler);putwert +(fnrsufamnames,wert(fnrhjdfamnames));putwert(fnrsurufnames,wert( +fnrhjdrufnames));putwert(fnrsugebdatums,wert(fnrhjdgebdats));search( +dnrschueler,TRUE );IF dbstatus=okTHEN schuelertid:=gettid;putwert( +fnrsutidakthjd,hjdtid);replace(dnrschueler,schuelertid)FI FI END PROC +neueshjdtidinschuelerdateieintragen;BOOL PROC fachungueltig(TEXT CONST objekt +):pos(fachkatalog,trenner+objekt+trenner)=0END PROC fachungueltig;PROC +fachcat(BOOL VAR b):fachkatalogCAT wert(dnrfaecher+1)+trenner;END PROC +fachcat;PROC holeaktuellenfachkatalog:fachkatalog:=trenner;statleseschleife( +dnrfaecher,"","",dnrfaecher+1,dnrfaecher+1,PROC fachcat);END PROC +holeaktuellenfachkatalog;#dr10.05.88PROC eventuellinstatwuerfelaendern(INT +CONST nummer):IF standardmaskenfeld(nummer)<>versetzungszeichenTHEN +kuerzelsummeeinsrunter(statnrversetzung,jgstaufber(gueltigejgst),compress( +gueltigerzug),compress(laufbestand),compress(versetzungszeichen)); +kuerzelsummeeinsrauf(statnrversetzung,jgstaufber(gueltigejgst),compress( +gueltigerzug),compress(laufbestand),compress(standardmaskenfeld(nummer)));FI +END PROC eventuellinstatwuerfelaendern;#END PACKET listenweiseergverskonf + diff --git a/app/schulis/2.2.1/src/1.listenweise klassenbildung b/app/schulis/2.2.1/src/1.listenweise klassenbildung new file mode 100644 index 0000000..c563019 --- /dev/null +++ b/app/schulis/2.2.1/src/1.listenweise klassenbildung @@ -0,0 +1,270 @@ +PACKET listenweiseklassenbildungDEFINES bearbeitungklassenbildung, +klassenbildungnichtspeichern,klassenbildungspeichern:LET meldbestleer=59, +meldnichtspeichern=63,meldwarten=69,meldspeicherung=132,meldspeicherfehler= +131,meldplausi=57,meldfalscheauswahl=56,meldexistiertnicht=134, +meldzuggewechselt=135,meldfalscheshj=78;LET meldtrenner="#",meldkznorm="+"; +LET fnrneuan5=2,fnrneuan11=3,fnrneuansonst=4,fnrjgst=5,fnrtutor=6, +fnrnurnichtvers=7,fnrgeplhj=8,fnrakthj=9;LET fnrherk=2,fnralteklasse=3, +fnrname=4,fnrneueklasse=5;LET tofather=1,tograndfather=2;LET niltext="",blank +=" ",namenstrenner=", ";LET pruefartalternative=5,pruefartgrenzen=3,jgst5=5, +jgst13=13,null=0,freigabeincr=2;LET schuljahrkey="Schuljahr",schulhalbjahrkey +="Schulhalbjahr",best5="n05",best11="n11",bestsonst="nso",bestlaufsj="ls"; +LET jgst05="05",jgst11="11",maxjgst="13",leerejgst=" ";LET kzwiederholer="w" +;LET standardanfang=1,standardeinstieg=6;LET ersteskommendeshj=1, +geplanteszweiteshj=2,aktuelleshj=3;LET maxschueler=15,erstesfeld=2, +felderprozeile=5,schuelerproseite=16,anzkenndaten=3;LET gwherk=1,gwalteklasse +=2,gwneuejgst=3;LET logtextbeginn="Anw. 1.4.1 Klassenbildung ",logtextneu5= +"Neu 5",logtextneu11="Neu 11",logtextneuso="Neu sonstige",logtextwiederhol= +", Wiederholer",logtextfuer="für ",logtextakthj="aktuelles Halbjahr ";BOOL +VAR nochwelcheda,klassenbehandlung,nurnichtversetzte,logakthalbjahr;LET +allespruefen=1,einejgstpruefen=2,eineklassepruefen=3, +einejgstwiederholerpruefen=4,eineklassewiederholerpruefen=5;INT VAR +waspruefen:=0;INT VAR laengeherk,laengealteklasse,laengename,laengeneueklasse +,bestandindex,halbjahresindex,indexbestand,schuelerzahl,aktuellesfeld, +wiederholerbestand;ROW schuelerproseiteROW anzkenndatenTEXT VAR kenndatum;# +ROW schuelerproseiteTEXT VAR name;ROW schuelerproseiteTEXT VAR rufname;ROW +schuelerproseiteTEXT VAR gebdat;##17.07.87dr#ROW schuelerproseiteTEXT VAR +zugtutor;TEXT VAR altejgst,neuejgst,benoetigtevergljgst,vergleichsjgst, +vergleichszug,sicherungstupel,klassenbildungsbestand,aktschuljahr, +aktschulhalbjahr;PROC bearbeitungklassenbildung:reinitparsing; +eingangsbildschirmpruefen;IF eingangsbildschirmokTHEN +initialisierungenvornehmen;naechsteportionlesen;IF keinemehrdaTHEN +bestandleermelden;enter(tofather)ELSE standardnprocFI ELSE +eingangsmaskenfehler;return(tofather)FI .eingangsbildschirmpruefen: +ankreuzfelderpruefen;IF eingangsbildschirmokTHEN jgstzugpruefen;IF +eingangsbildschirmokTHEN halbjahrmitankreuzungvergleichenFI FI . +ankreuzfelderpruefen:INT VAR pruefstatus;standardpruefe(pruefartalternative, +fnrneuan5,fnrjgst,null,niltext,pruefstatus);.jgstzugpruefen:IF +standardmaskenfeld(fnrjgst)<>niltextTHEN standardpruefe(pruefartgrenzen, +fnrjgst,jgst5,jgst13,niltext,pruefstatus)FI ;IF eingangsbildschirmokTHEN +nurnichtversetzte:=standardmaskenfeld(fnrnurnichtvers)<>niltext; +bestimmebestandindex;IF nurnichtversetzteCAND (bestandindex<fnrjgst)THEN +standardmeldung(meldfalscheauswahl,niltext);pruefstatus:=fnrnurnichtversFI +FI .bestimmebestandindex:FOR bestandindexFROM fnrneuan5UPTO fnrjgstREP IF +standardmaskenfeld(bestandindex)<>niltextTHEN LEAVE bestimmebestandindexFI +PER .halbjahrmitankreuzungvergleichen:aktschulhalbjahr:=schulkenndatum( +schulhalbjahrkey);aktschuljahr:=schulkenndatum(schuljahrkey);IF +aktschulhalbjahr="2"THEN IF standardmaskenfeld(fnrgeplhj)<>""THEN +standardmeldung(meldfalscheshj,aktschulhalbjahr+meldkznorm);pruefstatus:= +fnrgeplhjFI ELIF aktschulhalbjahr="1"THEN IF standardmaskenfeld(fnrgeplhj)="" +CAND standardmaskenfeld(fnrakthj)=""THEN standardmeldung(meldfalscheshj, +aktschulhalbjahr+meldkznorm);pruefstatus:=fnrgeplhjFI FI . +eingangsbildschirmok:pruefstatus=0.initialisierungenvornehmen: +bestandunddbmaskesetzen;halbjahrsetzen;nichtverspruefen; +plausipruefungvorbereiten;standardstartproc(maske(vergleichsknoten)); +laengenfestlegen;IF nurnichtversetzteTHEN startebildschirmblock( +wiederholerbestand,maxschueler)ELSE startebildschirmblock(indexbestand, +maxschueler)FI .bestandunddbmaskesetzen:standardmeldung(meldwarten,niltext); +klassenbehandlung:=FALSE ;SELECT bestandindexOF CASE fnrneuan5:neuan5setzen +CASE fnrneuan11:neuan11setzenCASE fnrneuansonst:neuansonstsetzenOTHERWISE +jgstoderzugsetzenEND SELECT ;pruefebestand.neuan5setzen:vergleichsjgst:= +jgst05;benoetigtevergljgst:=vergleichsjgst;klassenbildungsbestand:=best5; +indexbestand:=ixsustatschulkenn;waspruefen:=allespruefen;infeld(fnrneuan5). +neuan11setzen:vergleichsjgst:=jgst11;benoetigtevergljgst:=vergleichsjgst; +klassenbildungsbestand:=best11;indexbestand:=ixsustatschulkenn;waspruefen:= +allespruefen;infeld(fnrneuan11).neuansonstsetzen:vergleichsjgst:=niltext; +benoetigtevergljgst:=vergleichsjgst;klassenbildungsbestand:=bestsonst; +indexbestand:=ixsustatschulkenn;waspruefen:=allespruefen;infeld(fnrneuansonst +).jgstoderzugsetzen:TEXT CONST jgst:=jgstaufber(standardmaskenfeld(fnrjgst)); +vergleichsjgst:=jgst;klassenbildungsbestand:=bestlaufsj;IF eineklasseTHEN +setzeklasseELSE setzejgstFI ;IF NOT ((akthalbjahrCOR geplhalbjahr)COR +nurnichtversetzte)THEN neuejgst:=jgstaufber(text(int(altejgst)+1)); +benoetigtevergljgst:=neuejgstELSE neuejgst:=altejgst;benoetigtevergljgst:= +altejgstFI .eineklasse:TEXT CONST zug:=standardmaskenfeld(fnrtutor); +vergleichszug:=zug;klassenbehandlung:=zug<>niltext;klassenbehandlung. +setzeklasse:IF nurnichtversetzteTHEN wiederholerbestand:=ixhjdsjhjverjgstkenn +;waspruefen:=eineklassewiederholerpruefenELSE indexbestand:=ixsustatjgstzug; +waspruefen:=eineklassepruefen;FI ;altejgst:=jgst;infeld(fnrtutor).setzejgst: +IF nurnichtversetzteTHEN IF NOT klassenbehandlungTHEN #???index# +wiederholerbestand:=ixhjdsjhjverjgst;#wiederholer#ELSE wiederholerbestand:= +ixhjdsjhjverjgstkenn;FI ;waspruefen:=einejgstwiederholerpruefenELSE IF NOT +klassenbehandlungTHEN indexbestand:=ixsustatjgst;ELSE indexbestand:= +ixsustatjgstzug;FI ;waspruefen:=einejgstpruefen;FI ;altejgst:=jgst;infeld( +fnrjgst).pruefebestand:reinitparsing;IF nurnichtversetzteTHEN inittupel( +dnrhalbjahresdaten);schluesselfelderinhalbjahresdatenbelegen;search( +wiederholerbestand,FALSE );ELSE inittupel(dnrschueler); +schluesselfelderinschuelerbelegen;search(indexbestand,FALSE );FI ;IF +bestandnichtvorhandenTHEN bestandleermelden;return(tofather);LEAVE +bearbeitungklassenbildungELSE nochwelcheda:=TRUE FI . +schluesselfelderinhalbjahresdatenbelegen:putwert(fnrhjdversetzung, +kzwiederholer);putwert(fnrhjdsj,aktschuljahr);putwert(fnrhjdhj, +aktschulhalbjahr);putwert(fnrhjdjgst,vergleichsjgst);putwert(fnrhjdkennung, +vergleichszug);.schluesselfelderinschuelerbelegen:putwert(fnrsustatuss, +klassenbildungsbestand);IF indexbestand=ixsustatjgstzugOR indexbestand= +ixsustatjgstTHEN putwert(fnrsusgrpjgst,vergleichsjgst);putwert( +fnrsusgrpzugtut,vergleichszug)FI .bestandnichtvorhanden:dbstatus<>okOR (NOT +nurnichtversetzteCAND NOT pruefungspeziell(waspruefen))OR (nurnichtversetzte +CAND NOT pruefungspeziell(waspruefen)).halbjahrsetzen:logakthalbjahr:=FALSE ; +IF geplhalbjahrTHEN geplhalbjahrsetzenELIF akthalbjahrTHEN logakthalbjahr:= +TRUE ;akthalbjahrsetzenELSE ersteshalbjahrsetzenFI .geplhalbjahr:INT VAR +angekreuztesfeld;standardmaskenfeld(fnrgeplhj)<>niltext.geplhalbjahrsetzen: +IF akthalbjahrCOR neuanmeldungTHEN angekreuztesfeld:=fnrgeplhj;falscheauswahl +ELSE halbjahresindex:=geplanteszweiteshjFI .akthalbjahr:standardmaskenfeld( +fnrakthj)<>niltext.akthalbjahrsetzen:IF neuanmeldungTHEN angekreuztesfeld:= +fnrakthj;falscheauswahlELSE halbjahresindex:=aktuelleshjFI . +ersteshalbjahrsetzen:halbjahresindex:=ersteskommendeshj.neuanmeldung: +bestandindex<=fnrneuansonst.falscheauswahl:standardmeldung(meldfalscheauswahl +,niltext);infeld(angekreuztesfeld);return(tofather);LEAVE +bearbeitungklassenbildung.nichtverspruefen:IF (nurnichtversetzteCAND ( +halbjahresindex<>ersteskommendeshj))COR (((NOT nurnichtversetzte)CAND (jgst= +maxjgst))CAND (halbjahresindex=ersteskommendeshj))THEN angekreuztesfeld:= +fnrnurnichtvers;falscheauswahlELIF nurnichtversetzteTHEN halbjahresindex:= +ersteskommendeshjFI .plausipruefungvorbereiten:#holevergleichssg( +benoetigtevergljgst,(halbjahresindex=aktuelleshj)COR nurnichtversetzte)dr13. +11.87#holevergleichssg(benoetigtevergljgst,halbjahresindex=aktuelleshj). +laengenfestlegen:laengeherk:=standardfeldlaenge(fnrherk);laengealteklasse:= +standardfeldlaenge(fnralteklasse);laengename:=standardfeldlaenge(fnrname); +laengeneueklasse:=standardfeldlaenge(fnrneueklasse).naechsteportionlesen: +blocklesenundausgeben.keinemehrda:NOT nochwelcheda.bestandleermelden: +standardmeldung(meldbestleer,niltext).eingangsmaskenfehler:infeld(pruefstatus +).END PROC bearbeitungklassenbildung;PROC klassenbildungnichtspeichern: +nichtspeichernmelden;startkeyssetzen;neuerblock.nichtspeichernmelden: +standardmeldung(meldnichtspeichern,niltext);pause(10).startkeyssetzen: +restoretupel(dnrschueler,sicherungstupel);changeindex.END PROC +klassenbildungnichtspeichern;PROC klassenbildungspeichern: +bestimmeaenderungsart;pruefeplausibilitaet;IF dateninordnungTHEN +speicherungdurchfuehren;startkeyssetzen;neuerblockELSE eingabefehler;return( +tofather)FI .bestimmeaenderungsart:BOOL VAR normalfall:=NOT ((bestandindex> +fnrneuansonst)CAND (halbjahresindex=aktuelleshj));.pruefeplausibilitaet:BOOL +VAR dateninordnung:=TRUE ;INT VAR aktfeld:=1;TEXT VAR bezugsjgst:="", +gelesenejgst;standardmeldung(meldplausi,niltext);FOR suindFROM 1UPTO +schuelerzahlREP pruefezeile;IF NOT dateninordnungTHEN LEAVE +pruefeplausibilitaetFI ;PER .pruefezeile:TEXT VAR aktuellerzug;TEXT VAR +aktuelleschuelergruppe;aktfeldINCR felderprozeile;aktuellerzug:= +standardmaskenfeld(aktfeld);gelesenejgst:=standardmaskenfeld(aktfeld-1);IF +gelesenejgst<>leerejgstTHEN bezugsjgst:=gelesenejgst;FI ; +aktuelleschuelergruppe:=bezugsjgst+aktuellerzug;IF normalfallTHEN +dateninordnung:=(aktuellerzug=niltext)COR istzulaessigesg( +aktuelleschuelergruppe)ELSE dateninordnung:=istzulaessigesg( +aktuelleschuelergruppe)CAND (aktuellerzug<>niltext)FI . +speicherungdurchfuehren:vorbereiten;logeintragvornehmen;aendernschleife; +kurzwarten.logeintragvornehmen:TEXT VAR eintrag:=logtextbeginn;IF +klassenbildungsbestand=best5THEN eintragCAT logtextfuer;eintragCAT +logtextneu5ELIF klassenbildungsbestand=best11THEN eintragCAT logtextfuer; +eintragCAT logtextneu11ELIF klassenbildungsbestand=bestsonstTHEN eintragCAT +logtextfuer;eintragCAT logtextneusoELIF klassenbildungsbestand=bestlaufsj +THEN IF logakthalbjahrTHEN eintragCAT logtextakthjFI ;eintragCAT logtextfuer; +eintragCAT vergleichsjgst;eintragCAT vergleichszug;IF nurnichtversetzteTHEN +eintragCAT logtextwiederholFI ;FI ;logeintrag(eintrag).kurzwarten:pause(10). +vorbereiten:INT VAR aufsatzpunkt:=null;.aendernschleife:INT VAR suind;INT +VAR zahlderaenderungen:=null;FOR suindFROM 1UPTO schuelerzahlREP +behandleschuelersatzPER .behandleschuelersatz:IF datenveraendertTHEN +fuehreaenderungaus;meldevollzugELSE merkenalsaufsatzpunktFI .datenveraendert: +zugtutor(suind)<>standardmaskenfeld((suind*felderprozeile)+1). +merkenalsaufsatzpunkt:aufsatzpunkt:=suind.fuehreaenderungaus:lesenvorbereiten +;lesen;IF normalfallTHEN zurueckschreibenELSE aenderneinheitFI . +lesenvorbereiten:putwert(fnrsufamnames,kenndatum[suind][1]);putwert( +fnrsurufnames,kenndatum[suind][2]);putwert(fnrsugebdatums,datumskonversion( +kenndatum[suind][3]));zahlderaenderungenINCR 1;.lesen:search(dnrschueler, +TRUE ).zurueckschreiben:IF dbstatus=0THEN putwert(fnrsuneuerzugtut, +standardmaskenfeld((suind*felderprozeile)+1));replace(dnrschueler,gettid)FI . +aenderneinheit:TEXT VAR alterzug:=zugtutor(suind);TEXT VAR neuerzug:= +standardmaskenfeld((suind*felderprozeile)+1);TEXT VAR geliefertejgst:= +jgstaufber(wert(fnrsusgrpjgst));TEXT VAR gelieferterzug:=wert(fnrsusgrpzugtut +);IF dbstatus=0CAND geliefertejgst=altejgstCAND gelieferterzug=alterzugTHEN +TEXT VAR schuelertid:=gettid;aenderntransaktion;ELSE transaktionsfehlerFI . +aenderntransaktion:removeoutofindex(ixsustatjgstzug);# +aenderunginstatraumvorbereiten(FALSE );dr10.05.88 +einenschuelerausstatraumentfernen;#IF wert(fnrsutidakthjd)<>niltextTHEN +readtid(dnrhalbjahresdaten,wert(fnrsutidakthjd));putwert(fnrhjdkennung, +neuerzug);#update(dnrhalbjahresdaten);dr10.05.88#selupdate(dnrhalbjahresdaten +);putwert(fnrsutidakthjd,gettid)ELSE FI ;putwert(fnrsusgrpzugtut,neuerzug); +replace(dnrschueler,schuelertid);insertinindex(ixsustatjgstzug);#IF dbstatus +<>okTHEN putwert(fnrsusgrpzugtut,zugtutor[suind]);FI ; +einenschuelerinstatraumeinfuegen;dr10.05.88#.transaktionsfehler: +standardmeldung(meldzuggewechselt,niltext);return(tofather);infeld((suind* +felderprozeile)+1);LEAVE klassenbildungspeichern.meldevollzug:TEXT VAR +meldungstext;INT VAR satzindex:=(suind*felderprozeile)-1;IF dbstatus=0THEN +meldungstext:=compress(standardmaskenfeld(satzindex))+meldtrenner; +standardmeldung(meldspeicherung,meldungstext)ELSE meldungstext:=text(dbstatus +)+meldtrenner;meldungstextCAT compress(standardmaskenfeld(satzindex)); +meldungstextCAT meldtrenner;standardmeldung(meldspeicherfehler,meldungstext); +return(tofather);LEAVE klassenbildungspeichernFI ;infeld(satzindex+2). +startkeyssetzen:IF (NOT klassenbehandlung)OR normalfallTHEN aufsatzpunkt:= +schuelerzahlFI ;IF aufsatzpunkt>nullTHEN restoretupel(dnrschueler, +sicherungstupel);changeindexFI .eingabefehler:standardmeldung( +meldexistiertnicht,standardmaskenfeld(aktfeld)+meldtrenner);infeld(aktfeld). +END PROC klassenbildungspeichern;PROC neuerblock:blocklesenundausgeben;IF +nochwelchedaTHEN return(tofather)ELSE enter(tograndfather)FI .END PROC +neuerblock;PROC blocklesenundausgeben:vorbereiten;initgruppenwechsel;SELECT +bestandindexOF CASE fnrneuan5:neuan5lesenCASE fnrneuan11:neuan11lesenCASE +fnrneuansonst:neuansonstlesenOTHERWISE jgstoderzuglesenEND SELECT ; +nachbereiten.vorbereiten:IF NOT nochwelchedaTHEN LEAVE blocklesenundausgeben +FI ;standardmeldung(meldwarten,niltext);schuelerzahl:=null;aktuellesfeld:= +erstesfeld.neuan5lesen:bildschirmblock(PROC neuan5zeigen,BOOL PROC (INT +CONST )pruefungspeziell,waspruefen).neuan11lesen:bildschirmblock(PROC +neuan11zeigen,BOOL PROC (INT CONST )pruefungspeziell,waspruefen). +neuansonstlesen:bildschirmblock(PROC neuansonstzeigen,BOOL PROC (INT CONST ) +pruefungspeziell,waspruefen).jgstoderzuglesen:bildschirmblock(PROC +jgstoderzugzeigen,BOOL PROC (INT CONST )pruefungspeziell,waspruefen). +nachbereiten:nochwelcheda:=(schuelerzahl>null);IF nochwelchedaTHEN savetupel( +dnrschueler,sicherungstupel);restlichezeilenloeschen;infeld(standardanfang); +standardfelderausgebenFI ;infeld(standardeinstieg).restlichezeilenloeschen: +INT VAR zeilenzaehler;INT VAR zeilenfeld:=(schuelerzahl*felderprozeile)+1; +FOR zeilenzaehlerFROM schuelerzahlUPTO maxschuelerREP loeschezeilePER . +loeschezeile:INT VAR zeilenincr;FOR zeilenincrFROM 1UPTO felderprozeileREP +zeilenfeldINCR 1;standardmaskenfeld(standardfeldlaenge(zeilenfeld)*blank, +zeilenfeld)PER ;feldschutz(zeilenfeld).END PROC blocklesenundausgeben;PROC +neuanzeigen(TEXT CONST jgst):schuelerzahlINCR 1;herkunftsschulezeigen; +alteklassezeigen;namezeigen;neueklassezeigen;neuerzugtutorzeigen. +neueklassezeigen:gruppenwechsel(jgst,gwneuejgst,laengeneueklasse,1, +aktuellesfeld).END PROC neuanzeigen;PROC namezeigen:namenretten; +standardmaskenfeld(text(schuelername+namenstrenner+schuelervorname,laengename +),aktuellesfeld);INT VAR eingabefeld:=aktuellesfeld+freigabeincr; +standardmaskenfeld(niltext,eingabefeld);feldfrei(eingabefeld);aktuellesfeld +INCR 1.namenretten:TEXT VAR schuelername,schuelervorname;schuelername:=wert( +fnrsufamnames);schuelervorname:=wert(fnrsurufnames);kenndatum[schuelerzahl][1 +]:=schuelername;kenndatum[schuelerzahl][2]:=schuelervorname;kenndatum[ +schuelerzahl][3]:=datumrekonversion(wert(fnrsugebdatums));.END PROC +namezeigen;PROC herkunftsschulezeigen:gruppenwechsel(wert(fnrsuskennlschule), +gwherk,laengeherk,1,aktuellesfeld)END PROC herkunftsschulezeigen;PROC +alteklassezeigen:gruppenwechsel(wert(fnrsuklasselschule),gwalteklasse, +laengealteklasse,1,aktuellesfeld)END PROC alteklassezeigen;PROC neuan5zeigen: +neuanzeigen(jgst05)END PROC neuan5zeigen;PROC neuan11zeigen:neuanzeigen( +jgst11)END PROC neuan11zeigen;PROC neuansonstzeigen:schuelerzahlINCR 1; +herkunftsschulezeigen;alteklassezeigen;namezeigen;neueklassezeigen; +neuerzugtutorzeigen.neueklassezeigen:gruppenwechsel(jgstaufber(wert( +fnrsujgsteintr)),gwneuejgst,2,1,aktuellesfeld).END PROC neuansonstzeigen; +PROC neuerzugtutorzeigen:TEXT CONST neuerzugtutor:=wert(fnrsuneuerzugtut); +standardmaskenfeld(neuerzugtutor,aktuellesfeld);zugtutor(schuelerzahl):= +neuerzugtutor;aktuellesfeldINCR 1END PROC neuerzugtutorzeigen;PROC +jgstoderzugzeigen:schuelerzahlINCR 1;herkunftsschuleloeschen; +aktuelleklassezeigen;namezeigen;neueklassezeigen;zugtutorbehandeln. +herkunftsschuleloeschen:feldloeschen(laengeherk);aktuellesfeldINCR 1. +aktuelleklassezeigen:TEXT VAR aktjgst:=jgstaufber(wert(fnrsusgrpjgst));IF +halbjahresindex=aktuelleshjTHEN feldloeschen(laengealteklasse);aktuellesfeld +INCR 1ELSE gruppenwechsel(aktjgst+wert(fnrsusgrpzugtut),gwalteklasse, +laengealteklasse,1,aktuellesfeld)FI .neueklassezeigen:IF halbjahresindex= +ersteskommendeshjTHEN gruppenwechsel(neuejgst,gwneuejgst,2,1,aktuellesfeld) +ELSE gruppenwechsel(aktjgst,gwneuejgst,2,1,aktuellesfeld)FI . +zugtutorbehandeln:IF halbjahresindex<>aktuelleshjTHEN neuerzugtutorzeigen +ELSE TEXT CONST zugtutordesschuelers:=wert(fnrsusgrpzugtut);zugtutor( +schuelerzahl):=zugtutordesschuelers;standardmaskenfeld(zugtutordesschuelers, +aktuellesfeld);aktuellesfeldINCR 1FI .END PROC jgstoderzugzeigen;PROC +feldloeschen(INT CONST laenge):standardmaskenfeld(laenge*blank,aktuellesfeld) +END PROC feldloeschen;BOOL PROC pruefungspeziell(INT CONST wasistzutun):BOOL +VAR b:=FALSE ;SELECT wasistzutunOF CASE allespruefen:pruefungalleklassen(b) +CASE einejgstpruefen:pruefungeinejgst(b)CASE eineklassepruefen: +pruefungeineklasse(b)CASE einejgstwiederholerpruefen: +pruefungeinejgstwiederholer(b)CASE eineklassewiederholerpruefen: +pruefungeineklassewiederholer(b)END SELECT ;bEND PROC pruefungspeziell;PROC +pruefungalleklassen(BOOL VAR bool):bool:=(wert(fnrsustatuss)= +klassenbildungsbestand)END PROC pruefungalleklassen;PROC pruefungeinejgst( +BOOL VAR bool):bool:=(wert(fnrsustatuss)=bestlaufsjCAND jgstaufber(wert( +fnrsusgrpjgst))=vergleichsjgst)END PROC pruefungeinejgst;PROC +pruefungeineklasse(BOOL VAR bool):bool:=(wert(fnrsustatuss)=bestlaufsjCAND +jgstaufber(wert(fnrsusgrpjgst))=vergleichsjgstCAND wert(fnrsusgrpzugtut)= +vergleichszug)END PROC pruefungeineklasse;PROC pruefungeinejgstwiederholer( +BOOL VAR bool):inschuelerdateisuchen;bool:=(wert(fnrhjdversetzung)= +kzwiederholerCAND wert(fnrhjdsj)=aktschuljahrCAND wert(fnrhjdhj)= +aktschulhalbjahrCAND jgstaufber(wert(fnrhjdjgst))=vergleichsjgst)END PROC +pruefungeinejgstwiederholer;PROC pruefungeineklassewiederholer(BOOL VAR bool) +:inschuelerdateisuchen;bool:=(wert(fnrhjdversetzung)=kzwiederholerCAND wert( +fnrhjdsj)=aktschuljahrCAND wert(fnrhjdhj)=aktschulhalbjahrCAND jgstaufber( +wert(fnrhjdjgst))=vergleichsjgstCAND wert(fnrhjdkennung)=vergleichszug)END +PROC pruefungeineklassewiederholer;PROC inschuelerdateisuchen:inittupel( +dnrschueler);putwert(fnrsufamnames,wert(fnrhjdfamnames));putwert( +fnrsurufnames,wert(fnrhjdrufnames));putwert(fnrsugebdatums,wert(fnrhjdgebdats +));putwert(fnrsustatuss,bestlaufsj);search(ixsustatfamrufgeb,TRUE );END PROC +inschuelerdateisuchen;END PACKET listenweiseklassenbildung + diff --git a/app/schulis/2.2.1/src/1.schuelerjgst aendern b/app/schulis/2.2.1/src/1.schuelerjgst aendern new file mode 100644 index 0000000..1a80c4f --- /dev/null +++ b/app/schulis/2.2.1/src/1.schuelerjgst aendern @@ -0,0 +1,161 @@ +PACKET schuelerjgstaendernDEFINES schuelerjgstbearbeiten, +schuelerjgstaenderungschuelerzeigen, +schuelerjgstaenderungfuerausgesuchteschuelerbearbeiten, +schuelerjgstaenderungspeichern,pruefungschuelerjgst:LET maskenname= +"ms schuelerjgst aendern",maskennameeingang="ms schuelerjgst aendern eingang" +,fnrname=2,fnrrufname=3,fnrgebdatum=4,fnrjgst=5,fnrhalbjahr=6,fnrzug=7, +fnrzugang=8,fnraktuellehjd=9,fnrneueshj1=10,fnrneuehjd1=11,fnrneueshj2=12, +fnrneuehjd2=13;LET schulhalbjahr="Schulhalbjahr";LET aktbestand="ls", +aktschuljahr="Schuljahr";LET meldunggibtsnicht=71,meldunglistenerstellung=7, +meldungkeineliste=68,meldungletzter=67,meldungspeicherung=50, +meldungkeinespeicherung=63,pruefemeldung=57;LET dateiname="Schülerliste"; +FILE VAR f;TEXT VAR schuelertupel:="",zugangsicherung:="",schuelertid:="", +hjdtid:="";TEXT VAR akthalbjahr,jgstalt,zugalt,jgst,zug,jgsttext;LET +gesamtanzahlhalbjahre=12,laengehalbjahreseintrag=4;LET jgst05="05",jgst13= +"13";LET jgstufe10=10;LET oblitrenner="$",leer="",punkt=".";LET +anzschlfeldersu=3;BOOL VAR falschesdatum:=FALSE ;INT CONST gesamtzeilenlaenge +:=gesamtanzahlhalbjahre*laengehalbjahreseintrag;ROW anzschlfeldersuTEXT VAR +schluessel;TAG VAR maske;TEXT VAR ausgabezeile:="",halbjahrkuerzel:="";LET +logtextbeginn="Anw. 1.2.4 Änderung";PROC schuelerjgstbearbeiten:BOOL VAR +suexistiert:=FALSE ;falschesdatum:=FALSE ;systemdboff;reinitparsing; +schluesselbereitstellen;pruefeobnameexistiert(suexistiert);IF NOT +falschesdatumTHEN IF suexistiertTHEN schluessel(1):=wert(fnrsufamnames); +schluessel(2):=wert(fnrsurufnames);schluessel(3):=datumrekonversion(wert( +fnrsugebdatums));loeschedieerstellteobjektliste;standardstartproc(maskenname) +;bereiteaenderungvor;infeld(fnrjgst);standardnprocELSE standardmeldung( +meldunggibtsnicht,"");return(1)FI ELSE return(1)FI .END PROC +schuelerjgstbearbeiten;PROC schluesselbereitstellen:schluessel(1):= +standardmaskenfeld(fnrname);schluessel(2):=standardmaskenfeld(fnrrufname); +schluessel(3):=datumrekonversion(standardmaskenfeld(fnrgebdatum));END PROC +schluesselbereitstellen;PROC pruefeobnameexistiert(BOOL VAR suexist):TEXT +VAR datenbankwerte,schluesselwerte;inittupel(dnrschueler); +maskenwerteindatenbank;IF NOT falschesdatumTHEN search(ixsustatfamrufgeb, +FALSE );IF dbstatus=okTHEN saveupdateposition(dnrschueler);datenbankwerte:= +wert(fnrsurufnames)+datumrekonversion(wert(fnrsugebdatums));schluesselwerte:= +schluessel(2)+schluessel(3);suexist:=(wert(fnrsufamnames)=schluessel(1)CAND ( +(schluessel(2)=leerAND schluessel(3)=leer)OR (pos(datenbankwerte, +schluesselwerte)=1)))ELSE suexist:=FALSE FI FI .END PROC +pruefeobnameexistiert;PROC bereiteaenderungvor:saveupdateposition(dnrschueler +);savetupel(dnrschueler,schuelertupel);schuelertid:=gettid;hjdtid:=wert( +fnrsutidakthjd);zugangsicherung:=wert(fnrsuartzugang);wertelesen; +fuelledbdateninfelder;fuellehjddateninfelder;infeld(1);standardfelderausgeben +;infeld(fnrjgst).wertelesen:akthalbjahr:=schulkenndatum(schulhalbjahr);. +fuelledbdateninfelder:jgstalt:=jgstaufber(wert(fnrsusgrpjgst));zugalt:= +compress(wert(fnrsusgrpzugtut));standardmaskenfeld(schluessel(1),fnrname); +standardmaskenfeld(schluessel(2),fnrrufname);standardmaskenfeld(schluessel(3) +,fnrgebdatum);standardmaskenfeld(akthalbjahr,fnrhalbjahr);standardmaskenfeld( +jgstalt,fnrjgst);standardmaskenfeld(zugalt,fnrzug);standardmaskenfeld(wert( +fnrsuartzugang),fnrzugang);.fuellehjddateninfelder:jgsttext:=jgstalt; +halbjahrkuerzel:=jgsttext+punkt+akthalbjahr;lieferehalbjahreszeile( +ausgabezeile,halbjahrkuerzel);standardmaskenfeld(ausgabezeile,fnraktuellehjd) +;IF jgstalt=jgst05THEN erhoehejgsttext(TRUE );halbjahrkuerzel:=jgsttext+punkt ++akthalbjahr;standardmaskenfeld(halbjahrkuerzel,fnrneueshj1); +lieferehalbjahreszeile(ausgabezeile,halbjahrkuerzel);standardmaskenfeld( +ausgabezeile,fnrneuehjd1);liefereleerzeileELIF jgstalt=jgst13THEN +erhoehejgsttext(FALSE );halbjahrkuerzel:=jgsttext+punkt+akthalbjahr; +standardmaskenfeld(halbjahrkuerzel,fnrneueshj1);lieferehalbjahreszeile( +ausgabezeile,halbjahrkuerzel);standardmaskenfeld(ausgabezeile,fnrneuehjd1); +liefereleerzeileELSE erhoehejgsttext(FALSE );halbjahrkuerzel:=jgsttext+punkt+ +akthalbjahr;standardmaskenfeld(halbjahrkuerzel,fnrneueshj1); +lieferehalbjahreszeile(ausgabezeile,halbjahrkuerzel);standardmaskenfeld( +ausgabezeile,fnrneuehjd1);jgsttext:=jgstalt;erhoehejgsttext(TRUE ); +halbjahrkuerzel:=jgsttext+punkt+akthalbjahr;standardmaskenfeld( +halbjahrkuerzel,fnrneueshj2);lieferehalbjahreszeile(ausgabezeile, +halbjahrkuerzel);standardmaskenfeld(ausgabezeile,fnrneuehjd2)FI . +liefereleerzeile:standardmaskenfeld(leereshj,fnrneueshj2);standardmaskenfeld( +leerezeile,fnrneuehjd2).leereshj:text(" ",laengehalbjahreseintrag).leerezeile +:text(" ",gesamtzeilenlaenge).END PROC bereiteaenderungvor;PROC +erhoehejgsttext(BOOL CONST erhoehen):INT VAR jgstint:=int(jgsttext);IF +erhoehenTHEN jgstintINCR 1ELSE jgstintDECR 1FI ;jgsttext:=jgstaufber(text( +jgstint))END PROC erhoehejgsttext;PROC loeschedieerstellteobjektliste:forget( +dateiname,quiet);END PROC loeschedieerstellteobjektliste;PROC +schuelerjgstaenderungschuelerzeigen:BOOL VAR listeexistiertnicht; +falschesdatum:=FALSE ;systemdboff;schluesselbereitstellen; +maskenwerteindatenbank;IF NOT falschesdatumTHEN standardmeldung( +meldunglistenerstellung,"");parsenooffields(5);objektlistestarten( +ixsustatfamrufgeb,schluessel(1),fnrsufamnames,TRUE ,listeexistiertnicht);IF +listeexistiertnichtTHEN reinitparsing;standardmeldung(meldungkeineliste,""); +return(1)ELSE datensatzlistenausgabe(PROC (INT CONST )suerfassungschueler, +TRUE ,BOOL PROC pruefungschuelerjgst)FI ELSE return(1)FI .END PROC +schuelerjgstaenderungschuelerzeigen;PROC maskenwerteindatenbank:putwert( +fnrsufamnames,schluessel(1));putwert(fnrsurufnames,schluessel(2));disablestop +;initmaske(maske,maskennameeingang);putwert(fnrsugebdatums,datumskonversion( +schluessel(3)));IF iserrorTHEN clearerror;meldeauffaellig(maske,157);infeld( +fnrgebdatum);falschesdatum:=TRUE ;enablestopELSE enablestop;putwert( +fnrsustatuss,aktbestand);FI END PROC maskenwerteindatenbank;BOOL PROC +pruefungschuelerjgst:wert(fnrsustatuss)=aktbestandEND PROC +pruefungschuelerjgst;PROC +schuelerjgstaenderungfuerausgesuchteschuelerbearbeiten:BOOL VAR ok, +kannbearbeitetwerden:=FALSE ;loeschedieerstellteobjektliste; +objektlistebeenden(dateiname,TRUE );reinitparsing; +holeerstenschluesselausdatei(ok);WHILE okREP pruefeobnameexistiert(ok);IF ok +THEN kannbearbeitetwerden:=TRUE ;ok:=FALSE ELSE +holenaechstenschluesselausdatei(ok)FI PER ;IF kannbearbeitetwerdenTHEN +standardstartproc(maskenname);bereiteaenderungvor;infeld(fnrjgst); +standardnprocELSE enter(2)FI .END PROC +schuelerjgstaenderungfuerausgesuchteschuelerbearbeiten;PROC +holeerstenschluesselausdatei(BOOL VAR ok):IF NOT exists(dateiname)THEN ok:= +FALSE ;LEAVE holeerstenschluesselausdateiFI ;f:=sequentialfile(input, +dateiname);holenaechstenschluesselausdatei(ok);END PROC +holeerstenschluesselausdatei;PROC holenaechstenschluesselausdatei(BOOL VAR ok +):TEXT VAR thesaurustext:="";INT VAR schluesselbeginn,schluesseltrennung,i; +IF eof(f)THEN ok:=FALSE ;loeschedieerstellteobjektlisteELSE getline(f, +thesaurustext);bestimmeschluesselausthesaurustext;ok:=TRUE FI . +bestimmeschluesselausthesaurustext:schluesselbeginn:=pos(thesaurustext, +oblitrenner);schluesseltrennung:=pos(thesaurustext,oblitrenner, +schluesselbeginn+1);FOR iFROM 1UPTO anzschlfeldersuREP IF schluesseltrennung> +0THEN schluessel(i):=subtext(thesaurustext,schluesselbeginn+1, +schluesseltrennung-1);schluesselbeginn:=schluesseltrennung;schluesseltrennung +:=pos(thesaurustext,oblitrenner,schluesselbeginn+1);ELSE schluessel(i):= +subtext(thesaurustext,schluesselbeginn+1);FI ;schluessel(3):= +datumrekonversion(schluessel(3));PER ;.END PROC +holenaechstenschluesselausdatei;PROC schuelerjgstaenderungspeichern(BOOL +CONST speichern):IF speichernTHEN INT VAR fehlerstatus:=0; +pruefeplausibilitaet(fehlerstatus);IF datenfehlerfreiTHEN standardmeldung( +meldungspeicherung,"");datenspeichern; +vorbereitendernaechstenschluesselbehandlungELSE fehlerbehandeln;return(1)FI +ELSE standardmeldung(meldungkeinespeicherung,""); +vorbereitendernaechstenschluesselbehandlungFI .datenfehlerfrei:fehlerstatus=0 +.fehlerbehandeln:infeld(fehlerstatus).datenspeichern:logeintragvornehmen; +aenderungschreiben;halbjahresdatenloeschen(schluessel,jgstalt,jgst, +akthalbjahr).logeintragvornehmen:TEXT VAR eintrag:=logtextbeginn;eintragCAT +" """;eintragCAT schluessel(1);eintragCAT ", ";eintragCAT schluessel(2); +eintragCAT ", ";eintragCAT datumskonversion(schluessel(3));eintragCAT """"; +logeintrag(eintrag).aenderungschreiben:IF jgstoderzuggeaendertTHEN +dbfelderfuellen;aenderunginhjdeintragen;restoreupdateposition(dnrschueler); +selupdate(dnrschueler);IF dbstatus<>0THEN restoretupel(dnrschueler, +schuelertupel)ELSE IF jgst<>jgstaltTHEN IF int(jgst)>=jgstufe10THEN +kurswahlserveraktualisieren(jgst,"","")FI ;IF int(jgstalt)>=jgstufe10THEN +kurswahlserveraktualisieren(jgstalt,"","")FI ;FI ;FI ;ELSE dbfelderfuellen; +replace(dnrschueler,schuelertid);FI .dbfelderfuellen:putwert(fnrsusgrpjgst, +jgst);putwert(fnrsusgrpzugtut,zug);putwert(fnrsuartzugang,standardmaskenfeld( +fnrzugang));.jgstoderzuggeaendert:jgst<>jgstaltCOR zug<>zugalt. +aenderunginhjdeintragen:IF hjdtid<>leerTHEN putwert(fnrhjdjgst,jgst);putwert( +fnrhjdkennung,zug);selupdate(dnrhalbjahresdaten);IF dbstatus=okTHEN putwert( +fnrsutidakthjd,gettid)FI FI .END PROC schuelerjgstaenderungspeichern;PROC +vorbereitendernaechstenschluesselbehandlung:IF exists(dateiname)THEN +holenaechstenschluesselauslisteELSE enter(2)FI . +holenaechstenschluesselausliste:BOOL VAR ok,kannbearbeitetwerden:=FALSE ; +holenaechstenschluesselausdatei(ok);WHILE okREP pruefeobnameexistiert(ok);IF +okTHEN kannbearbeitetwerden:=TRUE ;ok:=FALSE ELSE +holenaechstenschluesselausdatei(ok)FI PER ;IF kannbearbeitetwerdenTHEN +bereiteaenderungvor;return(1)ELSE behandleendederlistenabarbeitungFI . +behandleendederlistenabarbeitung:standardmeldung(meldungletzter,"");enter(3). +END PROC vorbereitendernaechstenschluesselbehandlung;PROC +pruefeplausibilitaet(INT VAR fstatus):INT VAR fmeld;LET fmeldbittefuellen=52, +fmeldnichtimbestand=55,bestandzugang="c02 zugang";fstatus:=0;standardmeldung( +pruefemeldung,"");IF NOT imschlbestand(standardmaskenfeld(fnrzugang), +bestandzugang)THEN fstatus:=fnrzugang;fmeld:=fmeldnichtimbestand; +behandledenplausifehlerFI ;jgst:=jgstaufber(standardmaskenfeld(fnrjgst));zug +:=compress(standardmaskenfeld(fnrzug));IF jgst=leerTHEN fstatus:=fnrjgst; +fmeld:=fmeldbittefuellen;behandledenplausifehlerFI ;IF zug=leerTHEN fstatus:= +fnrzug;fmeld:=fmeldbittefuellen;behandledenplausifehlerFI ;IF NOT +imbestandschuelergruppenTHEN fstatus:=fnrjgst;fmeld:=fmeldnichtimbestand; +behandledenplausifehlerFI .imbestandschuelergruppen:TEXT VAR schuljahr:= +schulkenndatum(aktschuljahr),halbjahr:=schulkenndatum(schulhalbjahr);INT VAR +dateinummer:=dnraktschuelergruppen;putwert(dateinummer+1,schuljahr);putwert( +dateinummer+2,halbjahr);putwert(dateinummer+3,jgst);putwert(dateinummer+4,zug +);search(dateinummer,TRUE );dbstatus=0.behandledenplausifehler: +standardmeldung(fmeld,"");LEAVE pruefeplausibilitaet.END PROC +pruefeplausibilitaet;END PACKET schuelerjgstaendern + diff --git a/app/schulis/2.2.1/src/1.stat grundfunktionen b/app/schulis/2.2.1/src/1.stat grundfunktionen new file mode 100644 index 0000000..8ef332a --- /dev/null +++ b/app/schulis/2.2.1/src/1.stat grundfunktionen @@ -0,0 +1,70 @@ +PACKET statgrundfunktionenDEFINES statleseschleife,statauszaehlen,statinit, +statausgeben,statspalteausgeben,statzeilevertauschen,rechtstext,loeschespalte +:LET matrixanfang=6,zeilenlaenge=8,zeilensummentitel=93,spaltensummenbasis=12 +,matrixspaltenzahl=6,matrixzeilenzahl=11,laengezaehlfeld=5,laengewertefeld=8; +LET mv=100,nv=20,summentitel="Summe",maxfeld=100,niltext=" ";BOOL VAR +maskierung;INT VAR zeilenzahl,spaltenzahl;INT VAR aktuellestartzeile;INT VAR +aktuelleendzeile;INT VAR gesamtsumme:=0;ROW mvROW nvINT VAR statzaehler;ROW +mvINT VAR zeilenzeiger;INT PROC zaehler(INT CONST i,j):IF maskierungTHEN +statzaehler(zeilenzeiger(i))(j)ELSE statzaehler(i)(j)FI END PROC zaehler; +PROC statzeilevertauschen(INT CONST i,j):INT VAR k:=zeilenzeiger(j); +zeilenzeiger(j):=zeilenzeiger(i);zeilenzeiger(i):=k;maskierung:=TRUE END +PROC statzeilevertauschen;PROC statleseschleife(INT CONST indexnummer,TEXT +CONST startschluessel1,startschluessel2,INT CONST feldnr1,feldnr2,PROC (BOOL +VAR )stataktion):vorbereitungen;leseschleife.vorbereitungen:LET maxleseanzahl +=10;BOOL VAR vorzeitigesende:=FALSE ;#INT CONST maxblock:=maxfeldDIV +zahlderfelder;#INT VAR anzahltupel;#INT CONST maxanzahl:=(maxintDIV maxblock) +*maxblock#.leseschleife:putwert(feldnr1,startschluessel1);putwert(feldnr2, +startschluessel2);search(indexnummer);IF dbstatus=0THEN einleseschleifeFI . +einleseschleife:zaehlen;WHILE NOT schlussREP anzahltupel:=maxleseanzahl; +multisucc(indexnummer,anzahltupel);stackdurchlaufPER ;.stackdurchlauf:IF +anzahltupel=0THEN dbstatus(1)ELSE WHILE anzahltupel<>0REP lesen;zaehlen;IF +vorzeitigesendeTHEN dbstatus(1);anzahltupel:=0FI ;PER FI .schluss:dbstatus<>0 +.zaehlen:stataktion(vorzeitigesende).lesen:multisucc;anzahltupelDECR 1;.END +PROC statleseschleife;PROC statauszaehlen(INT CONST zeile,spalte):statzaehler +(zeile)(spalte)INCR 1;gesamtsummeINCR 1END PROC statauszaehlen;PROC +statauszaehlen(INT CONST zeile,spalte,anzahl):statzaehler(zeile)(spalte):= +anzahl;gesamtsummeINCR anzahlEND PROC statauszaehlen;PROC statinit(INT CONST +zeilen,spalten):#INT VAR i,j;#gesamtsumme:=0;spaltenzahl:=spalten; +aktuellestartzeile:=1;zeilenzahl:=0;maskierung:=FALSE ;statinit(zeilen)END +PROC statinit;PROC statinit(INT CONST zeilen):INT VAR i,j;FOR iFROM +zeilenzahl+1UPTO zeilenREP zeilenzeiger(i):=i;FOR jFROM 1UPTO spaltenzahlREP +statzaehler(i)(j):=0PER PER ;zeilenzahl:=zeilen;aktuelleendzeile:=min( +zeilenzahl,matrixzeilenzahl)END PROC statinit;PROC statausgeben(INT CONST +startzeile,startspalte):initialisieren;spaltenausgeben; +restlichespaltenloeschen;summenberechnen.initialisieren:INT VAR spalte; +aktuellestartzeile:=startzeile;BOOL VAR gesamtsummeausgeben:=TRUE ;INT CONST +endzeile:=min(zeilenzahl,startzeile+matrixzeilenzahl-1);aktuelleendzeile:= +endzeile;INT CONST endspalte:=min(spaltenzahl,startspalte+matrixspaltenzahl-1 +);INT VAR spaltennr:=1;.spaltenausgeben:FOR spalteFROM startspalteUPTO +endspalteREP statspalteausgeben(spalte,spaltennr);spaltennrINCR 1PER ;. +summenberechnen:IF zeilensummedarstellbarTHEN statzeilensummeELSE +gesamtsummeausgeben:=FALSE ;FI ;IF spaltensummedarstellbarTHEN +statspaltensumme(startspalte,endspalte);ELSE gesamtsummeausgeben:=FALSE ;FI ; +IF gesamtsummeausgebenTHEN statgesamtsummeFI .spaltensummedarstellbar:( +endzeile=zeilenzahl).zeilensummedarstellbar:(endspalte=spaltenzahl). +restlichespaltenloeschen:INT VAR i,basis:=matrixanfang+spaltennr-1;FOR iFROM +spaltennrUPTO matrixspaltenzahl+1REP loeschespalte(basis);basisINCR 1PER . +END PROC statausgeben;PROC loeschespalte(INT CONST basis):INT VAR feldnr:= +basis;WHILE feldnr<=maxfeldREP niltextIN feldnr;feldnrINCR zeilenlaengePER +END PROC loeschespalte;PROC statspalteausgeben(INT CONST spalte,spaltennr): +INT VAR i,basis:=matrixanfang+spaltennr-1;FOR iFROM aktuellestartzeileUPTO +aktuelleendzeileREP text(zaehler(i,spalte),laengezaehlfeld)IN basis;basis +INCR zeilenlaengePER ;WHILE basis<=maxfeldREP (niltextIN basis);basisINCR +zeilenlaengePER END PROC statspalteausgeben;PROC statzeilensumme:INT VAR i, +basis:=spaltensummenbasis;FOR iFROM aktuellestartzeileUPTO aktuelleendzeile +REP text(zeilensumme(i),laengezaehlfeld)IN basis;basisINCR zeilenlaengePER +END PROC statzeilensumme;PROC statgesamtsumme:INT VAR basis:= +zeilensummentitel+zeilenlaenge-1;text(gesamtsumme,laengezaehlfeld)IN basis +END PROC statgesamtsumme;PROC statspaltensumme(INT CONST startspalte, +endspalte):titel;einzelsummen.titel:rechtstext(summentitel,laengewertefeld) +IN zeilensummentitel.einzelsummen:INT VAR j,basis:=zeilensummentitel+1;FOR j +FROM startspalteUPTO endspalteREP text(spaltensumme(j),laengezaehlfeld)IN +basis;basisINCR 1;PER .END PROC statspaltensumme;INT PROC zeilensumme(INT +CONST zeilennr):INT VAR summe:=0;INT VAR j;FOR jFROM 1UPTO spaltenzahlREP +summeINCR zaehler(zeilennr,j)PER ;summeEND PROC zeilensumme;INT PROC +spaltensumme(INT CONST spaltennr):INT VAR summe:=0;INT VAR i;FOR iFROM 1UPTO +zeilenzahlREP summeINCR zaehler(i,spaltennr)PER ;summeEND PROC spaltensumme; +TEXT PROC rechtstext(TEXT CONST t,INT CONST laenge):((laenge-length(t))*" ")+ +tEND PROC rechtstext;END PACKET statgrundfunktionen + diff --git a/app/schulis/2.2.1/src/1.stat intern b/app/schulis/2.2.1/src/1.stat intern new file mode 100644 index 0000000..a94ef21 --- /dev/null +++ b/app/schulis/2.2.1/src/1.stat intern @@ -0,0 +1,337 @@ +PACKET statinternDEFINES statinternstart,statistiklistezeigen, +erstellestatistik,zeigefertigestatistik,statblaettern:LET matrix= +"ms stat matrix",obli="mu objektliste",ueberschriftenfeld=2,fortsetzungsfeld= +3,spaltentitel=4,wertebereichanfang=5,spaltenzahl=6,zeilenzahl=11, +zeilenlaenge=8,maxfeld=100,laengezaehlfeld=5,laengewertefeld=8;LET mv=100,nv= +20;ROW nvTEXT VAR spaltenwert;INT VAR maxspaltenwert;ROW mvTEXT VAR +zeilenwert;INT VAR maxzeilenwert;INT VAR zeileleer;LET anhangzeilen=2;LET +maxbestaende=8,maxauswertungen=17;LET titelergaenz1="alle Klassen ", +titelergaenz2="alle Tutorenkurse ";ROW maxbestaendeTEXT CONST bestandtitel1:= +ROW maxbestaendeTEXT :("der Jahrgangsstufe ","Jahrgangsstufen der Sek. 1", +"Jahrgangsstufen der Sek. 2","alle Jahrgangsstufen", +"Neuangemeldete zur Jgst. 5","Neuangemeldete zur Jgst. 11", +"Neuangemeldete zu einer anderen Jgst.","Abgegangene aller Jahrgangsstufen"); +LET allejgstsek1=2,allejgstsek2=3,allejgst=4,neuan5=5,neuan11=6,neuansonst=7, +abgegangene=8;ROW maxauswertungenTEXT CONST bestandtitel2:=ROW +maxauswertungenTEXT :("Geschlecht","Alter","Schultyp der Herkunftsschule", +"Art des Zugangs zur Jgst.","Versetzungsergebnis", +"Teilnahme Religionsunterricht","Sprachenfolge","Kunst/Musik", +"Ortsteil des Wohnortes","Staatsangehörigkeit","Muttersprache", +"Einschulungsjahr Grundschule","Herkunftsschule","Religionszugehörigkeit", +"Spätaussiedler","Abgangsgrund","Abschluß");LET geschlecht=1,alter=2,schultyp +=3,zugang=4,versetzung=5,teilnahmereli=6,fremdsprachen=7,kunst=8,ort=9,staat= +10,sprache=11,einschulung=12,herkunft=13,religion=14,aussiedler=15,abgang=16, +abschluss=17;LET fortsetzungstitel=" Forts.",leertitel="leer", +leertitelplatzhalter="�",sonsttitel="sonst",summentitel="Summe";LET +neuanmeld5="n05",neuanmeld11="n11",neuanmeldsonst="nso",archivbestand="abg", +gesamtbestand="ls";LET bestort="c02 ortsteil",beststaat="c02 staaten", +bestsprache="c02 sprachen",bestreligion="c02 relizugehoerigkeit",bestabgang= +"c02 abgang",bestabschluss="c02 abschluss",bestschulart="c02 schulart", +bestversetzung="c02 versetzung",bestzugang="c02 zugang",bestherkunft= +"Schulen";LET null="0",niltext="",blank=" ";LET allesek1= +" 05 06 07 08 09 10",allesek2=" 11 12 13";LET einenbestand= +2,einejgst=1,alleinsek1=4,alleinsek2=5;LET sjahr="Schuljahr",shj= +"Schulhalbjahr",trenner1=".",trenner2="/",trennpos1=2,trennpos2=3,stattext1= +"alle",stattext2="Werte",maxsek1=10,titeltrenner=", ",links=4,rechts=3,oben=2 +,unten=1,minjgst=5,maxjgst=13,abgkz="abg. ",maxkreuzzahl=1,basisohnebestand=1 +,laengespaltentitel=30,standardanfang=2;LET weiblich="w",maennlich="m",ja="j" +,nein="n";LET unzulaessigewahlnr=56,wartennr=69,fertignr=77,meldzuvielewerte= +87,nproc=1,standardabstand=2;LET maxoblizeile=18,listenauskunft=2018;LET +beginntag=1,endetag=2,beginnmonat=4,endemonat=5,beginnjahr=7;BOOL VAR +rechtsverschiebbar,variablezaehlung,neueintragnoetig,#20.01.88dr# +vergleichsstart,sprungvonunten,fehlerzuvielewerte;INT VAR xaktuell,yaktuell, +aktuellerbestand,statbestandnr,statjgst,statauswertungsnr,statbasisnr, +jahrdestagesdatums,monatdestagesdatums,tagdestagesdatums,waspruefen,#06.07.87 +dr#dateinummer,#01.02.88dr#schluesseldateinr,vglfeld,gewindex;#05.08.87dr# +TEXT VAR kuerzelbestand,gewbestand,#06.08.87dr#bestaendezeile,vergleichsjgst, +statgrundmaske,aktschuljahr,akthalbjahr,titelzeile;PROC statinternstart: +standardvproc(maske(vergleichsknoten));sprungvonunten:=FALSE END PROC +statinternstart;PROC statistiklistezeigen:IF eingangsbildschirmkorrektTHEN +standardstartproc(obli);auskunftstextergaenzen;fuellestatistikliste; +standardnprocELSE fehlerbehandlungFI .auskunftstextergaenzen:titelzeile:= +niltext;IF statbestandnr=einejgstTHEN titelzeile1ELSE einfachetitelzeileFI ; +ergaenzeauskunft(titelzeile+auskunftstextende,listenauskunft).titelzeile1:IF +insek1THEN titelzeileCAT titelergaenz1ELSE titelzeileCAT titelergaenz2FI ; +titelzeileCAT bestandtitel1(statbestandnr);titelzeileCAT aufberzweistellig( +text(statjgst)).insek1:statjgst<=maxsek1.einfachetitelzeile:titelzeileCAT +bestandtitel1(statbestandnr).fuellestatistikliste:INT VAR feldnr:= +standardabstand+1;FOR iFROM 1UPTO maxauswertungenREP standardmaskenfeld( +bestandtitel2(i),feldnr);feldnrINCR standardabstandPER ;feldnrDECR 1;FOR i +FROM maxauswertungen+1UPTO maxoblizeileREP feldschutz(feldnr);feldnrINCR +standardabstandPER .eingangsbildschirmkorrekt:IF sprungvonuntenTHEN TRUE +ELSE INT VAR i,kreuzzahl:=0;TEXT VAR ankreuzfeld;statbestandnr:= +standardanfang;FOR iFROM standardanfangUPTO maxbestaende+1REP ankreuzfeld:= +standardmaskenfeld(i);IF ankreuzfeld<>niltextTHEN IF (i=standardanfang)THEN +statjgst:=int(ankreuzfeld);IF (NOT lastconversionok)COR statjgstungueltig +THEN LEAVE eingangsbildschirmkorrektWITH FALSE FI FI ;kreuzzahlINCR 1; +statbestandnr:=iFI PER ;statbestandnrDECR 1;(kreuzzahl<=maxkreuzzahl)CAND ( +kreuzzahl>0)FI .statjgstungueltig:(statjgst<minjgst)COR (statjgst>maxjgst). +fehlerbehandlung:standardmeldung(unzulaessigewahlnr,niltext);infeld( +statbestandnr+1);return(nproc).END PROC statistiklistezeigen;PROC +erstellestatistik:reinitparsing;IF listenwahlkorrektTHEN startestatistik( +statbestandnr,statjgst,statauswertungsnr);initialisiereblaettern; +zeigefertigestatistikELSE fehlerbehandlungFI .listenwahlkorrekt:INT VAR i, +kreuzzahl:=0;TEXT VAR ankreuzfeld;statauswertungsnr:=standardanfang;INT VAR +feldnr:=standardabstand;FOR iFROM 1UPTO maxauswertungenREP ankreuzfeld:= +standardmaskenfeld(feldnr);IF ankreuzfeld<>niltextTHEN kreuzzahlINCR 1; +statauswertungsnr:=iFI ;feldnrINCR standardabstandPER ;(kreuzzahl<= +maxkreuzzahl)CAND (kreuzzahl>0).initialisiereblaettern:sprungvonunten:=TRUE ; +IF NOT fehlerzuvielewerteTHEN standardmeldung(fertignr,niltext)FI ;xaktuell:= +1;yaktuell:=1.fehlerbehandlung:standardmeldung(unzulaessigewahlnr,niltext); +infeld(statauswertungsnr*standardabstand);return(nproc).END PROC +erstellestatistik;PROC zeigefertigestatistik:infeld(fortsetzungsfeld); +standardnprocEND PROC zeigefertigestatistik;PROC startestatistik(INT CONST +bestandnr,jgst,auswertungsnr):initialisiere;maskeausgeben;titelausgeben; +indexbestimmen;bestaendeausgeben;werteverarbeitung(auswertungsnr). +initialisiere:fehlerzuvielewerte:=FALSE ;statbasisnr:=basisohnebestand; +statgrundmaske:=niltext.maskeausgeben:standardstartproc(matrix); +standardmeldung(wartennr,niltext).titelausgeben:titelzeileCAT titeltrenner; +IF auswertungsnr=versetzungTHEN versetzungsergaenzungFI ;titelzeilenrest; +titelzeileausgeben.versetzungsergaenzung:liesschuljahr;lieshalbjahr; +titelzeilenzusatz.liesschuljahr:aktschuljahr:=schulkenndatum(sjahr). +lieshalbjahr:akthalbjahr:=schulkenndatum(shj).titelzeilenzusatz:titelzeile +CAT (subtext(aktschuljahr,1,trennpos1));titelzeileCAT trenner2;titelzeileCAT +(subtext(aktschuljahr,trennpos2));titelzeileCAT trenner1;titelzeileCAT +akthalbjahr;titelzeileCAT titeltrenner.titelzeilenrest:titelzeileCAT +bestandtitel2(auswertungsnr);.titelzeileausgeben:titelzeileIN +ueberschriftenfeld.indexbestimmen:SELECT bestandnrOF CASE allejgst,neuan5, +neuan11,neuansonst,abgegangene:gewindex:=ixsustatfamrufgebCASE allejgstsek1, +allejgstsek2,einejgst:gewindex:=ixsustatjgstEND SELECT ;indexvorbelegen. +indexvorbelegen:inittupel(dnrschueler);waspruefen:=einenbestand;gewbestand:= +gesamtbestand;SELECT bestandnrOF CASE einejgst:putwert(fnrsustatuss, +gesamtbestand);putwert(fnrsusgrpjgst,jgstkonv(jgst));waspruefen:=einejgst; +CASE allejgstsek1:putwert(fnrsustatuss,gesamtbestand);putwert(fnrsusgrpjgst, +"05");waspruefen:=alleinsek1;CASE allejgstsek2:putwert(fnrsustatuss, +gesamtbestand);putwert(fnrsusgrpjgst,"11");waspruefen:=alleinsek2;CASE +allejgst:putwert(fnrsustatuss,gesamtbestand);CASE neuan5:putwert(fnrsustatuss +,neuanmeld5);gewbestand:=neuanmeld5;CASE neuan11:putwert(fnrsustatuss, +neuanmeld11);gewbestand:=neuanmeld11;CASE neuansonst:putwert(fnrsustatuss, +neuanmeldsonst);gewbestand:=neuanmeldsonst;CASE abgegangene:putwert( +fnrsustatuss,archivbestand);gewbestand:=archivbestand;END SELECT . +bestaendeausgeben:SELECT bestandnrOF CASE einejgst:ermittleallekomponenten( +jgst)CASE allejgstsek1:ermittlebestaendezeile(allesek1)CASE allejgstsek2: +ermittlebestaendezeile(allesek2)CASE allejgst,neuansonst,abgegangene: +ermittlebestaendezeile(allesek1+allesek2)CASE neuan5:ermittlebestaendezeile( +praefix(allesek1))CASE neuan11:ermittlebestaendezeile(praefix(allesek2))END +SELECT ;bestaendezeileersterteilIN spaltentitel.bestaendezeileersterteil:IF +laengespaltentitel<length(bestaendezeile)THEN rechtsverschiebbar:=TRUE ;text( +bestaendezeile,laengespaltentitel)ELSE rechtsverschiebbar:=FALSE ;text( +bestaendezeile,laengespaltentitel)+summentitelFI .END PROC startestatistik; +PROC werteverarbeitung(INT CONST auswertungsnr):vorbereitung;auswertung. +vorbereitung:schluesseldateinr:=dnrschluessel.auswertung:dateinummer:= +dnrschueler;SELECT auswertungsnrOF CASE geschlecht:vglfeld:=fnrsugeschlechts; +statkonst(weiblich,maennlich);CASE alter:vglfeld:=fnrsugebdatums;statalter +CASE schultyp:vglfeld:=fnrschart;dateinummer:=dnrschulen;statschluessel( +bestschulart,PROC registriereeinenschueler)CASE zugang:vglfeld:= +fnrsuartzugang;statschluessel(bestzugang)CASE versetzung:vglfeld:= +fnrhjdversetzung;dateinummer:=dnrhalbjahresdaten;statschluessel( +bestversetzung,PROC registriereeinenschueler)CASE teilnahmereli:dateinummer:= +dnrdiffdaten;statreliCASE fremdsprachen:dateinummer:=dnrdiffdaten; +statfremdsprachenCASE kunst:vglfeld:=fnrddkunstmusik;dateinummer:= +dnrdiffdaten;statvariabel(PROC registriereeinenschueler)CASE ort:vglfeld:= +fnrsuortsteils;statschluessel(bestort)CASE staat:vglfeld:=fnrsustaatsangs; +statschluessel(beststaat)CASE sprache:vglfeld:=fnrsumuttersprache; +statschluessel(bestsprache)CASE einschulung:vglfeld:=fnrsujahreinschul; +stateinschulungCASE herkunft:vglfeld:=fnrsuskennlschule;statherkunftCASE +religion:vglfeld:=fnrsureligionsz;statschluessel(bestreligion)CASE aussiedler +:vglfeld:=fnrsuspaetaus;statkonst(ja,nein);CASE abgang:vglfeld:=fnrsuabggrund +;statschluessel(bestabgang)CASE abschluss:vglfeld:=fnrsuabschluss; +statschluessel(bestabschluss)END SELECT .statalter:holetagesdatum; +statvariabel(PROC zaehlmethodealter).stateinschulung:statvariabel(PROC +registriereeinenschueler).statherkunft:schluesseldateinr:=dnrschulen; +statschluessel(bestherkunft).statreli:statvariabel(PROC zaehlmethodereli). +statfremdsprachen:statvariabel(PROC zaehlmethodefremdsprachen).END PROC +werteverarbeitung;PROC ermittlebestaendezeile(TEXT CONST titel): +bestaendezeile:=titel;INT VAR lg:=length(titel),ug:=1,og:=laengezaehlfeld,i:= +0;REP iINCR 1;spaltenwert(i):=compress(subtext(titel,ug,og));ug:=og+1;ogINCR +laengezaehlfeldUNTIL og>lgPER ;maxspaltenwert:=iEND PROC +ermittlebestaendezeile;PROC ermittleallekomponenten(INT CONST jgst):INT VAR +dnrklassenbestand:=dnraktschuelergruppen;bestaendezeile:=niltext; +maxspaltenwert:=0;vergleichsjgst:=jgstkonv(jgst);vergleichsstart:=TRUE ; +inittupel(dnrklassenbestand);putwert(fnrsgrpsj,schulkenndatum(sjahr));putwert +(fnrsgrphj,schulkenndatum(shj));statleseschleife(dnrklassenbestand, +vergleichsjgst,niltext,dnrklassenbestand+3,dnrklassenbestand+4,PROC (BOOL +VAR )gibklasseaus);END PROC ermittleallekomponenten;PROC gibklasseaus(BOOL +VAR ende):INT CONST dnr:=dnraktschuelergruppen;TEXT CONST klassenjgst:= +jgstkonv(intwert(dnr+3));IF vergleichsstartTHEN IF vergleichsjgst<> +klassenjgstTHEN ende:=TRUE ELSE vergleichsjgst:=klassenjgst;vergleichsstart:= +FALSE FI ELSE IF vergleichsjgst<>klassenjgstTHEN ende:=TRUE FI FI ;IF NOT +endeTHEN TEXT CONST klassenkennung:=wert(dnr+4);maxspaltenwertINCR 1; +spaltenwert(maxspaltenwert):=compress(klassenkennung);bestaendezeileCAT +rechtstext(klassenkennung,laengezaehlfeld);FI END PROC gibklasseaus;PROC +felderparsen:IF dateinummer=dnrschuelerTHEN IF vglfeld<=fnrsujgsteintrTHEN +parsenooffields(fnrsujgsteintr-dnrschueler)ELSE parsenooffields(vglfeld- +dnrschueler)FI ELIF dateinummer=dnrhalbjahresdatenTHEN parsenooffields( +fnrhjdversetzung)ELIF dateinummer=dnrschulenTHEN parsenooffields( +fnrsuskennlschule)ELSE parsenooffields(fnrsutiddiffdaten-dnrschueler)FI END +PROC felderparsen;PROC statkonst(TEXT CONST wert1,wert2):#dr11.05.88#LET +konstwertezahl=2;felderparsen;setzewerte;gibwerteaus;startezaehlung. +setzewerte:variablezaehlung:=FALSE ;maxzeilenwert:=konstwertezahl+ +anhangzeilen;zeileleer:=konstwertezahl+1;zeilenwert(1):=wert1;zeilenwert(2):= +wert2;zeilenwert(zeileleer):=niltext.gibwerteaus:ausgabederzeilenwerte(1). +startezaehlung:statzaehlung(PROC registriereeinenschueler).END PROC statkonst +;PROC statschluessel(TEXT CONST bestand):statschluessel(bestand,PROC +registriereeinenschueler)END PROC statschluessel;PROC statschluessel(TEXT +CONST bestand,PROC zaehlmethode):systemdboff;setzewerte;gibwerteaus; +startezaehlung.setzewerte:kuerzelbestand:=bestand;variablezaehlung:=FALSE ; +maxzeilenwert:=0;inittupel(schluesseldateinr);IF schluesselbestandTHEN +statleseschleife(schluesseldateinr,bestand,niltext,schluesseldateinr+1, +schluesseldateinr+2,PROC (BOOL VAR )tragegefundenenzeilenwertein)ELSE +statleseschleife(schluesseldateinr,niltext,niltext,schluesseldateinr+1, +schluesseldateinr+2,PROC (BOOL VAR )tragegefundenenzeilenwertein)FI ; +maxzeilenwertINCR anhangzeilen;zeileleer:=maxzeilenwert-1;zeilenwert( +maxzeilenwert):=sonsttitel;zeilenwert(zeileleer):=niltext.schluesselbestand:( +bestandSUB 1)="c".gibwerteaus:ausgabederzeilenwerte(1).startezaehlung: +statzaehlung(PROC zaehlmethode).END PROC statschluessel;PROC +tragegefundenenzeilenwertein(BOOL VAR schluss):IF dbstatus=okTHEN IF +schluesseldateinr=dnrschluesselTHEN IF wert(fnrschlsachgebiet)=kuerzelbestand +THEN IF maxzeilenwert=mv-anhangzeilenTHEN fehlerzuvielewerte:=TRUE ; +standardmeldung(meldzuvielewerte,niltext)ELSE maxzeilenwertINCR 1;zeilenwert( +maxzeilenwert):=wert(fnrschlschluessel)FI ELSE schluss:=TRUE FI ELSE IF +maxzeilenwert=mv-anhangzeilenTHEN fehlerzuvielewerte:=TRUE ;standardmeldung( +meldzuvielewerte,niltext)ELSE maxzeilenwertINCR 1;zeilenwert(maxzeilenwert):= +wert(schluesseldateinr+1)FI FI ELSE schluss:=TRUE FI END PROC +tragegefundenenzeilenwertein;PROC statvariabel(PROC zaehlmethode):setzewerte; +gibwerteaus;startezaehlung.setzewerte:variablezaehlung:=TRUE ;maxzeilenwert:= +0.gibwerteaus:stattext1IN wertebereichanfang;stattext2IN (wertebereichanfang+ +zeilenlaenge).startezaehlung:statzaehlung(PROC zaehlmethode).END PROC +statvariabel;PROC statzaehlung(PROC zaehlmethode):LET stackgroesse=15;INT +VAR anzahl;vorbereitung;zaehlschleife;IF variablezaehlungTHEN umsortierenFI ; +ausgabe.vorbereitung:reinitparsing;neueintragnoetig:=FALSE ;statinit( +maxzeilenwert,maxspaltenwert).zaehlschleife:anzahl:=stackgroesse; +multisearchforward(gewindex,anzahl);WHILE anzahl>0REP felderparsen;multisucc; +IF pruefungbestand(waspruefen)THEN IF dateinummer=dnrdiffdaten#dr11.05.88# +THEN diffdatenlesenELIF dateinummer=dnrhalbjahresdatenTHEN hjddatenlesenELIF +dateinummer=dnrschulenTHEN schuldatenlesenFI ;zaehlmethode; +gegebenenfallsneuenzeilenwertausgeben;anzahlDECR 1; +wennstackabgearbeitetnachlesenELSE LEAVE zaehlschleifeFI ;PER .diffdatenlesen +:inittupel(dnrdiffdaten);IF wert(fnrsutiddiffdaten)<>niltextTHEN readtid( +dnrdiffdaten,wert(fnrsutiddiffdaten))FI .hjddatenlesen:inittupel( +dnrhalbjahresdaten);IF wert(fnrsutidakthjd)<>niltextTHEN readtid( +dnrhalbjahresdaten,wert(fnrsutidakthjd));FI .schuldatenlesen:inittupel( +dnrschulen);IF wert(fnrsuskennlschule)<>niltextTHEN putwert(fnrschkennung, +wert(fnrsuskennlschule));search(dnrschulen,TRUE )FI . +gegebenenfallsneuenzeilenwertausgeben:IF variablezaehlungCAND +neueintragnoetigTHEN ausgabederzeilenwerte(1)FI . +wennstackabgearbeitetnachlesen:IF anzahl=0THEN anzahl:=stackgroesse;multisucc +(gewindex,anzahl);FI .umsortieren:quicksort(1,maxzeilenwert).ausgabe: +zwischentitel(0);ausgabederzeilenwerte(1);statausgeben(1,1).END PROC +statzaehlung;PROC ausgabederzeilenwerte(INT CONST startzeile): +sovielzeilenwiemoeglich;uebrigezeilenloeschen.sovielzeilenwiemoeglich:INT +VAR i,endwert:=min(maxzeilenwert,startzeile+zeilenzahl-1);INT VAR basis:= +wertebereichanfang;TEXT VAR ausgabewert:="";FOR iFROM startzeileUPTO endwert +REP IF variablezaehlungTHEN ausgabewert:=zeilenwert(i);IF ausgabewert= +leertitelplatzhalterTHEN ausgabewert:=leertitelFI ELIF i=zeileleerTHEN +ausgabewert:=leertitelELIF i=maxzeilenwertTHEN ausgabewert:=sonsttitelELSE +ausgabewert:=zeilenwert(i)FI ;rechtstext(ausgabewert,laengewertefeld)IN basis +;basisINCR zeilenlaengePER .uebrigezeilenloeschen:TEXT CONST loeschwert:= +rechtstext(niltext,laengewertefeld);WHILE basis<maxfeldREP loeschwertIN basis +;basisINCR zeilenlaengePER .END PROC ausgabederzeilenwerte;PROC +ausgabederspaltenwerte(INT CONST startspalte):INT VAR basis:=((startspalte-1) +*laengezaehlfeld)+1;TEXT VAR titel:=subtext(bestaendezeile,basis);IF length( +titel)<=laengespaltentitelTHEN setzesummenspalteELSE titel:=text(titel, +laengespaltentitel)FI ;titelIN spaltentitel.setzesummenspalte:titel:=text( +titel,laengespaltentitel)+summentitel.END PROC ausgabederspaltenwerte;PROC +spaltenneuausgeben(INT CONST basisspalte):INT VAR i;FOR iFROM spaltenzahl-1 +DOWNTO 1REP statspalteausgeben(basisspalte+i,i)PER END PROC +spaltenneuausgeben;PROC zwischentitel(INT CONST bestandnr):IF bestandnr=0 +THEN IF rechtsverschiebbarTHEN bestaendetitelsoweitesgehtIN spaltentitel;FI +ELSE setzecursorFI .bestaendetitelsoweitesgeht:text(bestaendezeile, +laengespaltentitel).setzecursor:INT VAR aktuellespalte:=bestandnr,basis;IF +bestandnr>spaltenzahlTHEN basis:=((bestandnr-spaltenzahl)*laengezaehlfeld)+1; +text(subtext(bestaendezeile,basis),laengespaltentitel)IN spaltentitel; +aktuellespalte:=spaltenzahl;loeschespalte(wertebereichanfang+aktuellespalte); +spaltenneuausgeben(bestandnr-spaltenzahl)FI ;infeld(wertebereichanfang+ +aktuellespalte);INT VAR x,y;getcursor(x,y);cursor(x+laengezaehlfeld-1,y-2). +END PROC zwischentitel;PROC statblaettern(INT CONST richtung):SELECT richtung +OF CASE links:nachlinksblaetternCASE rechts:nachrechtsblaetternCASE unten: +nachuntenblaetternCASE oben:nachobenblaetternEND SELECT ;return(nproc). +nachlinksblaettern:blaettern(xaktuell,yaktuell,0,-spaltenzahl). +nachrechtsblaettern:blaettern(xaktuell,yaktuell,0,spaltenzahl). +nachuntenblaettern:blaettern(xaktuell,yaktuell,zeilenzahl,0). +nachobenblaettern:blaettern(xaktuell,yaktuell,-zeilenzahl,0).END PROC +statblaettern;PROC blaettern(INT VAR x,y,INT CONST xincr,yincr):IF zulaessig +THEN meldefortsetzung;fuehreausFI .zulaessig:INT CONST xneu:=x+xincr;INT +CONST yneu:=y+yincr;((xneu>0)CAND (xneu<=maxzeilenwert))CAND ((yneu>0)CAND ( +yneu<=maxspaltenwert)).meldefortsetzung:IF (xneu=1)CAND (yneu=1)THEN +rechtstext(niltext,laengewertefeld)IN fortsetzungsfeldELSE fortsetzungstitel +IN fortsetzungsfeldFI .fuehreaus:x:=xneu;y:=yneu;IF xincr=0THEN +spaltentitelneuELSE zeilentitelneuFI ;statausgeben(xneu,yneu).spaltentitelneu +:ausgabederspaltenwerte(yneu).zeilentitelneu:ausgabederzeilenwerte(xneu).END +PROC blaettern;PROC registriereeinenschueler:tragevariablenwertein(wert( +vglfeld))END PROC registriereeinenschueler;PROC zaehlmethodealter:TEXT CONST +suchwert:=jgstkonv(lebensalter(wert(fnrsugebdatums)));tragevariablenwertein( +suchwert)END PROC zaehlmethodealter;PROC zaehlmethodereli:TEXT VAR suchwert:= +"";suchwert:=wert(fnrddreliunter);IF NOT leerTHEN IF abgemeldetTHEN suchwert +:=abgkz+suchwertFI FI ;eintragen.leer:suchwert=niltext.abgemeldet:datum( +datumrekonversion(wert(fnrddabmeldedatreli)))<>nildatum.eintragen: +tragevariablenwertein(suchwert).END PROC zaehlmethodereli;PROC +zaehlmethodefremdsprachen:TEXT VAR suchwert:=text(wert(fnrdd1fremdfach),2)+ +text(wert(fnrdd2fremdfach),2)+text(wert(fnrdd3fremdfach),2)+text(wert( +fnrdd4fremdfach),2);IF suchwert=zeilenlaenge*blankTHEN suchwert:=niltextFI ; +tragevariablenwertein(suchwert)END PROC zaehlmethodefremdsprachen;PROC +tragevariablenwertein(TEXT CONST suchwert):INT VAR lva:=0,zeilennr:=0;BOOL +VAR gefunden:=TRUE ;TEXT VAR gefundenerwert:=niltext;sucheaktuellenbestand; +suchegefundenenwert;IF NOT gefundenAND variablezaehlungTHEN IF maxzeilenwert= +mvTHEN fehlerzuvielewerte:=TRUE ;standardmeldung(meldzuvielewerte,niltext) +ELSE neueintragnoetig:=TRUE ;zeilennrINCR 1;maxzeilenwert:=zeilennr; +zeilenwert(zeilennr):=gefundenerwert;statinit(maxzeilenwert);registrierenFI +ELSE neueintragnoetig:=FALSE ;registrierenFI .sucheaktuellenbestand:SELECT +statbestandnrOF CASE einejgst:bestimmeaktuellenbestandCASE allejgstsek2: +aktuellerbestand:=int(wert(fnrsusgrpjgst))-10CASE allejgst,allejgstsek1, +abgegangene:aktuellerbestand:=int(wert(fnrsusgrpjgst))-4CASE neuansonst: +aktuellerbestand:=int(wert(fnrsujgsteintr))-4CASE neuan5,neuan11: +aktuellerbestand:=1END SELECT ;.bestimmeaktuellenbestand:FOR lvaFROM 1UPTO +maxspaltenwertREP IF compress(wert(fnrsusgrpzugtut))=compress(spaltenwert(lva +))THEN aktuellerbestand:=lva;LEAVE bestimmeaktuellenbestandFI PER . +suchegefundenenwert:IF suchwert=niltextTHEN IF variablezaehlungTHEN +gefundenerwert:=leertitelplatzhalter;zeilennr:=gefundenezeile(gefundenerwert, +maxzeilenwert,gefunden)ELSE zeilennr:=zeileleerFI ELSE gefundenerwert:= +suchwert;zeilennr:=gefundenezeile(gefundenerwert,maxzeilenwert,gefunden)FI . +registrieren:statauszaehlen(zeilennr,aktuellerbestand).END PROC +tragevariablenwertein;INT PROC gefundenezeile(TEXT CONST vergleichswert,INT +CONST oberegrenze,BOOL VAR gefunden):INT VAR i;FOR iFROM 1UPTO oberegrenze +REP IF vergleichswert=zeilenwert(i)THEN gefunden:=TRUE ;LEAVE gefundenezeile +WITH iFI PER ;gefunden:=FALSE ;maxzeilenwertEND PROC gefundenezeile;PROC +holetagesdatum:TEXT CONST tagesdatum:=date;jahrdestagesdatums:=int(subtext( +tagesdatum,beginnjahr));monatdestagesdatums:=int(subtext(tagesdatum, +beginnmonat,endemonat));tagdestagesdatums:=int(subtext(tagesdatum,beginntag, +endetag));END PROC holetagesdatum;INT PROC lebensalter(TEXT CONST +geburtsdatum):INT VAR grundalter:=jahrdestagesdatums-int(subtext(geburtsdatum +,beginnjahr));IF spaeterermonatgeborenCOR (gleichermonatgeborenCAND +spaeterertaggeboren)THEN einsjuengerFI ;grundalter.einsjuenger:grundalter +DECR 1.spaeterermonatgeboren:INT CONST geburtsmonat:=int(subtext(geburtsdatum +,beginnmonat,endemonat));geburtsmonat>monatdestagesdatums. +gleichermonatgeboren:geburtsmonat=monatdestagesdatums.spaeterertaggeboren:int +(subtext(geburtsdatum,beginntag,endetag))>tagdestagesdatums.END PROC +lebensalter;TEXT PROC aufberzweistellig(TEXT CONST jgst):IF length(jgst)=1 +THEN null+jgstELSE jgstFI END PROC aufberzweistellig;TEXT PROC praefix(TEXT +CONST t):subtext(t,1,laengezaehlfeld)END PROC praefix;PROC quicksort(INT +CONST anfang,ende):IF anfang<endeTHEN waehlepivot;sortieregrob;fuegepivotein; +quicksort(anfang,pivotstelle-1);quicksort(pivotstelle+1,ende)FI .waehlepivot: +vertauscheinzeilenwert(anfang,(anfang+ende)DIV 2);TEXT CONST pivot:= +zeilenwert(anfang).sortieregrob:nimmreduziertezeilenwert;REP schluckelinks; +schluckerechts;IF nochnichtleerTHEN vertauscheamrandELSE LEAVE sortieregrob +FI PER .nimmreduziertezeilenwert:INT VAR bereichsanfang:=anfang+1, +bereichsende:=ende.nochnichtleer:bereichsanfang<=bereichsende.schluckelinks: +WHILE nochnichtleerCAND zeilenwert(bereichsanfang)<=pivotREP bereichsanfang +INCR 1PER .schluckerechts:WHILE nochnichtleerCAND zeilenwert(bereichsende)>= +pivotREP bereichsendeDECR 1PER .vertauscheamrand:vertauscheinzeilenwert( +bereichsanfang,bereichsende).fuegepivotein:INT CONST pivotstelle:= +bereichsende;vertauscheinzeilenwert(anfang,pivotstelle).END PROC quicksort; +PROC vertauscheinzeilenwert(INT CONST i,j):TEXT VAR hilfselement:=zeilenwert( +i);zeilenwert(i):=zeilenwert(j);zeilenwert(j):=hilfselement; +statzeilevertauschen(i,j)END PROC vertauscheinzeilenwert;TEXT PROC jgstkonv( +INT CONST jgst):TEXT CONST tjgst:=text(jgst);IF jgst<maxsek1THEN null+tjgst +ELSE tjgstFI END PROC jgstkonv;BOOL PROC pruefungbestand(INT CONST welchen): +BOOL VAR b;SELECT welchenOF CASE einenbestand:pruefungeinenbestand(b)CASE +einejgst:pruefungeinejgst(b)CASE alleinsek1:pruefungsek1(b)CASE alleinsek2: +pruefungsek2(b)END SELECT ;bEND PROC pruefungbestand;PROC pruefungeinejgst( +BOOL VAR b):b:=(wert(fnrsustatuss)=gewbestandCAND wert(fnrsusgrpjgst)= +vergleichsjgst)END PROC pruefungeinejgst;PROC pruefungeinenbestand(BOOL VAR b +):b:=(wert(fnrsustatuss)=gewbestand)END PROC pruefungeinenbestand;PROC +pruefungsek1(BOOL VAR b):b:=(wert(fnrsustatuss)=gewbestandCAND intwert( +fnrsusgrpjgst)<=maxsek1)END PROC pruefungsek1;PROC pruefungsek2(BOOL VAR b):b +:=(wert(fnrsustatuss)=gewbestandCAND intwert(fnrsusgrpjgst)>maxsek1)END PROC +pruefungsek2;END PACKET statintern; + diff --git a/app/schulis/2.2.1/src/2.AUSWERTUNGEN KURSWAHL.files b/app/schulis/2.2.1/src/2.AUSWERTUNGEN KURSWAHL.files new file mode 100644 index 0000000..e5bd001 --- /dev/null +++ b/app/schulis/2.2.1/src/2.AUSWERTUNGEN KURSWAHL.files @@ -0,0 +1,7 @@ +2.kurswahl schnittstelle +2.likw schuelerwahl sek2 +2.likw kurskombinationen sek2 +2.likw wahl und kursdaten sek2 +2.kw anschr kurslisten sek2 +2.stand der kursbildung analysieren + diff --git a/app/schulis/2.2.1/src/2.ERFASSUNGEN KURSWAHL 2.files b/app/schulis/2.2.1/src/2.ERFASSUNGEN KURSWAHL 2.files new file mode 100644 index 0000000..8e00897 --- /dev/null +++ b/app/schulis/2.2.1/src/2.ERFASSUNGEN KURSWAHL 2.files @@ -0,0 +1,5 @@ +2.kurswahl schnittstelle +2.kurszuordnung und umwahl fuer einzelne schueler sek2 +2.kursdaten exportieren +2.kursdaten importieren + diff --git a/app/schulis/2.2.1/src/2.ERFASSUNGEN KURSWAHL.files b/app/schulis/2.2.1/src/2.ERFASSUNGEN KURSWAHL.files new file mode 100644 index 0000000..2f7ea21 --- /dev/null +++ b/app/schulis/2.2.1/src/2.ERFASSUNGEN KURSWAHL.files @@ -0,0 +1,8 @@ +0.kurswahlbasis bereinigen +2.kurswahl schnittstelle +2.erf wahldaten +2.kurse auf planbloecke legen +2.schueler zu kursen zuordnen +2.konsistenzpruefung in kursdaten +2.halbjahreswechsel fuer kursdaten + diff --git a/app/schulis/2.2.1/src/2.erf wahldaten b/app/schulis/2.2.1/src/2.erf wahldaten new file mode 100644 index 0000000..79ab36c --- /dev/null +++ b/app/schulis/2.2.1/src/2.erf wahldaten @@ -0,0 +1,395 @@ +PACKET erfwahldatenDEFINES wahldatenveraendern,wahldatenspeichern, +wahldatenbeenden,wahldatenuebernehmen,wahldatenschuelerlisten, +wahldatenlisteblaettern,wahldatenlistenachbereiten:LET eingangsmaske= +"ms wahldaten eingang",textzumeingangsknoten="Wahldaten bearbeiten", +fnreingbetrjgst=2,fnreingbetrhj=3,fnreingsuderjgst=4,fnreingneuangzurjgst=5, +fnreingfamiliennamesu=6,fnreingrufnamesu=7,fnreinggeburtsdatumsu=8, +fnreingkurse=9,fnreinguebernausjgst=10,fnreinguebernaushj=11, +fnreingcursorruhepos=12;LET jgst10="10",jgst11="11",jgst12="12",jgst13="13", +hj1="1",hj2="2";LET logtext1="Anw. 2.1.1 Wahl ",logtext2="übernehmen ", +logtext3=" nach ",logtext4=" für akt. ",text1=" """,text2=""" ",komma=", ", +punkt=".";TEXT VAR logmeldung;TEXT VAR betrjgst,betrhj,jgstfuersu, +jgstfuerneuang,aktjgst,schuelermenge,gewsj,sufamname,surufname,sugebdatum, +kurswahlgewünscht,uebernausjgst,uebernaushj;LET bearbeitungsmaske= +"ms wahldaten",fnrmeldungsfeld=1,fnrschuljahr=2,fnrschueler=3, +fnrerstesfachart=4,fnrersteeingabe=5,letztefeldnummer=195, +offsetnächsteeingabe=2,textfaecherwahl="Fächerwahl",textkurswahl="Kurswahl", +titelanfang=" eingeben für jetzige Jgst. ",titelmitte=" in ",trennerfuerjgst= +".",trennerfuerschuljahr="/";LET längedesfaches=2,längederart=2, +längederkennung=4,längefachmitkennung=6,längeeinesplbl=3,maxfächeroderkurse= +96,maximalewahlen=13;TEXT VAR aktuellerschueler,alleabiturklausurkürzel;LET +ankreuzung="x";TEXT VAR allefächeroderkursangebote;INT VAR +längefachoderkursangebot;LET längefachangebot=4,posfachimfachangebot=3, +längekursangebot=10,poskennungimkursangebot=3,endposkennungimkursangebot=6, +posartimkursangebot=9;LET listenmaske="mu objektliste",fnrerstesankreuzfeld=2 +,felderprolisteneintrag=2,listeneintraegeproseite=18;LET andenanfang=1, +ansende=2,vorwaerts=3,rueckwaerts=4,dummyschueler="",sunamenstrenner=", ", +sulaengeohnedatum=60,datumstrenner=".",maxankreuzungen=1000,ankreuzungliste= +"x",keineankreuzung="",boolvektordatei="Boolvektor";BOUND ROW maxankreuzungen +BOOL VAR boolvektor;LET meldungfalschejgst=404,meldungfalscheshj=405, +meldungfalschejgstfuersu=404,meldungfalschejgstfuerneuang=404, +meldungmindestenseinejgst=409,meldungjgstsaufeinanderfolgend=410, +meldungjgstzurueckliegend=411,meldunghjzurueckliegend=412, +meldungnurzweiteshjmoeglich=413,meldungfeldleerlassen=390,meldungfamnamefehlt +=166,meldungrufnamefehlt=129,meldungsperrengescheitert=425, +meldungkeinenschülerangeben=414,meldungübernahmeinsichselbst=415, +meldungfrageuebernehmen=300,meldungdatenfehlen=68,meldunguebernehmen=301, +meldunginbearbeitung=352,meldungdatenuebernommen=302,meldungplausi=57, +meldunglistewirderstellt=7,meldungblaetternnichtmöglich=72, +meldungkurswahlserverfehlt=416,meldungsugruppeleer=423,meldungkeinangebot=417 +,meldungangebotzugross=418,meldungzuvielewahlen=421,meldungfalscheskürzel=55, +meldunginkonsistenz=419,meldungdoppelbelegung=420,meldungspeicherung=50, +meldungspeicherfehler=73;LET kuerzelfuerneuang="N",kuerzelfuersuderjgst="O", +kuerzelfuerallesu="",kennungnursuname="N",kennungnurwahldatenzumsu="K", +kennungalleszumsu="A",längeeinerwahl=15,posklausurineinerwahl=1, +posartineinerwahl=2,leereart=" ",posfachineinerwahl=4,poskennungineinerwahl= +6,leerekennung=" ",posplbl1ineinerwahl=10,leererplbl=" ", +leerekennungundplbl=" ",kennungnurplanblöcke="P",poszweiterplbl=4, +keinplbl="",zusperrenderkwdatenraum="Kurswahl-2 ";LET dbtrenner="�", +textschulhalbjahr="Schulhalbjahr",textschuljahr="Schuljahr", +bestandabiturklausur="c02 abitur klausur";LET blank=" ",niltext="";TEXT VAR +zugrundeliegendeshj:=niltext,zugrundeliegendessj:=niltext, +zugrundeliegendejgst:=niltext;BOOL VAR übernahmeingang:=FALSE , +bearbeitennachliste:=FALSE ,bearbeitungingang:=FALSE ;INT VAR aktuellezeile, +erstezeile,letztezeile;LET pufferdatenraum="temporärdatei";ROW maximalewahlen +TEXT VAR plbl1,plbl2;ROW maximalewahlenINT VAR fnrzurwahl;TEXT VAR eintrag; +FILE VAR f;BOOL VAR keineplanblöcke;INT VAR ptrfachoderkursangebot,zähler, +rücksprungweite:=1;PROC wahldatenveraendern:INT VAR fehlerstatus,fnr,i;BOOL +VAR sperregesetzt;IF NOT bearbeitennachlisteTHEN fehlerstatus:= +angabenpruefungdereingangsmaske(2);IF fehlerstatus<>0THEN infeld(fehlerstatus +);return(1);LEAVE wahldatenveraendernFI ;FI ;holeallerelevantendaten; +bearbeitungingang:=TRUE ;setzeueberschriftindenmaskekopf; +bleibendeangabenindiemaskefüllen;gefuelltebearbeitungsmaskeausgeben; +standardnproc.holeallerelevantendaten:IF NOT bearbeitennachlisteTHEN +kurswahlinitialisieren(aktjgst,betrjgst,betrhj,schuelermenge,gewsj); +kurswahlbasisholen(fehlerstatus);IF fehlerstatus<>0THEN infeld( +fnreingbetrjgst);wahldatenbeenden;standardmeldung(meldungkurswahlserverfehlt, +niltext);LEAVE wahldatenveraendernFI ;IF letzterschueler<ersterschuelerTHEN +IF schuelermenge=kuerzelfuerneuangTHEN infeld(fnreingneuangzurjgst)ELSE +infeld(fnreingsuderjgst)FI ;wahldatenbeenden;standardmeldung( +meldungsugruppeleer,niltext);LEAVE wahldatenveraendernFI ; +ermittlelistenstartundende;FI ;IF kurswahlgewünscht=niltextTHEN +zugrundeliegendejgst:=aktjgst;IF aktjgst<betrjgstCOR zugrundeliegendeshj< +betrhjTHEN geplanteshjundsjberechnen(zugrundeliegendeshj,zugrundeliegendessj) +;IF zugrundeliegendeshj=hj1THEN zugrundeliegendejgst:=text(int(aktjgst)+1,2) +FI FI ;allefächeroderkursangebote:=niltext;first(dnrfaecherangebot); +statleseschleife(dnrfaecherangebot,zugrundeliegendessj,zugrundeliegendeshj, +fnrfangsj,fnrfanghj,PROC (BOOL VAR )sammlefächerangebot); +längefachoderkursangebot:=längefachangebot;ELSE allefächeroderkursangebote:= +allekurse;längefachoderkursangebot:=längekursangebot;FI ;IF +allefächeroderkursangebote=niltextTHEN infeld(fnreingbetrjgst); +wahldatenbeenden;standardmeldung(meldungkeinangebot,niltext);LEAVE +wahldatenveraendernFI ;IF length(allefächeroderkursangebote)DIV +längefachoderkursangebot>maxfächeroderkurseTHEN infeld(fnreingbetrjgst); +wahldatenbeenden;standardmeldung(meldungangebotzugross,niltext);LEAVE +wahldatenveraendernFI ;alleabiturklausurkürzel:=ankreuzung;first( +dnrschluessel);statleseschleife(dnrschluessel,bestandabiturklausur,"", +fnrschlsachgebiet,fnrschlschluessel,PROC (BOOL VAR )sammlekürzel);IF +bearbeitennachlisteTHEN aktuellezeile:=erstezeile-1ELSE aktuellezeileDECR 1 +FI ;naechsterindex(aktuellezeile);IF aktuellezeile=0THEN infeld( +fnreingbetrjgst);wahldatenbeenden;LEAVE wahldatenveraendernFI ; +kurswahlsperresetzen(zusperrenderkwdatenraum,sperregesetzt);IF NOT +sperregesetztTHEN infeld(fnreingbetrjgst);wahldatenbeenden;standardmeldung( +meldungsperrengescheitert,niltext);LEAVE wahldatenveraendernFI ;. +setzeueberschriftindenmaskekopf:TEXT VAR t;IF kurswahlgewünscht<>niltextTHEN +t:=textkurswahlELSE t:=textfaecherwahlFI ;tCAT titelanfang;tCAT aktjgst;tCAT +titelmitte;tCAT betrjgst;tCAT trennerfuerjgst;tCAT betrhj;standardstartproc( +bearbeitungsmaske);standardkopfmaskeaktualisieren(t). +bleibendeangabenindiemaskefüllen:standardmaskenfeld(text(gewsj,2)+ +trennerfuerschuljahr+subtext(gewsj,3),fnrschuljahr);fnr:=fnrerstesfachart; +FOR iFROM 1UPTO length(allefächeroderkursangebote)DIV +längefachoderkursangebotREP eintrag:=subtext(allefächeroderkursangebote,1+(i- +1)*längefachoderkursangebot,i*längefachoderkursangebot);IF kurswahlgewünscht= +niltextTHEN eintrag:=subtext(eintrag,posfachimfachangebot)+blank+text(text( +eintrag,längederart),längederkennung)ELSE eintrag:=text(eintrag, +längedesfaches)+blank+subtext(eintrag,poskennungimkursangebot, +endposkennungimkursangebot)FI ;standardmaskenfeld(eintrag,fnr);fnrINCR +offsetnächsteeingabePER ;fnrINCR 1;WHILE fnr<=letztefeldnummerREP feldschutz( +fnr);fnrINCR offsetnächsteeingabePER .END PROC wahldatenveraendern;PROC +wahldatenspeichern(BOOL CONST speichern):INT VAR i,j,fnr,fehlerstatus;TEXT +VAR wahldaten,p1,p2,fname,rname,gebdat;IF speichernTHEN +evtlaktuelleplanblöckeholen;pruefeplausibilitaet;speicherungdurchfuehren; +logbucheintragausfuehrenFI ;naechsterindex(aktuellezeile);IF aktuellezeile<>0 +THEN gefuelltebearbeitungsmaskeausgeben;return(1)ELSE wahldatenbeendenFI . +logbucheintragausfuehren:logmeldung:=betrjgst;logmeldungCAT punkt;logmeldung +CAT betrhj;logmeldungCAT text1;logmeldungCAT fname;logmeldungCAT komma; +logmeldungCAT rname;logmeldungCAT komma;logmeldungCAT gebdat;logmeldungCAT +text2;logbucheintragvornehmen(logmeldung);.evtlaktuelleplanblöckeholen:IF +kurswahlgewünscht<>niltextTHEN kurswahl1holen(fehlerstatus);keineplanblöcke:= +fehlerstatus<>0FI .pruefeplausibilitaet:standardmeldung(meldungplausi,niltext +);wahldaten:=niltext;zähler:=0;fnr:=fnrersteeingabe;FOR iFROM 1UPTO length( +allefächeroderkursangebote)DIV längefachoderkursangebotREP IF +standardmaskenfeld(fnr)<>niltextTHEN zählerINCR 1;IF zähler>maximalewahlen +THEN standardmeldung(meldungzuvielewahlen,niltext);infeld(fnr);return(1); +LEAVE wahldatenspeichernFI ;IF length(standardmaskenfeld(fnr))>1COR pos( +alleabiturklausurkürzel,standardmaskenfeld(fnr))=0THEN standardmeldung( +meldungfalscheskürzel,niltext);infeld(fnr);return(1);LEAVE wahldatenspeichern +FI ;IF standardmaskenfeld(fnr)=ankreuzungTHEN wahldatenCAT blankELSE +wahldatenCAT standardmaskenfeld(fnr)FI ;ptrfachoderkursangebot:=(i-1)* +längefachoderkursangebot;IF kurswahlgewünscht=niltextTHEN wahldatenCAT +subtext(allefächeroderkursangebote,ptrfachoderkursangebot+1, +ptrfachoderkursangebot+längefachoderkursangebot);wahldatenCAT +leerekennungundplbl;ELSE wahldatenCAT subtext(allefächeroderkursangebote, +ptrfachoderkursangebot+posartimkursangebot,ptrfachoderkursangebot+ +längekursangebot);p1:=subtext(allefächeroderkursangebote, +ptrfachoderkursangebot+1,ptrfachoderkursangebot+längefachmitkennung); +wahldatenCAT p1;IF keineplanblöckeTHEN wahldatenCAT leererplbl;wahldatenCAT +leererplblELSE p1:=kursdaten(p1,kennungnurplanblöcke);IF p1=keinplblTHEN p1:= +leererplbl;p2:=leererplblELSE p2:=subtext(p1,poszweiterplbl);p1:=subtext(p1,1 +,längeeinesplbl)FI ;FOR jFROM 1UPTO zähler-1REP IF (p1<>leererplblCAND (p1= +plbl1[j]COR p1=plbl2[j]))COR (p2<>leererplblCAND (p2=plbl2[j]COR p2=plbl1[j]) +)THEN standardmeldung(meldungdoppelbelegung,standardmaskenfeld(fnrzurwahl[j]) ++"#");infeld(fnr);return(1);LEAVE wahldatenspeichernFI ;PER ;plbl1[zähler]:= +p1;plbl2[zähler]:=p2;wahldatenCAT p1;wahldatenCAT p2;fnrzurwahl[zähler]:=fnr- +1;FI FI FI ;fnrINCR offsetnächsteeingabePER .speicherungdurchfuehren: +standardmeldung(meldungspeicherung,niltext);i:=pos(aktuellerschueler, +dbtrenner);j:=pos(aktuellerschueler,dbtrenner,i+1);fname:=text( +aktuellerschueler,i-1);rname:=subtext(aktuellerschueler,i+1,j-1);gebdat:= +subtext(aktuellerschueler,j+1);schuelerwahleintragen(fname,rname,gebdat, +wahldaten);.END PROC wahldatenspeichern;PROC wahldatenbeenden:INT VAR +fehlerstatus:=0,i;rücksprungweite:=1;IF übernahmeingangTHEN forget( +pufferdatenraum,quiet);FOR iFROM fnreingbetrjgstUPTO fnreinguebernaushjREP +feldfrei(i)PER ;feldschutz(fnreingcursorruhepos);infeld(fnreingbetrjgst);IF +NOT bearbeitungingangTHEN kurswahlsperrebeenden(zusperrenderkwdatenraum); +rücksprungweiteINCR 1FI ;übernahmeingang:=FALSE ELSE IF bearbeitennachliste +COR bearbeitungingangTHEN fülleeingangsmaskeFI FI ;IF bearbeitennachliste +THEN forget(boolvektordatei,quiet);bearbeitennachliste:=FALSE ; +rücksprungweiteINCR 1FI ;IF bearbeitungingangTHEN kurswahl2sichern( +fehlerstatus);IF fehlerstatus<>0THEN standardmeldung(meldungspeicherfehler, +niltext);infeld(fnreingbetrjgst)FI ;kurswahlsperrebeenden( +zusperrenderkwdatenraum);bearbeitungingang:=FALSE ;rücksprungweiteINCR 1FI ; +return(rücksprungweite).fülleeingangsmaske:standardstartproc(eingangsmaske); +standardkopfmaskeaktualisieren(textzumeingangsknoten);standardmaskenfeld( +betrjgst,fnreingbetrjgst);standardmaskenfeld(betrhj,fnreingbetrhj); +standardmaskenfeld(jgstfuersu,fnreingsuderjgst);standardmaskenfeld( +jgstfuerneuang,fnreingneuangzurjgst);standardmaskenfeld(sufamname, +fnreingfamiliennamesu);standardmaskenfeld(surufname,fnreingrufnamesu); +standardmaskenfeld(sugebdatum,fnreinggeburtsdatumsu);standardmaskenfeld( +kurswahlgewünscht,fnreingkurse);standardmaskenfeld(uebernausjgst, +fnreinguebernausjgst);standardmaskenfeld(uebernaushj,fnreinguebernaushj); +standardmaskenfeld(niltext,fnreingcursorruhepos);.END PROC wahldatenbeenden; +PROC wahldatenuebernehmen(BOOL CONST hauptaktion):INT VAR i,j1,j2,j3,j4, +fehlerstatus;TEXT VAR zeile,wahlen,t;BOOL VAR sperregesetzt;IF NOT +hauptaktionTHEN fehlerstatus:=angabenpruefungdereingangsmaske(1);IF +fehlerstatus<>0THEN infeld(fehlerstatus);return(1);LEAVE wahldatenuebernehmen +FI ;kurswahlinitialisieren(aktjgst,uebernausjgst,uebernaushj,schuelermenge, +gewsj);kurswahlbasisholen(fehlerstatus);IF fehlerstatus<>0THEN +standardmeldung(meldungkurswahlserverfehlt,niltext);infeld(fnreingbetrjgst); +return(1);LEAVE wahldatenuebernehmenFI ;IF letzterschueler<ersterschueler +THEN standardmeldung(meldungsugruppeleer,niltext);IF schuelermenge= +kuerzelfuerneuangTHEN infeld(fnreingneuangzurjgst)ELSE infeld( +fnreingsuderjgst)FI ;return(1);LEAVE wahldatenuebernehmenFI ;IF NOT +kurswahldatenvorhandenTHEN standardmeldung(meldungdatenfehlen,niltext);infeld +(fnreinguebernausjgst);return(1);LEAVE wahldatenuebernehmenFI ;f:= +sequentialfile(output,pufferdatenraum);FOR iFROM ersterschuelerUPTO +letzterschuelerREP putline(f,wahldatenzumindex(i,kennungalleszumsu))PER ; +kurswahlinitialisieren(aktjgst,betrjgst,betrhj,schuelermenge,gewsj); +kurswahlbasisholen(fehlerstatus);IF fehlerstatus<>0THEN standardmeldung( +meldungkurswahlserverfehlt,niltext);infeld(fnreingbetrjgst);forget( +pufferdatenraum,quiet);return(1);LEAVE wahldatenuebernehmenFI ; +kurswahlsperresetzen(zusperrenderkwdatenraum,sperregesetzt);IF NOT +sperregesetztTHEN standardmeldung(meldungsperrengescheitert,niltext);infeld( +fnreingbetrjgst);forget(pufferdatenraum,quiet);return(1);LEAVE +wahldatenuebernehmenFI ;übernahmeingang:=TRUE ;standardmeldung( +meldungfrageuebernehmen,niltext);FOR iFROM fnreingbetrjgstUPTO +fnreinguebernaushjREP feldschutz(i)PER ;feldfrei(fnreingcursorruhepos);infeld +(fnreingcursorruhepos);standardnproc;ELSE standardmeldung(meldunguebernehmen, +niltext);bearbeitungingang:=TRUE ;f:=sequentialfile(input,pufferdatenraum); +WHILE NOT eof(f)REP getline(f,zeile);j1:=pos(zeile,dbtrenner);j2:=pos(zeile, +dbtrenner,j1+1);j3:=pos(zeile,dbtrenner,j2+1);j4:=pos(zeile,dbtrenner,j3+1); +standardmeldung(meldunginbearbeitung,subtext(zeile,j1+1,j2-1)+"#");IF +kurswahlgewünscht=niltextTHEN t:=text(zeile,j1-1);wahlen:=niltext;FOR iFROM 1 +UPTO length(t)DIV längeeinerwahlREP wahlenCAT subtext(t,(i-1)*längeeinerwahl+ +1,(i-1)*längeeinerwahl+poskennungineinerwahl-1);wahlenCAT leerekennungundplbl +PER ELSE wahlen:=text(zeile,j1-1)FI ;schuelerwahleintragen(subtext(zeile,j1+1 +,j2-1),subtext(zeile,j2+1,j3-1),subtext(zeile,j3+1,j4-1),wahlen);PER ; +standardmeldung(meldungdatenuebernommen,niltext);logmeldung:=logtext2; +logmeldungCAT uebernausjgst;logmeldungCAT punkt;logmeldungCAT uebernaushj; +logmeldungCAT logtext3;logmeldungCAT betrjgst;logmeldungCAT punkt;logmeldung +CAT betrhj;logmeldungCAT logtext4;logmeldungCAT aktjgst; +logbucheintragvornehmen(logmeldung);wahldatenbeendenFI END PROC +wahldatenuebernehmen;PROC wahldatenschuelerlisten:INT VAR i,fehlerstatus; +fehlerstatus:=angabenpruefungdereingangsmaske(2);IF fehlerstatus<>0THEN +infeld(fehlerstatus);return(1);LEAVE wahldatenschuelerlistenFI ; +standardmeldung(meldunglistewirderstellt,niltext);kurswahlinitialisieren( +aktjgst,betrjgst,betrhj,schuelermenge,gewsj);kurswahlbasisholen(fehlerstatus) +;IF fehlerstatus<>0THEN standardmeldung(meldungkurswahlserverfehlt,niltext); +infeld(fnreingbetrjgst);return(1);LEAVE wahldatenschuelerlistenFI ;IF +letzterschueler<ersterschuelerTHEN standardmeldung(meldungsugruppeleer, +niltext);IF schuelermenge=kuerzelfuerneuangTHEN infeld(fnreingneuangzurjgst) +ELSE infeld(fnreingsuderjgst)FI ;return(1);LEAVE wahldatenschuelerlistenFI ; +bearbeitennachliste:=TRUE ;ermittlelistenstartundende;initboolvektor; +standardstartproc(listenmaske);listezeigenabzeile(aktuellezeile); +wahldatenlistenachbereiten.initboolvektor:boolvektor:=new(boolvektordatei); +FOR iFROM erstezeileUPTO letztezeileREP boolvektor(i):=FALSE PER .END PROC +wahldatenschuelerlisten;PROC wahldatenlisteblaettern(INT CONST aktion): +SELECT aktionOF CASE andenanfang:aktuellezeile:=erstezeile;listezeigenabzeile +(aktuellezeile)CASE ansende:IF aktuellezeile+listeneintraegeproseite> +letztezeileTHEN standardmeldung(meldungblaetternnichtmöglich,"")ELSE +aktuellezeile:=max(1,letztezeile-listeneintraegeproseite+1); +listezeigenabzeile(aktuellezeile)FI CASE vorwaerts:IF aktuellezeile+ +listeneintraegeproseite>letztezeileTHEN standardmeldung( +meldungblaetternnichtmöglich,"")ELSE aktuellezeileINCR +listeneintraegeproseite;listezeigenabzeile(aktuellezeile)FI CASE rueckwaerts: +IF aktuellezeile=erstezeileTHEN standardmeldung(meldungblaetternnichtmöglich, +"")ELSE aktuellezeileDECR listeneintraegeproseite;aktuellezeile:=max( +aktuellezeile,erstezeile);listezeigenabzeile(aktuellezeile)FI END SELECT ; +return(1)END PROC wahldatenlisteblaettern;PROC wahldatenlistenachbereiten: +INT VAR i,fnr;infeld(fnrerstesankreuzfeld);standardnproc;fnr:= +fnrerstesankreuzfeld;FOR iFROM aktuellezeileUPTO min(aktuellezeile+ +listeneintraegeproseite,letztezeile)REP boolvektor(i):=standardmaskenfeld(fnr +)<>niltext;fnrINCR felderprolisteneintragPER END PROC +wahldatenlistenachbereiten;PROC ermittlelistenstartundende:INT VAR index,j1, +j2;TEXT VAR t;letztezeile:=min(maxankreuzungen,letzterschueler);erstezeile:= +min(ersterschueler,letztezeile);aktuellezeile:=erstergewuenschterschueler. +erstergewuenschterschueler:index:=erstezeile;IF sufamname<>niltextTHEN t:= +wahldatenzumindex(index,kennungnursuname);j1:=pos(t,dbtrenner);WHILE +sufamname>text(t,j1-1)CAND index<letztezeileREP indexINCR 1;t:= +wahldatenzumindex(index,kennungnursuname);j1:=pos(t,dbtrenner);PER ;IF +sufamname=text(t,j1-1)THEN j2:=pos(t,dbtrenner,j1+1);WHILE sufamname=text(t, +j1-1)CAND surufname>subtext(t,j1+1,j2-1)CAND index<letztezeileREP indexINCR 1 +;t:=wahldatenzumindex(index,kennungnursuname);j1:=pos(t,dbtrenner);j2:=pos(t, +dbtrenner,j1+1);PER ;FI ;IF sugebdatum<>niltextTHEN WHILE sufamname=text(t,j1 +-1)CAND surufname=subtext(t,j1+1,j2-1)CAND text(sugebdatum,2)+datumstrenner+ +subtext(sugebdatum,3,4)+datumstrenner+subtext(sugebdatum,5)<>subtext(t,j2+1) +CAND index<letztezeileREP indexINCR 1;t:=wahldatenzumindex(index, +kennungnursuname);j1:=pos(t,dbtrenner);j2:=pos(t,dbtrenner,j1+1);PER ;FI ;FI +;index.END PROC ermittlelistenstartundende;PROC listezeigenabzeile(INT CONST +zeile):INT VAR i,j1,j2,fnr;TEXT VAR t,t1;fnr:=fnrerstesankreuzfeld;FOR iFROM +zeileUPTO zeile+listeneintraegeproseiteREP IF i<=letztezeileTHEN t:= +wahldatenzumindex(i,kennungnursuname);feldfrei(fnr);IF boolvektor(i)THEN +standardmaskenfeld(ankreuzungliste,fnr);ELSE standardmaskenfeld( +keineankreuzung,fnr);FI ;bereiteschuelerzeileauf;standardmaskenfeld(t1,fnr+1) +;ELSE standardmaskenfeld(niltext,fnr);feldschutz(fnr);standardmaskenfeld( +dummyschueler,fnr+1)FI ;fnrINCR felderprolisteneintrag;PER ;infeld( +fnrerstesankreuzfeld);standardfelderausgeben;.bereiteschuelerzeileauf:j1:=pos +(t,dbtrenner);j2:=pos(t,dbtrenner,j1+1);t1:=text(t,j1-1);t1CAT +sunamenstrenner;t1CAT subtext(t,j1+1,j2-1);t1:=text(t1,sulaengeohnedatum);t1 +CAT blank;t1CAT subtext(t,j2+1).END PROC listezeigenabzeile;PROC +naechsterindex(INT VAR index):indexINCR 1;IF bearbeitennachlisteTHEN WHILE +index<=letztezeileCAND NOT boolvektor(index)REP indexINCR 1PER FI ;IF index> +letztezeileTHEN index:=0FI END PROC naechsterindex;PROC sammlefächerangebot( +BOOL VAR b):IF intwert(fnrfangsj)>int(zugrundeliegendessj)COR intwert( +fnrfanghj)>int(zugrundeliegendeshj)COR intwert(fnrfangjgst)>int( +zugrundeliegendejgst)COR dbstatus<>0THEN b:=TRUE ELIF intwert(fnrfangjgst)= +int(zugrundeliegendejgst)THEN allefächeroderkursangeboteCAT text(wert( +fnrfangart),längederart);allefächeroderkursangeboteCAT text(wert(fnrfangfach) +,längedesfaches);FI END PROC sammlefächerangebot;PROC sammlekürzel(BOOL VAR b +):IF wert(fnrschlsachgebiet)<>bestandabiturklausurCOR dbstatus<>0THEN b:= +TRUE ELSE alleabiturklausurkürzelCAT wert(fnrschlschluessel)FI ;END PROC +sammlekürzel;PROC gefuelltebearbeitungsmaskeausgeben:TEXT VAR wahldaten, +klausurleiste,suchtext;INT VAR i,anfposaktuellewahl,position,fnr;BOOL VAR +warnung:=FALSE ;wahldaten:=wahldatenzumindex(aktuellezeile,kennungnursuname); +aktuellerschueler:=wahldaten;changeall(wahldaten,dbtrenner,sunamenstrenner); +standardmaskenfeld(text(wahldaten,standardfeldlaenge(fnrschueler)), +fnrschueler);wahldaten:=wahldatenzumindex(aktuellezeile, +kennungnurwahldatenzumsu);klausurleiste:=(length(allefächeroderkursangebote) +DIV längefachoderkursangebot)*dbtrenner;FOR iFROM 1UPTO length(wahldaten)DIV +längeeinerwahlREP anfposaktuellewahl:=(i-1)*längeeinerwahl;IF +kurswahlgewünscht=niltextTHEN IF subtext(wahldaten,anfposaktuellewahl+ +poskennungineinerwahl,anfposaktuellewahl+posplbl1ineinerwahl-1)<>leerekennung +THEN warnung:=TRUE FI ;IF subtext(wahldaten,anfposaktuellewahl+ +posartineinerwahl,anfposaktuellewahl+posfachineinerwahl-1)=leereartTHEN +warnung:=TRUE ELSE suchtext:=subtext(wahldaten,anfposaktuellewahl+ +posartineinerwahl,anfposaktuellewahl+poskennungineinerwahl-1);position:=pos( +allefächeroderkursangebote,suchtext);WHILE position<>0CAND positionMOD +längefachoderkursangebot<>1REP position:=pos(allefächeroderkursangebote, +suchtext,position+1);PER ;IF position=0THEN warnung:=TRUE ELSE position:= +positionDIV längefachoderkursangebot+1;IF (klausurleisteSUB position)<> +dbtrennerTHEN warnung:=TRUE ELSE IF (wahldatenSUB (anfposaktuellewahl+ +posklausurineinerwahl))=blankTHEN change(klausurleiste,position,position, +ankreuzung)ELSE change(klausurleiste,position,position,wahldatenSUB ( +anfposaktuellewahl+posklausurineinerwahl))FI FI ;FI FI ELSE IF subtext( +wahldaten,anfposaktuellewahl+posartineinerwahl,anfposaktuellewahl+ +posfachineinerwahl-1)=leereartTHEN warnung:=TRUE FI ;suchtext:=subtext( +wahldaten,anfposaktuellewahl+posfachineinerwahl,anfposaktuellewahl+ +posplbl1ineinerwahl-1);position:=pos(allefächeroderkursangebote,suchtext); +WHILE position<>0CAND positionMOD längefachoderkursangebot<>1REP position:= +pos(allefächeroderkursangebote,suchtext,position+1);PER ;IF position=0THEN +warnung:=TRUE ELSE position:=positionDIV längefachoderkursangebot+1;IF ( +klausurleisteSUB position)<>dbtrennerTHEN warnung:=TRUE ELSE IF (wahldaten +SUB (anfposaktuellewahl+posklausurineinerwahl))=blankTHEN change( +klausurleiste,position,position,ankreuzung)ELSE change(klausurleiste,position +,position,wahldatenSUB (anfposaktuellewahl+posklausurineinerwahl))FI FI FI +FI ;PER ;fnr:=fnrersteeingabe;FOR iFROM 1UPTO length(klausurleiste)REP IF ( +klausurleisteSUB i)=dbtrennerTHEN standardmaskenfeld(niltext,fnr)ELSE +standardmaskenfeld(klausurleisteSUB i,fnr)FI ;fnrINCR offsetnächsteeingabe +PER ;IF warnungTHEN standardmeldung(meldunginkonsistenz,niltext);infeld( +fnrschuljahr)ELSE infeld(fnrmeldungsfeld)FI ;standardfelderausgeben;infeld( +fnrersteeingabe)END PROC gefuelltebearbeitungsmaskeausgeben;INT PROC +angabenpruefungdereingangsmaske(INT CONST aktion):INT VAR fehlerstatus; +betrjgst:=standardmaskenfeld(fnreingbetrjgst);betrhj:=standardmaskenfeld( +fnreingbetrhj);IF betrjgst<>jgst11AND betrjgst<>jgst12AND betrjgst<>jgst13 +THEN standardmeldung(meldungfalschejgst,niltext);LEAVE +angabenpruefungdereingangsmaskeWITH fnreingbetrjgstFI ;IF betrhj<>hj1AND +betrhj<>hj2THEN standardmeldung(meldungfalscheshj,niltext);LEAVE +angabenpruefungdereingangsmaskeWITH fnreingbetrhjFI ;jgstfuersu:= +standardmaskenfeld(fnreingsuderjgst);IF jgstfuersu<>niltextCAND jgstfuersu<> +jgst10CAND jgstfuersu<>jgst11CAND jgstfuersu<>jgst12CAND jgstfuersu<>jgst13 +THEN standardmeldung(meldungfalschejgstfuersu,niltext);LEAVE +angabenpruefungdereingangsmaskeWITH fnreingsuderjgstFI ;jgstfuerneuang:= +standardmaskenfeld(fnreingneuangzurjgst);IF jgstfuerneuang<>niltextCAND +jgstfuerneuang<>jgst11CAND jgstfuerneuang<>jgst12CAND jgstfuerneuang<>jgst13 +THEN standardmeldung(meldungfalschejgstfuerneuang,niltext);LEAVE +angabenpruefungdereingangsmaskeWITH fnreingneuangzurjgstFI ;IF jgstfuersu= +niltextCAND jgstfuerneuang=niltextTHEN standardmeldung( +meldungmindestenseinejgst,niltext);LEAVE angabenpruefungdereingangsmaskeWITH +fnreingsuderjgstFI ;IF jgstfuersu<>niltextCAND jgstfuerneuang<>niltextCAND +int(jgstfuersu)+1<>int(jgstfuerneuang)THEN standardmeldung( +meldungjgstsaufeinanderfolgend,niltext);LEAVE angabenpruefungdereingangsmaske +WITH fnreingsuderjgstFI ;zugrundeliegendeshj:=schulkenndatum( +textschulhalbjahr);zugrundeliegendessj:=schulkenndatum(textschuljahr);IF +jgstfuerneuang<>niltextTHEN IF jgstfuerneuang>betrjgstTHEN standardmeldung( +meldungjgstzurueckliegend,niltext);LEAVE angabenpruefungdereingangsmaskeWITH +fnreingbetrjgstFI ;aktjgst:=text(int(jgstfuerneuang)-1);IF jgstfuersu<> +niltextTHEN schuelermenge:=kuerzelfuerallesuELSE schuelermenge:= +kuerzelfuerneuangFI ELSE IF jgstfuersu>betrjgstTHEN standardmeldung( +meldungjgstzurueckliegend,niltext);LEAVE angabenpruefungdereingangsmaskeWITH +fnreingbetrjgstFI ;IF betrjgst=jgstfuersuCAND betrhj<zugrundeliegendeshjTHEN +standardmeldung(meldunghjzurueckliegend,niltext);LEAVE +angabenpruefungdereingangsmaskeWITH fnreingbetrhjFI ;aktjgst:=jgstfuersu; +schuelermenge:=kuerzelfuersuderjgstFI ;IF aktjgst=jgst10CAND +zugrundeliegendeshj=hj1THEN standardmeldung(meldungnurzweiteshjmoeglich, +niltext);IF jgstfuersu<>niltextTHEN LEAVE angabenpruefungdereingangsmaske +WITH fnreingsuderjgstELSE LEAVE angabenpruefungdereingangsmaskeWITH +fnreingneuangzurjgstFI FI ;kurswahlgewünscht:=standardmaskenfeld(fnreingkurse +);sufamname:=standardmaskenfeld(fnreingfamiliennamesu);surufname:= +standardmaskenfeld(fnreingrufnamesu);sugebdatum:=standardmaskenfeld( +fnreinggeburtsdatumsu);uebernausjgst:=standardmaskenfeld(fnreinguebernausjgst +);uebernaushj:=standardmaskenfeld(fnreinguebernaushj);IF aktion=2THEN IF +sufamname=niltextCAND (surufname<>niltextOR sugebdatum<>niltext)THEN +standardmeldung(meldungfamnamefehlt,niltext);LEAVE +angabenpruefungdereingangsmaskeWITH fnreingfamiliennamesuFI ;IF surufname= +niltextCAND sugebdatum<>niltextTHEN standardmeldung(meldungrufnamefehlt, +niltext);LEAVE angabenpruefungdereingangsmaskeWITH fnreingrufnamesuFI ;IF +sugebdatum<>niltextTHEN standardpruefe(6,fnreinggeburtsdatumsu,0,0,"", +fehlerstatus);IF fehlerstatus<>0THEN LEAVE angabenpruefungdereingangsmaske +WITH fehlerstatusFI FI ;IF uebernausjgst<>niltextTHEN standardmeldung( +meldungfeldleerlassen,niltext);LEAVE angabenpruefungdereingangsmaskeWITH +fnreinguebernausjgstFI ;IF uebernaushj<>niltextTHEN standardmeldung( +meldungfeldleerlassen,niltext);LEAVE angabenpruefungdereingangsmaskeWITH +fnreinguebernaushjFI ELSE IF length(sufamname)+length(surufname)+length( +sugebdatum)>0THEN standardmeldung(meldungkeinenschülerangeben,niltext);IF +sufamname<>niltextTHEN LEAVE angabenpruefungdereingangsmaskeWITH +fnreingfamiliennamesuELIF surufname<>niltextTHEN LEAVE +angabenpruefungdereingangsmaskeWITH fnreingrufnamesuELSE LEAVE +angabenpruefungdereingangsmaskeWITH fnreinggeburtsdatumsuFI ;FI ;IF +uebernausjgst<>jgst11AND uebernausjgst<>jgst12AND uebernausjgst<>jgst13THEN +standardmeldung(meldungfalschejgst,niltext);LEAVE +angabenpruefungdereingangsmaskeWITH fnreinguebernausjgstFI ;IF uebernaushj<> +hj1AND uebernaushj<>hj2THEN standardmeldung(meldungfalscheshj,niltext);LEAVE +angabenpruefungdereingangsmaskeWITH fnreinguebernaushjFI ;IF uebernausjgst= +betrjgstCAND uebernaushj=betrhjTHEN standardmeldung( +meldungübernahmeinsichselbst,niltext);LEAVE angabenpruefungdereingangsmaske +WITH fnreinguebernausjgstFI ;IF jgstfuerneuang<>niltextTHEN IF jgstfuerneuang +>uebernausjgstTHEN standardmeldung(meldungjgstzurueckliegend,niltext);LEAVE +angabenpruefungdereingangsmaskeWITH fnreinguebernausjgstFI ;ELSE IF +jgstfuersu>uebernausjgstTHEN standardmeldung(meldungjgstzurueckliegend, +niltext);LEAVE angabenpruefungdereingangsmaskeWITH fnreinguebernausjgstFI ; +IF uebernausjgst=jgstfuersuCAND uebernaushj<zugrundeliegendeshjTHEN +standardmeldung(meldunghjzurueckliegend,niltext);LEAVE +angabenpruefungdereingangsmaskeWITH fnreinguebernaushjFI ;FI ;FI ;0END PROC +angabenpruefungdereingangsmaske;PROC logbucheintragvornehmen(TEXT CONST +escfunktion):logeintrag(logtext1+escfunktion)END PROC logbucheintragvornehmen +;END PACKET erfwahldaten + diff --git a/app/schulis/2.2.1/src/2.halbjahreswechsel fuer kursdaten b/app/schulis/2.2.1/src/2.halbjahreswechsel fuer kursdaten new file mode 100644 index 0000000..4443395 --- /dev/null +++ b/app/schulis/2.2.1/src/2.halbjahreswechsel fuer kursdaten @@ -0,0 +1,77 @@ +PACKET halbjahreswechselfuerkursdatenDEFINES +halbjahreswechselfuerkursdatenvorbereiten, +halbjahreswechselfuerkursdatenstarten,halbjahreswechselfuerkursdatendrucken: +LET maske="ms halbjahreswechsel fuer kursdaten";INT VAR fnraktsj:=2,fnrakthj +:=3,fnrgeplsj:=4,fnrgeplhj:=5,fnrauskunft:=6;LET +meldnrhalbjahreswechsellaeuft=156,meldnrinbearbeitung=352, +meldnrkurswahlfehler=416;FILE VAR prot;LET protname= +"Protokoll zum Halbjahreswechsel";FILE VAR f,faus;LET datei="Ausgangsliste", +bearbdatei="Bearbeitungsliste";LET schuljahr="Schuljahr",schulhalbjahr= +"Schulhalbjahr",schulname="Schulname",schulort="Schulort";LET ueberschrift= +"Schulhalbjahreswechsel für Kursdaten Sek. 2",untertitel1= +"Wechsel von Schuljahr ",untertitel2=" zum Schuljahr ",halbjahr= +". Halbjahr",protokollanfang="Planblockschema und Hilfsdateien zu";LET strich +="-",schraegstrich="/",kennzhell="#";LET beginnjgst=12,beginnhj=15,beginnsj= +17,beginnjgstsort=6,beginndateiname=8;LET kurswahlpraefix="Kurswahl-", +kurswahl2praefix="Kurswahl-2",sperrepraefix="Sperre Kurswahl-";TEXT VAR aktsj +:="",akthj:="",geplsj,geplhj;TEXT VAR vergleichshj:="",vergleichsjgst, +aktuelleshj;TEXT VAR zeile,neuezeile,auszeile;LET tasknameserver= +"kurswahl server";TASK VAR kurswahlserver;THESAURUS VAR thes;LET +logbucheintraghjwechsel="Anw. 2.2.4.1 Halbjahreswechsel für Kursdaten Sek. 2" +;PROC halbjahreswechselfuerkursdatenvorbereiten:standardstartproc(maske);IF +aktsj=""THEN aktsj:=schulkenndatum(schuljahr);akthj:=schulkenndatum( +schulhalbjahr)FI ;geplsj:=aktsj;geplhj:=akthj;geplanteshjundsjberechnen( +geplhj,geplsj);standardmaskenfeld(aktsj,fnraktsj);standardmaskenfeld(akthj, +fnrakthj);standardmaskenfeld(geplsj,fnrgeplsj);standardmaskenfeld(geplhj, +fnrgeplhj);infeld(fnraktsj);standardfelderausgeben;infeld(fnrauskunft); +standardnprocEND PROC halbjahreswechselfuerkursdatenvorbereiten;PROC +halbjahreswechselfuerkursdatenstarten:IF NOT existstask(tasknameserver)THEN +standardmeldung(meldnrkurswahlfehler,"");return(1)ELSE kurswahlserver:=/ +tasknameserver;standardmeldung(meldnrhalbjahreswechsellaeuft,"");logeintrag( +logbucheintraghjwechsel+" Start");dateienverzeichnissortierterstellen; +dateienverzeichnisbehandeln;logeintrag(logbucheintraghjwechsel+" Ende"); +zeigedatei(protname,"")FI .dateienverzeichnissortierterstellen:forget(datei, +quiet);forget(bearbdatei,quiet);thes:=ALL kurswahlserver;dateiFILLBY thes;f:= +sequentialfile(input,datei);faus:=sequentialfile(output,bearbdatei);WHILE +NOT eof(f)REP getline(f,zeile);IF pos(zeile,kurswahlpraefix)=1THEN +sortierkriterienanzeilenanfangkopierenELSE neuezeile:=zeileFI ;putline(faus, +neuezeile)PER ;forget(datei,quiet);sort(bearbdatei). +sortierkriterienanzeilenanfangkopieren:neuezeile:=subtext(zeile,beginnsj); +neuezeileCAT (zeileSUB beginnhj);neuezeileCAT subtext(zeile,beginnjgst, +beginnjgst+1);neuezeileCAT zeile.dateienverzeichnisbehandeln:aktuelleshj:= +aktsj;aktuelleshjCAT akthj;f:=sequentialfile(input,bearbdatei);forget( +protname,quiet);prot:=sequentialfile(output,protname); +kopfinausgabedateischreiben;commanddialogue(FALSE );WHILE NOT eof(f)REP +getline(f,zeile);zeileuntersuchenPER ;forget(bearbdatei,quiet); +commanddialogue(TRUE ).zeileuntersuchen:IF pos(zeile,kurswahlpraefix)=0THEN +erase(zeile,kurswahlserver)ELIF pos(zeile,sperrepraefix)>0THEN erase(zeile, +kurswahlserver)ELSE IF subtext(zeile,1,5)<>vergleichshjTHEN vergleichshj:= +subtext(zeile,1,5);vergleichsjgst:="";line(prot);standardmeldung( +meldnrinbearbeitung,(vergleichshjSUB 5)+". "+subtext(vergleichshj,1,2)+ +schraegstrich+subtext(vergleichshj,3,4)+kennzhell)FI ;IF vergleichshj<= +aktuelleshjTHEN meldeloeschung(zeile,TRUE );erase(subtext(zeile, +beginndateiname),kurswahlserver)ELIF pos(zeile,kurswahl2praefix)>0THEN erase( +subtext(zeile,beginndateiname),kurswahlserver)ELSE meldeloeschung(zeile, +FALSE )FI FI .kopfinausgabedateischreiben:putline(prot,schulkenndatum( +schulname));putline(prot,text(schulkenndatum(schulort),65)+date);line(prot); +putline(prot,ueberschrift);putline(prot,length(ueberschrift)*strich);line( +prot);auszeile:=untertitel1;auszeileCAT subtext(aktsj,1,2);auszeileCAT +schraegstrich;auszeileCAT subtext(aktsj,3,4);auszeileCAT " , ";auszeileCAT +akthj;auszeileCAT halbjahr;putline(prot,auszeile);auszeile:=untertitel2; +auszeileCAT subtext(geplsj,1,2);auszeileCAT schraegstrich;auszeileCAT subtext +(geplsj,3,4);auszeileCAT " , ";auszeileCAT geplhj;auszeileCAT halbjahr; +putline(prot,auszeile);line(prot);putline(prot,protokollanfang)END PROC +halbjahreswechselfuerkursdatenstarten;PROC meldeloeschung(TEXT CONST +ausdatname,BOOL CONST loeschen):IF vergleichsjgst<>jgstinausdatnameTHEN +vergleichsjgst:=jgstinausdatname;TEXT VAR auszeile:="Jgst. ";auszeileCAT +vergleichsjgst;auszeileCAT " in ";auszeileCAT subtext(vergleichshj,1,2); +auszeileCAT "/";auszeileCAT subtext(vergleichshj,3,4);auszeileCAT " "; +auszeileCAT (vergleichshjSUB 5);auszeileCAT ". Halbjahr ";IF loeschenTHEN +auszeileCAT "wurden gelöscht"ELSE auszeileCAT "existieren"FI ;putline(prot, +auszeile)FI .jgstinausdatname:subtext(ausdatname,beginnjgstsort, +beginnjgstsort+1).END PROC meldeloeschung;PROC +halbjahreswechselfuerkursdatendrucken(BOOL CONST drucken):IF druckenTHEN +print(protname)FI ;forget(protname,quiet);enter(2)END PROC +halbjahreswechselfuerkursdatendrucken;END PACKET +halbjahreswechselfuerkursdaten + diff --git a/app/schulis/2.2.1/src/2.konsistenzpruefung in kursdaten b/app/schulis/2.2.1/src/2.konsistenzpruefung in kursdaten new file mode 100644 index 0000000..c027414 --- /dev/null +++ b/app/schulis/2.2.1/src/2.konsistenzpruefung in kursdaten @@ -0,0 +1,75 @@ +PACKET konsistenzpruefunginkursdatenDEFINES +konsistenzpruefunginkursdatenstarten, +konsistenzpruefunginkursdatenprotokolldrucken:LET meldnrblankomeldung=343; +LET protname="Protokoll zur Konsistenzprüfung";FILE VAR prot;LET schuljahr= +"Schuljahr",schulhalbjahr="Schulhalbjahr",schulname="Schulname",schulort= +"Schulort";LET ueberschrift="Konsistenzprüfung in Kursdaten",untertitel1= +"Kursdaten zum Schuljahr ",texthalbjahr=". Halbjahr",untertitel2= +"Prüfung am ",beginnderfehlerliste=" festgestellte Inkonsistenzen:";LET +strich="-",schraegstrich="/",blank=" ",kennzhell="#";TEXT VAR aktsj:="",akthj +:="",gewsj:="",gewhj:="",bearbschuljahr;INT VAR ihalbjahr;LET maxhalbjahre=7; +LET ersteshj="1";INT VAR jgst,gewjgst,jgstinkrement,startjgst;LET jgst10=10, +jgst11=11,jgst13=13;TEXT VAR auszeile;TEXT VAR gueltigekurse,alleplanbloecke, +allekursedesplanblocks,planblock,kurs;LET kennungkurse="K";LET +laengeplanblock=3,laengekurs=6,laengekursangaben=10;INT VAR posplanblock, +poskurs;BOOL VAR keinfehleraufgetreten;PROC +konsistenzpruefunginkursdatenstarten:IF aktsj=""THEN aktsj:=schulkenndatum( +schuljahr);akthj:=schulkenndatum(schulhalbjahr)FI ;gewsj:=aktsj;gewhj:=akthj; +protokollvorbereiten;ausgabekopfaufbereiten;pruefunginkursdatendurchfuehren; +zeigedatei(protname,"").protokollvorbereiten:forget(protname,quiet);prot:= +sequentialfile(output,protname).ausgabekopfaufbereiten:putline(prot, +schulkenndatum(schulname));putline(prot,schulkenndatum(schulort));line(prot,2 +);putline(prot,20*blank+ueberschrift);putline(prot,20*blank+length( +ueberschrift)*strich);line(prot);auszeile:=untertitel1;auszeileCAT +aufberschuljahr;auszeileCAT ", ";auszeileCAT akthj;auszeileCAT texthalbjahr; +putline(prot,auszeile);auszeile:=untertitel2;auszeileCAT date;auszeileCAT +blank;auszeileCAT timeofday;putline(prot,auszeile);line(prot,2).END PROC +konsistenzpruefunginkursdatenstarten;PROC pruefunginkursdatendurchfuehren:IF +akthj=ersteshjTHEN startjgst:=jgst11ELSE startjgst:=jgst10FI ;FOR jgstFROM +startjgstUPTO jgst13REP kurswahlserveraktualisieren(text(jgst),"","")#spr16. +01.91#PER ;jgstinkrement:=0;FOR ihalbjahrFROM 1UPTO maxhalbjahreREP +gewhalbjahrbearbeiten;halbjahrerhoehenPER .halbjahrerhoehen: +geplanteshjundsjberechnen(gewhj,gewsj);IF gewhj=ersteshjTHEN jgstinkrement +INCR 1FI .gewhalbjahrbearbeiten:FOR jgstFROM startjgstUPTO jgst13REP gewjgst +:=jgst+jgstinkrement;IF gewjgst<=13THEN kurswahlinitialisieren(text(jgst), +text(gewjgst),gewhj,"",bearbschuljahr);IF istkurswahlbasisvorhandenTHEN +bearbeiteFI ;FI ;PER .bearbeite:kontrollmeldungausgeben; +datenmeldunginprotokollausgeben;fehlerschalterinitialisieren;IF +aktuellesodergeplanteshalbjahrTHEN INT VAR fehlerstatus;kurswahlbasisholen( +fehlerstatus);pruefeplanblockschemamitkursen;kurswahl1sichern(fehlerstatus) +FI ;fehlerschalterauswerten.aktuellesodergeplanteshalbjahr:ihalbjahr=1COR +ihalbjahr=2.kontrollmeldungausgeben:auszeile:="Daten zu Jgst. ";auszeileCAT +text(gewjgst);auszeileCAT ".";auszeileCAT gewhj;auszeileCAT " in ";auszeile +CAT aufberschuljahr;auszeileCAT " werden geprüft.";auszeileCAT kennzhell; +standardmeldung(meldnrblankomeldung,auszeile).datenmeldunginprotokollausgeben +:auszeile:="Wahldaten für Schüler der Jgst. ";auszeileCAT text(jgst);auszeile +CAT ": Schuljahr ";auszeileCAT aufberschuljahr;auszeileCAT " Jgst. ";auszeile +CAT text(gewjgst);auszeileCAT ".";auszeileCAT gewhj;putline(prot,auszeile). +fehlerschalterinitialisieren:keinfehleraufgetreten:=TRUE . +fehlerschalterauswerten:IF keinfehleraufgetretenTHEN putline(prot, +beginnderfehlerliste+" keine")FI ;line(prot,2).pruefeplanblockschemamitkursen +:gueltigekurse:=allekurse;alleplanbloecke:=alleplanblockbezeichner; +posplanblock:=1;WHILE posplanblock<length(alleplanbloecke)REP planblock:= +subtext(alleplanbloecke,posplanblock,posplanblock+laengeplanblock-1); +allekursedesplanblocks:=planblockdaten(planblock,kennungkurse);poskurs:=1; +WHILE poskurs<length(allekursedesplanblocks)REP kurs:=subtext( +allekursedesplanblocks,poskurs,poskurs+laengekurs-1);IF suchpos(gueltigekurse +,kurs,laengekursangaben)=0THEN planbloeckezumkurseintragen(kurs,"",""); +fehlerprotokollierenFI ;poskursINCR laengekursPER ;posplanblockINCR +laengeplanblockPER .fehlerprotokollieren:IF keinfehleraufgetretenTHEN +keinfehleraufgetreten:=FALSE ;putline(prot,beginnderfehlerliste)FI ; +fehlerzeileschreiben.fehlerzeileschreiben:auszeile:="Kurs ";auszeileCAT text( +gewjgst);auszeileCAT blank;auszeileCAT subtext(kurs,1,2);auszeileCAT blank; +auszeileCAT subtext(kurs,3);auszeileCAT +" : Bezeichnung ungültig, wurde aus der Blockung gelöscht";putline(prot, +auszeile).END PROC pruefunginkursdatendurchfuehren;TEXT PROC aufberschuljahr: +TEXT VAR aufbersj:=subtext(gewsj,1,2);aufbersjCAT schraegstrich;aufbersjCAT +subtext(gewsj,3,4);aufbersjEND PROC aufberschuljahr;PROC +konsistenzpruefunginkursdatenprotokolldrucken(BOOL CONST drucken):IF drucken +THEN print(protname)FI ;forget(protname,quiet);enter(2)END PROC +konsistenzpruefunginkursdatenprotokolldrucken;INT PROC suchpos(TEXT CONST +quelle,suchtext,INT CONST laenge):INT VAR findpos:=pos(quelle,suchtext); +WHILE findpos>0REP IF findposMOD laenge=1THEN LEAVE suchposWITH findposELSE +findpos:=pos(quelle,suchtext,findpos+1);FI PER ;findposEND PROC suchpos;END +PACKET konsistenzpruefunginkursdaten + diff --git a/app/schulis/2.2.1/src/2.kursdaten exportieren b/app/schulis/2.2.1/src/2.kursdaten exportieren new file mode 100644 index 0000000..e93c54d --- /dev/null +++ b/app/schulis/2.2.1/src/2.kursdaten exportieren @@ -0,0 +1,226 @@ +PACKET kursdatenueberschnittstelleexportierenDEFINES +kursdatenschnittstelleexportanfang, +kursdatenschnittstelleexportaufbereitenoderabfrage, +kursdatenschnittstelleexportaufbereiten,kursdatenschnittstelleexportzeigen, +kursdatenschnittstelleexportzeigenverlassen, +kursdatenschnittstelleexportloeschenabfrage, +kursdatenschnittstelleexportloeschen,kursdatenschnittstelleexportarchiv, +kursdatenschnittstelleexportabfrage, +kursdatenschnittstelleexportloescheundreturn, +kursdatenschnittstelleexportdrucken,kursdatenschnittstelleexportabbruch:LET +eingangsmaske="ms kurswahldaten exportieren",schuljahr="Schuljahr",halbjahr= +"Schulhalbjahr",filemodus="file ibm",listenname= +"Liste der Dateien auf der Diskette:",trenner="�",dos="DOS",einganggewjgst=2, +einganggewhj=3,eingangaktjgst=4,eingangaktneue=5,eingangmitkursen=6, +eingangdateiname=7,anzeingangsfelder=7,kurslaenge=15,kznurneue="N",kzohneneue +="O",kzalle="A",kzname="N",kzkurse="K",suffixfa=".FA",suffixwk=".WK",suffixbr +=".BR",suffixzi=".ZI",suffixzieintrag=" ",leerekennung=" " +,meldungkeineschueler=423,meldungbearbwird=352,meldungwarten=69, +meldungdrucken=58,meldungpraezisieren=129,meldungfeldfuellen=52, +meldungfalschejgst=404,meldungfalscheshj=405,meldungserverfehler=416, +meldungandereauswahl=318,meldungdatengeloescht=431,meldungnamefalsch=323, +meldungrausreichen=343,meldungdisksichern=347,meldungdiskinit=348, +meldungnameloeschen=349,meldungaufdiskschr=350,meldungnameunbek=351;ROW +anzeingangsfelderTEXT VAR eingangrow:=ROW anzeingangsfelderTEXT :("","","","" +,"","","schulis");INT VAR i,j;TEXT VAR t,t1,t2;INT VAR pos1,pos2,letztepos, +fstat,ruecksprung,aktfeld;TEXT VAR aktdateiname:="schulis",gewjgst,gewhj, +aktjgst,aktneue,gewsj,aktsj:="0000",akthj,schuelergruppe,aktsuffix:=suffixfa, +fahj,fasj,kweintrag,kurseintrag,dateieintrag;THESAURUS VAR thes;BOOL VAR +archivfehler;FILE VAR dsfa,dswk,dsbr,dszi,g;PROC +kursdatenschnittstelleexportanfang:standardstartproc(eingangsmaske); +gibeingangaus;standardfelderausgeben;infeld(letztepos);standardnproc. +gibeingangaus:infeld(1);FOR iFROM 1UPTO anzeingangsfelderREP +standardmaskenfeld(eingangrow(i),i);IF eingangrow(i)<>""THEN letztepos:=iFI +PER .END PROC kursdatenschnittstelleexportanfang;PROC +kursdatenschnittstelleexportaufbereitenoderabfrage: +pruefeingabeundbelegvariablen;IF fstat=0THEN abfrageloeschenFI . +abfrageloeschen:beginlist;REP getlistentry(t1,t2);IF pos(t1,suffixfa)>0THEN +infeld(eingangdateiname);ruecksprung:=2;standardmeldung(meldungnameloeschen, +t1+" (-WK,-BR,-ZI)#"+text(t2,8)+"#");standardnproc;LEAVE +kursdatenschnittstelleexportaufbereitenoderabfrageFI UNTIL t1=""PER ; +ruecksprung:=1;kursdatenschnittstelleexportaufbereiten.END PROC +kursdatenschnittstelleexportaufbereitenoderabfrage;PROC +kursdatenschnittstelleexportaufbereiten:kurswahlinitialisieren(aktjgst, +gewjgst,gewhj,schuelergruppe,gewsj);kurswahlbasisholen(fstat);IF fstat<>0 +THEN meldungausgeben(meldungserverfehler,einganggewjgst,1);ELIF +letzterschueler<ersterschuelerTHEN meldungausgeben(meldungkeineschueler, +einganggewjgst,1);ELSE bereitefadateiauf;bereitewkdateiauf;bereitebrdateiauf; +bereitezidateiauf;loeschemeldung;return(ruecksprung)FI .bereitefadateiauf:IF +gewjgst=aktjgstCAND gewhj=akthjTHEN fahj:=akthj;fasj:=aktsjELSE +geplanteshjundsjberechnen(fahj,fasj)FI ;standardmeldung(meldungbearbwird, +aktdateiname+suffixfa+"#");forget(aktdateiname+suffixfa,quiet);dsfa:= +sequentialfile(output,aktdateiname+suffixfa);inittupel(dnrfaecherangebot); +putwert(fnrfangjgst,gewjgst);statleseschleife(dnrfaecherangebot,fasj,fahj, +fnrfangsj,fnrfanghj,PROC faecherangebotindateischreiben).bereitewkdateiauf: +forget(aktdateiname+suffixwk,quiet);dswk:=sequentialfile(output,aktdateiname+ +suffixwk);standardmeldung(meldungbearbwird,aktdateiname+suffixwk+"#");IF +eingangrow(eingangmitkursen)<>""THEN erstelledateimitkennungELSE +erstelledateiohnekennungFI .erstelledateimitkennung:FOR iFROM ersterschueler +UPTO letzterschuelerREP kweintrag:=wahldatenzumindex(i,kzname);pos1:=pos( +kweintrag,trenner)-1;pos2:=pos(kweintrag,trenner,pos1+2)-1;dateieintrag:=text +(kweintrag,pos1);dateieintrag:=text(dateieintrag,30);dateieintragCAT text( +subtext(kweintrag,pos1+2,pos2),15);dateieintragCAT subtext(kweintrag,pos2+2); +kweintrag:=wahldatenzumindex(i,kzkurse);pos1:=1;FOR jFROM 1UPTO length( +kweintrag)DIV kurslaengeREP kurseintrag:=subtext(kweintrag,pos1,pos1+ +kurslaenge-1);dateieintragCAT subtext(kurseintrag,4,5);dateieintragCAT +subtext(kurseintrag,2,3);dateieintragCAT (kurseintragSUB 1);dateieintragCAT +subtext(kurseintrag,6,7);pos1INCR kurslaenge;PER ;put(dswk,dateieintrag);line +(dswk);PER .erstelledateiohnekennung:FOR iFROM ersterschuelerUPTO +letzterschuelerREP kweintrag:=wahldatenzumindex(i,kzname);pos1:=pos(kweintrag +,trenner)-1;pos2:=pos(kweintrag,trenner,pos1+2)-1;dateieintrag:=text( +kweintrag,pos1);dateieintrag:=text(dateieintrag,30);dateieintragCAT text( +subtext(kweintrag,pos1+2,pos2),15);dateieintragCAT subtext(kweintrag,pos2+2); +kweintrag:=wahldatenzumindex(i,kzkurse);pos1:=1;FOR jFROM 1UPTO length( +kweintrag)DIV kurslaengeREP kurseintrag:=subtext(kweintrag,pos1,pos1+ +kurslaenge-1);dateieintragCAT subtext(kurseintrag,4,5);dateieintragCAT +subtext(kurseintrag,2,3);dateieintragCAT (kurseintragSUB 1);dateieintragCAT +leerekennung;pos1INCR kurslaenge;PER ;put(dswk,dateieintrag);line(dswk);PER . +bereitebrdateiauf:forget(aktdateiname+suffixbr,quiet);dsbr:=sequentialfile( +output,aktdateiname+suffixbr).bereitezidateiauf:forget(aktdateiname+suffixzi, +quiet);standardmeldung(meldungbearbwird,aktdateiname+suffixzi+"#");dszi:= +sequentialfile(output,aktdateiname+suffixzi);dateieintrag:=gewsj;dateieintrag +CAT gewjgst;dateieintragCAT gewhj;dateieintragCAT date;dateieintragCAT +"schulis ";dateieintragCAT suffixzieintrag;put(dszi,dateieintrag).END PROC +kursdatenschnittstelleexportaufbereiten;PROC faecherangebotindateischreiben( +BOOL VAR b):INT VAR wstd;IF wert(fnrfangsj)=fasjCAND wert(fnrfanghj)=fahj +CAND wert(fnrfangjgst)=gewjgstCAND dbstatus=okTHEN wstd:=intwert( +fnrfangwochenstd);IF wstd>9THEN wstd:=9FI ;put(dsfa,text(wert(fnrfangfach),2) ++text(wert(fnrfangart),2)+text(wert(fnrfanganzlv),2)+text(wstd));line(dsfa) +ELSE dbstatus(1);b:=FALSE FI .END PROC faecherangebotindateischreiben;PROC +kursdatenschnittstelleexportzeigen:aktdateiname:=standardmaskenfeld( +eingangdateiname);IF aktdateiname=""THEN fehlermeldungfeldfuellenELIF exists( +aktdateiname+suffixfa)THEN zeigdateiELSE fehlermeldungdateifehltFI .END PROC +kursdatenschnittstelleexportzeigen;PROC zeigdatei:zeigedatei(aktdateiname+ +aktsuffix,"vr").END PROC zeigdatei;PROC +kursdatenschnittstelleexportzeigenverlassen:IF aktsuffix=suffixziTHEN +aktsuffix:=suffixfa;enter(2)ELSE IF aktsuffix=suffixfaTHEN aktsuffix:= +suffixwkELIF aktsuffix=suffixwkTHEN aktsuffix:=suffixziFI ;enter(1)FI .END +PROC kursdatenschnittstelleexportzeigenverlassen;PROC +kursdatenschnittstelleexportloeschenabfrage:aktdateiname:=standardmaskenfeld( +eingangdateiname);IF aktdateiname=""THEN fehlermeldungfeldfuellenELIF exists( +aktdateiname+suffixfa)THEN beginlist;t1:=" ";REP getlistentry(t1,t2);IF t1= +aktdateiname+suffixfaTHEN standardmeldung(meldungnameloeschen,t1+ +" (-WK,-BR,-ZI)#"+text(t2,8)+"#");standardnproc;LEAVE +kursdatenschnittstelleexportloeschenabfrageFI ;UNTIL t1=""PER ELSE +fehlermeldungdateifehltFI .END PROC +kursdatenschnittstelleexportloeschenabfrage;PROC +kursdatenschnittstelleexportloeschen:forget(aktdateiname+suffixfa,quiet); +forget(aktdateiname+suffixwk,quiet);forget(aktdateiname+suffixbr,quiet); +forget(aktdateiname+suffixzi,quiet);standardmeldung(meldungdatengeloescht,"") +;return(2).END PROC kursdatenschnittstelleexportloeschen;PROC +kursdatenschnittstelleexportdrucken:aktdateiname:=standardmaskenfeld( +eingangdateiname);IF aktdateiname=""THEN fehlermeldungfeldfuellenELIF exists( +aktdateiname+suffixfa)THEN druckalledateienELSE fehlermeldungdateifehltFI . +druckalledateien:standardmeldung(meldungdrucken,"");print(aktdateiname+ +suffixfa);print(aktdateiname+suffixwk);print(aktdateiname+suffixzi);return(1) +.END PROC kursdatenschnittstelleexportdrucken;PROC +pruefeingabeundbelegvariablen:fstat:=0;eingangrow(einganggewjgst):= +standardmaskenfeld(einganggewjgst);eingangrow(einganggewhj):= +standardmaskenfeld(einganggewhj);eingangrow(eingangaktjgst):= +standardmaskenfeld(eingangaktjgst);eingangrow(eingangaktneue):= +standardmaskenfeld(eingangaktneue);eingangrow(eingangmitkursen):= +standardmaskenfeld(eingangmitkursen);IF aktsj="0000"THEN aktsj:= +schulkenndatum(schuljahr);akthj:=schulkenndatum(halbjahr)FI ;gewjgst:= +eingangrow(einganggewjgst);gewhj:=eingangrow(einganggewhj);aktjgst:= +eingangrow(eingangaktjgst);aktneue:=eingangrow(eingangaktneue);prueffeld2; +prueffeld3;prueffeld4und5;prueffeld4;prueffeld5;IF fstat=0THEN pruefdateiname +FI .prueffeld2:i:=int(gewjgst);IF gewjgst=""THEN meldungausgeben( +meldungfeldfuellen,einganggewjgst,1);LEAVE pruefeingabeundbelegvariablenELIF +i<11COR i>14THEN meldungausgeben(meldungfalschejgst,einganggewjgst,1);LEAVE +pruefeingabeundbelegvariablenFI .prueffeld3:i:=int(gewhj);IF gewhj=""THEN +meldungausgeben(meldungfeldfuellen,einganggewhj,1);LEAVE +pruefeingabeundbelegvariablenELIF i<1COR i>2THEN meldungausgeben( +meldungfalscheshj,einganggewhj,1);LEAVE pruefeingabeundbelegvariablenFI . +prueffeld4und5:IF aktjgst=""CAND aktneue=""THEN meldungausgeben( +meldungpraezisieren,eingangaktjgst,1);LEAVE pruefeingabeundbelegvariablen +ELIF aktjgst=""CAND aktneue<>""THEN schuelergruppe:=kznurneueELIF aktjgst<>"" +CAND aktneue=""THEN schuelergruppe:=kzohneneueELSE schuelergruppe:=kzalleFI . +prueffeld4:i:=int(aktjgst);IF i<10COR i>14THEN meldungausgeben( +meldungfalschejgst,einganggewjgst,1);LEAVE pruefeingabeundbelegvariablenELIF +i>int(gewjgst)THEN meldungausgeben(meldungandereauswahl,einganggewjgst,1); +LEAVE pruefeingabeundbelegvariablenELIF i=int(gewjgst)THEN IF gewhj="1"CAND +akthj="2"THEN meldungausgeben(meldungandereauswahl,einganggewhj,1);LEAVE +pruefeingabeundbelegvariablenFI FI .prueffeld5:i:=int(aktneue);IF aktneue<>"" +CAND aktjgst<>""THEN IF i-1<>int(aktjgst)THEN meldungausgeben( +meldungandereauswahl,eingangaktneue,1)FI ELIF aktneue<>""CAND aktjgst=""THEN +IF i<11COR i>14THEN meldungausgeben(meldungfalschejgst,eingangaktneue,1)ELIF +i+1>int(gewjgst)THEN meldungausgeben(meldungandereauswahl,eingangaktneue,1) +ELIF i-1=int(gewjgst)THEN IF gewhj="1"CAND akthj="2"THEN meldungausgeben( +meldungandereauswahl,einganggewhj,1)FI FI FI .pruefdateiname:aktdateiname:= +standardmaskenfeld(eingangdateiname);IF aktdateiname=""THEN +fehlermeldungfeldfuellenELIF falschercode(aktdateiname)THEN +fehlermeldungnamefalsch(TRUE )FI .END PROC pruefeingabeundbelegvariablen; +BOOL PROC falschercode(TEXT CONST t):INT VAR zeichencode;FOR iFROM 1UPTO +LENGTH t-3REP zeichencode:=code(tSUB i);IF NOT ((zeichencode>=48AND +zeichencode<=57)OR (zeichencode>=65AND zeichencode<=90)OR (zeichencode>=97 +AND zeichencode<=122))THEN LEAVE falschercodeWITH TRUE FI PER ;FALSE END +PROC falschercode;PROC meldungausgeben(INT CONST meldung,gewfeld, +gewruecksprung):fstat:=1;standardmeldung(meldung,"");infeld(gewfeld);return( +gewruecksprung)END PROC meldungausgeben;PROC archivanmelden:aktfeld:=infeld; +archivfehler:=FALSE ;commanddialogue(FALSE );aktdateiname:=standardmaskenfeld +(eingangdateiname);IF aktdateiname=""THEN fehlermeldungfeldfuellenELIF exists +(aktdateiname+suffixfa)THEN meldearchivanELSE fehlermeldungdateifehltFI . +meldearchivan:disablestop;reserve(filemodus,/dos);IF iserrorTHEN archivfehler +:=TRUE ;abbruchnachfehler(1);ELSE enablestopFI .END PROC archivanmelden;PROC +kursdatenschnittstelleexportarchiv(INT CONST wahl):aktfeld:=infeld;SELECT +wahlOF CASE 1:archivinitialisierenCASE 2:archivanmelden;IF archivfehlerTHEN +LEAVE kursdatenschnittstelleexportarchivFI ;archivlistenCASE 3: +archivbeschreibenCASE 4:archivueberschreibenEND SELECT ;infeld(aktfeld). +archivinitialisieren:standardmeldung(meldungwarten,"");disablestop;clear(/dos +);IF iserrorTHEN abbruchnachfehler(2);ELSE enablestop;loeschemeldung;release( +/dos);return(2)FI .archivlisten:standardmeldung(meldungwarten,"");disablestop +;g:=sequentialfile(output,listenname);thes:=ALL /dos;IF iserrorTHEN +abbruchnachfehler(1);ELSE thesaurusaufbereiten;enablestop;zeigedatei( +listenname,"vr");release(/dos)FI .thesaurusaufbereiten:t:=" ";i:=0;REP get( +thes,t,i);putline(g,t)UNTIL t=""PER .archivbeschreiben:standardmeldung( +meldungwarten,"");disablestop;IF exists(aktdateiname+suffixfa,/dos)THEN IF +iserrorTHEN abbruchnachfehler(2);LEAVE kursdatenschnittstelleexportarchiv +ELSE abfragedateiueberschreibenFI ELSE save(aktdateiname+suffixfa,/dos);IF +iserrorTHEN abbruchnachfehler(2);LEAVE kursdatenschnittstelleexportarchiv +ELSE save(aktdateiname+suffixwk,/dos);save(aktdateiname+suffixbr,/dos);save( +aktdateiname+suffixzi,/dos)FI ;enablestop;commanddialogue(TRUE ); +loeschemeldung;release(/dos);return(2)FI .abfragedateiueberschreiben: +standardmeldung(meldungaufdiskschr,aktdateiname+".FA (-WK,-BR,-ZI)#"); +standardnproc.archivueberschreiben:standardmeldung(meldungwarten,""); +disablestop;commanddialogue(FALSE );erase(aktdateiname+suffixfa,/dos);erase( +aktdateiname+suffixwk,/dos);erase(aktdateiname+suffixbr,/dos);erase( +aktdateiname+suffixzi,/dos);IF iserrorTHEN abbruchnachfehler(3);LEAVE +kursdatenschnittstelleexportarchivFI ;save(aktdateiname+suffixfa,/dos);IF +iserrorTHEN abbruchnachfehler(3);LEAVE kursdatenschnittstelleexportarchiv +ELSE save(aktdateiname+suffixwk,/dos);save(aktdateiname+suffixbr,/dos);save( +aktdateiname+suffixzi,/dos)FI ;enablestop;commanddialogue(TRUE ); +loeschemeldung;release(/dos);return(3).END PROC +kursdatenschnittstelleexportarchiv;PROC abbruchnachfehler(INT CONST schritte) +:standardmeldung(meldungrausreichen,"Fehler: "+errormessage+" !#");clearerror +;return(schritte);infeld(aktfeld);release(/dos);commanddialogue(TRUE ); +enablestopEND PROC abbruchnachfehler;PROC kursdatenschnittstelleexportabbruch +(INT CONST schritte):return(schritte);infeld(aktfeld);release(/dos); +commanddialogue(TRUE );enablestopEND PROC kursdatenschnittstelleexportabbruch +;PROC kursdatenschnittstelleexportabfrage(INT CONST wahl):SELECT wahlOF CASE +1:archivanmelden;IF archivfehlerTHEN LEAVE +kursdatenschnittstelleexportabfrageFI ;standardmeldung(meldungdisksichern, +aktdateiname+".FA (-WK,-BR,-ZI)#")CASE 2:archivanmelden;IF archivfehlerTHEN +LEAVE kursdatenschnittstelleexportabfrageFI ;standardmeldung(meldungdiskinit, +"")CASE 3:fragevorbereiten;standardmeldung(meldungnameloeschen,aktdateiname+ +".FA (-WK,-BR,-ZI)#"+text(t2,8)+"#")END SELECT ;standardnproc. +fragevorbereiten:aktdateiname:=standardmaskenfeld(eingangdateiname);IF +aktdateiname=""THEN fehlermeldungnamefalsch(FALSE )ELIF falschercode( +aktdateiname)THEN fehlermeldungnamefalsch(TRUE )FI ;IF exists(aktdateiname+ +suffixfa)THEN beginlist;REP getlistentry(t1,t2);UNTIL t1=aktdateiname+ +suffixfaCOR t1=""PER ;ELSE fehlermeldungdateifehlt;LEAVE +kursdatenschnittstelleexportabfrageFI .END PROC +kursdatenschnittstelleexportabfrage;PROC fehlermeldungdateifehlt:fstat:=1; +standardmeldung(meldungnameunbek,aktdateiname+".FA (-WK,-BR,-ZI)#");infeld( +eingangdateiname);return(1).END PROC fehlermeldungdateifehlt;PROC +fehlermeldungfeldfuellen:meldungausgeben(meldungpraezisieren,eingangdateiname +,1).END PROC fehlermeldungfeldfuellen;PROC fehlermeldungnamefalsch(BOOL +CONST mitfalschemzeichen):IF mitfalschemzeichenTHEN fstat:=1;standardmeldung( +meldungnamefalsch,subtext(aktdateiname,i,i)+"#"+aktdateiname+"#");infeld( +eingangdateiname);return(1)ELSE meldungausgeben(meldungnamefalsch, +eingangdateiname,1)FI END PROC fehlermeldungnamefalsch;PROC +kursdatenschnittstelleexportloescheundreturn(BOOL CONST b):IF bTHEN forget( +listenname,quiet);FI ;loeschemeldung;return(2)END PROC +kursdatenschnittstelleexportloescheundreturn;PROC loeschemeldung:aktfeld:= +infeld;infeld(1);standardfelderausgeben;infeld(aktfeld)END PROC +loeschemeldung;END PACKET kursdatenueberschnittstelleexportieren + diff --git a/app/schulis/2.2.1/src/2.kursdaten importieren b/app/schulis/2.2.1/src/2.kursdaten importieren new file mode 100644 index 0000000..20dd27e --- /dev/null +++ b/app/schulis/2.2.1/src/2.kursdaten importieren @@ -0,0 +1,199 @@ +PACKET kursdatenueberschnittstelleimportierenDEFINES +kursdatenschnittstelleimportanfang, +kursdatenschnittstelleimportaufbereitenfrage, +kursdatenschnittstelleimportaufbereiten, +kursdatenschnittstelleimportloescheundreturn, +kursdatenschnittstelleimportarchiv:LET eingangsmaske= +"ms kurswahldaten importieren",schuljahr="Schuljahr",halbjahr="Schulhalbjahr" +,kuwa2sperre="Kurswahl-2 ",filemodus="file ibm",listenname= +"Liste der Dateien auf der Diskette:",protname="Protokoll zur Übernahme", +schulname="Schulname",schulort="Schulort",leerzeile=" ",ueberschrift1= +"Protokoll zur Übernahme von Kurswahldaten aus Standardschnittstelle der", +ueberschrift2a="Jgst. ",ueberschrift2b=" für das Halbjahr ",ueberschrift2c= +" (Schuljahr ",unterschrift= +"-----------------------------------------------------------------------", +fehlerfall1="Fehler, Schüler nicht in akt. Jgst. : ",fehlerfall2= +"Warnung, neuer Kurs : ",fehlerfall3a= +"Fehler, Planblock nicht übernommen : ",fehlerfall3b= +" Nicht übernommene Daten : ",fehlerfall3c= +" ",fehlerfall4a= +"Fehler, unbekannter Kurs : ",fehlerfall4b= +" in Kurswahl von : ",trenner="�",dos="DOS", +eingangdateiname=2,kurslaengebr=6,kurslaengewk=7,kursendebr=5,kursendewk=6, +kzart="A",kzalle="A",kzplbl="P",kzstd="S",suffixfa=".FA",suffixwk=".WK", +suffixbr=".BR",suffixzi=".ZI",meldungkeineschueler=423,meldunggewhjunzul=405, +meldunggewsjunzul=127,meldunggewjgstunzul=404,meldungparallelanw=425, +meldungbearbwird=352,meldungwarten=69,meldungpraezisieren=129, +meldungserverfehler=416,meldungdatenuebernehmen=433,meldungdatenirrelevant= +432,meldungnamefalsch=323,meldungrausreichen=343,meldungnameunbek=351;INT +VAR i;TEXT VAR t;INT VAR fstat,aktfeld,ermwstd,kurspos,aktpos,aktzeile;TEXT +VAR aktdateiname:="schulis",gewjgst,gewhj,aktjgst,geplsj,geplhj,gewsj,aktsj:= +"0000",akthj,neuewahldaten,aktfake,dateieintrag,aktkurs,neuekurse:=trenner, +fach,kennung,behandeltekurse:=trenner,weitererblock;BOOL VAR archivfehler:= +FALSE ,sperreok:=TRUE ,aktodergeplhj:=FALSE ;THESAURUS VAR thes;FILE VAR dsfa +,dswk,dsbr,dszi,prot,g;PROC kursdatenschnittstelleimportanfang: +standardstartproc(eingangsmaske);infeld(2);standardmaskenfeld(aktdateiname, +eingangdateiname);standardfelderausgeben;standardnproc.END PROC +kursdatenschnittstelleimportanfang;PROC +kursdatenschnittstelleimportaufbereitenfrage:standardmeldung(meldungwarten,"" +);fstat:=0;pruefdateiname;holedateivomarchiv;holedatenfuerabfrage. +holedatenfuerabfrage:toline(dszi,1);readrecord(dszi,dateieintrag);gewsj:=text +(dateieintrag,4);i:=int(gewsj);IF NOT lastconversionokTHEN +fehlermeldungsjunzulaessigFI ;gewhj:=dateieintragSUB 7;IF gewhj<>"1"CAND +gewhj<>"2"THEN fehlermeldunggewhjunzulaessigFI ;gewjgst:=subtext(dateieintrag +,5,6);IF gewjgst<>"10"CAND gewjgst<>"11"CAND gewjgst<>"12"CAND gewjgst<>"13" +THEN fehlermeldunggewjgstunzulaessigFI ;IF aktsj="0000"THEN aktsj:= +schulkenndatum(schuljahr);akthj:=schulkenndatum(halbjahr);geplhj:=akthj; +geplsj:=aktsj;geplanteshjundsjberechnen(geplhj,geplsj)FI ;IF gewsj=aktsjCAND +gewhj=akthjTHEN aktodergeplhj:=TRUE ;aktjgst:=gewjgstELIF gewsj=aktsjCAND +gewhj<akthjTHEN fehlermeldungdatennichtrelevantELIF gewsj<aktsjTHEN +fehlermeldungdatennichtrelevantELSE IF gewsj=geplsjCAND gewhj=geplhjTHEN +aktodergeplhj:=TRUE ELSE aktodergeplhj:=FALSE FI ;aktjgst:=text(int(gewjgst)- +(int(text(gewsj,2))-int(text(aktsj,2))))FI ;standardmeldung( +meldungdatenuebernehmen,aktjgst+"#"+gewjgst+"."+gewhj+"#");standardnproc. +fehlermeldungdatennichtrelevant:meldungausgeben(meldungdatenirrelevant, +eingangdateiname,1);LEAVE kursdatenschnittstelleimportaufbereitenfrage. +fehlermeldungsjunzulaessig:meldungausgeben(meldunggewsjunzul,eingangdateiname +,1);LEAVE kursdatenschnittstelleimportaufbereitenfrage. +fehlermeldunggewhjunzulaessig:meldungausgeben(meldunggewhjunzul, +eingangdateiname,1);LEAVE kursdatenschnittstelleimportaufbereitenfrage. +fehlermeldunggewjgstunzulaessig:meldungausgeben(meldunggewjgstunzul, +eingangdateiname,1);LEAVE kursdatenschnittstelleimportaufbereitenfrage. +pruefdateiname:aktdateiname:=standardmaskenfeld(eingangdateiname);IF +aktdateiname=""THEN fehlermeldungfeldfuellenELIF falschercode(aktdateiname) +THEN fehlermeldungnamefalsch(TRUE )FI .holedateivomarchiv:archivanmelden;IF +archivfehlerTHEN LEAVE kursdatenschnittstelleimportaufbereitenfrageFI ; +disablestop;forget(aktdateiname+suffixfa,quiet);fetch(aktdateiname+suffixfa,/ +dos);IF iserrorTHEN abbruchnachfehler(1);LEAVE +kursdatenschnittstelleimportaufbereitenfrageFI ;dsfa:=sequentialfile(modify, +old(aktdateiname+suffixfa));forget(aktdateiname+suffixwk,quiet);fetch( +aktdateiname+suffixwk,/dos);IF iserrorTHEN abbruchnachfehler(1);LEAVE +kursdatenschnittstelleimportaufbereitenfrageFI ;dswk:=sequentialfile(modify, +old(aktdateiname+suffixwk));forget(aktdateiname+suffixbr,quiet);fetch( +aktdateiname+suffixbr,/dos);IF iserrorTHEN abbruchnachfehler(1);LEAVE +kursdatenschnittstelleimportaufbereitenfrageFI ;dsbr:=sequentialfile(modify, +old(aktdateiname+suffixbr));forget(aktdateiname+suffixzi,quiet);fetch( +aktdateiname+suffixzi,/dos);IF iserrorTHEN abbruchnachfehler(1);LEAVE +kursdatenschnittstelleimportaufbereitenfrageFI ;dszi:=sequentialfile(modify, +old(aktdateiname+suffixzi));enablestop.END PROC +kursdatenschnittstelleimportaufbereitenfrage;PROC +kursdatenschnittstelleimportaufbereiten:standardmeldung(meldungwarten,""); +kurswahlinitialisieren(aktjgst,gewjgst,gewhj,kzalle,gewsj);kurswahlbasisholen +(fstat);IF fstat<>0THEN meldungausgeben(meldungserverfehler,eingangdateiname, +1);LEAVE kursdatenschnittstelleimportaufbereitenELIF letzterschueler< +ersterschuelerTHEN meldungausgeben(meldungkeineschueler,eingangdateiname,1); +LEAVE kursdatenschnittstelleimportaufbereitenFI ;kurswahlsperresetzen( +kuwa2sperre,sperreok);IF NOT sperreokTHEN meldungausgeben(meldungparallelanw, +eingangdateiname,1);LEAVE kursdatenschnittstelleimportaufbereitenFI ; +neuekurse:=trenner;behandeltekurse:=trenner;bereiteprotokollvor; +uebernehmebrdatei;uebernehmewkdatei;loeschemeldung;kurswahlsperrebeenden( +kuwa2sperre);kurswahlbasissichern;zeigedatei(protname,"vr"). +kurswahlbasissichern:kurswahl0sichern(fstat);kurswahl1sichern(fstat); +kurswahl2sichern(fstat);IF fstat<>0THEN meldungausgeben(meldungserverfehler, +eingangdateiname,1);LEAVE kursdatenschnittstelleimportaufbereitenFI . +bereiteprotokollvor:forget(protname,quiet);prot:=sequentialfile(output, +protname);putline(prot,schulkenndatum(schulname));putline(prot,text( +schulkenndatum(schulort),65)+date);putline(prot,leerzeile);putline(prot, +ueberschrift1);putline(prot,ueberschrift2a+aktjgst+ueberschrift2b+gewjgst+"." ++gewhj+ueberschrift2c+text(gewsj,2)+"/"+subtext(gewsj,3)+"):");putline(prot, +unterschrift);putline(prot,leerzeile).uebernehmebrdatei:bereitek1dateivor; +toline(dsbr,1);col(dsbr,1);WHILE NOT eof(dsbr)REP readrecord(dsbr, +dateieintrag);IF compress(dateieintrag)<>""THEN pruefplanblockundkurse(text( +dateieintrag,3),subtext(dateieintrag,4))FI ;down(dsbr);col(dsbr,1)PER . +bereitek1dateivor:planbloeckeinitialisieren;FOR iFROM 1UPTO 22REP +planblockloeschen(text(i))PER .uebernehmewkdatei:toline(dswk,1);col(dswk,1); +WHILE NOT eof(dswk)REP readrecord(dswk,dateieintrag);pruefschueler(compress( +text(dateieintrag,30)),compress(subtext(dateieintrag,31,45)),subtext( +dateieintrag,46,53),subtext(dateieintrag,54));down(dswk);col(dswk,1)PER .END +PROC kursdatenschnittstelleimportaufbereiten;PROC pruefplanblockundkurse( +TEXT CONST block,kurse):INT VAR blockbez:=int(text(block,2)),laengekurse:= +length(kurse);standardmeldung(meldungbearbwird,"Planblock "+text(block,2)+"#" +);IF blockbez>0CAND blockbez<23THEN tragblockein;tragkurseeinELSE +fehlermeldungblockfalschFI .fehlermeldungblockfalsch:putline(prot, +fehlerfall3a+text(block,2));putline(prot,fehlerfall3b+text(kurse,42));IF +laengekurse>42THEN putline(prot,fehlerfall3c+subtext(kurse,43))FI . +tragblockein:planblockeintragen(text(block,2),text(int(blockSUB 3))). +tragkurseein:kurspos:=1;WHILE kurspos<laengekurseREP aktkurs:=subtext(kurse, +kurspos,kurspos+kursendebr);aktfake:=text(aktkurs,2)+text(subtext(aktkurs,5), +4);weitererblock:="";t:=kursdaten(aktfake,kzart);IF dbstatus=1CAND compress( +aktfake)<>""THEN ermittlewstd;tragkursein; +planbloeckezumkurseintragenmitevtlblockeintrag(aktfake,text(block,2), +weitererblock);behandeltekurseCAT aktfake+trennerELSE +evtlplanbloeckeaktualisierenFI ;kursposINCR kurslaengebrPER .ermittlewstd:IF +pos(neuekurse,trenner+aktfake+trenner)=0THEN aktzeile:=lineno(dsbr);ermwstd:= +int(blockSUB 3);toline(dsbr,aktzeile+1);col(dsbr,1);WHILE NOT eof(dsbr)REP +downety(dsbr,aktkurs);aktpos:=col(dsbr);IF NOT eof(dsbr)CAND ((aktpos-3)MOD 6 +)=1THEN readrecord(dsbr,t);ermwstdINCR int(tSUB 3);weitererblock:=text(t,2); +down(dsbr);col(dsbr,1);neuekurseCAT aktfake+trenner;toline(dsbr,aktzeile); +LEAVE ermittlewstdELSE col(dsbr,aktpos+1)FI ;PER ;neuekurseCAT aktfake+ +trenner;toline(dsbr,aktzeile)FI .evtlplanbloeckeaktualisieren:IF pos( +behandeltekurse,trenner+aktfake+trenner)=0CAND compress(aktfake)<>""THEN +aktzeile:=lineno(dsbr);toline(dsbr,aktzeile+1);col(dsbr,1);WHILE NOT eof(dsbr +)REP downety(dsbr,aktkurs);aktpos:=col(dsbr);IF NOT eof(dsbr)CAND ((aktpos-3) +MOD 6)=1THEN readrecord(dsbr,t);weitererblock:=text(t,2);behandeltekurseCAT +aktfake+trenner;toline(dsbr,aktzeile); +planbloeckezumkurseintragenmitevtlblockeintrag(aktfake,text(block,2), +weitererblock);LEAVE evtlplanbloeckeaktualisierenELSE col(dsbr,aktpos+1)FI ; +PER ;weitererblock:="";planbloeckezumkurseintragenmitevtlblockeintrag(aktfake +,text(block,2),weitererblock);behandeltekurseCAT aktfake+trenner;toline(dsbr, +aktzeile)FI .tragkursein:IF aktodergeplhjTHEN putline(prot,fehlerfall2+text( +aktkurs,2)+" "+text(subtext(aktkurs,5),4)+", Art "+subtext(aktkurs,3,4))FI ; +kurseintragen(text(aktkurs,2),text(subtext(aktkurs,5),4),text(ermwstd), +subtext(aktkurs,3,4)).END PROC pruefplanblockundkurse;PROC +planbloeckezumkurseintragenmitevtlblockeintrag(TEXT CONST kurs,block1,block2) +:TEXT VAR t:=planblockdaten(block1,kzstd);IF dbstatus=1THEN +planblockeintragen(block1,"0")FI ;t:=planblockdaten(block2,kzstd);IF dbstatus +=1THEN planblockeintragen(block2,"0")FI ;planbloeckezumkurseintragen(kurs, +block1,block2)END PROC planbloeckezumkurseintragenmitevtlblockeintrag;PROC +pruefschueler(TEXT CONST famname,rufname,gebdatum,wahldaten):standardmeldung( +meldungbearbwird,famname+", "+rufname+"#");t:=wahldatenzumschueler(famname, +rufname,gebdatum,kzart);IF dbstatus=1THEN fehlermeldungunbekschuelerELSE +tragwahldateneinFI .fehlermeldungunbekschueler:putline(prot,fehlerfall1+text( +famname+", "+rufname+", "+gebdatum,40)).tragwahldatenein: +schuelerwahleintragen(famname,rufname,gebdatum,aufbereitetewahldaten(famname, +rufname,gebdatum,wahldaten)).END PROC pruefschueler;TEXT PROC +aufbereitetewahldaten(TEXT CONST famname,rufname,gebdatum,altewahldaten):INT +VAR wahllaenge:=length(altewahldaten);TEXT VAR planbloecke;kurspos:=1; +neuewahldaten:="";WHILE kurspos<wahllaengeREP aktkurs:=subtext(altewahldaten, +kurspos,kurspos+kursendewk);fach:=text(aktkurs,2);kennung:=subtext(aktkurs,6) ++" ";planbloecke:=kursdaten(fach+kennung,kzplbl);IF compress(planbloecke)="" +THEN putline(prot,fehlerfall4a+fach+" "+kennung+", Art "+subtext(aktkurs,3,4) +);putline(prot,fehlerfall4b+text(famname+", "+rufname+", "+gebdatum,40))ELSE +ergaenzewahldatenFI ;kursposINCR kurslaengewkPER ;neuewahldaten. +ergaenzewahldaten:neuewahldatenCAT (aktkursSUB 5);neuewahldatenCAT subtext( +aktkurs,3,4);neuewahldatenCAT fach;neuewahldatenCAT kennung;neuewahldatenCAT +planbloecke.END PROC aufbereitetewahldaten;BOOL PROC falschercode(TEXT CONST +t):INT VAR zeichencode;FOR iFROM 1UPTO LENGTH t-3REP zeichencode:=code(tSUB i +);IF NOT ((zeichencode>=48AND zeichencode<=57)OR (zeichencode>=65AND +zeichencode<=90)OR (zeichencode>=97AND zeichencode<=122))THEN LEAVE +falschercodeWITH TRUE FI PER ;FALSE END PROC falschercode;PROC +meldungausgeben(INT CONST meldung,gewfeld,gewruecksprung):fstat:=1; +standardmeldung(meldung,"");infeld(gewfeld);return(gewruecksprung)END PROC +meldungausgeben;PROC archivanmelden:aktfeld:=infeld;archivfehler:=FALSE ; +commanddialogue(FALSE );disablestop;reserve(filemodus,/dos);IF iserrorTHEN +archivfehler:=TRUE ;abbruchnachfehler(1);ELSE enablestopFI .END PROC +archivanmelden;PROC kursdatenschnittstelleimportarchiv:aktfeld:=infeld; +archivanmelden;IF archivfehlerTHEN LEAVE kursdatenschnittstelleimportarchiv +FI ;archivlisten;infeld(aktfeld).archivlisten:standardmeldung(meldungwarten, +"");disablestop;g:=sequentialfile(output,listenname);thes:=ALL /dos;IF +iserrorTHEN abbruchnachfehler(1);ELSE thesaurusaufbereiten;enablestop; +zeigedatei(listenname,"vr");release(/dos)FI .thesaurusaufbereiten:t:=" ";i:=0 +;REP get(thes,t,i);putline(g,t)UNTIL t=""PER .END PROC +kursdatenschnittstelleimportarchiv;PROC abbruchnachfehler(INT CONST schritte) +:standardmeldung(meldungrausreichen,"Fehler: "+errormessage+" !#");clearerror +;return(schritte);infeld(aktfeld);release(/dos);commanddialogue(TRUE ); +enablestopEND PROC abbruchnachfehler;PROC fehlermeldungdateifehlt:fstat:=1; +standardmeldung(meldungnameunbek,aktdateiname+".FA (-WK,-BR,-ZI)#");infeld( +eingangdateiname);return(1).END PROC fehlermeldungdateifehlt;PROC +fehlermeldungfeldfuellen:meldungausgeben(meldungpraezisieren,eingangdateiname +,1).END PROC fehlermeldungfeldfuellen;PROC fehlermeldungnamefalsch(BOOL +CONST mitfalschemzeichen):IF mitfalschemzeichenTHEN fstat:=1;standardmeldung( +meldungnamefalsch,subtext(aktdateiname,i,i)+"#"+aktdateiname+"#");infeld( +eingangdateiname);return(1)ELSE meldungausgeben(meldungnamefalsch, +eingangdateiname,1)FI END PROC fehlermeldungnamefalsch;PROC +kursdatenschnittstelleimportloescheundreturn:forget(listenname,quiet);forget( +protname,quiet);loeschemeldung;return(3)END PROC +kursdatenschnittstelleimportloescheundreturn;PROC loeschemeldung:aktfeld:= +infeld;infeld(1);standardfelderausgeben;infeld(aktfeld)END PROC +loeschemeldung;END PACKET kursdatenueberschnittstelleimportieren + 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 + diff --git a/app/schulis/2.2.1/src/2.kurswahl schnittstelle b/app/schulis/2.2.1/src/2.kurswahl schnittstelle new file mode 100644 index 0000000..2b29d36 --- /dev/null +++ b/app/schulis/2.2.1/src/2.kurswahl schnittstelle @@ -0,0 +1,664 @@ +PACKET kurswahlschnittstelle240791DEFINES kurswahlinitialisieren, +kurswahlbasisholen,erweitertekurswahlbasisholen,istkurswahlbasisvorhanden, +kurswahldatenvorhanden,kurswahl0holen,kurswahl1holen,kurswahl2holen, +kurswahl0sichern,kurswahl1sichern,kurswahl2sichern,kurswahlsperresetzen, +kurswahlsperrebeenden,kurseintragen,kursloeschen,planblockeintragen, +planblockteilen,planblockloeschen,planbloeckezumkurseintragen, +planbloeckeinitialisieren,kurszumplanblockeintragen,schuelerwahleintragen, +schuelerwahlaendern,ersterschueler,letzterschueler,wahldatenzumindex, +wahldatenzumschueler,weiterewahldatenzumschueler,kursdaten,allekurse, +alleplanblockbezeichner,planblockdaten,anzahlschuelermitwahl,schuelermitwahl, +anzahlfreierschuelerimplanblock,schuelerinplanblock,schuelerundklausur:LET +namezwischendatei="Hj-Daten",meldungneuebasis=377;LET maxkuwa1zeilen=66, +laengekurseintrag=15,laengeblockwstd=4,laengeblock=3,laengekurs=6,laengefach= +2,laengekennung=4,laengeart=2,laengewstd=2,laengeklausur=1,server= +"kurswahl server",kennungtplbl1="a",kennungtplbl2="b",leereplanbloecke= +" ",leererblock=" ",leerekennung=" ",leereart=" ",stat1="ls",stat2 +="n11",stat3="nso",kzschueler="�S�",kzneue="�N�",kzohneneue="O",kznurneue="N" +,kzname="N",kzkurse="K",kzart="A",kzstd="S",kzplanbl="P",kzfake="FK",dbsj= +"Schuljahr",dbhj="Schulhalbjahr",trenner="�",trenner2="$",kurswahl0= +"Kurswahl-0 ",kurswahl1="Kurswahl-1 ",kurswahl2="Kurswahl-2 ",praefixsperre= +"Sperre ";FILE VAR kuwa0,kuwa1,kuwa2,kuwa3,kuwahilf;TEXT VAR schuljahr:= +"0000",halbjahr:="0",aktschuljahr:="0000",akthalbjahr:="0",jgst:="",hjdtid, +fa1,ke1,fa2,ke2,ws,kl,ar,eintrag,status,datei,sj,hj;INT VAR bearbschueler, +erster:=1,letzter:=0,namenpos,aktjg;BOOL VAR hjzukuenftig,hjaktgepl, +kuwa2eintrag:=TRUE ,plblvorhanden:=FALSE ,faartschoneingetragen:=FALSE , +fakeschoneingetragen:=FALSE ,eintragloeschen:=FALSE ;TEXT VAR hjd1,hjd2,hjd3, +hjd4,hjd5,hjd6,hjd7;TASK VAR takuser;PROC kurswahlinitialisieren(TEXT CONST +aktjgst,gewjgst,gewhj,schueler,TEXT VAR bersj):INT VAR j;aktjg:=int(aktjgst); +IF schueler=kzohneneueTHEN bearbschueler:=1ELIF schueler=kznurneueTHEN +bearbschueler:=2ELSE bearbschueler:=3FI ;sj:=schulkenndatum(dbsj);hj:= +schulkenndatum(dbhj);IF gewjgst=aktjgstTHEN schuljahr:=sjELSE j:=int(gewjgst) +-int(aktjgst);schuljahr:=konvsjteil(text(sj,2),j)+konvsjteil(subtext(sj,3),j) +FI ;bersj:=schuljahr;halbjahr:=gewhj;jgst:=gewjgst;IF hj="1"CAND int(gewjgst) +>int(aktjgst)THEN hjzukuenftig:=TRUE ELIF hj="2"CAND int(gewjgst+gewhj)>(int( +aktjgst)+1)*10+1THEN hjzukuenftig:=TRUE ELSE hjzukuenftig:=FALSE FI ; +hjaktgepl:=NOT hjzukuenftigEND PROC kurswahlinitialisieren;BOOL PROC +istkurswahlbasisvorhanden:dbstatus(1);IF halbjahrnichtgesetztTHEN FALSE ELIF +NOT existstask(server)THEN FALSE ELSE takuser:=task(server);datei:= +datenraumname(kurswahl1);dbstatus(0);exists(datei,takuser)FI END PROC +istkurswahlbasisvorhanden;PROC kurswahlbasisholen(INT VAR fehlerstatus):INT +VAR j;IF halbjahrnichtgesetztTHEN fehlerstatus:=1ELIF NOT existstask(server) +THEN fehlerstatus:=2ELSE takuser:=task(server);commanddialogue(FALSE ); +fehlerstatus:=0;datei:=datenraumname(kurswahl0);IF exists(datei,takuser)THEN +holkuwa0dateiundkoppleanELSE erstellekuwa0dateiFI ;datei:=datenraumname( +kurswahl1);IF exists(datei,takuser)THEN plblvorhanden:=TRUE ; +holkuwa1dateiundkoppleanELSE plblvorhanden:=FALSE ;erstellekuwa1dateiFI ; +datei:=datenraumname(kurswahl2);IF exists(datei,takuser)THEN +holkuwa2dateiundkoppleanELSE erstellekuwa2dateiFI ;commanddialogue(TRUE )FI . +holkuwa0dateiundkopplean:fetch(datei,takuser);kuwa0:=sequentialfile(modify, +old(datei)).erstellekuwa0datei:IF hjzukuenftigTHEN kuwa0:=sequentialfile( +modify,datei);insertrecord(kuwa0)ELSE datei:=datenraumname(kurswahl0);forget( +datei,quiet);kursdatenholen;IF lines(kuwa0)=0THEN insertrecord(kuwa0)FI FI ; +save(datei,takuser).holkuwa1dateiundkopplean:fetch(datei,takuser);kuwa1:= +sequentialfile(modify,old(datei)).erstellekuwa1datei:kuwa1:=sequentialfile( +modify,datei);FOR jFROM 1UPTO maxkuwa1zeilenREP insertrecord(kuwa1)PER ;save( +datei,takuser).holkuwa2dateiundkopplean:fetch(datei,takuser);kuwa2:= +sequentialfile(modify,old(datei));ermittleersterletzter.erstellekuwa2datei: +kuwa2eintrag:=TRUE ;kurswahleinerjgstaufbereiten(jgst,halbjahr,schuljahr, +kuwa2);save(datei,takuser).END PROC kurswahlbasisholen;PROC +ermittleersterletzter:IF bearbschueler<>2THEN erster:=1ELSE erster:= +zeilennrzumschuelerbestand(FALSE )FI ;IF bearbschueler<>1THEN letzter:=lines( +kuwa2)ELSE letzter:=zeilennrzumschuelerbestand(TRUE )FI END PROC +ermittleersterletzter;PROC erweitertekurswahlbasisholen(TEXT CONST gewjgst, +gewhj,INT VAR fehlerstatus):TEXT VAR erwschuljahr;INT VAR j;IF +halbjahrnichtgesetztTHEN fehlerstatus:=1ELIF NOT existstask(server)THEN +fehlerstatus:=2ELSE takuser:=task(server);commanddialogue(FALSE );IF int( +gewjgst)=aktjgTHEN erwschuljahr:=sjELSE j:=int(gewjgst)-aktjg;erwschuljahr:= +konvsjteil(text(sj,2),j)+konvsjteil(subtext(sj,3),j);FI ;fehlerstatus:=0; +datei:=kurswahl2+gewjgst+" "+gewhj+"."+erwschuljahr;IF exists(datei,takuser) +THEN holkuwa3dateiundkoppleanELSE erstellekuwa3dateiFI ;commanddialogue(TRUE +)FI .holkuwa3dateiundkopplean:fetch(datei,takuser);kuwa3:=sequentialfile( +modify,old(datei)).erstellekuwa3datei:plblvorhanden:=FALSE ;kuwa2eintrag:= +FALSE ;kurswahleinerjgstaufbereiten(gewjgst,gewhj,erwschuljahr,kuwa3).END +PROC erweitertekurswahlbasisholen;PROC kurswahl0holen(INT VAR fehlerstatus): +IF halbjahrnichtgesetztTHEN fehlerstatus:=1ELIF NOT existstask(server)THEN +fehlerstatus:=2ELSE takuser:=task(server);datei:=datenraumname(kurswahl0);IF +exists(datei,takuser)THEN commanddialogue(FALSE );fetch(datei,takuser); +commanddialogue(TRUE );kuwa0:=sequentialfile(modify,old(datei));fehlerstatus +:=0ELSE fehlerstatus:=3FI ;FI .END PROC kurswahl0holen;PROC kurswahl1holen( +INT VAR fehlerstatus):IF halbjahrnichtgesetztTHEN fehlerstatus:=1ELIF NOT +existstask(server)THEN fehlerstatus:=2ELSE takuser:=task(server);datei:= +datenraumname(kurswahl1);IF exists(datei,takuser)THEN commanddialogue(FALSE ) +;fetch(datei,takuser);commanddialogue(TRUE );kuwa1:=sequentialfile(modify,old +(datei));fehlerstatus:=0ELSE fehlerstatus:=3FI ;FI .END PROC kurswahl1holen; +PROC kurswahl2holen(INT VAR fehlerstatus):IF halbjahrnichtgesetztTHEN +fehlerstatus:=1ELIF NOT existstask(server)THEN fehlerstatus:=2ELSE takuser:= +task(server);datei:=datenraumname(kurswahl2);IF exists(datei,takuser)THEN +commanddialogue(FALSE );fetch(datei,takuser);commanddialogue(TRUE );kuwa2:= +sequentialfile(modify,old(datei));ermittleersterletzter;fehlerstatus:=0ELSE +fehlerstatus:=3FI ;FI END PROC kurswahl2holen;PROC kurswahl0sichern(INT VAR +fehlerstatus):kurswahl02sichern(kurswahl0,fehlerstatus)END PROC +kurswahl0sichern;PROC kurswahl1sichern(INT VAR fehlerstatus): +kurswahldatenraumsichern(kurswahl1,fehlerstatus)END PROC kurswahl1sichern; +PROC kurswahl2sichern(INT VAR fehlerstatus):kurswahl02sichern(kurswahl2, +fehlerstatus)END PROC kurswahl2sichern;PROC kurswahl02sichern(TEXT CONST +welchen,INT VAR fehlerstatus):INT VAR aktfeld:=infeld;datei:=datenraumname( +welchen);IF halbjahrnichtgesetztTHEN fehlerstatus:=1ELIF NOT existstask( +server)THEN fehlerstatus:=2ELIF NOT exists(datei)THEN fehlerstatus:=4ELSE +takuser:=task(server);IF exists(datei,takuser)THEN commanddialogue(FALSE ); +save(datei,takuser);commanddialogue(TRUE );fehlerstatus:=0ELSE +standardmeldung(meldungneuebasis,"");forget(datei,quiet);IF welchen=kurswahl2 +THEN bereitek2datenraumaufELSE bereitek0datenraumaufFI ;commanddialogue( +FALSE );save(datei,takuser);commanddialogue(TRUE );fehlerstatus:=0;infeld(1); +standardfelderausgeben;infeld(aktfeld)FI FI .bereitek0datenraumauf:IF +hjzukuenftigTHEN kuwa0:=sequentialfile(modify,datei);insertrecord(kuwa0)ELSE +kursdatenholen;IF lines(kuwa0)=0THEN insertrecord(kuwa0)FI FI . +bereitek2datenraumauf:kuwa2eintrag:=TRUE ;kurswahleinerjgstaufbereiten(jgst, +halbjahr,schuljahr,kuwa2).END PROC kurswahl02sichern;PROC +kurswahldatenraumsichern(TEXT CONST welchen,INT VAR fehlerstatus):datei:= +datenraumname(welchen);IF halbjahrnichtgesetztTHEN fehlerstatus:=1ELIF NOT +existstask(server)THEN fehlerstatus:=2ELIF NOT exists(datei)THEN fehlerstatus +:=4ELSE takuser:=task(server);commanddialogue(FALSE );save(datei,takuser); +commanddialogue(TRUE );fehlerstatus:=0FI END PROC kurswahldatenraumsichern; +BOOL PROC kurswahldatenvorhanden:INT VAR i;dbstatus(1);IF +halbjahrnichtgesetztTHEN FALSE ELSE datei:=datenraumname(kurswahl2);IF exists +(datei)THEN ueberpruefwahldatenvorhandenELSE FALSE FI FI . +ueberpruefwahldatenvorhanden:dbstatus(0);toline(kuwa2,erster);col(kuwa2,1); +FOR iFROM ersterUPTO letzterREP readrecord(kuwa2,eintrag);IF (eintragSUB 1)<> +trennerTHEN LEAVE ueberpruefwahldatenvorhandenWITH TRUE FI ;down(kuwa2);PER ; +FALSE .END PROC kurswahldatenvorhanden;PROC kurswahlsperresetzen(TEXT CONST +was,BOOL VAR ok):IF halbjahrnichtgesetztTHEN ok:=FALSE ELIF NOT existstask( +server)THEN ok:=FALSE ELSE takuser:=task(server);datei:= +gesperrterdatenraumname(was);IF exists(datei,takuser)THEN ok:=FALSE ELSE +commanddialogue(FALSE );forget(datei,quiet);copy(datenraumname(was),datei); +save(datei,takuser);forget(datei,quiet);commanddialogue(TRUE );ok:=TRUE FI ; +FI END PROC kurswahlsperresetzen;PROC kurswahlsperrebeenden(TEXT CONST was): +IF NOT halbjahrnichtgesetztAND existstask(server)THEN takuser:=task(server); +datei:=gesperrterdatenraumname(was);commanddialogue(FALSE );erase(datei, +takuser);commanddialogue(TRUE );FI END PROC kurswahlsperrebeenden;PROC +kurseintragen(TEXT CONST fach,kennung,wstd,art):dbstatus(1);IF +halbjahrnichtgesetztTHEN LEAVE kurseintragenELIF fach=""COR kennung=""COR +wstd=""COR art=""THEN LEAVE kurseintragenFI ;fa1:=text(fach,laengefach);ke1:= +text(kennung,laengekennung);ws:=text(wstd,laengewstd);ar:=text(art,laengeart) +;IF kurseingetragen(fa1+ke1)THEN LEAVE kurseintragenFI ;toline(kuwa0,lines( +kuwa0));insertrecord(kuwa0);writerecord(kuwa0,fa1+ke1+ws+ar);IF hjaktgepl +THEN tragindbeinELSE dbstatus(0)FI .tragindbein:inittupel( +dnrlehrveranstaltungen);putwert(fnrlvsj,schuljahr);putwert(fnrlvhj,halbjahr); +putwert(fnrlvjgst,jgst);putwert(fnrlvfachkennung,fa1+compress(ke1)); +putintwert(fnrlvwochenstd,int(wstd));putwert(fnrlvart,compress(art));insert( +dnrlehrveranstaltungen).END PROC kurseintragen;PROC kursloeschen(TEXT CONST +fach,kennung):IF halbjahrnichtgesetztTHEN dbstatus(1);LEAVE kursloeschenFI ; +fa1:=text(fach,laengefach);ke1:=text(kennung,laengekennung);IF +kurseingetragen(fa1+ke1)THEN IF hjaktgeplTHEN aenderindbFI ;deleterecord( +kuwa0);aenderkursinkuwa1(fa1+ke1,"")ELSE dbstatus(1)FI .aenderindb:inittupel( +dnrlehrveranstaltungen);putwert(fnrlvsj,schuljahr);putwert(fnrlvhj,halbjahr); +putwert(fnrlvjgst,jgst);putwert(fnrlvfachkennung,fa1+compress(ke1));search( +dnrlehrveranstaltungen,TRUE );IF dbstatus=0THEN delete(dnrlehrveranstaltungen +)ELSE dbstatus(1);LEAVE kursloeschenFI .END PROC kursloeschen;PROC +planblockeintragen(TEXT CONST anwblockbez,stunden):TEXT VAR blockbez:= +formbezeichner(anwblockbez),blocknr:=text(blockbez,2),teilkennung:=blockbez +SUB 3;INT VAR j:=int(blocknr)*3-2;dbstatus(1);IF halbjahrnichtgesetztTHEN +LEAVE planblockeintragenELIF j>0CAND j<=maxkuwa1zeilenTHEN IF teilkennung= +kennungtplbl1THEN jINCR 1ELIF teilkennung=kennungtplbl2THEN jINCR 2ELIF +teilkennung<>""CAND teilkennung<>" "THEN LEAVE planblockeintragenFI ;toline( +kuwa1,j);readrecord(kuwa1,eintrag);IF eintrag=""THEN writerecord(kuwa1,text( +blockbez,3)+text(stunden,1))ELSE writerecord(kuwa1,text(eintrag,3)+text( +stunden,1)+subtext(eintrag,5))FI ;dbstatus(0)FI END PROC planblockeintragen; +PROC planblockteilen(TEXT CONST blocknr,wstd1,wstd2):INT VAR j:=int(blocknr)* +3-2;dbstatus(1);IF halbjahrnichtgesetztCOR (compress(blocknrSUB 3))<>""THEN +LEAVE planblockteilenFI ;IF j>0CAND j<=maxkuwa1zeilenTHEN toline(kuwa1,j+1); +readrecord(kuwa1,eintrag);IF eintrag=""THEN up(kuwa1);readrecord(kuwa1, +eintrag);IF eintrag<>""THEN teileplanblockFI FI ;FI .teileplanblock:dbstatus( +0);writerecord(kuwa1,text(eintrag,4));down(kuwa1);writerecord(kuwa1,text( +eintrag,2)+kennungtplbl1+wstd1+subtext(eintrag,5));down(kuwa1);writerecord( +kuwa1,text(eintrag,2)+kennungtplbl2+wstd2+subtext(eintrag,5)).END PROC +planblockteilen;PROC planblockloeschen(TEXT CONST anwblockbez):TEXT VAR +blockbez:=formbezeichner(anwblockbez),blocknr:=text(blockbez,2),teilkennung:= +blockbezSUB 3;INT VAR j:=int(blocknr)*3-2;BOOL VAR pruefteilbloecke:=FALSE ; +dbstatus(1);IF halbjahrnichtgesetztTHEN LEAVE planblockloeschenFI ;IF +teilkennung=kennungtplbl1THEN jINCR 1ELIF teilkennung=kennungtplbl2THEN j +INCR 2ELSE pruefteilbloecke:=TRUE FI ;IF j>0CAND j<=maxkuwa1zeilenTHEN toline +(kuwa1,j);IF pruefteilbloeckeTHEN down(kuwa1,2);readrecord(kuwa1,eintrag);IF +eintrag<>""THEN LEAVE planblockloeschenELSE up(kuwa1);readrecord(kuwa1, +eintrag);IF eintrag<>""THEN LEAVE planblockloeschenELSE up(kuwa1)FI ;FI ;FI ; +writerecord(kuwa1,"");dbstatus(0)FI .END PROC planblockloeschen;PROC +planbloeckeinitialisieren:TEXT VAR datei:=datenraumname(kurswahl1);INT VAR j; +IF halbjahrnichtgesetztCOR NOT existstask(server)THEN dbstatus(1)ELSE takuser +:=task(server);erstellekuwa1dateiFI .erstellekuwa1datei:forget(datei,quiet); +kuwa1:=sequentialfile(modify,datei);FOR jFROM 1UPTO maxkuwa1zeilenREP +insertrecord(kuwa1)PER ;dbstatus(0);commanddialogue(FALSE );save(datei, +takuser);commanddialogue(TRUE ).END PROC planbloeckeinitialisieren;PROC +planbloeckezumkurseintragen(TEXT CONST anwkurs,anwblockbez1,anwblockbez2): +TEXT VAR kurs:=text(anwkurs,laengekurs),blockbez1:=formbezeichner( +anwblockbez1),blockbez2:=formbezeichner(anwblockbez2);dbstatus(1);IF +halbjahrnichtgesetztTHEN LEAVE planbloeckezumkurseintragenFI ;IF blockbez1<> +""COR blockbez2<>""THEN IF NOT kurseingetragen(kurs)THEN LEAVE +planbloeckezumkurseintragenFI FI ;IF compress(blockbez1)<>""THEN IF NOT +blockeingetragen(blockbez1)THEN LEAVE planbloeckezumkurseintragenFI ;FI ;IF +compress(blockbez2)<>""THEN IF NOT blockeingetragen(blockbez2)THEN LEAVE +planbloeckezumkurseintragenFI ;FI ;loescheplanbloeckezukurs(kurs);IF +blockeingetragen(blockbez1)THEN tragkurseinFI ;IF blockeingetragen(blockbez2) +THEN tragkurseinFI ;dbstatus(0).tragkursein:readrecord(kuwa1,eintrag);eintrag +CAT kurs;writerecord(kuwa1,eintrag).END PROC planbloeckezumkurseintragen; +PROC loescheplanbloeckezukurs(TEXT CONST kurs):TEXT VAR bloecke:=planbloecke( +kurs);IF bloecke<>leereplanbloeckeTHEN aenderkursinkuwa1(kurs,"")FI .END +PROC loescheplanbloeckezukurs;INT PROC planblockzeilennr(TEXT CONST +anwblockbez):TEXT VAR blockbez:=formbezeichner(anwblockbez);IF +blockeingetragen(blockbez)THEN lineno(kuwa1)ELSE 0FI END PROC +planblockzeilennr;PROC schuelerwahleintragen(TEXT CONST famname,rufname, +gebdatum,wahl):TEXT VAR schueler:=trenner+famname+trenner+rufname+trenner+ +gebdatum,wahldaten:=wahl;dbstatus(1);IF halbjahrnichtgesetztCOR length( +wahldaten)MOD laengekurseintrag<>0THEN LEAVE schuelerwahleintragenFI ;IF +schuelereingetragen(schueler,kuwa2)THEN readrecord(kuwa2,eintrag);hjd1:= +wahldaten;hjdateneintragen(famname,rufname,gebdatum,1);IF dbstatus=0THEN +schreibeintragFI ;FI .schreibeintrag:writerecord(kuwa2,wahldaten+subtext( +eintrag,pos(eintrag,trenner))).END PROC schuelerwahleintragen;PROC +schuelerwahleintragen(TEXT CONST famname,rufname,gebdatum,fach,kennung,art, +klausur):TEXT VAR schueler:=trenner+famname+trenner+rufname+trenner+gebdatum, +kurse;INT VAR aktpos;dbstatus(1);IF halbjahrnichtgesetztTHEN LEAVE +schuelerwahleintragenFI ;fa1:=text(fach,laengefach);ke1:=text(kennung, +laengekennung);ar:=text(art,laengeart);kl:=text(klausur,laengeklausur);IF +schuelereingetragen(schueler,kuwa2)THEN readrecord(kuwa2,eintrag);hjd1:=fa1; +hjd2:=ke1;hjd3:=ar;hjd4:=kl;hjdateneintragen(famname,rufname,gebdatum,2);IF +dbstatus=0THEN schreibeintragFI FI .schreibeintrag:pruefanzkurse;IF ke1= +leerekennungTHEN tragfachwahleinELSE tragkurswahleinFI .pruefanzkurse:aktpos +:=pos(eintrag,trenner);kurse:=text(eintrag,aktpos-1);IF length(kurse)=195 +THEN LEAVE schuelerwahleintragenFI .tragfachwahlein:IF nichteingetragen( +eintrag,ar+fa1,2,aktpos)THEN IF ke1<>leerekennungTHEN writerecord(kuwa2,kl+ar ++fa1+ke1+planbloecke(fa1+ke1)+eintrag)ELSE writerecord(kuwa2,kl+ar+fa1+ke1+ +leereplanbloecke+eintrag)FI ;FI .tragkurswahlein:IF nichteingetragen(eintrag, +fa1+ke1,4,aktpos)THEN writerecord(kuwa2,kl+ar+fa1+ke1+planbloecke(fa1+ke1)+ +eintrag)FI .END PROC schuelerwahleintragen;PROC schuelerwahlaendern(TEXT +CONST famname,rufname,gebdatum,fachalt,kennungalt,artalt,fachneu,kennungneu, +artneu,klausur):TEXT VAR schueler:=trenner+famname+trenner+rufname+trenner+ +gebdatum,neuereintrag,aralt,compke,compart;INT VAR aktpos,kurspos;dbstatus(1) +;IF halbjahrnichtgesetztTHEN LEAVE schuelerwahlaendernFI ; +faartschoneingetragen:=FALSE ;fakeschoneingetragen:=FALSE ;fa1:=text(fachalt, +laengefach);ke1:=text(kennungalt,laengekennung);aralt:=text(artalt,laengeart) +;fa2:=text(fachneu,laengefach);ke2:=text(kennungneu,laengekennung);ar:=text( +artneu,laengeart);kl:=text(klausur,laengeklausur);IF schuelereingetragen( +schueler,kuwa2)THEN pruefundtragein;hjd1:=fa1;hjd2:=ke1;hjd3:=fa2;hjd4:=ke2; +hjd5:=ar;hjd6:=kl;hjd7:=aralt;hjdateneintragen(famname,rufname,gebdatum,3); +IF dbstatus=0THEN aendereintragFI FI .pruefundtragein:readrecord(kuwa2, +eintrag);IF fachalt=""THEN LEAVE schuelerwahlaendernFI ;IF kennungalt<>"" +THEN IF nichteingetragen(eintrag,fa1+ke1,4,aktpos)THEN LEAVE +schuelerwahlaendernFI ELIF artalt=""THEN LEAVE schuelerwahlaendernELIF +nichteingetragen(eintrag,aralt+fa1,2,aktpos)THEN LEAVE schuelerwahlaendernFI +;IF fachneu=""THEN eintragloeschen:=TRUE ;eintrag:=text(eintrag,aktpos-1)+ +subtext(eintrag,aktpos+laengekurseintrag)ELSE eintragloeschen:=FALSE ;compke +:=compress(kennungneu);compart:=compress(artneu);IF compke=""CAND compart="" +THEN LEAVE schuelerwahlaendernELIF compke<>""THEN IF NOT nichteingetragen( +eintrag,fa2+ke2,4,kurspos)THEN fakeschoneingetragen:=TRUE FI ELIF compart<>"" +THEN IF NOT nichteingetragen(eintrag,ar+fa2,2,kurspos)THEN +faartschoneingetragen:=TRUE FI FI ;loeschundtrageinFI .aendereintrag: +writerecord(kuwa2,eintrag).loeschundtragein:neuereintrag:=kl;neuereintragCAT +ar;neuereintragCAT fa2;neuereintragCAT ke2;IF (fa1+ke1)<>(fa2+ke2)THEN +neuereintragCAT planbloecke(fa2+ke2)ELSE neuereintragCAT subtext(eintrag, +aktpos+9,aktpos+14)FI ;IF faartschoneingetragenCOR fakeschoneingetragenTHEN +ueberschreibneuenkursmitneuenwertenELSE substituieraltenkursmitneuemkursFI . +substituieraltenkursmitneuemkurs:eintrag:=text(eintrag,aktpos-1)+neuereintrag ++subtext(eintrag,aktpos+laengekurseintrag). +ueberschreibneuenkursmitneuenwerten:eintrag:=text(eintrag,kurspos-1)+ +neuereintrag+subtext(eintrag,kurspos+laengekurseintrag);IF aktpos<>kurspos +THEN eintrag:=text(eintrag,aktpos-1)+subtext(eintrag,aktpos+laengekurseintrag +)FI .END PROC schuelerwahlaendern;PROC hjdateneintragen(TEXT CONST famname, +rufname,gebdatum,INT CONST aktion):INT VAR iii,iiii;TEXT VAR wahlteil, +tutoreintrag;TEXT VAR t1,t2,t3,t4;SELECT aktionOF CASE 1: +hjdatenersetzenoderanlegenCASE 2:hjdatenergaenzenoderanlegenCASE 3: +hjdatensubstituierenEND SELECT .hjdatenersetzenoderanlegen:suchhjdaten( +famname,rufname,gebdatum);IF dbstatus<>0THEN IF schuelerindbTHEN +erstellhjdatensatz;IF schuljahr=aktsjCAND halbjahr=akthjCAND dbstatus=0THEN +schreibtidinsudatenFI FI ELSE aenderehjdatensatzFI .aenderehjdatensatz: +tragwahldatenein;putwert(fnrhjdfach,t1);putwert(fnrhjdkursart,t3);putwert( +fnrhjdlerngrpkenn,t2);putwert(fnrhjdklausurteiln,t4);update( +dnrhalbjahresdaten).erstellhjdatensatz:inittupel(dnrhalbjahresdaten);putwert( +fnrhjdfamnames,famname);putwert(fnrhjdrufnames,rufname);putwert(fnrhjdgebdats +,gebdatum);putwert(fnrhjdjgst,jgst);putwert(fnrhjdsj,schuljahr);putwert( +fnrhjdhj,halbjahr);tragwahldatenein;IF schuljahr=aktsjCAND halbjahr=akthj +THEN putwert(fnrhjdkennung,tutoreintrag)FI ;putwert(fnrhjdfach,t1);putwert( +fnrhjdkursart,t3);putwert(fnrhjdlerngrpkenn,t2);putwert(fnrhjdklausurteiln,t4 +);insert(dnrhalbjahresdaten);IF dbstatus<>0THEN LEAVE hjdateneintragenELSE +hjdtid:=gettidFI .schuelerindb:parsenooffields(7);inittupel(dnrschueler); +putwert(fnrsufamnames,famname);putwert(fnrsurufnames,rufname);putwert( +fnrsugebdatums,gebdatum);search(dnrschueler,TRUE );IF schuljahr=aktsjCAND +halbjahr=akthjCAND dbstatus=0THEN tutoreintrag:=wert(fnrsusgrpzugtut)FI ; +reinitparsing;dbstatus=0.tragwahldatenein:t1:="";t2:="";t3:="";t4:="";FOR iii +FROM 1UPTO length(hjd1)DIV 15REP wahlteil:=subtext(hjd1,(iii-1)*15+1,iii*15); +t1CAT subtext(wahlteil,4,5);t2CAT subtext(wahlteil,6,9);t3CAT subtext( +wahlteil,2,3);t4CAT (wahlteilSUB 1)PER .schreibtidinsudaten:inittupel( +dnrschueler);putwert(fnrsufamnames,famname);putwert(fnrsurufnames,rufname); +putwert(fnrsugebdatums,gebdatum);search(dnrschueler,TRUE );IF dbstatus=0THEN +putwert(fnrsutidakthjd,hjdtid);selupdate(dnrschueler)FI . +hjdatenergaenzenoderanlegen:suchhjdaten(famname,rufname,gebdatum);IF dbstatus +<>0THEN IF schuelerindbTHEN generierhjdatensatz;IF schuljahr=aktsjCAND +halbjahr=akthjCAND dbstatus=0THEN schreibtidinsudatenFI FI ELSE +ergaenzehjdatensatzFI .ergaenzehjdatensatz:t1:=wert(fnrhjdfach);IF length(t1) +=26THEN dbstatus(1);LEAVE hjdateneintragenELSE t3:=wert(fnrhjdkursart);t2:= +wert(fnrhjdlerngrpkenn);t4:=wert(fnrhjdklausurteiln)FI ;t1CAT hjd1;t2CAT hjd2 +;t3CAT hjd3;t4CAT hjd4;putwert(fnrhjdfach,t1);putwert(fnrhjdkursart,t3); +putwert(fnrhjdlerngrpkenn,t2);putwert(fnrhjdklausurteiln,t4);update( +dnrhalbjahresdaten);IF dbstatus<>0THEN LEAVE hjdateneintragenFI . +generierhjdatensatz:inittupel(dnrhalbjahresdaten);putwert(fnrhjdfamnames, +famname);putwert(fnrhjdrufnames,rufname);putwert(fnrhjdgebdats,gebdatum); +putwert(fnrhjdjgst,jgst);IF schuljahr=aktsjCAND halbjahr=akthjTHEN putwert( +fnrhjdkennung,tutoreintrag)FI ;putwert(fnrhjdsj,schuljahr);putwert(fnrhjdhj, +halbjahr);putwert(fnrhjdfach,hjd1);putwert(fnrhjdkursart,hjd3);putwert( +fnrhjdlerngrpkenn,hjd2);putwert(fnrhjdklausurteiln,hjd4);insert( +dnrhalbjahresdaten);IF dbstatus<>0THEN LEAVE hjdateneintragenFI ;hjdtid:= +gettid.hjdatensubstituieren:suchhjdaten(famname,rufname,gebdatum);IF dbstatus +<>0THEN dbstatus(1);LEAVE hjdateneintragenELSE substituierehjdatensatzFI . +substituierehjdatensatz:t2:=wert(fnrhjdkursart);t3:=wert(fnrhjdlerngrpkenn); +t4:=wert(fnrhjdklausurteiln);setzeuebergebenewerte;schreibgeaendertensatz. +schreibgeaendertensatz:putwert(fnrhjdfach,t1);putwert(fnrhjdkursart,t2); +putwert(fnrhjdlerngrpkenn,t3);putwert(fnrhjdklausurteiln,t4);update( +dnrhalbjahresdaten).setzeuebergebenewerte:t1:=wert(fnrhjdfach); +suchrichtigefachposition;IF eintragloeschenTHEN alteneintragloeschenELIF +faartschoneingetragenCOR fakeschoneingetragenTHEN eintragaktualisieren;IF iii +<>iiiiTHEN alteneintragloeschenFI ELSE alteneintragueberschreibenFI . +eintragaktualisieren:suchschonvorhandeneneintrag;IF faartschoneingetragen +THEN t3:=text(t3,iiii*2-2)+hjd4+subtext(t3,iiii*2+3)ELSE t2:=text(t2,iiii-1)+ +hjd5+subtext(t2,iiii+2)FI ;t4:=text(t4,(iiii+1)DIV 2-1)+hjd6+subtext(t4,(iiii ++1)DIV 2+1).alteneintragloeschen:t1:=text(t1,iii-1)+subtext(t1,iii+2);t2:= +text(t2,iii-1)+subtext(t2,iii+2);t3:=text(t3,iii*2-2)+subtext(t3,iii*2+3);t4 +:=text(t4,(iii+1)DIV 2-1)+subtext(t4,(iii+1)DIV 2+1). +alteneintragueberschreiben:IF hjd1<>hjd3THEN t1:=text(t1,iii-1)+hjd3+subtext( +t1,iii+2)FI ;IF hjd2<>hjd4THEN t3:=text(t3,iii*2-2)+hjd4+subtext(t3,iii*2+3) +FI ;IF hjd5<>hjd7THEN t2:=text(t2,iii-1)+hjd5+subtext(t2,iii+2)FI ;t4:=text( +t4,(iii+1)DIV 2-1)+hjd6+subtext(t4,(iii+1)DIV 2+1).suchrichtigefachposition: +iii:=1;WHILE iii<>0REP iii:=pos(t1,hjd1,iii);IF iii=0THEN dbstatus(1);LEAVE +hjdateneintragenELSE pruefzugehoerigewerteFI ;iiiINCR 1PER ;dbstatus(1); +LEAVE hjdateneintragen.pruefzugehoerigewerte:IF (iiiMOD 2)=1THEN IF compress( +hjd2)<>""THEN pruefkennungELIF compress(hjd7)<>""THEN pruefartFI FI . +pruefkennung:IF subtext(t3,iii*2-1,iii*2+2)=hjd2THEN LEAVE +suchrichtigefachpositionFI .pruefart:IF subtext(t2,iii,iii+1)=hjd7THEN LEAVE +suchrichtigefachpositionFI .suchschonvorhandeneneintrag:iiii:=1;WHILE iiii<>0 +REP iiii:=pos(t1,hjd3,iiii);IF iiii=0THEN dbstatus(1);LEAVE hjdateneintragen +ELSE pruefweiterewerteFI ;iiiiINCR 1PER ;dbstatus(1);LEAVE hjdateneintragen. +pruefweiterewerte:IF (iiiiMOD 2)=1THEN IF faartschoneingetragenTHEN IF +subtext(t2,iiii,iiii+1)=hjd5THEN LEAVE suchschonvorhandeneneintragFI ELIF +fakeschoneingetragenTHEN IF subtext(t3,iiii*2-1,iiii*2+2)=hjd4THEN LEAVE +suchschonvorhandeneneintragFI FI FI .END PROC hjdateneintragen;TEXT PROC +aktsj:IF aktschuljahr="0000"THEN aktschuljahr:=schulkenndatum("Schuljahr"); +FI ;aktschuljahrEND PROC aktsj;TEXT PROC akthj:IF akthalbjahr="0"THEN +akthalbjahr:=schulkenndatum("Schulhalbjahr");FI ;akthalbjahrEND PROC akthj; +PROC suchhjdaten(TEXT CONST famname,rufname,gebdatum):inittupel( +dnrhalbjahresdaten);putwert(fnrhjdfamnames,famname);putwert(fnrhjdrufnames, +rufname);putwert(fnrhjdgebdats,gebdatum);putwert(fnrhjdsj,schuljahr);putwert( +fnrhjdhj,halbjahr);search(dnrhalbjahresdaten,TRUE )END PROC suchhjdaten;INT +PROC ersterschueler:ersterEND PROC ersterschueler;INT PROC letzterschueler: +letzterEND PROC letzterschueler;TEXT PROC wahldatenzumindex(INT CONST +zeilennr,TEXT CONST kennung):INT VAR trennerpos;dbstatus(1);IF +halbjahrnichtgesetztTHEN LEAVE wahldatenzumindexWITH ""ELIF zeilennr<erster +COR zeilennr>letzterTHEN LEAVE wahldatenzumindexWITH ""FI ;toline(kuwa2, +zeilennr);col(kuwa2,1);readrecord(kuwa2,eintrag);IF kennung=kznameCOR kennung +=kzkurseCOR kennung=kzartTHEN dbstatus(0);trennerpos:=pos(eintrag,trenner); +IF kennung=kznameTHEN subtext(eintrag,trennerpos+1,length(eintrag)-3)ELIF +kennung=kzkurseTHEN text(eintrag,trennerpos-1)ELSE eintragFI ELSE ""FI END +PROC wahldatenzumindex;TEXT PROC wahldatenzumschueler(TEXT CONST famname, +rufname,gebdatum,kennung):TEXT VAR schueler:=trenner+famname+trenner+rufname+ +trenner+gebdatum;dbstatus(1);IF halbjahrnichtgesetztTHEN LEAVE +wahldatenzumschuelerWITH ""FI ;IF schuelereingetragen(schueler,kuwa2)THEN +readrecord(kuwa2,eintrag);IF kennung="F"COR kennung="A"COR kennung="FA"COR +kennung="FAk"COR kennung="FK"COR kennung="FKk"COR kennung="FKAk"COR kennung= +"FP"THEN dbstatus(0);alledaten(eintrag,kennung)ELSE ""FI ELSE ""FI END PROC +wahldatenzumschueler;TEXT PROC weiterewahldatenzumschueler(TEXT CONST famname +,rufname,gebdatum,kennung):TEXT VAR schueler:=trenner+famname+trenner+rufname ++trenner+gebdatum;dbstatus(1);IF halbjahrnichtgesetztTHEN LEAVE +weiterewahldatenzumschuelerWITH ""FI ;IF schuelereingetragen(schueler,kuwa3) +THEN readrecord(kuwa3,eintrag);IF kennung="F"COR kennung="A"COR kennung="FA" +COR kennung="FAk"COR kennung="FK"COR kennung="FKk"COR kennung="FKAk"THEN +dbstatus(0);alledaten(eintrag,kennung)ELSE ""FI ELSE ""FI END PROC +weiterewahldatenzumschueler;TEXT PROC kursdaten(TEXT CONST anwkurs,kennung): +TEXT VAR ausgabe:="",kurs:=text(anwkurs,laengekurs);dbstatus(1);IF +halbjahrnichtgesetztTHEN LEAVE kursdatenWITH ""FI ;IF kurseingetragen(kurs) +THEN readrecord(kuwa0,eintrag);IF kennung=kzartTHEN ausgabe:=subtext(eintrag, +9);dbstatus(0)ELIF kennung=kzstdTHEN ausgabe:=subtext(eintrag,7,8);dbstatus(0 +)ELIF kennung=kzplanblTHEN ausgabe:=planbloecke(kurs);dbstatus(0)FI FI ; +ausgabeEND PROC kursdaten;TEXT PROC allekurse:TEXT VAR ausgabe:="";IF +halbjahrnichtgesetztTHEN dbstatus(1);LEAVE allekurseWITH ""ELSE dbstatus(0) +FI ;col(kuwa0,1);toline(kuwa0,1);WHILE NOT eof(kuwa0)REP readrecord(kuwa0, +eintrag);IF eintrag<>""THEN ausgabeCAT eintragFI ;down(kuwa0)PER ;ausgabeEND +PROC allekurse;TEXT PROC alleplanblockbezeichner:TEXT VAR ausgabe:="";IF +halbjahrnichtgesetztTHEN dbstatus(1);LEAVE alleplanblockbezeichnerWITH "" +ELSE dbstatus(0)FI ;col(kuwa1,1);toline(kuwa1,1);WHILE NOT eof(kuwa1)REP +readrecord(kuwa1,eintrag);IF eintrag<>""THEN ausgabeCAT text(eintrag, +laengeblock)FI ;down(kuwa1)PER ;ausgabeEND PROC alleplanblockbezeichner;TEXT +PROC planblockdaten(TEXT CONST anwblockbez,kennung):TEXT VAR blockbez:= +formbezeichner(anwblockbez);IF halbjahrnichtgesetztCOR NOT blockeingetragen( +blockbez)THEN dbstatus(1);LEAVE planblockdatenWITH ""FI ;readrecord(kuwa1, +eintrag);IF kennung=kzstdTHEN dbstatus(0);eintragSUB 4ELIF kennung=kzkurse +THEN dbstatus(0);subtext(eintrag,5)ELSE ""FI END PROC planblockdaten;PROC +kurszumplanblockeintragen(TEXT CONST anwkurs,anwblockbez):TEXT VAR blockbez:= +formbezeichner(anwblockbez);TEXT CONST kurs:=text(anwkurs,laengekurs);IF +halbjahrnichtgesetztCOR NOT blockeingetragen(blockbez)THEN dbstatus(1);LEAVE +kurszumplanblockeintragenFI ;readrecord(kuwa1,eintrag);IF length(eintrag)> +laengeblockwstdTHEN IF wertnichteingetragen(subtext(eintrag,laengeblockwstd+1 +),kurs,1)THEN eintragCAT text(kurs,laengekurs);writerecord(kuwa1,eintrag)FI +ELSE eintragCAT text(kurs,laengekurs);writerecord(kuwa1,eintrag)FI ;dbstatus( +0)END PROC kurszumplanblockeintragen;INT PROC anzahlschuelermitwahl(TEXT +CONST fach,kennung,art,klausur):IF halbjahrnichtgesetztTHEN dbstatus(1); +LEAVE anzahlschuelermitwahlWITH 0FI ;fa1:=text(fach,laengefach);ke1:=text( +kennung,laengekennung);ar:=text(art,laengeart);dbstatus(0);IF fach=""THEN +dbstatus(1);-1ELIF kennung=""CAND art=""CAND klausur=""THEN anzahlschueler( +fa1,"",4)ELIF kennung=""CAND art=""THEN anzahlschueler(fa1,klausur,4)ELIF +kennung<>""CAND art=""CAND klausur=""THEN anzahlschueler(fa1+ke1,"",4)ELIF +kennung<>""CAND art=""THEN anzahlschueler(fa1+ke1,klausur,4)ELIF kennung="" +CAND art<>""CAND klausur=""THEN anzahlschueler(ar+fa1,"",2)ELIF kennung="" +CAND art<>""THEN anzahlschueler(klausur+ar+fa1,"",1)ELIF klausur=""THEN +anzahlschueler(ar+fa1+ke1,"",2)ELSE anzahlschueler(klausur+ar+fa1+ke1,"",1) +FI END PROC anzahlschuelermitwahl;INT PROC anzahlschuelermitwahl(TEXT CONST +fach,kennung,art,klausur,fach2,kennung2,art2,klausur2):TEXT VAR p1,p3,p4,p6, +ar1,ar2;INT VAR p2,p5;fa1:=text(fach,laengefach);fa2:=text(fach2,laengefach); +ke1:=text(kennung,laengekennung);ke2:=text(kennung2,laengekennung);ar1:=text( +art,laengeart);ar2:=text(art2,laengeart);IF halbjahrnichtgesetztCOR (fa1=fa2 +CAND kennung=kennung2CAND art=art2)THEN dbstatus(1);LEAVE +anzahlschuelermitwahlWITH 0FI ;pruefwahl.pruefwahl:dbstatus(0);IF fach="" +THEN dbstatus(1);LEAVE anzahlschuelermitwahlWITH -1ELIF kennung=""CAND art="" +CAND klausur=""THEN p1:=fa1;p2:=4;p3:=""ELIF kennung=""CAND art=""THEN p1:= +fa1;p2:=4;p3:=klausurELIF kennung<>""CAND art=""CAND klausur=""THEN p1:=fa1+ +ke1;p2:=4;p3:=""ELIF kennung<>""CAND art=""THEN p1:=fa1+ke1;p2:=4;p3:=klausur +ELIF kennung=""CAND art<>""CAND klausur=""THEN p1:=ar1+fa1;p2:=2;p3:="";ELIF +kennung=""CAND art<>""THEN p1:=klausur+ar1+fa1;p2:=1;p3:=""ELIF klausur="" +THEN p1:=ar1+fa1+ke1;p2:=2;p3:=""ELSE p1:=klausur+ar1+fa1+ke1;p2:=1;p3:=""FI +;IF fach2=""THEN LEAVE anzahlschuelermitwahlWITH anzahlschueler(p1,p3,p2) +ELIF kennung2=""CAND art2=""CAND klausur2=""THEN p4:=fa2;p5:=4;p6:=""ELIF +kennung2=""CAND art2=""THEN p4:=fa2;p5:=4;p6:=klausur2ELIF kennung2<>""CAND +art2=""CAND klausur2=""THEN p4:=fa2+ke2;p5:=4;p6:=""ELIF kennung2<>""CAND +art2=""THEN p4:=fa2+ke2;p5:=4;p6:=klausur2ELIF kennung2=""CAND art2<>""CAND +klausur2=""THEN p4:=ar2+fa2;p5:=2;p6:="";ELIF kennung2=""CAND art2<>""THEN p4 +:=klausur2+ar2+fa2;p5:=1;p6:=""ELIF klausur2=""THEN p4:=ar2+fa2+ke2;p5:=2;p6 +:=""ELSE p4:=klausur2+ar2+fa2+ke2;p5:=1;p6:=""FI ;anzahlschueler(p1,p3,p4,p6, +p2,p5)END PROC anzahlschuelermitwahl;TEXT PROC schuelermitwahl(TEXT CONST +fach,kennung,art,klausur):IF halbjahrnichtgesetztTHEN dbstatus(1);LEAVE +schuelermitwahlWITH ""FI ;fa1:=text(fach,laengefach);ke1:=text(kennung, +laengekennung);ar:=text(art,laengeart);pruefwahl.pruefwahl:dbstatus(0);IF +fach=""THEN dbstatus(1);""ELIF kennung=""CAND art=""CAND klausur=""THEN +schueler(fa1,"",4)ELIF kennung=""CAND art=""THEN schueler(fa1,klausur,4)ELIF +kennung<>""CAND art=""CAND klausur=""THEN schueler(fa1+ke1,"",4)ELIF kennung +<>""CAND art=""THEN schueler(fa1+ke1,klausur,4)ELIF kennung=""CAND art<>"" +CAND klausur=""THEN schueler(ar+fa1,"",2)ELIF kennung=""CAND art<>""THEN +schueler(klausur+ar+fa1,"",1)ELIF klausur=""THEN schueler(ar+fa1+ke1,"",2) +ELSE schueler(klausur+ar+fa1+ke1,"",1)FI END PROC schuelermitwahl;INT PROC +anzahlfreierschuelerimplanblock(TEXT CONST blocknr,teilkennung,fach,kennung, +art,klausur):TEXT VAR block:=text(blocknr,2)+text(teilkennung,1);INT VAR j:= +int(blocknr)*3-2,anzspezschueler:=letzterschueler-ersterschueler+1, +anzbelschueler:=0;IF halbjahrnichtgesetztCOR j<1COR j>maxkuwa1zeilenTHEN +dbstatus(1);LEAVE anzahlfreierschuelerimplanblockWITH -1FI ;IF fach=""THEN +anzspezschueler:=letzterschueler-ersterschueler+1ELSE anzspezschueler:= +anzahlschuelermitwahl(fach,kennung,art,klausur)FI ;fa1:=text(fach,laengefach) +;ke1:=text(kennung,laengekennung);ar:=text(art,laengeart);pruefwahl.pruefwahl +:dbstatus(0);IF fach=""THEN anzbelschueler:=anzahlschueler("","",block,1) +ELIF kennung=""CAND art=""CAND klausur=""THEN anzbelschueler:=anzahlschueler( +fa1,"",block,4)ELIF kennung=""CAND art=""THEN anzbelschueler:=anzahlschueler( +fa1,klausur,block,4)ELIF kennung<>""CAND art=""CAND klausur=""THEN +anzbelschueler:=anzahlschueler(fa1+ke1,"",block,4)ELIF kennung<>""CAND art="" +THEN anzbelschueler:=anzahlschueler(fa1+ke1,klausur,block,4)ELIF kennung="" +CAND art<>""CAND klausur=""THEN anzbelschueler:=anzahlschueler(ar+fa1,"", +block,2)ELIF kennung=""CAND art<>""THEN anzbelschueler:=anzahlschueler( +klausur+ar+fa1,"",block,1)ELIF klausur=""THEN anzbelschueler:=anzahlschueler( +ar+fa1+ke1,"",block,2)ELSE anzbelschueler:=anzahlschueler(klausur+ar+fa1+ke1, +"",block,1)FI ;anzspezschueler-anzbelschuelerEND PROC +anzahlfreierschuelerimplanblock;BOOL PROC schuelerinplanblock(TEXT CONST +famname,rufname,gebdatum,blockbez):TEXT VAR schueler:=trenner+famname+trenner ++rufname+trenner+gebdatum,block:=text(blockbez,laengeblock),schuelerkurse:="" +,aktkurs,plblkurse:=planblockdaten(block,kzkurse);INT VAR kurspos;IF +planblockeingetragenCAND schuelereingetragen(schueler,kuwa2)CAND NOT +halbjahrnichtgesetztTHEN dbstatus(0);schuelerkurse:=wahldatenzumschueler( +famname,rufname,gebdatum,kzfake);IF plblkurse=""THEN FALSE ELSE +betrachtealleschuelerkurseFI ELSE dbstatus(1);TRUE FI .planblockeingetragen: +dbstatus=0.betrachtealleschuelerkurse:kurspos:=1;WHILE kurspos<length( +schuelerkurse)REP aktkurs:=subtext(schuelerkurse,kurspos,kurspos+laengekurs-1 +);IF kursnichteingetragen(plblkurse,aktkurs)THEN kursposINCR laengekursELSE +LEAVE schuelerinplanblockWITH TRUE FI PER ;FALSE .END PROC +schuelerinplanblock;BOOL PROC kursnichteingetragen(TEXT CONST quelle, +teilmuster):INT VAR suchab:=1,aktpos;WHILE pos(quelle,teilmuster,suchab)<>0 +REP aktpos:=pos(quelle,teilmuster,suchab);IF aktposMOD laengekurs=1THEN +LEAVE kursnichteingetragenWITH FALSE ELSE suchab:=aktpos+1FI PER ;TRUE END +PROC kursnichteingetragen;TEXT PROC schuelerundklausur(TEXT CONST fach, +kennung,art):IF halbjahrnichtgesetztTHEN dbstatus(1);LEAVE schuelerundklausur +WITH ""FI ;fa1:=text(fach,laengefach);ke1:=text(kennung,laengekennung);ar:= +text(art,laengeart);pruefwahl.pruefwahl:dbstatus(0);IF fach=""THEN dbstatus(1 +);""ELIF kennung=""CAND art=""THEN klausurschueler(fa1,4)ELIF kennung<>"" +CAND art=""THEN klausurschueler(fa1+ke1,4)ELIF kennung=""CAND art<>""THEN +klausurschueler(ar+fa1,2)ELSE klausurschueler(ar+fa1+ke1,2)FI END PROC +schuelerundklausur;TEXT PROC klausurschueler(TEXT CONST suchtext,INT CONST +findpos):INT VAR aktpos;TEXT VAR namen:="";col(kuwa2,1);toline(kuwa2,erster); +WHILE lineno(kuwa2)<=letzterREP downety(kuwa2,suchtext);aktpos:=col(kuwa2); +IF lineno(kuwa2)>letzterTHEN LEAVE klausurschuelerWITH namenELIF aktposMOD +laengekurseintrag=findposTHEN readrecord(kuwa2,eintrag);namenpos:=pos(eintrag +,trenner);IF aktpos<namenposTHEN namenCAT trenner2+(eintragSUB (aktpos- +findpos+1));namenCAT subtext(eintrag,namenpos,length(eintrag)-3)FI FI ;col( +kuwa2,1);down(kuwa2)PER ;namen.END PROC klausurschueler;TEXT PROC schueler( +TEXT CONST suchtext,klausur,INT CONST findpos):INT VAR aktpos;TEXT VAR namen +:="";col(kuwa2,1);toline(kuwa2,erster);WHILE lineno(kuwa2)<=letzterREP +downety(kuwa2,suchtext);aktpos:=col(kuwa2);IF lineno(kuwa2)>letzterTHEN +LEAVE schuelerWITH namenELIF aktposMOD laengekurseintrag=findposTHEN +readrecord(kuwa2,eintrag);namenpos:=pos(eintrag,trenner);IF aktpos<namenpos +THEN IF klausur=""THEN namenCAT trenner2;namenCAT subtext(eintrag,namenpos, +length(eintrag)-3)ELSE ueberpruefklausurFI FI FI ;col(kuwa2,1);down(kuwa2) +PER ;namen.ueberpruefklausur:IF (eintragSUB (aktpos-findpos+1))=klausurTHEN +namenCAT trenner2;namenCAT subtext(eintrag,pos(eintrag,trenner),length( +eintrag)-3)FI .END PROC schueler;INT PROC anzahlschueler(TEXT CONST suchtext, +klausur,INT CONST findpos):INT VAR anz:=0,aktpos;col(kuwa2,1);toline(kuwa2, +erster);WHILE lineno(kuwa2)<=letzterREP downety(kuwa2,suchtext);aktpos:=col( +kuwa2);IF lineno(kuwa2)>letzterTHEN LEAVE anzahlschuelerWITH anzELIF aktpos +MOD laengekurseintrag=findposTHEN readrecord(kuwa2,eintrag);namenpos:=pos( +eintrag,trenner);IF aktpos<namenposTHEN IF klausur=""THEN anzINCR 1ELSE +ueberpruefklausurFI FI FI ;down(kuwa2);col(kuwa2,1)PER ;anz.ueberpruefklausur +:IF (eintragSUB (aktpos-findpos+1))=klausurTHEN anzINCR 1FI .END PROC +anzahlschueler;INT PROC anzahlschueler(TEXT CONST suchtext,klausur,anwblock, +INT CONST findpos):INT VAR i,anz:=0,aktpos;TEXT VAR blocknr:=text(anwblock,2) +,block:=text(blocknr,laengeblock);IF (anwblockSUB 3)="a"THEN blockCAT +anwblockELIF (anwblockSUB 3)="b"THEN blockCAT anwblockELSE block:=blocknrFI ; +IF suchtext=""THEN zaehlalleschuelerELSE zaehlspezschuelerFI . +zaehlspezschueler:col(kuwa2,1);toline(kuwa2,erster);WHILE lineno(kuwa2)<= +letzterREP downety(kuwa2,suchtext);aktpos:=col(kuwa2);IF lineno(kuwa2)> +letzterTHEN LEAVE anzahlschuelerWITH anzELIF aktposMOD laengekurseintrag= +findposTHEN readrecord(kuwa2,eintrag);namenpos:=pos(eintrag,trenner);IF +aktpos<namenposTHEN eintrag:=text(eintrag,namenpos-1);IF klausur=""THEN +pruefblockELSE ueberpruefklausurFI FI FI ;down(kuwa2);col(kuwa2,1)PER ;anz. +ueberpruefklausur:IF (eintragSUB (aktpos-findpos+1))=klausurTHEN pruefblock +FI .pruefblock:IF NOT (nichteingetragen(eintrag,block,10))COR NOT ( +nichteingetragen(eintrag,block,13))THEN anzINCR 1FI .zaehlalleschueler:col( +kuwa2,1);FOR iFROM ersterUPTO letzterREP toline(kuwa2,i);readrecord(kuwa2, +eintrag);eintrag:=text(eintrag,pos(eintrag,trenner)-1);pruefblockPER ;anz. +END PROC anzahlschueler;INT PROC anzahlschueler(TEXT CONST suchtext,klausur, +suchtext2,klausur2,INT CONST findpos,findpos2):INT VAR anz:=0,aktpos,kurspos; +col(kuwa2,1);toline(kuwa2,erster);WHILE lineno(kuwa2)<=letzterREP downety( +kuwa2,suchtext);aktpos:=col(kuwa2);IF lineno(kuwa2)>letzterTHEN LEAVE +anzahlschuelerWITH anzELIF aktposMOD laengekurseintrag=findposTHEN readrecord +(kuwa2,eintrag);namenpos:=pos(eintrag,trenner);IF aktpos<namenposTHEN IF +klausur=""THEN ueberpruefkurs2ELSE ueberpruefklausurFI FI FI ;down(kuwa2);col +(kuwa2,1)PER ;anz.ueberpruefklausur:IF (eintragSUB (aktpos-findpos+1))= +klausurTHEN ueberpruefkurs2FI .ueberpruefkurs2:IF NOT nichteingetragen( +eintrag,suchtext2,findpos2,kurspos)THEN IF klausur2=""THEN anzINCR 1ELIF ( +eintragSUB kurspos)=klausurTHEN anzINCR 1FI ;FI .END PROC anzahlschueler; +TEXT PROC alledaten(TEXT CONST eintrag,kennung):INT VAR aktpos:=pos(eintrag, +trenner);TEXT VAR kurse:=text(eintrag,aktpos-1),kurs,ausgabe:="";ausgabe:=""; +IF length(kurse)MOD laengekurseintrag<>0THEN dbstatus(1)ELSE aktpos:=1;WHILE +aktpos<length(kurse)REP kurs:=subtext(kurse,aktpos,aktpos+laengekurseintrag-1 +);IF kennung="F"THEN ausgabeCAT subtext(kurs,4,5)ELIF kennung="A"THEN ausgabe +CAT subtext(kurs,2,3)ELIF kennung="FA"THEN ausgabeCAT subtext(kurs,4,5); +ausgabeCAT subtext(kurs,2,3)ELIF kennung="FAk"THEN ausgabeCAT subtext(kurs,4, +5);ausgabeCAT subtext(kurs,2,3);ausgabeCAT (kursSUB 1)ELIF kennung="FK"THEN +ausgabeCAT subtext(kurs,4,9)ELIF kennung="FKk"THEN ausgabeCAT subtext(kurs,4, +9);ausgabeCAT (kursSUB 1)ELIF kennung="FKAk"THEN ausgabeCAT subtext(kurs,4,9) +;ausgabeCAT subtext(kurs,2,3);ausgabeCAT (kursSUB 1)ELIF kennung="FP"THEN +ausgabeCAT subtext(kurs,4,5);ausgabeCAT planbloecke(subtext(kurs,4,9))FI ; +aktposINCR laengekurseintragPER ;FI ;ausgabeEND PROC alledaten;INT PROC +zeilennrzumschuelerbestand(BOOL CONST letzterls):col(kuwa2,1);toline(kuwa2,1) +;downety(kuwa2,kzneue);IF letzterlsTHEN IF eof(kuwa2)THEN lines(kuwa2)ELSE +lineno(kuwa2)-1FI ELSE IF eof(kuwa2)THEN lines(kuwa2)+1ELSE lineno(kuwa2)FI +FI END PROC zeilennrzumschuelerbestand;BOOL PROC nichteingetragen(TEXT CONST +urquelle,muster,INT CONST ripos,INT VAR findpos):INT VAR suchab:=1,aktpos, +trennerpos:=pos(urquelle,trenner);TEXT VAR quelle;IF trennerpos>0THEN quelle +:=text(urquelle,trennerpos-1)ELSE quelle:=urquelleFI ;WHILE pos(quelle,muster +,suchab)<>0REP aktpos:=pos(quelle,muster,suchab);IF aktposMOD +laengekurseintrag=riposTHEN findpos:=aktpos-ripos+1;LEAVE nichteingetragen +WITH FALSE ELSE suchab:=aktpos+1FI PER ;findpos:=0;TRUE END PROC +nichteingetragen;BOOL PROC nichteingetragen(TEXT CONST urquelle,muster,INT +CONST ripos):INT VAR trennerpos:=pos(urquelle,trenner);TEXT VAR quelle, +teilmuster;IF trennerpos>0THEN quelle:=text(urquelle,trennerpos-1)ELSE quelle +:=urquelleFI ;IF length(muster)<4THEN wertnichteingetragen(quelle,muster, +ripos)ELSE teilmuster:=text(muster,3);IF wertnichteingetragen(quelle, +teilmuster,ripos)THEN teilmuster:=subtext(muster,4);wertnichteingetragen( +quelle,teilmuster,ripos)ELSE FALSE FI FI END PROC nichteingetragen;BOOL PROC +wertnichteingetragen(TEXT CONST quelle,teilmuster,INT CONST ripos):INT VAR +suchab:=1,aktpos;WHILE pos(quelle,teilmuster,suchab)<>0REP aktpos:=pos(quelle +,teilmuster,suchab);IF aktposMOD laengekurseintrag=riposTHEN LEAVE +wertnichteingetragenWITH FALSE ELSE suchab:=aktpos+1FI PER ;TRUE END PROC +wertnichteingetragen;TEXT PROC planbloecke(TEXT CONST kurs):TEXT VAR blockbez +:="",zeile;INT VAR aktsp;col(kuwa1,1);toline(kuwa1,1);WHILE NOT eof(kuwa1) +REP downety(kuwa1,kurs);IF NOT eof(kuwa1)THEN aktsp:=col(kuwa1);IF aktspMOD +laengekurs=5THEN readrecord(kuwa1,zeile);blockbezCAT text(zeile,laengeblock) +FI ;col(kuwa1,aktsp+1)FI ;PER ;text(blockbez,6)END PROC planbloecke;PROC +aenderkursinkuwa1(TEXT CONST kurs,kursneu):INT VAR aktsp;col(kuwa1,1);toline( +kuwa1,1);WHILE NOT eof(kuwa1)REP downety(kuwa1,kurs);IF NOT eof(kuwa1)THEN +aktsp:=col(kuwa1);IF aktspMOD laengekurs=5THEN readrecord(kuwa1,eintrag); +writerecord(kuwa1,text(eintrag,aktsp-1)+kursneu+subtext(eintrag,aktsp+6))FI ; +col(kuwa1,aktsp+1)FI ;PER END PROC aenderkursinkuwa1;BOOL PROC +schuelereingetragen(TEXT CONST schueler,FILE VAR file):col(file,1);toline( +file,1);downety(file,schueler);IF NOT eof(file)THEN col(file,1);TRUE ELSE +FALSE FI END PROC schuelereingetragen;PROC planbloeckezukurseintragen(TEXT +CONST kurs,planbloecke):INT VAR aktpos;col(kuwa2,1);toline(kuwa2,1);WHILE +NOT eof(kuwa2)REP downety(kuwa2,kurs);IF NOT eof(kuwa2)THEN aktpos:=col(kuwa2 +);IF aktposMOD laengekurseintrag=4THEN korrigiereintragFI ;col(kuwa2,aktpos+ +11)FI PER .korrigiereintrag:readrecord(kuwa2,eintrag);writerecord(kuwa2,text( +eintrag,aktpos+5)+planbloecke+subtext(eintrag,aktpos+12)).END PROC +planbloeckezukurseintragen;BOOL PROC kurseingetragen(TEXT CONST anwkurs): +TEXT VAR kurs:=text(anwkurs,laengekurs);indateieingetragen(kuwa0,kurs)END +PROC kurseingetragen;BOOL PROC blockeingetragen(TEXT CONST planblock): +indateieingetragen(kuwa1,planblock)END PROC blockeingetragen;BOOL PROC +indateieingetragen(FILE VAR dat,TEXT CONST suchtext):IF compress(suchtext)="" +THEN LEAVE indateieingetragenWITH FALSE FI ;toline(dat,1);col(dat,1);downety( +dat,suchtext);WHILE NOT eof(dat)REP IF col(dat)=1THEN LEAVE +indateieingetragenWITH TRUE ELSE col(dat,col(dat)+1)FI ;downety(dat,suchtext) +PER ;FALSE END PROC indateieingetragen;TEXT PROC konvsjteil(TEXT CONST jahr, +INT CONST jgstdiff):INT VAR kjahr:=int(jahr)+jgstdiff;IF kjahr>99THEN subtext +(text(kjahr),2)ELSE text(kjahr)FI END PROC konvsjteil;PROC kursdatenholen: +kuwa0:=sequentialfile(output,datei);inittupel(dnrlehrveranstaltungen);putwert +(fnrlvsj,schuljahr);putwert(fnrlvhj,halbjahr);putwert(fnrlvjgst,jgst); +statleseschleife(dnrlehrveranstaltungen,schuljahr,halbjahr,fnrlvsj,fnrlvhj, +PROC kursdatenaktodergepl);modify(kuwa0).END PROC kursdatenholen;PROC +kursdatenaktodergepl(BOOL VAR b):IF wert(fnrlvsj)<>schuljahrCOR wert(fnrlvhj) +<>halbjahrCOR wert(fnrlvjgst)<>jgstCOR dbstatus<>0THEN b:=TRUE ELSE putline( +kuwa0,text(wert(fnrlvfachkennung),laengekurs)+text(wert(fnrlvwochenstd), +laengewstd)+text(wert(fnrlvart),laengeart))FI .END PROC kursdatenaktodergepl; +PROC kurswahleinerjgstaufbereiten(TEXT CONST jgst,halbjahr,schuljahr,FILE +VAR kuwadatei):datei:=kurswahl2+jgst+" "+halbjahr+"."+schuljahr;forget(datei, +quiet);IF kuwa2eintragTHEN kuwa2:=sequentialfile(output,datei)ELSE kuwa3:= +sequentialfile(output,datei)FI ;eintrag:=trenner;holhalbjahresdaten; +holalleschueler;forget(namezwischendatei,quiet);IF kuwa2eintragTHEN modify( +kuwa2)ELSE modify(kuwa3)FI .holhalbjahresdaten:inittupel(dnrhalbjahresdaten); +changeindex;putwert(fnrhjdsj,schuljahr);putwert(fnrhjdhj,halbjahr);putwert( +fnrhjdjgst,jgst);forget(namezwischendatei,quiet);kuwahilf:=sequentialfile( +output,namezwischendatei);statleseschleife(ixhjdsjhjjgstkenn,schuljahr, +halbjahr,fnrhjdsj,fnrhjdhj,PROC zwischenspeichern);.holalleschueler:modify( +kuwahilf);IF bearbschueler<>2THEN erster:=1FI ;inittupel(dnrschueler); +parsenooffields(5);changeindex;status:=stat1;statleseschleife(ixsustatjgst, +status,text(aktjg),fnrsustatuss,fnrsusgrpjgst,PROC schuelerholen);IF aktjg=10 +THEN status:=stat2ELSE status:=stat3FI ;IF kuwa2eintragTHEN IF bearbschueler= +1THEN letzter:=lines(kuwa2)ELIF bearbschueler=2THEN erster:=lines(kuwa2)+1FI +FI ;IF aktjg<>13THEN inittupel(dnrschueler);putintwert(fnrsujgsteintr,aktjg+1 +);statleseschleife(ixsustatjgst,status,"",fnrsustatuss,fnrsusgrpjgst,PROC +neueschuelerholen);FI ;IF kuwa2eintragTHEN IF bearbschueler<>1THEN letzter:= +lines(kuwa2)FI ;IF erster=letzterTHEN letzterDECR 1FI FI ;reinitparsing.END +PROC kurswahleinerjgstaufbereiten;PROC zwischenspeichern(BOOL VAR b):IF wert( +fnrhjdsj)<>schuljahrCOR wert(fnrhjdhj)<>halbjahrCOR wert(fnrhjdjgst)<>jgst +COR dbstatus<>0THEN b:=TRUE ELSE tragwerteeinFI .tragwerteein:bereitedatenauf +(wert(fnrhjdfach),wert(fnrhjdkursart),wert(fnrhjdlerngrpkenn),wert( +fnrhjdklausurteiln));putline(kuwahilf,eintrag).END PROC zwischenspeichern; +PROC bereitedatenauf(TEXT CONST faecher,arten,kennungen,klausuren):INT VAR i, +j,l;TEXT VAR t,fach;l:=length(faecher)DIV laengefach;eintrag:="";FOR iFROM 1 +UPTO lREP holklausur;holart;holfach;holkennungPER ;eintragCAT trenner;eintrag +CAT wert(fnrhjdfamnames);eintragCAT trenner;eintragCAT wert(fnrhjdrufnames); +eintragCAT trenner;eintragCAT wert(fnrhjdgebdats).holklausur:t:=subtext( +klausuren,i,i);IF t<>""THEN eintragCAT tELSE eintragCAT " "FI .holart:j:=i* +laengeart-1;t:=subtext(arten,j,j+1);IF t<>""THEN eintragCAT tELSE eintragCAT +leereartFI .holfach:t:=subtext(faecher,j,j+1);IF t<>""THEN eintragCAT t;fach +:=tELSE eintragCAT " "FI .holkennung:j:=i*laengekennung-3;t:=subtext( +kennungen,j,j+3);IF t<>""THEN eintragCAT t;IF plblvorhandenTHEN +holplanbloeckeELSE eintragCAT leereplanbloeckeFI ELSE eintragCAT leerekennung ++leereplanbloeckeFI .holplanbloecke:eintragCAT planbloecke(fach+t).END PROC +bereitedatenauf;PROC schuelerholen(BOOL VAR b):IF wert(fnrsustatuss)<>status +COR intwert(fnrsusgrpjgst)<>aktjgCOR dbstatus<>0THEN dbstatus(1);b:=TRUE +ELSE schuelerdatenerstellen(kzschueler)FI .END PROC schuelerholen;PROC +neueschuelerholen(BOOL VAR b):IF wert(fnrsustatuss)<>statusCOR dbstatus<>0 +THEN dbstatus(1);b:=TRUE ELIF intwert(fnrsujgsteintr)=aktjg+1THEN +schuelerdatenerstellen(kzneue)FI .END PROC neueschuelerholen;PROC +schuelerdatenerstellen(TEXT CONST schuelerkennung):TEXT VAR famname,rufname, +gebdatum,eintragkuwahilf;famname:=wert(fnrsufamnames);rufname:=wert( +fnrsurufnames);gebdatum:=wert(fnrsugebdatums);eintragkuwahilf:=trenner+ +famname+trenner+rufname+trenner+gebdatum;IF keinehjdatenTHEN +schreibleereintragELSE suchinkuwahilfFI .keinehjdaten:eintrag=trenner. +suchinkuwahilf:col(kuwahilf,1);toline(kuwahilf,1);downety(kuwahilf, +eintragkuwahilf);IF eof(kuwahilf)THEN schreibleereintragELSE col(kuwahilf,1); +readrecord(kuwahilf,eintragkuwahilf);eintragkuwahilfCAT schuelerkennung;IF +kuwa2eintragTHEN putline(kuwa2,eintragkuwahilf)ELSE putline(kuwa3, +eintragkuwahilf)FI ;FI .schreibleereintrag:eintragkuwahilfCAT schuelerkennung +;IF kuwa2eintragTHEN putline(kuwa2,eintragkuwahilf)ELSE putline(kuwa3, +eintragkuwahilf)FI .END PROC schuelerdatenerstellen;BOOL PROC +halbjahrnichtgesetzt:schuljahr="0000"END PROC halbjahrnichtgesetzt;TEXT PROC +gesperrterdatenraumname(TEXT CONST namepraefix):praefixsperre+datenraumname( +namepraefix)END PROC gesperrterdatenraumname;TEXT PROC datenraumname(TEXT +CONST namepraefix):TEXT VAR name:=namepraefix;nameCAT jgst;nameCAT " ";name +CAT halbjahr;nameCAT ".";nameCAT schuljahr;nameEND PROC datenraumname;TEXT +PROC formbezeichner(TEXT CONST bezeichner):TEXT VAR bez:="",erg:="";INT VAR +ibez:=int(bezeichner);IF bezeichner=""THEN LEAVE formbezeichnerWITH +bezeichnerFI ;IF NOT (lastconversionok)THEN erg:=bezeichnerSUB 3;IF NOT (erg= +kennungtplbl1COR erg=kennungtplbl2)THEN LEAVE formbezeichnerWITH ""FI ELSE +erg:=" "FI ;IF ibez<10THEN bezCAT "0";bezCAT text(ibez)ELSE bezCAT text(ibez) +FI ;bezCAT erg;bezEND PROC formbezeichner;END PACKET +kurswahlschnittstelle240791; + diff --git a/app/schulis/2.2.1/src/2.kurszuordnung und umwahl fuer einzelne schueler sek2 b/app/schulis/2.2.1/src/2.kurszuordnung und umwahl fuer einzelne schueler sek2 new file mode 100644 index 0000000..2c44f7d --- /dev/null +++ b/app/schulis/2.2.1/src/2.kurszuordnung und umwahl fuer einzelne schueler sek2 @@ -0,0 +1,420 @@ +PACKET kurszuordnungundumwahlfuereinzelneschuelersek2DEFINES +kurszuordnungundumwahlsek2anfang,kurszuordnungundumwahlbearbeiten, +kurszuordnungundumwahlspeichern,kurszuordnungundumwahlkurselisten, +kurszuordnungundumwahlkopieren,kurszuordnungundumwahlrechtehaelfte, +kurszuordnungundumwahllinkehaelfte,kurszuordnungundumwahlvorwaerts, +kurszuordnungundumwahlrueckwaerts,kurszuordnungundumwahlbeenden, +kurszuordnungundumwahllistezeigen,kurszuordnungundumwahllisteblaettern, +kurszuordnungundumwahllistebearbeiten,kurszuordnungundumwahllistebeenden:LET +artbestand="c02 art lehrveranstaltung",abiklbestand="c02 abitur klausur", +kuwa2sperre="Kurswahl-2 ",eingangsmaske= +"ms kurszuordnung und umwahl sek2 eingang",bearbmaske= +"ms kurszuordnung und umwahl sek2 bearb",listenmaske="mu objektliste", +schuljahr="Schuljahr",halbjahr="Schulhalbjahr",laengefake=6,laengefakeartkl=9 +,laengevname=15,laengeplbleinesbs=36,laengekurseeinesbs=42,laengefamname=30, +laengegebdat=8,laengename=53,einganggewjgst=2,einganggewhj=3,eingangaktjgst=4 +,eingangaktneue=5,eingangfamname=6,eingangrufname=7,eingangdatum=8,bearbname= +2,bearbfaecher=3,bearbkurse=42,meldungwarten=69,meldungpraezisieren=129, +meldungpruefen=329,meldungspeichern=50,meldungnspeichern=63, +meldungfeldfuellen=52,meldungfalschejgst=404,meldungfalscheshj=405, +meldungandereauswahl=318,meldunglistezeigen=7,meldungkeineschueler=423, +meldungserverfehler=416,meldungkeinblaettern=72,meldungfalschesfach=310, +meldungfalscheart=311,meldungunbeklv=360,meldungblockschnitt=424, +meldungspfehler=419,meldungparallelanw=425,meldungfalscheartzk=434, +meldungunbekannt=126,trenner="�",leerespraefix=" ",leererblock=" ", +leerebloecke=" ",ausgzeichen="#",namenstrenner=", ",kzdoppeltbelegt= +" * ",kzfaecher="F",kznurneue="N",kzname="N",kzohneneue="O",kzkurse="K", +kzalle="A",kzart="A",kzstd="S",kzplbl="P",kzfaplbl="FP",kzfakeartkl="FKAk", +logtext1="Anw. 2.3.1 Umwahl ",text1=" """,text2=""" ",punkt=".",komma=", ", +ersteslistenfeld=2,erstesfachfeld=3,ersteskursfeld=42,anzbearbeingfelder=13, +anzlistenfelder=18,anzbearbzeilen=12,anzfeldereingang=8;TEXT VAR gewsj,aktsj +:="0000",akthj,gewjgst,gewhj,aktjgst,aktneue,aktwahl,aktname,aktvname, +aktgebdatum,aktfaecher,aktartkl,aktkurse,aktschueler,schuelergruppe, +schuelerliste,aktblock,alleplanbloecke:="",faecherbloecke,wahldaten,fach,art, +klausur,kennung,fehlerblock,allearten:=trenner,allefaecher:=trenner,block12, +block1,block2,alleklausurbez:="",praefix,kurse,pruefbloecke:=trenner, +logmeldung;INT VAR i,j,letztepos:=2,fstat:=0,aktlistennr,fachfeld:= +erstesfachfeld,artfeld:=16,klfeld:=17,kursfeld:=ersteskursfeld,aktplblindex:= +1,anfpos,aktbsseite:=1,letztesfeld,listenpos:=1,aktindex,ersterindex:= +ersterschueler;ROW anzbearbeingfelderROW 4TEXT VAR bearbrow;ROW +anzfeldereingangTEXT VAR eingangrow;ROW anzlistenfelderTEXT VAR aktliste; +BOOL VAR listenbearbeitung:=FALSE ,rechtsscrollen:=FALSE ,sperreok, +kopierfunktion:=FALSE ,scrollen:=FALSE ;WINDOW VAR w;initroweingang; +initrowbearb;PROC initroweingang:FOR iFROM 2UPTO anzfeldereingangREP +eingangrow(i):=""PER ;END PROC initroweingang;PROC initrowbearb:INT VAR i; +FOR iFROM 1UPTO anzbearbeingfelderREP bearbrow(i):=ROW 4TEXT :("","","","") +PER ;END PROC initrowbearb;PROC kurszuordnungundumwahlsek2anfang:aktplblindex +:=1;standardstartproc(eingangsmaske);gibeingangaus;infeld(1); +standardfelderausgeben;infeld(letztepos);standardnproc.gibeingangaus:FOR i +FROM 2UPTO anzfeldereingangREP standardmaskenfeld(eingangrow(i),i);IF +eingangrow(i)<>""THEN letztepos:=iFI PER .END PROC +kurszuordnungundumwahlsek2anfang;PROC kurszuordnungundumwahlbearbeiten: +listenbearbeitung:=FALSE ;kopierfunktion:=FALSE ;schuelerliste:=""; +standardmeldung(meldungwarten,"");merkeeingang;aktname:=eingangrow( +eingangfamname);aktvname:=eingangrow(eingangrufname);aktgebdatum:=konvdatum( +eingangrow(eingangdatum));prueffeld2bis5;IF fstat<>0THEN LEAVE +kurszuordnungundumwahlbearbeitenFI ;kurswahlinitialisieren(aktjgst,gewjgst, +gewhj,schuelergruppe,gewsj);kurswahlbasisholen(fstat);IF fstat<>0THEN +meldungausgeben(meldungserverfehler,einganggewjgst,1);LEAVE +kurszuordnungundumwahlbearbeitenELIF letzterschueler<ersterschuelerTHEN +meldungausgeben(meldungkeineschueler,einganggewjgst,1);LEAVE +kurszuordnungundumwahlbearbeitenFI ;kurswahlsperresetzen(kuwa2sperre,sperreok +);IF NOT sperreokTHEN meldungausgeben(meldungparallelanw,einganggewjgst,1); +LEAVE kurszuordnungundumwahlbearbeitenFI ;prueffeld6bis8;standardstartproc( +bearbmaske);standardkopfmaskeaktualisieren("Kurszuordnung für jetzige Jgst. " ++aktjgst+" in "+gewjgst+"."+gewhj);aktbsseite:=1;aktplblindex:=1; +schuelerbearbeiten;standardnproc.prueffeld6bis8:FOR iFROM eingangfamnameUPTO +eingangdatumREP IF standardmaskenfeld(i)=""THEN meldungausgeben( +meldungfeldfuellen,i,1);kurswahlsperrebeenden(kuwa2sperre);LEAVE +kurszuordnungundumwahlbearbeitenFI PER ;pruefexistschueler.pruefexistschueler +:aktfaecher:=wahldatenzumschueler(aktname,aktvname,aktgebdatum,kzfaecher);IF +dbstatus<>0THEN meldungausgeben(meldungunbekannt,eingangfamname,1); +kurswahlsperrebeenden(kuwa2sperre);LEAVE kurszuordnungundumwahlbearbeitenFI . +END PROC kurszuordnungundumwahlbearbeiten;PROC schuelerbearbeiten:INT VAR +kurspos,rowindex:=1;aktschueler:=aktname+namenstrenner+aktvname+namenstrenner ++aktgebdatum;initrowbearb;ermittlefaecherartklkurse;standardmaskenfeld(text( +aktschueler,laengename),bearbname);zeigplanblockkurszuordnung. +ermittlefaecherartklkurse:fachfeld:=erstesfachfeld;artfeld:=16;klfeld:=17; +kursfeld:=ersteskursfeld;kurspos:=1;aktfaecher:="";aktartkl:="";aktkurse:=""; +rowindex:=1;aktwahl:=wahldatenzumschueler(aktname,aktvname,aktgebdatum, +kzfakeartkl);IF dbstatus=1COR aktwahl=""THEN aktwahl:="";initrowbearb;FOR j +FROM 1UPTO anzbearbeingfelderREP standardmaskenfeld("",fachfeld); +standardmaskenfeld("",artfeld);standardmaskenfeld("",klfeld); +standardmaskenfeld("",kursfeld);fachfeldINCR 1;artfeldINCR 2;klfeldINCR 2; +kursfeldINCR 1;PER ;ELSE gibwahlausFI .gibwahlaus:WHILE kurspos<length( +aktwahl)REP fach:=subtext(aktwahl,kurspos,kurspos+1);kennung:=subtext(aktwahl +,kurspos+2,kurspos+5);aktfaecherCAT fach;aktkurseCAT kennung;fach:=compress( +fach);kennung:=compress(kennung);art:=compress(subtext(aktwahl,kurspos+6, +kurspos+7));klausur:=compress(aktwahlSUB (kurspos+8));standardmaskenfeld(fach +,fachfeld);standardmaskenfeld(art,artfeld);standardmaskenfeld(klausur,klfeld) +;standardmaskenfeld(kennung,kursfeld);bearbrow(rowindex):=ROW 4TEXT :(fach, +art,klausur,kennung);IF rowindex<anzbearbeingfelderTHEN rowindexINCR 1FI ; +fachfeldINCR 1;artfeldINCR 2;klfeldINCR 2;kursfeldINCR 1;kursposINCR +laengefakeartklPER ;IF rowindex<anzbearbeingfelderTHEN FOR jFROM rowindex +UPTO anzbearbeingfelderREP standardmaskenfeld("",fachfeld);standardmaskenfeld +("",artfeld);standardmaskenfeld("",klfeld);standardmaskenfeld("",kursfeld); +bearbrow(rowindex):=ROW 4TEXT :("","","","");IF rowindex<anzbearbeingfelder +THEN rowindexINCR 1;fachfeldINCR 1;artfeldINCR 2;klfeldINCR 2;kursfeldINCR 1; +FI PER FI .zeigplanblockkurszuordnung:alleplanbloecke:= +alleplanblockbezeichner;scrollen:=length(alleplanbloecke)>laengeplbleinesbs; +zeigbearbdaten(aktplblindex).END PROC schuelerbearbeiten;PROC zeigbearbdaten( +INT CONST planblocknr):INT VAR blockpos:=planblocknr*3-2;pruefbloecke:= +trenner;faecherbloecke:=wahldatenzumschueler(aktname,aktvname,aktgebdatum, +kzfaplbl);rechtsscrollen:=FALSE ;FOR iFROM 1UPTO anzbearbzeilenREP aktblock:= +subtext(alleplanbloecke,blockpos,blockpos+2);IF aktblock=""THEN scrollen:= +FALSE ;standardmaskenfeld("",i*4+51);standardmaskenfeld("",i*4+52); +standardmaskenfeld("",i*4+53);standardmaskenfeld("",i*4+54)ELSE +standardmaskenfeld(konvplanblock(aktblock),i*4+51);standardmaskenfeld( +planblockdaten(aktblock,kzstd),i*4+52);standardmaskenfeld("",i*4+53); +ermittlemoeglichekurse;blockposINCR 3;FI ;PER ; +kurszuordnungundumwahlkopierenvorbereiten;infeld(erstesfachfeld).END PROC +zeigbearbdaten;PROC ermittlemoeglichekurse:TEXT VAR kurse:=planblockdaten( +aktblock,kzkurse),ausgabekurse;INT VAR kurspos:=1,berhilfe:=aktbsseite* +laengekurseeinesbs;IF length(kurse)>berhilfeTHEN rechtsscrollen:=TRUE ;FI ; +kurse:=subtext(kurse,berhilfe-laengekurseeinesbs+1,berhilfe);konvkurse; +standardmaskenfeld(ausgabekurse,i*4+54).konvkurse:ausgabekurse:="";kurspos:=1 +;WHILE kurspos<length(kurse)REP ausgabekurseCAT subtext(kurse,kurspos,kurspos ++1);ausgabekurseCAT " ";ausgabekurseCAT subtext(kurse,kurspos+2,kurspos+5); +kursposINCR 6PER .END PROC ermittlemoeglichekurse;TEXT PROC konvplanblock( +TEXT CONST planblock):INT VAR blnr:=int(text(planblock,2));IF blnr<10THEN "0" ++text(blnr)+(planblockSUB 3)ELSE planblockFI END PROC konvplanblock;TEXT +PROC konvdatum(TEXT CONST datumohnepunkte):text(datumohnepunkte,2)+"."+ +subtext(datumohnepunkte,3,4)+"."+subtext(datumohnepunkte,5)END PROC konvdatum +;PROC kurszuordnungundumwahlspeichern(BOOL CONST speichern):BOOL VAR +aenderung:=FALSE ;TEXT VAR std,fa,ke;IF speichernTHEN +pruefundspeicheraenderungen;ELSE standardmeldung(meldungnspeichern,"");FI ; +naechsterbildschirm.naechsterbildschirm:IF listenbearbeitungTHEN IF listenpos +>length(schuelerliste)THEN kurswahlsperrebeenden(kuwa2sperre);enter(3)ELSE +kopierfunktion:=FALSE ;IF naechsterschuelerTHEN infeld(1);schuelerbearbeiten; +return(1)ELSE kurswahlsperrebeenden(kuwa2sperre);enter(3)FI FI ;ELSE +kurswahlsperrebeenden(kuwa2sperre);enter(2)FI .pruefundspeicheraenderungen: +standardmeldung(meldungpruefen,"");fachfeld:=erstesfachfeld;artfeld:=16; +klfeld:=17;kursfeld:=ersteskursfeld;aenderung:=FALSE ;wahldaten:="";FOR i +FROM 1UPTO anzbearbeingfelderREP infeld(fachfeld);fach:=standardmaskenfeld( +fachfeld);art:=standardmaskenfeld(artfeld);klausur:=standardmaskenfeld(klfeld +);kennung:=standardmaskenfeld(kursfeld);block12:=kursdaten(text(fach,2)+ +kennung,kzplbl);IF fach<>bearbrow(i)(1)COR art<>bearbrow(i)(2)COR klausur<> +bearbrow(i)(3)COR kennung<>bearbrow(i)(4)THEN aenderung:=TRUE FI ;IF fach<>"" +THEN IF art=""CAND kennung=""THEN meldungfeldfuellenausgebenELSE prueffachFI +ELIF art<>""COR kennung<>""THEN meldungfeldfachfuellenausgeben;LEAVE +kurszuordnungundumwahlspeichernFI ;IF art<>""THEN pruefartFI ;IF kennung<>"" +THEN pruefkennung;pruefartzumkurs;IF block12<>leerebloeckeTHEN +pruefkursueberschneidungFI FI ;IF fach<>""THEN wahldatenCAT text(klausur,1); +wahldatenCAT text(art,2);wahldatenCAT text(fach,2);wahldatenCAT text(kennung, +4);wahldatenCAT text(block12,6)FI ;fachfeldINCR 1;artfeldINCR 2;klfeldINCR 2; +kursfeldINCR 1PER ;IF aenderungTHEN standardmeldung(meldungspeichern,""); +schuelerwahleintragen(aktname,aktvname,aktgebdatum,wahldaten);IF dbstatus<>0 +THEN meldungausgeben(meldungspfehler,bearbfaecher,1);LEAVE +kurszuordnungundumwahlspeichernELSE logbucheintragvornehmen;kurswahl2sichern( +fstat)FI FI .prueffach:IF allefaecher=trennerTHEN holepruefdatenFI ;IF pos( +allefaecher,trenner+fach+trenner)=0THEN meldungausgeben(meldungfalschesfach, +fachfeld,1);LEAVE kurszuordnungundumwahlspeichernFI .pruefart:IF pos( +allearten,trenner+art+trenner)=0THEN meldungausgeben(meldungfalscheart, +artfeld,1);LEAVE kurszuordnungundumwahlspeichernFI .pruefkennung:std:= +compress(kursdaten(text(fach,2)+text(kennung,4),kzart));IF dbstatus<>0THEN +standardmeldung(meldungunbeklv,text(fach,2)+kennung+ausgzeichen);infeld( +kursfeld);return(1);LEAVE kurszuordnungundumwahlspeichernFI .pruefartzumkurs: +IF art<>""CAND std<>artCAND std<>""THEN meldungfalscheartausgeben;LEAVE +kurszuordnungundumwahlspeichernFI .pruefkursueberschneidung:TEXT VAR kuform; +block1:=text(block12,3);block2:=subtext(block12,4);FOR jFROM 1UPTO i-1REP fa +:=standardmaskenfeld(erstesfachfeld+j-1);ke:=standardmaskenfeld( +ersteskursfeld+j-1);kuform:=text(text(fa,2)+ke,laengefake);IF fa<>""CAND ke<> +""THEN IF kuform<>text(text(fach,2)+kennung,laengefake)THEN IF +planblockschnitt(kuform)THEN meldungblockschnittausgeben;LEAVE +kurszuordnungundumwahlspeichernFI FI FI PER ;FOR jFROM i+1UPTO +anzbearbeingfelderREP fa:=standardmaskenfeld(erstesfachfeld+j-1);ke:= +standardmaskenfeld(ersteskursfeld+j-1);kuform:=text(text(fa,2)+ke,laengefake) +;IF fa<>""CAND ke<>""THEN IF kuform<>text(text(fach,2)+kennung,laengefake) +THEN IF planblockschnitt(kuform)THEN meldungblockschnittausgeben;LEAVE +kurszuordnungundumwahlspeichernFI FI FI PER .meldungfeldfuellenausgeben: +meldungausgeben(meldungfeldfuellen,artfeld,1).meldungfeldfachfuellenausgeben: +meldungausgeben(meldungfeldfuellen,fachfeld,1).meldungfalscheartausgeben: +standardmeldung(meldungfalscheartzk,text(fach,2)+kennung+ausgzeichen+std+ +ausgzeichen);infeld(artfeld);return(1).meldungblockschnittausgeben: +standardmeldung(meldungblockschnitt,compress(fehlerblock)+ausgzeichen);infeld +(kursfeld);return(1).END PROC kurszuordnungundumwahlspeichern;BOOL PROC +naechsterschueler:aktindex:=int(subtext(schuelerliste,listenpos,listenpos+2)) +;belegeglobalevariablen(aktindex);listenposINCR 4;aktname<>""END PROC +naechsterschueler;BOOL PROC planblockschnitt(TEXT CONST andererkurs):TEXT +VAR bl1,bl2,bl12;IF compress(andererkurs)=""THEN LEAVE planblockschnittWITH +FALSE ELIF block1=leererblockCAND block2=leererblockTHEN LEAVE +planblockschnittWITH FALSE FI ;bl12:=kursdaten(andererkurs,kzplbl);IF +dbstatus=1THEN LEAVE planblockschnittWITH FALSE FI ;IF bl12=leerebloeckeTHEN +LEAVE planblockschnittWITH FALSE FI ;IF block1<>leererblockTHEN bl1:=text( +bl12,3);IF block1ganzerblockCOR bl1ganzerblockTHEN block1:=text(block1,2);bl1 +:=text(bl12,2);ELSE bl1:=text(bl12,3)FI ;IF block1=bl1COR block1=bl2THEN +fehlerblock:=block1;LEAVE planblockschnittWITH TRUE FI ;FI ;IF block2<> +leererblockTHEN bl2:=subtext(bl12,4);IF block2ganzerblockCOR bl2ganzerblock +THEN block2:=text(block2,2);bl2:=subtext(bl12,4,5)ELSE bl2:=subtext(bl12,4) +FI ;IF block2=bl1COR block2=bl2THEN fehlerblock:=block2;LEAVE +planblockschnittWITH TRUE FI ;FI ;FALSE .block1ganzerblock:(block1SUB 3)=" ". +bl1ganzerblock:(bl1SUB 3)=" ".block2ganzerblock:(block2SUB 3)=" ". +bl2ganzerblock:(bl2SUB 3)=" ".END PROC planblockschnitt;PROC holepruefdaten: +allefaecher:=trenner;allearten:=trenner;inittupel(dnrfaecher); +statleseschleife(dnrfaecher,"","",fnrffach,fnrffach,PROC sammleallefaecher); +inittupel(dnrschluessel);statleseschleife(dnrschluessel,artbestand,"", +fnrschlsachgebiet,fnrschlschluessel,PROC sammleallearten)END PROC +holepruefdaten;PROC sammleallefaecher(BOOL VAR b):allefaecherCAT wert( +fnrffach);allefaecherCAT trennerEND PROC sammleallefaecher;PROC +sammleallearten(BOOL VAR b):IF wert(fnrschlsachgebiet)>artbestandCOR dbstatus +<>0THEN b:=TRUE ELSE alleartenCAT wert(fnrschlschluessel);alleartenCAT +trenner;alleartenCAT text(wert(fnrschlschluessel),2);alleartenCAT trennerFI +END PROC sammleallearten;PROC kurszuordnungundumwahlkurselisten:TEXT VAR +kursliste,liste,ausgabeart;INT VAR aktfeld;kursliste:="";aktfeld:=infeld;w:= +startwindow(20,23,77,1);liste:="";standardmeldung(meldunglistezeigen,"");#IF +menuedraussen08.02.91THEN reorganizescreenFI ;#fuelleliste;infeld(1); +standardfelderausgeben;open(w);auskunfterteilung(liste,w,FALSE ); +reorganizescreen;setlasteditvalues;infeld(aktfeld);return(1).fuelleliste: +holklausurkuerzel;listeCAT "Zusammensetzung der Kurse";listeCAT +auskunftstextende;listeCAT " ";listeCAT auskunftstextende;listeCAT +"Fach Art Kurs Schüler Klausur";listeCAT auskunftstextende;listeCAT +" ges. ";FOR iFROM 1UPTO 6REP IF (alleklausurbezSUB i)<>"" +THEN listeCAT text((alleklausurbezSUB i),5)FI PER ;listeCAT auskunftstextende +;listeallerkurse.holklausurkuerzel:IF alleklausurbez=""THEN statleseschleife( +dnrschluessel,abiklbestand,"",fnrschlsachgebiet,fnrschlschluessel,PROC +sammlealleabikl)FI .listeallerkurse:belegefachart;betrachtekurse;anfpos:=1; +praefix:=text(fach,5)+text(ausgabeart,4);WHILE anfpos<length(kursliste)REP +listeCAT praefix;IF praefix<>""THEN praefix:=leerespraefixFI ;kennung:= +subtext(kursliste,anfpos,anfpos+3);listeCAT text(kennung,6);listeCAT text( +anzahlschuelermitwahl(fach,kennung,"",""),3);listeCAT " ";FOR iFROM 1UPTO 6 +REP IF (alleklausurbezSUB i)<>""THEN listeCAT text(anzahlschuelermitwahl(fach +,kennung,ausgabeart,(alleklausurbezSUB i)),5)FI PER ;listeCAT +auskunftstextende;anfposINCR 4PER ;listeCAT auskunftstextende.betrachtekurse: +anfpos:=1;kursliste:="";kurse:=allekurse;WHILE anfpos<>0REP anfpos:=pos(kurse +,fach,anfpos);IF anfposMOD 10=1THEN IF subtext(kurse,anfpos,anfpos+1)=text( +fach,2)CAND subtext(kurse,anfpos+8,anfpos+9)=text(art,2)THEN kurslisteCAT +subtext(kurse,anfpos+2,anfpos+5)FI FI ;IF anfpos<>0THEN anfposINCR 1FI PER ; +IF kursliste=""THEN ausgabeart:="";ermittleallekursezumfachELSE ausgabeart:= +artFI .ermittleallekursezumfach:anfpos:=1;kursliste:="";WHILE anfpos<>0REP +anfpos:=pos(kurse,fach,anfpos);IF anfposMOD 10=1THEN IF subtext(kurse,anfpos, +anfpos+1)=fachTHEN kurslisteCAT subtext(kurse,anfpos+2,anfpos+5)FI FI ;IF +anfpos<>0THEN anfposINCR 1FI PER .belegefachart:aktfeld:=infeld;IF aktfeld>2 +CAND aktfeld<16THEN fach:=standardmaskenfeld(aktfeld);art:=standardmaskenfeld +(((aktfeld-2)*2-1)+15)ELIF aktfeld>15CAND aktfeld<42THEN fach:= +standardmaskenfeld(aktfeldDIV 2-5);IF aktfeldMOD 2=0THEN art:= +standardmaskenfeld(aktfeld)ELSE art:=standardmaskenfeld(aktfeld-1)FI ELSE +fach:=standardmaskenfeld(aktfeld-39);art:=standardmaskenfeld((aktfeld-39)*2+ +10)FI ;art:=compress(art).END PROC kurszuordnungundumwahlkurselisten;PROC +kurszuordnungundumwahllistebeenden:kurswahlsperrebeenden(kuwa2sperre);enter(2 +)END PROC kurszuordnungundumwahllistebeenden;PROC sammlealleabikl(BOOL VAR b) +:IF wert(fnrschlsachgebiet)>abiklbestandCOR dbstatus<>0THEN b:=TRUE ELSE +alleklausurbezCAT wert(fnrschlschluessel)FI END PROC sammlealleabikl;PROC +kurszuordnungundumwahlkopierenvorbereiten:TEXT VAR fa,ke,f,k,aktplbl;INT VAR +z;TEXT VAR var:="",neuerkurseintrag:="";IF pruefbloecke=trennerTHEN +ermittlegezeigtebloecke;FI ;FOR jFROM 1UPTO anzbearbeingfelderREP fa:= +standardmaskenfeld(bearbfaecher+j-1);ke:=standardmaskenfeld(bearbkurse+j-1); +IF altedatenleerundneuedatenTHEN neuedateneintragenELIF +altedatenundneuedatenleerTHEN altedatenloeschenELIF altedatenundneuedaten +THEN altedatenloeschenundneuedateneintragenFI ;bearbrow(j)(1):=fa;bearbrow(j) +(4):=kePER ;standardfelderausgeben.altedatenleerundneuedaten:bearbrow(j)(4)= +""CAND fa<>""CAND ke<>"".altedatenundneuedatenleer:bearbrow(j)(1)<>""CAND +bearbrow(j)(4)<>""CAND ke="".altedatenundneuedaten:bearbrow(j)(1)<>""CAND +bearbrow(j)(4)<>""CAND fa<>""CAND ke<>"".ermittlegezeigtebloecke:aktplbl:= +subtext(alleplanbloecke,aktplblindex*3-2,(aktplblindex+anzbearbzeilen-1)*3); +pruefbloecke:=trenner;FOR jFROM 1UPTO length(aktplbl)DIV 3REP pruefbloecke +CAT subtext(aktplbl,j*3-2,j*3);pruefbloeckeCAT trennerPER .neuedateneintragen +:faecherbloecke:=kursdaten(text(fa,2)+ke,kzplbl);IF faecherbloecke= +leerebloeckeTHEN LEAVE neuedateneintragenFI ;aktplbl:=text(faecherbloecke,3); +IF aktplbl<>leererblockTHEN i:=pos(pruefbloecke,trenner+aktplbl+trenner);IF i +>0THEN i:=iDIV 4+1;tragneuenkurseinFI FI ;aktplbl:=subtext(faecherbloecke,4); +IF aktplbl<>leererblockTHEN i:=pos(pruefbloecke,trenner+aktplbl+trenner);IF i +>0THEN i:=iDIV 4+1;tragneuenkurseinFI FI .tragneuenkursein:IF +standardmaskenfeld(i*4+53)<>""CAND standardmaskenfeld(i*4+53)<>text(fa,2)+ +text(ke,4)THEN standardmaskenfeld(kzdoppeltbelegt,i*4+53)ELSE +standardmaskenfeld(text(fa,2)+text(ke,4),i*4+53)FI .altedatenloeschen: +loescheintrag.altedatenloeschenundneuedateneintragen:IF bearbrow(j)(1)<>fa +COR bearbrow(j)(4)<>keTHEN loescheintragFI ;neuedateneintragen.loescheintrag: +faecherbloecke:=kursdaten(text(bearbrow(j)(1),2)+bearbrow(j)(4),kzplbl);IF +faecherbloecke=leerebloeckeTHEN LEAVE loescheintragFI ;aktplbl:=text( +faecherbloecke,3);IF aktplbl<>leererblockTHEN i:=pos(pruefbloecke,trenner+ +aktplbl+trenner);IF i>0THEN i:=iDIV 4+1;IF standardmaskenfeld(i*4+53)= +kzdoppeltbelegtTHEN traganderenkurseinELSE standardmaskenfeld("",i*4+53)FI +FI FI ;aktplbl:=subtext(faecherbloecke,4);IF aktplbl<>leererblockTHEN i:=pos( +pruefbloecke,trenner+aktplbl+trenner);IF i>0THEN i:=iDIV 4+1;IF +standardmaskenfeld(i*4+53)=kzdoppeltbelegtTHEN traganderenkurseinELSE +standardmaskenfeld("",i*4+53)FI FI FI .traganderenkursein:neuerkurseintrag:= +"";FOR zFROM 1UPTO j-1REP f:=standardmaskenfeld(bearbfaecher+z-1);IF f<>"" +THEN k:=standardmaskenfeld(bearbkurse+z-1);IF k<>""THEN var:=text(f,2)+k;var +:=kursdaten(var,kzplbl);IF text(var,3)=aktplblCOR subtext(var,4)=aktplblTHEN +IF neuerkurseintrag=""THEN neuerkurseintrag:=text(f,2)+text(k,4)ELSE +standardmaskenfeld(kzdoppeltbelegt,i*4+53);LEAVE traganderenkurseinFI FI FI +FI PER ;FOR zFROM j+1UPTO anzbearbeingfelderREP f:=standardmaskenfeld( +bearbfaecher+z-1);IF f<>""THEN k:=standardmaskenfeld(bearbkurse+z-1);IF k<>"" +THEN var:=text(f,2)+k;var:=kursdaten(var,kzplbl);IF text(var,3)=aktplblCOR +subtext(var,4)=aktplblTHEN IF neuerkurseintrag=""THEN neuerkurseintrag:=text( +f,2)+text(k,4)ELSE standardmaskenfeld(kzdoppeltbelegt,i*4+53);LEAVE +traganderenkurseinFI FI FI FI PER ;IF neuerkurseintrag=""THEN +standardmaskenfeld("",i*4+53)ELSE tragkursausehemdoppelbeleinFI . +tragkursausehemdoppelbelein:standardmaskenfeld(neuerkurseintrag,i*4+53).END +PROC kurszuordnungundumwahlkopierenvorbereiten;PROC +kurszuordnungundumwahlkopieren:kopierfunktion:=TRUE ; +kurszuordnungundumwahlkopierenvorbereiten;kopierfunktion:=FALSE ;return(1) +END PROC kurszuordnungundumwahlkopieren;PROC +kurszuordnungundumwahlrechtehaelfte:INT VAR blockpos:=aktplblindex*3-2, +aktfeld:=infeld;IF rechtsscrollenTHEN aktbsseiteINCR 1; +zeigweiteremoeglichekurseELSE letztesfeld:=infeld;meldungausgeben( +meldungkeinblaettern,letztesfeld,1)FI .zeigweiteremoeglichekurse:FOR iFROM 1 +UPTO anzbearbzeilenREP aktblock:=subtext(alleplanbloecke,blockpos,blockpos+2) +;IF aktblock=""THEN standardmaskenfeld("",i*4+54)ELSE ermittlemoeglichekurse; +blockposINCR 3;FI ;PER ;infeld(1);standardfelderausgeben;infeld(aktfeld); +return(1).END PROC kurszuordnungundumwahlrechtehaelfte;PROC +kurszuordnungundumwahllinkehaelfte:INT VAR blockpos:=aktplblindex*3-2,aktfeld +:=infeld;IF aktbsseite<>1THEN rechtsscrollen:=TRUE ;aktbsseiteDECR 1; +zeigweiteremoeglichekurseELSE letztesfeld:=infeld;meldungausgeben( +meldungkeinblaettern,letztesfeld,1)FI .zeigweiteremoeglichekurse:FOR iFROM 1 +UPTO anzbearbzeilenREP aktblock:=subtext(alleplanbloecke,blockpos,blockpos+2) +;IF aktblock=""THEN standardmaskenfeld("",i*4+54)ELSE ermittlemoeglichekurse; +blockposINCR 3;FI ;PER ;infeld(1);standardfelderausgeben;infeld(aktfeld); +return(1).END PROC kurszuordnungundumwahllinkehaelfte;PROC +kurszuordnungundumwahlvorwaerts:INT VAR aktfeld:=infeld;IF scrollenTHEN +aktplblindexINCR anzbearbzeilen;zeigbearbdaten(aktplblindex);infeld(aktfeld); +return(1)ELSE letztesfeld:=infeld;meldungausgeben(meldungkeinblaettern, +letztesfeld,1)FI END PROC kurszuordnungundumwahlvorwaerts;PROC +kurszuordnungundumwahlrueckwaerts:INT VAR aktfeld:=infeld;IF aktplblindex>1 +THEN scrollen:=TRUE ;aktplblindexDECR anzbearbzeilen;zeigbearbdaten( +aktplblindex);infeld(aktfeld);return(1)ELSE letztesfeld:=infeld; +meldungausgeben(meldungkeinblaettern,letztesfeld,1)FI END PROC +kurszuordnungundumwahlrueckwaerts;PROC kurszuordnungundumwahlbeenden: +kurswahlsperrebeenden(kuwa2sperre);IF listenbearbeitungTHEN enter(3)ELSE +enter(2)FI END PROC kurszuordnungundumwahlbeenden;BOOL PROC datumkorrekt: +standardpruefe(6,eingangdatum,1,1,"",fstat);fstat=0END PROC datumkorrekt; +PROC prueffeld2bis5:fstat:=0;IF aktsj="0000"THEN aktsj:=schulkenndatum( +schuljahr);akthj:=schulkenndatum(halbjahr)FI ;gewjgst:=eingangrow( +einganggewjgst);gewhj:=eingangrow(einganggewhj);aktjgst:=eingangrow( +eingangaktjgst);aktneue:=eingangrow(eingangaktneue);prueffeld2;prueffeld3; +prueffeld4und5;prueffeld4;IF fstat=1THEN LEAVE prueffeld2bis5FI ;prueffeld5. +prueffeld2:i:=int(gewjgst);IF gewjgst=""THEN meldungausgeben( +meldungfeldfuellen,einganggewjgst,1);LEAVE prueffeld2bis5ELIF i<11COR i>14 +THEN meldungausgeben(meldungfalschejgst,einganggewjgst,1);LEAVE +prueffeld2bis5FI .prueffeld3:i:=int(gewhj);IF gewhj=""THEN meldungausgeben( +meldungfeldfuellen,einganggewhj,1);LEAVE prueffeld2bis5ELIF i<1COR i>2THEN +meldungausgeben(meldungfalscheshj,einganggewhj,1);LEAVE prueffeld2bis5FI . +prueffeld4und5:IF aktjgst=""CAND aktneue=""THEN meldungausgeben( +meldungpraezisieren,eingangaktjgst,1);LEAVE prueffeld2bis5ELIF aktjgst="" +CAND aktneue<>""THEN schuelergruppe:=kznurneueELIF aktjgst<>""CAND aktneue="" +THEN schuelergruppe:=kzohneneueELSE schuelergruppe:=kzalleFI .prueffeld4:i:= +int(aktjgst);IF i<10COR i>14THEN meldungausgeben(meldungfalschejgst, +einganggewjgst,1)ELIF i>int(gewjgst)THEN meldungausgeben(meldungandereauswahl +,einganggewjgst,1)ELIF i=int(gewjgst)THEN IF gewhj="1"CAND akthj="2"THEN +meldungausgeben(meldungandereauswahl,einganggewhj,1)FI FI .prueffeld5:i:=int( +aktneue);IF aktneue<>""CAND aktjgst<>""THEN IF i-1<>int(aktjgst)THEN +meldungausgeben(meldungandereauswahl,eingangaktneue,1)FI ELIF aktneue<>"" +CAND aktjgst=""THEN IF i<11COR i>14THEN meldungausgeben(meldungfalschejgst, +eingangaktneue,1)ELIF i+1>int(gewjgst)THEN meldungausgeben( +meldungandereauswahl,eingangaktneue,1)ELIF i-1=int(gewjgst)THEN IF gewhj="1" +CAND akthj="2"THEN meldungausgeben(meldungandereauswahl,einganggewhj,1)FI FI +FI .END PROC prueffeld2bis5;PROC kurszuordnungundumwahllistezeigen: +standardmeldung(meldungwarten,"");merkeeingang;prueffeld2bis5;IF fstat<>0 +THEN LEAVE kurszuordnungundumwahllistezeigenELSE standardmeldung( +meldunglistezeigen,"");kurswahlinitialisieren(aktjgst,gewjgst,gewhj, +schuelergruppe,gewsj);kurswahlbasisholen(fstat);IF fstat<>0THEN +meldungausgeben(meldungserverfehler,einganggewjgst,1);LEAVE +kurszuordnungundumwahllistezeigenELIF letzterschueler<ersterschuelerTHEN +meldungausgeben(meldungkeineschueler,einganggewjgst,1);LEAVE +kurszuordnungundumwahllistezeigenFI ;kurswahlsperresetzen(kuwa2sperre, +sperreok);IF NOT sperreokTHEN letztesfeld:=infeld;meldungausgeben( +meldungparallelanw,letztesfeld,1);LEAVE kurszuordnungundumwahllistezeigenFI ; +suchindices;zeigelisteFI .zeigeliste:schuelerliste:=trenner;standardstartproc +(listenmaske);zeigliste(ersterindex);standardnproc.END PROC +kurszuordnungundumwahllistezeigen;PROC zeigliste(INT CONST zeilennr): +aktlistennr:=zeilennr;infeld(ersteslistenfeld);FOR iFROM 1UPTO +anzlistenfelderREP aktname:=wahldatenzumindex(zeilennr+i-1,kzname);changeall( +aktname,trenner,namenstrenner);standardmaskenfeld(aktname,i*2+1);IF pos( +schuelerliste,trenner+text(aktlistennr+i-1,3)+trenner)>0THEN +standardmaskenfeld("x",i*2);aktliste(i):="x"ELSE standardmaskenfeld("",i*2); +aktliste(i):=""FI PER ;infeld(1);standardfelderausgeben;infeld( +ersteslistenfeld).END PROC zeigliste;PROC suchindices:TEXT VAR aktname; +aktname:=eingangrow(eingangfamname);IF aktname=""THEN ersterindex:= +ersterschuelerELSE vergleichnamenFI .vergleichnamen:aktname:=text(aktname, +laengefamname);aktnameCAT trenner;aktnameCAT text(eingangrow(eingangrufname), +laengevname);aktnameCAT trenner;aktnameCAT text(eingangrow(eingangdatum), +laengegebdat);aktnameCAT trenner;FOR iFROM ersterschuelerUPTO letzterschueler +REP IF wahldatenzumindex(i,kzname)>=aktnameTHEN ersterindex:=i;LEAVE +suchindicesFI PER ;ersterindex:=letzterschueler.END PROC suchindices;PROC +kurszuordnungundumwahllisteblaettern(INT CONST aktion):INT VAR +ersterschuelerletzterbs,aktfeld:=infeld;IF aktion=1THEN IF aktlistennr<> +ersterschuelerTHEN analysierekennzeichnungen;ersterindex:=ersterschueler; +zeigliste(ersterindex);return(1)ELSE fehlermeldungaktionnichtmöglichFI ELIF +aktion=2THEN ersterschuelerletzterbs:=letzterschueler-anzlistenfelder+1;IF +aktlistennr<ersterschuelerletzterbsCOR aktlistennr>ersterschuelerletzterbs +THEN analysierekennzeichnungen;zeigliste(ersterschuelerletzterbs);return(1) +ELIF aktlistennr=ersterschuelerletzterbsTHEN fehlermeldungaktionnichtmöglich +FI ELIF aktion=3THEN IF aktlistennr>=letzterschueler-anzlistenfelder+1THEN +fehlermeldungaktionnichtmöglichELSE analysierekennzeichnungen;zeigliste( +aktlistennr+anzlistenfelder);return(1)FI ELIF aktion=4THEN IF aktlistennr= +ersterindexTHEN fehlermeldungaktionnichtmöglichELSE analysierekennzeichnungen +;IF (aktlistennr-anzlistenfelder+1)<ersterindexTHEN zeigliste(ersterindex) +ELSE zeigliste(aktlistennr-anzlistenfelder)FI ;return(1)FI FI . +fehlermeldungaktionnichtmöglich:meldungausgeben(meldungkeinblaettern,aktfeld, +1);LEAVE kurszuordnungundumwahllisteblaettern.END PROC +kurszuordnungundumwahllisteblaettern;PROC analysierekennzeichnungen:FOR i +FROM 1UPTO anzlistenfelderREP IF standardmaskenfeld(i*2)<>aktliste(i)THEN +schuelerlisteCAT text(aktlistennr+i-1,3);schuelerlisteCAT trennerFI PER .END +PROC analysierekennzeichnungen;PROC kurszuordnungundumwahllistebearbeiten: +listenpos:=1;listenbearbeitung:=TRUE ;kopierfunktion:=FALSE ; +analysierekennzeichnungen;IF schuelerliste=trennerTHEN kurswahlsperrebeenden( +kuwa2sperre);enter(2);LEAVE kurszuordnungundumwahllistebearbeitenELSE +schuelerliste:=subtext(schuelerliste,2)FI ;standardstartproc(bearbmaske); +standardkopfmaskeaktualisieren("Kurszuordnung für jetzige Jgst. "+aktjgst+ +" in "+gewjgst+"."+gewhj);aktbsseite:=1;aktplblindex:=1;aktindex:=int(subtext +(schuelerliste,listenpos,listenpos+2));belegeglobalevariablen(aktindex); +schuelerbearbeiten;standardnproc;listenposINCR 4.END PROC +kurszuordnungundumwahllistebearbeiten;PROC belegeglobalevariablen(INT CONST +index):TEXT VAR iddaten:=wahldatenzumindex(index,kzname);INT VAR trenner1pos +:=pos(iddaten,trenner),trenner2pos:=pos(iddaten,trenner,trenner1pos+1);IF +dbstatus=0THEN aktname:=text(iddaten,trenner1pos-1);aktvname:=subtext(iddaten +,trenner1pos+1,trenner2pos-1);aktgebdatum:=subtext(iddaten,trenner2pos+1); +ELSE aktname:="";aktvname:="";aktgebdatum:=""FI ;eingangrow(eingangfamname):= +aktname;eingangrow(eingangrufname):=aktvname;eingangrow(eingangdatum):= +datumrekonversion(aktgebdatum)END PROC belegeglobalevariablen;PROC +meldungausgeben(INT CONST meldung,gewfeld,gewruecksprung):fstat:=1; +standardmeldung(meldung,"");infeld(gewfeld);return(gewruecksprung)END PROC +meldungausgeben;PROC merkeeingang:FOR iFROM 2UPTO anzfeldereingangREP +eingangrow(i):=standardmaskenfeld(i)PER END PROC merkeeingang;PROC +logbucheintragvornehmen:logmeldung:=logtext1;logmeldungCAT gewjgst;logmeldung +CAT punkt;logmeldungCAT gewhj;logmeldungCAT text1;logmeldungCAT aktname; +logmeldungCAT komma;logmeldungCAT aktvname;logmeldungCAT komma;logmeldungCAT +aktgebdatum;logmeldungCAT text2;logeintrag(logmeldung)END PROC +logbucheintragvornehmen;END PACKET +kurszuordnungundumwahlfuereinzelneschuelersek2 + diff --git a/app/schulis/2.2.1/src/2.kw anschr kurslisten sek2 b/app/schulis/2.2.1/src/2.kw anschr kurslisten sek2 new file mode 100644 index 0000000..2f79a1b --- /dev/null +++ b/app/schulis/2.2.1/src/2.kw anschr kurslisten sek2 @@ -0,0 +1,90 @@ +PACKET kwanschrkurslistensek2DEFINES kursliauskunfteingang, +kursliauskunftstarten,kursliauskunftsonderwerte,kursliauskunftscanbedingung, +kursliauskunftdruckdateibauen:LET swkurs=520,swanrede=521,swlehrer=522, +swklausur=523,swname=524,swvorname=525,swgebdat=526,maske= +"ms anschr kwkursli sek2 eingang",fnrjgst=2,fnrfach=3,fnrkennung=4,fnrakthj=5 +,fnrgeplhj=6,fnrausgbs=7,fnrausgdr=8,niltext="",blank=" ",null=0,satztrenner= +"$",feldtrenner="�",mnrbittewarten=69,mnrbittepraeziser=129,mnrkeinekwdatenda +=406,mnrjgstfalsch=404;INT VAR mnrallgemein;TEXT CONST dateimitvordruck1:= +"vordruck1 kursli kopfueb",dateimitvordruck2:="vordruck2 kursli zeile";INT +VAR index,status,dbstatusgemerkt,fehler,zeilenzahl,zusatzzeilen, +zeilenhilfszahl,anzahlsaetze,satzanfpos,feldpos1,feldpos2;TEXT VAR hj, +fuerkwsj,jgst,fachkennung,fach,kennung,kwdaten,kurs,anredetext,lehrer;BOOL +VAR bestfach,bildschirmausgabe,akthjgewaehlt,hilfsdateida;PROC +kursliauskunfteingang:standardvproc(maske)END PROC kursliauskunfteingang; +PROC kursliauskunftstarten:bestfach:=FALSE ;standardpruefe(5,fnrausgbs, +fnrausgdr,null,niltext,status);IF status<>0THEN infeld(status);return(1)ELSE +standardpruefe(5,fnrakthj,fnrgeplhj,null,niltext,status);IF status<>0THEN +infeld(status);return(1)ELSE bildschirmausgabe:=standardmaskenfeld(fnrausgdr) +=niltext;akthjgewaehlt:=standardmaskenfeld(fnrgeplhj)=niltext;jgst:= +standardmaskenfeld(fnrjgst);fach:=standardmaskenfeld(fnrfach);kennung:= +standardmaskenfeld(fnrkennung);IF weiterepruefungenokTHEN startenausfuehren +ELSE standardmeldung(mnrallgemein,niltext);return(1)FI ;FI ;FI ;. +weiterepruefungenok:standardpruefe(2,fnrjgst,null,null,niltext,status);IF +status<>0THEN infeld(fnrjgst);mnrallgemein:=mnrjgstfalsch;LEAVE +weiterepruefungenokWITH FALSE FI ;IF int(jgst)<11COR int(jgst)>13THEN infeld( +fnrjgst);mnrallgemein:=mnrjgstfalsch;LEAVE weiterepruefungenokWITH FALSE FI ; +IF (fach=niltextAND kennung<>niltext)THEN infeld(fnrfach);mnrallgemein:= +mnrbittepraeziser;LEAVE weiterepruefungenokWITH FALSE FI ;IF (fach<>niltext +AND kennung=niltext)THEN infeld(fnrkennung);mnrallgemein:=mnrbittepraeziser; +LEAVE weiterepruefungenokWITH FALSE FI ;IF NOT kwdatenraumokTHEN infeld( +fnrjgst);mnrallgemein:=mnrkeinekwdatenda;LEAVE weiterepruefungenokWITH FALSE +FI ;inittupel(dnrlehrveranstaltungen);putwert(fnrlvsj,fuerkwsj);putwert( +fnrlvhj,hj);putwert(fnrlvjgst,jgst);putwert(fnrlvfachkennung,text(fach,2)+ +kennung);IF fach<>niltextAND kennung<>niltextTHEN bestfach:=TRUE ;search( +dnrlehrveranstaltungen,TRUE );IF dbstatus<>0THEN mnrallgemein:= +mnrkeinekwdatenda;LEAVE weiterepruefungenokWITH FALSE FI ;ELSE search( +dnrlehrveranstaltungen,FALSE );IF dbstatus<>0COR wert(fnrlvjgst)<>jgstCOR +wert(fnrlvhj)<>hjCOR wert(fnrlvsj)<>fuerkwsjTHEN mnrallgemein:= +mnrkeinekwdatenda;LEAVE weiterepruefungenokWITH FALSE FI ;FI ;kurs:=text(fach +,2)+kennung;TRUE .kwdatenraumok:hj:=schulkenndatum("Schulhalbjahr");IF +akthjgewaehltTHEN kurswahlinitialisieren(jgst,jgst,hj,niltext,fuerkwsj)ELSE +IF hj="1"THEN hj:="2"ELSE hj:="1";jgst:=text(int(jgst)+1);FI ; +kurswahlinitialisieren(jgst,jgst,hj,niltext,fuerkwsj)FI ;kurswahlbasisholen( +fehler);fehler=0.startenausfuehren:setzesonderwerteschulkenndaten;IF bestfach +THEN index:=ixlvsjhjkennELSE index:=dnrlehrveranstaltungenFI ;standardmeldung +(mnrbittewarten,niltext);zusammengesetztesanschreiben(index,bildschirmausgabe +,FALSE ,BOOL PROC kursliauskunftsonderwerte,BOOL PROC +kursliauskunftscanbedingung,TEXT PROC kursliauskunftdruckdateibauen)END PROC +kursliauskunftstarten;BOOL PROC kursliauskunftscanbedingung:BOOL VAR ok;IF +bestfachTHEN ok:=dbstatus=0AND jgst=wert(fnrlvjgst)AND kurs=wert( +fnrlvfachkennung)ELSE ok:=dbstatus=0AND jgst=wert(fnrlvjgst)FI ;okEND PROC +kursliauskunftscanbedingung;BOOL PROC kursliauskunftsonderwerte:BOOL VAR +schuelerda:=FALSE ;initialisieresonderwerte;fachkennung:=wert( +fnrlvfachkennung);adressat(fachkennung);fach:=subtext(fachkennung,1,2); +kennung:=subtext(fachkennung,3,6);dbstatusgemerkt:=dbstatus;kwdaten:= +schuelerundklausur(fach,kennung,niltext);IF length(kwdaten)<>0THEN schuelerda +:=TRUE ;setzesonderwert(swkurs,wert(fnrlvjgst)+blank+fach+blank+kennung); +inittupel(dnrlehrer);putwert(fnrlparaphe,wert(fnrlvparaphe));search(dnrlehrer +,TRUE );IF dbstatus=0THEN lehrer:=wert(fnrlamtsbeztitel);lehrerCAT blank; +lehrerCAT wert(fnrlzusatz);lehrerCAT blank;lehrerCAT wert(fnrlfamname);IF +wert(fnrlgeschlecht)="m"THEN anredetext:="Herr "ELSE anredetext:="Frau "FI ; +FI ;setzesonderwert(swanrede,anredetext);setzesonderwert(swlehrer,lehrer); +dbstatus(dbstatusgemerkt);FI ;dbstatus=0AND schuelerdaEND PROC +kursliauskunftsonderwerte;TEXT PROC kursliauskunftdruckdateibauen:LET +druckdatei="liste.1",hilfsdatei="hilfsdatei";vordruckeholen; +setzemitseitennummern(TRUE );setzeanzahlderzeichenprozeile(78); +druckvorbereiten;zeilenzahl:=0;zusatzzeilen:=0;briefalternative( +dateimitvordruck1,hilfsdatei);hilfsdateiindruckdatei(hilfsdatei);hilfsdateida +:=FALSE ;satzanfpos:=pos(kwdaten,satztrenner);WHILE satzanfpos<>0AND +satzanfpos<length(kwdaten)REP feldpos1:=pos(kwdaten,feldtrenner,satzanfpos); +setzesonderwert(swklausur,subtext(kwdaten,satzanfpos+1,feldpos1-1));feldpos2 +:=pos(kwdaten,feldtrenner,feldpos1+1);setzesonderwert(swname,subtext(kwdaten, +feldpos1+1,feldpos2-1));feldpos1:=pos(kwdaten,feldtrenner,feldpos2+1); +setzesonderwert(swvorname,subtext(kwdaten,feldpos2+1,feldpos1-1));satzanfpos +:=pos(kwdaten,satztrenner,feldpos1);IF satzanfpos=0THEN setzesonderwert( +swgebdat,subtext(kwdaten,feldpos1+1,length(kwdaten)))ELSE setzesonderwert( +swgebdat,subtext(kwdaten,feldpos1+1,satzanfpos-1))FI ;briefalternative( +dateimitvordruck2,hilfsdatei);hilfsdateida:=TRUE ;PER ;IF hilfsdateidaTHEN +hilfsdateiindruckdatei(hilfsdatei);FI ;drucknachbereitenohneausdrucken; +vordruckeloeschen;druckdatei.vordruckeholen:fetch(dateimitvordruck1,/ +"anschreiben server");fetch(dateimitvordruck2,/"anschreiben server");. +vordruckeloeschen:forget(dateimitvordruck1,quiet);forget(dateimitvordruck2, +quiet);END PROC kursliauskunftdruckdateibauen;PROC hilfsdateiindruckdatei( +TEXT CONST hilfsdatei):FILE VAR f;INT VAR i;TEXT VAR zeile;f:=sequentialfile( +input,hilfsdatei);zeilenhilfszahl:=lines(f);IF zeilenzahl+zeilenhilfszahl+ +zusatzzeilen>=drucklaengeTHEN seitenwechsel;zeilenzahl:=0;FI ;FOR iFROM 1 +UPTO zeilenhilfszahlREP getline(f,zeile);druckzeileschreiben(zeile)PER ; +forget(hilfsdatei,quiet);zeilenzahlINCR zeilenhilfszahlEND PROC +hilfsdateiindruckdatei;END PACKET kwanschrkurslistensek2; + diff --git a/app/schulis/2.2.1/src/2.likw kurskombinationen sek2 b/app/schulis/2.2.1/src/2.likw kurskombinationen sek2 new file mode 100644 index 0000000..35caa9d --- /dev/null +++ b/app/schulis/2.2.1/src/2.likw kurskombinationen sek2 @@ -0,0 +1,166 @@ +PACKET likwkurskombinatilonensek2DEFINES kurskombinationmaskebearbeiten, +kurskombinationggferstellen,kurskombinationzeigen,kurskombinationendrucken: +LET maske="ms kurskombination auszaehlen sek2 eingang",fnr2fuerjgst=2, +fnr3fuerhj=3,fnr4jgstls=4,fnr5jgstneu=5,fnr6kurswahl=6,fnr7bestart=7, +fnr8klausur=8,fnr9bs=9,fnr10dr=10,mnrjgstfalsch=404,mnrjgstfehlt=172, +mnrhjfalsch=405,mnrkeinekwdatenda=406,mnrkeinedbdatenda=407, +mnrbearbeitetwerden=352,mnrlistewirdgedruckt=58,mnrbittewarten=69, +mnrlistewirdaufbereitet=190;INT VAR mnrallgemein;TEXT VAR mnrzusatz;TEXT +CONST mark:="#";LET niltext="",punkt=".",querstrich="/",blank=" ", +blankklammer=" )",doppelpunkt=":",null=0,neuangemeldete="N",allederjgst="", +ohneneuang="O";BOOL VAR bildschirmausgabe,kurswahlen,lsundneue,nurneue,nurls, +bestimmtekursart;TEXT VAR dbsj,dbhj,dbjgst,fuerkwsj,fuerhj,fuerjgst,jgstls, +jgstneu,hilfsstring,kursart,klausur,kennung,fachart,lvart,fachkennung1, +fachkennung2,fachart1,fachart2,kursart1,kursart2;LET maxkurse=200,maxspalten= +13;TEXT CONST ueberschrift3:="-------:"+13*"----+";TEXT VAR ueberschrift1, +ueberschrift2,zeile;LET ausgfeldlaenge=1,AUSGFELD =ROW ausgfeldlaengeTEXT , +AUSGKOPF =ROW ausgkopflaengeTEXT ,AUSGKOPFDRUCK =ROW ausgkopflaengeTEXT ; +AUSGKOPFDRUCK VAR ausgkopfdruck;LET ausgkopflaenge=2,ueberschriftenzeilen=2; +TEXT CONST kopfueb1teil1:="Wahlergebnis für Jgst. ",kopfueb1teil2:= +" im Schuljahr ",kopfueb1teil3:=" (Art/Klausur: ",kopfueb2teil1:= +"Schüler der jetzigen Jgst. ",kopfueb2teil2:=" und der ",kopfueb2teil3:= +"Neuangemeldeten zur Jgst. ";TEXT VAR textueb1:="",textueb2:="";INT VAR +status,dbstatusmerker,zaehler,x,y,z,anzangebote,anztabellen,anzspaltenschluss +,anfang,ende,zeilenzaehler,druckzeilenzahl;LET datenraum="datenraum";LET +ZEILE =STRUCT (TEXT angebot,ROW maxkurseINT anzahl);BOUND ROW maxkurseZEILE +VAR zeilespalte;ROW maxspaltenINT VAR summen;PROC +kurskombinationmaskebearbeiten:standardvproc(maske);END PROC +kurskombinationmaskebearbeiten;PROC kurskombinationggferstellen:lsundneue:= +FALSE ;nurls:=FALSE ;nurneue:=FALSE ;standardmeldung(mnrbittewarten,niltext); +standardpruefe(5,fnr9bs,fnr10dr,null,niltext,status);IF status<>0THEN infeld( +status);return(1)ELSE fuerjgst:=standardmaskenfeld(fnr2fuerjgst);fuerhj:= +standardmaskenfeld(fnr3fuerhj);jgstls:=standardmaskenfeld(fnr4jgstls);jgstneu +:=standardmaskenfeld(fnr5jgstneu);IF NOT eingabenzujgstundhjkorrektTHEN +standardmeldung(mnrallgemein,niltext);return(1);ELSE kursart:= +standardmaskenfeld(fnr7bestart);klausur:=standardmaskenfeld(fnr8klausur); +bestimmtekursart:=kursart<>niltext;kurswahlen:=standardmaskenfeld( +fnr6kurswahl)<>niltext;bildschirmausgabe:=standardmaskenfeld(fnr10dr)=niltext +;IF NOT datenraumfürgewaehltessjdaTHEN standardmeldung(mnrkeinekwdatenda, +niltext);return(1);ELSE IF angebotelvsoderfaecherimrowTHEN +druckdateifuellenundausgebenELSE standardmeldung(mnrkeinedbdatenda,mnrzusatz+ +mark);return(1)FI ;FI ;FI ;FI ;.eingabenzujgstundhjkorrekt:dbhj:= +schulkenndatum("Schulhalbjahr");dbsj:=schulkenndatum("Schuljahr");INT VAR +jgst;standardpruefe(2,fnr2fuerjgst,null,null,niltext,status);IF status<>0 +THEN mnrallgemein:=mnrjgstfalsch;infeld(fnr2fuerjgst);LEAVE +eingabenzujgstundhjkorrektWITH FALSE FI ;jgst:=int(fuerjgst);IF jgst<11COR +jgst>13THEN mnrallgemein:=mnrjgstfalsch;infeld(fnr2fuerjgst);LEAVE +eingabenzujgstundhjkorrektWITH FALSE FI ;IF fuerhj<>"1"AND fuerhj<>"2"THEN +mnrallgemein:=mnrhjfalsch;infeld(fnr3fuerhj);LEAVE eingabenzujgstundhjkorrekt +WITH FALSE FI ;IF jgstls=niltextAND jgstneu=niltextTHEN mnrallgemein:= +mnrjgstfehlt;infeld(fnr4jgstls);LEAVE eingabenzujgstundhjkorrektWITH FALSE +FI ;jgst:=int(jgstls);IF jgstls<>niltextTHEN standardpruefe(2,fnr4jgstls,null +,null,niltext,status);IF status<>0COR (jgst<10COR jgst>13)THEN mnrallgemein:= +mnrjgstfalsch;infeld(fnr4jgstls);LEAVE eingabenzujgstundhjkorrektWITH FALSE +FI ;FI ;jgst:=int(jgstneu);IF jgstneu<>niltextTHEN standardpruefe(2, +fnr5jgstneu,null,null,niltext,status);IF status<>0COR (jgst<11COR jgst>13) +THEN mnrallgemein:=mnrhjfalsch;infeld(fnr5jgstneu);LEAVE +eingabenzujgstundhjkorrektWITH FALSE FI ;FI ;IF jgstls<>niltextAND jgstneu<> +niltextTHEN IF int(jgstls)+1=int(jgstneu)AND jgstneu<=fuerjgstTHEN lsundneue +:=TRUE ELSE mnrallgemein:=mnrjgstfalsch;infeld(fnr4jgstls);LEAVE +eingabenzujgstundhjkorrektWITH FALSE FI ;ELIF jgstls=niltextTHEN IF jgstneu> +fuerjgstTHEN mnrallgemein:=mnrjgstfalsch;infeld(fnr4jgstls);LEAVE +eingabenzujgstundhjkorrektWITH FALSE ELSE nurneue:=TRUE FI ;ELSE IF jgstls> +fuerjgstTHEN mnrallgemein:=mnrjgstfalsch;infeld(fnr2fuerjgst);LEAVE +eingabenzujgstundhjkorrektWITH FALSE ELIF (jgstls="10"AND dbhj="1")COR ( +jgstls=fuerjgstAND fuerhj<dbhj)THEN mnrallgemein:=mnrhjfalsch;infeld( +fnr3fuerhj);LEAVE eingabenzujgstundhjkorrektWITH FALSE ELSE nurls:=TRUE ;FI ; +FI ;mnrallgemein:=1;TRUE .datenraumfürgewaehltessjda:BOOL VAR ok:=FALSE ;INT +VAR fehler;IF nurneueTHEN jgstls:=text(int(jgstneu)-1);kurswahlinitialisieren +(jgstls,fuerjgst,fuerhj,neuangemeldete,fuerkwsj);kurswahlbasisholen(fehler); +ok:=fehler=0;ELIF lsundneueTHEN kurswahlinitialisieren(jgstls,fuerjgst,fuerhj +,allederjgst,fuerkwsj);kurswahlbasisholen(fehler);ok:=fehler=0;ELSE +kurswahlinitialisieren(jgstls,fuerjgst,fuerhj,ohneneuang,fuerkwsj); +kurswahlbasisholen(fehler);ok:=fehler=0;FI ;okEND PROC +kurskombinationggferstellen;PROC kurskombinationendrucken(BOOL CONST +nachbsausgabe):IF nachbsausgabeTHEN rename("Kurskombinationen auszaehlen", +"liste.1");FILE VAR f:=sequentialfile(output,"liste.1");output(f); +drucknachbereiten;return(2);ELSE drucknachbereiten;return(1);FI ; +standardmeldung(mnrlistewirdgedruckt,niltext);forget(datenraum,quiet);forget( +"liste.1",quiet);END PROC kurskombinationendrucken;PROC kurskombinationzeigen +:IF exists("liste.1")THEN rename("liste.1","Kurskombinationen auszaehlen")FI +;zeigedatei("Kurskombinationen auszaehlen","a");forget(datenraum,quiet);END +PROC kurskombinationzeigen;BOOL PROC angebotelvsoderfaecherimrow:BOOL VAR +angeboteda;forget("datenraum",quiet);forget("Kurskombinationen auszaehlen", +quiet);zeilespalte:=new(datenraum);IF (nurlsAND fuerhj=dbhjAND fuerkwsj=dbsj) +THEN dbjgst:=jgstlsELSE IF nurlsCOR lsundneueTHEN IF dbhj="2"THEN dbjgst:= +text(int(jgstls)+1)ELSE dbjgst:=jgstlsFI ;ELSE IF dbhj="2"THEN dbjgst:= +jgstneuELSE dbjgst:=text(int(jgstneu)-1)FI ;FI ;geplanteshjundsjberechnen( +dbhj,dbsj);FI ;anzangebote:=0;zeilespalte(1).angebot:=niltext;IF kurswahlen +THEN mnrzusatz:="Datei Lehrveranstaltungen";inittupel(dnrlehrveranstaltungen) +;putwert(fnrlvjgst,dbjgst);statleseschleife(dnrlehrveranstaltungen,dbsj,dbhj, +fnrlvsj,fnrlvhj,PROC angebotlvmerken);ELSE mnrzusatz:="Datei Fächerangebot"; +inittupel(dnrfaecherangebot);putwert(fnrfangjgst,dbjgst);statleseschleife( +dnrfaecherangebot,dbsj,dbhj,fnrfangsj,fnrfanghj,PROC angebotfangmerken);FI ; +angeboteda:=anzangebote>0;angebotedaEND PROC angebotelvsoderfaecherimrow; +PROC angebotlvmerken(BOOL VAR ende):IF status<>0COR wert(fnrlvjgst)<>dbjgst +THEN ende:=TRUE ;ELSE lvart:=wert(fnrlvart);IF (NOT bestimmtekursart)COR +lvart=kursartTHEN anzangeboteINCR 1;zeilespalte(anzangebote).angebot:=text( +wert(fnrlvfachkennung),6)+lvart;FI ;FI ;END PROC angebotlvmerken;PROC +angebotfangmerken(BOOL VAR ende):IF status<>0COR wert(fnrfangjgst)<>dbjgst +THEN ende:=TRUE ;ELSE fachart:=wert(fnrfangart);IF (NOT bestimmtekursart)COR +fachart=kursartTHEN anzangeboteINCR 1;zeilespalte(anzangebote).angebot:=text( +wert(fnrfangfach),2)+fachart;FI ;FI ;END PROC angebotfangmerken;PROC +druckdateifuellenundausgeben:zeilenzaehler:=0;standardmeldung( +mnrlistewirdaufbereitet,niltext);wahldatenauskwdatenrauminrowablegen; +anztabellen:=anzangeboteDIV maxspalten;anzspaltenschluss:=anzangeboteMOD +maxspalten;ueberschriftenimdruckkopfbauen;variablenfuerdrucksetzen; +druckvorbereiten;initdruckkopf(textueb1,textueb2);FOR zFROM 1UPTO anztabellen +REP ende:=z*maxspalten;anfang:=ende-(maxspalten-1); +tabellevonbisspalteausgeben(maxspalten);IF z<anztabellenTHEN seitenwechselFI +;PER ;IF anzspaltenschluss<>0THEN IF anztabellen<>0THEN anfang:=ende+1; +seitenwechselELSE anfang:=1FI ;ende:=anzangebote;tabellevonbisspalteausgeben( +anzspaltenschluss);FI ;IF bildschirmausgabeTHEN kurskombinationzeigenELSE +kurskombinationendrucken(FALSE )FI ;.variablenfuerdrucksetzen:druckzeilenzahl +:=drucklaenge(ueberschriftenzeilen)-ausgkopflaenge. +ueberschriftenimdruckkopfbauen:textueb1:=kopfueb1teil1;textueb1CAT fuerjgst; +textueb1CAT punkt;textueb1CAT fuerhj;textueb1CAT kopfueb1teil2;textueb1CAT +subtext(fuerkwsj,1,2)+querstrich;textueb1CAT subtext(fuerkwsj,3,4);IF +bestimmtekursartOR klausur<>niltextTHEN textueb1CAT kopfueb1teil3;textueb1 +CAT kursart+querstrich;textueb1CAT klausur+blankklammer;FI ;IF NOT (fuerhj= +dbhjAND fuerjgst=jgstls)THEN geplanteshjundsjberechnen(dbhj,dbsj);FI ;IF +nurneueTHEN textueb2:=kopfueb2teil3;textueb2CAT jgstneu;ELSE textueb2:= +kopfueb2teil1;textueb2CAT jgstls;IF lsundneueTHEN textueb2CAT kopfueb2teil2; +textueb2CAT kopfueb2teil3;textueb2CAT jgstneu;FI ;FI ;END PROC +druckdateifuellenundausgeben;PROC wahldatenauskwdatenrauminrowablegen:FOR x +FROM 1UPTO anzangeboteREP y:=1;IF kurswahlenTHEN WHILE y<=xREP +kombiationenlvsmerken(x,y);yINCR 1;PER ;ELSE WHILE y<=xREP +kombinationenfaechermerken(x,y);yINCR 1;PER ;FI ;PER ;END PROC +wahldatenauskwdatenrauminrowablegen;PROC kombiationenlvsmerken(INT CONST zeil +,spal):fachkennung1:=zeilespalte(zeil).angebot;fachkennung2:=zeilespalte(spal +).angebot;IF NOT bestimmtekursartTHEN kursart1:=subtext(fachkennung1,7,7); +kursart2:=subtext(fachkennung2,7,7);ELSE kursart1:=kursart;kursart2:=kursart +FI ;dbstatusmerker:=dbstatus;zeilespalte(zeil).anzahl(spal):= +anzahlschuelermitwahl(subtext(fachkennung1,1,2),subtext(fachkennung1,3,6), +kursart1,klausur,subtext(fachkennung2,1,2),subtext(fachkennung2,3,6),kursart2 +,klausur);dbstatus(dbstatusmerker);END PROC kombiationenlvsmerken;PROC +kombinationenfaechermerken(INT CONST zeil,spal):fachart1:=zeilespalte(zeil). +angebot;fachart2:=zeilespalte(spal).angebot;IF bestimmtekursartTHEN kursart1 +:=kursart;kursart2:=kursart;ELSE kursart1:=subtext(fachart1,3,3);kursart2:= +subtext(fachart2,3,3);FI ;kennung:=niltext;dbstatusmerker:=dbstatus; +zeilespalte(zeil).anzahl(spal):=anzahlschuelermitwahl(subtext(fachart1,1,2), +kennung,kursart1,klausur,subtext(fachart2,1,2),kennung,kursart2,klausur); +dbstatus(dbstatusmerker);END PROC kombinationenfaechermerken;PROC +tabellevonbisspalteausgeben(INT CONST spaltenzahl):INT VAR s,kombinationen; +FOR sFROM 1UPTO maxspaltenREP summen(s):=0PER ;zeilenzaehler:=0;ueberschrift1 +:=" :";ueberschrift2:=" :";FOR zaehlerFROM anfangUPTO endeREP +ueberschrift1CAT text(zeilespalte(zaehler).angebot,2)+" :";IF NOT kurswahlen +THEN ueberschrift2CAT subtext(zeilespalte(zaehler).angebot,3,3)+" :";ELSE +ueberschrift2CAT subtext(zeilespalte(zaehler).angebot,3,6)+":";FI ;PER ; +druckkopfschreiben;setzemitseitennummern(TRUE );druckzeileschreiben( +ueberschrift1);druckzeileschreiben(ueberschrift2);druckzeileschreiben( +ueberschrift3);zeilenzaehlerINCR 12;FOR zaehlerFROM 1UPTO anzangeboteREP s:=1 +;hilfsstring:=zeilespalte(zaehler).angebot;zeile:=text(hilfsstring,2)+blank; +IF kurswahlenTHEN zeileCAT subtext(hilfsstring,3,6)+doppelpunkt;ELSE zeile +CAT subtext(hilfsstring,3,3)+3*blank+doppelpunktFI ;FOR xFROM anfangUPTO ende +REP IF x<zaehlerTHEN kombinationen:=zeilespalte(zaehler).anzahl(x);zeileCAT +text(kombinationen,3)+blank+doppelpunkt;summen(s)INCR kombinationen;ELIF x= +zaehlerTHEN zeileCAT " * :"ELSE kombinationen:=zeilespalte(x).anzahl(zaehler +);zeileCAT text(kombinationen,3)+" :";summen(s)INCR kombinationen;FI ;sINCR 1 +;PER ;zeilenzaehlerINCR 1;IF drucklaenge-1=zeilenzaehlerTHEN seitenwechsel; +druckzeileschreiben(ueberschrift1);druckzeileschreiben(ueberschrift2); +druckzeileschreiben(ueberschrift3);zeilenzaehler:=4;FI ;druckzeileschreiben( +zeile);PER ;druckzeileschreiben(ueberschrift3);zeile:="Summe :";FOR sFROM 1 +UPTO spaltenzahlREP zeileCAT text(summen(s),3)+blank+doppelpunkt;PER ; +zeilenzaehlerINCR 2;druckzeileschreiben(zeile);END PROC +tabellevonbisspalteausgeben;END PACKET likwkurskombinatilonensek2 + diff --git a/app/schulis/2.2.1/src/2.likw schuelerwahl sek2 b/app/schulis/2.2.1/src/2.likw schuelerwahl sek2 new file mode 100644 index 0000000..7b395a3 --- /dev/null +++ b/app/schulis/2.2.1/src/2.likw schuelerwahl sek2 @@ -0,0 +1,173 @@ +PACKET likwschuelerwahlsek2DEFINES kurswahlauszaehlenspezielleteile:LET +AUSGFELD =ROW ausgfeldlaengeTEXT ,AUSGKOPF =ROW ausgkopflaengeTEXT , +AUSGKOPFDRUCK =ROW ausgkopflaengeTEXT ;AUSGFELD VAR ausgfeld;AUSGKOPF VAR +ausgkopf;AUSGKOPFDRUCK VAR ausgkopfdruck;#K onstantenzurM askenbearbeitung# +LET maskeschuelerwahl="ms schuelerwahl auszaehlen sek2 eingang",fnr2fuerjgst= +2,fnr3fuerhj=3,fnr4jgstls=4,fnr5jgstneu=5,fnr6kurswahl=6,fnr7bs=7,fnr8dr=8, +ausgfeldlaenge=1,anzahlobjekteprobildschirm=13,ueberschriftenzeilen=2,# +imstand.D ruckkopf#ausgkopflaenge=2,spaltentrenner=" :",spaltenbreite1=7, +spaltenbreite2=6,spaltenbreite3bis13=3,bsanfpos=2,klausurbestand= +"c02 abitur klausur";TEXT CONST kopfueb1teil1:="Wahlergebnis für Jgst. ", +kopfueb1teil2:=" im Schuljahr ",kopfueb2teil1:="Schüler der jetzigen Jgst. ", +kopfueb2teil2:=" und der ",kopfueb2teil3:="Neuangemeldeten zur Jgst. ", +unterstreichung:="--------+-------+"+11*"----+",tabueb1:="Angebot gewählt "; +TEXT VAR tabueb2,kwsek2auszaehlenueb:="Wahlergebnis auszählen",klausurkuerzel +,textueb1:="",textueb2:="";INT VAR bildanfang,druckzeilenzahl,status, +dbstatusmerker,aktuellerindex,feldnr;LET mnrjgstfalsch=404,mnrjgstfehlt=172, +mnrhjfalsch=405,mnrkeinekwdatenda=406,mnrkeinekuerzelda=408, +mnrbearbeitetwerden=352,mnrbittewarten=69;INT VAR mnrallgemein;LET niltext="" +,punkt=".",querstrich="/",blank=" ",vierblank=" ",null=0,maxkuerzel=11, +zwoelf=12;ROW zwoelfINT VAR gesamtundeinzelsummen;INT VAR anzkuerzel,x;LET +neuangemeldete="N",allederjgst="",ohneneuang="O";BOOL VAR bildschirmausgabe, +kurswahlen,nurls,lsundneue,nurneue;TEXT VAR dbsj,dbhj,dbjgst,fuerkwsj, +fuerjgst:="",fuerhj:="",jgstls:="",jgstneu:="",fach,art,kennung,klkuerzel; +BOOL PROC multistop:IF kurswahlenTHEN dbstatus=0AND dbjgst=wert(fnrlvjgst) +AND dbsj=wert(fnrlvsj)AND dbhj=wert(fnrlvhj)ELSE dbstatus=0AND dbjgst=wert( +fnrfangjgst)AND dbsj=wert(fnrfangsj)AND dbhj=wert(fnrfanghj)FI END PROC +multistop;BOOL PROC multistopsim:BOOL VAR b;setzebestandende(FALSE );b:= +multistop;IF NOT multistopTHEN setzebestandende(TRUE )FI ;bEND PROC +multistopsim;PROC kurswahlauszaehlenspezielleteile(INT CONST nr):SELECT nrOF +CASE 1:kwsek2auszaehlendialogvorbereitenCASE 2: +kwsek2auszaehleneingabenrichtigCASE 3:kwsek2auszaehlenlistenvorbereitenCASE 4 +:kwsek2auszaehlendruckvorbereitenCASE 5:kwsek2auszaehlenseitedruckenCASE 6: +kwsek2auszaehlenbildschirmvorbereitenCASE 7:kwsek2auszaehlenseitezeigen +ENDSELECT .END PROC kurswahlauszaehlenspezielleteile;PROC +kwsek2auszaehlendialogvorbereiten:kwsek2auszaehlenueb:=text(vergleichsknoten) +;setzeanfangswerte(maskeschuelerwahl,bsanfpos)END PROC +kwsek2auszaehlendialogvorbereiten;PROC kwsek2auszaehleneingabenrichtig:nurls +:=FALSE ;lsundneue:=FALSE ;nurneue:=FALSE ;standardmeldung(mnrbittewarten, +niltext);standardpruefe(5,fnr7bs,fnr8dr,null,niltext,status);IF status<>0 +THEN infeld(status);setzeeingabetest(FALSE )ELSE fuerjgst:=standardmaskenfeld +(fnr2fuerjgst);fuerhj:=standardmaskenfeld(fnr3fuerhj);jgstls:= +standardmaskenfeld(fnr4jgstls);jgstneu:=standardmaskenfeld(fnr5jgstneu);IF +NOT eingabenzujgstundhjkorrektTHEN standardmeldung(mnrallgemein,niltext); +setzeeingabetest(FALSE )ELSE kurswahlen:=standardmaskenfeld(fnr6kurswahl)<> +niltext;bildschirmausgabe:=standardmaskenfeld(fnr8dr)=niltext;IF NOT ( +datenraumfürgewaehltessjda)THEN standardmeldung(mnrkeinekwdatenda,niltext); +setzeeingabetest(FALSE )ELSE IF keineklausurkuerzelvorhandenTHEN +standardmeldung(mnrkeinekuerzelda,niltext);setzeeingabetest(FALSE )ELSE +setzeeingabetest(TRUE );setzeausgabedrucker(NOT bildschirmausgabe)FI ;FI ;FI +;FI ;.keineklausurkuerzelvorhanden:BOOL VAR nix:=TRUE ;klausurkuerzel:= +niltext;inittupel(dnrschluessel);putwert(fnrschlsachgebiet,klausurbestand); +search(dnrschluessel,FALSE );anzkuerzel:=0;IF dbstatus<>0COR wert( +fnrschlsachgebiet)<>klausurbestandTHEN LEAVE keineklausurkuerzelvorhanden +WITH nixELSE FOR xFROM 1UPTO maxkuerzelREP IF wert(fnrschlsachgebiet)= +klausurbestandTHEN klausurkuerzelCAT wert(fnrschlschluessel);anzkuerzelINCR 1 +;succ(dnrschluessel)FI ;PER ;FI ;nix:=anzkuerzel=0;nix. +eingabenzujgstundhjkorrekt:dbhj:=schulkenndatum("Schulhalbjahr");dbsj:= +schulkenndatum("Schuljahr");INT VAR jgst;standardpruefe(2,fnr2fuerjgst,null, +null,niltext,status);IF status<>0THEN mnrallgemein:=mnrjgstfalsch;infeld( +fnr2fuerjgst);LEAVE eingabenzujgstundhjkorrektWITH FALSE FI ;jgst:=int( +fuerjgst);IF jgst<11COR jgst>13THEN mnrallgemein:=mnrjgstfalsch;infeld( +fnr2fuerjgst);LEAVE eingabenzujgstundhjkorrektWITH FALSE FI ;IF fuerhj<>"1" +AND fuerhj<>"2"THEN mnrallgemein:=mnrhjfalsch;infeld(fnr3fuerhj);LEAVE +eingabenzujgstundhjkorrektWITH FALSE FI ;IF jgstls=niltextAND jgstneu=niltext +THEN mnrallgemein:=mnrjgstfehlt;infeld(fnr4jgstls);LEAVE +eingabenzujgstundhjkorrektWITH FALSE FI ;jgst:=int(jgstls);IF jgstls<>niltext +THEN standardpruefe(2,fnr4jgstls,null,null,niltext,status);IF status<>0COR ( +jgst<10COR jgst>13)THEN mnrallgemein:=mnrjgstfalsch;infeld(fnr4jgstls);LEAVE +eingabenzujgstundhjkorrektWITH FALSE FI ;FI ;jgst:=int(jgstneu);IF jgstneu<> +niltextTHEN standardpruefe(2,fnr5jgstneu,null,null,niltext,status);IF status +<>0COR (jgst<11COR jgst>13)THEN mnrallgemein:=mnrhjfalsch;infeld(fnr5jgstneu) +;LEAVE eingabenzujgstundhjkorrektWITH FALSE FI ;FI ;IF jgstls<>niltextAND +jgstneu<>niltextTHEN IF int(jgstls)+1=int(jgstneu)AND jgstneu<=fuerjgstTHEN +lsundneue:=TRUE ELSE mnrallgemein:=mnrjgstfalsch;infeld(fnr4jgstls);LEAVE +eingabenzujgstundhjkorrektWITH FALSE FI ;ELIF jgstls=niltextTHEN IF jgstneu> +fuerjgstTHEN mnrallgemein:=mnrjgstfalsch;infeld(fnr4jgstls);LEAVE +eingabenzujgstundhjkorrektWITH FALSE ELSE nurneue:=TRUE FI ;ELSE IF jgstls> +fuerjgstTHEN mnrallgemein:=mnrjgstfalsch;infeld(fnr2fuerjgst);LEAVE +eingabenzujgstundhjkorrektWITH FALSE ELIF (jgstls="10"AND dbhj="1")COR ( +jgstls=fuerjgstAND fuerhj<dbhj)THEN mnrallgemein:=mnrhjfalsch;infeld( +fnr3fuerhj);LEAVE eingabenzujgstundhjkorrektWITH FALSE ELSE nurls:=TRUE ;FI ; +FI ;mnrallgemein:=1;TRUE .datenraumfürgewaehltessjda:BOOL VAR ok:=FALSE ;INT +VAR fehler;IF nurneueTHEN jgstls:=text(int(jgstneu)-1);kurswahlinitialisieren +(jgstls,fuerjgst,fuerhj,neuangemeldete,fuerkwsj);kurswahlbasisholen(fehler); +ok:=fehler=0;ELIF lsundneueTHEN kurswahlinitialisieren(jgstls,fuerjgst,fuerhj +,allederjgst,fuerkwsj);kurswahlbasisholen(fehler);ok:=fehler=0;ELSE +kurswahlinitialisieren(jgstls,fuerjgst,fuerhj,ohneneuang,fuerkwsj); +kurswahlbasisholen(fehler);ok:=fehler=0;FI ;okEND PROC +kwsek2auszaehleneingabenrichtig;PROC kwsek2auszaehlenlistenvorbereiten:BOOL +VAR b;initspalten;setzespaltentrenner(spaltentrenner);textueb1:=kopfueb1teil1 +;textueb1CAT fuerjgst;textueb1CAT punkt;textueb1CAT fuerhj;textueb1CAT +kopfueb1teil2;textueb1CAT subtext(fuerkwsj,1,2)+querstrich;textueb1CAT +subtext(fuerkwsj,3,4);IF kurswahlenTHEN tabueb2:="Kurs gesamt";ELSE +tabueb2:="Fach gesamt";FI ;FOR xFROM 1UPTO anzkuerzelREP tabueb2CAT +vierblank;tabueb2CAT subtext(klausurkuerzel,x,x);PER ;IF (nurlsAND fuerhj= +dbhjAND fuerjgst=jgstls)THEN dbjgst:=jgstlsELSE IF nurlsCOR lsundneueTHEN IF +dbhj="2"THEN dbjgst:=text(int(jgstls)+1)ELSE dbjgst:=jgstlsFI ;ELSE IF dbhj= +"2"THEN dbjgst:=jgstneuELSE dbjgst:=text(int(jgstneu)-1)FI ;FI ; +geplanteshjundsjberechnen(dbhj,dbsj);FI ;IF nurneueTHEN textueb2:= +kopfueb2teil3;textueb2CAT jgstneu;ELSE textueb2:=kopfueb2teil1;textueb2CAT +jgstls;IF lsundneueTHEN textueb2CAT kopfueb2teil2;textueb2CAT kopfueb2teil3; +textueb2CAT jgstneu;FI ;FI ;IF kurswahlenTHEN aktuellerindex:= +dnrlehrveranstaltungen;inittupel(aktuellerindex);feldnr:=fnrlvfachkennung; +putwert(fnrlvsj,dbsj);putwert(fnrlvhj,dbhj);putwert(fnrlvjgst,dbjgst); +setzescanendewert("�");ELSE aktuellerindex:=dnrfaecherangebot;inittupel( +aktuellerindex);feldnr:=fnrfanglfdnr;putwert(fnrfangsj,dbsj);putwert( +fnrfanghj,dbhj);putwert(fnrfangjgst,dbjgst);setzescanendewert("255");FI ; +setzeidentiwert("");initobli(anzahlobjekteprobildschirm);objektlistestarten( +aktuellerindex,dbsj,feldnr,TRUE ,b);setzebestandende(NOT multistopCOR b);END +PROC kwsek2auszaehlenlistenvorbereiten;PROC +kwsek2auszaehlenbildschirmvorbereiten:LET fnrausganf=2; +standardkopfmaskeaktualisieren(kwsek2auszaehlenueb);bildanfang:=fnrausganf; +setzebildanfangsposition(bildanfang);initspalten;setzespaltenbreite( +bildbreite);spaltenweise(textueb1);ausgfeld(1):=zeile;ausgfeld(1)IN +ausgabepos;erhoeheausgabeposumeins;spaltenweise(textueb2);ausgfeld(1):=zeile; +ausgfeld(1)IN ausgabepos;erhoeheausgabeposumeins;erhoeheausgabeposumeins; +spaltenweise(tabueb1);ausgfeld(1):=zeile;ausgfeld(1)IN ausgabepos; +erhoeheausgabeposumeins;spaltenweise(tabueb2);ausgfeld(1):=zeile;ausgfeld(1) +IN ausgabepos;erhoeheausgabeposumeins;spaltenweise(unterstreichung);ausgfeld( +1):=zeile;ausgfeld(1)IN ausgabepos;erhoeheausgabeposumeins; +setzebildanfangsposition(8);initspalten;spaltendefinierenEND PROC +kwsek2auszaehlenbildschirmvorbereiten;PROC kwsek2auszaehlenseitezeigen: +blaettern(PROC (INT CONST )kwwahldatensek2zeigen,aktion,TRUE ,TRUE ,BOOL +PROC multistop)END PROC kwsek2auszaehlenseitezeigen;PROC +kwwahldatensek2zeigen(INT CONST x):kwwahldatensek2holen; +kwwahldatensek2aufbereiten;kwwahldatensek2aufbildschirm;END PROC +kwwahldatensek2zeigen;PROC kwwahldatensek2aufbildschirm:INT VAR i;FOR iFROM 1 +UPTO ausgfeldlaengeREP ausgfeld(i):=zeile;ausgfeld(i)IN ausgabepos; +erhoeheausgabeposumeins;PER ;END PROC kwwahldatensek2aufbildschirm;PROC +kwsek2auszaehlendruckvorbereiten:setzebestandende(FALSE );druckvorbereiten; +variablenfuerdrucksetzen;IF kurswahlenTHEN inittupel(dnrlehrveranstaltungen); +putwert(fnrlvsj,dbsj);putwert(fnrlvhj,dbhj);putwert(fnrlvjgst,dbjgst); +setzescanendewert("�");ELSE inittupel(dnrfaecherangebot);putwert(fnrfangsj, +dbsj);putwert(fnrfanghj,dbhj);putwert(fnrfangjgst,dbjgst);setzescanendewert( +"255");FI ;initdruckkopf(textueb1,textueb2);initausgabekopfdruck; +lesenvorbereitendruck(PROC (INT CONST ,BOOL PROC ,INT VAR )scanforward,BOOL +PROC multistopsim);.variablenfuerdrucksetzen:druckzeilenzahl:=drucklaenge( +ueberschriftenzeilen)-ausgkopflaenge.END PROC +kwsek2auszaehlendruckvorbereiten;PROC initausgabekopfdruck:ausgkopfdruck(1):= +tabueb1;ausgkopfdruck(2):=tabueb2;END PROC initausgabekopfdruck;PROC +kwsek2auszaehlenseitedrucken:kwwahldatensek2ueberschriftdrucken;initspalten; +spaltendefinieren;seitedrucken(PROC (INT VAR )kwwahldatensek2drucken, +druckzeilenzahl,ausgfeldlaenge,BOOL PROC multistopsim);seitenwechsel.END +PROC kwsek2auszaehlenseitedrucken;PROC kwwahldatensek2ueberschriftdrucken: +INT VAR i;druckkopfschreiben;FOR iFROM 1UPTO ausgkopflaengeREP +druckzeileschreiben(ausgkopfdruck(i))PER ;druckzeileschreiben(unterstreichung +);END PROC kwwahldatensek2ueberschriftdrucken;PROC kwwahldatensek2drucken( +INT VAR zeilenzaehler):LET markiert="#";kwwahldatensek2holen;standardmeldung( +mnrbearbeitetwerden,fach+markiert);kwwahldatensek2aufbereiten;ausgfeld(1):= +zeile;zeilenzaehlerINCR ausgfeldlaenge;kwwahldatensek2indruckdatei;END PROC +kwwahldatensek2drucken;PROC kwwahldatensek2indruckdatei:INT VAR i;FOR iFROM 1 +UPTO ausgfeldlaengeREP druckzeileschreiben(ausgfeld(1))PER END PROC +kwwahldatensek2indruckdatei;PROC spaltendefinieren:INT VAR x;initspalten; +setzespaltentrenner(spaltentrenner);setzespaltenbreite(spaltenbreite1); +setzespaltenbreite(spaltenbreite2);FOR xFROM 1UPTO maxkuerzelREP +setzespaltenbreite(spaltenbreite3bis13)PER ;END PROC spaltendefinieren;PROC +kwwahldatensek2holen:TEXT VAR hilfstext;dbstatusmerker:=dbstatus;IF +kurswahlenTHEN hilfstext:=wert(fnrlvfachkennung);fach:=subtext(hilfstext,1,2) +;kennung:=subtext(hilfstext,3,6);gesamtundeinzelsummen(1):= +anzahlschuelermitwahl(fach,kennung,niltext,niltext);FOR xFROM 2UPTO +anzkuerzel+1REP klkuerzel:=subtext(klausurkuerzel,x-1,x-1); +gesamtundeinzelsummen(x):=anzahlschuelermitwahl(fach,kennung,niltext, +klkuerzel);PER ;ELSE fach:=text(wert(fnrfangfach),2);art:=wert(fnrfangart); +gesamtundeinzelsummen(1):=anzahlschuelermitwahl(fach,niltext,art,niltext); +FOR xFROM 2UPTO anzkuerzel+1REP klkuerzel:=subtext(klausurkuerzel,x-1,x-1); +gesamtundeinzelsummen(x):=anzahlschuelermitwahl(fach,niltext,art,klkuerzel); +PER ;FI ;dbstatus(dbstatusmerker);END PROC kwwahldatensek2holen;PROC +kwwahldatensek2aufbereiten:INT VAR x;IF kurswahlenTHEN spaltenweise(fach+ +blank+kennung);ELSE spaltenweise(fach+blank+art);FI ;FOR xFROM 1UPTO +anzkuerzel+1REP spaltenweise(text(gesamtundeinzelsummen(x),3));PER ;FOR x +FROM 1UPTO maxkuerzel-anzkuerzelREP spaltenweise(niltext)PER ;END PROC +kwwahldatensek2aufbereiten;END PACKET likwschuelerwahlsek2; + diff --git a/app/schulis/2.2.1/src/2.likw wahl und kursdaten sek2 b/app/schulis/2.2.1/src/2.likw wahl und kursdaten sek2 new file mode 100644 index 0000000..992c52b --- /dev/null +++ b/app/schulis/2.2.1/src/2.likw wahl und kursdaten sek2 @@ -0,0 +1,246 @@ +PACKET likwwahlundkursdatensek2DEFINES wahlundkursdatenmaskebearbeiten, +wahlundkursdatenggfstarten,wahlundkursdatennaechsteliste, +wahlundkursdatenabschluss,wahlundkursdatenggfbestandueberankreuzliste, +wahlundkursdatenblaettern,wahldatenlistenseiteaktualisieren:LET objektmaske= +"mu objektliste",eingangsmaske="ms wahl und kursdaten sek2 eingang", +fnr2jgstls=2,fnr3jgstneu=3,fnr4famname=4,fnr5rufname=5,fnr6gebdat=6,fnr7bs=7, +fnr8dr=8,mnrauswahlnichtsinnvoll=56,mnrlistewirdgedruckt=58, +mnrdatenexistierennicht=59,mnrbittewarten=69,mnrdruckausgabefuerwirdgedruckt= +125,mnrschuelernichtimentsprbestand=126,mnralledruckausgabenerstellt=128, +mnrangabenpraezisieren=129,mnrungueltigesdatum=157,mnrjgstfehlt=172, +mnrjgstoderschueler=318,mnrjgstfalsch=404,mnrkeinekwdatenda=406, +mnrkeinedatendain=407,mnrjgstoderbestschueler=422,trenner="�",neuang="N", +mitneuang="",ohneneuang="O";INT VAR mnrallgemein,egmaskefeldnr,status,erster, +letzter,aktschueler,zaehler,pos1,pos2;TEXT VAR fach,mnrzusatz,ueb2,hilfstext; +LET null=0,platzhalter="mehr- fach ",niltext="",punkt=".",blank=" ",dopp=":" +,doppblank=": ",blanksdopp=" :";LET maxanzfaecher=100,maxanzschulhj=10;ROW +maxanzfaecherROW maxanzschulhjTEXT VAR faecherschulhj;INT VAR ixfaecher, +ixschulhj,anzfaecher;TEXT VAR uebsj,uebjgst,faecherstring,faecher,kennungen, +klausuren,punkte,kursarten,zeile1,zeile2;BOOL VAR ankreuzliste, +bildschirmausgabe,lsundneue,nurneue,nurls,bestschueler,faecherstringok;TEXT +VAR sj,hj,kwsj,jgstls,jgstneu,famname,rufname,gebdat;FILE VAR ausgabedatei; +TEXT CONST ueb1:="Wahl- und Kursdaten von";LET fnrerstesankreuzfeld=2, +felderprolisteneintrag=2,listeneintraegeproseite=18;LET +meldungblaetternnichtmöglich=72;LET dummyschueler="",sunamenstrenner=", ", +sulaengeohnedatum=60,maxankreuzungen=1000,ankreuzung="x",keineankreuzung="", +kennungnursuname="N",boolvektordatei="Boolvektor";BOOL VAR bearbeitungingang +:=FALSE ;BOUND ROW maxankreuzungenBOOL VAR boolvektor;INT VAR aktuellezeile; +PROC wahlundkursdatenmaskebearbeiten:standardvproc(eingangsmaske); +ankreuzliste:=FALSE ;END PROC wahlundkursdatenmaskebearbeiten;PROC +wahlundkursdatenggfbestandueberankreuzliste:IF plausisallgemokAND +plausisspezankreuzokAND kurswahldatenraumdaTHEN ankreuzliste:=TRUE ; +aktuellezeile:=erster;initboolvektor;standardstartproc(objektmaske); +listezeigenabzeile(aktuellezeile);wahldatenlistenseiteaktualisieren;ELSE +standardmeldung(mnrallgemein,niltext);return(1);FI ;.plausisspezankreuzok: +BOOL VAR ok:=FALSE ;IF bestschuelerTHEN mnrallgemein:=mnrjgstoderbestschueler +;infeld(fnr4famname);ELSE ok:=TRUE FI ;ok.initboolvektor:boolvektor:=new( +boolvektordatei);FOR zaehlerFROM ersterUPTO letzterREP boolvektor(zaehler):= +FALSE PER ;END PROC wahlundkursdatenggfbestandueberankreuzliste;PROC +wahlundkursdatenggfstarten:bearbeitungingang:=FALSE ;IF ankreuzlisteTHEN +ersterDECR 1;naechsterindex(erster);startenELSE IF NOT plausisallgemokCOR +NOT plausisspezokTHEN standardmeldung(mnrallgemein,niltext);return(1);ELSE +startenFI ;FI ;.plausisspezok:IF bestschuelerTHEN IF NOT bestschuelerkorrekt +THEN standardmeldung(mnrangabenpraezisieren,niltext);infeld(egmaskefeldnr); +LEAVE plausisspezokWITH FALSE ELSE erster:=1;letzter:=1;FI ;ELSE IF lsundneue +THEN IF int(jgstls)<>int(jgstneu)-1THEN mnrallgemein:=mnrjgstfalsch;infeld( +fnr2jgstls);LEAVE plausisspezokWITH FALSE FI ;FI ;IF NOT kurswahldatenraumda +THEN infeld(fnr2jgstls);LEAVE plausisspezokWITH FALSE FI ;FI ;TRUE . +bestschuelerkorrekt:IF rufname=niltextTHEN IF gebdat=niltextTHEN IF +famnameeindeutigTHEN rufname:=wert(fnrsurufnames);gebdat:=wert(fnrsugebdatums +);LEAVE bestschuelerkorrektWITH TRUE ELSE LEAVE bestschuelerkorrektWITH +FALSE ;FI ;ELSE egmaskefeldnr:=fnr5rufname;mnrallgemein:= +mnrangabenpraezisieren;LEAVE bestschuelerkorrektWITH FALSE ;FI ;ELSE IF +gebdat<>niltextTHEN hilfstext:=subtext(gebdat,1,2);hilfstextCAT punkt; +hilfstextCAT subtext(gebdat,3,4);hilfstextCAT punkt;hilfstextCAT subtext( +gebdat,5,6);gebdat:=hilfstext;IF kompletterschluesselokTHEN LEAVE +bestschuelerkorrektWITH TRUE ELSE LEAVE bestschuelerkorrektWITH FALSE FI ; +ELSE IF famnameundrufnameeindeutigTHEN gebdat:=wert(fnrsugebdatums);LEAVE +bestschuelerkorrektWITH TRUE ELSE LEAVE bestschuelerkorrektWITH FALSE ;FI ; +FI ;FI ;TRUE END PROC wahlundkursdatenggfstarten;BOOL PROC famnameeindeutig: +inittupel(dnrschueler);putwert(fnrsufamnames,famname);putwert(fnrsurufnames, +rufname);putwert(fnrsugebdatums,gebdat);putwert(fnrsustatuss,"ls");search( +dnrschueler,FALSE );IF wert(fnrsufamnames)<>famnameTHEN egmaskefeldnr:= +fnr4famname;mnrallgemein:=mnrdatenexistierennicht;LEAVE famnameeindeutigWITH +FALSE ;ELSE succ(dnrschueler);IF wert(fnrsufamnames)=famnameTHEN +egmaskefeldnr:=fnr5rufname;mnrallgemein:=mnrangabenpraezisieren;LEAVE +famnameeindeutigWITH FALSE ;ELSE pred(dnrschueler)FI ;FI ;TRUE END PROC +famnameeindeutig;BOOL PROC famnameundrufnameeindeutig:inittupel(dnrschueler); +putwert(fnrsufamnames,famname);putwert(fnrsurufnames,rufname);putwert( +fnrsugebdatums,gebdat);putwert(fnrsustatuss,"ls");search(dnrschueler,FALSE ); +IF wert(fnrsufamnames)<>famnameCOR wert(fnrsurufnames)<>rufnameTHEN +egmaskefeldnr:=fnr4famname;mnrallgemein:=mnrdatenexistierennicht;LEAVE +famnameundrufnameeindeutigWITH FALSE ELSE succ(dnrschueler);IF wert( +fnrsufamnames)=famnameAND wert(fnrsurufnames)=rufnameTHEN egmaskefeldnr:= +fnr6gebdat;mnrallgemein:=mnrangabenpraezisieren;LEAVE +famnameundrufnameeindeutigWITH FALSE ELSE pred(dnrschueler)FI ;FI ;TRUE END +PROC famnameundrufnameeindeutig;BOOL PROC kompletterschluesselok:BOOL VAR +insek2:=TRUE ;standardpruefe(6,fnr6gebdat,null,null,niltext,status);IF status +<>0THEN egmaskefeldnr:=fnr6gebdat;mnrallgemein:=mnrungueltigesdatum;LEAVE +kompletterschluesselokWITH FALSE ;FI ;hilfstext:=subtext(gebdat,1,2); +hilfstextCAT punkt;hilfstextCAT subtext(gebdat,3,4);hilfstextCAT punkt; +hilfstextCAT subtext(gebdat,5,6);gebdat:=hilfstext;inittupel(dnrschueler); +putwert(fnrsufamnames,famname);putwert(fnrsurufnames,rufname);putwert( +fnrsugebdatums,gebdat);putwert(fnrsustatuss,"ls");search(dnrschueler,TRUE ); +IF dbstatus<>0COR intwert(fnrsusgrpjgst)<11THEN egmaskefeldnr:=fnr4famname; +mnrallgemein:=mnrschuelernichtimentsprbestand;insek2:=FALSE FI ;insek2END +PROC kompletterschluesselok;PROC starten:aktschueler:=erster;IF +bildschirmausgabeTHEN listeaufbereiten;bearbeitungingang:=TRUE ;rename( +"liste.1","Wahl- und Kursdaten");zeigedatei("Wahl- und Kursdaten","vr");ELSE +IF ankreuzlisteTHEN WHILE aktschueler<>0REP +listeaufbereitendruckenundloeschenodermeldung;naechsterindex(aktschueler); +PER ;ankreuzliste:=FALSE ;bearbeitungingang:=FALSE ;forget(boolvektordatei, +quiet);standardstartproc(eingangsmaske);egmaskenfelderleerenzurueckundmeldung +(2);ELSE FOR aktschuelerFROM ersterUPTO letzterREP +listeaufbereitendruckenundloeschenodermeldung;PER ; +egmaskenfelderleerenzurueckundmeldung(1);FI ;FI ;END PROC starten;PROC +listeaufbereitendruckenundloeschenodermeldung:IF NOT schuelervorhandenTHEN +meldungELSE listemitdatenzumschueleraufbereiten;standardmeldung( +mnrdruckausgabefuerwirdgedruckt,famname+"#");listedrucken;listeloeschen;FI ; +END PROC listeaufbereitendruckenundloeschenodermeldung;PROC +wahlundkursdatennaechsteliste(BOOL CONST drucken):IF druckenTHEN listedrucken +FI ;listeloeschen;IF ankreuzlisteTHEN naechsterindex(aktschueler);IF +aktschueler=0THEN forget(boolvektordatei,quiet);ankreuzliste:=FALSE ; +standardstartproc(eingangsmaske);egmaskenfelderleerenzurueckundmeldung(3); +ELSE listeaufbereiten;rename("liste.1","Wahl- und Kursdaten");return(1)FI ; +ELSE IF aktschueler=letzterTHEN egmaskenfelderleerenzurueckundmeldung(2); +ELSE aktschuelerINCR 1;listeaufbereiten;rename("liste.1", +"Wahl- und Kursdaten");return(1);FI ;FI ;END PROC +wahlundkursdatennaechsteliste;PROC listeaufbereiten:IF NOT schuelervorhanden +THEN listeleeraufbereitenELSE listemitdatenzumschueleraufbereiten;FI ;END +PROC listeaufbereiten;PROC meldung:mnrzusatz:="Halbjahresdaten"; +standardmeldung(mnrkeinedatendain,mnrzusatz+"#");END PROC meldung;PROC +schuelerdatenauskwdatenraumholen(INT CONST index):hilfstext:= +wahldatenzumindex(index,kennungnursuname);pos1:=pos(hilfstext,trenner);pos2:= +pos(hilfstext,trenner,pos1+1);famname:=subtext(hilfstext,1,pos1-1);rufname:= +subtext(hilfstext,pos1+1,pos2-1);gebdat:=subtext(hilfstext,pos2+1,length( +hilfstext));END PROC schuelerdatenauskwdatenraumholen;PROC +listeleeraufbereiten:dateioeffnenunddruckkopfschreiben;putline(ausgabedatei, +"Keine Halbjahres-Daten vorhanden für: "+rufname+blank+famname)END PROC +listeleeraufbereiten;PROC dateioeffnenunddruckkopfschreiben:ausgabedatei:= +sequentialfile(output,"liste.1");druckvorbereiten;ueb2:=famname;ueb2CAT blank +;ueb2CAT rufname;ueb2CAT ", geboren am ";ueb2CAT gebdat;initdruckkopf(ueb1, +ueb2);druckkopfschreiben;END PROC dateioeffnenunddruckkopfschreiben;PROC +rowinitialisieren:FOR ixfaecherFROM 1UPTO maxanzfaecherREP FOR ixschulhjFROM +1UPTO maxanzschulhjREP faecherschulhj(ixfaecher)(ixschulhj):=niltextPER ;PER +;END PROC rowinitialisieren;PROC listemitdatenzumschueleraufbereiten: +faecherstringok:=FALSE ;rowinitialisieren;dateioeffnenunddruckkopfschreiben; +uebsj:=5*blank+doppblank;uebjgst:="Fach "+doppblank;ixfaecher:=1;ixschulhj:=0 +;faecherstring:=wert(fnrhjdfach);WHILE dbstatus=0AND wert(fnrhjdfamnames)= +famnameAND wert(fnrhjdrufnames)=rufnameAND wert(fnrhjdgebdats)=gebdatREP +shjueberschriftenmerken;IF compress(faecherstring)=niltextTHEN succ( +dnrhalbjahresdaten);faecherstring:=wert(fnrhjdfach);ELSE +faecherstringaufbereitenundweiterewertelesen;IF faecherstring=faecherTHEN +FOR zaehlerFROM 1UPTO anzfaecherREP datenproshjprofachmerken(zaehler);PER ; +ELSE pos1:=1;zaehler:=1;WHILE pos1<length(faecher)REP fach:=subtext(faecher, +pos1,pos1+1);pos2:=pos(faecherstring,fach);WHILE pos2<>0AND pos2MOD 2=0REP +pos2:=pos(faecherstring,fach,pos2+1);PER ;IF pos2=0THEN anzfaecherINCR 1; +ixfaecher:=anzfaecher;faecherstringCAT fach;ELSE ixfaecher:=(pos2+1)DIV 2FI ; +datenproshjprofachmerken(ixfaecher);pos1INCR 2;PER ;FI ;succ( +dnrhalbjahresdaten);FI ;PER ;ausgabederrowmatrixindatei;. +shjueberschriftenmerken:ixschulhjINCR 1;hilfstext:=wert(fnrhjdsj);uebsjCAT +subtext(hilfstext,1,2);uebsjCAT "/";uebsjCAT subtext(hilfstext,3,4);uebsjCAT +doppblank;hilfstext:=text(wert(fnrhjdjgst),2);hilfstextCAT punkt;hilfstext +CAT wert(fnrhjdhj);uebjgstCAT hilfstext;uebjgstCAT blank+doppblank;. +faecherstringaufbereitenundweiterewertelesen:IF NOT faecherstringokTHEN +zaehler:=1;pos1:=1;WHILE zaehler<length(faecherstring)REP pos1:=pos( +faecherstring,subtext(faecherstring,zaehler,zaehler+1),zaehler+2);WHILE pos1 +<>0AND pos1MOD 2=0REP pos1:=pos(faecherstring,subtext(faecherstring,zaehler, +zaehler+1),pos1+1)PER ;IF pos1=0THEN zaehlerINCR 2;ELSE IF pos1MOD 2=1THEN +change(faecherstring,pos1,pos1+1,niltext);FI ;FI ;PER ;anzfaecher:=length( +faecherstring)DIV 2;faecherstringok:=TRUE ;FI ;faecher:=wert(fnrhjdfach); +kennungen:=wert(fnrhjdlerngrpkenn);klausuren:=wert(fnrhjdklausurteiln); +kursarten:=wert(fnrhjdkursart);punkte:=wert(fnrhjdnotepunkte);IF punkte= +niltextTHEN punkte:=length(faecher)*blankFI ;.ausgabederrowmatrixindatei: +zeile1:=uebsj;druckzeileschreiben(zeile1);zeile1:=uebjgst;druckzeileschreiben +(zeile1);zeile1:="-----+"+(10*"------+");druckzeileschreiben(zeile1);INT VAR +i;i:=1;FOR pos1FROM 1UPTO anzfaecherREP zeile1:=subtext(faecherstring,i,i+1); +zeile1CAT blanksdopp;zeile2:=2*blank+blanksdopp;FOR zaehlerFROM 1UPTO +ixschulhjREP IF faecherschulhj(pos1)(zaehler)=niltextTHEN zeile1CAT 3*blank+ +blanksdopp;zeile2CAT 3*blank+blanksdopp;ELSE zeile1CAT subtext(faecherschulhj +(pos1)(zaehler),1,6);zeile1CAT dopp;zeile2CAT subtext(faecherschulhj(pos1)( +zaehler),7,12);zeile2CAT dopp;FI ;PER ;iINCR 2;druckzeileschreiben(zeile1); +druckzeileschreiben(zeile2);PER ;END PROC listemitdatenzumschueleraufbereiten +;PROC datenproshjprofachmerken(INT CONST rowindex):IF faecherschulhj(rowindex +)(ixschulhj)<>niltextTHEN faecherschulhj(rowindex)(ixschulhj):=platzhalter +ELSE faecherschulhj(rowindex)(ixschulhj):=subtext(kennungen,1,4)+blank+ +subtext(klausuren,1,1)+subtext(punkte,1,2)+blank+blank+subtext(kursarten,1,2) +;FI ;kennungen:=subtext(kennungen,5,length(kennungen));klausuren:=subtext( +klausuren,2,length(klausuren));punkte:=subtext(punkte,3,length(punkte)); +kursarten:=subtext(kursarten,3,length(kursarten));END PROC +datenproshjprofachmerken;PROC egmaskenfelderleerenzurueckundmeldung(INT +CONST stufe):FOR zaehlerFROM 2UPTO 8REP standardmaskenfeld(niltext,zaehler); +PER ;return(stufe);standardmeldung(mnralledruckausgabenerstellt,niltext);END +PROC egmaskenfelderleerenzurueckundmeldung;PROC listedrucken:IF exists( +"Wahl- und Kursdaten")THEN print("Wahl- und Kursdaten")ELSE print("liste.1"); +FI ;END PROC listedrucken;PROC listeloeschen:forget("Wahl- und Kursdaten", +quiet);forget("liste.1",quiet)END PROC listeloeschen;PROC +wahlundkursdatenblaettern(INT CONST richtung):SELECT richtungOF CASE 1: +andenanfangCASE 2:eineseitevorCASE 3:eineseitezurueckCASE 4:andasende +ENDSELECT ;return(1).andenanfang:aktuellezeile:=erster;listezeigenabzeile( +aktuellezeile);.andasende:aktuellezeile:=max(1,letzter- +listeneintraegeproseite+1);listezeigenabzeile(aktuellezeile);.eineseitevor: +IF aktuellezeile+listeneintraegeproseite>letzterTHEN standardmeldung( +meldungblaetternnichtmöglich,"")ELSE aktuellezeileINCR +listeneintraegeproseite;listezeigenabzeile(aktuellezeile)FI ;. +eineseitezurueck:IF aktuellezeile=ersterTHEN standardmeldung( +meldungblaetternnichtmöglich,"")ELSE aktuellezeileDECR +listeneintraegeproseite;aktuellezeile:=max(aktuellezeile,erster); +listezeigenabzeile(aktuellezeile)FI ;END PROC wahlundkursdatenblaettern;PROC +wahldatenlistenseiteaktualisieren:INT VAR i,fnr;standardnproc;fnr:= +fnrerstesankreuzfeld;FOR iFROM aktuellezeileUPTO min(aktuellezeile+ +listeneintraegeproseite,letzter)REP boolvektor(i):=standardmaskenfeld(fnr)<> +niltext;fnrINCR felderprolisteneintragPER END PROC +wahldatenlistenseiteaktualisieren;PROC listezeigenabzeile(INT CONST zeile): +INT VAR i,j1,j2,fnr;TEXT VAR t,t1;fnr:=fnrerstesankreuzfeld;FOR iFROM zeile +UPTO zeile+listeneintraegeproseiteREP IF i<=letzterTHEN t:=wahldatenzumindex( +i,kennungnursuname);feldfrei(fnr);IF boolvektor(i)THEN standardmaskenfeld( +ankreuzung,fnr);ELSE standardmaskenfeld(keineankreuzung,fnr);FI ; +bereiteschuelerzeileauf;standardmaskenfeld(t1,fnr+1);ELSE standardmaskenfeld( +niltext,fnr);feldschutz(fnr);standardmaskenfeld(dummyschueler,fnr+1)FI ;fnr +INCR felderprolisteneintrag;PER ;infeld(fnrerstesankreuzfeld); +standardfelderausgeben;.bereiteschuelerzeileauf:j1:=pos(t,trenner);j2:=pos(t, +trenner,j1+1);t1:=text(t,j1-1);t1CAT sunamenstrenner;t1CAT subtext(t,j1+1,j2- +1);t1:=text(t1,sulaengeohnedatum);t1CAT " ";t1CAT subtext(t,j2+1).END PROC +listezeigenabzeile;PROC naechsterindex(INT VAR index):indexINCR 1;WHILE index +<=letzterCAND NOT boolvektor(index)REP indexINCR 1PER ;IF index>letzterTHEN +index:=0FI END PROC naechsterindex;PROC wahlundkursdatenabschluss:INT VAR +ruecksprungweite:=1;IF ankreuzlisteTHEN forget(boolvektordatei,quiet); +ankreuzliste:=FALSE ;ruecksprungweiteINCR 1FI ;IF bearbeitungingangTHEN +bearbeitungingang:=FALSE ;ruecksprungweiteINCR 1FI ;listeloeschen;enter( +ruecksprungweite);END PROC wahlundkursdatenabschluss;BOOL PROC +plausisallgemok:standardmeldung(mnrbittewarten,niltext);ankreuzliste:=FALSE ; +bestschueler:=FALSE ;lsundneue:=FALSE ;nurneue:=FALSE ;nurls:=FALSE ; +standardpruefe(5,fnr7bs,fnr8dr,null,niltext,status);IF status<>0THEN infeld( +fnr7bs);mnrallgemein:=mnrauswahlnichtsinnvoll;LEAVE plausisallgemokWITH +FALSE FI ;bildschirmausgabe:=standardmaskenfeld(fnr8dr)=niltext;jgstls:= +standardmaskenfeld(fnr2jgstls);jgstneu:=standardmaskenfeld(fnr3jgstneu); +famname:=standardmaskenfeld(fnr4famname);rufname:=standardmaskenfeld( +fnr5rufname);gebdat:=standardmaskenfeld(fnr6gebdat);IF famname<>niltextCOR +rufname<>niltextCOR gebdat<>niltextTHEN bestschueler:=TRUE ;IF jgstls<> +niltextCOR jgstneu<>niltextTHEN infeld(fnr4famname);mnrallgemein:= +mnrjgstoderbestschueler;LEAVE plausisallgemokWITH FALSE FI ;ELSE IF jgstls= +niltextAND jgstneu=niltextTHEN infeld(fnr2jgstls);mnrallgemein:=mnrjgstfehlt; +LEAVE plausisallgemokWITH FALSE ;FI ;IF jgstls<>niltextTHEN standardpruefe(2, +fnr2jgstls,null,null,niltext,status);IF status<>0COR (int(jgstls)<10COR int( +jgstls)>13)THEN mnrallgemein:=mnrjgstfalsch;infeld(fnr2jgstls);LEAVE +plausisallgemokWITH FALSE ;FI ;FI ;IF jgstneu<>niltextTHEN standardpruefe(2, +fnr3jgstneu,null,null,niltext,status);IF status<>0COR (int(jgstneu)<11COR int +(jgstneu)>13)THEN mnrallgemein:=mnrjgstfalsch;infeld(fnr3jgstneu);LEAVE +plausisallgemokWITH FALSE ;FI ;FI ;IF jgstls=niltextTHEN nurneue:=TRUE ELIF +jgstneu=niltextTHEN nurls:=TRUE ELSE lsundneue:=TRUE FI ;FI ;TRUE END PROC +plausisallgemok;BOOL PROC schuelervorhanden:IF NOT bestschuelerTHEN +schuelerdatenauskwdatenraumholen(aktschueler);FI ;inittupel( +dnrhalbjahresdaten);putwert(fnrhjdfamnames,famname);putwert(fnrhjdrufnames, +rufname);putwert(fnrhjdgebdats,gebdat);putwert(fnrhjdsj,niltext);putwert( +fnrhjdhj,niltext);search(dnrhalbjahresdaten,FALSE );dbstatus=0AND wert( +fnrhjdfamnames)=famnameAND wert(fnrhjdrufnames)=rufnameAND wert(fnrhjdgebdats +)=gebdatEND PROC schuelervorhanden;BOOL PROC kurswahldatenraumda:INT VAR +fehler;sj:=schulkenndatum("Schuljahr");hj:=schulkenndatum("Schulhalbjahr"); +IF nurlsTHEN kurswahlinitialisieren(jgstls,jgstls,hj,ohneneuang,kwsj);ELIF +nurneueTHEN jgstls:=text(int(jgstneu)-1);kurswahlinitialisieren(jgstls,jgstls +,hj,neuang,kwsj);ELSE kurswahlinitialisieren(jgstls,jgstls,hj,mitneuang,kwsj) +FI ;kurswahlbasisholen(fehler);IF fehler<>0THEN mnrallgemein:= +mnrkeinekwdatenda;infeld(fnr2jgstls);ELSE erster:=ersterschueler;letzter:= +letzterschuelerFI ;fehler=0END PROC kurswahldatenraumda;END PACKET +likwwahlundkursdatensek2 + diff --git a/app/schulis/2.2.1/src/2.schueler zu kursen zuordnen b/app/schulis/2.2.1/src/2.schueler zu kursen zuordnen new file mode 100644 index 0000000..32187e4 --- /dev/null +++ b/app/schulis/2.2.1/src/2.schueler zu kursen zuordnen @@ -0,0 +1,384 @@ +PACKET schuelerzukursenzuordnenDEFINES schuelerkursenzuordnenabbruch, +schuelerkursenzuordnenanfang,schuelerkursenzuordnenpruefuebernahme, +schuelerkursenzuordnenuebernahme,schuelerkursenzuordnenpruefung, +schuelerkursenzuordnenspeichern,schuelerkursenzuordnenkopieren, +schuelerkursenzuordnenlisten:LET server="kurswahl server",kuwa2sperre= +"Kurswahl-2 ",anzschuelerbs=15,laengefakeartkl=9,laengekurs=6,laengedseintrag +=15,az="#",trenner1="$",trenner2="�",maskeeingang= +"ms schueler zu kursen zuordnen eingang",maskebearb= +"ms schueler zu kursen zuordnen bearb",stdzeigbloecke= +"1 2 3 4 5 6 7 8 9 10 11 ",leerewahldaten=" ", +leereweiterewahldaten=" ",kzname="N",kzkurse="K",kznurneue="N",kzohneneue= +"O",kzalle="A",kennungplanbl="P",kennungfapl="FP",kennungfaartkl="FAk", +kennungfakeartkl="FKAk",kennungfake="FK",kennungkeinkurs=" - ", +kennungkeinfach=" * ",meldungbearbwird=352,meldungfeldleeren=390, +meldungunbeklv=360,meldungfeldfuellen=52,meldungschonkurs=424, +meldungbittewarten=69,meldungfalscherwert=55,meldungspeicherfehler=364, +meldungjgstfalsch=404,meldungjgstfehlt=172,meldunghjfalsch=405,meldungpruefen +=329,meldungspeichern=50,meldungnspeichern=63,meldungandereauswahl=318, +meldungunzulauswahl=56,meldungserverfehler=376,meldunglistezeigen=7, +meldungparallelanw=425,meldungkeinedaten=68,meldungkeinekopfunktion=318, +logtext1="Anw. 2.2.2 ",logtext2=" für akt. ",text1="Kurszuordnung ",text2= +"Kurse übernehmen ",text3=" nach ",punkt=".",felderstername=7, +felderstekennung=9,feldletztekennung=65,anzfeldereingang=36;INT VAR i,j,z; +INT VAR letztepos:=2,ijgst,ihj,fstat,aktpos:=1,aktfeld,pos1,pos2,blockpos, +suchab,jgst1,jgst2,findpos,feld,blpos,kopzeile,aktzeile,anfpos,anzkurse, +anzsch,endpos,anzschueler,fapos,saktpos,ssuchab;TEXT VAR aktjgst,akthj:="", +gewjgst,gewhj,zusjgst,zushj,gewsj,alleplblbez,alleschueler1:="",alleschueler2 +:="",wahl,neuewahldaten,weiterewahldaten,wahldaten,alleschueler:="", +zeigbloecke,fach:="",art:="",kennungdesschuelers,name,kennungjetzt, +kennungvorher,planbloecke,aktfeldinh,t,nname,vname,gdat,ausgabe:="",block, +vorz,blockbez,aktkennung,liste:="",kurse,kurs,kennung,kursliste,fakennung, +fawahl,sname,logmeldung,klkz,klwahl;ROW anzfeldereingangTEXT VAR eingangrow; +ROW anzschuelerbsROW 4TEXT VAR schueler;BOOL VAR zusspaltezeigen:=FALSE , +belegungpruefen:=FALSE ,sperreok,speicherungsfehler:=FALSE ,bewertung, +klausurkz:=FALSE ;WINDOW VAR w;PROC schuelerkursenzuordnenpruefuebernahme:IF +menuedraussenTHEN reorganizescreenFI END PROC +schuelerkursenzuordnenpruefuebernahme;PROC schuelerkursenzuordnenuebernahme( +BOOL CONST uebernehmen):merkeeingangbs;IF uebernehmenTHEN standardmeldung( +meldungbittewarten,"");aktpos:=1;gewjgst:=eingangrow(2);gewhj:=eingangrow(3); +ijgst:=int(gewjgst);ihj:=int(gewhj);zusjgst:=eingangrow(35);zushj:=eingangrow +(36);IF akthj=""THEN akthj:=schulkenndatum("Schulhalbjahr")FI ;prueffeld2und3 +;prueffeld4;prueffeld5;prueffeld634;prueffeld3536;datenholen; +betrachtealleschueler;logmeldung:=text2;logmeldungCAT zusjgst;logmeldungCAT +punkt;logmeldungCAT zushj;logmeldungCAT text3;logmeldungCAT gewjgst; +logmeldungCAT punkt;logmeldungCAT gewhj;logbucheintragvornehmen(logmeldung); +kurswahlsperrebeenden(kuwa2sperre)FI ;enter(2).prueffeld2und3:IF gewjgst="" +THEN fehlermeldungausgeben(2,meldungjgstfehlt,1);LEAVE +schuelerkursenzuordnenuebernahmeELIF gewhj=""THEN fehlermeldungausgeben(2, +meldunghjfalsch,1);LEAVE schuelerkursenzuordnenuebernahmeELIF jgstfalsch( +gewjgst,"11")THEN fehlermeldungausgeben(2,meldungjgstfalsch,1);LEAVE +schuelerkursenzuordnenuebernahmeELIF ihj<1COR ihj>2THEN fehlermeldungausgeben +(3,meldunghjfalsch,1);LEAVE schuelerkursenzuordnenuebernahmeFI .prueffeld4: +aktfeldinh:=eingangrow(4);IF aktfeldinh=""THEN IF eingangrow(5)=""THEN +fehlermeldungausgeben(4,meldungandereauswahl,1);LEAVE +schuelerkursenzuordnenuebernahmeELSE LEAVE prueffeld4FI ELIF jgstfalsch( +gewjgst,aktfeldinh)THEN fehlermeldungausgeben(4,meldungunzulauswahl,1);LEAVE +schuelerkursenzuordnenuebernahmeELIF int(aktfeldinh)=ijgstTHEN pruefhjELIF +aktfeldinh="10"CAND akthj="1"THEN fehlermeldungausgeben(4, +meldungandereauswahl,1);LEAVE schuelerkursenzuordnenuebernahmeFI .pruefhj:IF +gewhj="1"CAND akthj="2"THEN fehlermeldungausgeben(3,meldungandereauswahl,1); +LEAVE schuelerkursenzuordnenuebernahmeFI .prueffeld5:aktfeldinh:=eingangrow(5 +);IF aktfeldinh=""THEN LEAVE prueffeld5ELIF aktfeldinh<>""CAND eingangrow(4) +<>""THEN IF int(aktfeldinh)<>int(eingangrow(4))+1THEN fehlermeldungausgeben(5 +,meldungunzulauswahl,1);LEAVE schuelerkursenzuordnenuebernahmeFI ELIF int( +aktfeldinh)>ijgstTHEN fehlermeldungausgeben(5,meldungunzulauswahl,1);LEAVE +schuelerkursenzuordnenuebernahmeFI .prueffeld634:FOR iFROM 6UPTO 34REP IF +standardmaskenfeld(i)<>""THEN fehlermeldungausgeben(i,meldungfeldleeren,1); +LEAVE schuelerkursenzuordnenuebernahmeFI PER .prueffeld3536:zusjgst:= +eingangrow(35);zushj:=eingangrow(36);IF zusjgst=""THEN fehlermeldungausgeben( +35,meldungjgstfehlt,1);LEAVE schuelerkursenzuordnenuebernahmeELIF zushj="" +THEN fehlermeldungausgeben(36,meldunghjfalsch,1);LEAVE +schuelerkursenzuordnenuebernahmeELIF zusjgst=gewjgstCAND zushj=gewhjTHEN +fehlermeldungausgeben(35,meldungandereauswahl,1);LEAVE +schuelerkursenzuordnenuebernahmeELIF jgstfalsch(zusjgst,"11")THEN +fehlermeldungausgeben(35,meldungjgstfalsch,1);LEAVE +schuelerkursenzuordnenuebernahmeELIF zushj<>"1"CAND zushj<>"2"THEN +fehlermeldungausgeben(36,meldunghjfalsch,1);LEAVE +schuelerkursenzuordnenuebernahmeFI .datenholen:IF NOT exists(/server)THEN +fehlermeldungausgeben(letztepos,meldungserverfehler,1);LEAVE +schuelerkursenzuordnenuebernahmeFI ;IF eingangrow(4)=""THEN t:=kznurneue; +aktjgst:=text(int(eingangrow(5))-1)ELIF eingangrow(5)=""THEN t:=kzohneneue; +aktjgst:=eingangrow(4)ELSE t:=kzalle;aktjgst:=eingangrow(4)FI ; +kurswahlinitialisieren(aktjgst,gewjgst,gewhj,t,gewsj);kurswahlbasisholen( +fstat);erweitertekurswahlbasisholen(zusjgst,zushj,fstat);kurswahlsperresetzen +(kuwa2sperre,sperreok);IF NOT sperreokTHEN fehlermeldungausgeben(infeld, +meldungparallelanw,1);LEAVE schuelerkursenzuordnenuebernahmeFI . +betrachtealleschueler:FOR iFROM ersterschuelerUPTO letzterschuelerREP +wahldaten:=wahldatenzumindex(i,kzkurse);name:=wahldatenzumindex(i,kzname); +pos1:=pos(name,trenner2,1)-1;pos2:=pos(name,trenner2,pos1+2)-1;nname:=subtext +(name,1,pos1);vname:=subtext(name,pos1+2,pos2);gdat:=subtext(name,pos2+2,pos2 ++9);standardmeldung(meldungbearbwird,vname+" "+nname+az);weiterewahldaten:= +weiterewahldatenzumschueler(nname,vname,gdat,kennungfakeartkl); +betrachtekennungen;kurswahl2sichern(fstat)PER .betrachtekennungen:pos1:=1; +neuewahldaten:="";WHILE pos1<length(wahldaten)REP wahl:=subtext(wahldaten, +pos1,pos1+laengedseintrag-1);kennungjetzt:=subtext(wahl,6,9);fach:=subtext( +wahl,4,5);art:=subtext(wahl,2,3);kennungvorher:=kennungvonfach(TRUE );IF +kennungjetzt<>kennungvorherTHEN planbloecke:=kursdaten(fach+kennungvorher, +kennungplanbl);IF dbstatus=0THEN neuewahldatenCAT text(wahl,1);neuewahldaten +CAT art;neuewahldatenCAT fach;neuewahldatenCAT kennungvorher;neuewahldaten +CAT planbloeckeELSE neuewahldatenCAT wahlFI ELSE neuewahldatenCAT wahlFI ; +pos1INCR laengedseintragPER ;IF wahldaten<>neuewahldatenTHEN +schuelerwahleintragen(nname,vname,gdat,neuewahldaten)FI .END PROC +schuelerkursenzuordnenuebernahme;PROC schuelerkursenzuordnenanfang: +standardstartproc(maskeeingang);gibeingangaus;standardfelderausgeben;infeld( +letztepos);standardnproc.gibeingangaus:FOR iFROM 2UPTO anzfeldereingangREP +standardmaskenfeld(eingangrow(i),i);IF eingangrow(i)<>""THEN letztepos:=iFI +PER .END PROC schuelerkursenzuordnenanfang;PROC +schuelerkursenzuordnenpruefung:standardmeldung(meldungbittewarten,""); +merkeeingangbs;aktpos:=1;gewjgst:=eingangrow(2);gewhj:=eingangrow(3);ijgst:= +int(gewjgst);ihj:=int(gewhj);IF akthj=""THEN akthj:=schulkenndatum( +"Schulhalbjahr")FI ;prueffeld2und3;prueffeld4;prueffeld5;prueffeld6und7; +prueffeld8bis13;prueffeld3536;datenholen;betrachtebelegung; +planblockbezpruefen;schueleraufzeigen.betrachtebelegung:FOR iFROM 14UPTO 23 +REP IF eingangrow(i)<>""THEN planblockvorzpruefen;planblockbez15bis23pruefen; +belegungpruefen:=TRUE ;LEAVE betrachtebelegungFI ;PER ;belegungpruefen:= +FALSE .prueffeld2und3:IF gewjgst=""THEN fehlermeldungausgeben(2, +meldungjgstfehlt,1);LEAVE schuelerkursenzuordnenpruefungELIF gewhj=""THEN +fehlermeldungausgeben(2,meldunghjfalsch,1);LEAVE +schuelerkursenzuordnenpruefungELIF jgstfalsch(gewjgst,"11")THEN +fehlermeldungausgeben(2,meldungjgstfalsch,1);LEAVE +schuelerkursenzuordnenpruefungELIF ihj<1COR ihj>2THEN fehlermeldungausgeben(3 +,meldunghjfalsch,1);LEAVE schuelerkursenzuordnenpruefungFI .prueffeld4: +aktfeldinh:=eingangrow(4);IF aktfeldinh=""THEN IF eingangrow(5)=""THEN +fehlermeldungausgeben(4,meldungandereauswahl,1);LEAVE +schuelerkursenzuordnenpruefungELSE LEAVE prueffeld4FI ELIF jgstfalsch(gewjgst +,aktfeldinh)THEN fehlermeldungausgeben(4,meldungunzulauswahl,1);LEAVE +schuelerkursenzuordnenpruefungELIF int(aktfeldinh)=ijgstTHEN pruefhjELIF +aktfeldinh="10"CAND akthj="1"THEN fehlermeldungausgeben(4, +meldungandereauswahl,1);LEAVE schuelerkursenzuordnenpruefungFI .pruefhj:IF +gewhj="1"CAND akthj="2"THEN fehlermeldungausgeben(3,meldungandereauswahl,1); +LEAVE schuelerkursenzuordnenpruefungFI .prueffeld5:aktfeldinh:=eingangrow(5); +IF aktfeldinh=""THEN LEAVE prueffeld5ELIF aktfeldinh<>""CAND eingangrow(4)<> +""THEN IF int(aktfeldinh)<>int(eingangrow(4))+1THEN fehlermeldungausgeben(5, +meldungunzulauswahl,1);LEAVE schuelerkursenzuordnenpruefungFI ELIF int( +aktfeldinh)>ijgstTHEN fehlermeldungausgeben(5,meldungunzulauswahl,1);LEAVE +schuelerkursenzuordnenpruefungFI .prueffeld6und7:zusjgst:=eingangrow(6);zushj +:=eingangrow(7);IF zusjgst=""CAND zushj<>""THEN fehlermeldungausgeben(6, +meldungjgstfehlt,1);LEAVE schuelerkursenzuordnenpruefungELIF zushj=""CAND +zusjgst<>""THEN fehlermeldungausgeben(7,meldunghjfalsch,1);LEAVE +schuelerkursenzuordnenpruefungELIF zushj=""CAND zusjgst=""THEN +zusspaltezeigen:=FALSE ELIF zusjgst=gewjgstCAND zushj=gewhjTHEN +fehlermeldungausgeben(6,meldungandereauswahl,1);LEAVE +schuelerkursenzuordnenpruefungELIF jgstfalsch(gewjgst,"11")THEN +fehlermeldungausgeben(6,meldungjgstfalsch,1);LEAVE +schuelerkursenzuordnenpruefungELIF ihj<1COR ihj>2THEN fehlermeldungausgeben(7 +,meldunghjfalsch,1);LEAVE schuelerkursenzuordnenpruefungELIF jgstfalsch( +gewjgst,zusjgst)THEN fehlermeldungausgeben(6,meldungandereauswahl,1);LEAVE +schuelerkursenzuordnenpruefungELSE zusspaltezeigen:=TRUE FI .prueffeld8bis13: +klkz:=compress(eingangrow(10));klausurkz:=klkz<>"";FOR iFROM 8UPTO 13REP IF +eingangrow(i)<>""THEN LEAVE prueffeld8bis13FI PER ;fehlermeldungausgeben(8, +meldungfeldfuellen,1);LEAVE schuelerkursenzuordnenpruefung.prueffeld3536:IF +eingangrow(35)<>""COR eingangrow(36)<>""THEN fehlermeldungausgeben(35, +meldungandereauswahl,1);LEAVE schuelerkursenzuordnenpruefungFI . +planblockvorzpruefen:IF planblockvorzfalsch(14)COR planblockvorzfalsch(16) +COR planblockvorzfalsch(18)COR planblockvorzfalsch(20)COR planblockvorzfalsch +(22)THEN kurswahlsperrebeenden(kuwa2sperre);LEAVE +schuelerkursenzuordnenpruefungFI .datenholen:IF NOT exists(/server)THEN +fehlermeldungausgeben(letztepos,meldungserverfehler,1);LEAVE +schuelerkursenzuordnenpruefungFI ;IF eingangrow(4)=""THEN t:=kznurneue; +aktjgst:=text(int(eingangrow(5))-1)ELIF eingangrow(5)=""THEN t:=kzohneneue; +aktjgst:=eingangrow(4)ELSE t:=kzalle;aktjgst:=eingangrow(4)FI ; +kurswahlinitialisieren(aktjgst,gewjgst,gewhj,t,gewsj);kurswahlbasisholen( +fstat);IF zusspaltezeigenTHEN erweitertekurswahlbasisholen(zusjgst,zushj, +fstat);FI ;kurswahlsperresetzen(kuwa2sperre,sperreok);IF sperreokTHEN +alleplblbez:=alleplanblockbezeichnerELSE fehlermeldungausgeben(infeld, +meldungparallelanw,1);LEAVE schuelerkursenzuordnenpruefungFI . +planblockbez15bis23pruefen:IF planblockbezfalsch(eingangrow(15))THEN +fehlermeldungausgeben(15,meldungfalscherwert,1);kurswahlsperrebeenden( +kuwa2sperre);LEAVE schuelerkursenzuordnenpruefungELIF planblockbezfalsch( +eingangrow(17))THEN fehlermeldungausgeben(17,meldungfalscherwert,1); +kurswahlsperrebeenden(kuwa2sperre);LEAVE schuelerkursenzuordnenpruefungELIF +planblockbezfalsch(eingangrow(19))THEN fehlermeldungausgeben(19, +meldungfalscherwert,1);kurswahlsperrebeenden(kuwa2sperre);LEAVE +schuelerkursenzuordnenpruefungELIF planblockbezfalsch(eingangrow(21))THEN +fehlermeldungausgeben(21,meldungfalscherwert,1);kurswahlsperrebeenden( +kuwa2sperre);LEAVE schuelerkursenzuordnenpruefungELIF planblockbezfalsch( +eingangrow(23))THEN fehlermeldungausgeben(23,meldungfalscherwert,1); +kurswahlsperrebeenden(kuwa2sperre);LEAVE schuelerkursenzuordnenpruefungFI . +planblockbezpruefen:zeigbloecke:="";FOR iFROM 24UPTO 34REP IF +planblockbezfalsch(eingangrow(i))THEN fehlermeldungausgeben(i, +meldungfalscherwert,1);kurswahlsperrebeenden(kuwa2sperre);LEAVE +schuelerkursenzuordnenpruefungFI ;IF eingangrow(i)<>""THEN zeigbloeckeCAT +konvblock(eingangrow(i))FI ;PER .END PROC schuelerkursenzuordnenpruefung; +BOOL PROC planblockbezfalsch(TEXT CONST anwblock):suchab:=1;IF anwblock="" +THEN FALSE ELSE block:=text(anwblock,3);WHILE pos(alleplblbez,block,suchab)<> +0REP j:=pos(alleplblbez,block,suchab);IF jMOD 3=1THEN LEAVE +planblockbezfalschWITH FALSE ELSE suchab:=j+1FI PER ;TRUE FI END PROC +planblockbezfalsch;BOOL PROC planblockvorzfalsch(INT CONST feld):t:=( +eingangrow(feld)SUB 1);IF t<>""THEN IF eingangrow(feld+1)=""THEN +fehlermeldungausgeben(feld+1,meldungfeldfuellen,1);TRUE ELIF NOT (t="-"COR t= +"+")THEN fehlermeldungausgeben(feld,meldungfalscherwert,1);TRUE ELSE FALSE +FI ELIF eingangrow(feld+1)<>""THEN fehlermeldungausgeben(feld, +meldungfeldfuellen,1);TRUE ELSE FALSE FI END PROC planblockvorzfalsch;PROC +fehlermeldungausgeben(INT CONST feld,meldung,ruecksprung):infeld(feld); +standardmeldung(meldung,"");return(ruecksprung)END PROC fehlermeldungausgeben +;BOOL PROC jgstfalsch(TEXT CONST jgst,abjgst):jgst1:=int(jgst);jgst2:=int( +abjgst);jgst1<jgst2COR jgst1>13END PROC jgstfalsch;PROC initbspuffer:FOR i +FROM 1UPTO anzschuelerbsREP schueler(i)(1):="";schueler(i)(2):="";schueler(i) +(3):="";schueler(i)(4):=""PER END PROC initbspuffer;PROC schueleraufzeigen: +fach:=text(eingangrow(8),2);art:=text(eingangrow(9),2);holschueler;IF +alleschueler=""THEN meldungkeineschueler;kurswahlsperrebeenden(kuwa2sperre) +ELSE zeigbearbschirm;standardnprocFI .zeigbearbschirm:standardstartproc( +maskebearb);standardkopfmaskeaktualisieren("Kurszuordnung für jetzige Jgst. " ++aktjgst+" in "+gewjgst+"."+gewhj);ausgabe:=fach;ausgabeCAT art;ausgabeCAT +text(eingangrow(10),1);IF eingangrow(11)<>""THEN ausgabeCAT "+";ausgabeCAT +text(eingangrow(11),2);ausgabeCAT text(eingangrow(12),2);ausgabeCAT text( +eingangrow(13),1);ELSE ausgabeCAT " "FI ;standardmaskenfeld(ausgabe,2); +ausgabe:=" ";ausgabeCAT text(eingangrow(14),1);ausgabeCAT konvblock( +eingangrow(15));ausgabeCAT text(eingangrow(16),1);ausgabeCAT konvblock( +eingangrow(17));ausgabeCAT text(eingangrow(18),1);ausgabeCAT konvblock( +eingangrow(19));ausgabeCAT text(eingangrow(20),1);ausgabeCAT konvblock( +eingangrow(21));ausgabeCAT text(eingangrow(22),1);ausgabeCAT konvblock( +eingangrow(23));standardmaskenfeld(ausgabe,3);IF zusspaltezeigenTHEN +standardmaskenfeld(eingangrow(6)+"."+eingangrow(7),4);ELSE standardmaskenfeld +(" ",4);FI ;standardmaskenfeld(fach,5);IF zeigbloecke=""THEN zeigbloecke:= +stdzeigbloecke;standardmaskenfeld(stdzeigbloecke,6)ELSE standardmaskenfeld( +text(zeigbloecke,33),6)FI ;zeigschueler.meldungkeineschueler: +fehlermeldungausgeben(14,meldungkeinedaten,1).holschueler:alleschueler:=""; +alleschueler1:=schuelermitwahl(fach,"",art,eingangrow(10));IF eingangrow(11) +<>""THEN alleschueler2:=schuelermitwahl(eingangrow(11),"",eingangrow(12), +eingangrow(13));schuelervergleichELSE alleschueler2:="";IF belegungpruefen +THEN pruefbelegungallerschuelerELSE alleschueler:=alleschueler1;anzschueler:= +anzahlschuelermitwahl(fach,"",art,eingangrow(10))FI ;FI . +pruefbelegungallerschueler:saktpos:=1;ssuchab:=2;alleschueler:="";anzschueler +:=0;WHILE saktpos<>0REP saktpos:=pos(alleschueler1,trenner1,ssuchab);IF +saktpos<>0THEN sname:=subtext(alleschueler1,ssuchab,saktpos-1);IF +richtigebelegung(sname)THEN alleschuelerCAT trenner1+sname;anzschuelerINCR 1 +FI ;ssuchab:=saktpos+1FI PER ;sname:=subtext(alleschueler1,ssuchab);IF +richtigebelegung(sname)THEN alleschuelerCAT trenner1+sname;anzschuelerINCR 1 +FI .END PROC schueleraufzeigen;PROC zeigschueler:aktfeld:=felderstername; +initbspuffer;FOR iFROM 1UPTO anzschuelerbsREP wahldaten:="";weiterewahldaten +:="";kennungdesschuelers:="";standardmaskenfeld(schuelername,aktfeld); +standardmaskenfeld(text(wahldaten,22),aktfeld+3);standardmaskenfeld( +weiterewahldaten,aktfeld+1);IF kennungdesschuelers=leereweiterewahldatenTHEN +standardmaskenfeld("",aktfeld+2)ELSE standardmaskenfeld(kennungdesschuelers, +aktfeld+2)FI ;aktfeldINCR 4PER ;infeld(1);standardfelderausgeben;infeld(9). +END PROC zeigschueler;TEXT PROC schuelername:findpos:=pos(alleschueler, +trenner1,aktpos+1);IF findpos>0THEN name:=subtext(alleschueler,aktpos+2, +findpos-1);aktpos:=findposELIF aktpos=length(alleschueler)THEN name:=""ELSE +name:=subtext(alleschueler,aktpos+2);aktpos:=length(alleschueler)FI ; +bereitenameauf(name)END PROC schuelername;TEXT PROC bereitenameauf(TEXT +CONST name):ausgabe:=name;change(ausgabe,trenner2,", ");ausgabe:=text(ausgabe +,pos(ausgabe,trenner2)-1);wahldatenaufbereiten(name);text(ausgabe,23)END +PROC bereitenameauf;PROC wahldatenaufbereiten(TEXT CONST name):TEXT VAR +zblock;IF name=""THEN wahldaten:=leerewahldaten;weiterewahldaten:= +leereweiterewahldatenELSE pos1:=pos(name,trenner2,1)-1;pos2:=pos(name, +trenner2,pos1+2)-1;nname:=subtext(name,1,pos1);vname:=subtext(name,pos1+2, +pos2);gdat:=subtext(name,pos2+2,pos2+9);kennungdesschuelers:=kennungvonfach( +FALSE );IF kennungdesschuelers=kennungkeinfachCOR kennungdesschuelers= +kennungkeinkursTHEN kennungdesschuelers:=""FI ;schueler(i)(1):=nname;schueler +(i)(2):=vname;schueler(i)(3):=gdat;schueler(i)(4):=kennungdesschuelers; +ermittlewahldaten;ermittleweiterewahldatenFI .ermittlewahldaten:wahl:= +wahldatenzumschueler(nname,vname,gdat,kennungfake);blockpos:=1;WHILE blockpos +<length(zeigbloecke)REP zblock:=subtext(zeigbloecke,blockpos,blockpos+2);IF +schuelerinplanblock(nname,vname,gdat,zblock)THEN wahldatenCAT +fachvomplanblock(zblock);ELSE wahldatenCAT " "FI ;blockposINCR 3PER . +ermittleweiterewahldaten:IF zusspaltezeigenTHEN weiterewahldaten:= +kennungvonfach(TRUE )ELSE weiterewahldaten:=leereweiterewahldatenFI .END +PROC wahldatenaufbereiten;TEXT PROC kennungvonfach(BOOL CONST inweiterendaten +):fapos:=1;fawahl:="";IF inweiterendatenTHEN fawahl:= +weiterewahldatenzumschueler(nname,vname,gdat,kennungfakeartkl)ELSE fawahl:= +wahldatenzumschueler(nname,vname,gdat,kennungfakeartkl)FI ;IF fawahl=""THEN +leereweiterewahldatenELSE betrachteallefaecherFI .betrachteallefaecher:WHILE +fapos<length(fawahl)REP IF subtext(fawahl,fapos,fapos+1)=fachCAND subtext( +fawahl,fapos+6,fapos+7)=artTHEN fakennung:=subtext(fawahl,fapos+2,fapos+5); +IF fakennung=leereweiterewahldatenTHEN LEAVE betrachteallefaecherWITH +kennungkeinkursELSE LEAVE betrachteallefaecherWITH compress(fakennung)FI +ELSE faposINCR laengefakeartklFI PER ;kennungkeinfach.END PROC kennungvonfach +;TEXT PROC fachvomplanblock(TEXT CONST block):TEXT VAR plbld:=planblockdaten( +block,kzkurse),k;blpos:=1;WHILE blpos<LENGTH wahlREP k:=subtext(wahl,blpos, +blpos+laengekurs-1);IF kurseingetragen(plbld,k)THEN LEAVE fachvomplanblock +WITH text(k,2)ELSE blposINCR laengekursFI PER ;" "END PROC fachvomplanblock; +BOOL PROC kurseingetragen(TEXT CONST quelle,teilmuster):INT VAR suchab:=1, +aktpos;WHILE pos(quelle,teilmuster,suchab)<>0REP aktpos:=pos(quelle, +teilmuster,suchab);IF aktposMOD laengekurs=1THEN LEAVE kurseingetragenWITH +TRUE ELSE suchab:=aktpos+1FI PER ;FALSE END PROC kurseingetragen;PROC +schuelervergleich:saktpos:=1;ssuchab:=2;anzschueler:=0;WHILE saktpos<>0REP +saktpos:=pos(alleschueler1,trenner1,ssuchab);IF saktpos<>0THEN sname:=subtext +(alleschueler1,ssuchab,saktpos-1);IF pos(alleschueler2,sname)>0THEN IF +belegungpruefenTHEN IF richtigebelegung(sname)THEN alleschuelerCAT trenner1+ +sname;anzschuelerINCR 1FI ELSE alleschuelerCAT trenner1+sname;anzschueler +INCR 1FI FI ;ssuchab:=saktpos+1FI PER ;sname:=subtext(alleschueler1,ssuchab); +IF pos(alleschueler2,sname)>0THEN IF belegungpruefenTHEN IF richtigebelegung( +sname)THEN alleschuelerCAT trenner1+sname;anzschuelerINCR 1FI ELSE +alleschuelerCAT trenner1+sname;anzschuelerINCR 1FI FI .END PROC +schuelervergleich;BOOL PROC richtigebelegung(TEXT CONST name):bewertung:= +TRUE ;pos1:=pos(name,trenner2,2)-1;pos2:=pos(name,trenner2,pos1+2)-1;nname:= +subtext(name,2,pos1);vname:=subtext(name,pos1+2,pos2);gdat:=subtext(name,pos2 ++2,pos2+9);feld:=12;FOR iFROM 1UPTO 5REP feldINCR 2;vorz:=eingangrow(feld); +IF vorz<>""THEN blockbez:=eingangrow(feld+1);block:=konvblock(blockbez);IF +vorz="-"THEN bewertung:=NOT schuelerinplanblock(nname,vname,gdat,block)ELSE +bewertung:=schuelerinplanblock(nname,vname,gdat,block)FI ;IF NOT bewertung +THEN LEAVE richtigebelegungWITH FALSE FI FI ;PER ;bewertungEND PROC +richtigebelegung;PROC schuelerkursenzuordnenspeichern(BOOL CONST speichern): +speicherungsfehler:=FALSE ;IF speichernTHEN pruefkennungen;speicherkennungen; +logmeldung:=text1;logmeldungCAT gewjgst;logmeldungCAT punkt;logmeldungCAT +gewhj;logbucheintragvornehmen(logmeldung);kurswahl2sichern(i);ELSE +standardmeldung(meldungnspeichern," ")FI ;naechsterbildschirm.pruefkennungen: +standardmeldung(meldungpruefen," ");j:=felderstekennung;FOR iFROM 1UPTO +anzschuelerbsREP kennung:=standardmaskenfeld(j);infeld(j);IF kennung<>""THEN +IF schueler(i)(1)=""THEN fehlermeldungkeinschuelerFI ;planbloecke:=compress( +kursdaten(fach+kennung,kennungplanbl));IF dbstatus<>0THEN +fehlermeldungunbekkennungELIF planbloecke<>""CAND kennung<>schueler(i)(4) +THEN pruefplanbloeckeFI FI ;jINCR 4PER .pruefplanbloecke:prueferstenblock;IF +length(planbloecke)>3THEN pruefzweitenblockFI .prueferstenblock:IF +schuelerinplanblock(schueler(i)(1),schueler(i)(2),schueler(i)(3),text( +planbloecke,3))THEN fehlermeldungschonkursblock1FI .pruefzweitenblock:IF +schuelerinplanblock(schueler(i)(1),schueler(i)(2),schueler(i)(3),subtext( +planbloecke,4))THEN fehlermeldungschonkursblock2FI . +fehlermeldungschonkursblock1:infeld((i-1)*4+9);standardmeldung( +meldungschonkurs,text(planbloecke,3)+az);return(1);LEAVE +schuelerkursenzuordnenspeichern.fehlermeldungschonkursblock2:infeld((i-1)*4+9 +);standardmeldung(meldungschonkurs,subtext(planbloecke,4)+az);return(1); +LEAVE schuelerkursenzuordnenspeichern.fehlermeldungkeinschueler: +fehlermeldungausgeben((i-1)*4+9,meldungfeldleeren,1);LEAVE +schuelerkursenzuordnenspeichern.fehlermeldungunbekkennung:infeld((i-1)*4+9); +standardmeldung(meldungunbeklv,fach+kennung+az);return(1);LEAVE +schuelerkursenzuordnenspeichern.speicherkennungen:standardmeldung( +meldungspeichern," ");j:=felderstekennung;FOR iFROM 1UPTO anzschuelerbsREP +kennung:=standardmaskenfeld(j);infeld(j);IF kennung<>schueler(i)(4)THEN IF +NOT klausurkzTHEN ermittleklkennzFI ;schuelerwahlaendern(schueler(i)(1), +schueler(i)(2),schueler(i)(3),fach,schueler(i)(4),art,fach,kennung,art,klkz); +IF dbstatus<>0THEN speicherungsfehler:=TRUE FI ;FI ;jINCR 4PER ;IF +speicherungsfehlerTHEN kurswahlserveraktualisieren(aktjgst,gewjgst,gewhj)FI . +naechsterbildschirm:kurswahl0holen(fstat);kurswahl1holen(fstat);IF aktpos< +length(alleschueler)CAND NOT speicherungsfehlerTHEN zeigschueler;return(1); +IF speicherungsfehlerTHEN standardmeldung(meldungspeicherfehler,"");FI ELSE +kurswahlsperrebeenden(kuwa2sperre);enter(2);IF speicherungsfehlerTHEN +standardmeldung(meldungspeicherfehler,"");infeld(letztepos)FI FI .END PROC +schuelerkursenzuordnenspeichern;PROC ermittleklkennz:klwahl:= +wahldatenzumschueler(schueler(i)(1),schueler(i)(2),schueler(i)(3), +kennungfaartkl);z:=1;WHILE z<LENGTH (klwahl)REP IF subtext(klwahl,z,z+3)=fach ++artTHEN klkz:=klwahlSUB z+4;LEAVE ermittleklkennzELSE zINCR 5FI PER ;klkz:= +""END PROC ermittleklkennz;PROC schuelerkursenzuordnenabbruch: +kurswahlsperrebeenden(kuwa2sperre);enter(2)END PROC +schuelerkursenzuordnenabbruch;PROC schuelerkursenzuordnenkopieren:kopzeile:= +infeld;aktzeile:=kopzeile+4;aktkennung:=standardmaskenfeld(kopzeile);IF +kopzeile=feldletztekennungTHEN fehlermeldungkeinkopELSE WHILE aktzeile<= +feldletztekennungCAND schueler((aktzeile-5)DIV 4)(1)<>""REP +standardmaskenfeld(aktkennung,aktzeile);aktzeileINCR 4PER ;infeld(kopzeile+4) +;standardfelderausgeben;infeld(kopzeile+4);FI ;return(1).fehlermeldungkeinkop +:standardmeldung(meldungkeinekopfunktion,"").END PROC +schuelerkursenzuordnenkopieren;PROC schuelerkursenzuordnenlisten:kursliste:= +"";aktfeld:=infeld;w:=startwindow(35,23,77,1);liste:="";standardmeldung( +meldunglistezeigen,"");IF menuedraussenTHEN reorganizescreenFI ;fuelleliste; +infeld(1);standardfelderausgeben;open(w);auskunfterteilung(liste,w,FALSE ); +reorganizescreen;setlasteditvalues;infeld(aktfeld);return(1).fuelleliste: +listeCAT "Anzahl Schüler wie ausgewählt";listeCAT auskunftstextende;listeCAT +text(anzschueler);listeCAT auskunftstextende;listeCAT " ";listeCAT +auskunftstextende;listeCAT "Fach gewählt Kurszahl/-größe";listeCAT +auskunftstextende;listeCAT fach;listeCAT " ";listeCAT art;listeCAT " "; +listeCAT gewaehlteschueler;listeCAT " ";listeCAT anzahlkurse;listeCAT +kursgroesse;listeCAT auskunftstextende;listeCAT " ";listeCAT +auskunftstextende;listeCAT "Kurse Planblock Schüler";listeCAT +auskunftstextende;listeallerkurse.listeallerkurse:anfpos:=1;WHILE anfpos< +length(kursliste)REP listeCAT fach+" ";kennung:=subtext(kursliste,anfpos, +anfpos+3);listeCAT kennung;listeCAT " ";kurs:=kursdaten(fach+kennung, +kennungplanbl);IF kurs=""THEN listeCAT " "ELSE listeCAT text(int( +text(kurs,3)),2);listeCAT " ";listeCAT text(int(subtext(kurs,4)),2);liste +CAT " ";FI ;listeCAT text(anzahlschuelermitwahl(fach,kennung,"","")); +listeCAT auskunftstextende;anfposINCR 4PER .gewaehlteschueler:anzsch:= +anzahlschuelermitwahl(fach,"",art,"");text(text(anzsch),6).kursgroesse:text( +anzschDIV anzkurse).anzahlkurse:kurse:=allekurse;suchanfang;suchende;IF +anfpos=0THEN "0 "ELSE kurse:=subtext(kurse,anfpos,endpos); +betrachtekurse;text(text(anzkurse),10)FI .betrachtekurse:anzkurse:=0;anfpos:= +1;kursliste:="";WHILE anfpos<length(kurse)REP IF subtext(kurse,anfpos,anfpos+ +1)=fachCAND subtext(kurse,anfpos+8,anfpos+9)=artTHEN anzkurseINCR 1;kursliste +CAT subtext(kurse,anfpos+2,anfpos+5);FI ;anfposINCR 10PER .suchanfang:anfpos +:=pos(kurse,fach,1);WHILE anfpos<>0REP IF (anfposMOD 10)=1CAND subtext(kurse, +anfpos+8,anfpos+9)=artTHEN LEAVE suchanfangELSE anfpos:=pos(kurse,fach,anfpos ++1)FI ;PER .suchende:findpos:=pos(kurse,fach,anfpos+1);IF anfpos<>0THEN +endpos:=anfpos+9;WHILE findpos<>0REP IF (findposMOD 10)=1CAND subtext(kurse, +findpos+8,findpos+9)=artTHEN endpos:=findpos+9FI ;findpos:=pos(kurse,fach, +findpos+1)PER ;ELSE endpos:=0FI .END PROC schuelerkursenzuordnenlisten;TEXT +PROC konvblock(TEXT CONST blockbez):INT VAR block;IF blockbez<>""THEN block:= +int(text(blockbez,2));IF block<10THEN "0"+text(block)+text(blockbezSUB 3,1) +ELSE text(block)+text(blockbezSUB 3,1)FI ELSE " "FI END PROC konvblock; +PROC initrow:FOR iFROM 2UPTO anzfeldereingangREP eingangrow(i):=""PER END +PROC initrow;PROC merkeeingangbs:FOR iFROM 2UPTO anzfeldereingangREP +eingangrow(i):=standardmaskenfeld(i)PER .END PROC merkeeingangbs;PROC +logbucheintragvornehmen(TEXT CONST escfunktion):logeintrag(logtext1+ +escfunktion+logtext2+aktjgst)END PROC logbucheintragvornehmen;initrow;END +PACKET schuelerzukursenzuordnen; + diff --git a/app/schulis/2.2.1/src/2.stand der kursbildung analysieren b/app/schulis/2.2.1/src/2.stand der kursbildung analysieren new file mode 100644 index 0000000..f199978 --- /dev/null +++ b/app/schulis/2.2.1/src/2.stand der kursbildung analysieren @@ -0,0 +1,132 @@ +PACKET standderkursbildunganalysierenDEFINES +standderkursbildunganalysierenvorbereiten, +standderkursbildunganalysierenstarten,standderkursbildunganalysierendrucken: +LET maskeeingang="ms stand der kursbildung analysieren";LET fnrgewjgst=2, +fnrhalbjahr=3,fnraktjgst=4,fnrneuanjgst=5,fnralleschueler=6;FILE VAR prot; +LET protname="Zuordnung von Schülern zu Kursen";LET schulhalbjahr= +"Schulhalbjahr",schulname="Schulname",schulort="Schulort";LET jgst10=10, +jgst11=11,jgst13=13,hj1=1,hj2=2;LET meldnrdatenwerdengeprueft=57, +meldnrbittewarten=69,meldnrbearbeitetwird=102,meldnrbitteangabeergaenzen=129, +meldnrfalschejgstfolge=410,meldnrfalschebezugsjgst=411,meldnrkurswahlfehler= +416;LET feldanzmaskeeingang=6;ROW feldanzmaskeeingangTEXT VAR feldbs1;INT +VAR letztecursorfnr:=fnrgewjgst,pruefstatus,kurswahlstatus;TEXT VAR +aktuelleshalbjahr:="",aktjgst,gewjgst,gewhalbjahr,neuanjgst,gewschuljahr; +BOOL VAR alleschueler,fehlerinschuelerwahl;TEXT VAR gewschueler;LET +nuraktuelleschueler="O",nurneuangemeldete="N";INT VAR ischueler;TEXT VAR +wahldaten,schuelername,anfangsbuchstabe,kurs,gueltigekurse;INT VAR ikurs;LET +maxkurse=13;ROW maxkurseSTRUCT (TEXT eintrag,TEXT pb1,TEXT pb2)VAR +kurshinweis;TEXT VAR planbloecke,belegtebloecke,pbnr,pbkennung,pruefblock; +LET pbkennunga="a",pbkennungb="b",pbleer=" ";INT VAR poskurs;LET laengekurs +=6,laengeschuelerkurs=15,laengekursangaben=10,laengeplanblock=3;LET trenner= +"�",schraegstrich="/",doppelpunkt=":",kennzhell="#";LET kennungname="N", +kennungkurse="K",kennungplanblock="P";TEXT VAR auszeile,fachzeile,kurszeile, +fehlerzeile;LET ueberschrift="Zuordnung von Schülern zu Kursen",untertitel1= +"Jgst. ",erklaerung1="(Fehlende Zuordnungen sind mit ""_"" hervorgehoben,", +erklaerung2="Überschneidungen in Planblöcken mit ""*"",",erklaerung3= +"ungültige Kursbezeichnungen mit ""$"" markiert.)",blank=" ",zeilenbeginn= +" ",leereintrag=" :",ungueltigerkurs="$$$$:",fehlenderkurs="____:", +gleichzeitigerkurs="****:";initfelderdeseingangsbildschirms;PROC +standderkursbildunganalysierenvorbereiten:standardstartproc(maskeeingang); +wertedeseingangsbildschirmsholen;infeld(fnrgewjgst);standardfelderausgeben; +infeld(letztecursorfnr);standardnprocEND PROC +standderkursbildunganalysierenvorbereiten;PROC +standderkursbildunganalysierenstarten:eingangsbehandlung;IF pruefstatus>0 +THEN infeld(pruefstatus);return(1)ELSE wertedeseingangsbildschirmsmerken; +standardmeldung(meldnrbittewarten,"");kurswahlinitialisieren(aktjgst,gewjgst, +gewhalbjahr,gewschueler,gewschuljahr);kurswahlbasisholen(kurswahlstatus);IF +kurswahlstatus<>0THEN kurswahlfehlerbehandeln;return(1)ELSE +protokollvorbereiten;kurszuordnungenanalysieren;zeigedatei(protname,"")FI FI +.protokollvorbereiten:forget(protname,quiet);prot:=sequentialfile(output, +protname);putline(prot,schulkenndatum(schulname));auszeile:=text( +schulkenndatum(schulort),60);auszeileCAT date;putline(prot,auszeile);line( +prot,2);putline(prot,20*blank+ueberschrift);auszeile:=22*blank;auszeileCAT +untertitel1;auszeileCAT aktjgst;auszeileCAT " für ";auszeileCAT gewjgst; +auszeileCAT ".";auszeileCAT gewhalbjahr;auszeileCAT blank;auszeileCAT +aufberschuljahr;putline(prot,auszeile);line(prot,2);auszeile:=erklaerung1; +putline(prot,auszeile);auszeile:=erklaerung2;putline(prot,auszeile);auszeile +:=erklaerung3;putline(prot,auszeile).END PROC +standderkursbildunganalysierenstarten;PROC kurswahlfehlerbehandeln: +standardmeldung(meldnrkurswahlfehler,"");pause(10)END PROC +kurswahlfehlerbehandeln;TEXT PROC aufberschuljahr:TEXT VAR aufbersj:=subtext( +gewschuljahr,1,2);aufbersjCAT schraegstrich;aufbersjCAT subtext(gewschuljahr, +3,4);aufbersjEND PROC aufberschuljahr;PROC kurszuordnungenanalysieren: +gueltigekurse:=allekurse;anfangsbuchstabe:="";FOR ischuelerFROM +ersterschuelerUPTO letzterschuelerREP schuelerwahluntersuchenPER . +schuelerwahluntersuchen:fachzeile:=zeilenbeginn;kurszeile:=zeilenbeginn; +wahldaten:=wahldatenzumindex(ischueler,kennungkurse);schuelername:= +wahldatenzumindex(ischueler,kennungname);IF (schuelernameSUB 1)<> +anfangsbuchstabeTHEN anfangsbuchstabe:=schuelernameSUB 1;standardmeldung( +meldnrbearbeitetwird,anfangsbuchstabe+kennzhell)FI ;fehlerinschuelerwahl:= +FALSE ;belegtebloecke:="";poskurs:=1;FOR ikursFROM 1UPTO maxkurseREP kurs:= +subtext(wahldaten,poskurs+3,poskurs+laengekurs+2);IF kurs<>""THEN +facheintragen;kurseintragen;kurshinweiseintragenELSE leereintraegeergaenzen +FI ;poskursINCR laengeschuelerkursPER ;fehlerzeilezusammenstellen;IF +fehlerinschuelerwahlCOR alleschuelerTHEN line(prot);changeall(schuelername, +trenner,", ");putline(prot,schuelername);putline(prot,fachzeile);putline(prot +,kurszeile);putline(prot,fehlerzeile)FI .facheintragen:fachzeileCAT subtext( +kurs,1,2);fachzeileCAT " :".kurseintragen:IF subtext(kurs,3,6)<>" "THEN +kurszeileCAT subtext(kurs,3,6)ELSE kurszeileCAT subtext(wahldaten,poskurs+1, +poskurs+2);kurszeileCAT " "FI ;kurszeileCAT doppelpunkt.kurshinweiseintragen +:IF subtext(kurs,3,6)=" "THEN kurshinweis(ikurs).eintrag:=fehlenderkurs +ELIF suchpos(gueltigekurse,kurs,laengekursangaben)=0THEN kurshinweis(ikurs). +eintrag:=ungueltigerkursELSE kurshinweis(ikurs).eintrag:="";planbloecke:= +kursdaten(kurs,kennungplanblock);kurshinweis(ikurs).pb1:=subtext(planbloecke, +1,3);kurshinweis(ikurs).pb2:=subtext(planbloecke,4,6);belegtenblockeintragen( +kurshinweis(ikurs).pb1);belegtenblockeintragen(kurshinweis(ikurs).pb2)FI . +fehlerzeilezusammenstellen:fehlerzeile:=zeilenbeginn;FOR ikursFROM 1UPTO +maxkurseREP IF kurshinweis(ikurs).eintrag=""THEN doppelbelegungpruefen; +fehlerzeileCAT kurshinweis(ikurs).eintrag;ELIF kurshinweis(ikurs).eintrag= +leereintragTHEN fehlerzeileCAT leereintragELSE fehlerzeileCAT kurshinweis( +ikurs).eintrag;fehlerinschuelerwahl:=TRUE FI PER .leereintraegeergaenzen: +fachzeileCAT leereintrag;kurszeileCAT leereintrag;kurshinweis(ikurs).eintrag +:=leereintrag.doppelbelegungpruefen:pruefblock:=kurshinweis(ikurs).pb1;IF +schnittliegtvorTHEN kurshinweis(ikurs).eintrag:=gleichzeitigerkurs; +fehlerinschuelerwahl:=TRUE ELSE pruefblock:=kurshinweis(ikurs).pb2;IF +schnittliegtvorTHEN kurshinweis(ikurs).eintrag:=gleichzeitigerkurs; +fehlerinschuelerwahl:=TRUE ELSE kurshinweis(ikurs).eintrag:=leereintragFI FI +.schnittliegtvor:IF pruefblock=pbleerTHEN FALSE ELSE pos(belegtebloecke, +pruefblock,suchpos(belegtebloecke,pruefblock,laengeplanblock)+1)>0FI .END +PROC kurszuordnungenanalysieren;PROC belegtenblockeintragen(TEXT VAR +belegterpb):IF belegterpb<>pbleerTHEN pbnr:=subtext(belegterpb,1,2);pbkennung +:=belegterpbSUB laengeplanblock;belegtebloeckeCAT pbnr;belegtebloeckeCAT +pbkennung;IF pbkennung=blankTHEN belegtebloeckeCAT pbnr;belegtebloeckeCAT +pbkennunga;belegtebloeckeCAT pbnr;belegtebloeckeCAT pbkennungb;ELSE +belegtebloeckeCAT pbnr;belegtebloeckeCAT blankFI ;FI END PROC +belegtenblockeintragen;PROC standderkursbildunganalysierendrucken(BOOL CONST +drucken):IF druckenTHEN print(protname)FI ;forget(protname,quiet);enter(2) +END PROC standderkursbildunganalysierendrucken;PROC eingangsbehandlung: +pruefstatus:=0;standardmeldung(meldnrdatenwerdengeprueft,"");aktjgst:= +standardmaskenfeld(fnraktjgst);gewhalbjahr:=standardmaskenfeld(fnrhalbjahr); +gewjgst:=standardmaskenfeld(fnrgewjgst);neuanjgst:=standardmaskenfeld( +fnrneuanjgst);alleschueler:=standardmaskenfeld(fnralleschueler)<>"";IF +aktuelleshalbjahr=""THEN aktuelleshalbjahr:=schulkenndatum(schulhalbjahr)FI ; +allgemeinefelderpruefen.allgemeinefelderpruefen:standardpruefe(3,fnrgewjgst, +jgst11,jgst13,"",pruefstatus);IF pruefstatus>0THEN 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 .END PROC eingangsbehandlung;INT +PROC suchpos(TEXT CONST quelle,suchtext,INT CONST laenge):INT VAR findpos:= +pos(quelle,suchtext);WHILE findpos>0REP IF findposMOD laenge=1THEN LEAVE +suchposWITH findposELSE findpos:=pos(quelle,suchtext,findpos+1);FI PER ; +findposEND PROC suchpos;PROC initfelderdeseingangsbildschirms:INT VAR i;FOR i +FROM 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;END PACKET standderkursbildunganalysieren + diff --git a/app/schulis/2.2.1/src/3.anschr.betroffene lehrer b/app/schulis/2.2.1/src/3.anschr.betroffene lehrer new file mode 100644 index 0000000..453a590 --- /dev/null +++ b/app/schulis/2.2.1/src/3.anschr.betroffene lehrer @@ -0,0 +1,174 @@ +PACKET auskunftlehrerDEFINES lehrerauskunfteingang,lehrerauskunftstarten, +lehrerauskunftsonderwerte:LET anrede=511,nameaufbereitet=513;INT VAR x,index +:=dnrlehrer,aktuellesfach,aktuelleart,aktuelleartlehrbefaehigunglangtext;LET +schulj=526,halbj=527,ermaessgrund1langtext=550,ermaessgrund2langtext=551, +ermaessgrund3langtext=552,ermaessgrund4langtext=553;INT VAR +aktswklassenlehrer:=580,aktswstellvertreter:=581;LET ganztage=520,ganzgew=521 +,vormtage=522,vormgew=523,nachtage=524,nachgew=525;LET swdatum=520,swzeit=521 +,swart=522,swlv=523;LET maske="ms auskunft lehrer eingang",paraphenfeldnr=2, +trenner="/",niltext="",blank=" ",strich=" --- ",mnrbittewarten=69, +mnrkeinegueltigeparaphe=344;TEXT CONST dateimitvordruck1:= +"vordruck1 auskunft lehrer",dateimitvordruck2:="vordruck2 auskunft lehrer", +dateimitvordruck3:="vordruck3 auskunft lehrer",dateimitvordruck4:= +"vordruck4 auskunft lehrer",dateimitvordruck5:="vordruck5 auskunft lehrer", +dateimitvordruck6:="vordruck6 auskunft lehrer",dateimitvordruck7:= +"vordruck7 auskunft lehrer",bestandnameartlehrbefaehigung:= +"c02 art lehrbefaehigung",bestandnamepersoenlermaessigung:= +"c02 persoenl ermaess";TEXT VAR angegebeneparaphe:="",aktuelleshalbjahr, +aktuellesschuljahr,geplanteshalbjahr,geplantesschuljahr,schuljahr:="", +halbjahr:="";INT VAR zeilenzahl,zeilenhilfszahl,zusatzzeilen;BOOL PROC +paraphevorhanden:putwert(fnrlparaphe,angegebeneparaphe);search(dnrlehrer, +TRUE );IF dbstatus=0THEN TRUE ELSE FALSE FI END PROC paraphevorhanden;PROC +lehrerauskunfteingang:standardvproc(maske)END PROC lehrerauskunfteingang; +PROC lehrerauskunftstarten:angegebeneparaphe:=standardmaskenfeld( +paraphenfeldnr);IF angegebeneparaphe<>niltextTHEN startenausfuehrenELSE +meldeeingabefehler;zurueckzumdialogFI ;.meldeeingabefehler:standardmeldung( +mnrkeinegueltigeparaphe,niltext).zurueckzumdialog:return(1).startenausfuehren +:IF NOT (paraphevorhanden)THEN meldeeingabefehler;zurueckzumdialogELSE BOOL +CONST bildschirmausgabe:=FALSE ,einzelbearbeitung:=TRUE ;aktuelleshalbjahr:= +schulkenndatum("Schulhalbjahr");aktuellesschuljahr:=schulkenndatum( +"Schuljahr");geplanteshalbjahr:=aktuelleshalbjahr;geplantesschuljahr:= +aktuellesschuljahr;geplanteshjundsjberechnen(geplanteshalbjahr, +geplantesschuljahr);setzesonderwerteschulkenndaten;setzewerte;standardmeldung +(mnrbittewarten,niltext);zusammengesetztesanschreiben(index,bildschirmausgabe +,einzelbearbeitung,BOOL PROC lehrerauskunftsonderwerte,BOOL PROC +scanbedingung,TEXT PROC druckdateibauen);FI ;.setzewerte:putwert(fnrlparaphe, +angegebeneparaphe)END PROC lehrerauskunftstarten;BOOL PROC scanbedingung:IF +dbstatus=0THEN TRUE ELSE FALSE FI END PROC scanbedingung;BOOL PROC +lehrerauskunftsonderwerte:LET sechs=6;ROW sechsTEXT VAR artlehrbefaehigung; +initialisieresonderwerte;adressat(angegebeneparaphe);TEXT VAR anredetext:= +"Frau";IF wert(fnrlgeschlecht)="m"THEN anredetext:="Herrn"FI ;setzesonderwert +(anrede,anredetext);setzesonderwert(nameaufbereitet,wert(fnrlrufname)+" "+ +wert(fnrlzusatz)+" "+wert(fnrlfamname));TEXT VAR grund1,grund2,grund3,grund4; +grund1:=wert(fnrlermgrund1);grund2:=wert(fnrlermgrund2);grund3:=wert( +fnrlermgrund3);grund4:=wert(fnrlermgrund4);inittupel(dnrlehrbefaehigungen); +putwert(fnrlbparaphe,angegebeneparaphe);search(ixlbpar,FALSE );aktuellesfach +:=514;aktuelleart:=515;aktuelleartlehrbefaehigunglangtext:=554;FOR xFROM 1 +UPTO sechsREP IF dbstatus=0AND wert(fnrlbparaphe)=angegebeneparapheTHEN +setzesonderwert(aktuellesfach,wert(fnrlbfach));artlehrbefaehigung(x):=wert( +fnrlbart);setzesonderwert(aktuelleart,artlehrbefaehigung(x));ELSE +setzesonderwert(aktuellesfach,niltext);artlehrbefaehigung(x):=niltext; +setzesonderwert(aktuelleart,niltext);FI ;succ(ixlbpar);aktuellesfachINCR 2; +aktuelleartINCR 2PER ;inittupel(dnrschluessel);putwert(fnrschlsachgebiet, +bestandnamepersoenlermaessigung);putwert(fnrschlschluessel,grund1);search( +dnrschluessel,TRUE );IF dbstatus=0THEN setzesonderwert(ermaessgrund1langtext, +wert(fnrschllangtext))ELSE setzesonderwert(ermaessgrund1langtext,blank)FI ; +putwert(fnrschlschluessel,grund2);search(dnrschluessel,TRUE );IF dbstatus=0 +THEN setzesonderwert(ermaessgrund2langtext,wert(fnrschllangtext));ELSE +setzesonderwert(ermaessgrund2langtext,blank);FI ;putwert(fnrschlschluessel, +grund3);search(dnrschluessel,TRUE );IF dbstatus=0THEN setzesonderwert( +ermaessgrund3langtext,wert(fnrschllangtext))ELSE setzesonderwert( +ermaessgrund3langtext,blank)FI ;putwert(fnrschlschluessel,grund4);search( +dnrschluessel,TRUE );IF dbstatus=0THEN setzesonderwert(ermaessgrund4langtext, +wert(fnrschllangtext))ELSE setzesonderwert(ermaessgrund4langtext,blank)FI ; +putwert(fnrschlsachgebiet,bestandnameartlehrbefaehigung);FOR xFROM 1UPTO 6 +REP putwert(fnrschlschluessel,artlehrbefaehigung(x));search(dnrschluessel, +TRUE );IF dbstatus=0THEN setzesonderwert(aktuelleartlehrbefaehigunglangtext, +wert(fnrschllangtext))ELSE setzesonderwert(aktuelleartlehrbefaehigunglangtext +,blank)FI ;aktuelleartlehrbefaehigunglangtextINCR 1PER ;TRUE END PROC +lehrerauskunftsonderwerte;TEXT PROC druckdateibauen:LET druckdatei="liste.1", +hilfsdatei="hilfsdatei";TEXT VAR zeile;INT VAR i;BOOL VAR mitdatendesgeplhjs +:=FALSE ;BOOL VAR weiteresaetzeda:=FALSE ;vordruckeholen; +setzemitseitennummern(TRUE );druckvorbereiten;zeilenzahl:=0;zusatzzeilen:=0; +briefalternative(dateimitvordruck1,hilfsdatei);hilfsdateiindruckdatei( +hilfsdatei);zusatzzeilen:=5;sonderwertsjundhjsetzen(aktuellesschuljahr, +aktuelleshalbjahr);ggfvordruck21malundvordruck3xmalindruckdatei( +mitdatendesgeplhjs);mitdatendesgeplhjs:=TRUE ;sonderwertsjundhjsetzen( +geplantesschuljahr,geplanteshalbjahr); +ggfvordruck21malundvordruck3xmalindruckdatei(mitdatendesgeplhjs);zusatzzeilen +:=4;vordruck4indruckdatei(aktuellesschuljahr,aktuelleshalbjahr); +vordruck4indruckdatei(geplantesschuljahr,geplanteshalbjahr);zusatzzeilen:=14; +vordruck5indruckdatei(aktuellesschuljahr,aktuelleshalbjahr); +vordruck5indruckdatei(geplantesschuljahr,geplanteshalbjahr);zusatzzeilen:=4; +ggf1malvordruck6undxmalvordruck7indruckdatei;drucknachbereitenohneausdrucken; +vordruckeloeschen;druckdatei.vordruckeholen:fetch(dateimitvordruck1,/ +"anschreiben server");fetch(dateimitvordruck2,/"anschreiben server");fetch( +dateimitvordruck3,/"anschreiben server");fetch(dateimitvordruck4,/ +"anschreiben server");fetch(dateimitvordruck5,/"anschreiben server");fetch( +dateimitvordruck6,/"anschreiben server");fetch(dateimitvordruck7,/ +"anschreiben server");.vordruckeloeschen:forget(dateimitvordruck1,quiet); +forget(dateimitvordruck2,quiet);forget(dateimitvordruck3,quiet);forget( +dateimitvordruck4,quiet);forget(dateimitvordruck5,quiet);forget( +dateimitvordruck6,quiet);forget(dateimitvordruck7,quiet);. +ggf1malvordruck6undxmalvordruck7indruckdatei:inittupel(dnrvertretungen); +putwert(fnrvparaphe,angegebeneparaphe);search(ixvpar,FALSE );IF dbstatus=0 +AND wert(fnrvparaphe)=angegebeneparapheTHEN swvertretungenfuellen; +briefalternative(dateimitvordruck6,hilfsdatei);hilfsdateiindruckdatei( +hilfsdatei);weiteresaetzeda:=FALSE ;succ(ixvpar);zusatzzeilen:=1;WHILE +dbstatus=0AND wert(fnrvparaphe)=angegebeneparapheREP weiteresaetzeda:=TRUE ; +swvertretungenfuellen;briefalternative(dateimitvordruck7,hilfsdatei);succ( +ixvpar);PER ;IF weiteresaetzedaTHEN hilfsdateiindruckdatei(hilfsdatei)FI ;FI +;END PROC druckdateibauen;PROC swvertretungenfuellen:TEXT VAR datum, +datumaufber,lehrveranstg,lvaufber,zeitaufber;INT VAR zeit,tag,std; +initialisieresonderwerte;datum:=wert(fnrvdatum);zeit:=intwert(fnrvtagstd); +lehrveranstg:=wert(fnrvveranstaltung);datumaufber:=subtext(datum,1,2)+"."; +datumaufberCAT subtext(datum,4,5)+".";datumaufberCAT subtext(datum,7,8);tag:= +(zeit-1)DIV 12;std:=zeitMOD 12;IF tag=0THEN zeitaufber:="Mo "ELIF tag=1THEN +zeitaufber:="Di "ELIF zeit=2THEN zeitaufber:="Mi "ELIF zeit=3THEN zeitaufber +:="Do "ELIF zeit=4THEN zeitaufber:="Fr "ELIF zeit=5THEN zeitaufber:="Sa "FI ; +zeitaufberCAT text(std,2);lvaufber:=subtext(lehrveranstg,1,2)+blank;lvaufber +CAT subtext(lehrveranstg,3,4)+blank;lvaufberCAT subtext(lehrveranstg,5,8); +setzesonderwert(swdatum,datumaufber);setzesonderwert(swzeit,zeitaufber); +setzesonderwert(swart,wert(fnrvanrechnung));setzesonderwert(swlv,lvaufber); +END PROC swvertretungenfuellen;PROC hilfsdateiindruckdatei(TEXT CONST +hilfsdatei):FILE VAR f;INT VAR i;TEXT VAR zeile;f:=sequentialfile(input, +hilfsdatei);zeilenhilfszahl:=lines(f);IF zeilenzahl+zeilenhilfszahl+ +zusatzzeilen>=drucklaengeTHEN seitenwechsel;zeilenzahl:=0;FI ;FOR iFROM 1 +UPTO zeilenhilfszahlREP getline(f,zeile);druckzeileschreiben(zeile)PER ; +forget(hilfsdatei,quiet);zeilenzahlINCR zeilenhilfszahlEND PROC +hilfsdateiindruckdatei;PROC sonderwertsjundhjsetzen(TEXT VAR sj,hj): +setzesonderwert(schulj,subtext(sj,1,2)+trenner+subtext(sj,3,4)); +setzesonderwert(halbj,hj);END PROC sonderwertsjundhjsetzen;PROC +ggfvordruck21malundvordruck3xmalindruckdatei(BOOL VAR geplhj):LET aktjgst=528 +,aktfach=529,aktkurs=530,aktwochstd=531,hilfsdatei="hilfsdatei";TEXT VAR fach +,jgst:=blank,kennung;IF geplhjTHEN halbjahr:=geplanteshalbjahr;schuljahr:= +geplantesschuljahr;ELSE halbjahr:=aktuelleshalbjahr;schuljahr:= +aktuellesschuljahr;FI ;inittupel(dnrlehrveranstaltungen);putwert(fnrlvparaphe +,angegebeneparaphe);putwert(fnrlvsj,schuljahr);putwert(fnrlvhj,halbjahr); +search(ixlvsjhjpar,FALSE );IF dbstatus=0AND (wert(fnrlvparaphe)= +angegebeneparaphe)AND (wert(fnrlvhj)=halbjahr)AND (wert(fnrlvsj)=schuljahr) +THEN briefalternative(dateimitvordruck2,hilfsdatei); +sonderwertesetzenundinhilfsdateischreiben;hilfsdateiindruckdatei(hilfsdatei); +FI ;.sonderwertesetzenundinhilfsdateischreiben:WHILE dbstatus=0AND (wert( +fnrlvparaphe)=angegebeneparaphe)AND (wert(fnrlvhj)=halbjahr)AND (wert(fnrlvsj +)=schuljahr)REP fach:=subtext(wert(fnrlvfachkennung),1,2);setzesonderwert( +aktfach,fach);kennung:=subtext(wert(fnrlvfachkennung),3,6);setzesonderwert( +aktkurs,kennung);jgstCAT wert(fnrlvjgst);IF length(jgst)>2THEN +setzesonderwert(aktjgst,subtext(jgst,2,3));ELSE setzesonderwert(aktjgst,jgst) +;FI ;jgst:=blank;setzesonderwert(aktwochstd,wert(fnrlvwochenstd)); +briefalternative(dateimitvordruck3,hilfsdatei);succ(ixlvsjhjpar);PER ;END +PROC ggfvordruck21malundvordruck3xmalindruckdatei;PROC vordruck4indruckdatei( +TEXT VAR sj,hj):LET hilfsdatei="hilfsdatei";TEXT VAR aufberwert:=niltext; +BOOL VAR hilfsdateiangelegt:=FALSE ;TEXT VAR ueberschrift:="Schuljahr "; +initialisieresonderwerte;aktswklassenlehrer:=580;aktswstellvertreter:=581; +ueberschriftCAT subtext(sj,1,2)+"/"+subtext(sj,3,4);ueberschriftCAT ", "+hj+ +". Halbjahr";setzesonderwert(schulj,ueberschrift);inittupel( +dnraktschuelergruppen);putwert(fnrsgrpsj,sj);putwert(fnrsgrphj,hj);search( +dnraktschuelergruppen,FALSE );WHILE dbstatus=0AND wert(fnrsgrphj)=hjREP IF +wert(fnrsgrplehrer)=angegebeneparapheAND aktswklassenlehrer<590THEN +aufberwert:=wert(fnrsgrpjgst);aufberwertCAT wert(fnrsgrpkennung); +setzesonderwert(aktswklassenlehrer,aufberwert);aktswklassenlehrerINCR 2; +hilfsdateiangelegt:=TRUE ;ELSE IF wert(fnrsgrpstellvlehrer)=angegebeneparaphe +AND aktswstellvertreter<591THEN aufberwert:=wert(fnrsgrpjgst);aufberwertCAT +wert(fnrsgrpkennung);setzesonderwert(aktswstellvertreter,aufberwert); +aktswstellvertreterINCR 2;hilfsdateiangelegt:=TRUE ;FI ;FI ;succ( +dnraktschuelergruppen)PER ;IF hilfsdateiangelegtTHEN briefalternative( +dateimitvordruck4,hilfsdatei);hilfsdateiindruckdatei(hilfsdatei);FI ;END +PROC vordruck4indruckdatei;PROC vordruck5indruckdatei(TEXT VAR sj,hj):LET +hilfsdatei="hilfsdatei";TEXT VAR zeitwuensche,ueberschrift:="Schuljahr "; +initialisieresonderwerte;INT VAR aktswzeitwunsch:=531,position:=1,i; +ueberschriftCAT subtext(sj,1,2)+"/"+subtext(sj,3,4);ueberschriftCAT ", "+hj+ +". Halbjahr";setzesonderwert(schulj,ueberschrift);inittupel(dnrzeitwuensche); +putwert(fnrzwsj,sj);putwert(fnrzwhj,hj);putwert(fnrzwbezug,"P");putwert( +fnrzwbezugsobjekt,angegebeneparaphe);search(dnrzeitwuensche,TRUE );IF +dbstatus=0THEN zeitwuensche:=wert(fnrzwunbestimmtewuensche);setzesonderwert( +ganztage,zeitwuenscheSUB 1);setzesonderwert(ganzgew,zeitwuenscheSUB 3); +setzesonderwert(vormtage,zeitwuenscheSUB 4);setzesonderwert(vormgew, +zeitwuenscheSUB 6);setzesonderwert(nachtage,zeitwuenscheSUB 7); +setzesonderwert(nachgew,zeitwuenscheSUB 9);zeitwuensche:=wert( +fnrzwbestimmtewuensche);FOR iFROM 1UPTO 66REP setzesonderwert(aktswzeitwunsch +,subtext(zeitwuensche,position,position+1));aktswzeitwunschINCR 1;position +INCR 2PER ;briefalternative(dateimitvordruck5,hilfsdatei); +hilfsdateiindruckdatei(hilfsdatei);FI ;END PROC vordruck5indruckdatei;END +PACKET auskunftlehrer; + diff --git a/app/schulis/2.2.1/src/3.erf lehrer b/app/schulis/2.2.1/src/3.erf lehrer new file mode 100644 index 0000000..47846ee --- /dev/null +++ b/app/schulis/2.2.1/src/3.erf lehrer @@ -0,0 +1,134 @@ +PACKET erflehrerDEFINES erfassunglehrer:LET trenner=" = ",komma=", ",leer="", +trennerfuerimbestand="�",dateinameschluessel="Schlüssel",dateinamefaecher= +"Fächer",null=0;LET maskenname="ms erf lehrer",fnrletztesfeld=32,fnrparaphe=2 +,fnrfamilienname=3,fnrrufname=4,fnrnamenszusatz=5,fnramtsbezeichnung=6, +fnrgeschlecht=7,fnrstrasseundnummer=8,fnrplzundort=9,fnrtelefon=10, +fnrlehrbeffach=11,fnrlehrbefart=12,fnrpflichtstunden=23,fnrermaessigung=24, +fnrermaessigungsgrund=25,fnrsprechzeiten=32,anzlehrbefprolehrer=6, +anzermprolehrer=4;LET untergrenze=0,obergrenze=99,paraphenlaenge=4, +bestandermgrund="c02 persoenl ermaess",bestandartlehrbef= +"c02 art lehrbefaehigung",meldungparaphezulang=178,meldungzugeschlecht=55, +meldungzumbestand=55,meldungzusollstunden=175,meldungzulehrbeffach=177, +meldungzufachdoppelt=176;ROW anzlehrbefprolehrerSTRUCT (TEXT fach,art)VAR +altelehrbefaehigungen;TEXT VAR alteparaphe;INT VAR sollstunden;PROC +erfassunglehrer(INT CONST proznr):reinitparsing;SELECT proznrOF CASE 1: +setzeerfassungsparameterCASE 2:zeigelehrerzurbearbeitungCASE 3: +pruefeplausibilitaetCASE 4:setzewertefuerdbspeicherungCASE 5: +setzeidentiobjektfuerobjektlisteCASE 6:lehrerlesenCASE 7:lehreraendernCASE 8: +lehrereinfuegenCASE 9:lehrerloeschenEND SELECT END PROC erfassunglehrer;PROC +setzeerfassungsparameter:systemdboff;setzeerfassungsparameter(dnrlehrer, +maskenname,fnrletztesfeld).END PROC setzeerfassungsparameter;PROC +zeigelehrerzurbearbeitung:INT VAR i;alteparaphe:=wert(fnrlparaphe); +setzeerfassungsfeld(wert(fnrlparaphe),fnrparaphe);setzeerfassungsfeld(wert( +fnrlfamname),fnrfamilienname);setzeerfassungsfeld(wert(fnrlrufname), +fnrrufname);setzeerfassungsfeld(wert(fnrlzusatz),fnrnamenszusatz); +setzeerfassungsfeld(wert(fnrlamtsbeztitel),fnramtsbezeichnung); +setzeerfassungsfeld(wert(fnrlgeschlecht),fnrgeschlecht);setzeerfassungsfeld( +wert(fnrlpflichtstd),fnrpflichtstunden);FOR iFROM 0UPTO anzermprolehrer-1REP +setzeerfassungsfeld(wert(fnrlerm1+2*i),fnrermaessigung+2*i); +setzeerfassungsfeld(wert(fnrlermgrund1+2*i),fnrermaessigungsgrund+2*i)PER ; +FOR iFROM 0UPTO 5REP setzeerfassungsfeld(altelehrbefaehigungen(i+1).fach, +fnrlehrbeffach+2*i);setzeerfassungsfeld(altelehrbefaehigungen(i+1).art, +fnrlehrbefart+2*i)PER ;setzeerfassungsfeld(wert(fnrlsprechzeit), +fnrsprechzeiten);setzeerfassungsfeld(wert(fnrlstrnr),fnrstrasseundnummer); +setzeerfassungsfeld(wert(fnrlplzort),fnrplzundort);setzeerfassungsfeld(wert( +fnrltelnr),fnrtelefon)END PROC zeigelehrerzurbearbeitung;PROC +pruefeplausibilitaet:INT VAR i,j,fehlerstatus;pruefe(1,erfassungsmaske,PROC +erfassungswert,fnrparaphe,null,null,leer,fehlerstatus);IF fehlerstatus<>0 +THEN setzefehlerstatus(fehlerstatus);LEAVE pruefeplausibilitaetFI ;IF length( +erfassungswert(fnrparaphe))>paraphenlaengeTHEN meldeauffaellig( +erfassungsmaske,meldungparaphezulang);setzefehlerstatus(fnrparaphe);LEAVE +pruefeplausibilitaetFI ;pruefe(1,erfassungsmaske,PROC erfassungswert, +fnrfamilienname,null,null,leer,fehlerstatus);IF fehlerstatus<>0THEN +setzefehlerstatus(fehlerstatus);LEAVE pruefeplausibilitaetFI ;IF +erfassungswert(fnrgeschlecht)<>"m"AND erfassungswert(fnrgeschlecht)<>"w"THEN +meldeauffaellig(erfassungsmaske,meldungzugeschlecht);setzefehlerstatus( +fnrgeschlecht);LEAVE pruefeplausibilitaetFI ;FOR iFROM 0UPTO +anzlehrbefprolehrer-1REP IF erfassungswert(fnrlehrbefart+2*i)<>""THEN IF +erfassungswert(fnrlehrbeffach+2*i)=""THEN meldeauffaellig(erfassungsmaske, +meldungzulehrbeffach);setzefehlerstatus(fnrlehrbeffach+2*i);LEAVE +pruefeplausibilitaetFI ;IF NOT imbestand(bestandartlehrbef+ +trennerfuerimbestand+erfassungswert(fnrlehrbefart+2*i),dateinameschluessel) +THEN meldeauffaellig(erfassungsmaske,meldungzumbestand);setzefehlerstatus( +fnrlehrbefart+2*i);LEAVE pruefeplausibilitaetFI FI ;IF erfassungswert( +fnrlehrbeffach+2*i)<>""THEN FOR jFROM i+1UPTO anzlehrbefprolehrer-1REP IF +erfassungswert(fnrlehrbeffach+2*i)=erfassungswert(fnrlehrbeffach+2*j)THEN +meldeauffaellig(erfassungsmaske,meldungzufachdoppelt);setzefehlerstatus( +fnrlehrbeffach+2*i);LEAVE pruefeplausibilitaetFI PER ;IF NOT imbestand( +erfassungswert(fnrlehrbeffach+2*i),dateinamefaecher)THEN meldeauffaellig( +erfassungsmaske,meldungzumbestand);setzefehlerstatus(fnrlehrbeffach+2*i); +LEAVE pruefeplausibilitaetFI FI PER ;IF erfassungswert(fnrpflichtstunden)<>"" +THEN pruefe(2,erfassungsmaske,PROC erfassungswert,fnrpflichtstunden,null,null +,leer,fehlerstatus);IF fehlerstatus<>0THEN setzefehlerstatus(fehlerstatus); +LEAVE pruefeplausibilitaetFI ;pruefe(3,erfassungsmaske,PROC erfassungswert, +fnrpflichtstunden,untergrenze,obergrenze,leer,fehlerstatus);IF fehlerstatus<> +0THEN setzefehlerstatus(fehlerstatus);LEAVE pruefeplausibilitaetFI ;FI ; +sollstunden:=int(erfassungswert(fnrpflichtstunden));FOR iFROM 0UPTO +anzermprolehrer-1REP IF erfassungswert(fnrermaessigung+2*i)<>""THEN pruefe(2, +erfassungsmaske,PROC erfassungswert,fnrermaessigung+2*i,null,null,leer, +fehlerstatus);IF fehlerstatus<>0THEN setzefehlerstatus(fehlerstatus);LEAVE +pruefeplausibilitaetFI ;pruefe(3,erfassungsmaske,PROC erfassungswert, +fnrermaessigung+2*i,untergrenze,obergrenze,leer,fehlerstatus);IF fehlerstatus +<>0THEN setzefehlerstatus(fehlerstatus);LEAVE pruefeplausibilitaetFI ;FI ; +sollstunden:=sollstunden-int(erfassungswert(fnrermaessigung+2*i));IF +sollstunden<0THEN meldeauffaellig(erfassungsmaske,meldungzusollstunden); +setzefehlerstatus(fnrermaessigung+2*i);LEAVE pruefeplausibilitaetFI ;IF +erfassungswert(fnrermaessigungsgrund+2*i)<>""THEN IF NOT imbestand( +bestandermgrund+trennerfuerimbestand+erfassungswert(fnrermaessigungsgrund+2*i +),dateinameschluessel)THEN meldeauffaellig(erfassungsmaske,meldungzumbestand) +;setzefehlerstatus(fnrermaessigungsgrund+2*i);LEAVE pruefeplausibilitaetFI +FI PER END PROC pruefeplausibilitaet;PROC setzewertefuerdbspeicherung:INT +VAR i;putwert(fnrlparaphe,erfassungswert(fnrparaphe));putwert(fnrlfamname, +erfassungswert(fnrfamilienname));putwert(fnrlrufname,erfassungswert( +fnrrufname));putwert(fnrlzusatz,erfassungswert(fnrnamenszusatz));putwert( +fnrlamtsbeztitel,erfassungswert(fnramtsbezeichnung));putwert(fnrlgeschlecht, +erfassungswert(fnrgeschlecht));putintwert(fnrlsollstd,sollstunden);putwert( +fnrlpflichtstd,erfassungswert(fnrpflichtstunden));FOR iFROM 0UPTO +anzermprolehrer-1REP putwert(fnrlerm1+2*i,erfassungswert(fnrermaessigung+2*i) +);putwert(fnrlermgrund1+2*i,erfassungswert(fnrermaessigungsgrund+2*i))PER ; +putwert(fnrlsprechzeit,erfassungswert(fnrsprechzeiten));putwert(fnrlstrnr, +erfassungswert(fnrstrasseundnummer));putwert(fnrlplzort,erfassungswert( +fnrplzundort));putwert(fnrltelnr,erfassungswert(fnrtelefon))END PROC +setzewertefuerdbspeicherung;PROC setzeidentiobjektfuerobjektliste:LET +trennsymbolfuerobli="$";TEXT VAR identizeile;identizeile:=wert(fnrlparaphe)+ +trenner+wert(fnrlfamname)+komma+wert(fnrlrufname);setzeidentiwert( +identizeilemitschluesselanhang).identizeilemitschluesselanhang:identizeile+ +trennsymbolfuerobli+wert(fnrlparaphe).END PROC +setzeidentiobjektfuerobjektliste;PROC lehrerlesen:INT VAR i,j;putwert( +fnrlparaphe,schluessel);search(dnrlehrer,TRUE );IF dbstatus=okTHEN +saveupdateposition(dnrlehrer);putwert(fnrlbparaphe,schluessel);putwert( +fnrlbfach,leer);search(ixlbpar);i:=0;WHILE dbstatus=okCAND i< +anzlehrbefprolehrerCAND wert(fnrlbparaphe)=schluesselREP i:=i+1; +altelehrbefaehigungen(i).fach:=wert(fnrlbfach);altelehrbefaehigungen(i).art:= +wert(fnrlbart);succ(ixlbpar);PER ;FOR jFROM i+1UPTO anzlehrbefprolehrerREP +altelehrbefaehigungen(j).fach:="";altelehrbefaehigungen(j).art:=""PER ; +dbstatus(ok)FI END PROC lehrerlesen;PROC lehreraendern:INT VAR i; +restoreupdateposition(dnrlehrer);update(dnrlehrer);logbucheintrag("Änderung") +;FOR iFROM 0UPTO anzlehrbefprolehrer-1REP IF alteparaphe<>schluesselCOR +erfassungswert(fnrlehrbeffach+2*i)<>altelehrbefaehigungen(i+1).fachCOR +erfassungswert(fnrlehrbefart+2*i)<>altelehrbefaehigungen(i+1).artTHEN IF +altelehrbefaehigungen(i+1).fach=leerCAND erfassungswert(fnrlehrbeffach+2*i)<> +leerTHEN putwert(fnrlbfach,erfassungswert(fnrlehrbeffach+2*i));putwert( +fnrlbart,erfassungswert(fnrlehrbefart+2*i));putwert(fnrlbparaphe,schluessel); +insert(dnrlehrbefaehigungen)ELSE putwert(fnrlbfach,altelehrbefaehigungen(i+1) +.fach);putwert(fnrlbparaphe,alteparaphe);putwert(fnrlbart, +altelehrbefaehigungen(i+1).art);IF erfassungswert(fnrlehrbeffach+2*i)=leer +THEN delete(dnrlehrbefaehigungen)ELSE search(dnrlehrbefaehigungen,TRUE );IF +dbstatus=okTHEN putwert(fnrlbfach,erfassungswert(fnrlehrbeffach+2*i));putwert +(fnrlbart,erfassungswert(fnrlehrbefart+2*i));putwert(fnrlbparaphe,schluessel) +;update(dnrlehrbefaehigungen)FI FI FI ;dbstatus(ok)FI PER END PROC +lehreraendern;PROC lehrereinfuegen:INT VAR i;insert(dnrlehrer);logbucheintrag +("Neueinfügen");FOR iFROM 0UPTO anzlehrbefprolehrer-1REP IF erfassungswert( +fnrlehrbeffach+2*i)<>""THEN putwert(fnrlbfach,erfassungswert(fnrlehrbeffach+2 +*i));putwert(fnrlbart,erfassungswert(fnrlehrbefart+2*i));putwert(fnrlbparaphe +,schluessel);insert(dnrlehrbefaehigungen)FI PER END PROC lehrereinfuegen; +PROC lehrerloeschen:delete(dnrlehrer);logbucheintrag("Entfernen");putwert( +fnrlbparaphe,schluessel);putwert(fnrlbfach,leer);search(ixlbpar);WHILE +dbstatus=okCAND wert(fnrlbparaphe)=schluesselREP delete(dnrlehrbefaehigungen) +;succ(ixlbpar);PER ;dbstatus(ok)END PROC lehrerloeschen;PROC logbucheintrag( +TEXT CONST logergaenzung):TEXT VAR eintrag:="Anw. 3.1.1 ";eintragCAT +logergaenzung;eintragCAT " """;eintragCAT schluessel;eintragCAT """ """; +eintragCAT wert(fnrlfamname);eintragCAT """";logeintrag(eintrag)END PROC +logbucheintrag;TEXT PROC schluessel:erfassungswert(fnrparaphe)END PROC +schluessel;END PACKET erflehrer + diff --git a/app/schulis/2.2.1/src/3.listen.lehrbef faecherweise b/app/schulis/2.2.1/src/3.listen.lehrbef faecherweise new file mode 100644 index 0000000..d9c03b3 --- /dev/null +++ b/app/schulis/2.2.1/src/3.listen.lehrbef faecherweise @@ -0,0 +1,104 @@ +PACKET lehrbefaehigungenfaecherweiselisteDEFINES +faecherwlehrbeflispezielleteile:LET lehrbefaehigungeingangsmaske= +"ms liste lehrbefaehigungen faecherweise eingang", +anzahlderobjekteprobildschirm=17,ausgfeldlaenge=1,lehrbefaehigunganfpos=2, +spaltenbreite1fach=12,spaltenbreite2art=6,spaltenbreite3paraphe=4, +spaltentrenner=" ",wochenstdanfpos=2,ueberschriftenzeilen=2,ausgkopflaenge=2, +strich="-",blank=" ",null=0,niltext="",mnrauswahlnichtsinnvoll=56, +mnrbearbeitetwerden=352;TEXT CONST spaltentext:=("Fach"+9*blank+"Art"+3*blank ++"Lehrer"),spaltenstrich:=length(spaltentext)*strich;TEXT VAR +lehrbefaehigungueberschriftbs:="Liste der Lehrbefähigungen", +lehrbefaehigungueberschriftdr:="Liste der Lehrbefähigungen",alteparahpe:="", +paraphe:="",alteart:="",art:="",altesfach:="",fach:="",teiltextmeldung:= +"Fächer mit den Anfangsbuchstaben:",anfbuchstabe:="",neueranfbuchstabe:=""; +INT VAR eingabestatus,bildanfang,druckzeilenzahl;LET AUSGFELD =ROW +ausgfeldlaengeTEXT ,AUSGKOPF =ROW ausgkopflaengeTEXT ,AUSGKOPFDRUCK =ROW +ausgkopflaengeTEXT ;AUSGFELD VAR ausgfeld;AUSGKOPF VAR ausgkopf; +AUSGKOPFDRUCK VAR ausgkopfdruck;BOOL PROC multistop:TRUE END PROC multistop; +PROC faecherwlehrbeflispezielleteile(INT CONST nr):SELECT nrOF CASE 1: +faecherwlehrbefaehigungdialogvorbereitenCASE 2: +faecherwlehrbefaehigungeingabenrichtigCASE 3: +faecherwlehrbefaehigunglistenvorbereitenCASE 4: +faecherwlehrbefaehigungdruckvorbereitenCASE 5: +faecherwlehrbefaehigungseitedruckenCASE 6: +faecherwlehrbefaehigungbildschirmvorbereitenCASE 7: +faecherwlehrbefaehigungseitezeigenENDSELECT .END PROC +faecherwlehrbeflispezielleteile;PROC faecherwlehrbefaehigungdialogvorbereiten +:lehrbefaehigungueberschriftbs:=text(vergleichsknoten);setzeanfangswerte( +lehrbefaehigungeingangsmaske,lehrbefaehigunganfpos)END PROC +faecherwlehrbefaehigungdialogvorbereiten;PROC +faecherwlehrbefaehigungeingabenrichtig:LET fnrausgdrucker=2,fnrausgbild=3; +standardpruefe(5,fnrausgdrucker,fnrausgbild,null,niltext,eingabestatus);IF +eingabestatus=0THEN setzeeingabetest(TRUE );setzeausgabedrucker( +standardmaskenfeld(fnrausgbild)=niltext);ELSE meldefehler;setzeeingabetest( +FALSE )FI ;.meldefehler:standardmeldung(mnrauswahlnichtsinnvoll,niltext).END +PROC faecherwlehrbefaehigungeingabenrichtig;PROC +faecherwlehrbefaehigunglistenvorbereiten:BOOL VAR b;initspalten; +setzespaltentrenner(spaltentrenner);inittupel(dnrlehrbefaehigungen); +setzeidentiwert("");initobli(anzahlderobjekteprobildschirm); +objektlistestarten(ixlbart,"",0,TRUE ,b);setzebestandende(b);END PROC +faecherwlehrbefaehigunglistenvorbereiten;PROC +faecherwlehrbefaehigungbildschirmvorbereiten:LET fnrausganf=2; +standardkopfmaskeaktualisieren(lehrbefaehigungueberschriftbs);bildanfang:= +fnrausganf;setzebildanfangsposition(bildanfang);setzespaltenbreite(bildbreite +);spaltenweise(spaltentext);ausgfeld(1):=zeile;ausgfeld(1)IN ausgabepos; +erhoeheausgabeposumeins;spaltenweise(spaltenstrich);ausgfeld(1):=zeile; +ausgfeld(1)IN ausgabepos;erhoeheausgabeposumeins;setzebildanfangsposition(4); +spaltenbreitensetzenEND PROC faecherwlehrbefaehigungbildschirmvorbereiten; +PROC faecherwlehrbefaehigungseitezeigen:altesfach:=niltext;alteart:=niltext; +blaettern(PROC (INT CONST )lehrbefdatenfachweisezeigen,aktion,TRUE ,FALSE , +BOOL PROC multistop)END PROC faecherwlehrbefaehigungseitezeigen;PROC +lehrbefdatenfachweisezeigen(INT CONST x): +datenausdateilehrbefaehigungenfachweiseholen; +datenausdateilehrbefaehigungenfachweiseaufbereitenbild; +datenfachweiseaufbildschirmausgebenEND PROC lehrbefdatenfachweisezeigen;PROC +datenausdateilehrbefaehigungenfachweiseholen:fach:=wert(fnrlbfach);art:=wert( +fnrlbart);paraphe:=wert(fnrlbparaphe)END PROC +datenausdateilehrbefaehigungenfachweiseholen;PROC +datenausdateilehrbefaehigungenfachweiseaufbereitenbild:IF fach<>altesfach +THEN spaltenweise(fach);spaltenweise(art)ELSE spaltenweise(blank);IF art<> +alteartTHEN spaltenweise(art)ELSE spaltenweise(blank)FI ;FI ;spaltenweise( +paraphe);alteparahpe:=paraphe;altesfach:=fach;alteart:=art;END PROC +datenausdateilehrbefaehigungenfachweiseaufbereitenbild;PROC +datenfachweiseaufbildschirmausgeben:INT VAR i;FOR iFROM 1UPTO ausgfeldlaenge +REP ausgfeld(i):=zeile;ausgfeld(i)IN ausgabepos;erhoeheausgabeposumeins;PER ; +END PROC datenfachweiseaufbildschirmausgeben;PROC +faecherwlehrbefaehigungdruckvorbereiten:setzebestandende(FALSE );anfbuchstabe +:=" ";druckvorbereiten;variablenfuerdrucksetzen;lehrbefaehigungueberschriftdr +CAT " fachweise";initdruckkopf(zentriert(lehrbefaehigungueberschriftdr, +druckbreite),zentriert(length(lehrbefaehigungueberschriftdr)*"-",druckbreite) +);spaltenbreitensetzen;initausgabekopfdruck;inittupel(dnrlehrbefaehigungen); +lesenvorbereitendruck(PROC (INT CONST ,BOOL PROC ,INT VAR )scanforward,BOOL +PROC multistop);.variablenfuerdrucksetzen:druckzeilenzahl:=drucklaenge( +ueberschriftenzeilen)-ausgkopflaenge.END PROC +faecherwlehrbefaehigungdruckvorbereiten;PROC initausgabekopfdruck: +ausgkopfdruck(1):=spaltentext;ausgkopfdruck(2):=spaltenstrichEND PROC +initausgabekopfdruck;PROC faecherwlehrbefaehigungseitedrucken: +lehrbefaehigungueberschriftdrucken;altesfach:=niltext;alteart:=niltext; +seitedrucken(PROC (INT VAR )lehrbefaehigungdrucken,druckzeilenzahl, +ausgfeldlaenge,BOOL PROC multistop);seitenwechselEND PROC +faecherwlehrbefaehigungseitedrucken;PROC lehrbefaehigungueberschriftdrucken: +INT VAR i;druckkopfschreiben;FOR iFROM 1UPTO ausgkopflaengeREP +druckzeileschreiben(ausgkopfdruck(i))PER END PROC +lehrbefaehigungueberschriftdrucken;PROC lehrbefaehigungdrucken(INT VAR +zeilenzaehler):LET markiert="#";datenausdateilehrbefaehigungenfachweiseholen; +ggflmeldunganfbuchstabe;IF fach<>altesfachTHEN spaltenweise(blank); +spaltenweise(blank);spaltenweise(blank);ausgfeld(1):=zeile;zeilenzaehlerINCR +ausgfeldlaenge;lehrerstundendatenindruckdateiFI ; +lehrerstundendatenaufbereitendruck;zeilenzaehlerINCR ausgfeldlaenge; +lehrerstundendatenindruckdatei.ggflmeldunganfbuchstabe:IF +anfbuchstabegeaendertTHEN meldunganfbuchstabeFI .anfbuchstabegeaendert: +neueranfbuchstabe:=fachSUB 1;anfbuchstabe<>neueranfbuchstabe. +meldunganfbuchstabe:standardmeldung(mnrbearbeitetwerden,teiltextmeldung+ +neueranfbuchstabe+markiert);anfbuchstabe:=neueranfbuchstabe.END PROC +lehrbefaehigungdrucken;PROC lehrerstundendatenaufbereitendruck: +setzespaltentrenner(spaltentrenner); +datenausdateilehrbefaehigungenfachweiseaufbereitenbild;ausgfeld(1):=zeile; +END PROC lehrerstundendatenaufbereitendruck;PROC +lehrerstundendatenindruckdatei:INT VAR i;FOR iFROM 1UPTO ausgfeldlaengeREP +druckzeileschreiben(ausgfeld(1))PER END PROC lehrerstundendatenindruckdatei; +PROC spaltenbreitensetzen:initspalten;setzespaltenbreite(spaltenbreite1fach); +setzespaltenbreite(spaltenbreite2art);setzespaltenbreite( +spaltenbreite3paraphe);END PROC spaltenbreitensetzen;END PACKET +lehrbefaehigungenfaecherweiseliste; + diff --git a/app/schulis/2.2.1/src/3.listen.lehrbef lehrerweise b/app/schulis/2.2.1/src/3.listen.lehrbef lehrerweise new file mode 100644 index 0000000..1c3e172 --- /dev/null +++ b/app/schulis/2.2.1/src/3.listen.lehrbef lehrerweise @@ -0,0 +1,100 @@ +PACKET lehrbefaehigungenlehrerweiselisteDEFINES +lehrerwlehrbeflidruckenoderzeigen:LET datenraum="datenraum",ausgkopflaenge=2, +ueberschriftenzeilen=2,anzahlparapheninlehrbef=300,neunfelder=9,niltext="", +blank=" ",null=0,strich="-",mnrbearbeitetwerden=352,mnrlistewirdgedruckt=58, +mnrauswahlnichtsinnvoll=56,mnrlistewirdaufbereiet=190;INT VAR zeilenzaehler, +druckzeilenzahl,anzahlparindateilehrbef,anzahlparindateilehrer,x,y, +eingabestatus;BOUND ROW anzahlparapheninlehrbefROW neunfelderTEXT VAR +datenauszweidateien;FILE VAR ausgabedatei;TEXT CONST ausgabedateiname:= +"Liste der Lehrbefähigungen",teiltextmeldung:= +"Lehrerparaphen mit den Anfangsbuchstaben:",spaltentext:= +"Lehrer Soll. Pfl. Lehrbefähigung Fach/Art",tasten:="vr",spaltenstrich:=60* +strich;TEXT VAR neueranfbuchstabe:="",anfbuchstabe:="",ueberschrift:= +"Liste der Lehrbefähigungen aller Lehrer",paraphe:="",aufbereitetezeile:=""; +BOOL VAR ausgabedrucker:=FALSE ;LET AUSGKOPFDRUCK =ROW ausgkopflaengeTEXT ; +AUSGKOPFDRUCK VAR ausgkopfdruck;PROC lehrerwlehrbeflidruckenoderzeigen(INT +CONST nr):anzahlparindateilehrer:=int(records(dnrlehrer));SELECT nrOF CASE 1: +druckenoderbildschirmausgabeCASE 2:druckennachbildschirmausgabe;return(2); +forget(ausgabedateiname,quiet)CASE 3:rowimdatenraumloeschen;enter(2);forget( +ausgabedateiname,quiet)ENDSELECT .END PROC lehrerwlehrbeflidruckenoderzeigen; +PROC rowimdatenraumloeschen:forget(datenraum,quiet)END PROC +rowimdatenraumloeschen;PROC druckennachbildschirmausgabe: +lehrerwlehrbefdruckenEND PROC druckennachbildschirmausgabe;PROC +druckenoderbildschirmausgabe:LET fnrausgdrucker=2,fnrausgbild=3;IF +eingabenrichtigTHEN standardmeldung(mnrlistewirdaufbereiet,niltext); +datenauszweidateienholenundimrowablegen;ausgabedrucker:=(standardmaskenfeld( +fnrausgbild)=niltext);IF ausgabedruckerTHEN lehrerwlehrbefdrucken;return(1); +ELSE ausgabedatei:=sequentialfile(output,"Liste der Lehrbefähigungen"); +lehrerwlehrbefaufbildschirmzeigenFI ;ELSE meldefehler;return(1)FI ;. +eingabenrichtig:standardpruefe(5,fnrausgdrucker,fnrausgbild,null,niltext, +eingabestatus);IF eingabestatus=0THEN TRUE ELSE FALSE FI .meldefehler: +standardmeldung(mnrauswahlnichtsinnvoll,niltext)END PROC +druckenoderbildschirmausgabe;PROC lehrerwlehrbefaufbildschirmzeigen: +datenausrowinshowdateischreiben;dateiaufbildschirmausgeben;END PROC +lehrerwlehrbefaufbildschirmzeigen;PROC lehrerwlehrbefdrucken: +druckdateimitrowdatenfuellendruckenundloeschen;rowimdatenraumloeschenEND +PROC lehrerwlehrbefdrucken;PROC +druckdateimitrowdatenfuellendruckenundloeschen:TEXT VAR zeile;INT VAR +zeilenanz:=1,x:=1;druckvorbereiten;variablenfuerdrucksetzen;initdruckkopf( +ueberschrift);initausgabekopfdruck;druckkopfschreiben; +spaltenueberschriftdrucken;setzemitseitennummern(TRUE );x:=1;zeilenzaehler:=1 +;WHILE zeilenanz<=anzahlparindateilehrbefREP zeileaufbereiten; +ggfmeldunganfbuchstabe;neueranfbuchstabe:=anfbuchstabe;IF zeilenzaehler> +druckzeilenzahlTHEN seitenwechsel;spaltenueberschriftdrucken;zeilenzaehler:=0 +;FI ;druckzeileschreiben(zeile);xINCR 1;zeilenanzINCR 1;zeilenzaehlerINCR 1; +PER ;standardmeldung(mnrlistewirdgedruckt,niltext);drucknachbereiten;. +ggfmeldunganfbuchstabe:IF anfbuchstabegeaendertTHEN meldunganfbuchstabeFI . +anfbuchstabegeaendert:anfbuchstabe<>neueranfbuchstabe.meldunganfbuchstabe: +LET markiert="#";standardmeldung(mnrbearbeitetwerden,teiltextmeldung+ +neueranfbuchstabe+markiert);.variablenfuerdrucksetzen:druckzeilenzahl:= +drucklaenge(ueberschriftenzeilen)-ausgkopflaenge.zeileaufbereiten:y:=1;zeile +:=text(datenauszweidateien(x)(y),8);FOR yFROM 8UPTO neunfelderREP zeileCAT +text(datenauszweidateien(x)(y),6)PER ;FOR yFROM 2UPTO 7REP zeileCAT text( +datenauszweidateien(x)(y),7)PER ;anfbuchstabe:=(datenauszweidateien(x)(1)) +SUB 1;END PROC druckdateimitrowdatenfuellendruckenundloeschen;PROC +initausgabekopfdruck:ausgkopfdruck(1):=spaltentext;ausgkopfdruck(2):= +spaltenstrichEND PROC initausgabekopfdruck;PROC spaltenueberschriftdrucken: +INT VAR l;FOR lFROM 1UPTO ausgkopflaengeREP druckzeileschreiben(ausgkopfdruck +(l))PER END PROC spaltenueberschriftdrucken;PROC +datenausrowinshowdateischreiben:putline(ausgabedatei,blank);putline( +ausgabedatei,spaltentext);putline(ausgabedatei,spaltenstrich);putline( +ausgabedatei,blank);FOR xFROM 1UPTO anzahlparindateilehrbefREP +zeileaufbereiten;aufbereitetezeileindateischreibenPER .zeileaufbereiten:y:=1; +aufbereitetezeile:=text(datenauszweidateien(x)(y),8);FOR yFROM 8UPTO +neunfelderREP aufbereitetezeileCAT text(datenauszweidateien(x)(y),6)PER ;FOR +yFROM 2UPTO 7REP aufbereitetezeileCAT text(datenauszweidateien(x)(y),7)PER ;. +aufbereitetezeileindateischreiben:putline(ausgabedatei,aufbereitetezeile); +aufbereitetezeile:=niltextEND PROC datenausrowinshowdateischreiben;PROC +dateiaufbildschirmausgeben:zeigedatei(ausgabedateiname,tasten);END PROC +dateiaufbildschirmausgeben;PROC datenauszweidateienholenundimrowablegen: +datenauszweidateien:=new(datenraum);lehrerdatenrowinitialisieren;inittupel( +ixlbpar);x:=0;y:=1;statleseschleife(ixlbpar,"","",fnrlbparaphe,fnrlbfach, +PROC holedatenausdateilehrbefaehigungeninsrow);anzahlparindateilehrbef:=x; +inittupel(dnrlehrer);x:=1;y:=1;statleseschleife(dnrlehrer,"","",fnrlparaphe, +fnrlfamname,PROC holedatenausdateilehrerinsrow);.lehrerdatenrowinitialisieren +:FOR xFROM 1UPTO anzahlparindateilehrerREP FOR yFROM 1UPTO neunfelderREP +datenauszweidateien(x)(y):=niltext;PER ;PER END PROC +datenauszweidateienholenundimrowablegen;PROC +holedatenausdateilehrbefaehigungeninsrow(BOOL VAR b):IF dbstatus<>0THEN b:= +TRUE ELSE IF paraphe<>wert(fnrlbparaphe)THEN xINCR 1;y:=1;paraphe:=wert( +fnrlbparaphe);datenauszweidateien(x)(y):=paraphe;FI ;yINCR 1; +datenauszweidateien(x)(y):=text(wert(fnrlbfach),2)+"/"+wert(fnrlbart);FI ; +END PROC holedatenausdateilehrbefaehigungeninsrow;PROC +holedatenausdateilehrerinsrow(BOOL VAR b):IF dbstatus<>0THEN b:=TRUE ELSE IF +wert(fnrlparaphe)=datenauszweidateien(x)(1)THEN datenauszweidateien(x)(8):= +wert(fnrlsollstd);datenauszweidateien(x)(9):=wert(fnrlpflichtstd);xINCR 1;FI +;FI ;END PROC holedatenausdateilehrerinsrow;PROC statleseschleife(INT CONST +indexnummer,TEXT CONST startschluessel1,startschluessel2,INT CONST feldnr1, +feldnr2,PROC (BOOL VAR )stataktion):vorbereitungen;leseschleife. +vorbereitungen:LET maxleseanzahl=10;BOOL VAR vorzeitigesende:=FALSE ;#INT +CONST maxblock:=maxfeldDIV zahlderfelder;#INT VAR anzahltupel;#INT CONST +maxanzahl:=(maxintDIV maxblock)*maxblock#.leseschleife:putwert(feldnr1, +startschluessel1);putwert(feldnr2,startschluessel2);search(indexnummer);IF +dbstatus=0THEN einleseschleifeFI .einleseschleife:zaehlen;WHILE NOT schluss +REP anzahltupel:=maxleseanzahl;multisucc(indexnummer,anzahltupel); +stackdurchlaufPER ;.stackdurchlauf:IF anzahltupel=0THEN dbstatus(1)ELSE +WHILE anzahltupel<>0REP lesen;zaehlen;IF vorzeitigesendeTHEN dbstatus(1); +anzahltupel:=0FI ;PER FI .schluss:dbstatus<>0.zaehlen:stataktion( +vorzeitigesende).lesen:multisucc;anzahltupelDECR 1;.END PROC statleseschleife +;END PACKET lehrbefaehigungenlehrerweiseliste; + diff --git a/app/schulis/2.2.1/src/3.listen.paraphen b/app/schulis/2.2.1/src/3.listen.paraphen new file mode 100644 index 0000000..d45d2c7 --- /dev/null +++ b/app/schulis/2.2.1/src/3.listen.paraphen @@ -0,0 +1,81 @@ +PACKET lehrerparaphenlistenDEFINES parlispezielleteile:LET parlieingangsmaske +="ms liste lehrerparaphen eingang",spaltentrenner=" ",parlianfpos=2, +spalte1breite=7,niltext="",blank=" ",komma=",",null=0,ueberschriftenzeilen=2, +mnrauswahlnichtsinnvoll=56,mnrbearbeitetwerden=352,ausgkopflaenge=2, +ausgfeldlaenge=1,anzahlderobjekteprobildschirm=19;TEXT VAR parliueberschrift +:="Liste der Lehrerparaphen",lehrername,rufname,namenszusatz,amtsbez,anrede, +geschlecht,paraphe,anfbuchstabe,neueranfbuchstabe:="",lehrernameaufbereitet, +auswahlnichtsinnvoll,teiltextmeldung:= +"die Paraphe mit dem Anfangsbuchstaben:";INT VAR aktuelleindexnr, +eingabestatus,lesestart,bildanfang,spalte2druckbreite,druckzeilenzahl;INT +CONST indexlehrername:=ixlfamruf,spalte2bildbreite:=bildbreite-spalte1breite- +1;BOOL VAR sortierungnachparaphen;LET AUSGFELD =ROW ausgfeldlaengeTEXT , +AUSGKOPF =ROW ausgkopflaengeTEXT ;AUSGFELD VAR ausgfeld;AUSGKOPF VAR ausgkopf +;BOOL PROC multistop:TRUE END PROC multistop;PROC parlispezielleteile(INT +CONST nr):SELECT nrOF CASE 1:parlidialogvorbereitenCASE 2: +parlieingabenrichtigCASE 3:parlilistenvorbereitenCASE 4:parlidruckvorbereiten +CASE 5:parliseitedruckenCASE 6:parlibildschirmvorbereitenCASE 7: +parliseitezeigenENDSELECT .END PROC parlispezielleteile;PROC +parlidialogvorbereiten:parliueberschrift:=text(vergleichsknoten); +setzeanfangswerte(parlieingangsmaske,parlianfpos)END PROC +parlidialogvorbereiten;PROC parlieingabenrichtig:LET fnrsortparaphen=2, +fnrsortlehrernamen=3,fnrausgdrucker=4,fnrausgbild=5;standardpruefe(5, +fnrausgdrucker,fnrausgbild,null,niltext,eingabestatus);IF eingabestatus=0 +THEN standardpruefe(5,fnrsortparaphen,fnrsortlehrernamen,null,niltext, +eingabestatus);IF eingabestatus=0THEN sortierartmerken;setzeeingabetest(TRUE +);setzeausgabedrucker(standardmaskenfeld(fnrausgbild)=niltext);ELSE +meldefehler;setzeeingabetest(FALSE )FI ;ELSE meldefehler;setzeeingabetest( +FALSE )FI .sortierartmerken:sortierungnachparaphen:=standardmaskenfeld( +fnrsortparaphen)<>niltext.meldefehler:meldungstext(mnrauswahlnichtsinnvoll, +auswahlnichtsinnvoll);standardmeldung(auswahlnichtsinnvoll,niltext).END PROC +parlieingabenrichtig;PROC parlilistenvorbereiten:BOOL VAR b;initspalten; +setzespaltentrenner(spaltentrenner);IF sortierungnachparaphenTHEN +aktuelleindexnr:=dnrlehrer;lesestart:=fnrlparapheELSE aktuelleindexnr:= +indexlehrername;lesestart:=0;FI ;inittupel(dnrlehrer);setzeidentiwert(""); +initobli(anzahlderobjekteprobildschirm);parsenooffields(6);objektlistestarten +(aktuelleindexnr,"",lesestart,TRUE ,b);setzebestandende(NOT multistopCOR b); +END PROC parlilistenvorbereiten;PROC parlibildschirmvorbereiten:LET +fnrausganf=2;standardkopfmaskeaktualisieren(parliueberschrift);bildanfang:= +fnrausganf;setzebildanfangsposition(bildanfang);setzespaltenbreite( +spalte1breite);setzespaltenbreite(spalte2bildbreite);END PROC +parlibildschirmvorbereiten;PROC parliseitezeigen:blaettern(PROC (INT CONST ) +lehrerdatenzeigen,aktion,TRUE ,FALSE ,BOOL PROC multistop)END PROC +parliseitezeigen;PROC lehrerdatenzeigen(INT CONST x):lehrerdatenholen; +lehrerdatenaufbereitenbild;lehrerdatenaufbildschirm.END PROC +lehrerdatenzeigen;PROC lehrerdatenholen:paraphe:=wert(fnrlparaphe);lehrername +:=wert(fnrlfamname);rufname:=wert(fnrlrufname);namenszusatz:=wert(fnrlzusatz) +;amtsbez:=wert(fnrlamtsbeztitel);geschlecht:=wert(fnrlgeschlecht);IF +geschlecht="w"XOR geschlecht="W"THEN anrede:="Fr. "ELSE anrede:="Hr. "FI ; +lehrernameaufbereitet:=(lehrername+komma+blank+anrede+amtsbezeichnung+rufname ++blank+namenszusatz);.amtsbezeichnung:IF amtsbez<>niltextTHEN amtsbez+blank +ELSE ""FI .END PROC lehrerdatenholen;PROC lehrerdatenaufbereitenbild: +spaltenweise(paraphe);spaltenweise(lehrernameaufbereitet);END PROC +lehrerdatenaufbereitenbild;PROC lehrerdatenaufbildschirm:INT VAR i;FOR iFROM +1UPTO ausgfeldlaengeREP ausgfeld(i):=zeile;ausgfeld(i)IN ausgabepos; +erhoeheausgabeposumeins;PER ;END PROC lehrerdatenaufbildschirm;PROC +parlidruckvorbereiten:setzebestandende(FALSE );anfbuchstabe:=" "; +druckvorbereiten;variablenfuerdrucksetzen;spalte2druckbreite:=druckbreite-( +spalte1breite+1);initdruckkopf(zentriert(parliueberschrift,druckbreite), +zentriert(length(parliueberschrift)*"-",druckbreite));initspalten; +setzespaltenbreite(spalte1breite);setzespaltenbreite(spalte2druckbreite); +inittupel(dnrlehrer);lesenvorbereitendruck(PROC (INT CONST ,BOOL PROC ,INT +VAR )scanforward,BOOL PROC multistop);.variablenfuerdrucksetzen: +druckzeilenzahl:=drucklaenge(ueberschriftenzeilen)-ausgkopflaenge.END PROC +parlidruckvorbereiten;PROC parliseitedrucken:parliueberschriftdrucken; +seitedrucken(PROC (INT VAR )lehrerdrucken,druckzeilenzahl,ausgfeldlaenge, +BOOL PROC multistop);seitenwechsel.END PROC parliseitedrucken;PROC +parliueberschriftdrucken:druckkopfschreiben.END PROC parliueberschriftdrucken +;PROC lehrerdrucken(INT VAR zeilenzaehler):LET markiert="#";lehrerdatenholen; +ggflmeldunganfbuchstabe;lehreraufbereitendruck;zeilenzaehlerINCR +ausgfeldlaenge;lehrerindruckdatei.ggflmeldunganfbuchstabe:IF +anfbuchstabegeaendertTHEN meldunganfbuchstabeFI .anfbuchstabegeaendert:IF +sortierungnachparaphenTHEN neueranfbuchstabe:=lehrernameSUB 1;ELSE +neueranfbuchstabe:=parapheSUB 1;FI ;anfbuchstabe<>neueranfbuchstabe. +meldunganfbuchstabe:standardmeldung(mnrbearbeitetwerden,teiltextmeldung+ +neueranfbuchstabe+markiert);anfbuchstabe:=neueranfbuchstabe.END PROC +lehrerdrucken;PROC lehreraufbereitendruck:spaltenweise(paraphe);spaltenweise( +lehrernameaufbereitet);ausgfeld(1):=zeile;END PROC lehreraufbereitendruck; +PROC lehrerindruckdatei:INT VAR i;FOR iFROM 1UPTO ausgfeldlaengeREP +druckzeileschreiben(ausgfeld(1))PER .END PROC lehrerindruckdatei;END PACKET +lehrerparaphenlisten; + diff --git a/app/schulis/2.2.1/src/3.listen.sprechzeiten b/app/schulis/2.2.1/src/3.listen.sprechzeiten new file mode 100644 index 0000000..7f33cb7 --- /dev/null +++ b/app/schulis/2.2.1/src/3.listen.sprechzeiten @@ -0,0 +1,99 @@ +PACKET lehrersprechzeitenlisteDEFINES sprechzeitlispezielleteile:LET +sprechzeingangsmaske="ms liste lehrerparaphen eingang", +anzahlderobjekteprobildschirm=17,ausgfeldlaenge=1,spalte1breite=46, +spalte2breite=25,spaltentrenner=": ",sprechzanfpos=2,ueberschriftenzeilen=2, +strich="-",niltext="",blank=" ",komma=",",null=0,ausgkopflaenge=2, +mittelstrich="-",teilueb1="Lehrer",teilueb2="Sprechzeiten", +mnrauswahlnichtsinnvoll=56,mnrbearbeitetwerden=352;TEXT VAR +sprechzueberschrift:="Liste der Lehrersprechzeiten",paraphe,lehrername, +lehrernameaufbereitet,lehrernameaufbereitetmitparaphe,rufname,namenszusatz, +amtsbez,geschlecht,sprechzeit,druckstrich,textueberschrift,teiltextmeldung:= +"die Lehrer mit den Anfangsbuchstaben:",anfbuchstabe,neueranfbuchstabe:="", +auswahlnichtsinnvoll;INT VAR aktuelleindexnr,eingabestatus,lesestart, +bildanfang,druckzeilenzahl;INT CONST indexlehrername:=ixlfamruf, +maxspaltenlaengepara:=5;BOOL VAR sortierungnachparaphen;LET AUSGFELD =ROW +ausgfeldlaengeTEXT ,AUSGKOPF =ROW ausgkopflaengeTEXT ,AUSGKOPFDRUCK =ROW +ausgkopflaengeTEXT ;AUSGFELD VAR ausgfeld;AUSGKOPF VAR ausgkopf; +AUSGKOPFDRUCK VAR ausgkopfdruck;BOOL PROC multistop:TRUE END PROC multistop; +PROC sprechzeitlispezielleteile(INT CONST nr):SELECT nrOF CASE 1: +sprechzdialogvorbereitenCASE 2:sprechzeingabenrichtigCASE 3: +sprechzlistenvorbereitenCASE 4:sprechzdruckvorbereitenCASE 5: +sprechzseitedruckenCASE 6:sprechzbildschirmvorbereitenCASE 7: +sprechzseitezeigenENDSELECT .END PROC sprechzeitlispezielleteile;PROC +sprechzdialogvorbereiten:sprechzueberschrift:=text(vergleichsknoten); +setzeanfangswerte(sprechzeingangsmaske,sprechzanfpos)END PROC +sprechzdialogvorbereiten;PROC sprechzeingabenrichtig:LET fnrsortparaphen=2, +fnrsortlehrernamen=3,fnrausgdrucker=4,fnrausgbild=5;standardpruefe(5, +fnrausgdrucker,fnrausgbild,null,niltext,eingabestatus);IF eingabestatus=0 +THEN standardpruefe(5,fnrsortparaphen,fnrsortlehrernamen,null,niltext, +eingabestatus);IF eingabestatus=0THEN sortierartmerken;setzeeingabetest(TRUE +);setzeausgabedrucker(standardmaskenfeld(fnrausgbild)=niltext);ELSE +meldefehler;setzeeingabetest(FALSE )FI ;ELSE meldefehler;setzeeingabetest( +FALSE )FI .sortierartmerken:sortierungnachparaphen:=standardmaskenfeld( +fnrsortparaphen)<>niltext.meldefehler:meldungstext(mnrauswahlnichtsinnvoll, +auswahlnichtsinnvoll);standardmeldung(auswahlnichtsinnvoll,niltext).END PROC +sprechzeingabenrichtig;PROC sprechzlistenvorbereiten:BOOL VAR b;initspalten; +setzespaltentrenner(spaltentrenner);IF sortierungnachparaphenTHEN +aktuelleindexnr:=dnrlehrer;lesestart:=fnrlparapheELSE aktuelleindexnr:= +indexlehrername;lesestart:=0;FI ;inittupel(dnrlehrer);setzeidentiwert(""); +initobli(anzahlderobjekteprobildschirm);parsenooffields(17); +objektlistestarten(aktuelleindexnr,"",lesestart,TRUE ,b);setzebestandende(b); +END PROC sprechzlistenvorbereiten;PROC sprechzbildschirmvorbereiten:LET +fnrausganf=2;standardkopfmaskeaktualisieren(sprechzueberschrift);bildanfang:= +fnrausganf;setzebildanfangsposition(bildanfang);INT VAR i;setzespaltenbreite( +bildbreite);textueberschrift:=teilueb1+((spalte1breite+1)-(length(teilueb1))) +*blank+teilueb2;spaltenweise(textueberschrift);ausgfeld(1):=zeile;ausgfeld(1) +IN ausgabepos;erhoeheausgabeposumeins;spaltenweise(bildbreite*strich); +ausgfeld(1):=zeile;ausgfeld(1)IN ausgabepos;erhoeheausgabeposumeins; +setzebildanfangsposition(4);initspalten;setzespaltenbreite(spalte1breite); +setzespaltenbreite(spalte2breite);END PROC sprechzbildschirmvorbereiten;PROC +sprechzseitezeigen:blaettern(PROC (INT CONST )lehrerdatenzeigen,aktion,TRUE , +FALSE ,BOOL PROC multistop)END PROC sprechzseitezeigen;PROC lehrerdatenzeigen +(INT CONST x):lehrerdatenholen;lehrerdatenaufbereitenbild; +lehrerdatenaufbildschirm.END PROC lehrerdatenzeigen;PROC lehrerdatenholen: +paraphe:=wert(fnrlparaphe);lehrername:=wert(fnrlfamname);rufname:=wert( +fnrlrufname);namenszusatz:=wert(fnrlzusatz);amtsbez:=wert(fnrlamtsbeztitel); +geschlecht:=wert(fnrlgeschlecht);sprechzeit:=wert(fnrlsprechzeit);IF +geschlecht="w"XOR geschlecht="W"THEN geschlecht:="Fr. "ELSE geschlecht:= +"Hr. "FI ;lehrernameaufbereitet:=(lehrername+komma+blank+geschlecht+ +amtsbezeichnung+rufname+blank+namenszusatz);IF sortierungnachparaphenTHEN +lehrernameaufbereitetmitparaphe:=paraphe+(maxspaltenlaengepara-length(paraphe +))*blank+lehrernameaufbereitetFI .amtsbezeichnung:IF amtsbez<>niltextTHEN +amtsbez+blankELSE ""FI .END PROC lehrerdatenholen;PROC +lehrerdatenaufbereitenbild:IF sortierungnachparaphenTHEN spaltenweise( +lehrernameaufbereitetmitparaphe)ELSE spaltenweise(lehrernameaufbereitet)FI ; +spaltenweise(sprechzeit);END PROC lehrerdatenaufbereitenbild;PROC +lehrerdatenaufbildschirm:INT VAR i;FOR iFROM 1UPTO ausgfeldlaengeREP ausgfeld +(i):=zeile;ausgfeld(i)IN ausgabepos;erhoeheausgabeposumeins;PER ;END PROC +lehrerdatenaufbildschirm;PROC sprechzdruckvorbereiten:setzebestandende(FALSE +);anfbuchstabe:=" ";druckvorbereiten;variablenfuerdrucksetzen;initdruckkopf( +zentriert(sprechzueberschrift,druckbreite),zentriert(length( +sprechzueberschrift)*"-",druckbreite));initspalten;setzespaltenbreite( +spalte1breite);setzespaltenbreite(spalte2breite);inittupel(dnrlehrer); +initausgabekopfdruck;lesenvorbereitendruck(PROC (INT CONST ,BOOL PROC ,INT +VAR )scanforward,BOOL PROC multistop);.variablenfuerdrucksetzen: +druckzeilenzahl:=drucklaenge(ueberschriftenzeilen)-ausgkopflaenge.END PROC +sprechzdruckvorbereiten;PROC initausgabekopfdruck:druckstrich:=(spalte1breite +*mittelstrich)+(spaltentrennerSUB 1)+(spalte2breite+1)*mittelstrich; +textueberschrift:=teilueb1+(spalte1breite-(length(teilueb1)))*blank+ +spaltentrenner+teilueb2;ausgkopfdruck(1):=textueberschrift;ausgkopfdruck(2):= +druckstrich;END PROC initausgabekopfdruck;PROC sprechzseitedrucken: +sprechzueberschriftdrucken;seitedrucken(PROC (INT VAR )lehrerdrucken, +druckzeilenzahl,ausgfeldlaenge,BOOL PROC multistop);seitenwechsel.END PROC +sprechzseitedrucken;PROC sprechzueberschriftdrucken:INT VAR i; +druckkopfschreiben;FOR iFROM 1UPTO ausgkopflaengeREP druckzeileschreiben( +ausgkopfdruck(i))PER END PROC sprechzueberschriftdrucken;PROC lehrerdrucken( +INT VAR zeilenzaehler):LET markiert="#";lehrerdatenholen; +ggflmeldunganfbuchstabe;lehreraufbereitendruck;zeilenzaehlerINCR +ausgfeldlaenge;lehrerindruckdatei.ggflmeldunganfbuchstabe:IF +anfbuchstabegeaendertTHEN meldunganfbuchstabeFI .anfbuchstabegeaendert:IF +sortierungnachparaphenTHEN neueranfbuchstabe:=lehrernameSUB 1;ELSE +neueranfbuchstabe:=parapheSUB 1;FI ;anfbuchstabe<>neueranfbuchstabe. +meldunganfbuchstabe:standardmeldung(mnrbearbeitetwerden,teiltextmeldung+ +neueranfbuchstabe+markiert);anfbuchstabe:=neueranfbuchstabe.END PROC +lehrerdrucken;PROC lehreraufbereitendruck:setzespaltentrenner(spaltentrenner) +;lehrerdatenaufbereitenbild;ausgfeld(1):=zeile;END PROC +lehreraufbereitendruck;PROC lehrerindruckdatei:INT VAR i;FOR iFROM 1UPTO +ausgfeldlaengeREP druckzeileschreiben(ausgfeld(1))PER END PROC +lehrerindruckdatei;END PACKET lehrersprechzeitenliste; + diff --git a/app/schulis/2.2.1/src/3.listen.wochenstunden b/app/schulis/2.2.1/src/3.listen.wochenstunden new file mode 100644 index 0000000..a8cd29c --- /dev/null +++ b/app/schulis/2.2.1/src/3.listen.wochenstunden @@ -0,0 +1,114 @@ +PACKET wochenstundenlisteDEFINES wochenstdlispezielleteile:LET +wochenstdeingangsmaske="ms liste lehrerparaphen eingang", +anzahlderobjekteprobildschirm=17,ausgfeldlaenge=1,spalte1breite=5, +spalte2breite=30,spalte3breite=4,spalte4breite=31,spaltentrenner=" ", +wochenstdanfpos=2,ueberschriftenzeilen=2,niltext="",blank=" ",komma=",",null= +0,ausgkopflaenge=2,mittelstrich="-",mnrauswahlnichtsinnvoll=56, +mnrbearbeitetwerden=352;TEXT CONST blanknull:=" 0/",unterstreichung:= +bildbreite*mittelstrich,textueberschrift:=("Lehrer"+31*blank+ +"Soll Pfl. Ermäßigung/Grund");TEXT VAR wochenstdueberschrift:= +"Liste der Wochenstunden und Ermäßigungen",schraegstrich:="/",paraphe, +lehrername,rufname,namenszusatz,amtsbez,geschlecht,sollstdn,pflichtstdn, +ermaessigung1,ermaessigung2,ermaessigung3,ermaessigung4,ermgrund1,ermgrund2, +ermgrund3,ermgrund4,lehrernameaufbereitet,bearbeitetwerden,anfbuchstabe, +neueranfbuchstabe:="",auswahlnichtsinnvoll,teiltextmeldung:= +"die Paraphe mit dem Anfangsbuchstaben:";INT VAR aktuelleindexnr, +eingabestatus,lesestart,bildanfang,druckzeilenzahl;INT CONST indexlehrername +:=ixlfamruf;BOOL VAR sortierungnachparaphen;LET AUSGFELD =ROW ausgfeldlaenge +TEXT ,AUSGKOPF =ROW ausgkopflaengeTEXT ,AUSGKOPFDRUCK =ROW ausgkopflaenge +TEXT ;AUSGFELD VAR ausgfeld;AUSGKOPF VAR ausgkopf;AUSGKOPFDRUCK VAR +ausgkopfdruck;BOOL PROC multistop:TRUE END PROC multistop;PROC +wochenstdlispezielleteile(INT CONST nr):SELECT nrOF CASE 1: +wochenstddialogvorbereitenCASE 2:wochenstdeingabenrichtigCASE 3: +wochenstdlistenvorbereitenCASE 4:wochenstddruckvorbereitenCASE 5: +wochenstdseitedruckenCASE 6:wochenstdbildschirmvorbereitenCASE 7: +wochenstdseitezeigenENDSELECT .END PROC wochenstdlispezielleteile;PROC +wochenstddialogvorbereiten:wochenstdueberschrift:=text(vergleichsknoten); +setzeanfangswerte(wochenstdeingangsmaske,wochenstdanfpos)END PROC +wochenstddialogvorbereiten;PROC wochenstdeingabenrichtig:LET fnrsortparaphen= +2,fnrsortlehrernamen=3,fnrausgdrucker=4,fnrausgbild=5;standardpruefe(5, +fnrausgdrucker,fnrausgbild,null,niltext,eingabestatus);IF eingabestatus=0 +THEN standardpruefe(5,fnrsortparaphen,fnrsortlehrernamen,null,niltext, +eingabestatus);IF eingabestatus=0THEN sortierartmerken;setzeeingabetest(TRUE +);setzeausgabedrucker(standardmaskenfeld(fnrausgbild)=niltext);ELSE +meldefehler;setzeeingabetest(FALSE )FI ;ELSE meldefehler;setzeeingabetest( +FALSE )FI .sortierartmerken:sortierungnachparaphen:=standardmaskenfeld( +fnrsortparaphen)<>niltext;.meldefehler:standardmeldung( +mnrauswahlnichtsinnvoll,niltext).END PROC wochenstdeingabenrichtig;PROC +wochenstdlistenvorbereiten:BOOL VAR b;initspalten;setzespaltentrenner( +spaltentrenner);IF sortierungnachparaphenTHEN aktuelleindexnr:=dnrlehrer; +lesestart:=fnrlparapheELSE aktuelleindexnr:=indexlehrername;lesestart:=0;FI ; +inittupel(dnrlehrer);setzeidentiwert("");initobli( +anzahlderobjekteprobildschirm);parsenooffields(16);objektlistestarten( +aktuelleindexnr,"",lesestart,TRUE ,b);setzebestandende(b);END PROC +wochenstdlistenvorbereiten;PROC wochenstdbildschirmvorbereiten:LET fnrausganf +=2;standardkopfmaskeaktualisieren(wochenstdueberschrift);bildanfang:= +fnrausganf;setzebildanfangsposition(bildanfang);INT VAR i;setzespaltenbreite( +bildbreite);spaltenweise(textueberschrift);ausgfeld(1):=zeile;ausgfeld(1)IN +ausgabepos;erhoeheausgabeposumeins;spaltenweise(unterstreichung);ausgfeld(1) +:=zeile;ausgfeld(1)IN ausgabepos;erhoeheausgabeposumeins; +setzebildanfangsposition(4);initspalten;setzespaltenbreite(spalte1breite); +setzespaltenbreite(spalte2breite);setzespaltenbreite(spalte3breite); +setzespaltenbreite(spalte3breite);setzespaltenbreite(spalte4breite);END PROC +wochenstdbildschirmvorbereiten;PROC wochenstdseitezeigen:blaettern(PROC (INT +CONST )stundendatenzeigen,aktion,TRUE ,FALSE ,BOOL PROC multistop)END PROC +wochenstdseitezeigen;PROC stundendatenzeigen(INT CONST x):stundendatenholen; +stundendatenaufbereitenbild;stundendatenaufbildschirm.END PROC +stundendatenzeigen;PROC stundendatenaufbereitenbild:TEXT VAR ermaessigungen:= +niltext;spaltenweise(paraphe);spaltenweise(lehrernameaufbereitet); +spaltenweise(2*blank+sollstdn);spaltenweise(2*blank+pflichtstdn);IF +ermaessigung1=blanknullTHEN ermaessigung1:=3*blankELSE ermaessigungen:=2* +blank+ermaessigung1+ermgrund1FI ;IF ermaessigung2=blanknullTHEN ermaessigung2 +:=3*blankELSE ermaessigungenCAT 3*blank+ermaessigung2+ermgrund2FI ;IF +ermaessigung3=blanknullTHEN ermaessigung3:=3*blankELSE ermaessigungenCAT 3* +blank+ermaessigung3+ermgrund3FI ;IF ermaessigung4=blanknullTHEN ermaessigung4 +:=blankELSE ermaessigungenCAT 3*blank+ermaessigung4+ermgrund4FI ;spaltenweise +(ermaessigungen);END PROC stundendatenaufbereitenbild;PROC +stundendatenaufbildschirm:INT VAR i;FOR iFROM 1UPTO ausgfeldlaengeREP +ausgfeld(i):=zeile;ausgfeld(i)IN ausgabepos;erhoeheausgabeposumeins;PER ;END +PROC stundendatenaufbildschirm;PROC wochenstddruckvorbereiten: +setzebestandende(FALSE );anfbuchstabe:=" ";druckvorbereiten; +variablenfuerdrucksetzen;initdruckkopf(zentriert(wochenstdueberschrift, +druckbreite),zentriert(length(wochenstdueberschrift)*"-",druckbreite)); +initspalten;setzespaltenbreite(spalte1breite);setzespaltenbreite( +spalte2breite);setzespaltenbreite(spalte3breite);setzespaltenbreite( +spalte3breite);setzespaltenbreite(spalte4breite);holemeldung;inittupel( +dnrlehrer);initausgabekopfdruck;lesenvorbereitendruck(PROC (INT CONST ,BOOL +PROC ,INT VAR )scanforward,BOOL PROC multistop);.holemeldung:meldungstext( +mnrbearbeitetwerden,bearbeitetwerden).variablenfuerdrucksetzen: +druckzeilenzahl:=drucklaenge(ueberschriftenzeilen)-ausgkopflaenge.END PROC +wochenstddruckvorbereiten;PROC initausgabekopfdruck:ausgkopfdruck(1):= +textueberschrift;ausgkopfdruck(2):=unterstreichungEND PROC +initausgabekopfdruck;PROC wochenstdseitedrucken:wochenstdueberschriftdrucken; +seitedrucken(PROC (INT VAR )wochenstdndrucken,druckzeilenzahl,ausgfeldlaenge, +BOOL PROC multistop);seitenwechsel.END PROC wochenstdseitedrucken;PROC +wochenstdueberschriftdrucken:INT VAR i;druckkopfschreiben;FOR iFROM 1UPTO +ausgkopflaengeREP druckzeileschreiben(ausgkopfdruck(i))PER END PROC +wochenstdueberschriftdrucken;PROC wochenstdndrucken(INT VAR zeilenzaehler): +LET markiert="#";stundendatenholen;ggflmeldunganfbuchstabe; +lehrerstundendatenaufbereitendruck;zeilenzaehlerINCR ausgfeldlaenge; +lehrerstundendatenindruckdatei.ggflmeldunganfbuchstabe:IF +anfbuchstabegeaendertTHEN meldunganfbuchstabeFI .anfbuchstabegeaendert:IF +sortierungnachparaphenTHEN neueranfbuchstabe:=lehrernameSUB 1;ELSE +neueranfbuchstabe:=parapheSUB 1;FI ;anfbuchstabe<>neueranfbuchstabe. +meldunganfbuchstabe:standardmeldung(mnrbearbeitetwerden,teiltextmeldung+ +neueranfbuchstabe+markiert);anfbuchstabe:=neueranfbuchstabe.END PROC +wochenstdndrucken;PROC lehrerstundendatenaufbereitendruck:setzespaltentrenner +(spaltentrenner);stundendatenaufbereitenbild;ausgfeld(1):=zeile;END PROC +lehrerstundendatenaufbereitendruck;PROC lehrerstundendatenindruckdatei:INT +VAR i;FOR iFROM 1UPTO ausgfeldlaengeREP druckzeileschreiben(ausgfeld(1))PER +END PROC lehrerstundendatenindruckdatei;PROC stundendatenholen:paraphe:=wert( +fnrlparaphe);lehrername:=wert(fnrlfamname);rufname:=wert(fnrlrufname); +namenszusatz:=wert(fnrlzusatz);amtsbez:=wert(fnrlamtsbeztitel);geschlecht:= +wert(fnrlgeschlecht);sollstdn:=text(intwert(fnrlsollstd),2);pflichtstdn:=text +(intwert(fnrlpflichtstd),2);ermaessigung1:=text(intwert(fnrlerm1),2)+ +schraegstrich;ermgrund1:=text(wert(fnrlermgrund1),2);ermaessigung2:=text( +intwert(fnrlerm2),2)+schraegstrich;ermgrund2:=text(wert(fnrlermgrund2),2); +ermaessigung3:=text(intwert(fnrlerm3),2)+schraegstrich;ermgrund3:=text(wert( +fnrlermgrund3),2);ermaessigung4:=text(intwert(fnrlerm4),2)+schraegstrich; +ermgrund4:=text(wert(fnrlermgrund4),2);IF geschlecht="w"XOR geschlecht="W" +THEN geschlecht:="Fr. "ELSE geschlecht:="Hr. "FI ;lehrernameaufbereitet:=( +lehrername+komma+blank+geschlecht+amtsbezeichnung+rufname+blank+namenszusatz) +;.amtsbezeichnung:IF amtsbez<>niltextTHEN amtsbez+blankELSE ""FI .END PROC +stundendatenholen;END PACKET wochenstundenliste; + diff --git a/app/schulis/2.2.1/src/3.listenweise lehrer erf b/app/schulis/2.2.1/src/3.listenweise lehrer erf new file mode 100644 index 0000000..9715e4d --- /dev/null +++ b/app/schulis/2.2.1/src/3.listenweise lehrer erf @@ -0,0 +1,95 @@ +PACKET listenweiselehrererfDEFINES bearbeitunglehrer,lehrerspeichern:LET +tofather=1,tograndfather=2,niltext="",blank=" ",trennerfuerimbestand="�", +dateinameschluessel="Schlüssel",null=0;LET maskeerm="ms lehrer erm bearb", +maskespr="ms lehrer spr bearb",lehrerproseite=18,felderprozeileerm=11, +felderprozeilespr=3,fnrparapheeingangsmaske=2,fnrersteparaphe=2,fnrersteerm=5 +,fnrersterermgrund=6,fnrerstespr=4,anzermprolehrer=4;LET untergrenze=0, +obergrenze=99,bestandermgrund="c02 persoenl ermaess",meldungbestleer=59, +meldungnichtspeichern=63,meldungplausi=57,meldungwarten=69,meldungspeicherung +=132,meldungspeicherfehler=179,meldungzumbestand=55,meldungzusollstunden=175, +hell="#";ROW lehrerproseiteSTRUCT (TEXT paraphe,sprechzeiten,pflichtstunden, +sollstunden,ROW anzermprolehrerTEXT erm,grund)VAR altelehrer;BOOL VAR +bearbeitungdererm,nochwelcheda;INT VAR lehrerzahl,felderprozeile, +fnrerstesbearbeitungsfeld;TEXT VAR paraphe,bearbeitungsmaske;LET +logbucheintragerm="Anw. 3.1.2 Änderungen der Stundenermäßigung", +logbucheintragspr="Anw. 3.1.3 Änderungen der Sprechzeiten";PROC neuerblock: +IF lehrerzahl=lehrerproseiteTHEN succ(dnrlehrer);nochwelcheda:=dbstatus=null; +putwert(fnrlparaphe,paraphe);changeindex;FI ;blocklesenundausgeben;IF +nochwelchedaTHEN return(tofather)ELSE enter(tograndfather)FI END PROC +neuerblock;PROC blocklesenundausgeben:IF nochwelchedaTHEN standardmeldung( +meldungwarten,niltext);lehrerzahl:=null;bildschirmblock(PROC zeilezeigen, +BOOL PROC (INT CONST )leerepruefung,null);nochwelcheda:=(lehrerzahl>null);IF +nochwelchedaTHEN paraphe:=wert(fnrlparaphe);restlichefelderloeschen;infeld(1) +;standardfelderausgeben;infeld(fnrerstesbearbeitungsfeld);FI FI . +restlichefelderloeschen:INT VAR zeilenfeld;FOR zeilenfeldFROM fnrersteparaphe ++lehrerzahl*felderprozeileUPTO lehrerproseite*felderprozeile+1REP +standardmaskenfeld(standardfeldlaenge(zeilenfeld)*blank,zeilenfeld); +feldschutz(zeilenfeld)PER .END PROC blocklesenundausgeben;PROC zeilezeigen: +INT VAR i,aktuellesfeld;aktuellesfeld:=fnrersteparaphe+felderprozeile* +lehrerzahl;lehrerzahlINCR 1;altelehrer(lehrerzahl).paraphe:=wert(fnrlparaphe) +;standardmaskenfeld(wert(fnrlparaphe),aktuellesfeld);aktuellesfeldINCR 1; +standardmaskenfeld(wert(fnrlfamname),aktuellesfeld);aktuellesfeldINCR 1;IF +bearbeitungderermTHEN altelehrer(lehrerzahl).pflichtstunden:=wert( +fnrlpflichtstd);standardmaskenfeld(wert(fnrlpflichtstd),aktuellesfeld); +aktuellesfeldINCR 1;FOR iFROM 1UPTO anzermprolehrerREP altelehrer(lehrerzahl) +.erm(i):=wert(fnrlerm1+2*(i-1));standardmaskenfeld(wert(fnrlerm1+2*(i-1)), +aktuellesfeld);aktuellesfeldINCR 1;altelehrer(lehrerzahl).grund(i):=wert( +fnrlermgrund1+2*(i-1));standardmaskenfeld(wert(fnrlermgrund1+2*(i-1)), +aktuellesfeld);aktuellesfeldINCR 1;PER ELSE altelehrer(lehrerzahl). +sprechzeiten:=wert(fnrlsprechzeit);standardmaskenfeld(wert(fnrlsprechzeit), +aktuellesfeld);aktuellesfeldINCR 1;FI END PROC zeilezeigen;BOOL PROC +leerepruefung(INT CONST dummy):TRUE END PROC leerepruefung;PROC +bearbeitunglehrer(INT CONST programm):reinitparsing; +initialisierungenvornehmen;pruefeobimbestand;IF dbstatus<>nullTHEN +standardmeldung(meldungbestleer,niltext);return(tofather);LEAVE +bearbeitunglehrerFI ;nochwelcheda:=TRUE ;standardstartproc(bearbeitungsmaske) +;startebildschirmblock(dnrlehrer,lehrerproseite-1);blocklesenundausgeben; +standardnproc.initialisierungenvornehmen:bearbeitungdererm:=programm=1;IF +bearbeitungderermTHEN bearbeitungsmaske:=maskeerm;felderprozeile:= +felderprozeileerm;fnrerstesbearbeitungsfeld:=fnrersteerm;ELSE +bearbeitungsmaske:=maskespr;felderprozeile:=felderprozeilespr; +fnrerstesbearbeitungsfeld:=fnrerstespr;FI ;standardmeldung(meldungwarten, +niltext).pruefeobimbestand:inittupel(dnrlehrer);putwert(fnrlparaphe, +standardmaskenfeld(fnrparapheeingangsmaske));search(dnrlehrer,FALSE ).END +PROC bearbeitunglehrer;PROC lehrerspeichern(BOOL CONST speichern):INT VAR +fehlerstatus:=0,i,j,sollstunden;BOOL VAR lehrerdatengeaendert;INT VAR aktfnr; +IF speichernTHEN pruefeplausibilitaet;IF fehlerstatus<>0THEN infeld( +fehlerstatus);return(tofather);LEAVE lehrerspeichernELSE +speicherungdurchführenFI ELSE standardmeldung(meldungnichtspeichern,niltext) +FI ;putwert(fnrlparaphe,paraphe);changeindex;neuerblock;.pruefeplausibilitaet +:IF bearbeitungderermTHEN standardmeldung(meldungplausi,niltext);FOR jFROM 1 +UPTO lehrerzahlREP pruefeeinezeilePER FI .pruefeeinezeile:sollstunden:=int( +altelehrer(j).pflichtstunden);FOR iFROM 0UPTO anzermprolehrer-1REP aktfnr:= +fnrersteerm+(j-1)*felderprozeile+2*i;IF standardmaskenfeld(aktfnr)<>""THEN +standardpruefe(2,aktfnr,null,null,niltext,fehlerstatus);IF fehlerstatus<>0 +THEN LEAVE pruefeplausibilitaetFI ;standardpruefe(3,aktfnr,untergrenze, +obergrenze,niltext,fehlerstatus);IF fehlerstatus<>0THEN LEAVE +pruefeplausibilitaetFI ;FI ;sollstunden:=sollstunden-int(standardmaskenfeld( +aktfnr));IF sollstunden<0THEN standardmeldung(meldungzusollstunden,niltext); +fehlerstatus:=aktfnr;LEAVE pruefeplausibilitaetELSE altelehrer(j).sollstunden +:=text(sollstunden)FI ;aktfnr:=fnrersterermgrund+(j-1)*felderprozeile+2*i;IF +standardmaskenfeld(aktfnr)<>""THEN IF NOT imbestand(bestandermgrund+ +trennerfuerimbestand+standardmaskenfeld(aktfnr),dateinameschluessel)THEN +standardmeldung(meldungzumbestand,niltext);fehlerstatus:=aktfnr;LEAVE +pruefeplausibilitaetFI FI PER .speicherungdurchführen:IF bearbeitungdererm +THEN logeintrag(logbucheintragerm)ELSE logeintrag(logbucheintragspr)FI ;FOR j +FROM 0UPTO lehrerzahl-1REP IF lehrerdatenwurdengeaendertTHEN putwert( +fnrlparaphe,altelehrer(j+1).paraphe);search(dnrlehrer,true); +speicherfehlerabfangen;IF bearbeitungderermTHEN FOR iFROM 0UPTO +anzermprolehrer-1REP putwert(fnrlerm1+2*i,standardmaskenfeld(fnrersteerm+j* +felderprozeile+2*i));putwert(fnrlermgrund1+2*i,standardmaskenfeld( +fnrersterermgrund+j*felderprozeile+2*i));PER ;putwert(fnrlsollstd,altelehrer( +j+1).sollstunden)ELSE putwert(fnrlsprechzeit,standardmaskenfeld(fnrerstespr+j +*felderprozeile));FI ;update(dnrlehrer);speicherfehlerabfangen; +standardmeldung(meldungspeicherung,altelehrer(j+1).paraphe+hell)FI PER . +lehrerdatenwurdengeaendert:lehrerdatengeaendert:=FALSE ;IF bearbeitungdererm +THEN i:=0;WHILE NOT lehrerdatengeaendertCAND i<anzermprolehrerREP +lehrerdatengeaendert:=standardmaskenfeld(fnrersteerm+j*felderprozeile+2*i)<> +altelehrer(j+1).erm(i+1)COR standardmaskenfeld(fnrersterermgrund+j* +felderprozeile+2*i)<>altelehrer(j+1).grund(i+1);iINCR 1PER ELSE +lehrerdatengeaendert:=standardmaskenfeld(fnrerstespr+j*felderprozeile)<> +altelehrer(j+1).sprechzeitenFI ;lehrerdatengeaendert.speicherfehlerabfangen: +IF dbstatus<>nullTHEN standardmeldung(meldungspeicherfehler,altelehrer(j+1). +paraphe+hell);return(tofather);LEAVE lehrerspeichernFI .END PROC +lehrerspeichern;END PACKET listenweiselehrererf + diff --git a/app/schulis/2.2.1/src/4.AUSWERTUNGEN STUNDENPLAN 2.files b/app/schulis/2.2.1/src/4.AUSWERTUNGEN STUNDENPLAN 2.files new file mode 100644 index 0000000..f1e4883 --- /dev/null +++ b/app/schulis/2.2.1/src/4.AUSWERTUNGEN STUNDENPLAN 2.files @@ -0,0 +1,5 @@ +4.stundenplan schnittstelle +4.einhaltung zeitwuensche pruefen +4.daten für intega aufbereiten + + diff --git a/app/schulis/2.2.1/src/4.AUSWERTUNGEN STUNDENPLAN 3.files b/app/schulis/2.2.1/src/4.AUSWERTUNGEN STUNDENPLAN 3.files new file mode 100644 index 0000000..34b3d36 --- /dev/null +++ b/app/schulis/2.2.1/src/4.AUSWERTUNGEN STUNDENPLAN 3.files @@ -0,0 +1,6 @@ +4.stundenplan schnittstelle +4.aufsichten erstellen +4.vertretungen organisieren +4.stdpluebersichten +4.einzelstdpl.sek2 + diff --git a/app/schulis/2.2.1/src/4.AUSWERTUNGEN STUNDENPLAN.files b/app/schulis/2.2.1/src/4.AUSWERTUNGEN STUNDENPLAN.files new file mode 100644 index 0000000..fe85e58 --- /dev/null +++ b/app/schulis/2.2.1/src/4.AUSWERTUNGEN STUNDENPLAN.files @@ -0,0 +1,11 @@ +4.stundenplan schnittstelle +4.einzelstdpl.raeume +4.einzelstdpl.lehrer +4.einzelstdpl.sek1 +4.stand der stundenplanung analysieren +4.springstunden lehrer analysieren +4.springstunden schueler analysieren +4.raumwuensche pruefen +4.teilstdpl fach lehrer + + diff --git a/app/schulis/2.2.1/src/4.ERFASSUNGEN LISTENWEISE 2.files b/app/schulis/2.2.1/src/4.ERFASSUNGEN LISTENWEISE 2.files new file mode 100644 index 0000000..afefca2 --- /dev/null +++ b/app/schulis/2.2.1/src/4.ERFASSUNGEN LISTENWEISE 2.files @@ -0,0 +1,6 @@ +0.listenweise grundfunktionen +0.kurswahlbasis bereinigen +4.faecherangebot planen +4.lehrveranstaltungen benennen +4.uv und kopplungen bearbeiten + diff --git a/app/schulis/2.2.1/src/4.ERFASSUNGEN LISTENWEISE 3.files b/app/schulis/2.2.1/src/4.ERFASSUNGEN LISTENWEISE 3.files new file mode 100644 index 0000000..230eb9a --- /dev/null +++ b/app/schulis/2.2.1/src/4.ERFASSUNGEN LISTENWEISE 3.files @@ -0,0 +1,7 @@ +0.listenweise grundfunktionen +4.zeitwuensche bearbeiten +4.vertretungsdaten bearbeiten + + + + diff --git a/app/schulis/2.2.1/src/4.ERFASSUNGEN STUNDENPLAN.files b/app/schulis/2.2.1/src/4.ERFASSUNGEN STUNDENPLAN.files new file mode 100644 index 0000000..7ca8dae --- /dev/null +++ b/app/schulis/2.2.1/src/4.ERFASSUNGEN STUNDENPLAN.files @@ -0,0 +1,11 @@ +4.stundenplan schnittstelle +4.stundenplan raumweise erfassen +4.stundenplan im dialog erstellen +4.daten für schulis aufbereiten +4.halbjahreswechsel zum stundenplan +4.konsistenzpruefung +4.stundenplan nach zeiten erfassen +4.stundenplan nach lv erfassen +4.stundenplan akt halbj uebernehmen + + diff --git a/app/schulis/2.2.1/src/4.anschr.unterrichtsvertlg fuer lehrer b/app/schulis/2.2.1/src/4.anschr.unterrichtsvertlg fuer lehrer new file mode 100644 index 0000000..9c695d8 --- /dev/null +++ b/app/schulis/2.2.1/src/4.anschr.unterrichtsvertlg fuer lehrer @@ -0,0 +1,137 @@ +PACKET anschrunterrichtsvertlgfuerlehrerDEFINES +unterrichtsvertlgfuerlehrereingang,unterrichtsvertlgfuerlehrerstarten, +unterrichtsvertlgfuerlehrersonderwerte,unterrichtsvertlgfuerlehrermultistop, +unterrichtsvertlgfuerlehrerdruckdateibauen:LET maske= +"ms unterrichtsverteilung fuer lehrer drucken",fnrparaphe=2,fnrzeitwuensche=3 +,fnraktsj=4,fnrbsausgabe=5,fnrdrausgabe=6,mnrbittewarten=69, +mnrkeinegueltigeparaphe=344,mnrlistewirdaufbereitet=190,trenner="/",blank=" " +,niltext="";TEXT CONST v1datlehrer:="vordruck1 unterrichtsvertlg fuer lehrer" +,v2datlehrveranstgn:="vordruck2 unterrichtsvertlg fuer lehrer", +v3dataktschuelergr:="vordruck4 auskunft lehrer",v4datzeitwuensche:= +"vordruck5 auskunft lehrer",bestandnamepersoenlermaessigung:= +"c02 persoenl ermaess";LET swsj=520,swhj=521,swanrede=522, +swermaessgrund1langtext=530,swermaessgrund2langtext=531, +swermaessgrund3langtext=532,swermaessgrund4langtext=533,swfach=534,swkennung= +535,swwstd=536,swdummy=526,ganztage=520,ganzgew=521,vormtage=522,vormgew=523, +nachtage=524,nachgew=525;BOOL VAR bildschirmausgabe,mitzeitwuenschen, +einzelbearbeitung,aktsj;TEXT VAR angegebeneparaphe:="",aktparaphe,halbjahr, +schuljahr,wochstdn,fachkennung;INT VAR gemerkterdbstatus,status,sollstdn, +differenz,summewochstdn:=0,zeilenhilfszahl,zeilenzahl,zusatzzeilen, +swaktklassenleiter,swaktstellvertreter;BOOL PROC paraphevorhanden:putwert( +fnrlparaphe,angegebeneparaphe);search(dnrlehrer,TRUE );IF dbstatus=0THEN +TRUE ELSE FALSE FI END PROC paraphevorhanden;PROC +unterrichtsvertlgfuerlehrereingang:standardvproc(maske)END PROC +unterrichtsvertlgfuerlehrereingang;PROC unterrichtsvertlgfuerlehrerstarten: +standardpruefe(5,fnrbsausgabe,fnrdrausgabe,0,"",status);IF status<>0THEN +infeld(status);return(1);ELSE angegebeneparaphe:=standardmaskenfeld( +fnrparaphe);IF angegebeneparaphe=niltextCOR paraphevorhandenTHEN +bildschirmausgabe:=standardmaskenfeld(fnrbsausgabe)<>niltext; +einzelbearbeitung:=standardmaskenfeld(fnrparaphe)<>niltext;mitzeitwuenschen:= +standardmaskenfeld(fnrzeitwuensche)<>niltext;aktsj:=standardmaskenfeld( +fnraktsj)<>niltext;aktparaphe:=angegebeneparaphe;startenausfuehrenELSE +standardmeldung(mnrkeinegueltigeparaphe,niltext);return(1)FI ;FI . +startenausfuehren:halbjahr:=schulkenndatum("Schulhalbjahr");schuljahr:= +schulkenndatum("Schuljahr");IF NOT (aktsj)THEN geplanteshjundsjberechnen( +halbjahr,schuljahr);FI ;setzesonderwerteschulkenndaten;setzewerte; +standardmeldung(mnrbittewarten,niltext);zusammengesetztesanschreiben( +dnrlehrer,bildschirmausgabe,einzelbearbeitung,BOOL PROC +unterrichtsvertlgfuerlehrersonderwerte,BOOL PROC +unterrichtsvertlgfuerlehrermultistop,TEXT PROC +unterrichtsvertlgfuerlehrerdruckdateibauen).setzewerte:putwert(fnrlparaphe, +aktparaphe)END PROC unterrichtsvertlgfuerlehrerstarten;BOOL PROC +unterrichtsvertlgfuerlehrermultistop:BOOL VAR ok;IF einzelbearbeitungTHEN ok +:=angegebeneparaphe=wert(fnrlparaphe)AND dbstatus=0ELSE ok:=dbstatus=0FI ;ok +END PROC unterrichtsvertlgfuerlehrermultistop;BOOL PROC +unterrichtsvertlgfuerlehrersonderwerte:TEXT VAR grund1,grund2,grund3,grund4; +initialisieresonderwerte;aktparaphe:=wert(fnrlparaphe);adressat(aktparaphe); +gemerkterdbstatus:=dbstatus;setzesonderwert(swsj,subtext(schuljahr,1,2)+ +trenner+subtext(schuljahr,3,4));setzesonderwert(swhj,halbjahr);TEXT VAR +anredetext;IF wert(fnrlgeschlecht)="m"THEN anredetext:="Herrn"ELSE anredetext +:="Frau";FI ;setzesonderwert(swanrede,anredetext);grund1:=wert(fnrlermgrund1) +;grund2:=wert(fnrlermgrund2);grund3:=wert(fnrlermgrund3);grund4:=wert( +fnrlermgrund4);sollstdn:=intwert(fnrlsollstd);inittupel(dnrschluessel); +putwert(fnrschlsachgebiet,bestandnamepersoenlermaessigung);putwert( +fnrschlschluessel,grund1);search(dnrschluessel,TRUE );IF dbstatus=0THEN +setzesonderwert(swermaessgrund1langtext,wert(fnrschllangtext))ELSE +setzesonderwert(swermaessgrund1langtext,blank)FI ;putwert(fnrschlschluessel, +grund2);search(dnrschluessel,TRUE );IF dbstatus=0THEN setzesonderwert( +swermaessgrund2langtext,wert(fnrschllangtext));ELSE setzesonderwert( +swermaessgrund2langtext,blank);FI ;putwert(fnrschlschluessel,grund3);search( +dnrschluessel,TRUE );IF dbstatus=0THEN setzesonderwert( +swermaessgrund3langtext,wert(fnrschllangtext))ELSE setzesonderwert( +swermaessgrund3langtext,blank)FI ;putwert(fnrschlschluessel,grund4);search( +dnrschluessel,TRUE );IF dbstatus=0THEN setzesonderwert( +swermaessgrund4langtext,wert(fnrschllangtext))ELSE setzesonderwert( +swermaessgrund4langtext,blank)FI ;inittupel(dnrlehrveranstaltungen);putwert( +fnrlvsj,schuljahr);putwert(fnrlvhj,halbjahr);putwert(fnrlvparaphe,aktparaphe) +;search(ixlvsjhjpar,TRUE );IF dbstatus=0THEN fachkennung:=wert( +fnrlvfachkennung);wochstdn:=wert(fnrlvwochenstd);setzesonderwert(swfach, +subtext(fachkennung,1,2));setzesonderwert(swkennung,subtext(fachkennung,3,6)) +;setzesonderwert(swwstd,wochstdn);summewochstdn:=int(wochstdn);ELSE +setzesonderwert(swfach,blank);setzesonderwert(swkennung,blank); +setzesonderwert(swwstd,blank);summewochstdn:=0;FI ;dbstatus(gemerkterdbstatus +);TRUE END PROC unterrichtsvertlgfuerlehrersonderwerte;TEXT PROC +unterrichtsvertlgfuerlehrerdruckdateibauen:LET druckdatei="liste.1", +hilfsdatei="hilfsdatei";TEXT VAR zeile;zeilenzahl:=0;zusatzzeilen:=0; +vordruckeholen;setzemitseitennummern(TRUE );druckvorbereiten;standardmeldung( +mnrlistewirdaufbereitet,niltext);briefalternative(v1datlehrer,hilfsdatei); +hilfsdateiindruckdatei(hilfsdatei);vordruck2ggfxmalindruckdatei;zeile:=blank; +druckzeileschreiben(zeile);zeilenzahlINCR 1;zeile:=42*blank+"Wstd. Summe: "+ +text(summewochstdn,2);druckzeileschreiben(zeile);zeilenzahlINCR 1;IF sollstdn +<>summewochstdnTHEN differenz:=sollstdn-summewochstdn;IF differenz<0THEN +zeile:=43*blank+"Mehrarbeit: "+text(-differenz,2)+" Std.";ELSE zeile:=24* +blank+"Sollstunden unterschritten um: "+text(differenz,2)+" Std.";FI ; +druckzeileschreiben(zeile);zeilenzahlINCR 1;FI ;zeilenzahl:=5; +vordruck3ggfindruckdatei;IF mitzeitwuenschenTHEN zeilenzahl:=17; +vordruck4ggfindruckdatei;FI ;drucknachbereitenohneausdrucken; +vordruckeloeschen;druckdatei.vordruckeholen:fetch(v1datlehrer,/ +"anschreiben server");fetch(v2datlehrveranstgn,/"anschreiben server");fetch( +v3dataktschuelergr,/"anschreiben server");fetch(v4datzeitwuensche,/ +"anschreiben server");.vordruckeloeschen:forget(v1datlehrer,quiet);forget( +v2datlehrveranstgn,quiet);forget(v3dataktschuelergr,quiet);forget( +v4datzeitwuensche,quiet);END PROC unterrichtsvertlgfuerlehrerdruckdateibauen; +PROC vordruck2ggfxmalindruckdatei:TEXT VAR hilfsdatei:="hilfsdatei";BOOL VAR +hilfsdateida:=FALSE ;succ(ixlvsjhjpar);WHILE dbstatus=0AND wert(fnrlvparaphe) +=aktparapheREP fachkennung:=wert(fnrlvfachkennung);wochstdn:=subtext(wert( +fnrlvwochenstd),1,2);setzesonderwert(swfach,subtext(fachkennung,1,2)); +setzesonderwert(swkennung,subtext(fachkennung,3,6));setzesonderwert(swwstd, +wochstdn);summewochstdnINCR int(wochstdn);briefalternative(v2datlehrveranstgn +,hilfsdatei);succ(ixlvsjhjpar);hilfsdateida:=TRUE ;PER ;IF hilfsdateidaTHEN +hilfsdateiindruckdatei(hilfsdatei)FI ;END PROC vordruck2ggfxmalindruckdatei; +PROC vordruck3ggfindruckdatei:LET hilfsdatei="hilfsdatei";TEXT VAR aufberwert +:=niltext;BOOL VAR hilfsdateiangelegt:=FALSE ;setzesonderwert(swdummy,blank); +swaktklassenleiter:=580;swaktstellvertreter:=581;gemerkterdbstatus:=dbstatus; +inittupel(dnraktschuelergruppen);putwert(fnrsgrpsj,schuljahr);putwert( +fnrsgrphj,halbjahr);search(dnraktschuelergruppen,FALSE );WHILE dbstatus=0AND +wert(fnrsgrphj)=halbjahrREP IF wert(fnrsgrplehrer)=aktparapheAND +swaktklassenleiter<590THEN aufberwert:=wert(fnrsgrpjgst);aufberwertCAT wert( +fnrsgrpkennung);setzesonderwert(swaktklassenleiter,aufberwert); +swaktklassenleiterINCR 2;hilfsdateiangelegt:=TRUE ;ELSE IF wert( +fnrsgrpstellvlehrer)=aktparapheAND swaktstellvertreter<591THEN aufberwert:= +wert(fnrsgrpjgst);aufberwertCAT wert(fnrsgrpkennung);setzesonderwert( +swaktstellvertreter,aufberwert);swaktstellvertreterINCR 2;hilfsdateiangelegt +:=TRUE ;FI ;FI ;succ(dnraktschuelergruppen)PER ;IF hilfsdateiangelegtTHEN +briefalternative(v3dataktschuelergr,hilfsdatei);hilfsdateiindruckdatei( +hilfsdatei);FI ;dbstatus(gemerkterdbstatus)END PROC vordruck3ggfindruckdatei; +PROC vordruck4ggfindruckdatei:gemerkterdbstatus:=dbstatus;LET hilfsdatei= +"hilfsdatei";TEXT VAR zeitwuensche;initialisieresonderwerte;INT VAR +aktswzeitwunsch:=531,position:=1,i;setzesonderwert(swdummy,blank);inittupel( +dnrzeitwuensche);putwert(fnrzwsj,schuljahr);putwert(fnrzwhj,halbjahr);putwert +(fnrzwbezug,"P");putwert(fnrzwbezugsobjekt,aktparaphe);search(dnrzeitwuensche +,TRUE );IF dbstatus=0THEN zeitwuensche:=wert(fnrzwunbestimmtewuensche); +setzesonderwert(ganztage,zeitwuenscheSUB 1);setzesonderwert(ganzgew, +zeitwuenscheSUB 3);setzesonderwert(vormtage,zeitwuenscheSUB 4); +setzesonderwert(vormgew,zeitwuenscheSUB 6);setzesonderwert(nachtage, +zeitwuenscheSUB 7);setzesonderwert(nachgew,zeitwuenscheSUB 9);zeitwuensche:= +wert(fnrzwbestimmtewuensche);FOR iFROM 1UPTO 66REP setzesonderwert( +aktswzeitwunsch,subtext(zeitwuensche,position,position+1));aktswzeitwunsch +INCR 1;positionINCR 2PER ;briefalternative(v4datzeitwuensche,hilfsdatei); +hilfsdateiindruckdatei(hilfsdatei);FI ;dbstatus(gemerkterdbstatus)END PROC +vordruck4ggfindruckdatei;PROC hilfsdateiindruckdatei(TEXT CONST hilfsdatei): +FILE VAR f;INT VAR i;TEXT VAR zeile;f:=sequentialfile(input,hilfsdatei); +zeilenhilfszahl:=lines(f);IF zeilenzahl+zeilenhilfszahl+zusatzzeilen>= +drucklaengeTHEN seitenwechsel;zeilenzahl:=0;FI ;FOR iFROM 1UPTO +zeilenhilfszahlREP getline(f,zeile);druckzeileschreiben(zeile)PER ;forget( +hilfsdatei,quiet);zeilenzahlINCR zeilenhilfszahlEND PROC +hilfsdateiindruckdatei;END PACKET anschrunterrichtsvertlgfuerlehrer + diff --git a/app/schulis/2.2.1/src/4.anschr.vertretungen b/app/schulis/2.2.1/src/4.anschr.vertretungen new file mode 100644 index 0000000..d806e14 --- /dev/null +++ b/app/schulis/2.2.1/src/4.anschr.vertretungen @@ -0,0 +1,149 @@ +PACKET anschrvertretungenDEFINES vertretungeneingang,vertretungenstarten, +vertretungensonderwerte,vertretungendruckdateibauen,vertretungenscanbedingung +,vertretungslistedrucken:LET swnameaufbereitet=550,swdatum=520,swzeit=521, +swstd=521,swart=522,swlv=523,swlangtext=523;LET maske= +"ms vertretungen eingang",fnrparaphe=2,fnrvonzeit=3,fnrbiszeit=4,fnrbsausgabe +=5,fnrdrausgabe=6,niltext="",blank=" ",strich="-----",kreuz="+",klammerauf= +"(",klammerzu=")",maxvertretungsarten=16,sonstigkuerzel="qq", +mnrauswahlnichtsinnvoll=56,mnrbittewarten=69,mnrlistewirderstellt=7, +mnrnichtimbestand=55;LET druckdatei="liste.1";TEXT CONST sonstiges:= +"Sonstiges",dateimitformularkopf:="vordruck1 vertretungen", +dateimitvertretungsdaten:="vordruck2 vertretungen";REAL VAR obergrenze, +untergrenze,aktzeit;INT VAR index:=dnrlehrer,status,zeilenzahl, +zeilenhilfszahl,zusatzzeilen,zaehler;TEXT VAR angegebeneparaphe:="", +aktparaphe,letzteparaphe,datum,hilfstext,bestand:="c02 anrechnung vertret", +vertretungsarten;ROW maxvertretungsartenTEXT VAR vertretungen;BOOL VAR +bildschirmausgabe,einzelbearbeitung,zeituntergrenze,zeitobergrenze,dateiende, +ersteraufruf;PROC vertretungslistedrucken(BOOL CONST drucken):IF druckenTHEN +print(druckdatei);FI ;forget(druckdatei,quiet);IF einzelbearbeitungTHEN +forget(dateimitformularkopf,quiet);forget(dateimitvertretungsdaten,quiet); +enter(2)ELIF dateiendeTHEN forget(dateimitformularkopf,quiet);forget( +dateimitvertretungsdaten,quiet);enter(2)ELSE enter(1)FI ;END PROC +vertretungslistedrucken;PROC vertretungeneingang:ersteraufruf:=TRUE ; +standardvproc(maske)END PROC vertretungeneingang;PROC vertretungenstarten: +TEXT VAR vonzeit,biszeit;IF NOT ersteraufrufTHEN putwert(fnrvparaphe, +aktparaphe);zusammengesetztesanschreiben(ixvpar,bildschirmausgabe, +einzelbearbeitung,BOOL PROC vertretungensonderwerte,BOOL PROC +vertretungenscanbedingung,TEXT PROC vertretungendruckdateibauen);ELSE last( +ixvpar);letzteparaphe:=wert(fnrvparaphe);standardpruefe(5,fnrbsausgabe, +fnrdrausgabe,0,"",status);IF status<>0THEN infeld(status);return(1);ELSE +standardmeldung(mnrbittewarten,niltext);vonzeit:=standardmaskenfeld( +fnrvonzeit);biszeit:=standardmaskenfeld(fnrbiszeit);zeituntergrenze:=vonzeit +<>niltext;zeitobergrenze:=biszeit<>niltext;IF datumspruefungenkorrektTHEN +angegebeneparaphe:=standardmaskenfeld(fnrparaphe);IF +angabenindateivertretungenvorhandenTHEN ersteraufruf:=FALSE ; +parametersetzenundstartenELSE standardmeldung(mnrnichtimbestand,niltext); +return(1)FI ;ELSE return(1)FI ;FI ;FI ;.parametersetzenundstarten:dateiende:= +FALSE ;datum:=wert(fnrvdatum);vertretungsartenausbestandholen; +bildschirmausgabe:=standardmaskenfeld(fnrdrausgabe)=niltext; +setzesonderwerteschulkenndaten;vordruckeholen;standardmeldung( +mnrlistewirderstellt,niltext);putwert(fnrvparaphe,aktparaphe);disablestop; +zusammengesetztesanschreiben(ixvpar,bildschirmausgabe,einzelbearbeitung,BOOL +PROC vertretungensonderwerte,BOOL PROC vertretungenscanbedingung,TEXT PROC +vertretungendruckdateibauen);IF iserrorTHEN clearerrorFI ;enablestop. +vordruckeholen:forget(dateimitformularkopf,quiet);forget( +dateimitvertretungsdaten,quiet);fetch(dateimitformularkopf,/ +"anschreiben server");fetch(dateimitvertretungsdaten,/"anschreiben server");. +datumspruefungenkorrekt:IF zeituntergrenzeTHEN standardpruefe(6,fnrvonzeit,0, +0,"",status);IF status<>0THEN infeld(status);LEAVE datumspruefungenkorrekt +WITH FALSE ELSE datum:=subtext(vonzeit,5,6);datumCAT subtext(vonzeit,3,4); +datumCAT subtext(vonzeit,1,2);untergrenze:=real(datum);FI ;FI ;IF +zeitobergrenzeTHEN standardpruefe(6,fnrbiszeit,0,0,"",status);IF status<>0 +THEN infeld(status);LEAVE datumspruefungenkorrektWITH FALSE ELSE datum:= +subtext(biszeit,5,6);datumCAT subtext(biszeit,3,4);datumCAT subtext(biszeit,1 +,2);obergrenze:=real(datum);FI ;FI ;IF zeituntergrenzeAND zeitobergrenzeTHEN +IF untergrenze>obergrenzeTHEN infeld(fnrvonzeit);standardmeldung( +mnrauswahlnichtsinnvoll,niltext);LEAVE datumspruefungenkorrektWITH FALSE FI ; +FI ;TRUE .vertretungsartenausbestandholen:vertretungsarten:=niltext;inittupel +(dnrschluessel);putwert(fnrschlsachgebiet,bestand);search(dnrschluessel); +WHILE wert(fnrschlsachgebiet)=bestandREP vertretungsartenCAT text(wert( +fnrschlschluessel),2);succ(dnrschluessel);PER ;. +angabenindateivertretungenvorhanden:BOOL VAR ok:=FALSE ;einzelbearbeitung:= +angegebeneparaphe<>niltext;inittupel(dnrvertretungen);IF einzelbearbeitung +THEN putwert(fnrvparaphe,angegebeneparaphe);search(ixvpar,TRUE )ELSE search( +ixvpar,FALSE )FI ;IF dbstatus<>0THEN ok:=FALSE ELSE aktparaphe:=wert( +fnrvparaphe);IF einzelbearbeitungTHEN WHILE dbstatus=0AND angegebeneparaphe= +aktparapheAND obergrenzeokAND NOT untergrenzeokREP succ(ixvpar);aktparaphe:= +wert(fnrvparaphe);PER ;ok:=dbstatus=0AND obergrenzeokAND untergrenzeokAND +angegebeneparaphe=aktparapheELSE WHILE dbstatus=0AND (NOT obergrenzeokCOR +NOT untergrenzeok)REP succ(ixvpar);PER ;aktparaphe:=wert(fnrvparaphe);ok:= +dbstatus=0AND obergrenzeokAND untergrenzeokFI ;FI ;okEND PROC +vertretungenstarten;BOOL PROC obergrenzeok:BOOL VAR b:=TRUE ;IF +zeitobergrenzeTHEN datum:=wert(fnrvdatum);hilfstext:=subtext(datum,7,8); +hilfstextCAT subtext(datum,4,5);hilfstextCAT subtext(datum,1,2);aktzeit:=real +(hilfstext);b:=aktzeit<=obergrenze;FI ;bEND PROC obergrenzeok;BOOL PROC +untergrenzeok:BOOL VAR b:=TRUE ;IF zeituntergrenzeTHEN datum:=wert(fnrvdatum) +;hilfstext:=subtext(datum,7,8);hilfstextCAT subtext(datum,4,5);hilfstextCAT +subtext(datum,1,2);aktzeit:=real(hilfstext);b:=aktzeit>=untergrenze;FI ;bEND +PROC untergrenzeok;BOOL PROC vertretungenscanbedingung:BOOL VAR b;IF +einzelbearbeitungTHEN b:=aktparaphe=angegebeneparapheAND dbstatus=0ELSE b:= +dbstatus=0AND NOT dateiendeFI ;bEND PROC vertretungenscanbedingung;BOOL PROC +vertretungensonderwerte:TEXT VAR hilfsstring1:=niltext,hilfsstring2;INT VAR +dbstatussave;initialisieresonderwerte;adressat(aktparaphe);dbstatussave:= +dbstatus;inittupel(dnrlehrer);putwert(fnrlparaphe,aktparaphe);search( +dnrlehrer,TRUE );IF wert(fnrlgeschlecht)="m"THEN hilfsstring1:="Herrn "ELSE +hilfsstring1:="Frau ";FI ;hilfsstring2:=wert(fnrlamtsbeztitel);IF +hilfsstring2<>niltextTHEN hilfsstring1CAT hilfsstring2+blank;FI ;hilfsstring2 +:=wert(fnrlzusatz);IF hilfsstring2<>niltextTHEN hilfsstring1CAT hilfsstring2+ +blank;FI ;hilfsstring1CAT wert(fnrlfamname);setzesonderwert(swnameaufbereitet +,hilfsstring1);dbstatus(0);TRUE END PROC vertretungensonderwerte;TEXT PROC +vertretungendruckdateibauen:LET druckdatei="liste.1",hilfsdatei="hilfsdatei"; +TEXT VAR zeile;INT VAR i;BOOL VAR einsatzda:=FALSE ;setzemitseitennummern( +TRUE );druckvorbereiten;zeilenzahl:=0;zusatzzeilen:=0;briefalternative( +dateimitformularkopf,hilfsdatei);hilfsdateiindruckdatei(hilfsdatei);FOR +zaehlerFROM 1UPTO maxvertretungsartenREP vertretungen(zaehler):=niltextPER ; +vordruck2xmalinhilfsdatei;hilfsdateiindruckdatei(hilfsdatei);IF zeilenzahl+3> +drucklaengeTHEN seitenwechsel;zeilenzahl:=0FI ;zeile:=blank; +druckzeileschreiben(zeile);druckzeileschreiben(zeile);zeile:= +"Summe Stunden Art";druckzeileschreiben(zeile);zeile:=3*strich+kreuz+7* +strich;druckzeileschreiben(zeile);zeilenzahlINCR 4;setzesonderwert(swdatum, +niltext);imrowgemerktedatenübervordruck2indruckdatei; +drucknachbereitenohneausdrucken;druckdateiEND PROC +vertretungendruckdateibauen;PROC vordruck2xmalinhilfsdatei:LET hilfsdatei= +"hilfsdatei";INT VAR savedbstatus;savedbstatus:=dbstatus;inittupel( +dnrvertretungen);statleseschleife(ixvpar,"",aktparaphe,fnrvparaphe, +fnrvparaphe,PROC saetzezurparapheinvordruck);dbstatus(savedbstatus);IF NOT +einzelbearbeitungTHEN search(ixvpar,FALSE );WHILE dbstatus=0AND (NOT +obergrenzeokCOR NOT untergrenzeokCOR aktparaphe=wert(fnrvparaphe))REP succ( +ixvpar);PER ;dateiende:=letzteparaphe=aktparapheOR dbstatus<>0;aktparaphe:= +wert(fnrvparaphe);FI ;END PROC vordruck2xmalinhilfsdatei;PROC +saetzezurparapheinvordruck(BOOL VAR b):LET hilfsdatei="hilfsdatei";b:=FALSE ; +IF NOT obergrenzeokCOR wert(fnrvparaphe)<>aktparapheCOR dbstatus=3THEN b:= +TRUE ;ELSE IF untergrenzeokTHEN swvertretungenfuellen;briefalternative( +dateimitvertretungsdaten,hilfsdatei);FI ;FI ;END PROC +saetzezurparapheinvordruck;PROC swvertretungenfuellen:TEXT VAR zeitaufber, +artvertr,lehrveranstg,lvaufber;INT VAR zeit,std,tag,position;zeit:=intwert( +fnrvtagstd);lehrveranstg:=wert(fnrvveranstaltung);artvertr:=text(wert( +fnrvanrechnung),2);datum:=wert(fnrvdatum);position:=pos(vertretungsarten, +artvertr);IF position=0THEN vertretungen(16)CAT sonstigkuerzelELSE WHILE ( +positionMOD 2)=0AND position<>0AND position<32REP position:=pos( +vertretungsarten,artvertr,position+1);PER ;IF position=0OR (positionMOD 2)=0 +THEN vertretungen(16)CAT sonstigkuerzelELSE vertretungen(position)CAT +artvertrFI ;FI ;tag:=(zeit-1)DIV 12;std:=zeitMOD 12;IF tag=0THEN zeitaufber:= +"Mo "ELIF tag=1THEN zeitaufber:="Di "ELIF tag=2THEN zeitaufber:="Mi "ELIF tag +=3THEN zeitaufber:="Do "ELIF tag=4THEN zeitaufber:="Fr "ELIF tag=5THEN +zeitaufber:="Sa "FI ;zeitaufberCAT text(std,2);lvaufber:=subtext(lehrveranstg +,1,2)+blank;lvaufberCAT subtext(lehrveranstg,3,4)+blank;lvaufberCAT subtext( +lehrveranstg,5,8);setzesonderwert(swdatum,datum);setzesonderwert(swzeit, +zeitaufber);setzesonderwert(swart,artvertr);setzesonderwert(swlv,lvaufber); +END PROC swvertretungenfuellen;PROC +imrowgemerktedatenübervordruck2indruckdatei:BOOL VAR angabeda:=FALSE ;TEXT +VAR hilfsdatei:="hilfsdatei",kuerzel,langtext;INT VAR savedbstatus; +savedbstatus:=dbstatus;inittupel(dnrschluessel);putwert(fnrschlsachgebiet, +bestand);zaehler:=1;WHILE zaehler<=maxvertretungsartenREP kuerzel:=text( +vertretungen(zaehler),2);IF kuerzel<>" "THEN IF kuerzel=sonstigkuerzelTHEN +kuerzel:=" ";langtext:=sonstigesELSE putwert(fnrschlschluessel,compress( +kuerzel));search(dnrschluessel,TRUE );langtext:=wert(fnrschllangtext);FI ; +setzesonderwert(swstd,text(length(vertretungen(zaehler))DIV 2,2)); +setzesonderwert(swart,kuerzel);setzesonderwert(swlangtext,klammerauf+langtext ++klammerzu);briefalternative(dateimitvertretungsdaten,hilfsdatei);angabeda:= +TRUE ;FI ;zaehlerINCR 1;PER ;dbstatus(savedbstatus);IF angabedaTHEN +hilfsdateiindruckdatei(hilfsdatei)FI ;END PROC +imrowgemerktedatenübervordruck2indruckdatei;PROC hilfsdateiindruckdatei(TEXT +CONST hilfsdatei):FILE VAR f;INT VAR i;TEXT VAR zeile;f:=sequentialfile(input +,hilfsdatei);zeilenhilfszahl:=lines(f);IF zeilenzahl+zeilenhilfszahl+ +zusatzzeilen>=drucklaengeTHEN seitenwechsel;zeilenzahl:=0;FI ;FOR iFROM 1 +UPTO zeilenhilfszahlREP getline(f,zeile);druckzeileschreiben(zeile)PER ; +forget(hilfsdatei,quiet);zeilenzahlINCR zeilenhilfszahlEND PROC +hilfsdateiindruckdatei;END PACKET anschrvertretungen; + diff --git a/app/schulis/2.2.1/src/4.aufsichten erstellen b/app/schulis/2.2.1/src/4.aufsichten erstellen new file mode 100644 index 0000000..06022bf --- /dev/null +++ b/app/schulis/2.2.1/src/4.aufsichten erstellen @@ -0,0 +1,194 @@ +PACKET aufsichtenerstellenDEFINES aufsichtsplandatenbearbeiten, +aufsichtsplandatenspeichern,aufsichtsplanlehrerlistezeigen:LET feldeingtag=2, +feldeingnr=3,feldeingakthj=4,feldbearbtag=2,feldbearbnr=3,feldbearbname=4, +feldbearbort1=5,feldbearbpar1=6,letztesbearbfeld=38,leerereintrag=" ", +bestandorte="c02 aufsichtsorte",trenner="�",schuljahr="Schuljahr",halbjahr= +"Schulhalbjahr",ausgparam="#",bearbmaske="ms aufsichtsplan erstellen bearb", +kennungparaphe="P",kennunglv="L",kennungraum="R",laengetagbeschr=17, +laengeparaphe=4,laengeaufsort=4,laengeraumminus=3,maxanzorte=17, +meldungserverfehler=376,meldungbearbwird=352,meldungkeinstdplan=366, +meldungkeinesugruppen=334,meldungzuvielesugruppen=356,meldungkeinelv=326, +meldungzuvielelv=358,meldungbasisinkon=378,meldunglisteerstellen=7, +meldungfalschertag=385,meldungfalschepar=142,meldungwarten=69, +meldungzuvieleorte=398,meldungkeinelehrer=337,meldungkeineorte=399, +meldungkeinedaten=59,meldungschonaufs=401,meldungspeichern=50, +meldungfalscherwert=54,meldungnichtsp=63,meldungspfehler=364,meldungplausi=57 +;ROW maxanzorteTEXT VAR datenausplan;TEXT VAR alletage:= +"�01�1� 1�MO�mo�Mo�02�2� 2�DI�di�Di�"+"03�3� 3�MI�mi�Mi�04�4� 4�DO�do�Do�"+ +"05�5� 5�FR�fr�Fr�06�6� 6�SA�sa�Sa��";TEXT VAR tag:="",nr:="",komprpar:="", +lehrerliste:="",orteliste:="",aufslehrerliste:="",schhj,schj,hjsjanhang:="", +eintragtag,eintragnr,eintragname;INT VAR i,j,fstat,stdvor,stdnach,rowindex:=1 +,anzaufsorte:=0,hjkennalt:=-1,hjkennneu:=0,anzaufs:=0;BOOL VAR +aenderungsfehler:=FALSE ,stundenplannichtda:=TRUE ,zuvieleorte:=FALSE ; +WINDOW VAR w:=startwindow(27,23,77,1);TEXT VAR liste,aktpar,lvvor,lvnach, +raumvor,raumnach,paraphenvorstd:="",paraphennachstd:="",lvvorstd:="", +lvnachstd:="",raeumevorstd:="",raeumenachstd:="";PROC +aufsichtsplandatenbearbeiten:standardmeldung(meldungwarten," "); +pruefeingabedaten;holedaten;aufsichtsplandatenzeigen.pruefeingabedaten: +prueftag;pruefnr.prueftag:tag:=standardmaskenfeld(feldeingtag);i:=pos( +alletage,trenner+tag+trenner);IF i=0THEN return(1);infeld(feldeingtag); +standardmeldung(meldungfalschertag,"");LEAVE aufsichtsplandatenbearbeiten +ELSE IF tag=""THEN tag:="1"ELSE tag:=text(iDIV laengetagbeschr+1)FI FI . +pruefnr:nr:=standardmaskenfeld(feldeingnr);IF nr=""THEN nr:="01"ELSE i:=int( +nr);IF i<1COR i>15THEN return(1);infeld(feldeingnr);standardmeldung( +meldungfalscherwert,"");LEAVE aufsichtsplandatenbearbeitenELSE nr:="0"+text(i +);nr:=subtext(nr,length(nr)-1);FI ;FI .holedaten:IF akthj<>""THEN hjkennneu:= +0ELSE hjkennneu:=1FI ;IF hjkennneu<>hjkennaltTHEN hjkennalt:=hjkennneu;schj:= +schulkenndatum(schuljahr);schhj:=schulkenndatum(halbjahr);IF hjkennneu=1THEN +geplanteshjundsjberechnen(schhj,schj)FI ;stundenplanhalbjahrsetzen(schhj,schj +);hjsjanhang:=schhj+". "+text(schj,2)+"/"+subtext(schj,3);FI ;IF records( +dnraufsichtszeiten)=0.0THEN fehlermeldungkeineaufszeitenFI ;IF orteliste="" +THEN holeorteFI ;holestartzeit;holeparaphenzurstartzeit.akthj: +standardmaskenfeld(feldeingakthj).fehlermeldungkeineaufszeiten:return(1); +infeld(feldeingnr);standardmeldung(meldungkeinedaten,"");LEAVE +aufsichtsplandatenbearbeiten.holeorte:IF records(dnrschluessel)=0.0THEN +fehlermeldungkeineorteELSE zuvieleorte:=FALSE ;inittupel(dnrschluessel); +statleseschleife(dnrschluessel,bestandorte,"",dnrschluessel+1,dnrschluessel+2 +,PROC erstelleorteliste);IF orteliste=""THEN fehlermeldungkeineorteELIF +anzaufsorte>maxanzorteTHEN orteliste:=text(orteliste,maxanzorte*laengeaufsort +);anzaufsorte:=maxanzorte;zuvieleorte:=TRUE FI FI .fehlermeldungkeineorte: +return(1);infeld(feldeingtag);standardmeldung(meldungkeineorte,"");LEAVE +aufsichtsplandatenbearbeiten.holestartzeit:inittupel(dnraufsichtszeiten); +putwert(fnrazsj,schj);putwert(fnrazhj,schhj);putwert(fnrazaufsichtszeit,tag+ +nr);search(dnraufsichtszeiten,TRUE );IF dbstatus<>0THEN +fehlermeldungkeineaufszeitenELSE eintragtag:=tagesangabe(tag);eintragnr:=text +(int(nr),2);eintragname:=wert(fnrazbezeichnung);stdvor:=intwert( +fnraztagstdvor);stdnach:=intwert(fnraztagstdnach)FI .holeparaphenzurstartzeit +:IF records(dnraufsichtsplan)=0.0THEN LEAVE holeparaphenzurstartzeitELSE +inittupel(dnraufsichtsplan);aufslehrerliste:="";putwert(fnrapaufsichtszeit, +tag+nr);statleseschleife(dnraufsichtsplan,schj,schhj,fnrapsj,fnraphj,PROC +parderaufsicht)FI .END PROC aufsichtsplandatenbearbeiten;PROC +aufsichtsplandatenzeigen:standardstartproc(bearbmaske); +standardkopfmaskeaktualisieren("Aufsichtsplan erstellen für "+hjsjanhang); +fuellemaske;standardnprocEND PROC aufsichtsplandatenzeigen;PROC fuellemaske: +INT VAR aktpos,aktfeld;TEXT VAR ort,paraphe;infeld(1);standardmaskenfeld( +eintragtag,feldbearbtag);standardmaskenfeld(eintragnr,feldbearbnr); +standardmaskenfeld(eintragname,feldbearbname);gibaufsorteaus; +standardfelderausgeben;infeld(feldbearbpar1);liste:="";aenderungsfehler:= +FALSE ;IF zuvieleorteTHEN standardmeldung(meldungzuvieleorte,"");zuvieleorte +:=FALSE FI .gibaufsorteaus:aktpos:=1;rowindex:=1;aktfeld:=feldbearbort1; +WHILE aktpos<length(orteliste)REP ort:=subtext(orteliste,aktpos,aktpos+ +laengeaufsort-1);paraphe:=holeaufsicht(ort);datenausplan(rowindex):=paraphe; +standardmaskenfeld(ort,aktfeld);standardmaskenfeld(paraphe,aktfeld+1); +rowindexINCR 1;aktposINCR laengeaufsort;aktfeldINCR 2PER ;FOR iFROM aktfeld +UPTO letztesbearbfeldREP standardmaskenfeld(leerereintrag,i);IF iMOD 2=0THEN +feldschutz(i)FI PER .END PROC fuellemaske;TEXT PROC holeaufsicht(TEXT CONST +ort):INT VAR aktpos;aktpos:=pos(aufslehrerliste,trenner+trenner+ort+trenner); +IF aktpos>0THEN subtext(aufslehrerliste,aktpos+7,pos(aufslehrerliste,trenner, +aktpos+7)-1)ELSE ""FI END PROC holeaufsicht;PROC aufsichtsplandatenspeichern( +BOOL CONST speichern):TEXT VAR zeit,eintragort,eintragpar,weiterereintragpar; +INT VAR aktfeld:=5,feld;aenderungsfehler:=FALSE ;IF speichernTHEN +aenderungenspeichernELSE standardmeldung(meldungnichtsp,"")FI ;IF +aenderungsfehlerTHEN fehlermeldungspfehlerFI ;naechstezeit. +aenderungenspeichern:standardmeldung(meldungplausi,"");aenderungsfehler:= +FALSE ;aktfeld:=5;FOR iFROM 1UPTO anzaufsorteREP eintragpar:= +standardmaskenfeld(aktfeld+1);IF eintragpar<>""THEN IF NOT +bezeichnungzulaessig("P",eintragpar)THEN fehlermeldungfalscheparapheELIF +eintragpar<>datenausplan(i)THEN pruefanderebseintraegeFI FI ;aktfeldINCR 2 +PER ;standardmeldung(meldungspeichern,"");aktfeld:=5;FOR iFROM 1UPTO +anzaufsorteREP eintragort:=standardmaskenfeld(aktfeld);eintragpar:= +standardmaskenfeld(aktfeld+1);IF datenausplan(i)<>eintragparTHEN +speicheraenderungenFI ;aktfeldINCR 2PER .pruefanderebseintraege:feld:=6;FOR j +FROM 1UPTO anzaufsorteREP IF feld<>aktfeld+1THEN weiterereintragpar:= +standardmaskenfeld(feld);IF eintragpar=weiterereintragparTHEN +fehlermeldungparaphedoppeltFI ;FI ;feldINCR 2PER .fehlermeldungparaphedoppelt +:standardmeldung(meldungschonaufs,eintragpar+ausgparam+standardmaskenfeld( +feld-1)+ausgparam);infeld(aktfeld+1);return(1);LEAVE +aufsichtsplandatenspeichern.fehlermeldungfalscheparaphe:standardmeldung( +meldungfalschepar,eintragpar+ausgparam);infeld(aktfeld+1);return(1);LEAVE +aufsichtsplandatenspeichern.fehlermeldungspfehler:standardmeldung( +meldungspfehler,"");infeld(feldbearbpar1);return(1);LEAVE +aufsichtsplandatenspeichern.speicheraenderungen:IF datenausplan(i)=""CAND +eintragpar<>""THEN insertsatzELIF datenausplan(i)<>""CAND eintragpar=""THEN +deletesatzELSE updatesatzFI .insertsatz:inittupel(dnraufsichtsplan);putwert( +fnrapsj,schj);putwert(fnraphj,schhj);putwert(fnrapaufsichtszeit,tag+nr); +putwert(fnrapaufsichtsort,compress(eintragort));putwert(fnrapparaphe, +eintragpar);insert(dnraufsichtsplan);IF dbstatus<>okTHEN aenderungsfehler:= +TRUE FI .updatesatz:inittupel(dnraufsichtsplan);putwert(fnrapsj,schj);putwert +(fnraphj,schhj);putwert(fnrapaufsichtszeit,tag+nr);putwert(fnrapaufsichtsort, +compress(eintragort));putwert(fnrapparaphe,datenausplan(i));search( +dnraufsichtsplan,TRUE );IF dbstatus=okTHEN putwert(fnrapparaphe,eintragpar); +update(dnraufsichtsplan);IF dbstatus<>okTHEN aenderungsfehler:=TRUE FI ELSE +aenderungsfehler:=TRUE FI .deletesatz:inittupel(dnraufsichtsplan);putwert( +fnrapsj,schj);putwert(fnraphj,schhj);putwert(fnrapaufsichtszeit,tag+nr); +putwert(fnrapaufsichtsort,compress(eintragort));putwert(fnrapparaphe, +datenausplan(i));search(dnraufsichtsplan,TRUE );IF dbstatus=okTHEN delete( +dnraufsichtsplan);IF dbstatus<>okTHEN aenderungsfehler:=TRUE FI ELSE +aenderungsfehler:=TRUE FI .naechstezeit:succ(dnraufsichtszeiten);IF wert( +fnrazsj)<>schjCOR wert(fnrazhj)<>schhjCOR dbstatus<>0THEN verlasseanwendung +ELSE zeit:=wert(fnrazaufsichtszeit);tag:=text(zeit,1);nr:=subtext(zeit,2); +eintragtag:=tagesangabe(tag);eintragnr:=text(int(nr),2);eintragname:=wert( +fnrazbezeichnung);stdvor:=intwert(fnraztagstdvor);stdnach:=intwert( +fnraztagstdnach);inittupel(dnraufsichtsplan);aufslehrerliste:="";putwert( +fnrapaufsichtszeit,zeit);statleseschleife(dnraufsichtsplan,schj,schhj,fnrapsj +,fnraphj,PROC parderaufsicht);fuellemaske;return(1)FI .verlasseanwendung: +enter(2).END PROC aufsichtsplandatenspeichern;PROC +aufsichtsplanlehrerlistezeigen:INT VAR parpos,anfpos,aktfeld:=infeld; +standardmeldung(meldunglisteerstellen,"");IF liste=""THEN IF lehrerliste="" +THEN holelehrerFI ;IF stundenplannichtdaTHEN +stundenplanbasisundstundenplanholen(fstat);IF fstat<>0CAND fstat<>8THEN +meldungausgeben(fstat);return(1);LEAVE aufsichtsplanlehrerlistezeigenELSE +stundenplannichtda:=FALSE FI ;FI ;IF stdvor<>0THEN paraphenvorstd:= +datenderzeit(stdvor,kennungparaphe);lvvorstd:=datenderzeit(stdvor,kennunglv); +raeumevorstd:=datenderzeit(stdvor,kennungraum)ELSE paraphenvorstd:=""; +lvvorstd:="";raeumevorstd:="";FI ;IF stdnach<>0THEN paraphennachstd:= +datenderzeit(stdnach,kennungparaphe);lvnachstd:=datenderzeit(stdnach, +kennunglv);raeumenachstd:=datenderzeit(stdnach,kennungraum)ELSE +paraphennachstd:="";lvnachstd:="";raeumenachstd:=""FI ;fuelleliste;FI ;IF +menuedraussenTHEN reorganizescreenFI ;infeld(1);standardfelderausgeben;open(w +);auskunfterteilung(liste,w,FALSE );reorganizescreen;setlasteditvalues;infeld +(aktfeld);return(1).fuelleliste:listeCAT "Aufsicht möglich durch:";listeCAT +auskunftstextende;listeCAT "Paraphe Anz. Unterr. vorher Unterr. nachher"; +listeCAT auskunftstextende;FOR iFROM 1UPTO length(lehrerliste)DIV +laengeparapheREP lvvor:="";lvnach:="";raumvor:="";raumnach:="";aktpar:= +subtext(lehrerliste,(i-1)*laengeparaphe+1,i*laengeparaphe);parpos:=suchpos( +paraphenvorstd,aktpar,laengeparaphe);IF parpos>0THEN anfpos:=(parpos-1)*2; +lvvor:=subtext(lvvorstd,anfpos+1,anfpos+8);raumvor:=subtext(raeumevorstd, +parpos,parpos+laengeraumminus)FI ;parpos:=suchpos(paraphennachstd,aktpar, +laengeparaphe);IF parpos>0THEN anfpos:=(parpos-1)*2;lvnach:=subtext(lvnachstd +,anfpos+1,anfpos+8);raumnach:=subtext(raeumenachstd,parpos,parpos+ +laengeraumminus)FI ;IF lvvor<>""COR lvnach<>""THEN schreiblisteneintragFI ; +PER ;listeCAT "*";listeCAT auskunftstextende.holelehrer:IF records(dnrlehrer) +=0.0THEN fehlermeldungkeinelehrerELSE inittupel(dnrlehrer);statleseschleife( +dnrlehrer,"","",fnrlparaphe,fnrlfamname,PROC erstellelehrerliste)FI . +fehlermeldungkeinelehrer:return(1);infeld(feldeingtag);standardmeldung( +meldungkeinelehrer,"");LEAVE aufsichtsplanlehrerlistezeigen.END PROC +aufsichtsplanlehrerlistezeigen;PROC schreiblisteneintrag:standardmeldung( +meldungbearbwird,aktpar+ausgparam);listeCAT text(aktpar,8);komprpar:=compress +(aktpar);listeCAT text(aufsichtenderparaphe,2);IF lvvor=""THEN listeCAT +" ";ELSE listeCAT " ";listeCAT text(lvvor,2);listeCAT " "; +listeCAT subtext(lvvor,3,4);listeCAT " ";listeCAT subtext(lvvor,5);listeCAT +"/";listeCAT raumvorFI ;IF lvnach=""THEN listeCAT " ";ELSE +listeCAT " ";listeCAT text(lvnach,2);listeCAT " ";listeCAT subtext(lvnach,3,4 +);listeCAT " ";listeCAT subtext(lvnach,5);listeCAT "/";listeCAT raumnachFI ; +listeCAT auskunftstextende.END PROC schreiblisteneintrag;INT PROC +aufsichtenderparaphe:inittupel(dnraufsichtsplan);anzaufs:=0;statleseschleife( +ixappar,komprpar,"",fnrapparaphe,fnrapsj,PROC anzaufsichtenzaehlen);anzaufs +END PROC aufsichtenderparaphe;PROC anzaufsichtenzaehlen(BOOL VAR b):IF +dbstatus<>okCOR wert(fnrapparaphe)>komprparTHEN dbstatus(1);b:=TRUE ELIF wert +(fnrapsj)=schjCAND wert(fnraphj)=schhjTHEN anzaufsINCR 1FI END PROC +anzaufsichtenzaehlen;INT PROC suchpos(TEXT CONST quelle,muster,INT CONST +musterlaenge):INT VAR suchab:=1,aktpos;IF quelle<>""THEN WHILE pos(quelle, +muster,suchab)>0REP aktpos:=pos(quelle,muster,suchab);IF aktposMOD +musterlaenge=1THEN LEAVE suchposWITH aktposELSE suchab:=aktpos+1FI ;PER ;FI ; +0END PROC suchpos;PROC erstellelehrerliste(BOOL VAR b):IF dbstatus<>0THEN b:= +TRUE ELSE lehrerlisteCAT text(wert(fnrlparaphe),laengeparaphe)FI END PROC +erstellelehrerliste;PROC erstelleorteliste(BOOL VAR b):IF wert(dnrschluessel+ +1)>bestandorteCOR dbstatus<>0THEN b:=TRUE ELSE ortelisteCAT text(wert( +dnrschluessel+2),laengeaufsort);anzaufsorteINCR 1FI END PROC +erstelleorteliste;PROC parderaufsicht(BOOL VAR b):IF wert(fnrapsj)<>schjCOR +wert(fnraphj)<>schhjCOR wert(fnrapaufsichtszeit)<>tag+nrCOR dbstatus<>0THEN +dbstatus(1);b:=TRUE ELSE aufslehrerlisteCAT trenner;aufslehrerlisteCAT +trenner;aufslehrerlisteCAT text(wert(fnrapaufsichtsort),laengeaufsort); +aufslehrerlisteCAT trenner;aufslehrerlisteCAT wert(fnrapparaphe); +aufslehrerlisteCAT trennerFI END PROC parderaufsicht;TEXT PROC tagesangabe( +TEXT CONST tag):IF tag="1"THEN "Mo"ELIF tag="2"THEN "Di"ELIF tag="3"THEN "Mi" +ELIF tag="4"THEN "Do"ELIF tag="5"THEN "Fr"ELSE "Sa"FI END PROC tagesangabe; +PROC meldungausgeben(INT VAR fstat):IF fstat=2THEN standardmeldung( +meldungserverfehler,"");ELIF fstat=3THEN standardmeldung(meldungkeinstdplan, +"");ELIF fstat=4THEN standardmeldung(meldungkeinesugruppen,"");ELIF fstat=5 +THEN standardmeldung(meldungzuvielesugruppen,"")ELIF fstat=6THEN +standardmeldung(meldungkeinelv,"")ELIF fstat=7THEN standardmeldung( +meldungzuvielelv,"")ELIF fstat=9THEN standardmeldung(meldungbasisinkon,""); +FI END PROC meldungausgeben;END PACKET aufsichtenerstellen + diff --git a/app/schulis/2.2.1/src/4.daten für intega aufbereiten b/app/schulis/2.2.1/src/4.daten für intega aufbereiten new file mode 100644 index 0000000..008e89e --- /dev/null +++ b/app/schulis/2.2.1/src/4.daten für intega aufbereiten @@ -0,0 +1,462 @@ +PACKET datenfuerintegaaufbereitenDEFINES integastdvproc,integaarchiv, +integaabfrage,integaaufbereitenoderabfrage,integaentfernen,integaposhalt, +integaloescheundreturn,integadatenzeigen,integadatendrucken, +schulisintegatransfer:LET raumkenndaten="c02 raeume",schulkenndaten= +"c02 schulkenndaten",schulhj="Schulhalbjahr",schulj="Schuljahr",schulname= +"Schulname",schulort="Schulort",schulstr="Schulstraße",eingmaske= +"ms eing integaeingabedatei",fldakthj=2,fldfix1=3,fldfix2=4,fldinteganame=5, +meldg0=69,meldg1=340,meldg2=323,meldg3=324,meldg4=331,meldg5=332,meldg6=333, +meldg7=334,meldg8=335,meldg9=336,meldg10=337,meldg11=338,meldg13=343,meldg14= +345,meldg15=346,meldg16=347,meldg17=348,meldg18=349,meldg19=350,meldg20=351, +meldg21=381,meldg22=56,meldg23=58,meldungbearbwird=352,meldungserverfehler= +376,meldungkeinstdplan=366,meldungkeinesugruppen=334,meldungzuvielesugruppen= +356,meldungkeinelv=326,meldungzuvielelv=358,meldungbasisinkon=378, +meldungstdplauswvorber=384,zeilenende="",erstestde=1,maxstden=66,vormstden=6, +nachmstden=6,stdenprotag=12,vorm=6,nachm=5,unttage=6,eumelgrenzemaxzeilen= +4000,ausgparam="#",trenner="�";LET filemodus="file ibm",leererunbestwunsch= +" ",dateikennung=".DP",dos="DOS",kennpar="P",kennsugrup="S",kennraum= +"R",kennkoppl="K",kennfach="F",listenname= +"Liste der Dateien auf der Diskette:";DATASPACE VAR dszeitw,dslverf,dskverf; +FILE VAR f,g,z,k,l;INT VAR p,i,j,h,fstat,zz:=0,ruecksprung:=1,maxvs:=0,maxns +:=0,vs:=vormstden,ns:=nachmstden,nulltestd:=0,vm:=vorm,objvm,nm:=nachm,objnm, +ut:=unttage,objut,jahrende;TEXT VAR sgrdaten:="",sgridaten:="",klgr:=trenner, +klgrdaten:="",rgrdaten:=trenner,letztepar:="",par:="",objektverf:="", +lehrerdaten,bearbkopplungen,kartenart,zeitwuensche:=trenner, +schulverfuegbarkeit:="",dateiname:="SCHULIS.DP",schuldaten:="",zeile:="", +aktschj:="0",aktschhj:="0",geplschj:="0",geplschhj:="0",schj,schhj,record:="" +,t1:="",t2:="",zeitdaten:="";BOOL VAR datenfehler,fehler,mindeinraum, +archivfehler,falschesugrupgefunden:=FALSE ,abbruchwegen4000zeilen:=FALSE ; +THESAURUS VAR thes;TEXT VAR t:="",leererbestwunsch:= +" "+ +" ",bestwunsch, +unbestwunsch;PROC integaposhalt(INT CONST rueck):infeld(fldakthj);return( +rueck)END PROC integaposhalt;PROC loeschemeldung:INT VAR ankreuzung:=1;FOR i +FROM fldakthjUPTO fldfix2REP IF standardmaskenfeld(i)<>""THEN ankreuzung:= +ankreuzung*(2*i-1)FI PER ;standardstartproc(eingmaske);infeld(fldakthj);FOR i +FROM fldakthjUPTO fldfix2REP IF ankreuzungMOD (2*i-1)=0THEN +standardmaskenfeld("x",i)FI PER ;standardmaskenfeld(text(dateiname,pos( +dateiname,".")-1),fldinteganame);standardfelderausgeben;infeld(fldakthj);END +PROC loeschemeldung;PROC archivanmelden:archivfehler:=FALSE ;commanddialogue( +FALSE );disablestop;dateiname:=standardmaskenfeld(fldinteganame)+".DP";IF +standardmaskenfeld(fldinteganame)=""THEN fehlermeldungnamefalschELIF +falschercode(dateiname)THEN fehlermeldungnamefalschFI ;reserve(filemodus,/dos +);IF iserrorTHEN archivfehler:=TRUE ;abbruchnachfehler(1);LEAVE +archivanmeldenFI ;enablestop.fehlermeldungnamefalsch:archivfehler:=TRUE ; +return(ruecksprung);infeld(fldinteganame);standardmeldung(meldg2,subtext( +dateiname,i,i)+"#"+dateiname+"#");LEAVE archivanmelden.END PROC +archivanmelden;PROC integaarchiv(INT CONST wahl):SELECT wahlOF CASE 1: +archivinitialisierenCASE 2:archivanmelden;IF archivfehlerTHEN LEAVE +integaarchivFI ;archivlistenCASE 3:archivbeschreibenCASE 4: +archivueberschreibenEND SELECT .archivinitialisieren:standardmeldung(meldg0, +" ");disablestop;clear(/dos);IF iserrorTHEN abbruchnachfehler(2);LEAVE +integaarchivFI ;enablestop;loeschemeldung;return(2).archivlisten: +standardmeldung(meldg0," ");disablestop;g:=sequentialfile(output,listenname); +thes:=ALL /dos;IF iserrorTHEN abbruchnachfehler(1);LEAVE integaarchivFI ; +thesaurusaufbereiten;enablestop;zeigedatei(listenname,"vr"). +thesaurusaufbereiten:t:=" ";i:=0;REP get(thes,t,i);putline(g,t)UNTIL t=""PER +.archivbeschreiben:standardmeldung(meldg0," ");disablestop;IF exists( +dateiname,/dos)THEN IF iserrorTHEN abbruchnachfehler(2);LEAVE integaarchiv +ELSE abfragedateiueberschreibenFI ELSE save(dateiname,/dos);IF iserrorTHEN +abbruchnachfehler(2);LEAVE integaarchivFI ;enablestop;commanddialogue(TRUE ); +loeschemeldung;return(2);FI .abfragedateiueberschreiben:infeld(1); +standardmeldung(meldg19,dateiname+"#");standardnproc.archivueberschreiben: +standardmeldung(meldg0," ");disablestop;commanddialogue(FALSE );erase( +dateiname,/dos);IF iserrorTHEN abbruchnachfehler(3);LEAVE integaarchivFI ; +save(dateiname,/dos);IF iserrorTHEN abbruchnachfehler(3);LEAVE integaarchiv +FI ;enablestop;commanddialogue(TRUE );loeschemeldung;return(3).END PROC +integaarchiv;PROC integaloescheundreturn(BOOL CONST b):IF bTHEN forget( +listenname,quiet);FI ;loeschemeldung;return(2)END PROC integaloescheundreturn +;PROC abbruchnachfehler(INT CONST schritte):standardmeldung(meldg13, +"Fehler: "+errormessage+" !#");clearerror;infeld(fldakthj);return(schritte); +release(/dos);commanddialogue(TRUE );enablestopEND PROC abbruchnachfehler; +PROC integaabfrage(INT CONST wahl):SELECT wahlOF CASE 1:archivanmelden;IF +archivfehlerTHEN LEAVE integaabfrageFI ;standardmeldung(meldg16,"")CASE 2: +archivanmelden;IF archivfehlerTHEN LEAVE integaabfrageFI ;standardmeldung( +meldg17,"")CASE 3:fragevorbereiten;standardmeldung(meldg18,dateiname+"#"+text +(t2,8)+"#")END SELECT ;infeld(1);standardnproc.fragevorbereiten:dateiname:= +standardmaskenfeld(fldinteganame)+".DP";IF standardmaskenfeld(fldinteganame)= +""THEN fehlermeldungnamefalschELIF falschercode(dateiname)THEN +fehlermeldungnamefalschFI ;IF exists(dateiname)THEN beginlist;REP +getlistentry(t1,t2);UNTIL t1=dateinameCOR t1=""PER ;ELSE return(1);infeld( +fldinteganame);standardmeldung(meldg20,dateiname+"#");LEAVE integaabfrageFI . +fehlermeldungnamefalsch:return(1);infeld(fldinteganame);standardmeldung( +meldg2,subtext(dateiname,i,i)+"#"+dateiname+"#");LEAVE integaabfrage.END +PROC integaabfrage;PROC integadatenzeigen:standardmeldung(meldg0," "); +dateiname:=standardmaskenfeld(fldinteganame)+".DP";IF standardmaskenfeld( +fldinteganame)=""THEN fehlermeldungnamefalschELIF falschercode(dateiname) +THEN fehlermeldungnamefalschFI ;IF exists(dateiname)THEN zeigedatenELSE +return(1);infeld(fldinteganame);standardmeldung(meldg20,dateiname+"#");LEAVE +integadatenzeigenFI .fehlermeldungnamefalsch:return(1);infeld(fldinteganame); +standardmeldung(meldg2,subtext(dateiname,i,i)+"#"+dateiname+"#");LEAVE +integadatenzeigen.zeigedaten:zeigedatei(dateiname,"vr").END PROC +integadatenzeigen;PROC integadatendrucken:dateiname:=standardmaskenfeld( +fldinteganame)+".DP";IF exists(dateiname)THEN standardmeldung(meldg23,""); +print(dateiname)ELSE infeld(fldinteganame);standardmeldung(meldg20,dateiname+ +"#");FI ;return(1).END PROC integadatendrucken;PROC integaentfernen:infeld( +fldinteganame);dateiname:=standardmaskenfeld(fldinteganame)+".DP";forget( +dateiname,quiet);infeld(fldakthj);return(2);END PROC integaentfernen;PROC +integastdvproc:standardstartproc(eingmaske);standardmaskenfeld("SCHULIS", +fldinteganame);standardfelderausgeben;infeld(fldakthj);standardnprocEND PROC +integastdvproc;PROC integaaufbereitenoderabfrage:beginlist;REP getlistentry( +t1,t2);IF pos(t1,dateikennung)>0THEN standardmeldung(meldg18,t1+"#"+text(t2,8 +)+"#");infeld(fldinteganame);standardnproc;ruecksprung:=2;LEAVE +integaaufbereitenoderabfrageFI ;UNTIL t1=""PER ;ruecksprung:=1; +schulisintegatransferEND PROC integaaufbereitenoderabfrage;PROC +schulisintegatransfer:falschesugrupgefunden:=FALSE ;standardmeldung(meldg0, +" ");forget(t1,quiet);init;pruefeeingmaske;stelledateinamefest; +stellehalbjahrfest;pruefobintegabezda;holestundenplandaten;melde("A"); +schreibeschulname;stellezeitvarfest;berechneschulverfuegbarkeit;melde("BA"); +schreibefragenkatalog;melde("BB");schreibegewichtungen;melde("BC"); +schreibezeitraster1;melde("BD");schreibezeitraster2;pruefdateigroesse; +holeallezeitwuensche;melde("C");schreibelehrerdaten;pruefdateigroesse;melde( +"D und F");schreibeklassen;pruefdateigroesse;melde("G");schreiberaumgruppen; +pruefdateigroesse;melde("H");schreibeuvdaten;pruefdateigroesse;melde("I"); +schreibeschulverfgbkt;pruefdateigroesse;melde("J");schreibelehrerverfgbkt; +pruefdateigroesse;melde("K");schreiberaumverfgbkt;pruefdateigroesse;melde("L" +);schreibeklassenverfgbkt;pruefdateigroesse;melde("M");schreibefachverfgbkt; +pruefdateigroesse;melde("N");schreibevorbelegungen;pruefdateigroesse; +gibfertigmeldungaus.pruefdateigroesse:IF zz>eumelgrenzemaxzeilenTHEN +standardmeldung(meldg14,"");return(ruecksprung);LEAVE schulisintegatransfer +FI .init:dszeitw:=nilspace;dslverf:=nilspace;dskverf:=nilspace;z:= +sequentialfile(modify,dszeitw);l:=sequentialfile(modify,dslverf);k:= +sequentialfile(modify,dskverf);insertrecord(z);insertrecord(l);insertrecord(k +);zz:=0.pruefeeingmaske:IF standardmaskenfeld(fldfix1)<>""CAND +standardmaskenfeld(fldfix2)<>""THEN return(ruecksprung);standardmeldung( +meldg22,"");infeld(fldfix1);LEAVE schulisintegatransferFI ;dateiname:= +standardmaskenfeld(fldinteganame)+".DP";IF standardmaskenfeld(fldinteganame)= +""THEN i:=0;fehlermeldungnamefalschELIF falschercode(dateiname)THEN +fehlermeldungnamefalschFI .fehlermeldungnamefalsch:return(ruecksprung);infeld +(fldinteganame);standardmeldung(meldg2,subtext(dateiname,i,i)+"#"+dateiname+ +"#");LEAVE schulisintegatransfer.pruefobintegabezda:sgridaten:="";letztepar:= +"";inittupel(dnraktschuelergruppen);datenfehler:=FALSE ;dbleer( +dnraktschuelergruppen);IF fehlerTHEN fehlerkeineschuelergruppenFI ; +statleseschleife(dnraktschuelergruppen,schj,schhj,dnraktschuelergruppen+1, +dnraktschuelergruppen+2,PROC sgridatenholen);IF datenfehlerTHEN +fehlermeldungintegaELSE sgridatenCAT trennerFI .fehlerkeineschuelergruppen: +return(ruecksprung);standardmeldung(meldg7,"");LEAVE schulisintegatransfer. +fehlermeldungintega:return(ruecksprung);standardmeldung(meldg4,"");LEAVE +schulisintegatransfer.stelledateinamefest:f:=sequentialfile(output,dateiname) +.stellehalbjahrfest:holeschuldaten;aktschhj:=holedatum(schuldaten,trenner+ +schulhj+trenner);aktschj:=holedatum(schuldaten,trenner+schulj+trenner);IF +aktschhj="1"THEN geplschhj:="2";geplschj:=aktschjELSE geplschhj:="1";geplschj +:=subtext(aktschj,3);jahrende:=int(geplschj)+1;geplschjCAT subtext("0"+text( +jahrende),LENGTH ("0"+text(jahrende))-1)FI ;IF standardmaskenfeld(fldakthj)<> +""THEN schj:=aktschj;schhj:=aktschhjELSE schj:=geplschj;schhj:=geplschhjFI . +holeschuldaten:dbleer(dnrschluessel);IF fehlerTHEN fehlerkeineschuldatenFI ; +schuldaten:=trenner;inittupel(dnrschluessel);statleseschleife(dnrschluessel, +schulkenndaten,"",dnrschluessel+1,dnrschluessel+2,PROC schulkennung). +fehlerkeineschuldaten:return(ruecksprung);standardmeldung(meldg8,"");LEAVE +schulisintegatransfer.holestundenplandaten:standardmeldung( +meldungstdplauswvorber,"");stundenplanhalbjahrsetzen(schhj,schj); +stundenplanbasisundstundenplanholen(fstat);IF fstat<>0CAND fstat<>8THEN +meldungausgeben(fstat);return(ruecksprung);LEAVE schulisintegatransferFI . +stellezeitvarfest:holezeitdaten;IF zeitdaten=trennerTHEN LEAVE +stellezeitvarfestELSE stelleunttagefestFI .holezeitdaten:zeitdaten:=trenner; +dbleer(dnrzeitraster);IF fehlerTHEN fehlerkeinezeitdatenFI ;inittupel( +dnrzeitraster);statleseschleife(dnrzeitraster,schj,schhj,dnrzeitraster+1, +dnrzeitraster+2,PROC zeitrasterdaten).fehlerkeinezeitdaten:return(ruecksprung +);standardmeldung(meldg9,"");LEAVE schulisintegatransfer.stelleunttagefest: +INT VAR akttagv:=0,akttagn:=0;vm:=0;nm:=0;ut:=0;FOR iFROM 1UPTO unttageREP vs +:=0;ns:=0;nulltestd:=(i-1)*stdenprotag;IF pos(zeitdaten,trenner+text( +nulltestd+1)+trenner)>0THEN utINCR 1;stellestdenfestELSE LEAVE +stelleunttagefestFI PER .stellestdenfest:FOR jFROM 1UPTO stdenprotagREP IF +pos(zeitdaten,trenner+text(nulltestd+j)+trenner)>0THEN holedrittesdatum( +zeitdaten,trenner+text(nulltestd+j)+trenner);zaehlevunstden;IF akttagv<>i +CAND t1="v"THEN vmINCR 1;akttagv:=iFI ;IF akttagn<>iCAND t1="n"THEN nmINCR 1; +akttagn:=iFI ;ELSE LEAVE stellestdenfestFI ;PER ;IF maxvs<vsTHEN maxvs:=vsFI +;IF maxns<nsTHEN maxns:=nsFI .zaehlevunstden:IF t1="v"THEN vsINCR 1ELIF t1= +"n"THEN nsINCR 1FI .schreibeschulname:zeile:="";zeileCAT holedatum(schuldaten +,trenner+schulname+trenner);zeileCAT " "+holedatum(schuldaten,trenner+ +schulort+trenner);zeileCAT " "+holedatum(schuldaten,trenner+schulstr+trenner +);zeile:=text(zeile,70);zeileCAT "A ";zeileCAT zeilenende;putlinezz(f,zeile); +zeile:=schhj+". Hj.";zeileCAT " "+text(schj,2)+"/"+subtext(schj,3);zeile:= +text(zeile,70);zeileCAT "A ";zeileCAT zeilenende;putlinezz(f,zeile). +berechneschulverfuegbarkeit:schulverfuegbarkeit:="";FOR iFROM 1UPTO unttage +REP FOR jFROM 1UPTO stdenprotagREP IF pos(zeitdaten,trenner+text((i-1)* +stdenprotag+j)+trenner)>0THEN holedrittesdatum(zeitdaten,trenner+text((i-1)* +stdenprotag+j)+trenner);IF t1="x"THEN schulverfuegbarkeitCAT "1"ELSE +schulverfuegbarkeitCAT " "FI ELSE schulverfuegbarkeitCAT " "FI PER PER ; +schulverfuegbarkeit:=text(schulverfuegbarkeit,maxstden).schreibeschulverfgbkt +:putlinezz(f," "+schulverfuegbarkeit+"I"+zeilenende).schreibefragenkatalog +:vs:=maxvs;ns:=maxns;zeile:="";zeileCAT "FRAGEN ";zeileCAT " N N N 0";IF vs +<10THEN zeileCAT " "+text(vs)ELSE zeileCAT text(vs)FI ;zeileCAT +" 0 312 3100 0 ";zeileCAT text(ut);zeileCAT +"253146 BA";zeileCAT zeilenende;putlinezz(f,zeile +).schreibegewichtungen:zeile:="";zeileCAT "GEWICHT ";zeileCAT +" 2 2 2 2 2 2 2 2 2 2 2 0";zeileCAT " "; +zeileCAT "BB";zeileCAT zeilenende;putlinezz(f,zeile).schreibezeitraster1:IF +zeitdaten=""THEN LEAVE schreibezeitraster1FI ;zeile:="";zeileCAT "RASTERR"; +zeileCAT " 1 1";IF vs<10THEN zeileCAT " "+text(vs)ELSE zeileCAT text(vs)FI ; +zeileCAT " ";zeile +CAT "BC";zeileCAT zeilenende;putlinezz(f,zeile);zeile:="";zeileCAT "RASTERR"; +zeileCAT " 2 1";IF vs<11THEN zeileCAT " "+text(vs-1)ELSE zeileCAT text(vs-1) +FI ;zeileCAT " "; +zeileCAT "BC";zeileCAT zeilenende;putlinezz(f,zeile);zeile:="";zeileCAT +"RASTERB";IF vs<6THEN zeileCAT " 2 1 3 ";ELIF vs<8THEN zeile +CAT " 2 1 3 5 ";ELIF vs<10THEN zeileCAT +" 2 1 3 5 7 ";ELIF vs<12THEN zeileCAT " 2 1 3 5 7 9 " +;ELSE zeileCAT " 2 1 3 5 7 911 ";FI ;zeileCAT +" ";zeileCAT "BC";zeileCAT zeilenende; +putlinezz(f,zeile).schreibezeitraster2:IF zeitdaten=""THEN LEAVE +schreibezeitraster2FI ;FOR iFROM 1UPTO 12REP hole2daten(zeitdaten,trenner+ +text(i)+trenner);IF t1<>""COR t1<>" "THEN IF i<10THEN +zeitrasterzeilenerstellen(" "+text(i),t1,t2);ELSE zeitrasterzeilenerstellen( +text(i),t1,t2);FI ;FI ;PER .holeallezeitwuensche:dbleer(dnrzeitwuensche);IF +NOT fehlerTHEN inittupel(dnrzeitwuensche);statleseschleife(dnrzeitwuensche, +schj,schhj,dnrzeitwuensche+1,dnrzeitwuensche+2,PROC zeitw)FI . +schreibelehrerdaten:inittupel(dnrlehrer);fehler:=FALSE ;dbleer(dnrlehrer);IF +fehlerTHEN fehlerkeinelehrerFI ;fehler:=FALSE ;statleseschleife(dnrlehrer,"", +"",dnrlehrer+1,dnrlehrer+2,PROC lehrer);IF fehlerTHEN return(ruecksprung); +standardmeldung(meldg3,"");LEAVE schulisintegatransferFI .fehlerkeinelehrer: +return(ruecksprung);standardmeldung(meldg10,"");LEAVE schulisintegatransfer. +schreibeklassen:sgrdaten:="";klgrdaten:="";inittupel(dnraktschuelergruppen); +statleseschleife(dnraktschuelergruppen,schj,schhj,dnraktschuelergruppen+1, +dnraktschuelergruppen+2,PROC sgrdatenholen);dbleer(dnrklassengruppen);IF NOT +fehlerTHEN inittupel(dnrklassengruppen);statleseschleife(dnrklassengruppen,"" +,"",dnrklassengruppen+1,dnrklassengruppen+2,PROC klgrdatenholen);FI ;IF +sgrdaten<>""THEN schreibeklstELSE fehlermeldungaktschgrfehlenFI ;IF klgrdaten +<>""THEN schreibeklgrFI .fehlermeldungaktschgrfehlen:return(ruecksprung); +standardmeldung(meldg5,"");LEAVE schulisintegatransfer.schreibeklst:p:=1; +WHILE pos(sgrdaten,trenner,p+1)>0REP spput(subtext(sgrdaten,p+1,pos(sgrdaten, +trenner,p+1)-1));p:=pos(sgrdaten,trenner,p+1)PER ;spput(subtext(sgrdaten,p+1) +).schreibeklgr:p:=1;WHILE pos(klgrdaten,trenner,p+1)>0REP spiput(subtext( +klgrdaten,p+1,pos(klgrdaten,trenner,p+1)-1));IF falschesugrupgefundenTHEN +fehlerunbekanntesugrupgefundenFI ;putlinezz(f,text(t1,64)+" "+text(ut)+text( +vm)+text(nm)+" F"+zeilenende);p:=pos(klgrdaten,trenner,p+1)PER ;spiput( +subtext(klgrdaten,p+1));IF falschesugrupgefundenTHEN +fehlerunbekanntesugrupgefundenFI ;putlinezz(f,text(t1,64)+" "+text(ut)+text( +vm)+text(nm)+" F"+zeilenende).schreiberaumgruppen:schreibergrkarten; +schreiberkarten.schreibergrkarten:dbleer(dnrraumgruppen);IF NOT fehlerTHEN +zeile:="";inittupel(dnrraumgruppen);statleseschleife(dnrraumgruppen,"","", +dnrraumgruppen+1,dnrraumgruppen+2,PROC raumgr)FI .schreiberkarten:mindeinraum +:=FALSE ;fehler:=FALSE ;zeile:="";inittupel(dnrschluessel);statleseschleife( +dnrschluessel,raumkenndaten,"",dnrschluessel+1,dnrschluessel+2,PROC raum);IF +NOT mindeinraumTHEN return(ruecksprung);standardmeldung(meldg6,"");LEAVE +schulisintegatransferELIF zeile<>""THEN erstellrestraeumeFI . +erstellrestraeume:putlinezz(f,"REST"+text(zeile,64)+" G"+zeilenende);IF +length(zeile)>64THEN zeile:=subtext(zeile,65);h:=length(zeile)DIV 64;FOR i +FROM 1UPTO hREP schreibekartePER ;IF length(zeile)MOD 64>0THEN +schreibrestkarteFI FI .schreibekarte:putlinezz(f," "+subtext(zeile,(i-1)* +64+1,i*64)+" G"+zeilenende).schreibrestkarte:putlinezz(f," "+text(subtext +(zeile,h*64+1),64)+" G"+zeilenende).schreibeuvdaten:dbleer( +dnrlehrveranstaltungen);IF fehlerTHEN fehlerkeineuvFI ;inittupel( +dnrlehrveranstaltungen);statleseschleife(dnrlehrveranstaltungen,schj,schhj, +dnrlehrveranstaltungen+1,dnrlehrveranstaltungen+2,PROC lvschreiben);IF +falschesugrupgefundenTHEN fehlerunbekanntesugrupgefundenFI .fehlerkeineuv: +return(ruecksprung);standardmeldung(meldg11,"");LEAVE schulisintegatransfer. +fehlerunbekanntesugrupgefunden:return(ruecksprung);standardmeldung(meldg21, +par+ausgparam+letztepar+ausgparam);LEAVE schulisintegatransfer. +schreibelehrerverfgbkt:toline(l,1);col(l,1);WHILE NOT eof(l)REP readrecord(l, +record);putlinezz(f,record);down(l)PER .schreiberaumverfgbkt:dbleer( +dnrzeitwuensche);IF NOT fehlerTHEN schreibverfkarten(trenner+kennraum+trenner +)FI .schreibeklassenverfgbkt:toline(k,1);col(k,1);WHILE NOT eof(k)REP +readrecord(k,record);putlinezz(f,record);down(k)PER .schreibefachverfgbkt: +dbleer(dnrzeitwuensche);IF NOT fehlerTHEN schreibverfkarten(trenner+kennfach+ +trenner)FI .schreibevorbelegungen:IF standardmaskenfeld(fldfix2)<>""THEN +dbleer(dnrzeitwuensche);IF NOT fehlerTHEN schreibverfkarten(trenner+kennkoppl ++trenner)FI ELIF standardmaskenfeld(fldfix1)<>""THEN kartenart:="N"; +uebertragdatendesstundenplansFI .gibfertigmeldungaus:forget(dszeitw);forget( +dslverf);forget(dskverf);standardmeldung(meldg15,dateiname+"#"+text(zz)+"#"); +return(ruecksprung).END PROC schulisintegatransfer;PROC +uebertragdatendesstundenplans:TEXT VAR kopplungenderzeit:="",aktkopplung;INT +VAR aktpos;bearbkopplungen:="";FOR iFROM erstestdeUPTO maxstdenREP +standardmeldung(meldungbearbwird,integatagstd(i)+ausgparam);kopplungenderzeit +:=datenderzeit(i,kennkoppl);aktpos:=1;WHILE aktpos<length(kopplungenderzeit) +REP aktkopplung:=subtext(kopplungenderzeit,aktpos,aktpos+7);IF +nichtbearbeitet(aktkopplung)THEN schreibvorbelegung(aktkopplung,allezeitenvon +(kennkoppl,aktkopplung))FI ;aktposINCR 8PER ;pruefdateigroessePER . +pruefdateigroesse:IF zz>eumelgrenzemaxzeilenTHEN standardmeldung(meldg14,""); +return(ruecksprung);LEAVE uebertragdatendesstundenplansFI .END PROC +uebertragdatendesstundenplans;PROC schreibvorbelegung(TEXT CONST kopplung, +allezeiten):INT VAR suchpos:=1,aktpos:=0;TEXT VAR kartenanfang:=text(kopplung +,8),karte:="";kartenanfangCAT " ";WHILE pos(allezeiten,"1",suchpos)<>0REP +aktpos:=pos(allezeiten,"1",suchpos);IF aktpos>0THEN karteCAT integatagstd( +aktpos);suchpos:=aktpos+1FI ;IF length(karte)=40THEN schreibkarte; +kartenanfang:=" ";karte:=""FI PER ;IF length(karte)<>40THEN +schreibkarteFI .schreibkarte:objektverf:=kartenanfang+text(karte,61)+ +kartenart+zeilenende;putlinezz(f,objektverf).END PROC schreibvorbelegung; +BOOL PROC nichtbearbeitet(TEXT CONST kopplung):INT VAR aktpos,suchab:=1; +WHILE pos(bearbkopplungen,kopplung,suchab)<>0REP aktpos:=pos(bearbkopplungen, +kopplung,suchab);IF aktposMOD 8=1THEN LEAVE nichtbearbeitetWITH FALSE ELSE +suchab:=aktpos+1FI ;PER ;bearbkopplungenCAT kopplung;TRUE END PROC +nichtbearbeitet;PROC meldungausgeben(INT VAR fstat):IF fstat=2THEN +standardmeldung(meldungserverfehler,"");ELIF fstat=3THEN standardmeldung( +meldungkeinstdplan,"");ELIF fstat=4THEN standardmeldung(meldungkeinesugruppen +,"");ELIF fstat=5THEN standardmeldung(meldungzuvielesugruppen,"")ELIF fstat=6 +THEN standardmeldung(meldungkeinelv,"")ELIF fstat=7THEN standardmeldung( +meldungzuvielelv,"")ELIF fstat=9THEN standardmeldung(meldungbasisinkon,""); +FI END PROC meldungausgeben;PROC schreibverfkarten(TEXT CONST kennung):TEXT +VAR objekt:="";toline(z,1);col(z,1);REP col(z,col(z)+1);downety(z,kennung) +UNTIL eof(z)COR (col(z)=142)PER ;IF kennung=trenner+kennraum+trennerTHEN +kartenart:="K"ELIF kennung=trenner+kennfach+trennerTHEN kartenart:="M"ELSE +kartenart:="N"FI ;IF NOT eof(z)CAND (kartenart<>"N")THEN REP readrecord(z, +record);IF pos(record,kennung)<>142THEN LEAVE schreibverfkartenFI ;bestwunsch +:=subtext(record,10,141);objekt:=holedatum(record,kennung); +uebertragbestwunschinverfkarte(objektverf);objektverf:=text(objekt,4)+ +objektverf+kartenart+zeilenende;putlinezz(f,objektverf);down(z)PER ELIF NOT +eof(z)THEN REP readrecord(z,record);IF pos(record,kennung)<>142THEN LEAVE +schreibverfkartenFI ;bestwunsch:=subtext(record,10,141);IF bestwunsch<> +leererbestwunschTHEN objekt:=holedatum(record,kennung); +uebertragbestwunschinvorbelegung(objekt)FI ;down(z)PER FI .END PROC +schreibverfkarten;PROC uebertragbestwunschinvorbelegung(TEXT CONST kopplung): +INT VAR suchpos:=1,aktpos:=0;TEXT VAR kartenanfang:=text(kopplung,8),karte:= +"";kartenanfangCAT " ";WHILE pos(bestwunsch,"+3",suchpos)<>0REP aktpos:=pos( +bestwunsch,"+3",suchpos);IF aktpos>0THEN karteCAT integatagstd((aktpos+1)DIV +2);suchpos:=aktpos+1FI ;IF length(karte)=40THEN schreibkarte;kartenanfang:= +" ";karte:=""FI PER ;IF karte<>""THEN schreibkarteFI .schreibkarte: +objektverf:=kartenanfang+text(karte,61)+kartenart+zeilenende;putlinezz(f, +objektverf).END PROC uebertragbestwunschinvorbelegung;TEXT PROC integatagstd( +INT CONST intzeit):TEXT VAR std:="";INT VAR stdnr:=intzeit;std:=text((stdnr-1 +)MOD 12+1,2);SELECT (stdnr-1)DIV 12OF CASE 0:"MO"+stdCASE 1:"DI"+stdCASE 2: +"MI"+stdCASE 3:"DO"+stdCASE 4:"FR"+stdCASE 5:"SA"+stdOTHERWISE " "END +SELECT END PROC integatagstd;BOOL PROC falschercode(TEXT CONST t):INT VAR +zeichencode;FOR iFROM 1UPTO LENGTH t-3REP zeichencode:=code(tSUB i);IF NOT (( +zeichencode>=48AND zeichencode<=57)OR (zeichencode>=65AND zeichencode<=90)OR +(zeichencode>=97AND zeichencode<=122))THEN LEAVE falschercodeWITH TRUE FI +PER ;FALSE END PROC falschercode;PROC zeitrasterzeilenerstellen(TEXT CONST +std,zeitanfang,zeitende):zeile:="";zeileCAT "ZEIT ";zeileCAT std;zeileCAT +subtext(zeitanfang,LENGTH zeitanfang-3)+subtext(zeitende,LENGTH zeitende-3); +zeileCAT " ";zeile:=text( +zeile,70);zeileCAT "BB";zeileCAT zeilenende;putlinezz(f,zeile)END PROC +zeitrasterzeilenerstellen;PROC schulkennung(BOOL VAR b):IF wert(dnrschluessel ++1)>schulkenndatenCOR dbstatus<>0THEN b:=TRUE ELSE schuldatenCAT wert( +dnrschluessel+2)+trenner;schuldatenCAT wert(dnrschluessel+3)+trenner;FI END +PROC schulkennung;PROC zeitrasterdaten(BOOL VAR b):IF wert(dnrzeitraster+1)<> +schjCOR wert(dnrzeitraster+2)<>schhjCOR dbstatus<>0THEN b:=TRUE ELSE +zeitdatenCAT wert(dnrzeitraster+3)+trenner;zeitdatenCAT " "+wert( +dnrzeitraster+5)+trenner;zeitdatenCAT " "+wert(dnrzeitraster+6)+trenner; +zeitdatenCAT wert(dnrzeitraster+4)+trenner;FI END PROC zeitrasterdaten;PROC +raumgr(BOOL VAR b):IF dbstatus<>0THEN b:=TRUE ELSE schreibkarte;schreibraeume +FI .schreibkarte:t2:=wert(dnrraumgruppen+2);putlinezz(f,text(wert( +dnrraumgruppen+1),4)+text(t2,maxstden)+"G"+zeilenende).schreibraeume:FOR i +FROM 1UPTO (LENGTH t2)DIV 4REP rgrdatenCAT compress(subtext(t2,i*4-3,i*4))+ +trennerPER .END PROC raumgr;PROC raum(BOOL VAR b):IF wert(dnrschluessel+1)> +raumkenndatenCOR dbstatus<>0THEN b:=TRUE ELSE mindeinraum:=TRUE ;IF pos( +rgrdaten,trenner+wert(dnrschluessel+2)+trenner)<1THEN schreibrestraeumeFI ; +FI .schreibrestraeume:zeileCAT text(wert(dnrschluessel+2),4).END PROC raum; +PROC lvschreiben(BOOL VAR b):IF wert(dnrlehrveranstaltungen+1)<>schjCOR wert( +dnrlehrveranstaltungen+2)<>schhjCOR dbstatus<>0THEN b:=TRUE ELSE schreibkarte +FI .schreibkarte:zeile:="";zeileCAT text(wert(dnrlehrveranstaltungen+5),8)+ +text(wert(dnrlehrveranstaltungen+4),2)+" "+text(wert(dnrlehrveranstaltungen+ +6),4)+subtext(" "+wert(dnrlehrveranstaltungen+7),length(" "+wert( +dnrlehrveranstaltungen+7))-1)+" ";FOR iFROM 8UPTO 11REP IF wert( +dnrlehrveranstaltungen+i)=""CAND i=8THEN pruefrestlklgrELIF wert( +dnrlehrveranstaltungen+i)=""CAND i<>8THEN zeileCAT " "ELIF +istschuelergruppeTHEN zeileCAT text(substituiere,4)ELIF istklassengruppeTHEN +zeileCAT text(wert(dnrlehrveranstaltungen+i),4)ELIF istklassenstufeTHEN zeile +CAT text(formatjgst(wert(dnrlehrveranstaltungen+i)),4)ELSE +falschesugrupgefunden:=TRUE ;par:=formatjgst(wert(dnrlehrveranstaltungen+3))+ +wert(dnrlehrveranstaltungen+4);letztepar:=wert(dnrlehrveranstaltungen+i);b:= +TRUE ;LEAVE lvschreibenFI PER ;zeileCAT " "+text(wert( +dnrlehrveranstaltungen+12),4)+text(wert(dnrlehrveranstaltungen+13),4)+ +" "+"H"+zeilenende;putlinezz(f,zeile).pruefrestlklgr:IF wert( +dnrlehrveranstaltungen+9)=""CAND wert(dnrlehrveranstaltungen+10)=""CAND wert( +dnrlehrveranstaltungen+11)=""THEN zeileCAT text(formatjgst(wert( +dnrlehrveranstaltungen+3)),4)ELSE zeileCAT " "FI .istschuelergruppe:pos( +sgridaten,trenner+formatjgst(wert(dnrlehrveranstaltungen+3))+text(wert( +dnrlehrveranstaltungen+i),4)+trenner)>0.istklassengruppe:pos(klgr,trenner+ +wert(dnrlehrveranstaltungen+i)+trenner)>0.istklassenstufe:intwert( +dnrlehrveranstaltungen+i)>4CAND intwert(dnrlehrveranstaltungen+i)<14. +substituiere:subst(text(jgst+wert(dnrlehrveranstaltungen+i),6)).jgst: +formatjgst(wert(dnrlehrveranstaltungen+3)).END PROC lvschreiben;TEXT PROC +holedatum(TEXT VAR variable,TEXT CONST suchwort):IF pos(variable,suchwort)>0 +THEN subtext(variable,nachsuchwort,endezeichen)ELSE ""FI .nachsuchwort:pos( +variable,suchwort)+LENGTH suchwort.endezeichen:pos(variable,trenner, +nachsuchwort)-1.END PROC holedatum;PROC hole2daten(TEXT VAR variable,TEXT +CONST suchwort):IF pos(variable,suchwort)>0THEN t1:=subtext(variable, +nachsuchwort,endezeichen);t2:=subtext(variable,endezeichen+2, +naechstesendezeichen-1);ELSE t1:="";t2:=""FI .nachsuchwort:pos(variable, +suchwort)+LENGTH suchwort.endezeichen:pos(variable,trenner,nachsuchwort)-1. +naechstesendezeichen:pos(variable,trenner,endezeichen+2).END PROC hole2daten; +PROC holedrittesdatum(TEXT VAR variable,TEXT CONST suchwort):INT VAR p:=pos( +variable,suchwort),i;FOR iFROM 1UPTO 3REP p:=pos(variable,trenner,p+1);PER ; +t1:=subtext(variable,p+1,pos(variable,trenner,p+1)-1)END PROC +holedrittesdatum;PROC spput(TEXT CONST t):TEXT VAR hohlstd:="0 ", +weiterekarten:="",zeile:="",alleschgr,aktschgr;BOOL VAR jgstausgabe:=TRUE ; +INT VAR anzschgrprozeile:=0;zeile:=text(t,4);alleschgr:=subtext(t,5); +weiterekarten:="";FOR iFROM 1UPTO (length(t)-4)DIV 4REP objut:=ut;objvm:=vm; +objnm:=nm;aktschgr:=subtext(alleschgr,(i-1)*4+1,i*4);suchezeitwunsch; +schreibeintragPER ;IF anzschgrprozeileMOD 15<>0THEN eintragausgebenFI ; +schreibschgrmitunbestwunsch.suchezeitwunsch:suchezeitw(trenner+kennsugrup+ +trenner+aktschgr+trenner);IF unbestwunsch<>""CAND unbestwunsch<> +leererunbestwunschTHEN uebertragunbestwunschinkarte;IF objut<>utCOR objvm<>vm +COR objnm<>nmTHEN weiterekartenCAT " ";weiterekartenCAT aktschgr; +weiterekartenCAT hohlstd;weiterekartenCAT text(objut);weiterekartenCAT text( +objvm);weiterekartenCAT text(objnm)FI FI ;IF bestwunsch<>""CAND bestwunsch<> +leererbestwunschTHEN uebertragbestwunschinverfkarte(objektverf);objektverf:= +aktschgr+objektverf+"L"+zeilenende;putds(k,objektverf)FI .schreibeintrag:IF +keinwunschgefundenTHEN zeileCAT aktschgr;anzschgrprozeileINCR 1;IF +anzschgrprozeile=15THEN putlinezz(f,zeile+hohlstd+text(ut)+text(vm)+text(nm)+ +" D"+zeilenende);anzschgrprozeile:=0;jgstausgabe:=FALSE ;zeile:=" "FI FI . +keinwunschgefunden:bestwunsch=""COR (objut=utCAND objvm=vmCAND objnm=nm). +eintragausgeben:putlinezz(f,text(zeile,64)+hohlstd+text(ut)+text(vm)+text(nm) ++" D"+zeilenende);jgstausgabe:=FALSE .schreibschgrmitunbestwunsch:IF +weiterekarten<>""THEN FOR jFROM 1UPTO length(weiterekarten)DIV 13REP aktschgr +:=subtext(weiterekarten,(j-1)*13+1,j*13);IF jgstausgabeTHEN putlinezz(f,zeile ++subtext(aktschgr,5,8)+ +" "+subtext(aktschgr,9 +)+" D"+zeilenende);jgstausgabe:=FALSE ELSE putlinezz(f,text(aktschgr,8)+ +" "+subtext(aktschgr,9 +)+" D"+zeilenende)FI ;PER ;FI .END PROC spput;PROC spiput(TEXT CONST t):t1:= +text(t,4);FOR iFROM 1UPTO ((LENGTH t)-4)DIV 6REP IF subtext(t,i*6+1,i*6+4)= +" "THEN t1CAT subtext(t,i*6-1,i*6+2)ELSE t1CAT subst(subtext(t,i*6-1,i*6+4 +));IF falschesugrupgefundenTHEN par:=text(t,4);LEAVE spiputFI ;FI ;PER .END +PROC spiput;TEXT PROC subst(TEXT CONST t):IF pos(sgridaten,trenner+t+trenner) +>0THEN subtext(sgridaten,pos(sgridaten,trenner+t+trenner)+8,pos(sgridaten, +trenner+t+trenner)+11)ELSE letztepar:=t;falschesugrupgefunden:=TRUE ;""FI +END PROC subst;PROC lehrer(BOOL VAR b):lehrerdaten:="";objut:=ut;objvm:=vm; +objnm:=nm;IF dbstatus<>0THEN b:=TRUE ELSE lehrerdatenCAT text(wert(dnrlehrer+ +2),20);par:=wert(dnrlehrer+1);lehrerdatenCAT text(wert(dnrlehrer+1),4)+ +" ";lehrerdatenCAT subtext(" "+wert(dnrlehrer+7),length(" "+wert( +dnrlehrer+7))-1);suchezeitw(trenner+kennpar+trenner+par+trenner);IF +bestwunsch<>""CAND bestwunsch<>leererbestwunschTHEN schreibverfuegkarteFI ; +schreiblehrerkarteFI .schreibverfuegkarte:uebertragbestwunschinverfkarte( +objektverf);objektverf:=text(par,4)+objektverf+"J"+zeilenende;putds(l, +objektverf).schreiblehrerkarte:IF unbestwunsch<>""CAND unbestwunsch<> +leererunbestwunschTHEN uebertragunbestwunschinkarteFI ;putlinezz(f, +lehrerdaten+" "+text(objut)+text(objvm)+text(objnm)+ +" C"+zeilenende).END PROC lehrer;PROC suchezeitw( +TEXT CONST kennung):toline(z,1);col(z,1);downety(z,kennung);IF eof(z)THEN +bestwunsch:="";unbestwunsch:=""ELSE readrecord(z,record);unbestwunsch:=text( +record,9);bestwunsch:=subtext(record,10,141)FI ;END PROC suchezeitw;PROC +zeitw(BOOL VAR b):IF wert(dnrzeitwuensche+1)<>schjCOR wert(dnrzeitwuensche+2) +<>schhjCOR dbstatus<>0THEN b:=TRUE ELSE zeitwuensche:="";zeitwuenscheCAT wert +(dnrzeitwuensche+6);zeitwuenscheCAT wert(dnrzeitwuensche+5);zeitwuenscheCAT +trenner;zeitwuenscheCAT wert(dnrzeitwuensche+3);zeitwuenscheCAT trenner;IF +wert(dnrzeitwuensche+3)=kennsugrupTHEN zeitwuenscheCAT holedatum(sgridaten, +trenner+text(wert(dnrzeitwuensche+4),6)+trenner);ELSE zeitwuenscheCAT wert( +dnrzeitwuensche+4);FI ;zeitwuenscheCAT trenner;putds(z,zeitwuensche)FI END +PROC zeitw;PROC uebertragbestwunschinverfkarte(TEXT VAR verf):INT VAR suchpos +:=1,aktpos:=0;verf:=schulverfuegbarkeit;WHILE pos(bestwunsch,"-3",suchpos)<>0 +REP aktpos:=pos(bestwunsch,"-3",suchpos);IF aktpos>0THEN replace(verf,(aktpos ++1)DIV 2,"1");suchpos:=aktpos+1FI PER END PROC uebertragbestwunschinverfkarte +;PROC uebertragunbestwunschinkarte:INT VAR tageswunsch:=0;IF (unbestwunsch +SUB 3)="3"THEN tageswunsch:=int(unbestwunschSUB 1);objutDECR tageswunsch; +objvmDECR tageswunsch;objnmDECR tageswunsch-1FI ;IF (unbestwunschSUB 6)="3" +THEN objvmDECR int(unbestwunschSUB 4)FI ;IF (unbestwunschSUB 9)="3"THEN objnm +DECR int(unbestwunschSUB 7)FI ;END PROC uebertragunbestwunschinkarte;PROC +sgrdatenholen(BOOL VAR b):IF wert(dnraktschuelergruppen+1)<>schjCOR wert( +dnraktschuelergruppen+2)<>schhjCOR dbstatus<>0THEN b:=TRUE ELSE IF wert( +dnraktschuelergruppen+3)<>letzteparTHEN zeile:=formatjgst(wert( +dnraktschuelergruppen+3));sgrdatenCAT trenner+text(zeile,4);letztepar:=wert( +dnraktschuelergruppen+3)FI ;sgrdatenCAT text(wert(dnraktschuelergruppen+7),4) +FI ;END PROC sgrdatenholen;PROC klgrdatenholen(BOOL VAR b):IF dbstatus<>0 +THEN b:=TRUE ELSE klgrdatenCAT trenner+text(wert(dnrklassengruppen+1),4);klgr +CAT wert(dnrklassengruppen+1)+trenner;klgrdatenCAT wert(dnrklassengruppen+2) +FI END PROC klgrdatenholen;PROC sgridatenholen(BOOL VAR b):IF wert( +dnraktschuelergruppen+1)<>schjCOR wert(dnraktschuelergruppen+2)<>schhjCOR +dbstatus<>0THEN b:=TRUE ELSE sgridatenCAT trenner+jgstaufber(wert( +dnraktschuelergruppen+3));sgridatenCAT text(wert(dnraktschuelergruppen+4),4)+ +trenner;sgridatenCAT text(wert(dnraktschuelergruppen+7),4);IF wert( +dnraktschuelergruppen+7)=""THEN datenfehler:=TRUE FI FI ;END PROC +sgridatenholen;PROC putds(FILE VAR file,TEXT CONST t):writerecord(file,t); +down(file);insertrecord(file)END PROC putds;PROC dbleer(INT CONST dateinr): +fehler:=FALSE ;IF records(dateinr)<1.0THEN fehler:=TRUE FI END PROC dbleer; +PROC melde(TEXT CONST meldungsergaenzung):standardmeldung(meldg1, +meldungsergaenzung+"#")END PROC melde;PROC putlinezz(FILE VAR f,TEXT CONST t) +:putline(f,t);IF zz>2999THEN abbruchwegen4000zeilen:=TRUE ELSE zzINCR 1FI +END PROC putlinezz;TEXT PROC formatjgst(TEXT CONST jgst):IF int(jgst)=0THEN +LEAVE formatjgstWITH "00"ELIF int(jgst)<10THEN LEAVE formatjgstWITH +jgstaufber(jgst)FI ;jgstEND PROC formatjgst;END PACKET +datenfuerintegaaufbereiten; + diff --git a/app/schulis/2.2.1/src/4.daten für schulis aufbereiten b/app/schulis/2.2.1/src/4.daten für schulis aufbereiten new file mode 100644 index 0000000..89c96ea --- /dev/null +++ b/app/schulis/2.2.1/src/4.daten für schulis aufbereiten @@ -0,0 +1,184 @@ +PACKET integastundenplanuebernehmenDEFINES integastundenplanarchivlisten, +integastundenplanstdvproc,integastundenplanuebernehmen, +integastundenplandatenschreiben:LET integadatei="SCHULIS.PUN",filemodus= +"file ibm",dos="DOS",anzstdenprotag=12,schulname="Schulname",schulort= +"Schulort",schuljahr="Schuljahr",halbjahr="Schulhalbjahr",maskeeingang= +"ms stdplan von intega uebernehmen",listenname= +"Liste der Dateien auf der Diskette:",protokollname= +"Stundenplan von INTEGA übernehmen",leerzeile=" ",ueberschrift= +" Fehlerprotokoll zur Übernahme des Stundenplans ",unterstrich= +" ------------------------------------------------------------------", +fehler1kopf="1. Kopplung existiert in schulis nicht für:",fehler2kopf= +"2. Lehrveranstaltung kann nicht identifiziert werden für:",fehler3kopf1= +"3. Kopplung und Paraphe passen in schulis auf Lehrveranstaltung, aber", +fehler3kopf2=" Fach stimmt nicht überein für:",fehler4kopf= +"4. In INTEGA wurden Zeiten verplant, die in schulis gesperrt sind für:", +fehlerspalten1= +" Kopplung Fach Lehrer Klassengruppen Zeit Raum", +fehlerspalten2=" schulis INTEGA ",fehlerspalten3= +" Lehrver. Kopplung Fach Lehrer Klassengruppen Zeit Raum", +spalten3fueller=" ", +keinfehler=" Kein Fehler dieser Art aufgetreten!",tab1= +" +--------+--------+----+------+-----------------------+-----+----+",tab2= +" +--------+----+------+-----------------------+-----+----+", +feldakthj=2,laengelvkopp=8,laengeindex=4,laengezeitraum=6,beginnkopp=1, +endekopp=8,beginnfach=9,endefach=12,beginnlvfach=3,endelvfach=4,beginnpar=13, +endepar=16,beginnklgr=19,endeklgr=42,beginnbelegg=43,fachergaenzung=" ", +leereraumangabe=" ",leerelv=" ",pseudoraum="PSEU",ausgabeparam="#", +frageraum="????",kennungkopplung="K",kennungparaphe="P",kennungzulzeit="ZZ", +kennungmo="Mo ",kennungdi="Di ",kennungmi="Mi ",kennungdo="Do ",kennungfr= +"Fr ",kennungsa="Sa ",meldungserverfehler=376,meldungkeinstdplan=366, +meldungkeinesugruppen=334,meldungzuvielesugruppen=356,meldungkeinelv=326, +meldungzuvielelv=358,meldungstdplanveraltet=377,meldungbasisinkon=378, +meldwarten=69,melddatenaufber=357,melduebern=374,meldueberschr=372, +meldaenderungenunvollstaendig=364,meldprotokollaufbereiten=373, +meldstandderuebern=375,meldarchivfehler=343;FILE VAR g,protokoll, +integastdplandatei;THESAURUS VAR thes;TEXT VAR gewsj,gewhj,t,integaeintrag,lv +,leistekoppexistnicht,leistelvnichtident,leistelvfalschesfach,leisteunzzeit, +integakopplung,integafach,integaparaphe,integabelegg,zeitraumeintrag, +zeitderlv,raumderlv,stdplaneintrag;INT VAR fstat,i,posanf,posende, +intzeitderlv;BOOL VAR archivfehler:=FALSE ,transferfehler:=FALSE ,eintragok; +PROC archivanmelden(INT CONST ruecksprung):archivfehler:=FALSE ; +commanddialogue(FALSE );disablestop;reserve(filemodus,/dos);IF iserrorTHEN +archivfehler:=TRUE ;abbruchnachfehler(ruecksprung);LEAVE archivanmeldenFI ; +enablestopEND PROC archivanmelden;PROC integastundenplanarchivlisten: +standardmeldung(meldwarten," ");archivanmelden(1);IF archivfehlerTHEN LEAVE +integastundenplanarchivlistenFI ;disablestop;forget(listenname,quiet);thes:= +ALL (/dos);IF iserrorTHEN archivfehler:=TRUE ;abbruchnachfehler(1);ELSE +release(/dos);thesaurusaufbereiten;enablestop;zeigedatei(listenname,"vr")FI . +thesaurusaufbereiten:g:=sequentialfile(output,listenname);t:=" ";i:=0;REP get +(thes,t,i);putline(g,t)UNTIL t=""PER .END PROC integastundenplanarchivlisten; +PROC integastundenplanstdvproc:standardstartproc(maskeeingang);IF +transferfehlerTHEN standardmeldung(meldaenderungenunvollstaendig,"")FI ; +transferfehler:=FALSE ;infeld(2);standardnprocEND PROC +integastundenplanstdvproc;PROC integastundenplanuebernehmen:standardmeldung( +meldwarten,"");gewsj:=schulkenndatum(schuljahr);gewhj:=schulkenndatum( +halbjahr);IF standardmaskenfeld(feldakthj)=""THEN geplanteshjundsjberechnen( +gewhj,gewsj)FI ;stundenplanhalbjahrsetzen(gewhj,gewsj);standardmeldung( +melddatenaufber,"");stundenplanbasisundstundenplanholen(fstat);IF fstat<>0 +CAND fstat<>8THEN standardmeldung(melduebern,"")ELSE standardmeldung( +meldueberschr,"")FI ;standardnproc.END PROC integastundenplanuebernehmen; +PROC integastundenplandatenschreiben:TEXT VAR alteerstellungszeit:="";IF +fstat<>0CAND fstat<>8THEN standardmeldung(meldwarten,""); +stundenplanbasisundstundenplanerstellen(fstat);IF fstat<>0THEN return(2); +meldungausgeben(fstat);LEAVE integastundenplandatenschreibenELSE +stundenplanbasissichern(fstat);stundenplansichern(fstat);IF fstat<>0THEN +return(2);meldungausgeben(fstat);LEAVE integastundenplandatenschreibenFI ;FI +;FI ;alteerstellungszeit:=erstellungszeitderdatenraeume;stundenplanloeschen( +fstat);stundenplanerstellen(alteerstellungszeit,fstat);datenvonarchivholen(2) +;IF archivfehlerTHEN LEAVE integastundenplandatenschreibenFI ; +dateninstdplanschreibenEND PROC integastundenplandatenschreiben;PROC +datenvonarchivholen(INT CONST ruecksprung):standardmeldung(meldwarten," "); +archivanmelden(ruecksprung);IF archivfehlerTHEN LEAVE datenvonarchivholenFI ; +disablestop;fetch(integadatei,/dos);IF iserrorTHEN archivfehler:=TRUE ; +abbruchnachfehler(ruecksprung);ELSE release(/dos);enablestop;commanddialogue( +TRUE );FI END PROC datenvonarchivholen;PROC dateninstdplanschreiben:INT VAR +zeilennr:=0;TEXT VAR anzzeilen;BOOL VAR lvnichtvermerkt:=TRUE ; +fehlerprotvorbereiten;datenraumankoppeln;WHILE NOT eof(integastdplandatei) +REP zeilennrINCR 1;getline(integastdplandatei,integaeintrag);standardmeldung( +meldstandderuebern,anzzeilen+ausgabeparam+text(zeilennr)+ausgabeparam); +stundenplaneintraegevornehmenPER ;IF leisteunzzeit<>""COR +leistekoppexistnicht<>""COR leistelvnichtident<>""COR leistelvfalschesfach<> +""THEN sicherstdplan;standardmeldung(meldprotokollaufbereiten," ");forget( +protokollname,quiet);protokoll:=sequentialfile(output,protokollname); +fuelleprotokoll;infeld(1);standardfelderausgeben;infeld(2);zeigedatei( +protokollname,"vr")ELSE sicherstdplan;infeld(1);standardfelderausgeben;infeld +(2);return(2)FI .sicherstdplan:stundenplanreorganisierenundsichern(fstat);IF +fstat<>0THEN transferfehler:=TRUE FI .fehlerprotvorbereiten:leisteunzzeit:="" +;leistekoppexistnicht:="";leistelvnichtident:="";leistelvfalschesfach:="". +datenraumankoppeln:integastdplandatei:=sequentialfile(input,integadatei); +anzzeilen:=text(lines(integastdplandatei)).stundenplaneintraegevornehmen: +integakopplung:=text(integaeintrag,laengelvkopp);integafach:=subtext( +integaeintrag,beginnfach,endefach);integaparaphe:=subtext(integaeintrag, +beginnpar,endepar);integabelegg:=subtext(integaeintrag,beginnbelegg);t:= +allelvmit(kennungkopplung,integakopplung);IF t=""THEN leistekoppexistnicht +CAT text(zeilennr,laengeindex)ELSE IF lvmitgleicherparaphe(t)THEN pruefefach +ELSE leistelvnichtidentCAT text(zeilennr,laengeindex)FI FI .pruefefach:IF +integafach<>subtext(lv,beginnlvfach,endelvfach)+fachergaenzungTHEN +leistelvfalschesfachCAT text(zeilennr,laengeindex);leistelvfalschesfachCAT +text(lv,laengelvkopp)ELSE tragstundeneinundpruefezeitenFI . +tragstundeneinundpruefezeiten:stdplaneintrag:=lv+integakopplung+integaparaphe +;posanf:=1;posende:=length(integabelegg);lvnichtvermerkt:=TRUE ;WHILE posanf< +posendeREP zeitraumeintrag:=subtext(integabelegg,posanf,posanf+laengezeitraum +-1);zeitderlv:=text(zeitraumeintrag,2);intzeitderlv:=int(zeitderlv);raumderlv +:=compress(subtext(zeitraumeintrag,3));IF raumderlv=""COR raumderlv= +pseudoraumCOR raumderlv=frageraumTHEN raumderlv:=leereraumangabeFI ;IF NOT +bezeichnungzulaessig(kennungzulzeit,zeitderlv)THEN IF lvnichtvermerktTHEN +leisteunzzeitCAT text(zeilennr,laengeindex);leisteunzzeitCAT text(lv, +laengelvkopp);lvnichtvermerkt:=FALSE FI ELSE planeintragvornehmen( +intzeitderlv,lv,raumderlv,eintragok);IF NOT eintragokTHEN transferfehler:= +TRUE FI ;FI ;posanfINCR laengezeitraumPER .fuelleprotokoll:putline(protokoll, +schulkenndatum(schulname));putline(protokoll,text(schulkenndatum(schulort),65 +)+date);putline(protokoll,leerzeile);putline(protokoll,ueberschrift+gewhj+ +". "+text(gewsj,2)+"/"+subtext(gewsj,3)+" von INTEGA");putline(protokoll, +unterstrich);putline(protokoll,leerzeile);putline(protokoll,fehler1kopf); +putline(protokoll,leerzeile);IF leistekoppexistnicht=""THEN putline(protokoll +,keinfehler)ELSE putline(protokoll,fehlerspalten1);putline(protokoll,tab2); +gibfalschekopplungenausFI ;putline(protokoll,leerzeile);putline(protokoll, +fehler2kopf);putline(protokoll,leerzeile);IF leistelvnichtident=""THEN +putline(protokoll,keinfehler)ELSE putline(protokoll,fehlerspalten1);putline( +protokoll,tab2);gibfalschelvausFI ;putline(protokoll,leerzeile);putline( +protokoll,fehler3kopf1);putline(protokoll,fehler3kopf2);putline(protokoll, +leerzeile);IF leistelvnichtident=""THEN putline(protokoll,keinfehler)ELSE +putline(protokoll,fehlerspalten2);putline(protokoll,fehlerspalten3);putline( +protokoll,tab1);gibnichtidentlvausFI ;putline(protokoll,leerzeile);putline( +protokoll,fehler4kopf);putline(protokoll,leerzeile);IF leisteunzzeit=""THEN +putline(protokoll,keinfehler)ELSE putline(protokoll,fehlerspalten3);putline( +protokoll,tab1);gibfalschezeitenausFI .gibfalschezeitenaus:gibleisteaus( +leisteunzzeit,FALSE ,FALSE ).gibfalschekopplungenaus:gibleisteaus( +leistekoppexistnicht,TRUE ,TRUE ).gibfalschelvaus:gibleisteaus( +leistelvnichtident,TRUE ,TRUE ).gibnichtidentlvaus:gibleisteaus( +leistelvfalschesfach,FALSE ,TRUE ).END PROC dateninstdplanschreiben;PROC +gibleisteaus(TEXT CONST leiste,BOOL CONST ohnelv,allezeiten):INT VAR +posanfleiste,posendeleiste,posanflv,posanfbelegg,posendebelegg;BOOL VAR +erstezeilederlv:=TRUE ;posanfleiste:=1;posendeleiste:=length(leiste);modify( +integastdplandatei);WHILE posanfleiste<posendeleisteREP col( +integastdplandatei,1);toline(integastdplandatei,int(subtext(leiste, +posanfleiste,posanfleiste+laengeindex-1)));readrecord(integastdplandatei, +integaeintrag);integabelegg:=subtext(integaeintrag,beginnbelegg);IF ohnelv +THEN lv:=leerelv;posanfleisteINCR laengeindexELSE posanflv:=posanfleiste+ +laengeindex;lv:=subtext(leiste,posanflv,posanflv+laengelvkopp-1);posanfleiste +INCR laengeindex+laengelvkoppFI ;posanfbelegg:=1;posendebelegg:=length( +integabelegg);zeitraumeintrag:=subtext(integabelegg,posanfbelegg,posanfbelegg ++laengezeitraum-1);zeitderlv:=text(zeitraumeintrag,2);intzeitderlv:=int( +zeitderlv);raumderlv:=subtext(zeitraumeintrag,3);IF raumderlv=""COR raumderlv +=pseudoraumCOR raumderlv=frageraumTHEN raumderlv:=leereraumangabeFI ;IF +allezeitenTHEN putline(protokoll," "+lv+" "+subtext(integaeintrag, +beginnkopp,endekopp)+" "+subtext(integaeintrag,beginnfach,endefach)+" "+ +subtext(integaeintrag,beginnpar,endepar)+" "+subtext(integaeintrag, +beginnklgr,endeklgr)+gibtagstd(intzeitderlv)+" "+raumderlv);posanfbeleggINCR +laengezeitraum;WHILE posanfbelegg<posendebeleggREP zeitraumeintrag:=subtext( +integabelegg,posanfbelegg,posanfbelegg+laengezeitraum-1);zeitderlv:=text( +zeitraumeintrag,2);intzeitderlv:=int(zeitderlv);putline(protokoll, +spalten3fueller+gibtagstd(intzeitderlv)+" "+raumderlv);posanfbeleggINCR +laengezeitraumPER ELSE erstezeilederlv:=TRUE ;WHILE posanfbelegg< +posendebeleggREP zeitraumeintrag:=subtext(integabelegg,posanfbelegg, +posanfbelegg+laengezeitraum-1);zeitderlv:=text(zeitraumeintrag,2);IF NOT +bezeichnungzulaessig(kennungzulzeit,zeitderlv)THEN intzeitderlv:=int( +zeitderlv);IF erstezeilederlvTHEN putline(protokoll," "+lv+" "+subtext( +integaeintrag,beginnkopp,endekopp)+" "+subtext(integaeintrag,beginnfach, +endefach)+" "+subtext(integaeintrag,beginnpar,endepar)+" "+subtext( +integaeintrag,beginnklgr,endeklgr)+gibtagstd(intzeitderlv)+" "+raumderlv); +erstezeilederlv:=FALSE ELSE putline(protokoll,spalten3fueller+gibtagstd( +intzeitderlv)+" "+raumderlv);FI ;FI ;posanfbeleggINCR laengezeitraum;PER FI +PER .END PROC gibleisteaus;BOOL PROC lvmitgleicherparaphe(TEXT CONST +allelvderkopp):posanf:=1;posende:=length(allelvderkopp);WHILE posanf<posende +REP lv:=subtext(allelvderkopp,posanf,posanf+laengelvkopp-1);IF datenzurlv( +kennungparaphe,lv)=integaparapheTHEN LEAVE lvmitgleicherparapheWITH TRUE FI ; +posanfINCR laengelvkoppPER ;FALSE .END PROC lvmitgleicherparaphe;PROC +abbruchnachfehler(INT CONST ruecksprung):return(ruecksprung);standardmeldung( +meldarchivfehler,"Fehler: "+errormessage+" !#");clearerror;release(/dos); +commanddialogue(TRUE );enablestopEND PROC abbruchnachfehler;PROC +meldungausgeben(INT VAR fstat):IF fstat=2THEN standardmeldung( +meldungserverfehler,"");ELIF fstat=3THEN standardmeldung(meldungkeinstdplan, +"");ELIF fstat=4THEN standardmeldung(meldungkeinesugruppen,"");ELIF fstat=5 +THEN standardmeldung(meldungzuvielesugruppen,"")ELIF fstat=6THEN +standardmeldung(meldungkeinelv,"")ELIF fstat=7THEN standardmeldung( +meldungzuvielelv,"")ELIF fstat=9THEN standardmeldung(meldungbasisinkon,""); +FI END PROC meldungausgeben;TEXT PROC gibtagstd(INT CONST index):INT VAR +intstd:=(index-1)MOD anzstdenprotag+1;TEXT VAR std:="0";IF intstd<10THEN std +CAT text(intstd)ELSE std:=text(intstd)FI ;SELECT (index-1)DIV anzstdenprotag +OF CASE 0:kennungmo+stdCASE 1:kennungdi+stdCASE 2:kennungmi+stdCASE 3: +kennungdo+stdCASE 4:kennungfr+stdCASE 5:kennungsa+stdOTHERWISE stdEND SELECT +END PROC gibtagstd;END PACKET integastundenplanuebernehmen; + diff --git a/app/schulis/2.2.1/src/4.einhaltung zeitwuensche pruefen b/app/schulis/2.2.1/src/4.einhaltung zeitwuensche pruefen new file mode 100644 index 0000000..6e953d3 --- /dev/null +++ b/app/schulis/2.2.1/src/4.einhaltung zeitwuensche pruefen @@ -0,0 +1,195 @@ +PACKET einhaltungzeitwuenschepruefenDEFINES zeitwuenschepruefenausfuehren: +LET dateiname="Liste zur Einhaltung der Zeitwünsche",trenner="198", +letztestunde=66,fldlehrer=2,fldsugrup=3,fldraeume=4,fldfaecher=5, +fldkopplungen=6,fldakthalbj=7,meldungwarten=69,meldungbearbwird=352,# +meldungkeinelehrer=337,meldungkeineraeume=365,#meldungkeinefaecher=68, +meldungkeinzeitraster=336,meldungkeinezeitwuensche=389,meldungserverfehler= +376,meldungkeinstdplan=366,meldungkeinesugruppen=334,meldungzuvielesugruppen= +356,meldungkeinelv=326,meldungzuvielelv=358,meldungbasisinkon=378, +meldungstdplauswvorber=384,posanzut=1,posgewut=3,posanzvm=4,posgewvm=6, +posanznm=7,posgewnm=9,ausgfreipos=2,ausganzpos=11,ausggewpos=18,ausgnerfpos= +27,ausgabeparam="#",ausgnerf="*",minus="-",plus="+",leerzeile=" ",kennzlehrer +="P",kennzsugrup="S",kennzraeume="R",kennzfaecher="F",kennzlv="L",kennzkoppl= +"K",moeintrag="Mo ",dieintrag="Di ",mieintrag="Mi ",doeintrag="Do ", +freintrag="Fr ",saeintrag="Sa ",anhangl="Lehrer ",anhangs="Schülergruppen " +,anhangr="Räume ",anhangf="Fächer ",anhangk="Kopplungen ",ueberschrift= +"Liste zur Einhaltung der Zeitwünsche für ",unterstrich= +"-------------------------------------------------",leererunbestwunsch= +" ",kennungvorm="v",kennungnachm="n",schuljahr="Schuljahr", +schulhalbjahr="Schulhalbjahr",schulname="Schulname",schulort="Schulort", +anzgewichte=6,anzunterrichtstage=6,anzvormittage=6,anznachmittage=5, +anzsamstagstunden=6,anzunterrichtsstunden=12;FILE VAR datei;INT VAR hjkennneu +:=0,hjkennalt:=-1;INT VAR i,j,fstat,fall,anztage,anzvorm,anznachm;TEXT VAR +schj,schhj,kenn,plan:="",anhang,faecherkatalog:=trenner;TEXT VAR bestwzeile, +unbestwtage,unbestwvorm,unbestwnachm,bestwurzeile:= +" _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _"+ +" _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ "+ +" _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ "+ +"_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ";TEXT VAR +moobjeintrag,diobjeintrag,miobjeintrag,doobjeintrag,frobjeintrag,saobjeintrag +;BOOL VAR keinezeitwuensche:=TRUE ;ROW 4ROW anzgewichteINT VAR +anzwuenschegesamt;ROW 4ROW anzgewichteINT VAR anznerfwuensche;PROC +zeitwuenschepruefenausfuehren:keinezeitwuensche:=TRUE ;kenn:=""; +standardmeldung(meldungwarten,"");pruefeeingangsmaske;pruefehalbjahr; +zeitwuenschevorhanden;IF halbjahrveraendertTHEN hjkennalt:=hjkennneu; +holestundenplan;erstellezeitrasterFI ;erstelleliste;IF keinezeitwuenscheTHEN +fehlerkeinezeitwuenscheELSE zeigedatei(dateiname,"vr")FI .halbjahrveraendert: +hjkennneu<>hjkennalt.pruefeeingangsmaske:standardpruefe(5,2,6,0,"",fstat);IF +fstat<>0THEN infeld(fstat);return(1);LEAVE zeitwuenschepruefenausfuehrenELIF +standardmaskenfeld(fldlehrer)<>""THEN fall:=fldlehrer;anhang:=anhangl;kenn:= +kennzlehrerELIF standardmaskenfeld(fldsugrup)<>""THEN fall:=fldsugrup;anhang +:=anhangs;kenn:=kennzsugrupELIF standardmaskenfeld(fldraeume)<>""THEN fall:= +fldraeume;anhang:=anhangr;kenn:=kennzraeume;pruefefaecherELIF +standardmaskenfeld(fldfaecher)<>""THEN fall:=fldfaecher;anhang:=anhangf;kenn +:=kennzfaecher;IF faecherkatalog=trennerTHEN holallefaecherFI ;ELIF +standardmaskenfeld(fldkopplungen)<>""THEN fall:=fldkopplungen;anhang:=anhangk +;kenn:=kennzkopplFI .holallefaecher:inittupel(dnrfaecher);statleseschleife( +dnrfaecher,"","",fnrffach,fnrffach,PROC faecher).pruefefaecher:IF records( +dnrfaecher)=0.0THEN fehlerkeinefaecherFI .pruefehalbjahr:schj:=schulkenndatum +(schuljahr);schhj:=schulkenndatum(schulhalbjahr);IF standardmaskenfeld( +fldakthalbj)=""THEN geplanteshjundsjberechnen(schhj,schj);hjkennneu:=1ELSE +hjkennneu:=0FI .holestundenplan:standardmeldung(meldungstdplauswvorber,""); +stundenplanhalbjahrsetzen(schhj,schj);stundenplanbasisundstundenplanholen( +fstat);IF fstat<>0CAND fstat<>8THEN meldungausgeben(fstat);return(1);LEAVE +zeitwuenschepruefenausfuehrenFI .erstellezeitraster:plan:="";IF records( +dnrzeitraster)=0.0THEN fehlerzeitrasternichtvollstdELSE inittupel( +dnrzeitraster);statleseschleife(dnrzeitraster,schj,schhj,fnrzrsj,fnrzrhj, +PROC zeitrasterdaten)FI ;IF length(plan)<letztestundeTHEN +fehlerzeitrasternichtvollstdFI .zeitwuenschevorhanden:IF records( +dnrzeitwuensche)=0.0THEN fehlerkeinezeitwuenscheFI . +fehlerzeitrasternichtvollstd:standardmeldung(meldungkeinzeitraster,"");return +(1);LEAVE zeitwuenschepruefenausfuehren.fehlerkeinefaecher:standardmeldung( +meldungkeinefaecher,"");return(1);LEAVE zeitwuenschepruefenausfuehren. +fehlerkeinezeitwuensche:standardmeldung(meldungkeinezeitwuensche,"");return(1 +);LEAVE zeitwuenschepruefenausfuehren.END PROC zeitwuenschepruefenausfuehren; +PROC erstelleliste:bereitedateiauf;initialisiererow;inittupel(dnrzeitwuensche +);putwert(fnrzwbezug,kenn);statleseschleife(dnrzeitwuensche,schj,schhj, +fnrzwsj,fnrzwhj,PROC zeitwuenschelisten);bereitestatistikauf.bereitedateiauf: +forget(dateiname,quiet);datei:=sequentialfile(output,dateiname);putline(datei +,schulkenndatum(schulname));putline(datei,text(schulkenndatum(schulort),65)+ +date);putline(datei,leerzeile);putline(datei,ueberschrift+anhang+schhj+". "+ +text(schj,2)+"/"+subtext(schj,3));putline(datei,unterstrich+length(anhang)* +"-");putline(datei,leerzeile).initialisiererow:FOR iFROM 1UPTO 4REP FOR j +FROM 1UPTO anzgewichteREP anzwuenschegesamt(i)(j):=0;anznerfwuensche(i)(j):=0 +PER ;PER .bereitestatistikauf:putline(datei,"#page#");putline(datei, +"Endstatistik:");putline(datei,leerzeile);putline(datei,leerzeile); +gibwerteaus(" Stunden ",1);gibwerteaus(" ganze Tage ",2);gibwerteaus( +" Vormittage ",3);gibwerteaus(" Nachmittage",4).END PROC erstelleliste; +PROC gibwerteaus(TEXT CONST objekt,INT CONST row):putline(datei, +"Anzahl Gewichte Summe ");putline(datei, +objekt+" -3 -2 -1 +1 +2 +3 ");putline(datei, +"--------------+-----+-----+-----+-----+-----+-----+------");putline(datei, +"gesamt "+werte(row,TRUE ));putline(datei,"erfüllt "+erfuelltwerte +(row));putline(datei,"nicht erfüllt"+werte(row,FALSE ));putline(datei, +leerzeile);putline(datei,leerzeile).END PROC gibwerteaus;TEXT PROC werte(INT +CONST row,BOOL CONST allewerte):TEXT VAR ausgabe:="";INT VAR summe:=0,eintrag +;IF allewerteTHEN FOR iFROM 1UPTO anzgewichteREP eintrag:=anzwuenschegesamt( +row)(i);summeINCR eintrag;ausgabeCAT text(eintrag,6)PER ELSE FOR iFROM 1UPTO +anzgewichteREP eintrag:=anznerfwuensche(row)(i);summeINCR eintrag;ausgabeCAT +text(eintrag,6)PER FI ;ausgabeCAT text(summe,6);ausgabeEND PROC werte;TEXT +PROC erfuelltwerte(INT CONST row):TEXT VAR ausgabe:="";INT VAR summe:=0, +gesamt,nerf,erf;FOR iFROM 1UPTO anzgewichteREP gesamt:=anzwuenschegesamt(row) +(i);nerf:=anznerfwuensche(row)(i);erf:=gesamt-nerf;summeINCR erf;ausgabeCAT +text(erf,6)PER ;ausgabeCAT text(summe,6);ausgabeEND PROC erfuelltwerte;PROC +zeitwuenschelisten(BOOL VAR b):IF wert(fnrzwsj)<>schjCOR wert(fnrzwhj)<>schhj +COR wert(fnrzwbezug)<>kennCOR dbstatus<>0THEN b:=TRUE ELSE IF +keinezeitwuenscheTHEN keinezeitwuensche:=FALSE FI ;bereiteobjektauf(wert( +fnrzwbezugsobjekt))FI END PROC zeitwuenschelisten;PROC bereiteobjektauf(TEXT +CONST objekt):TEXT VAR bestwunsch,unbestwunsch;INT VAR suchpos:=1,freietage, +freievorm,freienachm,wnerf,wanz;TEXT VAR wunsch:="";standardmeldung( +meldungbearbwird,objekt+ausgabeparam);IF kenn=kennzfaecherTHEN IF pos( +faecherkatalog,trenner+objekt+trenner)=0THEN fehlereintragELSE listeneintrag +FI ELIF bezeichnungzulaessig(kenn,objekt)THEN listeneintragELSE fehlereintrag +FI .fehlereintrag:putline(datei,objekt+": (ungültige Bezeichnung)");putline +(datei,leerzeile).listeneintrag:moobjeintrag:=moeintrag;diobjeintrag:= +dieintrag;miobjeintrag:=mieintrag;doobjeintrag:=doeintrag;frobjeintrag:= +freintrag;saobjeintrag:=saeintrag;uebertragwuensche;putline(datei,objekt+":") +;putline(datei,leerzeile);putline(datei,"Wünsche zu festen Zeiten:");putline( +datei,"(nicht erfüllte sind mit * markiert)");putline(datei, +" 1 2 3 4 5 6 7 8 9 10 11 12");putline(datei, +moobjeintrag+text(bestwzeile,48));putline(datei,diobjeintrag+subtext( +bestwzeile,49,96));putline(datei,miobjeintrag+subtext(bestwzeile,97,144)); +putline(datei,doobjeintrag+subtext(bestwzeile,145,192));putline(datei, +frobjeintrag+subtext(bestwzeile,193,240));putline(datei,saobjeintrag+subtext( +bestwzeile,241));putline(datei,leerzeile);putline(datei, +" im Plan allgemeine Wünsche:");putline(datei, +" frei Anzahl/Gewicht nicht erfüllt");putline(datei, +"ganze Tage "+unbestwtage);putline(datei,"zusätzl. Vorm. "+unbestwvorm) +;putline(datei,"zusätzl. Nachm. "+unbestwnachm);putline(datei,leerzeile); +putline(datei,leerzeile).uebertragwuensche:bestwunsch:=wert( +fnrzwbestimmtewuensche);unbestwunsch:=wert(fnrzwunbestimmtewuensche); +bestwzeile:=bestwurzeile;unbestwtage:=" _ _ _ _ "; +unbestwvorm:=" _ _ _ _ ";unbestwnachm:= +" _ _ _ _ ";tragbestwuenscheein;tragunbestwuenscheein. +tragbestwuenscheein:suchpos:=1;WHILE suchpos<>0REP suchpos:=pos(bestwunsch, +minus,suchpos);IF suchpos<>0THEN wunsch:=subtext(bestwunsch,suchpos,suchpos+1 +);zaehlebestwunsch(1,wunsch,TRUE );IF unterricht(objekt,suchposDIV 2+1)THEN +wunschCAT ausgnerf;zaehlebestwunsch(1,wunsch,FALSE )FI ;replace(bestwzeile, +suchpos*2-1,wunsch);suchposINCR 1FI ;PER ;suchpos:=1;WHILE suchpos<>0REP +suchpos:=pos(bestwunsch,plus,suchpos);IF suchpos<>0THEN wunsch:=subtext( +bestwunsch,suchpos,suchpos+1);zaehlebestwunsch(1,wunsch,TRUE );IF NOT ( +unterricht(objekt,suchposDIV 2+1))THEN wunschCAT ausgnerf;zaehlebestwunsch(1, +wunsch,FALSE )FI ;replace(bestwzeile,suchpos*2-1,wunsch);suchposINCR 1FI ; +PER .tragunbestwuenscheein:anztage:=0;anzvorm:=0;anznachm:=0; +ermittleunbestwdaten(objekt);freietage:=anzunterrichtstage-anztage;freievorm +:=anzvormittage-freietage-anzvorm;freienachm:=anznachmittage-freietage- +anznachm;replace(unbestwtage,ausgfreipos,text(freietage));replace(unbestwvorm +,ausgfreipos,text(freievorm));replace(unbestwnachm,ausgfreipos,text( +freienachm));IF unbestwunsch<>leererunbestwunschTHEN wunsch:=unbestwunschSUB +posanzut;IF wunsch<>" "THEN replace(unbestwtage,ausganzpos,wunsch)FI ;wanz:= +int(wunsch);IF freietage<wanzTHEN wnerf:=wanz-freietage;replace(unbestwtage, +ausgnerfpos,text(wnerf))ELSE wnerf:=0FI ;wunsch:=unbestwunschSUB posgewut;IF +wunsch<>" "THEN replace(unbestwtage,ausggewpos,wunsch)FI ;zaehleunbestwunsch( +2,wanz,wnerf,wunsch);wunsch:=unbestwunschSUB posanzvm;IF wunsch<>" "THEN +replace(unbestwvorm,ausganzpos,wunsch)FI ;wanz:=int(wunsch);IF freievorm<wanz +THEN wnerf:=wanz-freievorm;replace(unbestwvorm,ausgnerfpos,text(wnerf))ELSE +wnerf:=0FI ;wunsch:=unbestwunschSUB posgewvm;IF wunsch<>" "THEN replace( +unbestwvorm,ausggewpos,wunsch)FI ;zaehleunbestwunsch(3,wanz,wnerf,wunsch); +wunsch:=unbestwunschSUB posanznm;IF wunsch<>" "THEN replace(unbestwnachm, +ausganzpos,wunsch)FI ;wanz:=int(wunsch);IF freienachm<wanzTHEN wnerf:=wanz- +freienachm;replace(unbestwnachm,ausgnerfpos,text(wnerf))ELSE wnerf:=0FI ; +wunsch:=unbestwunschSUB posgewnm;IF wunsch<>" "THEN replace(unbestwnachm, +ausggewpos,wunsch)FI ;zaehleunbestwunsch(4,wanz,wnerf,wunsch);FI .END PROC +bereiteobjektauf;PROC ermittleunbestwdaten(TEXT CONST objekt):BOOL VAR +tagnichtgezaehlt:=TRUE ;INT VAR incr:=0,anz,zeitstd;anz:= +anzunterrichtsstunden;FOR iFROM 1UPTO anzunterrichtstage-1REP +tagnichtgezaehlt:=TRUE ;suchevormunterricht;suchenachmunterricht;incrINCR +anzunterrichtsstundenPER ;anz:=anzsamstagstunden;tagnichtgezaehlt:=TRUE ; +suchevormunterricht;suchenachmunterricht.suchevormunterricht:FOR jFROM 1UPTO +anzREP zeitstd:=incr+j;IF (planSUB zeitstd)=kennungvormTHEN IF unterricht( +objekt,incr+j)THEN anzvormINCR 1;anztageINCR 1;tagnichtgezaehlt:=FALSE ; +LEAVE suchevormunterrichtFI ;ELIF (planSUB zeitstd)=kennungnachmTHEN LEAVE +suchevormunterrichtFI ;PER .suchenachmunterricht:FOR jFROM anzDOWNTO 1REP +zeitstd:=incr+j;IF (planSUB zeitstd)=kennungnachmTHEN IF unterricht(objekt, +incr+j)THEN anznachmINCR 1;IF tagnichtgezaehltTHEN anztageINCR 1;LEAVE +suchenachmunterrichtFI ;FI ;ELIF (planSUB zeitstd)=kennungvormTHEN LEAVE +suchenachmunterrichtFI ;PER .END PROC ermittleunbestwdaten;PROC +zaehlebestwunsch(INT CONST rowindex,TEXT CONST wunsch,BOOL CONST erfuellt): +INT VAR gew;IF wunsch="-3"THEN gew:=1ELIF wunsch="-2"THEN gew:=2ELIF wunsch= +"-1"THEN gew:=3ELIF wunsch="+1"THEN gew:=4ELIF wunsch="+2"THEN gew:=5ELIF +wunsch="+3"THEN gew:=6FI ;IF erfuelltTHEN anzwuenschegesamt(rowindex)(gew) +INCR 1ELSE anznerfwuensche(rowindex)(gew)INCR 1FI END PROC zaehlebestwunsch; +PROC zaehleunbestwunsch(INT CONST rowindex,wanz,wnerf,TEXT CONST wunsch):INT +VAR gewicht;SELECT int(wunsch)OF CASE 3:gewicht:=1CASE 2:gewicht:=2OTHERWISE +gewicht:=3END SELECT ;anzwuenschegesamt(rowindex)(gewicht)INCR wanz;IF wnerf +<>0THEN anznerfwuensche(rowindex)(gewicht)INCR wnerfFI END PROC +zaehleunbestwunsch;BOOL PROC unterricht(TEXT CONST objekt,INT CONST zeit): +TEXT VAR lv,ra,par,daten;INT VAR spos,findpos;IF fall=fldsugrupCOR fall= +fldlehrerCOR fall=fldraeumeTHEN objektunterrichtELSE objektindatenderzeitFI . +objektunterricht:planeintraglesen(zeit,kenn,objekt,lv,ra,par);lv<>"". +objektindatenderzeit:IF fall=fldfaecherTHEN daten:=datenderzeit(zeit,kennzlv) +;findpos:=3ELSE daten:=datenderzeit(zeit,kenn);findpos:=1FI ;IF daten=""THEN +FALSE ELSE suchindatenFI .suchindaten:spos:=1;WHILE spos<>0REP spos:=pos( +daten,objekt,spos);IF spos<>0THEN IF (sposMOD 8)=findposTHEN LEAVE unterricht +WITH TRUE FI ;sposINCR 1FI ;PER ;FALSE .END PROC unterricht;PROC +zeitrasterdaten(BOOL VAR b):IF wert(fnrzrsj)<>schjCOR wert(fnrzrhj)<>schhj +COR dbstatus<>0THEN b:=TRUE ELSE planCAT wert(fnrzrkennungteil);FI END PROC +zeitrasterdaten;PROC faecher(BOOL VAR b):faecherkatalogCAT wert(fnrffach)+ +trennerEND PROC faecher;PROC meldungausgeben(INT VAR fstat):IF fstat=2THEN +standardmeldung(meldungserverfehler,"");ELIF fstat=3THEN standardmeldung( +meldungkeinstdplan,"");ELIF fstat=4THEN standardmeldung(meldungkeinesugruppen +,"");ELIF fstat=5THEN standardmeldung(meldungzuvielesugruppen,"")ELIF fstat=6 +THEN standardmeldung(meldungkeinelv,"")ELIF fstat=7THEN standardmeldung( +meldungzuvielelv,"")ELIF fstat=9THEN standardmeldung(meldungbasisinkon,""); +FI END PROC meldungausgeben;END PACKET einhaltungzeitwuenschepruefen + diff --git a/app/schulis/2.2.1/src/4.einzelstdpl.lehrer b/app/schulis/2.2.1/src/4.einzelstdpl.lehrer new file mode 100644 index 0000000..39067e3 --- /dev/null +++ b/app/schulis/2.2.1/src/4.einzelstdpl.lehrer @@ -0,0 +1,113 @@ +PACKET einzelstdpllehrerDEFINES einzelstdpllehrereingang, +einzelstdpllehrerstarten,einzelstdpllehrersonderwerte, +einzelstdpllehrermultistop,einzelstdpllehrerdruckdateibauen:LET swanrede=511, +swlehrername=512,swschuljahr=514,swhalbjahr=515,swtagesstunde=520, +swklassenleitungen=540,swstellvleitungen=541,swaufsichtszeit=542, +swaufsichtsort=543,dateimitvordruck1="vordruck1 einzelstdpl lehrer", +dateimitvordruck2="vordruck2 einzelstdpl raeume",dateimitvordruck3= +"vordruck2 einzelstdpl lehrer",dateimitvordruck4= +"vordruck3 einzelstdpl lehrer";TASK VAR vordruckserver;LET +maxzeichenimvordruck=79;TEXT VAR hj,sj,paraphe:="",anrede,klassenleitung:="", +stellvleitung:="",l:="",r:="",p:="",geplantezeiten;LET maske= +"ms einzelstdpl lehrer eingang",fnr2paraphe=2,fnr3akthj=3,fnr4ausgabebs=4, +fnr5ausgabedr=5,blank=" ",null=0,niltext="", +meldnrkeinestundenplandatenvorhanden=366,meldnrungueltigeparaphe=344, +meldnrkeinelehrerdaten=337,meldnrauswahlunsinnig=56,meldnrbittewarten=69;INT +CONST swzweitezeile:=6,erstestd:=1,letztestd:=12,maxwochstdn:=66,maxwochtage +:=6;BOOL VAR anschreibenaufbszeigen:=TRUE ,einzelanschreiben:=TRUE , +aktuelleshjgewaehlt:=TRUE ;INT VAR eingabestatus,x,meldnr;PROC +einzelstdpllehrereingang:standardvproc(maske)END PROC +einzelstdpllehrereingang;PROC einzelstdpllehrerstarten:vordruckserver:=/ +"anschreiben server";IF maskenwerteokTHEN IF stundenplanokTHEN +startenausfuehrenELSE meldnr:=meldnrkeinestundenplandatenvorhanden; +meldedenfehler;zurueckzumdialog;FI ;ELSE meldedenfehler;zurueckzumdialogFI ;. +meldedenfehler:standardmeldung(meldnr,niltext).zurueckzumdialog:return(1). +startenausfuehren:forget(dateimitvordruck1,quiet);forget(dateimitvordruck2, +quiet);forget(dateimitvordruck3,quiet);forget(dateimitvordruck4,quiet);fetch( +dateimitvordruck1,vordruckserver);fetch(dateimitvordruck2,vordruckserver); +fetch(dateimitvordruck3,vordruckserver);fetch(dateimitvordruck4, +vordruckserver);inittupel(dnrlehrer);putwert(fnrlparaphe,paraphe); +standardmeldung(meldnrbittewarten,niltext);zusammengesetztesanschreiben( +dnrlehrer,anschreibenaufbszeigen,einzelanschreiben,BOOL PROC +einzelstdpllehrersonderwerte,BOOL PROC einzelstdpllehrermultistop,TEXT PROC +einzelstdpllehrerdruckdateibauen);END PROC einzelstdpllehrerstarten;BOOL +PROC stundenplanok:sj:=schulkenndatum("Schuljahr");hj:=schulkenndatum( +"Schulhalbjahr");IF NOT (aktuelleshjgewaehlt)THEN geplanteshjundsjberechnen( +hj,sj)FI ;stundenplanhalbjahrsetzen(hj,sj); +stundenplanbasisundstundenplanholen(eingabestatus);eingabestatus=0OR +eingabestatus=8END PROC stundenplanok;BOOL PROC maskenwerteok:BOOL VAR ok:= +FALSE ;standardpruefe(5,fnr4ausgabebs,fnr5ausgabedr,null,niltext, +eingabestatus);IF eingabestatus<>0THEN meldnr:=meldnrauswahlunsinnig;infeld( +fnr4ausgabebs);ok:=FALSE ELSE anschreibenaufbszeigen:=standardmaskenfeld( +fnr5ausgabedr)=niltext;einzelanschreiben:=standardmaskenfeld(fnr2paraphe)<> +niltext;aktuelleshjgewaehlt:=standardmaskenfeld(fnr3akthj)<>niltext;IF +einzelanschreibenTHEN IF gueltigeparapheTHEN paraphe:=wert(fnrlparaphe);ok:= +TRUE ELSE meldnr:=meldnrungueltigeparaphe;infeld(fnr2paraphe);ok:=FALSE FI ; +ELSE IF dateilehrerleerTHEN meldnr:=meldnrkeinelehrerdaten;infeld(fnr3akthj); +ok:=FALSE ELSE ok:=TRUE FI ;FI ;FI ;okEND PROC maskenwerteok;BOOL PROC +gueltigeparaphe:inittupel(dnrlehrer);putwert(fnrlparaphe,standardmaskenfeld( +fnr2paraphe));search(dnrlehrer,TRUE );dbstatus=0END PROC gueltigeparaphe; +BOOL PROC dateilehrerleer:inittupel(dnrlehrer);search(dnrlehrer);dbstatus<>0 +END PROC dateilehrerleer;BOOL PROC einzelstdpllehrersonderwerte:INT VAR +gemerkterdbstatus;paraphe:=wert(fnrlparaphe);initialisieresonderwerte;IF wert +(fnrlgeschlecht)="m"THEN anrede:="Herrn"ELSE anrede:="Frau"FI ;adressat(wert( +fnrlfamname));setzesonderwert(swschuljahr,subtext(sj,1,2)+"/"+subtext(sj,3,4) +);setzesonderwert(swhalbjahr,hj);setzesonderwert(swanrede,anrede); +setzesonderwert(swlehrername,wert(fnrlfamname));gemerkterdbstatus:=dbstatus; +inittupel(dnraktschuelergruppen);putwert(fnrsgrpsj,sj);putwert(fnrsgrphj,hj); +search(dnraktschuelergruppen);klassenleitung:=niltext;stellvleitung:=niltext; +WHILE (dbstatus=0AND wert(fnrsgrphj)=hj)REP IF wert(fnrsgrplehrer)=wert( +fnrlparaphe)THEN klassenleitungCAT (wert(fnrsgrpjgst)+wert(fnrsgrpkennung)+ +blank)FI ;IF wert(fnrsgrpstellvlehrer)=wert(fnrlparaphe)THEN stellvleitung +CAT (wert(fnrsgrpjgst)+wert(fnrsgrpkennung)+blank)FI ;succ( +dnraktschuelergruppen);PER ;setzesonderwert(swklassenleitungen,klassenleitung +);setzesonderwert(swstellvleitungen,stellvleitung);dbstatus(gemerkterdbstatus +);TRUE END PROC einzelstdpllehrersonderwerte;BOOL PROC +einzelstdpllehrermultistop:BOOL VAR b;IF einzelanschreibenTHEN b:=wert( +fnrlparaphe)=parapheELSE b:=dbstatus=0FI ;bENDPROC einzelstdpllehrermultistop +;TEXT PROC einzelstdpllehrerdruckdateibauen:INT VAR dbstatusintern;LET +stddruckdatei="liste.1",hilfsdatei="hilfsdatei";FILE VAR f;TEXT VAR zeile:="" +,druckdatei:="Lehrer-Einzelplan";TEXT CONST teil1:="---+",teil2:= +"-----------+",teil3:="-----------: ",teil4:="-------------------", +normaletrennlinie:=teil1+5*teil2+teil3,abschlusslinie:=4*teil4+blank; +setzemitseitennummern(TRUE );druckvorbereiten;setzeanzahlderzeichenprozeile( +maxzeichenimvordruck);briefalternative(dateimitvordruck1,hilfsdatei); +zeilenweisehilfsdateiindruckdatei(hilfsdatei);forget(hilfsdatei,quiet); +geplantezeiten:=allezeitenvon("P",paraphe);FOR xFROM erstestdUPTO letztestd +REP datendeszweitenvordrucksindruckdateiPER ;briefalternative( +dateimitvordruck3,hilfsdatei);zeilenweisehilfsdateiindruckdatei(hilfsdatei); +forget(hilfsdatei,quiet);inittupel(dnraufsichtsplan);putwert(fnrapsj,sj); +putwert(fnraphj,hj);putwert(fnrapparaphe,paraphe);search(ixappar,TRUE ); +WHILE dbstatus=0AND wert(fnrapsj)=sjAND wert(fnraphj)=hjAND wert(fnrapparaphe +)=parapheREP setzesonderwert(swaufsichtsort,wert(fnrapaufsichtsort)); +dbstatusintern:=dbstatus;inittupel(dnraufsichtszeiten);putwert(fnrazsj,sj); +putwert(fnrazhj,hj);putwert(fnrapaufsichtszeit,wert(fnrapaufsichtszeit)); +search(dnraufsichtszeiten,TRUE );IF dbstatus=0THEN setzesonderwert( +swaufsichtszeit,wert(fnrazbezeichnung))ELSE setzesonderwert(swaufsichtszeit, +blank)FI ;briefalternative(dateimitvordruck4,hilfsdatei); +zeilenweisehilfsdateiindruckdatei(hilfsdatei);forget(hilfsdatei,quiet); +dbstatus(dbstatusintern);succ(ixappar);PER ;drucknachbereitenohneausdrucken; +rename(stddruckdatei,druckdatei);f:=sequentialfile(modify,druckdatei);toline( +f,1);input(f);druckdatei.datendeszweitenvordrucksindruckdatei:setzesonderwert +(swtagesstunde,text(x,2)); +planeintraegeprowochenstdenlesenundsonderwertesetzen(x);briefalternative( +dateimitvordruck2,hilfsdatei);zeilenweisehilfsdateiindruckdatei(hilfsdatei); +IF x<>letztestdTHEN zeile:=normaletrennlinieELSE zeile:=abschlusslinieFI ; +druckzeileschreiben(zeile);forget(hilfsdatei,quiet);END PROC +einzelstdpllehrerdruckdateibauen;PROC zeilenweisehilfsdateiindruckdatei(TEXT +CONST hilfsdatei):INT VAR i;TEXT VAR zeile:="";FILE VAR f;f:=sequentialfile( +input,hilfsdatei);FOR iFROM 1UPTO lines(f)REP getline(f,zeile); +druckzeileschreiben(zeile)PER ;END PROC zeilenweisehilfsdateiindruckdatei; +PROC planeintraegeprowochenstdenlesenundsonderwertesetzen(INT CONST std):INT +VAR i,wochenstd:=std,sonderwert:=521;TEXT VAR ausgabe;FOR iFROM 1UPTO +maxwochtageREP IF (geplantezeitenSUB wochenstd)="1"THEN planeintraglesen( +wochenstd,"P",paraphe,l,r,p);IF wochenstd<=maxwochstdnTHEN ausgabe:=subtext(l +,1,2);ausgabeCAT blank;ausgabeCAT subtext(l,3,4);ausgabeCAT blank;ausgabeCAT +subtext(l,5,8);setzesonderwert(sonderwert,ausgabe);setzesonderwert(sonderwert ++swzweitezeile,r);ELSE setzesonderwert(sonderwert,blank);setzesonderwert( +sonderwert+swzweitezeile,blank);FI ;ELSE setzesonderwert(sonderwert,blank); +setzesonderwert(sonderwert+swzweitezeile,blank);FI ;ausgabe:=niltext; +sonderwertINCR 1;wochenstdINCR letztestd;PER ;END PROC +planeintraegeprowochenstdenlesenundsonderwertesetzen;END PACKET +einzelstdpllehrer + diff --git a/app/schulis/2.2.1/src/4.einzelstdpl.raeume b/app/schulis/2.2.1/src/4.einzelstdpl.raeume new file mode 100644 index 0000000..aeb0db5 --- /dev/null +++ b/app/schulis/2.2.1/src/4.einzelstdpl.raeume @@ -0,0 +1,86 @@ +PACKET einzelstdplraeumeDEFINES einzelstdplraeumeeingang, +einzelstdplraeumestarten,einzelstdplraeumesonderwerte, +einzelstdplraeumemultistop,einzelstdplraeumedruckdateibauen:LET maske= +"ms einzelstdpl raeume eingang",fnr2raum=2,fnr3akthj=3,fnr4ausgabebs=4, +fnr5ausgabedr=5,blank=" ",null=0,niltext="", +fehlermeldnrkeinestundenplandatenvorhanden=366,fehlermeldnrungueltigerraum= +359,fehlermeldnrauswahlunsinnig=56,fehlermeldnrbestandraeumeleer=365, +meldnrbittewarten=69,swraum=511,swschuljahr=512,swhalbjahr=513,swraumlangtext +=514,swtagesstunde=520,maxzeichenimvordruck=79;TASK VAR vordruckserver;TEXT +CONST dateimitvordruck1:="vordruck1 einzelstdpl raeume",dateimitvordruck2:= +"vordruck2 einzelstdpl raeume",bestandnameraeume:="c02 raeume",strich:="-", +kreuz:="+",abschlusslinie:=76*strich+blank,normaletrennlinie:=3*strich+kreuz+ +5*(11*strich+kreuz)+11*strich+": ";TEXT VAR hj,sj,raum:="",l:="",r:="",p:=""; +BOOL VAR anschreibenaufbszeigen:=TRUE ,einzelanschreiben:=TRUE , +aktuelleshjgewaehlt:=TRUE ;INT VAR eingabestatus,i,x,fehlermeldnr;INT CONST +aktuellerindex:=dnrschluessel,maxwochstdn:=66,erstestd:=1,letztestd:=12;PROC +einzelstdplraeumeeingang:standardvproc(maske)END PROC +einzelstdplraeumeeingang;PROC einzelstdplraeumestarten:IF maskenwerteokTHEN +IF stundenplanokTHEN startenausfuehrenELSE fehlermeldnr:= +fehlermeldnrkeinestundenplandatenvorhanden;meldedenfehler;zurueckzumdialog; +FI ;ELSE meldedenfehler;zurueckzumdialogFI ;.meldedenfehler:standardmeldung( +fehlermeldnr,niltext).zurueckzumdialog:return(1).startenausfuehren: +vordruckserver:=/"anschreiben server";forget(dateimitvordruck1,quiet);forget( +dateimitvordruck2,quiet);fetch(dateimitvordruck1,vordruckserver);fetch( +dateimitvordruck2,vordruckserver);inittupel(dnrschluessel);putwert( +fnrschlsachgebiet,bestandnameraeume);putwert(fnrschlschluessel,raum); +standardmeldung(meldnrbittewarten,niltext);zusammengesetztesanschreiben( +aktuellerindex,anschreibenaufbszeigen,einzelanschreiben,BOOL PROC +einzelstdplraeumesonderwerte,BOOL PROC einzelstdplraeumemultistop,TEXT PROC +einzelstdplraeumedruckdateibauen);END PROC einzelstdplraeumestarten;BOOL +PROC stundenplanok:stundenplanhalbjahrsetzen(hj,sj); +stundenplanbasisundstundenplanholen(eingabestatus);eingabestatus=0OR +eingabestatus=8END PROC stundenplanok;BOOL PROC maskenwerteok:BOOL VAR ok; +standardpruefe(5,fnr4ausgabebs,fnr5ausgabedr,null,niltext,eingabestatus);IF +eingabestatus<>0THEN fehlermeldnr:=fehlermeldnrauswahlunsinnig;infeld( +fnr4ausgabebs);ok:=FALSE ELSE anschreibenaufbszeigen:=standardmaskenfeld( +fnr5ausgabedr)=niltext;einzelanschreiben:=standardmaskenfeld(fnr2raum)<> +niltext;aktuelleshjgewaehlt:=standardmaskenfeld(fnr3akthj)<>niltext;sj:= +schulkenndatum("Schuljahr");hj:=schulkenndatum("Schulhalbjahr");IF NOT ( +aktuelleshjgewaehlt)THEN geplanteshjundsjberechnen(hj,sj)FI ;IF +einzelanschreibenTHEN IF gueltigerraumTHEN ok:=TRUE ELSE fehlermeldnr:= +fehlermeldnrungueltigerraum;ok:=FALSE FI ;ELSE IF schluesselbestandleerTHEN +fehlermeldnr:=fehlermeldnrbestandraeumeleer;infeld(fnr2raum);ok:=FALSE ELSE +raum:=wert(fnrschlschluessel);ok:=TRUE FI ;FI ;FI ;okEND PROC maskenwerteok; +BOOL PROC gueltigerraum:raum:=standardmaskenfeld(fnr2raum);inittupel( +dnrschluessel);putwert(fnrschlsachgebiet,bestandnameraeume);putwert( +fnrschlschluessel,raum);search(dnrschluessel,TRUE );dbstatus=0END PROC +gueltigerraum;BOOL PROC schluesselbestandleer:inittupel(dnrschluessel); +putwert(fnrschlsachgebiet,bestandnameraeume);search(dnrschluessel);raum:=wert +(fnrschlschluessel);dbstatus<>0COR wert(fnrschlsachgebiet)<>bestandnameraeume +END PROC schluesselbestandleer;BOOL PROC einzelstdplraeumesonderwerte: +initialisieresonderwerte;adressat(raum);setzesonderwert(swschuljahr,subtext( +sj,1,2)+"/"+subtext(sj,3,4));setzesonderwert(swhalbjahr,hj);setzesonderwert( +swraum,wert(fnrschlschluessel));setzesonderwert(swraumlangtext,wert( +fnrschllangtext));TRUE END PROC einzelstdplraeumesonderwerte;BOOL PROC +einzelstdplraeumemultistop:BOOL VAR b;IF einzelanschreibenTHEN b:=wert( +fnrschlschluessel)=raumELSE b:=wert(fnrschlsachgebiet)=bestandnameraeumeFI ;b +ENDPROC einzelstdplraeumemultistop;TEXT PROC einzelstdplraeumedruckdateibauen +:LET stddruckdatei="liste.1",hilfsdatei="hilfsdatei";FILE VAR f;TEXT VAR +zeile:="",druckdatei:="Raumplan";forget(druckdatei,quiet);druckvorbereiten; +setzeanzahlderzeichenprozeile(maxzeichenimvordruck);raum:=wert( +fnrschlschluessel);datendeserstenvordrucksindruckdatei;FOR xFROM erstestd +UPTO letztestdREP datendeszweitenvordrucksindruckdateiPER ;rename( +stddruckdatei,druckdatei);f:=sequentialfile(modify,druckdatei);toline(f,1); +input(f);druckdatei.datendeserstenvordrucksindruckdatei:briefalternative( +dateimitvordruck1,hilfsdatei);zeilenweisehilfsdateiindruckdatei(hilfsdatei); +forget(hilfsdatei,quiet);.datendeszweitenvordrucksindruckdatei: +setzesonderwert(swtagesstunde,text(x,2)); +planeintraegeprowochenstdenlesenundsonderwertesetzen(x);briefalternative( +dateimitvordruck2,hilfsdatei);zeilenweisehilfsdateiindruckdatei(hilfsdatei); +IF x<>letztestdTHEN zeile:=normaletrennlinieELSE zeile:=abschlusslinieFI ; +druckzeileschreiben(zeile);forget(hilfsdatei,quiet);END PROC +einzelstdplraeumedruckdateibauen;PROC zeilenweisehilfsdateiindruckdatei(TEXT +CONST hilfsdatei):TEXT VAR zeile:=niltext;FILE VAR f;f:=sequentialfile(input, +hilfsdatei);FOR iFROM 1UPTO lines(f)REP getline(f,zeile);druckzeileschreiben( +zeile)PER ;END PROC zeilenweisehilfsdateiindruckdatei;PROC +planeintraegeprowochenstdenlesenundsonderwertesetzen(INT CONST std):INT VAR +wochenstd:=std,sonderwert:=521;TEXT VAR ausgabe;WHILE wochenstd<=maxwochstdn +REP planeintraglesen(wochenstd,"R",raum,l,r,p);IF r<>""THEN ausgabe:=subtext( +l,1,2);ausgabeCAT blank;ausgabeCAT subtext(l,3,4);ausgabeCAT blank;ausgabe +CAT subtext(l,5,8);setzesonderwert(sonderwert,ausgabe);setzesonderwert( +sonderwert+6,p);ELSE setzesonderwert(sonderwert,blank);setzesonderwert( +sonderwert+6,blank);FI ;ausgabe:=niltext;sonderwertINCR 1;wochenstdINCR 12; +PER ;END PROC planeintraegeprowochenstdenlesenundsonderwertesetzen;END +PACKET einzelstdplraeume; + diff --git a/app/schulis/2.2.1/src/4.einzelstdpl.sek1 b/app/schulis/2.2.1/src/4.einzelstdpl.sek1 new file mode 100644 index 0000000..1f72cd0 --- /dev/null +++ b/app/schulis/2.2.1/src/4.einzelstdpl.sek1 @@ -0,0 +1,233 @@ +PACKET einzelstdplsek1DEFINES einzelstdplsek1eingang,einzelstdplsek1starten, +einzelstdplsek1sonderwerte,einzelstdplsek1multistop, +einzelstdplsek1druckdateibauen:LET laengelv=8,geplantestd="1", +maxlvgnproschuelergr=100,maxwochstdn=66,swschuelergruppe=511,swschuljahr=512, +swhalbjahr=513,swklassenleiter=514,swstellvertreter=516,swtagesstunde=520, +sw4fach=518,sw4kopplung=519,sw4fachlangtext=520,sw4erllehrer=521,sw6kopplung= +530,sw7lv=540,maske="ms einzelstdpl sek1 eingang",fnr2jgst=2,fnr3kennung=3, +fnr4ohneerlaeuterung=4,fnr5akthj=5,fnr6ausgabebs=6,fnr7ausgabedr=7,blank=" ", +vierblanks=" ",null=0,niltext="",meldnrauswahlunsinnig=56, +meldnrbittewarten=69,meldnrkeinestundenplandatenvorhanden=366, +meldnrkeineentsprechendenschuelerda=127,meldnrungueltigeklassengr=320, +meldnrungueltigejgst=146,maxzeichenimvordruck=79;TASK VAR vordruckserver; +TEXT CONST dateimitvordruck1:="vordruck1 einzelstdpl sek1",dateimitvordruck2 +:="vordruck2 einzelstdpl sek1",dateimitvordruck3:= +"vordruck3 einzelstdpl sek1",dateimitvordruck4:="vordruck4 einzelstdpl sek1", +dateimitvordruck5:="vordruck5 einzelstdpl sek1",dateimitvordruck6:= +"vordruck6 einzelstdpl sek1",dateimitvordruck7:="vordruck7 einzelstdpl sek1", +strich:="-",kreuz:="+",abschlusslinie:=76*strich+blank,normaletrennlinie:=3* +strich+kreuz+5*(11*strich+kreuz)+11*strich+": ";TEXT VAR kopplg:="",hj,sj, +sjaufber,jgst:="",kennung:="",stdplanrede,uebfolgeseiten,l:="",r:="",p:="", +lvgnproschuelgr,lv,paraphezurlv,string,schuelergr,kopplungsbez,hilfstext, +lehrer:="";BOUND ROW maxlvgnproschuelergrTEXT VAR zeitenzulv;BOUND ROW +maxwochstdnTEXT VAR kopplungen;BOOL VAR gesamtesek1:=FALSE ,bestjgst:=FALSE , +bestschuelergruppe:=FALSE ,korrektewahl:=FALSE ,anschreibenaufbszeigen:=TRUE +,miterlaeuterung:=TRUE ,einzelanschreiben:=TRUE ,aktuelleshjgewaehlt:=TRUE ; +INT VAR anzzeilen,eingabestatus,i,x,y,z:=0,anzlvgnprokopplg, +anzlvgnproschuelergr,meldnr;INT CONST aktuellerindex:=dnraktschuelergruppen, +erstestd:=1,letztestd:=12,sek1max:=10,sek1min:=5,maxwochtage:=6;PROC +einzelstdplsek1eingang:standardvproc(maske)END PROC einzelstdplsek1eingang; +PROC einzelstdplsek1starten:IF maskenwerteokTHEN IF stundenplanokTHEN +startenausfuehrenELSE meldnr:=meldnrkeinestundenplandatenvorhanden; +meldedenfehler;zurueckzumdialog;FI ;ELSE meldedenfehler;zurueckzumdialogFI ;. +meldedenfehler:standardmeldung(meldnr,niltext).zurueckzumdialog:return(1). +startenausfuehren:vordruckserver:=/"anschreiben server";forget( +dateimitvordruck1,quiet);forget(dateimitvordruck2,quiet);fetch( +dateimitvordruck1,vordruckserver);fetch(dateimitvordruck2,vordruckserver); +forget("datenraum1",quiet);forget("datenraum2",quiet);IF miterlaeuterungTHEN +forget(dateimitvordruck3,quiet);forget(dateimitvordruck4,quiet);forget( +dateimitvordruck5,quiet);forget(dateimitvordruck6,quiet);forget( +dateimitvordruck7,quiet);fetch(dateimitvordruck3,vordruckserver);fetch( +dateimitvordruck4,vordruckserver);fetch(dateimitvordruck5,vordruckserver); +fetch(dateimitvordruck6,vordruckserver);fetch(dateimitvordruck7, +vordruckserver);FI ;setzesonderwerteschulkenndaten;standardmeldung( +meldnrbittewarten,niltext);zusammengesetztesanschreiben(aktuellerindex, +anschreibenaufbszeigen,einzelanschreiben,BOOL PROC einzelstdplsek1sonderwerte +,BOOL PROC einzelstdplsek1multistop,TEXT PROC einzelstdplsek1druckdateibauen) +;END PROC einzelstdplsek1starten;BOOL PROC maskenwerteok:BOOL VAR ok:=FALSE ; +standardpruefe(5,fnr6ausgabebs,fnr7ausgabedr,null,niltext,eingabestatus);IF +eingabestatus<>0THEN meldnr:=meldnrauswahlunsinnig;infeld(fnr6ausgabebs); +ELSE sortierungsetzen;aktuelleshjgewaehlt:=standardmaskenfeld(fnr5akthj)<> +niltext;sj:=schulkenndatum("Schuljahr");hj:=schulkenndatum("Schulhalbjahr"); +IF NOT (aktuelleshjgewaehlt)THEN geplanteshjundsjberechnen(hj,sj)FI ;sjaufber +:=subtext(sj,1,2)+"/"+subtext(sj,3,4);anschreibenaufbszeigen:= +standardmaskenfeld(fnr7ausgabedr)=niltext;miterlaeuterung:=standardmaskenfeld +(fnr4ohneerlaeuterung)=niltext;korrektewahl:=FALSE ;inittupel( +dnraktschuelergruppen);putwert(fnrsgrpsj,sj);putwert(fnrsgrphj,hj);IF +gesamtesek1THEN IF gueltigesek1THEN einzelanschreiben:=FALSE ;ok:=TRUE ELSE +meldnr:=meldnrkeineentsprechendenschuelerda;infeld(fnr2jgst)FI ;ELIF bestjgst +THEN IF gueltigejgstTHEN einzelanschreiben:=FALSE ;ok:=TRUE ELSE meldnr:= +meldnrungueltigejgst;infeld(fnr2jgst)FI ;ELIF bestschuelergruppeTHEN IF +gueltigeschuelergrTHEN einzelanschreiben:=TRUE ;ok:=TRUE ELSE meldnr:= +meldnrungueltigeklassengr;infeld(fnr2jgst)FI ;ELSE meldnr:= +meldnrauswahlunsinnig;infeld(fnr2jgst);FI ;FI ;ok.sortierungsetzen:IF ( +standardmaskenfeld(fnr2jgst)=niltextAND standardmaskenfeld(fnr3kennung)= +niltext)THEN gesamtesek1:=TRUE ;ELSE IF (standardmaskenfeld(fnr2jgst)<> +niltextAND standardmaskenfeld(fnr3kennung)<>niltext)THEN bestschuelergruppe:= +TRUE ELSE IF standardmaskenfeld(fnr3kennung)=niltextTHEN bestjgst:=TRUE FI ; +FI ;FI END PROC maskenwerteok;BOOL PROC stundenplanok: +stundenplanhalbjahrsetzen(hj,sj);stundenplanbasisundstundenplanholen( +eingabestatus);eingabestatus=0OR eingabestatus=8END PROC stundenplanok;BOOL +PROC gueltigesek1:search(dnraktschuelergruppen);IF (sek1min<=int(wert( +fnrsgrpjgst))AND sek1max>=int(wert(fnrsgrpjgst))AND dbstatus=0)THEN IF length +(wert(fnrsgrpjgst))=1THEN jgst:="0"+wert(fnrsgrpjgst);ELSE jgst:=wert( +fnrsgrpjgst)FI ;kennung:=wert(fnrsgrpkennung);korrektewahl:=TRUE FI ; +korrektewahlEND PROC gueltigesek1;BOOL PROC gueltigejgst:IF length( +standardmaskenfeld(fnr2jgst))=1THEN jgst:="0"+standardmaskenfeld(fnr2jgst) +ELSE jgst:=standardmaskenfeld(fnr2jgst)FI ;IF int(jgst)<=sek1maxAND int(jgst) +>=sek1minTHEN putwert(fnrsgrpjgst,jgst);search(dnraktschuelergruppen);IF +dbstatus=0THEN kennung:=wert(fnrsgrpkennung);korrektewahl:=TRUE FI ;FI ; +korrektewahlEND PROC gueltigejgst;BOOL PROC gueltigeschuelergr:IF length( +standardmaskenfeld(fnr2jgst))=1THEN jgst:="0"+standardmaskenfeld(fnr2jgst) +ELSE jgst:=standardmaskenfeld(fnr2jgst)FI ;kennung:=standardmaskenfeld( +fnr3kennung);IF int(jgst)<=sek1maxAND int(jgst)>=sek1minTHEN putwert( +fnrsgrpjgst,jgst);putwert(fnrsgrpkennung,kennung);search( +dnraktschuelergruppen,TRUE );IF dbstatus=0THEN korrektewahl:=TRUE FI ;FI ; +korrektewahlEND PROC gueltigeschuelergr;BOOL PROC einzelstdplsek1multistop: +BOOL VAR b;IF bestschuelergruppeTHEN b:=intwert(fnrsgrpsj)=int(sj)AND intwert +(fnrsgrphj)=int(hj)AND intwert(fnrsgrpjgst)=int(jgst)AND wert(fnrsgrpkennung) +=kennungAND dbstatus=okELIF bestjgstTHEN b:=intwert(fnrsgrpsj)=int(sj)AND +intwert(fnrsgrphj)=int(hj)AND intwert(fnrsgrpjgst)=int(jgst)AND dbstatus=ok +ELSE b:=intwert(fnrsgrpsj)=int(sj)AND intwert(fnrsgrphj)=int(hj)AND intwert( +fnrsgrpjgst)<=sek1maxAND intwert(fnrsgrpjgst)>=sek1minAND dbstatus=okFI ;b +ENDPROC einzelstdplsek1multistop;BOOL PROC einzelstdplsek1sonderwerte:INT +VAR gemerkterdbstatus;initialisieresonderwerte;setzesonderwert(swschuljahr, +sjaufber);setzesonderwert(swhalbjahr,hj);IF length(wert(fnrsgrpjgst))=1THEN +jgst:="0"+wert(fnrsgrpjgst);ELSE jgst:=wert(fnrsgrpjgst)FI ;kennung:=wert( +fnrsgrpkennung);schuelergr:=jgst+kennung;setzesonderwert(swschuelergruppe, +jgst+kennung);adressat(schuelergr);gemerkterdbstatus:=dbstatus;inittupel( +dnrlehrer);putwert(fnrlparaphe,wert(fnrsgrplehrer));search(dnrlehrer,TRUE ); +IF dbstatus=0THEN IF wert(fnrlgeschlecht)="m"THEN lehrer:="Hr. "ELSE lehrer:= +"Fr. "FI ;hilfstext:=wert(fnrlamtsbeztitel);IF hilfstext<>niltextTHEN lehrer +CAT hilfstext;lehrerCAT blank;FI ;hilfstext:=wert(fnrlzusatz);IF hilfstext<> +niltextTHEN lehrerCAT hilfstext;lehrerCAT blank;FI ;lehrerCAT wert( +fnrlfamname);setzesonderwert(swklassenleiter,lehrer);FI ;inittupel(dnrlehrer) +;putwert(fnrlparaphe,wert(fnrsgrpstellvlehrer));search(dnrlehrer,TRUE );IF +dbstatus=0THEN IF wert(fnrlgeschlecht)="m"THEN lehrer:="Hr. "ELSE lehrer:= +"Fr. "FI ;hilfstext:=wert(fnrlamtsbeztitel);IF hilfstext<>niltextTHEN lehrer +CAT hilfstext;lehrerCAT blank;FI ;hilfstext:=wert(fnrlzusatz);IF hilfstext<> +niltextTHEN lehrerCAT hilfstext;lehrerCAT blank;FI ;lehrerCAT wert( +fnrlfamname);setzesonderwert(swstellvertreter,lehrer);FI ;dbstatus( +gemerkterdbstatus);TRUE END PROC einzelstdplsek1sonderwerte;TEXT PROC +einzelstdplsek1druckdateibauen:LET stddruckdatei="liste.1",druckdatei= +"Stundenplan",hilfsdatei="hilfsdatei";FILE VAR f;IF miterlaeuterungTHEN +kopplungsmerkrowinitialisieren;setzemitseitennummern(TRUE )FI ;forget( +druckdatei,quiet);druckvorbereiten;setzeanzahlderzeichenprozeile( +maxzeichenimvordruck);uebfolgeseiten:="Stundenplan für Klasse "+schuelergr+ +"(Schuljahr "+sjaufber+", "+hj+". Halbjahr)";anzzeilen:=1;briefalternative( +dateimitvordruck1,hilfsdatei);zeilenweisehilfsdateiindruckdatei(hilfsdatei); +forget(hilfsdatei,quiet);proschuelergruppeallelvgnmitzeitenind2ablegen;FOR x +FROM erstestdUPTO letztestdREP +datendeszweitenvordrucksindruckdateiundggfkopplgmerken(x)PER ;IF +miterlaeuterungTHEN briefalternative(dateimitvordruck3,hilfsdatei); +zeilenweisehilfsdateiindruckdatei(hilfsdatei);forget(hilfsdatei,quiet);FOR x +FROM 1UPTO anzlvgnproschuelergrREP datendesviertenvordrucksindruckdatei;PER ; +IF anzzeilen+8>=drucklaengeTHEN seitenwechsel;druckzeileschreiben( +uebfolgeseiten);druckzeileschreiben(blank);anzzeilen:=3FI ;briefalternative( +dateimitvordruck5,hilfsdatei);zeilenweisehilfsdateiindruckdatei(hilfsdatei); +forget(hilfsdatei,quiet);FOR xFROM 1UPTO maxwochstdnREP +datendessechstenundsiebtenvordrucksindruckdatei(x);PER ;FI ; +drucknachbereitenohneausdrucken;rename(stddruckdatei,druckdatei);f:= +sequentialfile(modify,druckdatei);toline(f,1);input(f);druckdatei. +kopplungsmerkrowinitialisieren:forget("datenraum1",quiet);kopplungen:=new( +"datenraum1");FOR xFROM 1UPTO maxwochstdnREP kopplungen(x):=niltext;PER . +proschuelergruppeallelvgnmitzeitenind2ablegen:lvgnproschuelgr:= +lvderschuelergruppe(schuelergr);anzlvgnproschuelergr:=(length(lvgnproschuelgr +))DIV laengelv;forget("datenraum2",quiet);zeitenzulv:=new("datenraum2");INT +VAR position:=0;FOR xFROM 1UPTO anzlvgnproschuelergrREP lv:=subtext( +lvgnproschuelgr,position+1,position+laengelv);string:=allezeitenvon("L",lv); +stringCAT lv;zeitenzulv(x):=string;positionINCR laengelv;PER ;FOR xFROM +anzlvgnproschuelergr+1UPTO maxlvgnproschuelergrREP zeitenzulv(x):=niltext; +PER ;.datendesviertenvordrucksindruckdatei:TEXT VAR fach:=subtext(zeitenzulv( +x),maxwochstdn+3,maxwochstdn+4);fachCAT blank;setzesonderwert(sw4fach,fach); +IF length(zeitenzulv(x))>maxwochstdn+laengelvTHEN kopplg:=subtext(zeitenzulv( +x),maxwochstdn+laengelv+1,maxwochstdn+2*laengelv);setzesonderwert(sw4kopplung +,"("+kopplg+")");ELSE setzesonderwert(sw4kopplung,10*blank)FI ;inittupel( +dnrfaecher);putwert(fnrffach,compress(fach));search(dnrfaecher,TRUE );IF +dbstatus=okTHEN setzesonderwert(sw4fachlangtext,wert(fnrffachbez))ELSE +setzesonderwert(sw4fachlangtext,blank)FI ;paraphezurlv:=datenzurlv("P", +subtext(zeitenzulv(x),maxwochstdn+1,maxwochstdn+laengelv));inittupel( +dnrlehrer);putwert(fnrlparaphe,compress(paraphezurlv));search(dnrlehrer,TRUE +);IF dbstatus=okTHEN IF wert(fnrlgeschlecht)="w"THEN lehrer:="Fr. "ELSE +lehrer:="Hr. "FI ;hilfstext:=wert(fnrlamtsbeztitel);IF hilfstext<>niltext +THEN lehrerCAT hilfstext;lehrerCAT blank;FI ;hilfstext:=wert(fnrlzusatz);IF +hilfstext<>niltextTHEN lehrerCAT hilfstext;lehrerCAT blank;FI ;lehrerCAT wert +(fnrlfamname);setzesonderwert(sw4erllehrer,lehrer);ELSE setzesonderwert( +sw4erllehrer,blank);FI ;briefalternative(dateimitvordruck4,hilfsdatei); +zeilenweisehilfsdateiindruckdatei(hilfsdatei);forget(hilfsdatei,quiet);END +PROC einzelstdplsek1druckdateibauen;PROC zeilenweisehilfsdateiindruckdatei( +TEXT CONST hilfsdatei):TEXT VAR zeile:=niltext;FILE VAR f;f:=sequentialfile( +input,hilfsdatei);FOR iFROM 1UPTO lines(f)REP getline(f,zeile);anzzeilenINCR +1;IF anzzeilen<drucklaengeTHEN druckzeileschreiben(zeile);ELSE seitenwechsel; +druckzeileschreiben(uebfolgeseiten);druckzeileschreiben(blank); +druckzeileschreiben(zeile);anzzeilen:=3;FI ;PER ;END PROC +zeilenweisehilfsdateiindruckdatei;PROC +datendeszweitenvordrucksindruckdateiundggfkopplgmerken(INT CONST std):LET +hilfsdatei="hilfsdatei";TEXT VAR zeile:=niltext;FILE VAR f;setzesonderwert( +swtagesstunde,text(std,2));IF miterlaeuterungTHEN +stdplanprowochstdlesenswsetzenunddatenprokopplgmerken(std)ELSE +stdplanprowochstdlesenundswsetzen(std)FI ;briefalternative(dateimitvordruck2, +hilfsdatei);zeilenweisehilfsdateiindruckdatei(hilfsdatei);f:=sequentialfile( +input,hilfsdatei);IF std<>letztestdTHEN zeile:=normaletrennlinieELSE zeile:= +abschlusslinieFI ;druckzeileschreiben(zeile);anzzeilenINCR 1;forget( +hilfsdatei,quiet);END PROC +datendeszweitenvordrucksindruckdateiundggfkopplgmerken;PROC +datendessechstenundsiebtenvordrucksindruckdatei(INT CONST d1index):LET +hilfsdatei="hilfsdatei";FILE VAR f;INT VAR y,z,index:=d1index;TEXT VAR tagstd +,zeiten,altekopplg,fach,allelvsderkopplg;INT CONST maxauszugebendezeiten:=8; +INT VAR anzzeitenprokopplg,poslv,sonderwert;IF kopplungen(index)<>niltext +THEN altekopplg:=kopplungen(index);setzesonderwert(sw6kopplung,altekopplg); +zeiten:=text(index,2);FOR zFROM index+1UPTO maxwochstdnREP IF kopplungen(z)= +altekopplgTHEN zeitenCAT text(z,2);kopplungen(z):=niltext;FI ;PER ; +anzzeitenprokopplg:=length(zeiten)DIV 2;poslv:=1;sonderwert:=sw6kopplung+1; +FOR zFROM 1UPTO 8REP IF anzzeitenprokopplg>=zTHEN tagstd:=subtext(zeiten, +poslv,poslv+1);setzesonderwert(sonderwert,tagstunde(int(tagstd),TRUE ));ELSE +setzesonderwert(sonderwert,blank)FI ;poslvINCR 2;sonderwertINCR 1PER ; +briefalternative(dateimitvordruck6,hilfsdatei); +zeilenweisehilfsdateiindruckdatei(hilfsdatei);forget(hilfsdatei,quiet); +allelvsderkopplg:=allelvmit("K",altekopplg);anzlvgnprokopplg:=(length( +allelvsderkopplg)DIV laengelv);poslv:=1;TEXT VAR lvderkopplg;BOOL VAR +lvmind1malgeplant;FOR yFROM 1UPTO anzlvgnprokopplgREP lvmind1malgeplant:= +FALSE ;lvderkopplg:=subtext(allelvsderkopplg,poslv,poslv+7);IF pos( +lvgnproschuelgr,lvderkopplg)<>0THEN +fuerallezeitenderlvplaneintraegelesenundsonderwertesetzen;FI ;IF +lvmind1malgeplantTHEN briefalternative(dateimitvordruck7,hilfsdatei); +zeilenweisehilfsdateiindruckdatei(hilfsdatei);forget(hilfsdatei,quiet);FI ; +poslvINCR laengelv;PER ;TEXT VAR leerzeile:=blank;druckzeileschreiben( +leerzeile);FI ;.fuerallezeitenderlvplaneintraegelesenundsonderwertesetzen: +TEXT VAR l,r,p;INT VAR zeit,poszeit;sonderwert:=sw7lv;fach:=subtext( +lvderkopplg,3,4);setzesonderwert(sonderwert,fach);poszeit:=1;FOR zFROM 1UPTO +maxauszugebendezeitenREP sonderwertINCR 1;IF anzzeitenprokopplg>=zTHEN zeit:= +int(subtext(zeiten,poszeit,poszeit+1));IF lvgeplant(zeit,lvderkopplg)THEN +planeintraglesen(zeit,"L",lvderkopplg,l,r,p);IF r=vierblanksTHEN +setzesonderwert(sonderwert,"x");ELSE setzesonderwert(sonderwert,r);FI ; +lvmind1malgeplant:=TRUE ;FI ;ELSE setzesonderwert(sonderwert,blank);FI ; +poszeitINCR 2PER END PROC datendessechstenundsiebtenvordrucksindruckdatei; +PROC stdplanprowochstdlesenundswsetzen(INT CONST std):INT VAR x,sonderwert:= +521;INT VAR wochenstd:=std;FOR iFROM 1UPTO maxwochtageREP IF wochenstd<= +maxwochstdnTHEN string:="";FOR xFROM 1UPTO anzlvgnproschuelergrREP IF ( +zeitenzulv(x)SUB wochenstd)=geplantestdTHEN stringCAT (subtext(zeitenzulv(x), +maxwochstdn+1,maxwochstdn+laengelv));FI ;PER ;IF length(string)<=laengelv +THEN planeintraglesen(wochenstd,"L",string,l,r,p);setzesonderwert(sonderwert, +subtext(l,3,4)+" "+r)ELSE planeintraglesen(wochenstd,"L",subtext(string,1,8), +l,r,p);setzesonderwert(sonderwert,"*"+datenzurlv("K",l))FI ;wochenstdINCR +letztestd;sonderwertINCR 1;ELSE setzesonderwert(sonderwert,blank)FI ;PER ; +END PROC stdplanprowochstdlesenundswsetzen;PROC +stdplanprowochstdlesenswsetzenunddatenprokopplgmerken(INT CONST stunde):INT +VAR x,pos,posstring,sonderwert:=521;INT VAR wochenstd:=stunde;TEXT VAR +lvposimrow;FOR iFROM 1UPTO maxwochtageREP IF wochenstd<=maxwochstdnTHEN +string:="";lvposimrow:=niltext;FOR xFROM 1UPTO anzlvgnproschuelergrREP IF ( +zeitenzulv(x)SUB wochenstd)=geplantestdTHEN stringCAT (subtext(zeitenzulv(x), +maxwochstdn+1,maxwochstdn+laengelv));lvposimrowCAT text(x,3);FI ;PER ;IF +length(lvposimrow)=3THEN planeintraglesen(wochenstd,"L",string,l,r,p); +setzesonderwert(sonderwert,subtext(l,3,4)+" "+r);ELIF length(lvposimrow)>3 +THEN kopplungsbez:=datenzurlv("K",subtext(string,1,laengelv));setzesonderwert +(sonderwert,"*"+kopplungsbez);kopplungen(wochenstd):=kopplungsbez;pos:=1; +posstring:=1;FOR yFROM 1UPTO (length(lvposimrow)DIV 3)REP IF length( +zeitenzulv(int(subtext(lvposimrow,pos,pos+2))))=maxwochstdn+laengelvTHEN +zeitenzulv(int(subtext(lvposimrow,pos,pos+2)))CAT kopplungsbezFI ;posINCR 3; +posstringINCR 8PER ;ELSE setzesonderwert(sonderwert,blank);FI ;wochenstdINCR +letztestd;sonderwertINCR 1;ELSE setzesonderwert(sonderwert,blank)FI ;PER ; +END PROC stdplanprowochstdlesenswsetzenunddatenprokopplgmerken;END PACKET +einzelstdplsek1; + diff --git a/app/schulis/2.2.1/src/4.einzelstdpl.sek2 b/app/schulis/2.2.1/src/4.einzelstdpl.sek2 new file mode 100644 index 0000000..17bc9bd --- /dev/null +++ b/app/schulis/2.2.1/src/4.einzelstdpl.sek2 @@ -0,0 +1,197 @@ +PACKET einzelstdplsek2DEFINES einzelstdplsek2eingang,einzelstdplsek2starten, +einzelstdplsek2sonderwerte,einzelstdplsek2multistop, +einzelstdplsek2druckdateibauen:LET swrufname=511,swfamname=512,swgebdat=513, +swschuljahr=514,swhalbjahr=515,swtutorkurs=516,swtagesstunde=520,swmozeile1= +521,swsazeile1=526,swlv=540,swlehrername=541,maske= +"ms einzelstdpl sek2 eingang",fnr2jgst=2,fnr3famname=3,fnr4rufname=4, +fnr5gebdat=5,fnr6ausgbs=6,fnr7ausgdr=7,meldnrauswahlunsinnig=56, +meldnrdatenexistierennicht=59,meldnrbittewarten=69, +meldnrschuelernichtimentsprbestand=126,meldnrpraezisieren=129, +meldnrungueltigesdatum=157,meldnrjgstoderschueler=318, +meldnrkeinestundenplandatenvorhanden=366,meldnrfalschejgstangabe=404, +maxwochstdn=66,maxanzfaecher=100;INT CONST maxwochtage:=6,erstestd:=1, +letztestd:=12;LET blank=" ",null=0,niltext="",punkt=".",maxzeichenimvordruck= +79;TASK VAR vordruckserver;TEXT CONST dateimitueberschrift:= +"vordruck1 einzelstdpl sek2",dateimitstdplzeilen:= +"vordruck2 einzelstdpl raeume",dateimiterlauterungen:= +"vordruck2 einzelstdpl sek2",strich:="-",kreuz:="+",abschlusslinie:=76*strich ++blank,normaletrennlinie:=3*strich+kreuz+5*(11*strich+kreuz)+11*strich+": ", +lvnichtimbestand:="nicht in Datei 'Lehrveranstaltungen' enthalten ", +paraphenichtimbestand:=" nicht in Datei 'Lehrer' enthalten ";TEXT VAR hj,sj, +sjaufber,uebfolgeseiten,famname,rufname,gebdat,jgst,tutorkurs,tutorkursalt, +hilfsstring,tupelwerthjd,kennungen,faecher,paraphe,anrede,titel,zusatz,name, +hilfstext,lv,zeile1,zeile2,l:="",r:="",p:="";ROW maxanzfaecherTEXT VAR +lehrveranstaltungen;BOOL VAR gesamtesek2,bestjgst,einzelschueler, +bildschirmausgabe;INT VAR aktuellerindex,gemerkterdbstatus,anzzeilen, +eingabestatus,i,x,y,z,feldnr,meldnr,zaehler,anzfaecher;PROC +einzelstdplsek2eingang:standardvproc(maske)END PROC einzelstdplsek2eingang; +PROC einzelstdplsek2starten:sj:=schulkenndatum("Schuljahr");hj:= +schulkenndatum("Schulhalbjahr");IF maskenwerteokTHEN IF stundenplanokTHEN +startenausfuehrenELSE meldnr:=meldnrkeinestundenplandatenvorhanden; +meldefehlerundzurueckzumdialog;FI ;ELSE meldefehlerundzurueckzumdialog;FI ;. +startenausfuehren:sjaufber:=subtext(sj,1,2)+"/";sjaufberCAT subtext(sj,3,4); +vordruckserver:=/"anschreiben server";forget(dateimitueberschrift,quiet); +forget(dateimitstdplzeilen,quiet);forget(dateimiterlauterungen,quiet);fetch( +dateimitueberschrift,vordruckserver);fetch(dateimitstdplzeilen,vordruckserver +);fetch(dateimiterlauterungen,vordruckserver);setzesonderwerteschulkenndaten; +standardmeldung(meldnrbittewarten,niltext);inittupel(dnrhalbjahresdaten); +putwert(fnrhjdsj,sj);putwert(fnrhjdhj,hj);putwert(fnrhjdfamnames,famname); +putwert(fnrhjdrufnames,rufname);putwert(fnrhjdgebdats,gebdat);IF +einzelschuelerTHEN aktuellerindex:=dnrhalbjahresdaten;ELSE aktuellerindex:= +ixhjdsjhjjgstkenn;putwert(fnrhjdjgst,jgst);FI ;tutorkursalt:=niltext; +zusammengesetztesanschreiben(aktuellerindex,bildschirmausgabe,einzelschueler, +BOOL PROC einzelstdplsek2sonderwerte,BOOL PROC einzelstdplsek2multistop,TEXT +PROC einzelstdplsek2druckdateibauen);END PROC einzelstdplsek2starten;PROC +meldefehlerundzurueckzumdialog:standardmeldung(meldnr,niltext);return(1)END +PROC meldefehlerundzurueckzumdialog;BOOL PROC maskenwerteok:BOOL VAR ok:= +FALSE ,gesamtesek2:=FALSE ;bestjgst:=FALSE ;einzelschueler:=FALSE ; +standardpruefe(5,fnr6ausgbs,fnr7ausgdr,null,niltext,eingabestatus);IF +eingabestatus<>0THEN meldnr:=meldnrauswahlunsinnig;infeld(fnr6ausgbs);ELSE +bildschirmausgabe:=standardmaskenfeld(fnr7ausgdr)=niltext;jgst:= +standardmaskenfeld(fnr2jgst);famname:=standardmaskenfeld(fnr3famname);rufname +:=standardmaskenfeld(fnr4rufname);gebdat:=standardmaskenfeld(fnr5gebdat);IF +jgst=niltextTHEN IF famname=niltextCAND rufname=niltextCAND gebdat=niltext +THEN gesamtesek2:=TRUE ;jgst:="11";ok:=TRUE ELSE IF einzelschuelerkorrekt +THEN einzelschueler:=TRUE ;ok:=TRUE ELSE infeld(feldnr)FI ;FI ;ELSE +standardpruefe(2,fnr2jgst,null,null,niltext,eingabestatus);IF eingabestatus<> +0COR int(jgst)<11COR int(jgst)>13THEN meldnr:=meldnrfalschejgstangabe;infeld( +fnr2jgst);ELSE IF famname<>niltextCOR rufname<>niltextCOR gebdat<>niltext +THEN meldnr:=meldnrjgstoderschueler;infeld(fnr2jgst)ELSE bestjgst:=TRUE ;ok:= +TRUE FI ;FI ;FI ;FI ;okEND PROC maskenwerteok;BOOL PROC stundenplanok: +stundenplanhalbjahrsetzen(hj,sj);stundenplanbasisundstundenplanholen( +eingabestatus);eingabestatus=0OR eingabestatus=8END PROC stundenplanok;BOOL +PROC einzelschuelerkorrekt:IF famname=niltextTHEN feldnr:=fnr3famname;meldnr +:=meldnrpraezisieren;LEAVE einzelschuelerkorrektWITH FALSE ;FI ;IF rufname= +niltextTHEN IF gebdat=niltextTHEN IF famnameeindeutigTHEN rufname:=wert( +fnrsurufnames);gebdat:=wert(fnrsugebdatums);LEAVE einzelschuelerkorrektWITH +TRUE ELSE LEAVE einzelschuelerkorrektWITH FALSE ;FI ;ELSE feldnr:=fnr4rufname +;meldnr:=meldnrpraezisieren;LEAVE einzelschuelerkorrektWITH FALSE ;FI ;ELSE +IF gebdat<>niltextTHEN IF kompletterschluesselokundhjddaTHEN LEAVE +einzelschuelerkorrektWITH TRUE ELSE LEAVE einzelschuelerkorrektWITH FALSE FI +;ELSE IF famnameundrufnameeindeutigTHEN gebdat:=wert(fnrsugebdatums);LEAVE +einzelschuelerkorrektWITH TRUE ELSE LEAVE einzelschuelerkorrektWITH FALSE FI +;FI ;FI ;TRUE END PROC einzelschuelerkorrekt;BOOL PROC famnameeindeutig: +inittupel(dnrschueler);putwert(fnrsufamnames,famname);putwert(fnrsustatuss, +"ls");search(dnrschueler,FALSE );IF wert(fnrsufamnames)<>famnameTHEN feldnr:= +fnr3famname;meldnr:=meldnrdatenexistierennicht;LEAVE famnameeindeutigWITH +FALSE ;ELSE succ(dnrschueler);IF wert(fnrsufamnames)=famnameTHEN feldnr:= +fnr4rufname;meldnr:=meldnrpraezisieren;LEAVE famnameeindeutigWITH FALSE ; +ELSE pred(dnrschueler);FI ;FI ;TRUE END PROC famnameeindeutig;BOOL PROC +famnameundrufnameeindeutig:inittupel(dnrschueler);putwert(fnrsufamnames, +famname);putwert(fnrsurufnames,rufname);putwert(fnrsustatuss,"ls");search( +dnrschueler,FALSE );IF wert(fnrsufamnames)<>famnameCOR wert(fnrsurufnames)<> +rufnameTHEN feldnr:=fnr3famname;meldnr:=meldnrdatenexistierennicht;LEAVE +famnameundrufnameeindeutigWITH FALSE ELSE succ(dnrschueler);IF wert( +fnrsufamnames)=famnameAND wert(fnrsurufnames)=rufnameTHEN feldnr:=fnr5gebdat; +meldnr:=meldnrpraezisieren;LEAVE famnameundrufnameeindeutigWITH FALSE ELSE +pred(dnrschueler);FI ;FI ;TRUE END PROC famnameundrufnameeindeutig;BOOL PROC +kompletterschluesselokundhjdda:standardpruefe(6,fnr5gebdat,null,null,niltext, +eingabestatus);IF eingabestatus<>0THEN feldnr:=fnr5gebdat;meldnr:= +meldnrungueltigesdatum;LEAVE kompletterschluesselokundhjddaWITH FALSE ;FI ; +hilfstext:=subtext(gebdat,1,2);hilfstextCAT punkt;hilfstextCAT subtext(gebdat +,3,4);hilfstextCAT punkt;hilfstextCAT subtext(gebdat,5,6);gebdat:=hilfstext; +inittupel(dnrhalbjahresdaten);putwert(fnrhjdfamnames,famname);putwert( +fnrhjdrufnames,rufname);putwert(fnrhjdgebdats,gebdat);putwert(fnrhjdsj,sj); +putwert(fnrhjdhj,hj);search(dnrhalbjahresdaten,TRUE );IF dbstatus<>0THEN +feldnr:=fnr3famname;meldnr:=meldnrschuelernichtimentsprbestand;LEAVE +kompletterschluesselokundhjddaWITH FALSE ;FI ;TRUE END PROC +kompletterschluesselokundhjdda;BOOL PROC einzelstdplsek2multistop:BOOL VAR b; +IF einzelschuelerTHEN b:=wert(fnrhjdfamnames)=famnameAND wert(fnrhjdrufnames) +=rufnameAND intwert(fnrhjdjgst)>10AND schulhalbjahrkorrektAND dbstatus=ok +ELIF bestjgstTHEN b:=wert(fnrhjdjgst)=jgstAND schulhalbjahrkorrektAND +dbstatus=okELSE b:=schulhalbjahrkorrektAND dbstatus=okFI ;bENDPROC +einzelstdplsek2multistop;BOOL PROC schulhalbjahrkorrekt:intwert(fnrhjdsj)=int +(sj)AND intwert(fnrhjdhj)=int(hj)END PROC schulhalbjahrkorrekt;BOOL PROC +einzelstdplsek2sonderwerte:initialisieresonderwerte;setzesonderwert( +swschuljahr,sjaufber);setzesonderwert(swhalbjahr,hj);famname:=wert( +fnrhjdfamnames);rufname:=wert(fnrhjdrufnames);gebdat:=wert(fnrhjdgebdats); +jgst:=wert(fnrhjdjgst);adressat(famname);setzesonderwert(swrufname,rufname); +setzesonderwert(swfamname,famname);setzesonderwert(swgebdat,gebdat);tutorkurs +:=wert(fnrhjdkennung);IF tutorkurs=niltextTHEN gemerkterdbstatus:=dbstatus; +inittupel(dnrschueler);putwert(fnrsufamnames,famname);putwert(fnrsurufnames, +rufname);putwert(fnrsugebdatums,gebdat);search(dnrschueler,TRUE );IF dbstatus +=0THEN tutorkurs:=wert(fnrsusgrpzugtut);FI ;dbstatus(gemerkterdbstatus);FI ; +gemerkterdbstatus:=dbstatus;inittupel(dnrlehrer);IF tutorkurs<>tutorkursalt +THEN inittupel(dnraktschuelergruppen);putwert(fnrsgrpsj,sj);putwert(fnrsgrphj +,hj);putwert(fnrsgrpjgst,jgst);putwert(fnrsgrpkennung,tutorkurs);search( +dnrlehrveranstaltungen,TRUE );paraphe:=wert(fnrsgrplehrer);IF dbstatus<>0COR +paraphe=niltextTHEN hilfsstring:=jgst+blank+tutorkurs;setzesonderwert( +swtutorkurs,hilfsstring);ELSE hilfsstring:=jgst+blank;hilfsstringCAT paraphe; +putwert(fnrlparaphe,paraphe);search(dnrlehrer,TRUE );IF wert(fnrlgeschlecht)= +"m"THEN hilfsstringCAT " Hr. "ELSE hilfsstringCAT " Fr. "FI ;hilfsstringCAT +wert(fnrlamtsbeztitel);hilfsstringCAT blank+wert(fnrlzusatz);hilfsstringCAT +blank+wert(fnrlfamname);setzesonderwert(swtutorkurs,hilfsstring);FI ; +tutorkursalt:=tutorkurs;ELSE setzesonderwert(swtutorkurs,hilfsstring);FI ; +dbstatus(gemerkterdbstatus);TRUE END PROC einzelstdplsek2sonderwerte;TEXT +PROC einzelstdplsek2druckdateibauen:LET stddruckdatei="liste.1",druckdatei= +"Stundenplan",hilfsdatei="hilfsdatei";FILE VAR f;forget(druckdatei,quiet); +setzemitseitennummern(TRUE );druckvorbereiten;setzeanzahlderzeichenprozeile( +maxzeichenimvordruck);jgst:=wert(fnrhjdjgst);faecher:=wert(fnrhjdfach); +kennungen:=wert(fnrhjdlerngrpkenn);lehrveranstaltungenimrowmerken; +uebfolgeseiten:="Erläuterungen zum Stundenplan: "+rufname+blank+famname+" ("+ +sjaufber+","+hj+") ";anzzeilen:=1;briefalternative(dateimitueberschrift, +hilfsdatei);zeilenweisehilfsdateiindruckdatei(hilfsdatei);forget(hilfsdatei, +quiet);FOR xFROM erstestdUPTO letztestdREP vordruckzweiindruckdatei(x)PER ; +ueberschriftenfuererlaeuterungenindruckdatei;FOR zaehlerFROM 1UPTO anzfaecher +REP IF anzzeilen>drucklaengeTHEN seitenwechsel;druckzeileschreiben( +uebfolgeseiten);druckzeileschreiben(blank);spaltenueberschriftenindruckdatei; +anzzeilenINCR 4;FI ;vordruckdreiindruckdatei(zaehler)PER ; +drucknachbereitenohneausdrucken;rename(stddruckdatei,druckdatei);f:= +sequentialfile(modify,druckdatei);toline(f,1);input(f);druckdatei. +lehrveranstaltungenimrowmerken:FOR iFROM 1UPTO maxanzfaecherREP +lehrveranstaltungen(i):=niltextPER ;anzfaecher:=length(faecher)DIV 2;FOR i +FROM 1UPTO anzfaecherREP lehrveranstaltungen(i):=jgst+subtext(faecher,1,2)+ +subtext(kennungen,1,4);faecher:=subtext(faecher,3,length(faecher));kennungen +:=subtext(kennungen,5,length(kennungen));PER ;. +ueberschriftenfuererlaeuterungenindruckdatei:IF anzzeilen+6>drucklaengeTHEN +seitenwechsel;druckzeileschreiben(uebfolgeseiten);druckzeileschreiben(blank); +anzzeilen:=3;FI ;zeile1:=blank;druckzeileschreiben(zeile1);zeile1:= +"Erläuterungen: ";druckzeileschreiben(zeile1);zeile1:=blank; +druckzeileschreiben(zeile1);spaltenueberschriftenindruckdatei;anzzeilenINCR 6 +;END PROC einzelstdplsek2druckdateibauen;PROC +spaltenueberschriftenindruckdatei:zeile1:="Lehrveranstaltung : Lehrer "; +druckzeileschreiben(zeile1);zeile1:="------------------:"+56*"-"+blank; +druckzeileschreiben(zeile1);END PROC spaltenueberschriftenindruckdatei;PROC +zeilenweisehilfsdateiindruckdatei(TEXT CONST hilfsdatei):TEXT VAR zeile:= +niltext;FILE VAR f;f:=sequentialfile(input,hilfsdatei);FOR iFROM 1UPTO lines( +f)REP getline(f,zeile);anzzeilenINCR 1;IF anzzeilen<drucklaengeTHEN +druckzeileschreiben(zeile);ELSE seitenwechsel;druckzeileschreiben( +uebfolgeseiten);druckzeileschreiben(blank);druckzeileschreiben(zeile); +anzzeilen:=3;FI ;PER ;END PROC zeilenweisehilfsdateiindruckdatei;PROC +vordruckzweiindruckdatei(INT CONST std):LET hilfsdatei="hilfsdatei";TEXT VAR +zeile:=niltext;FILE VAR f;setzesonderwert(swtagesstunde,text(std,2)); +stdplanprowochstdlesenundswsetzen(std);briefalternative(dateimitstdplzeilen, +hilfsdatei);zeilenweisehilfsdateiindruckdatei(hilfsdatei);f:=sequentialfile( +input,hilfsdatei);IF std<>letztestdTHEN zeile:=normaletrennlinieELSE zeile:= +abschlusslinieFI ;druckzeileschreiben(zeile);anzzeilenINCR 1;forget( +hilfsdatei,quiet);END PROC vordruckzweiindruckdatei;PROC +vordruckdreiindruckdatei(INT CONST index):LET hilfsdatei="hilfsdatei";TEXT +VAR zeile:=niltext;FILE VAR f;hilfstext:=lehrveranstaltungen(index);lv:= +subtext(hilfstext,1,2)+blank;lvCAT subtext(hilfstext,3,4)+blank;lvCAT subtext +(hilfstext,5,8);setzesonderwert(swlv,lv);gemerkterdbstatus:=dbstatus; +inittupel(dnrlehrveranstaltungen);putwert(fnrlvsj,sj);putwert(fnrlvhj,hj); +putwert(fnrlvjgst,jgst);putwert(fnrlvfachkennung,compress(subtext(hilfstext,3 +,8)));search(dnrlehrveranstaltungen,TRUE );IF dbstatus<>0THEN setzesonderwert +(swlehrername,lvnichtimbestand);ELSE inittupel(dnrlehrer);putwert(fnrlparaphe +,wert(fnrlvparaphe));search(dnrlehrer,TRUE );IF dbstatus<>0THEN +setzesonderwert(swlehrername,"Paraphe "+wert(fnrlvparaphe)+ +paraphenichtimbestand)ELSE anredetitelusfzusammensetzten;setzesonderwert( +swlehrername,anrede+titel+name)FI ;FI ;dbstatus(gemerkterdbstatus); +briefalternative(dateimiterlauterungen,hilfsdatei); +zeilenweisehilfsdateiindruckdatei(hilfsdatei);forget(hilfsdatei,quiet);. +anredetitelusfzusammensetzten:IF wert(fnrlgeschlecht)="w"THEN anrede:="Fr. " +ELSE anrede:="Hr. "FI ;titel:=wert(fnrlamtsbeztitel);zusatz:=wert(fnrlzusatz) +;name:=blank+wert(fnrlfamname);IF length(titel)>0THEN titelCAT blank;titel +CAT zusatzELSE titel:=zusatzFI ;END PROC vordruckdreiindruckdatei;PROC +stdplanprowochstdlesenundswsetzen(INT CONST std):INT VAR sonderwert;INT VAR +wochenstd:=std;FOR sonderwertFROM swmozeile1UPTO swsazeile1REP zaehler:=1;IF +wochenstd<=maxwochstdnTHEN WHILE zaehler<=anzfaecherAND NOT lvgeplant( +wochenstd,lehrveranstaltungen(zaehler))REP zaehlerINCR 1;PER ;IF zaehler> +anzfaecherTHEN setzesonderwert(sonderwert,niltext);setzesonderwert(sonderwert ++6,niltext);ELSE lv:=lehrveranstaltungen(zaehler);planeintraglesen(wochenstd, +"L",lv,l,r,p);zeile1:=subtext(lv,1,2)+blank;zeile1CAT subtext(lv,3,8);zeile2 +:=text(r,10);setzesonderwert(sonderwert,zeile1);setzesonderwert(sonderwert+6, +zeile2);FI ;wochenstdINCR letztestd;ELSE zeile2:=niltext;setzesonderwert( +sonderwert,zeile2);setzesonderwert(sonderwert+6,zeile2);FI ;PER ;END PROC +stdplanprowochstdlesenundswsetzen;END PACKET einzelstdplsek2; + diff --git a/app/schulis/2.2.1/src/4.faecherangebot drucken b/app/schulis/2.2.1/src/4.faecherangebot drucken new file mode 100644 index 0000000..f38c047 --- /dev/null +++ b/app/schulis/2.2.1/src/4.faecherangebot drucken @@ -0,0 +1,110 @@ +PACKET druckefaecherangebotDEFINES faecherangebotspezielleteile:LET AUSGFELD +=ROW ausgfeldlaengeTEXT ,AUSGKOPF =ROW ausgkopflaengeTEXT ,ausgfeldlaenge=1, +ausgkopflaenge=2,sj="Schuljahr",hj="Schulhalbjahr",ueberschrzeilen=1, +ausgabeparam="#",jg="Jgst.",fc="Fach",ar="Art",ws="Wstd.",an= +"Anz. Lehrveranst.",eingmaske="ms liste faecherangebot",meldungbearb=352, +meldungpraez=129,fldgeplshj=2,fldaktshj=3,fldsortjgst=4,fldsortfach=5, +fldaufdr=6,fldaufbs=7,zeilenanzahl=17,jgstbezbreite=5,fachbezbreite=4, +artbezbreite=3,wstdbezbreite=5,anzbezbreite=17;AUSGFELD VAR ausgfeld; +AUSGKOPF VAR ausgkopf;INT VAR i,status,index,druckzeilenzahl;TEXT VAR +geplschj,geplschhj,aktschj,aktschhj,schj,schhj:="0";TEXT VAR meldungaltejgst +:="",meldungaltesfach:="",altejgst:="",altesfach:="",jgst,fach,art,wstd,anzlv +,druckstrich,faecherangebotueberschrift;BOOL VAR erstezeile;BOOL PROC +multistop:IF dbstatus=okTHEN LEAVE multistopWITH wert(fnrfanghj)=schhjCAND +wert(fnrfangsj)=schjFI ;FALSE END PROC multistop;BOOL PROC multistopsim:IF +dbstatus=okTHEN IF wert(fnrfanghj)=schhjCAND wert(fnrfangsj)=schjTHEN LEAVE +multistopsimWITH TRUE ELSE setzebestandende(TRUE );LEAVE multistopsimWITH +FALSE FI ELSE setzebestandende(TRUE )FI ;FALSE END PROC multistopsim;PROC +holeakthj:holakthj;holaktj;bergeplhjuj.holakthj:aktschhj:=schulkenndatum(hj). +holaktj:aktschj:=schulkenndatum(sj).bergeplhjuj:geplschhj:=aktschhj;geplschj +:=aktschj;geplanteshjundsjberechnen(geplschhj,geplschj).END PROC holeakthj; +PROC faecherangebotspezielleteile(INT CONST anwahl):SELECT anwahlOF CASE 1: +faecherangebotdialogvorbereitenCASE 2:faecherangebotrichtigCASE 3: +faecherangebotlistenvorbereitenCASE 4:faecherangebotdruckvorbereitenCASE 5: +faecherangebotseitedruckenCASE 6:faecherangebotbsvorbereitenCASE 7: +faecherangebotseitezeigenEND SELECT .END PROC faecherangebotspezielleteile; +PROC faecherangebotdialogvorbereiten:holeakthj;faecherangebotueberschrift:= +text(vergleichsknoten);setzeanfangswerte(eingmaske,fldgeplshj)END PROC +faecherangebotdialogvorbereiten;PROC faecherangebotrichtig:IF ( +standardmaskenfeld(fldgeplshj)=""CAND standardmaskenfeld(fldaktshj)="")COR ( +standardmaskenfeld(fldsortjgst)=""CAND standardmaskenfeld(fldsortfach)="") +COR (standardmaskenfeld(fldaufdr)=""CAND standardmaskenfeld(fldaufbs)="") +THEN standardmeldung(meldungpraez,"");setzeeingabetest(FALSE );infeld( +fldgeplshj);LEAVE faecherangebotrichtigFI ;standardpruefe(5,fldgeplshj, +fldaktshj,0,"",status);IF status<>0THEN infeld(status);setzeeingabetest( +FALSE )ELSE standardpruefe(5,fldsortjgst,fldsortfach,0,"",status);IF status<> +0THEN infeld(status);setzeeingabetest(FALSE )ELSE standardpruefe(5,fldaufdr, +fldaufbs,0,"",status);IF status<>0THEN infeld(status);setzeeingabetest(FALSE +)ELSE IF standardmaskenfeld(fldgeplshj)<>""THEN schj:=geplschj;schhj:= +geplschhjELSE schj:=aktschj;schhj:=aktschhjFI ;IF standardmaskenfeld( +fldsortjgst)<>""THEN index:=dnrfaecherangebot;setzescanendewert("255")ELSE +index:=ixfangsjhjfach;setzescanendewert("�")FI ;setzeausgabedrucker( +standardmaskenfeld(fldaufdr)<>"");setzeeingabetest(TRUE );FI ;FI ;FI END +PROC faecherangebotrichtig;PROC faecherangebotlistenvorbereiten:BOOL VAR b; +inittupel(dnrfaecherangebot);initobli(zeilenanzahl);reinitparsing; +setzeidentiwert("");setzewerte;objektlistestarten(index,schj,staticfield, +TRUE ,b);setzebestandende(NOT multistopCOR b).setzewerte:putwert(fnrfangsj, +schj);putwert(fnrfanghj,schhj).staticfield:IF index=dnrfaecherangebotTHEN +fnrfangjgstELSE fnrfangfachFI .END PROC faecherangebotlistenvorbereiten;PROC +faecherangebotbsvorbereiten:standardkopfmaskeaktualisieren( +faecherangebotueberschrift+" für "+schhj+". "+text(schj,2)+"/"+subtext(schj,3 +));initspalten;setzespaltentrenner(" ");setzespaltenbreiten; +initausgabekopf(bildbreite*"-");ausgkopf(1)IN 2;ausgkopf(2)IN 3; +setzebildanfangsposition(4).END PROC faecherangebotbsvorbereiten;PROC +setzespaltenbreiten:setzespaltenbreite(jgstbezbreite);setzespaltenbreite( +fachbezbreite);setzespaltenbreite(artbezbreite);setzespaltenbreite( +wstdbezbreite);setzespaltenbreite(anzbezbreite);END PROC setzespaltenbreiten; +PROC faecherangebotseitezeigen:altejgst:="";blaettern(PROC (INT CONST ) +faecherangebotzeigen,aktion,TRUE ,TRUE ,BOOL PROC multistop);END PROC +faecherangebotseitezeigen;PROC faecherangebotzeigen(INT CONST procparameter): +faecherangebotholen;faecherangebotaufbereiten;faecherangebotaufbs;END PROC +faecherangebotzeigen;PROC faecherangebotholen:jgst:=text(intwert(fnrfangjgst) +,2);fach:=wert(fnrfangfach);art:=wert(fnrfangart);wstd:=text(intwert( +fnrfangwochenstd),2);anzlv:=text(intwert(fnrfanganzlv),2);IF NOT multistop +THEN setzebestandende(TRUE )FI .END PROC faecherangebotholen;PROC +faecherangebotaufbereiten:IF jgst<>altejgstTHEN spaltenweise(jgst);altejgst:= +jgstELSE spaltenweise(" ")FI ;spaltenweise(fach);spaltenweise(art); +spaltenweise(wstd);spaltenweise(anzlv);ausgfeld(1):=zeile.END PROC +faecherangebotaufbereiten;PROC faecherangebotaufbs:ausgfeld(1)IN ausgabepos; +erhoeheausgabeposumeinsEND PROC faecherangebotaufbs;PROC initausgabekopf( +TEXT CONST t):spaltenweise(jg);spaltenweise(fc);spaltenweise(ar);spaltenweise +(ws);spaltenweise(an);ausgkopf(1):=zeile;ausgkopf(2):=t;END PROC +initausgabekopf;PROC faecherangebotdruckvorbereiten:druckvorbereiten; +variablensetzen;initdruckkopf(zentriert(faecherangebotueberschrift+" für "+ +schhj+". "+text(schj,2)+"/"+subtext(schj,3),druckbreite));initspalten; +setzespaltentrenner(" ");setzespaltenbreiten;initausgabekopf( +druckbreite*"-");inittupel(index);setzebestandende(FALSE );setzewerte; +lesenvorbereitendruck(PROC (INT CONST ,BOOL PROC ,INT VAR )scanforward,BOOL +PROC multistopsim).variablensetzen:druckstrich:=druckbreite*"-"; +druckzeilenzahl:=drucklaenge(ueberschrzeilen)-ausgkopflaenge.setzewerte: +putwert(fnrfangsj,schj);putwert(fnrfanghj,schhj).END PROC +faecherangebotdruckvorbereiten;PROC faecherangebotseitedrucken:altejgst:=""; +altesfach:="";erstezeile:=TRUE ;faecherangebotueberschriftdrucken; +seitedrucken(PROC (INT VAR )faecherangebotdrucken,druckzeilenzahl, +ausgfeldlaenge,BOOL PROC multistopsim);seitenwechsel;END PROC +faecherangebotseitedrucken;PROC faecherangebotueberschriftdrucken: +druckkopfschreiben;FOR iFROM 1UPTO ausgkopflaengeREP druckzeileschreiben( +ausgkopf(i))PER .END PROC faecherangebotueberschriftdrucken;PROC +faecherangebotdrucken(INT VAR zz):faecherangebotholen;IF index= +dnrfaecherangebotTHEN IF meldungaltejgst<>jgstTHEN meldungaltejgst:=jgst; +standardmeldung(meldungbearb,"Jgst. "+jgst+ausgabeparam)FI ;ELSE IF +meldungaltesfach<>fachTHEN meldungaltesfach:=fach;standardmeldung( +meldungbearb,"Fach "+fach+ausgabeparam)FI ;FI ; +faecherangebotaufbereitenmitleerzeile(zz);faecherangebotindruckdatei(zz);IF +zz>=druckzeilenzahl-1THEN zzINCR ausgfeldlaengeFI .END PROC +faecherangebotdrucken;PROC faecherangebotaufbereitenmitleerzeile(INT VAR zz): +IF index=dnrfaecherangebotTHEN IF jgst<>altejgstTHEN gibleerzeileaus; +spaltenweise(jgst)ELSE spaltenweise(" ")FI ELSE IF fach<>altesfachTHEN +gibleerzeileaus;altejgst:=""FI ;IF jgst<>altejgstTHEN spaltenweise(jgst)ELSE +spaltenweise(" ")FI FI ;spaltenweise(fach);spaltenweise(art);spaltenweise( +wstd);spaltenweise(anzlv);ausgfeld(1):=zeile.gibleerzeileaus:IF NOT +erstezeileTHEN spaltenweise(" ");spaltenweise(" ");spaltenweise(" "); +spaltenweise(" ");spaltenweise(" ");ausgfeld(1):=zeile; +faecherangebotindruckdatei(zz)FI .END PROC +faecherangebotaufbereitenmitleerzeile;PROC faecherangebotindruckdatei(INT +VAR zz):zzINCR ausgfeldlaenge;IF jgst<>altejgstTHEN altejgst:=jgstFI ;IF fach +<>altesfachCAND index=ixfangsjhjfachTHEN altesfach:=fachFI ;IF erstezeile +THEN erstezeile:=FALSE FI ;FOR iFROM 1UPTO ausgfeldlaengeREP +druckzeileschreiben(ausgfeld(i))PER END PROC faecherangebotindruckdatei;END +PACKET druckefaecherangebot + 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; + diff --git a/app/schulis/2.2.1/src/4.halbjahreswechsel zum stundenplan b/app/schulis/2.2.1/src/4.halbjahreswechsel zum stundenplan new file mode 100644 index 0000000..5955533 --- /dev/null +++ b/app/schulis/2.2.1/src/4.halbjahreswechsel zum stundenplan @@ -0,0 +1,120 @@ +PACKET halbjahreswechselzumstundenplanDEFINES +halbjahreswechselzumstundenplanvorbereiten, +halbjahreswechselzumstundenplanstarten,halbjahreswechselzumstundenplandrucken +:LET maske="ms halbjahreswechsel zum stundenplan";INT VAR fnraktsj:=2, +fnrakthj:=3,fnrgeplsj:=4,fnrgeplhj:=5,fnrauskunft:=6;LET +meldnrhalbjahreswechsellaeuft=156,meldnrinbearbeitung=352;FILE VAR prot;LET +protname="Protokoll zum Halbjahreswechsel";LET schuljahr="Schuljahr", +schulhalbjahr="Schulhalbjahr",schulname="Schulname",schulort="Schulort";LET +aenderungsvermerk="c02 aenderungsvermerk",wertaktuell="aktuell",wertgeplant= +"geplant";LET erstessj=1,letztessj=9900,naechstessj=101,ersteshj=1,letzteshj= +2;TEXT CONST meldtextanfang:="Daten für ",meldtextexist:=" existieren.", +meldtextexistnicht:=" existierten nicht.",meldtextgeloescht:= +" wurden gelöscht.",ueberschrift:= +"Schulhalbjahreswechsel in Daten der Unterrichtsorganisation",untertitel1:= +"Wechsel von Schuljahr ",untertitel2:=" zum Schuljahr ",halbjahr:= +". Halbjahr",namestundenplan:="Stundenplan";LET strich="-",schraegstrich="/", +doppelpunkt=":",kennzhell="#";LET laengedatname=30;TEXT VAR aktsj:="",akthj:= +"",geplsj,geplhj;INT VAR bearbsj,bearbhj,gelesensj,gelesenhj,intaktsj, +intakthj,intgeplsj,intgeplhj;INT VAR dateinummer;TEXT VAR auszeile,dateiname; +LET logbucheintraghjwechsel= +"Anw. 4.7.1 Halbjahreswechsel z. Unterrichtsorg. ";PROC +halbjahreswechselzumstundenplanvorbereiten:standardstartproc(maske);IF aktsj= +""THEN aktsj:=schulkenndatum(schuljahr);akthj:=schulkenndatum(schulhalbjahr) +FI ;geplsj:=aktsj;geplhj:=akthj;geplanteshjundsjberechnen(geplhj,geplsj); +standardmaskenfeld(aktsj,fnraktsj);standardmaskenfeld(akthj,fnrakthj); +standardmaskenfeld(geplsj,fnrgeplsj);standardmaskenfeld(geplhj,fnrgeplhj); +infeld(fnraktsj);standardfelderausgeben;infeld(fnrauskunft);standardnprocEND +PROC halbjahreswechselzumstundenplanvorbereiten;PROC +halbjahreswechselzumstundenplanstarten:standardmeldung( +meldnrhalbjahreswechsellaeuft,"");logeintrag(logbucheintraghjwechsel+ +"gestartet");protokollvorbereiten;ausgabekopfaufbereiten; +halbjahreswechselvorbereiten;wechselfuerbestand(dnraktschuelergruppen); +wechselfuerbestand(dnrzeitraster);wechselfuerbestand(dnraufsichtszeiten); +wechselfuerbestand(dnrzeitwuensche);wechselfuerbestand(dnrfaecherangebot); +wechselfuerbestand(dnrlehrveranstaltungen);wechselfuerbestandstundenplan; +wechselfuerbestand(dnraufsichtsplan);logeintrag(logbucheintraghjwechsel+ +"beendet");aenderungsvermerkfuerstundenplansetzen;zeigedatei(protname,""). +protokollvorbereiten:forget(protname,quiet);prot:=sequentialfile(output, +protname).ausgabekopfaufbereiten:putline(prot,schulkenndatum(schulname)); +putline(prot,text(schulkenndatum(schulort),65)+date);line(prot);putline(prot, +ueberschrift);putline(prot,length(ueberschrift)*strich);line(prot);auszeile:= +untertitel1;auszeileCAT subtext(aktsj,1,2);auszeileCAT schraegstrich;auszeile +CAT subtext(aktsj,3,4);auszeileCAT " , ";auszeileCAT akthj;auszeileCAT +halbjahr;putline(prot,auszeile);auszeile:=untertitel2;auszeileCAT subtext( +geplsj,1,2);auszeileCAT schraegstrich;auszeileCAT subtext(geplsj,3,4); +auszeileCAT " , ";auszeileCAT geplhj;auszeileCAT halbjahr;putline(prot, +auszeile);line(prot).halbjahreswechselvorbereiten:intaktsj:=int(aktsj); +intakthj:=int(akthj);intgeplsj:=int(geplsj);intgeplhj:=int(geplhj); +dateinummer:=0.aenderungsvermerkfuerstundenplansetzen:inittupel(dnrschluessel +);putwert(fnrschlsachgebiet,aenderungsvermerk);putwert(fnrschlschluessel, +wertaktuell);search(dnrschluessel,TRUE );IF dbstatus=0THEN delete( +dnrschluessel);FI ;putwert(fnrschlsachgebiet,aenderungsvermerk);putwert( +fnrschlschluessel,wertgeplant);search(dnrschluessel,TRUE );IF dbstatus=0THEN +putwert(fnrschlschluessel,wertaktuell);update(dnrschluessel);FI .END PROC +halbjahreswechselzumstundenplanstarten;PROC wechselfuerbestand(INT CONST +dateinr):standardmeldung(meldnrinbearbeitung,name(dateinr)+kennzhell); +dateinamefuerausgabevorbereiten;erstensatzlesen;WHILE +geleseneshalbjahrkleineraktuelleshalbjahrREP IF wechselliegtvorTHEN +zeilezuhalbjahrausgeben(meldtextgeloescht,gelesensj,gelesenhj)FI ; +satzloeschen;satzlesenPER ;IF geleseneshalbjahrgleichaktuelleshalbjahrTHEN +zeilezuhalbjahrausgeben(meldtextgeloescht,gelesensj,gelesenhj);REP +satzloeschen;satzlesenUNTIL NOT geleseneshalbjahrgleichaktuelleshalbjahrPER +ELSE zeilezuhalbjahrausgeben(meldtextexistnicht,intaktsj,intakthj)FI ;IF +geleseneshalbjahrgleichgeplanteshalbjahrTHEN zeilezuhalbjahrausgeben( +meldtextexist,intgeplsj,intgeplhj)ELSE zeilezuhalbjahrausgeben( +meldtextexistnicht,intgeplsj,intgeplhj)FI ;bearbsj:=gelesensj;bearbhj:= +gelesenhj;WHILE nochsaetzedaREP IF wechselliegtvorTHEN +zeilezuhalbjahrausgeben(meldtextexist,gelesensj,gelesenhj)FI ; +naechsteshalbjahrsuchenPER .dateinamefuerausgabevorbereiten:line(prot); +dateinummerINCR 1;dateiname:=text(dateinummer);dateinameCAT ". ";dateiname +CAT name(dateinr);dateinameCAT doppelpunkt;dateiname:=text(dateiname, +laengedatname).geleseneshalbjahrkleineraktuelleshalbjahr:dbstatus=0AND (( +gelesensj<intaktsj)OR (gelesensj=intaktsjAND gelesenhj<intakthj)). +geleseneshalbjahrgleichaktuelleshalbjahr:dbstatus=0AND (gelesensj=intaktsj +AND gelesenhj=intakthj).geleseneshalbjahrgleichgeplanteshalbjahr:dbstatus=0 +AND (gelesensj=intgeplsjAND gelesenhj=intgeplhj).nochsaetzeda:dbstatus=0. +erstensatzlesen:bearbsj:=0;bearbhj:=-1;first(dateinr);gelesensj:=intwert( +dateinr+1);gelesenhj:=intwert(dateinr+2).satzlesen:succ(dateinr);gelesensj:= +intwert(dateinr+1);gelesenhj:=intwert(dateinr+2).satzloeschen:delete(dateinr) +.naechsteshalbjahrsuchen:putintwert(dateinr+2,bearbhj+1);search(dateinr, +FALSE );gelesensj:=intwert(dateinr+1);gelesenhj:=intwert(dateinr+2). +wechselliegtvor:IF bearbsj<>gelesensjOR bearbhj<>gelesenhjTHEN bearbsj:= +gelesensj;bearbhj:=gelesenhj;TRUE ELSE FALSE FI .END PROC wechselfuerbestand; +PROC wechselfuerbestandstundenplan:INT VAR fstatusstuplan;standardmeldung( +meldnrinbearbeitung,namestundenplan+kennzhell); +dateinamefuerausgabevorbereiten;gelesensj:=erstessj;WHILE gelesensj<= +letztessjREP FOR gelesenhjFROM ersteshjUPTO letzteshjREP +stundenplanhalbjahrsetzen(text(gelesenhj),gelesensjaufbereitet);IF +geleseneshalbjahrkleineraktuelleshalbjahrTHEN IF stundenplandatenvorhanden +THEN stundenplanbasisundstundenplanloeschen(fstatusstuplan); +zeilezuhalbjahrausgeben(meldtextgeloescht,gelesensj,gelesenhj)FI ELIF +geleseneshalbjahrgleichaktuelleshalbjahrTHEN IF stundenplandatenvorhanden +THEN stundenplanbasisundstundenplanloeschen(fstatusstuplan); +zeilezuhalbjahrausgeben(meldtextgeloescht,gelesensj,gelesenhj)ELSE +zeilezuhalbjahrausgeben(meldtextexistnicht,gelesensj,gelesenhj)FI ELIF +geleseneshalbjahrgleichgeplanteshalbjahrTHEN IF stundenplandatenvorhanden +THEN zeilezuhalbjahrausgeben(meldtextexist,gelesensj,gelesenhj)ELSE +zeilezuhalbjahrausgeben(meldtextexistnicht,gelesensj,gelesenhj)FI ELSE IF +stundenplandatenvorhandenTHEN zeilezuhalbjahrausgeben(meldtextexist,gelesensj +,gelesenhj)FI FI PER ;gelesensj:=gelesensj+naechstessjPER . +geleseneshalbjahrkleineraktuelleshalbjahr:(gelesensj<intaktsj)OR (gelesensj= +intaktsjAND gelesenhj<intakthj).geleseneshalbjahrgleichaktuelleshalbjahr: +gelesensj=intaktsjAND gelesenhj=intakthj. +geleseneshalbjahrgleichgeplanteshalbjahr:gelesensj=intgeplsjAND gelesenhj= +intgeplhj.gelesensjaufbereitet:TEXT VAR ausgabesj:="000"+text(gelesensj); +subtext(ausgabesj,length(ausgabesj)-3).dateinamefuerausgabevorbereiten:line( +prot);dateinummerINCR 1;dateiname:=text(dateinummer);dateinameCAT ". "; +dateinameCAT namestundenplan;dateinameCAT doppelpunkt;dateiname:=text( +dateiname,laengedatname).END PROC wechselfuerbestandstundenplan;PROC +zeilezuhalbjahrausgeben(TEXT CONST ergaenzung,INT CONST aussj,aushj):TEXT +VAR ausgabesj:="000"+text(aussj);ausgabesj:=subtext(ausgabesj,length( +ausgabesj)-3);auszeile:=dateiname;auszeileCAT meldtextanfang;auszeileCAT +subtext(ausgabesj,1,2);auszeileCAT schraegstrich;auszeileCAT subtext( +ausgabesj,3,4);auszeileCAT schraegstrich;auszeileCAT text(aushj);auszeileCAT +ergaenzung;putline(prot,auszeile);dateiname:=laengedatname*" ".END PROC +zeilezuhalbjahrausgeben;PROC halbjahreswechselzumstundenplandrucken(BOOL +CONST drucken):IF druckenTHEN print(protname)FI ;forget(protname,quiet);enter +(2)END PROC halbjahreswechselzumstundenplandrucken;END PACKET +halbjahreswechselzumstundenplan + diff --git a/app/schulis/2.2.1/src/4.konsistenzpruefung b/app/schulis/2.2.1/src/4.konsistenzpruefung new file mode 100644 index 0000000..bd95a94 --- /dev/null +++ b/app/schulis/2.2.1/src/4.konsistenzpruefung @@ -0,0 +1,274 @@ +PACKET konsistenzpruefungDEFINES konsistenzpruefungstarten, +konsistenzpruefungprotokolldrucken:INT VAR fnrgeplhj:=2,fnrakthj:=3;LET +meldnrinbearbeitung=352,meldnrstundenplanwirdaufbereitet=357,meldnrbasisalt= +377;LET anschreibenserver="anschreiben server";LET fehlerzeilendatei= +"fehlerliste konsistenzpruefung";FILE VAR fehldat;LET protname= +"Protokoll zur Konsistenzprüfung";FILE VAR prot;LET sachgebietraum= +"c02 raeume",sachgebietaufsichtsorte="c02 aufsichtsorte";LET schuljahr= +"Schuljahr",schulhalbjahr="Schulhalbjahr",schulname="Schulname",schulort= +"Schulort";LET ueberschrift="Konsistenzprüfung zum Stundenplan",untertitel1= +"Stundenplan zum Schuljahr ",texthalbjahr=". Halbjahr",untertitel2= +"Prüfung am ",anfangstext="Folgende Inkonsistenzen wurden festgestellt: "; +LET strich="-",schraegstrich="/",blank=" ",kennzhell="#",fall="Fall ", +doppelpunkt=":",ersatzzeichen="#",awtrenner="#";LET jgst05="05",jgst13="13"; +LET kennzzeitrastersperrung="x",leerraum=" ";LET laengekennung=4, +laengeraum=4,laengeklassengruppe=4,laengesugruppe=6,laengeparaphe=4, +laengefach=2,laengekopplung=8,laengelv=8,laengeorte=4,laengeaufsichtszeit=3; +LET kennungkopplung="K",kennungparaphe="P",kennunglv="L",kennungraum="R";LET +maxlehrer=255;LET erstestunde=1,letztestunde=66;LET bezugfach="f", +bezugsugruppe="s",bezugparaphe="l",bezugraum="r",bezugkopplung="k", +bezugtextfach="Fach",bezugtextsugruppe="Schülergruppe",bezugtextparaphe= +"Paraphe",bezugtextraum="Raum",bezugtextkopplung="Kopplung";TEXT VAR aktsj:= +"",akthj:="",gewsj,gewhj;TEXT VAR auszeile,zeile,suchfall;TEXT VAR +klassengruppe,raumgruppe,jgst,fach,paraphe,lv,raum,ort,aufsichtszeit,kopplung +,neuekopplung,neueparaphe;TEXT VAR gueltigeschuelergruppen, +gueltigeklassengruppen,gueltigeraumgruppen,gueltigeraeume,gueltigefaecher, +gueltigeparaphen,gueltigelv,gueltigekopplungen,gueltigeaufsichtszeiten, +gueltigeaufsichtsorte;TEXT VAR fehlerhafteklassengruppen, +fehlerhafteraumgruppen,fehlerhaftelv;TEXT VAR zeitrasterleiste;INT VAR +ifehler,ilehrer;ROW maxlehrerINT VAR lehrersollstd;ROW maxlehrerINT VAR +lehreriststd;INT VAR posraum,poslv,posparaphe;INT VAR izeit;PROC +konsistenzpruefungstarten:INT VAR fnrfehler:=0;standardpruefe(5,fnrgeplhj, +fnrakthj,0,"",fnrfehler);IF fnrfehler<>0THEN infeld(fnrfehler);return(1)ELSE +pruefungstartenFI .pruefungstarten:IF aktsj=""THEN aktsj:=schulkenndatum( +schuljahr);akthj:=schulkenndatum(schulhalbjahr)FI ;gewsj:=aktsj;gewhj:=akthj; +IF standardmaskenfeld(fnrgeplhj)<>""THEN geplanteshjundsjberechnen(gewhj, +gewsj);FI ;protokollvorbereiten;ausgabekopfaufbereiten; +pruefungklassengruppendurchfuehren;pruefungraumgruppendurchfuehren; +pruefunglehrveranstaltungendurchfuehren; +pruefunglehrerstundenzahlendurchfuehren;pruefungzeitwuenschedurchfuehren; +pruefungstundenplandurchfuehren;pruefungaufsichtsplandurchfuehren; +ausgabefussaufbereiten;zeigedatei(protname,"").protokollvorbereiten:forget( +fehlerzeilendatei,quiet);fetch(fehlerzeilendatei,/anschreibenserver);fehldat +:=sequentialfile(modify,fehlerzeilendatei);forget(protname,quiet);prot:= +sequentialfile(output,protname);ifehler:=0.ausgabekopfaufbereiten:putline( +prot,schulkenndatum(schulname));putline(prot,schulkenndatum(schulort));line( +prot);putline(prot,20*blank+ueberschrift);putline(prot,20*blank+length( +ueberschrift)*strich);line(prot);auszeile:=untertitel1;auszeileCAT subtext( +gewsj,1,2);auszeileCAT schraegstrich;auszeileCAT subtext(gewsj,3,4);auszeile +CAT ", ";auszeileCAT gewhj;auszeileCAT texthalbjahr;putline(prot,auszeile); +auszeile:=untertitel2;auszeileCAT date;auszeileCAT blank;auszeileCAT +timeofday;putline(prot,auszeile);line(prot);line(prot);putline(prot, +anfangstext);line(prot).ausgabefussaufbereiten:line(prot);IF ifehler=0THEN +putline(prot,20*blank+"keine")ELSE putline(prot,20*blank+20*strich)FI .END +PROC konsistenzpruefungstarten;PROC pruefungklassengruppendurchfuehren: +standardmeldung(meldnrinbearbeitung,name(dnrklassengruppen)+kennzhell); +holegueltigeschuelergruppen;gueltigeklassengruppen:=""; +fehlerhafteklassengruppen:="";inittupel(dnrklassengruppen);statleseschleife( +dnrklassengruppen,"","",fnrkgklassengrp,fnrkgklassengrp,PROC +klassengruppelesenundpruefen)END PROC pruefungklassengruppendurchfuehren; +PROC holegueltigeschuelergruppen:gueltigeschuelergruppen:="";inittupel( +dnraktschuelergruppen);statleseschleife(dnraktschuelergruppen,gewsj,gewhj, +fnrsgrpsj,fnrsgrphj,PROC schuelergruppelesen)END PROC +holegueltigeschuelergruppen;PROC schuelergruppelesen(BOOL VAR b):IF dbstatus +<>0OR wert(fnrsgrpsj)<>gewsjOR wert(fnrsgrphj)<>gewhjTHEN b:=TRUE ELSE +gueltigeschuelergruppenCAT jgstzweistellig(intwert(fnrsgrpjgst)); +gueltigeschuelergruppenCAT text(wert(fnrsgrpkennung),laengekennung)FI END +PROC schuelergruppelesen;PROC klassengruppelesenundpruefen(BOOL VAR b):TEXT +VAR sugruppe,sugruppen;INT VAR possugruppe,laengesugruppen;IF dbstatus<>0 +THEN b:=TRUE ELSE klassengruppe:=wert(fnrkgklassengrp);gueltigeklassengruppen +CAT text(klassengruppe,laengeklassengruppe);sugruppen:=wert(fnrkgschuelergrp) +;laengesugruppen:=length(sugruppen);possugruppe:=1;WHILE possugruppe< +laengesugruppenREP sugruppe:=subtext(sugruppen,possugruppe,possugruppe+ +laengesugruppe-1);IF suchpos(gueltigeschuelergruppen,sugruppe,laengesugruppe) +=0AND sugruppeistnichtjgstTHEN fehlerprotokollieren(1,klassengruppe+awtrenner ++sugruppe+awtrenner);fehlerhafteklassengruppenCAT text(klassengruppe, +laengeklassengruppe)FI ;possugruppeINCR laengesugruppePER ;FI . +sugruppeistnichtjgst:subtext(sugruppe,3,6)<>" ".END PROC +klassengruppelesenundpruefen;PROC pruefungraumgruppendurchfuehren: +standardmeldung(meldnrinbearbeitung,name(dnrraumgruppen)+kennzhell); +holegueltigeraeume;gueltigeraumgruppen:="";fehlerhafteraumgruppen:=""; +inittupel(dnrraumgruppen);statleseschleife(dnrraumgruppen,"","",fnrrgraumgrp, +fnrrgraumgrp,PROC raumgruppelesenundpruefen)END PROC +pruefungraumgruppendurchfuehren;PROC holegueltigeraeume:gueltigeraeume:=""; +inittupel(dnrschluessel);statleseschleife(dnrschluessel,sachgebietraum,"", +fnrschlsachgebiet,fnrschlschluessel,PROC raumlesen);END PROC +holegueltigeraeume;PROC raumlesen(BOOL VAR b):IF dbstatus<>0COR wert( +fnrschlsachgebiet)>sachgebietraumTHEN b:=TRUE ELSE gueltigeraeumeCAT text( +wert(fnrschlschluessel),laengeraum)FI END PROC raumlesen;PROC +raumgruppelesenundpruefen(BOOL VAR b):TEXT VAR alleraeume;INT VAR +laengeraeume;IF dbstatus<>0THEN b:=TRUE ELSE raumgruppe:=wert(fnrrgraumgrp); +gueltigeraumgruppenCAT text(raumgruppe,laengeraum);alleraeume:=wert( +fnrrgraeume);laengeraeume:=length(alleraeume);posraum:=1;WHILE posraum< +laengeraeumeREP raum:=subtext(alleraeume,posraum,posraum+laengeraum-1);IF +suchpos(gueltigeraeume,raum,laengeraum)=0THEN fehlerprotokollieren(2, +raumgruppe+awtrenner+raum+awtrenner);fehlerhafteraumgruppenCAT text( +raumgruppe,laengeraum)FI ;posraumINCR laengeraumPER ;FI .END PROC +raumgruppelesenundpruefen;PROC pruefunglehrveranstaltungendurchfuehren: +standardmeldung(meldnrinbearbeitung,name(dnrlehrveranstaltungen)+kennzhell); +holegueltigeparaphen;holegueltigefaecher;gueltigelv:="";fehlerhaftelv:=""; +gueltigekopplungen:="";inittupel(dnrlehrveranstaltungen);statleseschleife( +dnrlehrveranstaltungen,gewsj,gewhj,fnrlvsj,fnrlvhj,PROC lvlesenundpruefen) +END PROC pruefunglehrveranstaltungendurchfuehren;PROC holegueltigeparaphen: +gueltigeparaphen:="";ilehrer:=0;inittupel(dnrlehrer);statleseschleife( +dnrlehrer,"","",fnrlparaphe,fnrlparaphe,PROC paraphelesen);END PROC +holegueltigeparaphen;PROC paraphelesen(BOOL VAR b):IF dbstatus<>0THEN b:= +TRUE ELSE gueltigeparaphenCAT text(wert(fnrlparaphe),laengeparaphe);ilehrer +INCR 1;lehrersollstd(ilehrer):=intwert(fnrlsollstd);lehreriststd(ilehrer):=0 +FI END PROC paraphelesen;PROC holegueltigefaecher:gueltigefaecher:=""; +inittupel(dnrfaecher);statleseschleife(dnrfaecher,"","",fnrffach,fnrffach, +PROC fachlesen);END PROC holegueltigefaecher;PROC fachlesen(BOOL VAR b):IF +dbstatus<>0THEN b:=TRUE ELSE gueltigefaecherCAT text(wert(fnrffach), +laengefach)FI END PROC fachlesen;PROC lvlesenundpruefen(BOOL VAR b):IF +dbstatus<>0OR wert(fnrlvhj)<>gewhjOR wert(fnrlvsj)<>gewsjTHEN b:=TRUE ELSE +lvdatenpruefenFI .lvdatenpruefen:jgst:=jgstzweistellig(intwert(fnrlvjgst)); +paraphe:=text(wert(fnrlvparaphe),laengeparaphe);fach:=subtext(wert( +fnrlvfachkennung),1,2);lv:=jgst+wert(fnrlvfachkennung);gueltigelvCAT text(lv, +laengelv);gueltigekopplungenCAT text(wert(fnrlvkopplung),laengekopplung);IF +suchpos(gueltigefaecher,fach,laengefach)=0THEN fehlerprotokollieren(3,lv+ +awtrenner+fach+awtrenner);fehlerhaftelvCAT text(lv,laengelv)FI ;posparaphe:= +suchpos(gueltigeparaphen,paraphe,laengeparaphe);IF posparaphe=0THEN +fehlerprotokollieren(4,lv+awtrenner+paraphe+awtrenner);fehlerhaftelvCAT text( +lv,laengelv)ELSE lehrerstundenaufsummierenFI ;INT VAR fnrklgrp;FOR fnrklgrp +FROM fnrlvklgrp1UPTO fnrlvklgrp4REP klassengruppe:=wert(fnrklgrp);IF +klassengruppe<>""THEN IF suchpos(gueltigeschuelergruppen,jgst+klassengruppe, +laengesugruppe)=0THEN IF intwert(fnrlvjgst)>0THEN IF jgst<>klassengruppeTHEN +pruefeobgueltigeklassengruppeFI ELIF klassengruppeistkeinejgstTHEN +pruefeobgueltigeklassengruppeFI FI ;FI ;PER ;INT VAR fnrraumgrp;FOR +fnrraumgrpFROM fnrlvraumgrp1UPTO fnrlvraumgrp2REP raum:=wert(fnrraumgrp);IF +raum<>""THEN raum:=text(raum,laengeraum);IF suchpos(gueltigeraeume,raum, +laengeraum)=0THEN IF suchpos(gueltigeraumgruppen,raum,laengeraum)=0THEN +fehlerprotokollieren(7,lv+awtrenner+raum+awtrenner)ELIF suchpos( +fehlerhafteraumgruppen,raum,laengeraum)>0THEN fehlerprotokollieren(8,lv+ +awtrenner+raum+awtrenner)FI FI ;FI ;PER ;.klassengruppeistkeinejgst: +jgstaufber(klassengruppe)<jgst05OR jgstaufber(klassengruppe)>jgst13. +pruefeobgueltigeklassengruppe:IF suchpos(gueltigeklassengruppen,klassengruppe +,laengeklassengruppe)=0THEN fehlerprotokollieren(5,lv+awtrenner+klassengruppe ++awtrenner)ELIF suchpos(fehlerhafteklassengruppen,klassengruppe, +laengeklassengruppe)>0THEN fehlerprotokollieren(6,lv+awtrenner+klassengruppe+ +awtrenner)FI .lehrerstundenaufsummieren:ilehrer:=((posparaphe-1)DIV +laengeparaphe)+1;lehreriststd(ilehrer):=lehreriststd(ilehrer)+intwert( +fnrlvwochenstd).END PROC lvlesenundpruefen;PROC +pruefunglehrerstundenzahlendurchfuehren:standardmeldung(meldnrinbearbeitung, +name(dnrlehrer)+kennzhell);ilehrer:=1;posparaphe:=1;WHILE posparaphe<length( +gueltigeparaphen)REP IF lehreriststd(ilehrer)>lehrersollstd(ilehrer)THEN +fehlerprotokollieren(9,subtext(gueltigeparaphen,posparaphe,posparaphe+ +laengeparaphe-1)+awtrenner);FI ;ilehrerINCR 1;posparapheINCR laengeparaphe +PER .END PROC pruefunglehrerstundenzahlendurchfuehren;PROC +pruefungzeitwuenschedurchfuehren:standardmeldung(meldnrinbearbeitung,name( +dnrzeitwuensche)+kennzhell);inittupel(dnrzeitwuensche);statleseschleife( +dnrzeitwuensche,gewsj,gewhj,fnrzwsj,fnrzwhj,PROC zeitwuenschelesenundpruefen) +END PROC pruefungzeitwuenschedurchfuehren;PROC zeitwuenschelesenundpruefen( +BOOL VAR b):IF dbstatus<>0OR wert(fnrzwhj)<>gewhjOR wert(fnrzwsj)<>gewsjTHEN +b:=TRUE ELSE zeitwunschpruefenFI .zeitwunschpruefen:INT VAR bezuglaenge:=0; +TEXT VAR bezug,bezugsobjekt,bezugtext,bezugmenge;bezug:=wert(fnrzwbezug);IF +bezug=bezugfachTHEN bezuglaenge:=laengefach;bezugtext:=bezugtextfach; +bezugmenge:=gueltigefaecherELIF bezug=bezugsugruppeTHEN bezuglaenge:= +laengesugruppe;bezugtext:=bezugtextsugruppe;bezugmenge:= +gueltigeschuelergruppenELIF bezug=bezugparapheTHEN bezuglaenge:=laengeparaphe +;bezugtext:=bezugtextparaphe;bezugmenge:=gueltigeparaphenELIF bezug=bezugraum +THEN bezuglaenge:=laengeraum;bezugtext:=bezugtextraum;bezugmenge:= +gueltigeraeumeELIF bezug=bezugkopplungTHEN bezuglaenge:=laengekopplung; +bezugtext:=bezugtextkopplung;bezugmenge:=gueltigekopplungenELSE LEAVE +zeitwunschpruefenFI ;bezugsobjekt:=text(wert(fnrzwbezugsobjekt),bezuglaenge); +IF suchpos(bezugmenge,bezugsobjekt,bezuglaenge)=0THEN delete(dnrzeitwuensche) +;fehlerprotokollieren(10,bezugsobjekt+awtrenner+bezugtext+awtrenner)FI END +PROC zeitwuenschelesenundpruefen;PROC pruefungstundenplandurchfuehren:INT +VAR fstatusstuplan;BOOL VAR ok;stundenplanhalbjahrsetzen(gewhj,gewsj); +standardmeldung(meldnrstundenplanwirdaufbereitet,""); +stundenplanbasisundstundenplanholen(fstatusstuplan);IF fstatusstuplan=8THEN +standardmeldung(meldnrbasisalt,"")FI ;IF fstatusstuplan=0OR fstatusstuplan=8 +THEN pruefestundenplan;stundenplanreorganisierenundsichern(fstatusstuplan) +ELSE stundenplanfehlerbehandelnFI .stundenplanfehlerbehandeln:putline(prot, +"*** Der Stundenplan wurde nicht geprüft. ***").pruefestundenplan:TEXT VAR +lvderzeit,paraphenderzeit,kopplungenderzeit,raeumederzeit;holezeitraster; +standardmeldung(meldnrinbearbeitung,"Stundenplan"+kennzhell);FOR izeitFROM +erstestundeUPTO letztestundeREP lvderzeit:=datenderzeit(izeit,kennunglv);IF +lvderzeit<>""THEN pruefeallelvderzeitFI PER .pruefeallelvderzeit:IF ( +zeitrasterleisteSUB izeit)=kennzzeitrastersperrungTHEN poslv:=1;WHILE poslv< +length(lvderzeit)REP lv:=subtext(lvderzeit,poslv,poslv+laengelv-1); +planeintragloeschen(izeit,lv,ok);fehlerprotokollieren(18,tagstunde(izeit, +TRUE )+awtrenner+lv+awtrenner);poslvINCR laengelvPER ELSE +weiterepruefungenzulvFI .weiterepruefungenzulv:paraphenderzeit:=datenderzeit( +izeit,kennungparaphe);kopplungenderzeit:=datenderzeit(izeit,kennungkopplung); +raeumederzeit:=datenderzeit(izeit,kennungraum);poslv:=1;WHILE poslv<length( +lvderzeit)REP lv:=subtext(lvderzeit,poslv,poslv+laengelv-1);IF suchpos( +gueltigelv,lv,laengelv)=0THEN planeintragloeschen(izeit,lv,ok); +fehlerprotokollieren(11,paramlvzeit)ELIF suchpos(fehlerhaftelv,lv,laengelv)>0 +THEN fehlerprotokollieren(12,paramlvzeit)ELSE inhaltspruefungzueintragFI ; +poslvINCR laengelvPER .inhaltspruefungzueintrag:posparaphe:=((poslv-1)DIV 2)+ +1;paraphe:=subtext(paraphenderzeit,posparaphe,posparaphe+laengeparaphe-1); +neueparaphe:=datenzurlv(kennungparaphe,lv);IF neueparaphe<>parapheTHEN IF +suchpos(paraphenderzeit,neueparaphe,laengeparaphe)>0THEN fehlerprotokollieren +(14,paramparaphenwechsel)ELSE fehlerprotokollieren(13,paramparaphenwechsel); +posraum:=posparaphe;raum:=subtext(raeumederzeit,posraum,posraum+laengeraum-1) +;IF raum<>leerraumTHEN IF suchpos(gueltigeraeume,raum,laengeraum)=0THEN raum +:=leerraum;fehlerprotokollieren(15,paramlvzeit)FI ;FI ;planeintragvornehmen( +izeit,lv,raum,ok);FI ELSE posraum:=posparaphe;raum:=subtext(raeumederzeit, +posraum,posraum+laengeraum-1);IF raum<>leerraumTHEN IF suchpos(gueltigeraeume +,raum,laengeraum)=0THEN raum:=leerraum;fehlerprotokollieren(15,paramlvzeit); +planeintragvornehmen(izeit,lv,raum,ok);FI ;FI ;kopplung:=subtext( +kopplungenderzeit,poslv,poslv+laengekopplung-1);neuekopplung:=datenzurlv( +kennungkopplung,lv);IF neuekopplung<>kopplungTHEN fehlerprotokollieren(16, +paramkopplungswechsel);planeintragvornehmen(izeit,lv,raum,ok);kopplung:= +neuekopplungFI ;FI ;IF schuelergruppenschnittbeizeit(izeit,kennungkopplung, +kopplung,"")THEN fehlerprotokollieren(17,paramlvzeit)FI .END PROC +pruefungstundenplandurchfuehren;TEXT PROC paramlvzeit:TEXT VAR param:=lv; +paramCAT awtrenner;paramCAT tagstunde(izeit,TRUE );paramCAT awtrenner;param +END PROC paramlvzeit;TEXT PROC paramparaphenwechsel:TEXT VAR param:= +paramlvzeit;paramCAT paraphe;paramCAT awtrenner;paramCAT neueparaphe;param +CAT awtrenner;paramEND PROC paramparaphenwechsel;TEXT PROC +paramkopplungswechsel:TEXT VAR param:=paramlvzeit;paramCAT kopplung;paramCAT +awtrenner;paramCAT neuekopplung;paramCAT awtrenner;paramEND PROC +paramkopplungswechsel;PROC holezeitraster:zeitrasterleiste:=letztestunde* +blank;inittupel(dnrzeitraster);statleseschleife(dnrzeitraster,gewsj,gewhj, +fnrzrsj,fnrzrhj,PROC erstellezeitrasterleiste);END PROC holezeitraster;PROC +erstellezeitrasterleiste(BOOL VAR b):IF wert(fnrzrsj)<>gewsjCOR wert(fnrzrhj) +<>gewhjCOR dbstatus<>0THEN b:=TRUE ELSE IF wert(fnrzrkennungteil)= +kennzzeitrastersperrungTHEN replace(zeitrasterleiste,intwert(fnrzrtagstunde), +kennzzeitrastersperrung)FI FI END PROC erstellezeitrasterleiste;PROC +pruefungaufsichtsplandurchfuehren:standardmeldung(meldnrinbearbeitung,name( +dnraufsichtsplan)+kennzhell);holegueltigeaufsichtsorte; +holegueltigeaufsichtszeiten;inittupel(dnraufsichtsplan);statleseschleife( +dnraufsichtsplan,gewsj,gewhj,fnrapsj,fnraphj,PROC aufsichtenlesenundpruefen) +END PROC pruefungaufsichtsplandurchfuehren;PROC holegueltigeaufsichtsorte: +gueltigeaufsichtsorte:="";inittupel(dnrschluessel);statleseschleife( +dnrschluessel,sachgebietaufsichtsorte,"",fnrschlsachgebiet,fnrschlschluessel, +PROC aufsichtsortlesen);END PROC holegueltigeaufsichtsorte;PROC +aufsichtsortlesen(BOOL VAR b):IF dbstatus<>0COR wert(fnrschlsachgebiet)> +sachgebietaufsichtsorteTHEN b:=TRUE ELSE gueltigeaufsichtsorteCAT text(wert( +fnrschlschluessel),laengeorte)FI END PROC aufsichtsortlesen;PROC +holegueltigeaufsichtszeiten:gueltigeaufsichtszeiten:="";inittupel( +dnraufsichtszeiten);statleseschleife(dnraufsichtszeiten,gewsj,gewhj,fnrazsj, +fnrazhj,PROC aufsichtszeitlesen)END PROC holegueltigeaufsichtszeiten;PROC +aufsichtszeitlesen(BOOL VAR b):IF dbstatus<>0OR wert(fnrazsj)<>gewsjOR wert( +fnrazhj)<>gewhjTHEN b:=TRUE ELSE gueltigeaufsichtszeitenCAT text(wert( +fnrazaufsichtszeit),laengeaufsichtszeit)FI END PROC aufsichtszeitlesen;PROC +aufsichtenlesenundpruefen(BOOL VAR b):IF dbstatus<>0OR wert(fnraphj)<>gewhj +OR wert(fnrapsj)<>gewsjTHEN b:=TRUE ELSE aufsichtsplandatenpruefenFI . +aufsichtsplandatenpruefen:aufsichtszeit:=text(wert(fnrapaufsichtszeit), +laengeaufsichtszeit);IF suchpos(gueltigeaufsichtszeiten,aufsichtszeit, +laengeaufsichtszeit)=0THEN delete(dnraufsichtsplan);fehlerprotokollieren(19, +aufsichtszeit+awtrenner)ELSE ort:=text(wert(fnrapaufsichtsort),laengeorte); +IF suchpos(gueltigeaufsichtsorte,ort,laengeorte)=0THEN fehlerprotokollieren( +20,aufsichtszeit+awtrenner+ort+awtrenner)FI ;paraphe:=text(wert(fnrapparaphe) +,laengeparaphe);IF suchpos(gueltigeparaphen,paraphe,laengeparaphe)=0THEN +fehlerprotokollieren(21,aufsichtszeit+awtrenner+ort+awtrenner)FI ;FI END +PROC aufsichtenlesenundpruefen;PROC konsistenzpruefungprotokolldrucken(BOOL +CONST drucken):IF druckenTHEN print(protname)FI ;forget(protname,quiet);enter +(2)END PROC konsistenzpruefungprotokolldrucken;PROC fehlerprotokollieren(INT +CONST fallnr,TEXT CONST aktwerte):TEXT VAR aktuellerwert;INT VAR awpos, +awendepos,epos;LET maxfehler=100;IF ifehler>maxfehlerTHEN LEAVE +fehlerprotokollierenELIF ifehler=maxfehlerTHEN putline(prot, +"keine weitere Fehlerprotokollierung");ifehlerINCR 1;LEAVE +fehlerprotokollierenFI ;suchfall:=fall;suchfallCAT text(fallnr);suchfallCAT +doppelpunkt;toline(fehldat,1);col(fehldat,1);WHILE NOT eof(fehldat)REP +downety(fehldat,suchfall);readrecord(fehldat,zeile);IF pos(zeile,suchfall)=1 +THEN down(fehldat);behandlefallELSE col(fehldat,col(fehldat)+1)FI PER . +behandlefall:ifehlerINCR 1;auszeile:=text(ifehler);auszeileCAT ") ";INT VAR +praefixlaenge:=length(auszeile);awpos:=1;WHILE NOT eof(fehldat)REP readrecord +(fehldat,zeile);IF pos(zeile,fall)>0THEN line(prot);LEAVE behandlefallFI ; +ersetzeevtlersatzzeichendurchaktuellewerte;auszeileCAT zeile;putline(prot, +auszeile);down(fehldat);auszeile:=praefixlaenge*blankPER . +ersetzeevtlersatzzeichendurchaktuellewerte:epos:=pos(zeile,ersatzzeichen); +WHILE epos>0REP awendepos:=pos(aktwerte,awtrenner,awpos);aktuellerwert:= +subtext(aktwerte,awpos,awendepos-1);awpos:=awendepos+1;change(zeile, +ersatzzeichen,aktuellerwert);epos:=pos(zeile,ersatzzeichen,epos+length( +aktuellerwert));PER .END PROC fehlerprotokollieren;INT PROC suchpos(TEXT +CONST quelle,suchtext,INT CONST laenge):INT VAR findpos:=pos(quelle,suchtext) +;WHILE findpos>0REP IF findposMOD laenge=1THEN LEAVE suchposWITH findposELSE +findpos:=pos(quelle,suchtext,findpos+1);FI PER ;findposEND PROC suchpos;TEXT +PROC jgstzweistellig(INT CONST intjgst):IF intjgst=0THEN "00"ELIF intjgst>4 +AND intjgst<10THEN "0"+text(intjgst)ELSE text(intjgst)FI END PROC +jgstzweistellig;END PACKET konsistenzpruefung + diff --git a/app/schulis/2.2.1/src/4.lehrveranstaltungen benennen b/app/schulis/2.2.1/src/4.lehrveranstaltungen benennen new file mode 100644 index 0000000..7965000 --- /dev/null +++ b/app/schulis/2.2.1/src/4.lehrveranstaltungen benennen @@ -0,0 +1,480 @@ +PACKET lehrveranstaltungenbenennenDEFINES lehrveranstaltungenbenennenstart, +lehrveranstaltungenuebernehmenstart,lehrveranstaltungenuebernehmen, +bearbeitunglehrveranstaltungen,lehrveranstaltungenzeileeinfuegen, +lehrveranstaltungenspeichern:LET maskeeingang= +"ms lehrveranstalt benennen eingang";LET maskebearb= +"ms lehrveranstalt benennen";LET fnrbearbeiten=2,fnrbearbaktsj=3, +fnrbearbgeplsj=4,fnrbearbjgst=5,fnrbearbfach=6,fnrfachanguebernehmen=7, +fnrfachangaktsj=8,fnrfachanggeplsj=9,fnrfachangjgst=10,fnrlehrveruebernehmen= +11,fnrlehrverjgst=12;LET feldanzmaskeeingang=12;ROW feldanzmaskeeingangTEXT +VAR feldbs1;LET felderprozeile=9;LET ersteseingabefeld=3;LET +erstestabellenfeld=2;LET incrfuerkennung=1,incrfuerlvart=2, +incrfuerklassengranfang=3,incrfuerklassengrende=6,incrfuerwstd=7;LET +meldnrdatenspeichern=50,meldnrungueltigeauswahl=56,meldnrkennungzulang=60, +meldnrdatennichtspeichern=63,meldnrbittewarten=69,meldnrbitteangabegenauer= +129,meldnrungueltigeuebernahmejgst=146,meldnrfragedatenuebernehmen=300, +meldnrdatenwerdenuebernommen=301,meldnrdatenwurdenuebernommen=302, +meldnrdatenwurdennichtuebernommen=303,meldnrkeinfachzuanderenangaben=307, +meldnrungueltigesfach=310,meldnrungueltigeart=311, +meldnrletztezeilenichteinfuegen=314,meldnrkeinfaecherangebot=315, +meldnruebernehmenderjgst=316,meldnrlehrveranstaltungloeschen=317, +meldnrfalschetastezuankreuz=318,meldnrfalscheausfuellung=319, +meldnrungueltigeklassengruppe=320,meldnrkeinelehrveranstaltungen=321, +meldnrlehrveranstaltunggibtsschon=322,meldnrfehlerhaftejgst=305;LET kennzhell +="#";LET textschulj="Schuljahr",texthalbj="Schulhalbjahr",ersteshalbjahr="1", +zweiteshalbjahr="2";LET wertaktuell="aktuell",wertgeplant="geplant";LET +artbestand="c02 art lehrveranstaltung";BOOL VAR aktuelleshalbjahrzubearbeiten +;TEXT VAR gewschulj,gewhalbj,aktschulj:="",akthalbj:="";INT VAR gewjgst, +startjgst,endejgst;TEXT VAR vgljgst:="",vglfach:="";INT VAR +jgstdesletztensatzes:=0;LET fachlaenge=2;LET kennunglaenge=4;INT VAR zugriff; +BOOL VAR eingangsmaskenfehler:=FALSE ;INT VAR pruefstatus:=0,letztecursorfnr +:=fnrbearbeiten;INT VAR aktzeile;INT VAR ifnr,ijgst;LET trenner="�";TEXT VAR +geprueftefaecher,gueltigeschuelergruppen:="",gueltigeklassengruppen:="", +gueltigelvart:="";TEXT VAR pruefklasse;INT VAR pruefjgst,pruefbez;TEXT VAR +sugruppen,sugruppejgst;INT VAR possugruppe,laengesugruppen;LET +laengeeinersugruppe=6;LET blankzeichen=" ",trennstrich="/", +textueberschriftanfang="Lehrveranstaltungen benennen für Halbjahr ";TEXT VAR +ueberschrift;LET jgst0=0,jgst5=5,jgst10=10,jgst13=13;BOOL VAR gueltigejgst; +BOOL VAR bearbeitungallerjgst;BOOL VAR leerenbszeigen;LET lvdateiname= +"LV-Datei";FILE VAR lvdatei;TEXT VAR lvdateizeile;TEXT VAR nfschulj,nfhalbj, +nfjgst,nffachkennung;INT VAR izeile,anzahlgezeigtezeilen, +anzahleingegebenezeilen;LET zeilenanzahl=18;ROW zeilenanzahlSTRUCT (TEXT jgst +,TEXT fach,TEXT kennung,TEXT kopplung,TEXT art,TEXT klasse1,TEXT klasse2, +TEXT klasse3,TEXT klasse4,TEXT wstd)VAR bszeile; +initfelderdeseingangsbildschirms;initbszeilepuffer;PROC +lehrveranstaltungenbenennenstart:standardstartproc(maskeeingang); +wertedeseingangsbildschirmsholen;infeld(fnrbearbeiten);standardfelderausgeben +;infeld(letztecursorfnr);standardnprocEND PROC +lehrveranstaltungenbenennenstart;PROC lehrveranstaltungenuebernehmenstart: +BOOL VAR ausgangsdatenfehlen:=FALSE ;eingangsbehandlung(1);IF +eingangsmaskenfehlerTHEN infeld(pruefstatus);return(1)ELSE +wertedeseingangsbildschirmsmerken;schulhalbjahrbestimmen;IF jgstangabeleer +THEN startjgst:=jgst0;endejgst:=jgst13ELSE startjgst:=int(vgljgst);endejgst:= +startjgstFI ;IF standardmaskenfeld(fnrfachanguebernehmen)<>""THEN +pruefendesfaecherangebots;IF ausgangsdatenfehlenTHEN standardmeldung( +meldnrkeinfaecherangebot,"");return(1)ELSE standardmeldung( +meldnrfragedatenuebernehmen,"");eingabefeldersperren(fnrfachanguebernehmen); +standardnprocFI ELSE pruefenderlehrveranstaltungen;IF ausgangsdatenfehlen +THEN standardmeldung(meldnrkeinelehrveranstaltungen,"");return(1)ELIF +gewhalbj=ersteshalbjahrAND startjgst=jgst13THEN standardmeldung( +meldnrungueltigeuebernahmejgst,"");infeld(fnrlehrverjgst);return(1)ELSE +standardmeldung(meldnrfragedatenuebernehmen,"");eingabefeldersperren( +fnrlehrveruebernehmen);standardnprocFI FI FI .pruefendesfaecherangebots: +ausgangsdatenfehlen:=FALSE ;putwert(fnrfangsj,gewschulj);putwert(fnrfanghj, +gewhalbj);putintwert(fnrfangjgst,startjgst);putintwert(fnrfanglfdnr,0);search +(dnrfaecherangebot,FALSE );IF dbstatus<>okTHEN ausgangsdatenfehlen:=TRUE +ELIF wert(fnrfanghj)<>gewhalbjCOR wert(fnrfangsj)<>gewschuljCOR intwert( +fnrfangjgst)>endejgstTHEN ausgangsdatenfehlen:=TRUE FI . +pruefenderlehrveranstaltungen:ausgangsdatenfehlen:=FALSE ;putwert(fnrlvsj, +aktschulj);putwert(fnrlvhj,akthalbj);putintwert(fnrlvjgst,startjgst);putwert( +fnrlvfachkennung,"");search(dnrlehrveranstaltungen,FALSE );IF dbstatus<>ok +THEN ausgangsdatenfehlen:=TRUE ELIF wert(fnrlvhj)<>akthalbjCOR wert(fnrlvsj) +<>aktschuljCOR intwert(fnrlvjgst)>endejgstTHEN ausgangsdatenfehlen:=TRUE FI . +END PROC lehrveranstaltungenuebernehmenstart;PROC eingabefeldersperren(INT +CONST fnrfreiesfeld):FOR ifnrFROM fnrbearbeitenUPTO feldanzmaskeeingangREP +IF ifnr<>fnrfreiesfeldTHEN feldschutz(ifnr)FI PER ;infeld(fnrfreiesfeld)END +PROC eingabefeldersperren;PROC eingabefelderfreigeben:FOR ifnrFROM +fnrbearbeitenUPTO feldanzmaskeeingangREP feldfrei(ifnr)PER END PROC +eingabefelderfreigeben;PROC lehrveranstaltungenuebernehmen(BOOL CONST +uebernehmen):INT VAR letztejgst:=-1;IF uebernehmenTHEN standardmeldung( +meldnrdatenwerdenuebernommen,"");IF standardmaskenfeld(fnrfachanguebernehmen) +<>""THEN evtlvorhandenelehrveranstaltungenloeschen; +neuelvausfaecherangebotschreibenELSE neuelvauslehrveranstaltungenschreibenFI +;evtlkurswahldatenbeimuebernehmenaktualisieren;IF +aktuelleshalbjahrzubearbeitenTHEN aenderungsvermerksetzen(wertaktuell)ELSE +aenderungsvermerksetzen(wertgeplant)FI ;standardmeldung( +meldnrdatenwurdenuebernommen,"")ELSE standardmeldung( +meldnrdatenwurdennichtuebernommen,"")FI ;eingabefelderfreigeben;return(2). +evtlkurswahldatenbeimuebernehmenaktualisieren:IF +aktuelleshalbjahrzubearbeitenOR gewhalbj=zweiteshalbjahrTHEN FOR gewjgstFROM +startjgstUPTO endejgstREP IF gewjgst>jgst10THEN kurswahlserverlvaktualisieren +(text(gewjgst),text(gewjgst),gewhalbj)FI ;PER ;ELSE FOR gewjgstFROM startjgst +UPTO endejgstREP IF gewjgst>=jgst10THEN kurswahlserverlvaktualisieren(text( +gewjgst),text(gewjgst+1),gewhalbj)FI ;PER ;FI . +evtlvorhandenelehrveranstaltungenloeschen: +sucheerstelehrveranstaltungzugewhalbj;WHILE lehrveranstaltungzuloeschenREP +meldungzumloeschenbeijgstwechsel;loeschevorhandenelehrveranstaltung; +suchenaechstelehrveranstaltungzugewhalbjPER . +sucheerstelehrveranstaltungzugewhalbj:putwert(fnrlvsj,gewschulj);putwert( +fnrlvhj,gewhalbj);putintwert(fnrlvjgst,startjgst);putwert(fnrlvfachkennung,"" +);search(dnrlehrveranstaltungen,FALSE );letztejgst:=-1;. +lehrveranstaltungzuloeschen:dbstatus=okCAND wert(fnrlvsj)=gewschuljCAND wert( +fnrlvhj)=gewhalbjCAND intwert(fnrlvjgst)<=endejgst. +loeschevorhandenelehrveranstaltung:delete(dnrlehrveranstaltungen). +meldungzumloeschenbeijgstwechsel:IF intwert(fnrlvjgst)<>letztejgstTHEN +letztejgst:=intwert(fnrlvjgst);standardmeldung( +meldnrlehrveranstaltungloeschen,text(letztejgst)+kennzhell)FI . +suchenaechstelehrveranstaltungzugewhalbj:succ(dnrlehrveranstaltungen). +neuelvausfaecherangebotschreiben:letztejgst:=-1;REP +lehrveranstaltungenzufaecherangebotschreiben; +suchenaechstesfaecherangebotzugewhalbjUNTIL faecherangebotabgehandeltPER . +lehrveranstaltungenzufaecherangebotschreiben:INT VAR satzanzahl:=intwert( +fnrfanganzlv);INT VAR isatz; +setzefestewerteausfaecherangebotfuerlehrveranstaltung; +meldungzuruebernahmebeijgstwechsel;FOR isatzFROM 1UPTO satzanzahlREP +setzevarwerteausfaecherangebotfuerlehrveranstaltung;insert( +dnrlehrveranstaltungen)PER .meldungzuruebernahmebeijgstwechsel:IF intwert( +fnrlvjgst)<>letztejgstTHEN letztejgst:=intwert(fnrlvjgst);standardmeldung( +meldnruebernehmenderjgst,text(letztejgst)+kennzhell)FI . +setzefestewerteausfaecherangebotfuerlehrveranstaltung:putwert(fnrlvsj, +gewschulj);putwert(fnrlvhj,gewhalbj);putintwert(fnrlvjgst,intwert(fnrfangjgst +));putwert(fnrlvparaphe,"");putwert(fnrlvart,wert(fnrfangart));putintwert( +fnrlvwochenstd,intwert(fnrfangwochenstd));putwert(fnrlvklgrp1,"");putwert( +fnrlvklgrp2,"");putwert(fnrlvklgrp3,"");putwert(fnrlvklgrp4,"");putwert( +fnrlvraumgrp1,"");putwert(fnrlvraumgrp2,"");. +setzevarwerteausfaecherangebotfuerlehrveranstaltung:TEXT VAR lvkennung:=text( +wert(fnrfangart),2)+textzweistellig(isatz);putwert(fnrlvfachkennung,text(wert +(fnrfangfach),fachlaenge)+lvkennung);putwert(fnrlvkopplung,textzweistellig( +intwert(fnrfangjgst))+textzweistellig(intwert(fnrfanglfdnr))+lvkennung);. +suchenaechstesfaecherangebotzugewhalbj:succ(dnrfaecherangebot). +faecherangebotabgehandelt:NOT (dbstatus=okCAND intwert(fnrfangjgst)<=endejgst +CAND wert(fnrfangsj)=gewschuljCAND wert(fnrfanghj)=gewhalbj). +neuelvauslehrveranstaltungenschreiben:lvsaetzezuaktuellenjgstindateischreiben +;evtlvorhandenelehrveranstaltungenloeschenvorbereiten; +evtlvorhandenelehrveranstaltungenloeschen; +lvsaetzeausdateizugeplantenjgstschreiben. +lvsaetzezuaktuellenjgstindateischreiben:forget(lvdateiname,quiet);lvdatei:= +sequentialfile(output,lvdateiname);standardmeldung(meldnrbittewarten,""); +holegueltigelehrveranstaltungen. +evtlvorhandenelehrveranstaltungenloeschenvorbereiten:IF gewhalbj= +ersteshalbjahrAND NOT jgstangabeleerTHEN IF startjgst>=jgst5THEN startjgst +INCR 1;endejgstINCR 1FI FI .lvsaetzeausdateizugeplantenjgstschreiben: +letztejgst:=-1;lvdatei:=sequentialfile(input,lvdateiname);WHILE NOT eof( +lvdatei)REP getline(lvdatei,lvdateizeile);restoretupel(dnrlehrveranstaltungen +,lvdateizeile);putwert(fnrlvhj,gewhalbj);IF gewhalbj=ersteshalbjahrTHEN +putwert(fnrlvsj,gewschulj);ijgst:=intwert(fnrlvjgst);IF ijgst>0THEN +putintwert(fnrlvjgst,ijgst+1);TEXT VAR bearbkopplung:=wert(fnrlvkopplung);IF +int(subtext(bearbkopplung,1,2))=ijgstTHEN putwert(fnrlvkopplung, +textzweistellig(ijgst+1)+subtext(bearbkopplung,3))FI ;FI ;FI ;IF intwert( +fnrlvjgst)>jgst13THEN LEAVE lvsaetzeausdateizugeplantenjgstschreibenELSE +meldungzuruebernahmebeijgstwechsel;insert(dnrlehrveranstaltungen)FI PER END +PROC lehrveranstaltungenuebernehmen;PROC holegueltigelehrveranstaltungen: +inittupel(dnrlehrveranstaltungen);putwert(fnrlvsj,aktschulj);putwert(fnrlvhj, +akthalbj);putintwert(fnrlvjgst,startjgst);search(dnrlehrveranstaltungen, +FALSE );statleseschleife(dnrlehrveranstaltungen,aktschulj,akthalbj,fnrlvsj, +fnrlvhj,PROC lehrveranstaltungindateieinlesen)END PROC +holegueltigelehrveranstaltungen;PROC lehrveranstaltungindateieinlesen(BOOL +VAR b):IF dbstatus<>0OR wert(fnrlvsj)<>aktschuljOR wert(fnrlvhj)<>akthalbjOR +intwert(fnrlvjgst)>endejgstTHEN b:=TRUE ELSE savetupel(dnrlehrveranstaltungen +,lvdateizeile);putline(lvdatei,lvdateizeile)FI END PROC +lehrveranstaltungindateieinlesen;PROC bearbeitunglehrveranstaltungen: +eingangsbehandlung(2);IF eingangsmaskenfehlerTHEN infeld(pruefstatus);return( +1)ELSE wertedeseingangsbildschirmsmerken;schulhalbjahrbestimmen; +zugriffauflehrveranstaltungenbestimmen;erstensatzlesen;IF +keinelehrveranstaltungengespeichertCAND bearbeitungallerjgstTHEN +standardmeldung(meldnrkeinelehrveranstaltungen,"");return(1)ELSE +standardstartproc(maskebearb);ueberschriftzeilezusammensetzen; +standardkopfmaskeaktualisieren(ueberschrift);bsfuellen;infeld( +ersteseingabefeld);standardnprocFI ;FI . +zugriffauflehrveranstaltungenbestimmen:IF fachangabeleerTHEN zugriff:= +ixlvsjhjkoppELIF jgstangabeleerTHEN zugriff:=ixlvsjhjkennELSE zugriff:= +dnrlehrveranstaltungenFI .erstensatzlesen:putwert(fnrlvsj,gewschulj);putwert( +fnrlvhj,gewhalbj);putintwert(fnrlvjgst,int(vgljgst));IF zugriff=ixlvsjhjkopp +THEN putwert(fnrlvkopplung,textzweistellig(int(vgljgst)))ELSE putwert( +fnrlvfachkennung,vglfach)FI ;jgstdesletztensatzes:=int(vgljgst);search( +zugriff,FALSE );leerenbszeigen:=NOT (dbstatus=okCAND wert(fnrlvhj)=gewhalbj +CAND wert(fnrlvsj)=gewschuljCAND (jgstangabeleerCOR intwert(fnrlvjgst)=int( +vgljgst))CAND (fachangabeleerCOR compress(subtext(wert(fnrlvfachkennung),1, +fachlaenge))=vglfach)).keinelehrveranstaltungengespeichert:dbstatus<>0. +ueberschriftzeilezusammensetzen:ueberschrift:=textueberschriftanfang; +ueberschriftCAT gewhalbj;ueberschriftCAT blankzeichen;ueberschriftCAT subtext +(gewschulj,1,2);ueberschriftCAT trennstrich;ueberschriftCAT subtext(gewschulj +,3,4).END PROC bearbeitunglehrveranstaltungen;BOOL PROC fachangabeleer: +vglfach=""END PROC fachangabeleer;BOOL PROC jgstangabeleer:vgljgst=""END +PROC jgstangabeleer;PROC bsfuellen:izeile:=0;IF NOT leerenbszeigenTHEN +startebildschirmblock(zugriff,zeilenanzahl-1);bildschirmblock(PROC satzmerken +,BOOL PROC (INT CONST )satzzubehandeln,0);IF dbstatus=0THEN succ(zugriff);IF +dbstatus<>0THEN inittupel(dnrlehrveranstaltungen)FI ELSE inittupel( +dnrlehrveranstaltungen)FI ;merkesatzalsnachfolgerELSE nffachkennung:=""FI ; +evtlleerzeilenhinzufuegen;werteausbszeileinstandardfeldersetzen;infeld( +erstestabellenfeld);standardfelderausgeben;.evtlleerzeilenhinzufuegen: +anzahlgezeigtezeilen:=izeile;WHILE izeile<zeilenanzahlREP izeileINCR 1; +bszeile(izeile).jgst:=text(jgstdesletztensatzes);bszeile(izeile).fach:=""; +bszeile(izeile).kennung:="";bszeile(izeile).kopplung:="";bszeile(izeile).art +:="";bszeile(izeile).klasse1:="";bszeile(izeile).klasse2:="";bszeile(izeile). +klasse3:="";bszeile(izeile).klasse4:="";bszeile(izeile).wstd:=""PER . +werteausbszeileinstandardfeldersetzen:ifnr:=erstestabellenfeld;TEXT VAR +letztejgst:="-1";FOR izeileFROM 1UPTO zeilenanzahlREP IF bszeile(izeile).jgst +=letztejgstTHEN standardmaskenfeld(" ",ifnr);ELSE letztejgst:=bszeile(izeile +).jgst;standardmaskenfeld(textzweistellig(int(letztejgst)),ifnr);FI ; +standardmaskenfeld(bszeile(izeile).fach,ifnr+1);standardmaskenfeld(bszeile( +izeile).kennung,ifnr+2);standardmaskenfeld(bszeile(izeile).art,ifnr+3); +standardmaskenfeld(bszeile(izeile).klasse1,ifnr+4);standardmaskenfeld(bszeile +(izeile).klasse2,ifnr+5);standardmaskenfeld(bszeile(izeile).klasse3,ifnr+6); +standardmaskenfeld(bszeile(izeile).klasse4,ifnr+7);standardmaskenfeld(bszeile +(izeile).wstd,ifnr+8);ifnrINCR felderprozeilePER .merkesatzalsnachfolger: +nfschulj:=wert(fnrlvsj);nfhalbj:=wert(fnrlvhj);nfjgst:=wert(fnrlvjgst); +nffachkennung:=wert(fnrlvfachkennung).END PROC bsfuellen;BOOL PROC +satzzubehandeln(INT CONST dummynr):IF NOT (izeile<zeilenanzahlCAND dbstatus= +okCAND wert(fnrlvsj)=gewschuljCAND wert(fnrlvhj)=gewhalbj)THEN LEAVE +satzzubehandelnWITH FALSE FI ;IF NOT jgstangabeleerCAND intwert(fnrlvjgst)<> +int(vgljgst)THEN LEAVE satzzubehandelnWITH FALSE FI ;IF NOT fachangabeleer +CAND compress(subtext(wert(fnrlvfachkennung),1,fachlaenge))<>vglfachTHEN +LEAVE satzzubehandelnWITH FALSE FI ;TRUE .END PROC satzzubehandeln;PROC +satzmerken:izeileINCR 1;bszeile(izeile).jgst:=wert(fnrlvjgst); +jgstdesletztensatzes:=intwert(fnrlvjgst);bszeile(izeile).fach:=compress( +subtext(wert(fnrlvfachkennung),1,2));bszeile(izeile).kennung:=subtext(wert( +fnrlvfachkennung),3);bszeile(izeile).kopplung:=wert(fnrlvkopplung);bszeile( +izeile).art:=wert(fnrlvart);bszeile(izeile).klasse1:=wert(fnrlvklgrp1); +bszeile(izeile).klasse2:=wert(fnrlvklgrp2);bszeile(izeile).klasse3:=wert( +fnrlvklgrp3);bszeile(izeile).klasse4:=wert(fnrlvklgrp4);bszeile(izeile).wstd +:=wert(fnrlvwochenstd);.END PROC satzmerken;PROC lehrveranstaltungenspeichern +(BOOL CONST speichern):IF speichernTHEN plausipruefung;ELSE pruefstatus:=0FI +;IF pruefstatus<>0THEN infeld(pruefstatus);return(1)ELSE datenspeichern( +speichern);IF nachfolgesatzvorhandenTHEN holewertedesnachfolgersatzes;search( +dnrlehrveranstaltungen,TRUE );IF dbstatus<>0THEN search( +dnrlehrveranstaltungen,FALSE )FI ;izeile:=0;IF satzzubehandeln(izeile)THEN +changeindex;leerenbszeigen:=FALSE ;setzejgstfuerneuenbildschirm; +naechstenbildschirmzeigenELSE enter(2)FI ELIF letzteeingabezeilegefuelltTHEN +leerenbszeigen:=TRUE ;naechstenbildschirmzeigenELSE enter(2)FI ;FI . +nachfolgesatzvorhanden:nffachkennung<>"".letzteeingabezeilegefuellt: +standardmaskenfeld((zeilenanzahl-1)*felderprozeile+ersteseingabefeld)<>"". +holewertedesnachfolgersatzes:putwert(fnrlvsj,nfschulj);putwert(fnrlvhj, +nfhalbj);putwert(fnrlvjgst,nfjgst);putwert(fnrlvfachkennung,nffachkennung). +naechstenbildschirmzeigen:bsfuellen;infeld(ersteseingabefeld);return(1). +setzejgstfuerneuenbildschirm:izeile:=zeilenanzahl;WHILE +keinbezugaufletztensatzREP izeileDECR 1PER ;jgstdesletztensatzes:=int(bszeile +(izeile).jgst);.keinbezugaufletztensatz:bszeile(izeile).fach="".END PROC +lehrveranstaltungenspeichern;PROC datenspeichern(BOOL CONST speichern):IF +speichernTHEN standardmeldung(meldnrdatenspeichern,""); +datenspeicherungdurchfuehren;ELSE standardmeldung(meldnrdatennichtspeichern, +"");FI ;END PROC datenspeichern;PROC datenspeicherungdurchfuehren:BOOL VAR +aenderungsvermerkzusetzen:=FALSE ;FOR izeileFROM 1UPTO zeilenanzahlREP +holevergleichswerte;IF lvzeileloeschenTHEN aenderungszeileanzeigen; +aenderungsvermerkzusetzen:=TRUE ;altelvloeschenELIF lvzeileeinfuegenTHEN +aenderungszeileanzeigen;aenderungsvermerkzusetzen:=TRUE ;neuelveinfuegenELIF +lvzeileueberschreibenTHEN aenderungszeileanzeigen;aenderungsvermerkzusetzen:= +TRUE ;altelvupdateFI PER ;IF aenderungsvermerkzusetzenTHEN IF +aktuelleshalbjahrzubearbeitenTHEN aenderungsvermerksetzen(wertaktuell)ELSE +aenderungsvermerksetzen(wertgeplant)FI FI .holevergleichswerte:INT VAR +prueffnr:=fachfnrin(izeile);TEXT VAR prueffach:=standardmaskenfeld(prueffnr); +TEXT VAR altesfach:=bszeile(izeile).fach.lvzeileloeschen:prueffach=""CAND +altesfach<>"".altelvloeschen:setzealtesuchwerteindbpuffer;search( +dnrlehrveranstaltungen,TRUE );IF dbstatus=0THEN delete(dnrlehrveranstaltungen +);evtlkurswahldatenbeimbearbeitenaktualisierenFI .lvzeileeinfuegen:prueffach +<>""CAND altesfach="".neuelveinfuegen:setzeneuewerteindbpuffer; +setzenichtsichtbarewerteindbpuffer;insert(dnrlehrveranstaltungen); +evtlkurswahldatenbeimbearbeitenaktualisieren.lvzeileueberschreiben:NOT ( +standardmaskenfeld(prueffnr)=bszeile(izeile).fachCAND standardmaskenfeld( +prueffnr+1)=bszeile(izeile).kennungCAND standardmaskenfeld(prueffnr+2)= +bszeile(izeile).artCAND standardmaskenfeld(prueffnr+3)=bszeile(izeile). +klasse1CAND standardmaskenfeld(prueffnr+4)=bszeile(izeile).klasse2CAND +standardmaskenfeld(prueffnr+5)=bszeile(izeile).klasse3CAND standardmaskenfeld +(prueffnr+6)=bszeile(izeile).klasse4CAND standardmaskenfeld(prueffnr+7)= +bszeile(izeile).wstd).altelvupdate:setzealtesuchwerteindbpuffer;search( +dnrlehrveranstaltungen,TRUE );setzeneuewerteindbpuffer;IF standardmaskenfeld( +prueffnr)<>bszeile(izeile).fachCOR compress(standardmaskenfeld(prueffnr+1))<> +bszeile(izeile).kennungTHEN setzenichtsichtbarewerteindbpufferFI ;update( +dnrlehrveranstaltungen);evtlkurswahldatenbeimbearbeitenaktualisieren. +setzealtesuchwerteindbpuffer:putwert(fnrlvsj,gewschulj);putwert(fnrlvhj, +gewhalbj);putwert(fnrlvjgst,bszeile(izeile).jgst);putwert(fnrlvfachkennung, +text(altesfach,fachlaenge)+bszeile(izeile).kennung).setzeneuewerteindbpuffer: +putwert(fnrlvsj,gewschulj);putwert(fnrlvhj,gewhalbj);putwert(fnrlvjgst, +bszeile(izeile).jgst);putwert(fnrlvfachkennung,neuekennung);putwert(fnrlvart, +standardmaskenfeld(prueffnr+2));putwert(fnrlvklgrp1,standardmaskenfeld( +prueffnr+3));putwert(fnrlvklgrp2,standardmaskenfeld(prueffnr+4));putwert( +fnrlvklgrp3,standardmaskenfeld(prueffnr+5));putwert(fnrlvklgrp4, +standardmaskenfeld(prueffnr+6));putwert(fnrlvwochenstd,standardmaskenfeld( +prueffnr+7)).setzenichtsichtbarewerteindbpuffer:putwert(fnrlvkopplung, +neuekopplung);putwert(fnrlvparaphe,"");putwert(fnrlvraumgrp1,"");putwert( +fnrlvraumgrp2,"").neuekennung:text(prueffach,fachlaenge)+compress( +standardmaskenfeld(prueffnr+1)).neuekopplung:textzweistellig(int(bszeile( +izeile).jgst))+neuekennung.END PROC datenspeicherungdurchfuehren;PROC +evtlkurswahldatenbeimbearbeitenaktualisieren:IF intwert(fnrlvjgst)>jgst10 +THEN IF aktuelleshalbjahrzubearbeitenOR gewhalbj=zweiteshalbjahrTHEN +kurswahlserverlvaktualisieren(wert(fnrlvjgst),wert(fnrlvjgst),gewhalbj)ELSE +kurswahlserverlvaktualisieren(text(intwert(fnrlvjgst)-1),wert(fnrlvjgst), +gewhalbj)FI FI END PROC evtlkurswahldatenbeimbearbeitenaktualisieren;PROC +aenderungszeileanzeigen:infeld((izeile-1)*felderprozeile+ersteseingabefeld) +END PROC aenderungszeileanzeigen;PROC lehrveranstaltungenzeileeinfuegen(BOOL +CONST zeilerein):INT VAR erstefnr;IF zeilereinTHEN zeileeinfuegenELSE +zeileloeschenFI ;return(1).zeileeinfuegen:aktzeile:=bearbeitungszeilezufeld( +infeld);IF aktzeile=zeilenanzahlTHEN standardmeldung( +meldnrletztezeilenichteinfuegen,"");LEAVE zeileeinfuegenFI ;IF bszeile( +zeilenanzahl).fach<>""THEN merkeverdraengtensatzalsnachfolgesatz; +anzahlgezeigtezeilen:=zeilenanzahlFI ;FOR izeileFROM zeilenanzahl-1DOWNTO +aktzeile+1REP zeileiminternenpufferverschieben; +wertederzeileaufdembildschirmverschiebenPER ;izeile:=aktzeile+1; +leerzeileschreiben;jgstineingefuegterzeilevermerken;neuezeilenausgeben. +merkeverdraengtensatzalsnachfolgesatz:nfschulj:=gewschulj;nfhalbj:=gewhalbj; +nfjgst:=bszeile(zeilenanzahl).jgst;nffachkennung:=text(bszeile(zeilenanzahl). +fach,fachlaenge)+bszeile(zeilenanzahl).kennung. +zeileiminternenpufferverschieben:bszeile(izeile+1).jgst:=bszeile(izeile).jgst +;bszeile(izeile+1).fach:=bszeile(izeile).fach;bszeile(izeile+1).kennung:= +bszeile(izeile).kennung;bszeile(izeile+1).kopplung:=bszeile(izeile).kopplung; +bszeile(izeile+1).art:=bszeile(izeile).art;bszeile(izeile+1).klasse1:=bszeile +(izeile).klasse1;bszeile(izeile+1).klasse2:=bszeile(izeile).klasse2;bszeile( +izeile+1).klasse3:=bszeile(izeile).klasse3;bszeile(izeile+1).klasse4:=bszeile +(izeile).klasse4;bszeile(izeile+1).wstd:=bszeile(izeile).wstd;. +wertederzeileaufdembildschirmverschieben:FOR ifnrFROM erstesfeldderzeileUPTO +letztesfeldderzeileREP standardmaskenfeld(standardmaskenfeld(ifnr),ifnr+ +felderprozeile)PER .erstesfeldderzeile:(izeile-1)*felderprozeile+ +erstestabellenfeld.letztesfeldderzeile:erstesfeldderzeile+felderprozeile-1. +jgstineingefuegterzeilevermerken:bszeile(izeile).jgst:=bszeile(aktzeile).jgst +;bszeile(izeile).fach:="";bszeile(izeile).kennung:="";bszeile(izeile). +kopplung:="";bszeile(izeile).art:="";bszeile(izeile).klasse1:="";bszeile( +izeile).klasse2:="";bszeile(izeile).klasse3:="";bszeile(izeile).klasse4:=""; +bszeile(izeile).wstd:="";standardmaskenfeld(textzweistellig(int(bszeile( +izeile).jgst)),erstefnr);.zeileloeschen:izeile:=bearbeitungszeilezufeld( +infeld);leerzeileschreiben;neuezeilenausgeben.leerzeileschreiben:erstefnr:= +erstesfeldderzeile;standardmaskenfeld(" ",erstefnr);FOR ifnrFROM erstefnr+1 +UPTO letztesfeldderzeileREP standardmaskenfeld("",ifnr)PER . +neuezeilenausgeben:infeld(erstefnr);standardfelderausgeben;infeld(erstefnr+1) +.END PROC lehrveranstaltungenzeileeinfuegen;INT PROC bearbeitungszeilezufeld( +INT CONST feldnr):((feldnr-erstestabellenfeld)DIV felderprozeile)+1END PROC +bearbeitungszeilezufeld;PROC eingangsbehandlung(INT CONST plausiart):LET +uebernehmen=1,bearbeiten=2;BOOL VAR ok;reinitparsing;eingangsmaskenfehler:= +FALSE ;ankreuzfelderpruefen;IF mehralseineauswahlangekreuztTHEN +standardmeldung(meldnrungueltigeauswahl,"");pruefstatus:=fnrbearbeiten; +eingangsmaskenfehler:=TRUE ;LEAVE eingangsbehandlungFI ;IF +uebernehmenpruefungTHEN IF ankreuz1THEN ankreuzfehler(fnrbearbeiten);LEAVE +eingangsbehandlungFI ELIF bearbeitenpruefungTHEN IF ankreuz2THEN +ankreuzfehler(fnrfachanguebernehmen);LEAVE eingangsbehandlungELIF ankreuz3 +THEN ankreuzfehler(fnrlehrveruebernehmen);LEAVE eingangsbehandlungFI FI ;IF +bearbeitenpruefungTHEN standardpruefe(5,fnrbearbaktsj,fnrbearbgeplsj,0,"", +pruefstatus);IF pruefstatus<>0THEN eingangsmaskenfehler:=TRUE ;LEAVE +eingangsbehandlungELSE jgstpruefung(fnrbearbjgst,ok);IF NOT okTHEN jgstfehler +(fnrbearbjgst);LEAVE eingangsbehandlungFI ;vgljgst:=standardmaskenfeld( +fnrbearbjgst);vglfach:=compress(standardmaskenfeld(fnrbearbfach))FI ELIF +ankreuz2THEN standardpruefe(5,fnrfachangaktsj,fnrfachanggeplsj,0,"", +pruefstatus);IF pruefstatus<>0THEN eingangsmaskenfehler:=TRUE ;LEAVE +eingangsbehandlungELSE jgstpruefung(fnrfachangjgst,ok);IF NOT okTHEN +jgstfehler(fnrfachangjgst);LEAVE eingangsbehandlungELSE vgljgst:= +standardmaskenfeld(fnrfachangjgst)FI ;FI ELSE jgstpruefung(fnrlehrverjgst,ok) +;IF NOT okTHEN jgstfehler(fnrlehrverjgst);LEAVE eingangsbehandlungELSE +vgljgst:=standardmaskenfeld(fnrlehrverjgst)FI ;FI ;IF ankreuz1THEN FOR ifnr +FROM fnrfachanguebernehmenUPTO fnrlehrverjgstREP IF standardmaskenfeld(ifnr) +<>""THEN eintragfehler(ifnr);LEAVE eingangsbehandlungFI PER ELIF ankreuz2 +THEN FOR ifnrFROM fnrbearbeitenUPTO fnrbearbfachREP IF standardmaskenfeld( +ifnr)<>""THEN eintragfehler(ifnr);LEAVE eingangsbehandlungFI PER ;IF +standardmaskenfeld(fnrlehrverjgst)<>""THEN eintragfehler(fnrlehrverjgst); +LEAVE eingangsbehandlungFI ELSE FOR ifnrFROM fnrbearbeitenUPTO fnrfachangjgst +REP IF standardmaskenfeld(ifnr)<>""THEN eintragfehler(ifnr);LEAVE +eingangsbehandlungFI PER FI .ankreuzfelderpruefen:INT VAR summe:=0;IF +ankreuz1THEN summeINCR 1FI ;IF ankreuz2THEN summeINCR 1FI ;IF ankreuz3THEN +summeINCR 1FI .mehralseineauswahlangekreuzt:summe<>1.ankreuz1: +standardmaskenfeld(fnrbearbeiten)<>"".ankreuz2:standardmaskenfeld( +fnrfachanguebernehmen)<>"".ankreuz3:standardmaskenfeld(fnrlehrveruebernehmen) +<>"".uebernehmenpruefung:plausiart=uebernehmen.bearbeitenpruefung:plausiart= +bearbeiten.END PROC eingangsbehandlung;PROC ankreuzfehler(INT CONST +fehlerfeld):pruefstatus:=fehlerfeld;eingangsmaskenfehler:=TRUE ; +standardmeldung(meldnrfalschetastezuankreuz,"").END PROC ankreuzfehler;PROC +jgstpruefung(INT CONST fnrpruefjgst,BOOL VAR ok):IF standardmaskenfeld( +fnrpruefjgst)=""THEN bearbeitungallerjgst:=TRUE ;ok:=TRUE ;ELSE +bearbeitungallerjgst:=FALSE ;gewjgst:=int(standardmaskenfeld(fnrpruefjgst)); +ok:=lastconversionokCAND (gewjgst=jgst0OR (gewjgst>=jgst5AND gewjgst<=jgst13) +)FI END PROC jgstpruefung;PROC jgstfehler(INT CONST fehlerfeld):pruefstatus:= +fehlerfeld;eingangsmaskenfehler:=TRUE ;standardmeldung(meldnrfehlerhaftejgst, +"").END PROC jgstfehler;PROC eintragfehler(INT CONST fehlerfeld):pruefstatus +:=fehlerfeld;eingangsmaskenfehler:=TRUE ;standardmeldung( +meldnrfalscheausfuellung,"").END PROC eintragfehler;PROC plausipruefung: +pruefstatus:=0;facheintraegepruefen;IF eingabefehlerTHEN LEAVE plausipruefung +FI ;datenkonsistenzpruefen;IF eingabefehlerTHEN LEAVE plausipruefungFI . +eingabefehler:pruefstatus<>0.END PROC plausipruefung;PROC +facheintraegepruefen:anzahleingegebenezeilen:=0;geprueftefaecher:=trenner;IF +gueltigeschuelergruppen=""THEN holegueltigeschuelergruppenFI ;IF +gueltigeklassengruppen=""THEN holegueltigeklassengruppenFI ;IF gueltigelvart= +""THEN holegueltigelvartenFI ;FOR izeileFROM 1UPTO zeilenanzahlREP IF +fachfehlerTHEN LEAVE facheintraegepruefenFI PER .fachfehler:INT VAR prueffnr +:=fachfnrin(izeile);TEXT VAR prueffach:=standardmaskenfeld(prueffnr);IF +prueffachleerTHEN IF eintraginfolgefelderderzeileTHEN pruefstatus:=prueffnr; +standardmeldung(meldnrkeinfachzuanderenangaben,"");TRUE ELSE FALSE FI ELIF +prueffachungueltigTHEN pruefstatus:=prueffnr;standardmeldung( +meldnrungueltigesfach,"");TRUE ELIF length(standardmaskenfeld(prueffnr+ +incrfuerkennung))>kennunglaengeTHEN pruefstatus:=prueffnr+incrfuerkennung; +standardmeldung(meldnrkennungzulang,"");TRUE ELIF compress(standardmaskenfeld +(prueffnr+incrfuerkennung))=""THEN pruefstatus:=prueffnr+incrfuerkennung; +standardmeldung(meldnrbitteangabegenauer,"");TRUE ELIF lvartungueltigTHEN +TRUE ELIF klassengruppenungueltigTHEN TRUE ELIF wochenstundenungueltigTHEN +pruefstatus:=prueffnr+incrfuerwstd;TRUE ELSE anzahleingegebenezeilenINCR 1; +FALSE FI .prueffachleer:prueffach="".eintraginfolgefelderderzeile: +standardmaskenfeld(prueffnr+1)<>""COR standardmaskenfeld(prueffnr+2)<>""COR +standardmaskenfeld(prueffnr+3)<>""COR standardmaskenfeld(prueffnr+4)<>""COR +standardmaskenfeld(prueffnr+5)<>""COR standardmaskenfeld(prueffnr+6)<>""COR +standardmaskenfeld(prueffnr+7)<>"".prueffachungueltig:IF +fachkuerzelschongeprueftTHEN FALSE ELIF fachimfachbestandTHEN +geprueftefaecherCAT prueffach;geprueftefaecherCAT trenner;FALSE ELSE TRUE FI +.fachkuerzelschongeprueft:pos(geprueftefaecher,trenner+prueffach+trenner)>0. +fachimfachbestand:putwert(fnrffach,prueffach);search(dnrfaecher,TRUE ); +dbstatus=0.lvartungueltig:IF pos(gueltigelvart,trenner+standardmaskenfeld( +prueffnr+incrfuerlvart)+trenner)=0THEN standardmeldung(meldnrungueltigeart,"" +);pruefstatus:=prueffnr+incrfuerlvart;TRUE ELSE FALSE FI . +klassengruppenungueltig:pruefjgst:=int(bszeile(izeile).jgst);FOR ifnrFROM +prueffnr+incrfuerklassengranfangUPTO prueffnr+incrfuerklassengrendeREP +pruefklasse:=standardmaskenfeld(ifnr);IF klassengruppeungueltigTHEN +standardmeldung(meldnrungueltigeklassengruppe,"");pruefstatus:=ifnr;LEAVE +klassengruppenungueltigWITH TRUE FI PER ;FALSE .klassengruppeungueltig:IF +pruefklasse=""THEN FALSE ELIF pruefklasseistschuelergruppeTHEN FALSE ELIF +pruefklasseistklassengruppeTHEN FALSE ELIF pruefklasseistgueltigejgstTHEN +FALSE ELSE TRUE FI .pruefklasseistschuelergruppe:pos(gueltigeschuelergruppen, +trenner+bszeile(izeile).jgst+pruefklasse+trenner)>0. +pruefklasseistklassengruppe:IF pos(gueltigeklassengruppen,trenner+pruefklasse ++trenner)=0THEN FALSE ELIF pruefjgst=jgst0THEN TRUE ELSE putwert( +fnrkgklassengrp,pruefklasse);search(dnrklassengruppen,TRUE );IF dbstatus<>0 +THEN FALSE ELSE sugruppen:=wert(fnrkgschuelergrp);laengesugruppen:=length( +sugruppen);possugruppe:=1;WHILE possugruppe<laengesugruppenREP sugruppejgst:= +subtext(sugruppen,possugruppe,possugruppe+1);IF int(sugruppejgst)<>pruefjgst +THEN LEAVE pruefklasseistklassengruppeWITH FALSE FI ;possugruppeINCR +laengeeinersugruppePER ;TRUE FI FI .pruefklasseistgueltigejgst:gueltigejgst:= +FALSE ;pruefbez:=int(pruefklasse);IF lastconversionokTHEN IF pruefbez>=jgst5 +CAND pruefbez<=jgst13THEN IF pruefjgst=jgst0OR pruefjgst=pruefbezTHEN +gueltigejgst:=TRUE FI FI FI ;gueltigejgst.wochenstundenungueltig: +standardpruefe(1,prueffnr+incrfuerwstd,0,0,"",pruefstatus);IF pruefstatus=0 +THEN standardpruefe(2,prueffnr+incrfuerwstd,0,0,"",pruefstatus);pruefstatus<> +0ELSE TRUE FI .END PROC facheintraegepruefen;INT PROC fachfnrin(INT CONST +zeilennr):(zeilennr-1)*felderprozeile+ersteseingabefeldEND PROC fachfnrin; +PROC datenkonsistenzpruefen:FOR izeileFROM 1UPTO zeilenanzahlREP IF +zeileungueltigTHEN pruefstatus:=prueffnr;standardmeldung( +meldnrlehrveranstaltunggibtsschon,"");LEAVE datenkonsistenzpruefenFI PER . +zeileungueltig:IF leerzeileTHEN FALSE ELIF +zeileistimschluesselunveraendertgebliebenTHEN FALSE ELSE +ergebnisderpruefungzeileschongespeichertFI .leerzeile:INT VAR prueffnr:= +fachfnrin(izeile);TEXT VAR prueffach:=standardmaskenfeld(prueffnr);prueffach= +"".zeileistimschluesselunveraendertgeblieben:standardmaskenfeld(prueffnr)= +bszeile(izeile).fachCAND compress(standardmaskenfeld(prueffnr+1))=bszeile( +izeile).kennung.ergebnisderpruefungzeileschongespeichert: +neuewerteindbpuffersetzen;search(dnrlehrveranstaltungen,TRUE );dbstatus=0. +neuewerteindbpuffersetzen:putwert(fnrlvsj,gewschulj);putwert(fnrlvhj,gewhalbj +);putwert(fnrlvjgst,bszeile(izeile).jgst);putwert(fnrlvfachkennung,text( +prueffach,fachlaenge)+compress(standardmaskenfeld(prueffnr+1))).END PROC +datenkonsistenzpruefen;PROC schulhalbjahrbestimmen:IF akthalbj=""THEN +akthalbj:=schulkenndatum(texthalbj);aktschulj:=schulkenndatum(textschulj)FI ; +IF standardmaskenfeld(fnrlehrveruebernehmen)<>""THEN +aktuelleshalbjahrzubearbeiten:=FALSE ELSE aktuelleshalbjahrzubearbeiten:= +standardmaskenfeld(fnrbearbaktsj)<>""OR standardmaskenfeld(fnrfachangaktsj)<> +""FI ;gewhalbj:=akthalbj;gewschulj:=aktschulj;IF NOT +aktuelleshalbjahrzubearbeitenTHEN geplanteshjundsjberechnen(gewhalbj, +gewschulj)FI END PROC schulhalbjahrbestimmen;PROC holegueltigeschuelergruppen +:gueltigeschuelergruppen:=trenner;inittupel(dnraktschuelergruppen); +statleseschleife(dnraktschuelergruppen,gewschulj,gewhalbj,fnrsgrpsj,fnrsgrphj +,PROC schuelergruppelesen)END PROC holegueltigeschuelergruppen;PROC +schuelergruppelesen(BOOL VAR b):IF dbstatus<>0OR wert(fnrsgrpsj)<>gewschulj +OR wert(fnrsgrphj)<>gewhalbjTHEN b:=TRUE ELSE gueltigeschuelergruppenCAT wert +(fnrsgrpjgst);gueltigeschuelergruppenCAT wert(fnrsgrpkennung); +gueltigeschuelergruppenCAT trennerFI END PROC schuelergruppelesen;PROC +holegueltigeklassengruppen:gueltigeklassengruppen:=trenner;inittupel( +dnrklassengruppen);statleseschleife(dnrklassengruppen,"","",fnrkgklassengrp, +fnrkgklassengrp,PROC klassengruppelesen)END PROC holegueltigeklassengruppen; +PROC klassengruppelesen(BOOL VAR b):IF dbstatus<>0THEN b:=TRUE ELSE +gueltigeklassengruppenCAT wert(fnrkgklassengrp);gueltigeklassengruppenCAT +trennerFI END PROC klassengruppelesen;PROC holegueltigelvarten:gueltigelvart +:=trenner;inittupel(dnrschluessel);statleseschleife(dnrschluessel,artbestand, +"",fnrschlsachgebiet,fnrschlschluessel,PROC holelvart)END PROC +holegueltigelvarten;PROC holelvart(BOOL VAR b):IF wert(fnrschlsachgebiet)> +artbestandCOR dbstatus<>0THEN b:=TRUE ELSE gueltigelvartCAT wert( +fnrschlschluessel);gueltigelvartCAT trennerFI END PROC holelvart;TEXT PROC +textzweistellig(INT CONST i):IF i<10THEN "0"+text(i)ELSE text(i)FI END PROC +textzweistellig;PROC initfelderdeseingangsbildschirms:INT VAR i;FOR iFROM 1 +UPTO 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;PROC initbszeilepuffer:FOR izeileFROM 1UPTO +zeilenanzahlREP bszeile(izeile).jgst:="";bszeile(izeile).fach:="";bszeile( +izeile).kennung:="";bszeile(izeile).art:="";bszeile(izeile).klasse1:=""; +bszeile(izeile).klasse2:="";bszeile(izeile).klasse3:="";bszeile(izeile). +klasse4:="";bszeile(izeile).wstd:="";PER END PROC initbszeilepuffer;END +PACKET lehrveranstaltungenbenennen + diff --git a/app/schulis/2.2.1/src/4.liste ausgewaehlter kopplungen drucken b/app/schulis/2.2.1/src/4.liste ausgewaehlter kopplungen drucken new file mode 100644 index 0000000..3b86dd8 --- /dev/null +++ b/app/schulis/2.2.1/src/4.liste ausgewaehlter kopplungen drucken @@ -0,0 +1,72 @@ +PACKET listeausgewaehlterkopplungendruckenDEFINES +listekopplungenmitanzlverstellen,listekopplungenmitanzlvdrucken:LET feldanzlv +=2,feldakthj=3,anzkopfzeilen=9,anzzeilen=45,ausgparam="#",leerzeile=" ", +meldungbearbwird=352,meldunglistedrucken=58,meldunglisteaufbereiten=7, +meldungwarten=69,meldungkeinedaten=68,meldungfalscherwert=54,meldungkeinelv= +326,dateiname="Liste der Kopplungen",zwdateiname="zwischenspeicherung", +praefix=" ",ueberschrift="Liste aller Kopplungen",kopfzeile= +"Kopplung Anzahl gekoppelter Lehrveranstaltungen",stdkopf= +" 1 2 3 4 5 6 7 8 9 10 11 12 13 14 >14", +unterstrich= +"----------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---", +spaltentrenner=": : : : : : : : : : : : : : : " +,spaltentrenner1= +": x : : : : : : : : : : : : : : ", +spaltentrennerl= +": : : : : : : : : : : : : : : x ",schuljahr= +"Schuljahr",halbjahr="Schulhalbjahr",schulname="Schulname",schulort= +"Schulort";TEXT VAR schj,schhj,aktkopplung:="",postfix:="",anzseiten, +ueberschriftanhang,anzahllv:="",neuerkopf:="";INT VAR i,j,anzlv,anwanzlv, +spaltenindex,anzs;BOOL VAR erstekopplung:=TRUE ;FILE VAR datei,zwdatei;PROC +listekopplungenmitanzlverstellen:standardmeldung(meldungwarten,"");schj:= +schulkenndatum(schuljahr);schhj:=schulkenndatum(halbjahr);IF +standardmaskenfeld(feldakthj)=""THEN geplanteshjundsjberechnen(schhj,schj)FI +;anzahllv:=standardmaskenfeld(feldanzlv);IF anzahllv<>""THEN anwanzlv:=int( +anzahllv);IF lastconversionokTHEN IF anwanzlv<1COR anwanzlv>99THEN +fehlermeldungfalscherwertFI ELSE fehlermeldungfalscherwertFI ; +ueberschriftanhang:=" ab "+text(anwanzlv)+" Lehrveranstaltungen";ELSE +anwanzlv:=1;ueberschriftanhang:=""FI ;spaltenindex:=anwanzlv-1;inittupel( +dnrlehrveranstaltungen);IF records(dnrlehrveranstaltungen)=0.0THEN +standardmeldung(meldungkeinelv,"");return(1)ELSE bereiteprotokollvor;dbstatus +(0);erstekopplung:=TRUE ;aktkopplung:="";anzlv:=1;statleseschleife( +ixlvsjhjkopp,schj,schhj,fnrlvsj,fnrlvhj,PROC holekopplungen);IF lines(datei)= +anzkopfzeilenTHEN standardmeldung(meldungkeinedaten,"");return(1);ELSE +zeigedatei(dateiname,"vr")FI FI .fehlermeldungfalscherwert:standardmeldung( +meldungfalscherwert,"");return(1);LEAVE listekopplungenmitanzlverstellen. +bereiteprotokollvor:standardmeldung(meldunglisteaufbereiten,"");forget( +dateiname,quiet);datei:=sequentialfile(output,dateiname);forget(zwdateiname, +quiet);zwdatei:=sequentialfile(output,zwdateiname);schreibkopf(datei).END +PROC listekopplungenmitanzlverstellen;PROC schreibkopf(FILE VAR dat):INT VAR +k;putline(dat,schulkenndatum(schulname));putline(dat,text(schulkenndatum( +schulort),65)+date);putline(dat,leerzeile);putline(dat,ueberschrift+ +ueberschriftanhang);putline(dat,"Schuljahr 19"+text(schj,2)+"/"+subtext(schj +,3)+" "+schhj+". Halbjahr");putline(dat,leerzeile);putline(dat,kopfzeile); +IF anwanzlv=1THEN putline(dat,stdkopf)ELSE neuerkopf:=praefix;FOR kFROM 1 +UPTO 14REP neuerkopfCAT text(anwanzlv-1+k,4)PER ;neuerkopfCAT " >"+text( +anwanzlv+13);putline(dat,neuerkopf)FI ;putline(dat,unterstrich).END PROC +schreibkopf;PROC schreibfuss(INT CONST nr):putline(zwdatei,leerzeile);putline +(zwdatei,leerzeile);putline(zwdatei,text(nr,70)+"/"+anzseiten);putline( +zwdatei,"#page#")END PROC schreibfuss;PROC holekopplungen(BOOL VAR b):IF wert +(fnrlvsj)<>schjCOR wert(fnrlvhj)<>schhjCOR dbstatus<>0THEN dbstatus(1);b:= +TRUE ELIF aktkopplung<>wert(fnrlvkopplung)THEN gibeintragaus;aktkopplung:= +wert(fnrlvkopplung);standardmeldung(meldungbearbwird,aktkopplung+ausgparam); +anzlv:=1ELSE anzlvINCR 1FI .gibeintragaus:IF erstekopplungTHEN erstekopplung +:=FALSE ELIF anzlv=anwanzlvTHEN putline(datei,text(aktkopplung,10)+ +spaltentrenner1)ELIF anzlv>anwanzlv+13THEN putline(datei,text(aktkopplung,10) ++spaltentrennerl)ELIF anzlv>anwanzlvCAND anzlv<anwanzlv+14THEN postfix:= +spaltentrenner;replace(postfix,(anzlv-spaltenindex)*4-1,"x");putline(datei, +text(aktkopplung,10)+postfix)FI .END PROC holekopplungen;PROC +listekopplungenmitanzlvdrucken:INT VAR volleseiten:=0,restzeilen:=0;TEXT VAR +zeile:="";standardmeldung(meldunglistedrucken,"");modify(datei); +ermittleseiten;giballeseitenaus.ermittleseiten:i:=lines(datei)-anzkopfzeilen; +anzs:=iDIV anzzeilen;volleseiten:=anzs;restzeilen:=iMOD anzzeilen;IF +restzeilen<>0THEN anzsINCR 1FI ;anzseiten:=text(anzs,2).giballeseitenaus: +toline(datei,anzkopfzeilen+1);FOR iFROM 1UPTO volleseitenREP schreibkopf( +zwdatei);FOR jFROM 1UPTO anzzeilenREP readrecord(datei,zeile);down(datei); +putline(zwdatei,zeile)PER ;schreibfuss(i)PER ;IF restzeilen<>0THEN +schreibkopf(zwdatei);FOR iFROM 1UPTO restzeilenREP readrecord(datei,zeile); +down(datei);putline(zwdatei,zeile)PER ;FOR iFROM restzeilen+1UPTO anzzeilen +REP putline(zwdatei,leerzeile)PER ;schreibfuss(anzs)FI ;print(zwdateiname); +enter(2).END PROC listekopplungenmitanzlvdrucken;END PACKET +listeausgewaehlterkopplungendrucken; + diff --git a/app/schulis/2.2.1/src/4.listen.aufsichtsplan b/app/schulis/2.2.1/src/4.listen.aufsichtsplan new file mode 100644 index 0000000..ba9c597 --- /dev/null +++ b/app/schulis/2.2.1/src/4.listen.aufsichtsplan @@ -0,0 +1,78 @@ +PACKET aufsichtsplandruckenDEFINES aufsichtsplanmaskebearbeiten, +aufsichtsplanggferstellen,aufsichtsplanzeigen,aufsichtsplandrucken:LET maske= +"ms aufsichtsplan drucken eingang",mnrlistewirderstellt=7, +mnrlistewirdgedruckt=58,mnrbittewarten=69,mnrlistewirdaufbereitet=190, +mnrkeinedatenimbestand=68,blank=" ",sixblanks=" ";INT CONST fnr2aktsj:=2 +,fnr3ausgbs:=3,fnr4ausgdr:=4;INT VAR druckzeilenzahl;TEXT VAR +gesamtueberschrift,ueberschrift2,halbjahr,schuljahr,sjhjaufber,altertag;TEXT +CONST ueberschrift1:="Aufsicht Aufsichtsorte ",ueberschrift3:=7*"----------" ++blank,aufsichtsorte:="c02 aufsichtsorte";FILE VAR showdatei,druckdatei;LET +niltext="",maxaufsichtszeiten=90,maxorteprozeile=10;ROW maxaufsichtszeiten +TEXT VAR zeiten;ROW maxorteprozeileTEXT VAR ortejezeile;BOOL VAR keinedatenda +;INT VAR status,zaehler,anzahlzeiten,anzahlorte;BOOL VAR bildschirmausgabe; +PROC aufsichtsplanmaskebearbeiten:standardvproc(maske);END PROC +aufsichtsplanmaskebearbeiten;PROC aufsichtsplanggferstellen:standardpruefe(5, +fnr3ausgbs,fnr4ausgdr,0,niltext,status);IF status<>0THEN infeld(status); +return(1)ELSE bildschirmausgabe:=standardmaskenfeld(fnr4ausgdr)=niltext; +standardmeldung(mnrbittewarten,niltext);ggfdatenmerkenundshowdateierstellen; +IF keinedatendaTHEN standardmeldung(mnrkeinedatenimbestand,niltext);return(1) +ELSE IF bildschirmausgabeTHEN aufsichtsplanzeigenELSE aufsichtsplandrucken(0) +FI ;FI ;FI ;.ggfdatenmerkenundshowdateierstellen:halbjahr:=schulkenndatum( +"Schulhalbjahr");schuljahr:=schulkenndatum("Schuljahr");IF standardmaskenfeld +(fnr2aktsj)=niltextTHEN geplanteshjundsjberechnen(halbjahr,schuljahr)FI ; +sjhjaufber:=subtext(schuljahr,1,2)+"/";sjhjaufberCAT subtext(schuljahr,3,4)+ +" ";sjhjaufberCAT halbjahr;zaehler:=0;keinedatenda:=FALSE ;inittupel( +dnraufsichtszeiten);exactmatch(FALSE );statleseschleife(dnraufsichtszeiten, +schuljahr,halbjahr,fnrazsj,fnrazhj,PROC aufsichtszeitenmerken);keinedatenda:= +anzahlzeiten=0;IF NOT keinedatendaTHEN ggfdiezehnerstenortelesenFI ;. +ggfdiezehnerstenortelesen:zaehler:=0;anzahlorte:=0;inittupel(dnrschluessel); +putwert(fnrschlsachgebiet,aufsichtsorte);search(dnrschluessel,FALSE );IF +dbstatus<>0OR wert(fnrschlsachgebiet)<>aufsichtsorteTHEN keinedatenda:=TRUE ; +ELSE maximalzehnortemerkenundueberschriftenbasteln;standardmeldung( +mnrlistewirderstellt,niltext);TEXT CONST namedershowdatei:="Aufsichtsplan : " ++sjhjaufber+". Halbj.";forget(namedershowdatei,quiet);showdatei:= +sequentialfile(output,namedershowdatei);inittupel(dnraufsichtsplan);putwert( +fnrapsj,schuljahr);putwert(fnraphj,halbjahr); +prozeitproorteintraegeausaufsichtsplaninshowdatei;IF anzahlorte= +maxorteprozeileTHEN WHILE wert(fnrschlsachgebiet)=aufsichtsorteAND dbstatus<> +3REP anzahlorte:=0;zaehler:=0;maximalzehnortemerkenundueberschriftenbasteln; +prozeitproorteintraegeausaufsichtsplaninshowdatei;PER FI ;FI ;END PROC +aufsichtsplanggferstellen;PROC maximalzehnortemerkenundueberschriftenbasteln: +ueberschrift2:="Tag Nr. ";WHILE dbstatus<>3AND wert(fnrschlsachgebiet)= +aufsichtsorteAND zaehler<maxorteprozeileREP zaehlerINCR 1;ortejezeile(zaehler +):=wert(fnrschlschluessel);ueberschrift2CAT text(ortejezeile(zaehler),6);succ +(dnrschluessel);PER ;anzahlorte:=zaehlerEND PROC +maximalzehnortemerkenundueberschriftenbasteln;PROC aufsichtszeitenmerken( +BOOL VAR b):IF dbstatus<>0OR wert(fnrazhj)<>halbjahrTHEN b:=TRUE ;ELSE +zaehlerINCR 1;zeiten(zaehler):=wert(fnrazaufsichtszeit);FI ;anzahlzeiten:= +zaehlerEND PROC aufsichtszeitenmerken;PROC +prozeitproorteintraegeausaufsichtsplaninshowdatei:INT VAR hilfszaehler;TEXT +VAR hilfstext,tag,aufsichtsnr,zeile;putline(showdatei,ueberschrift1);putline( +showdatei,ueberschrift2);putline(showdatei,ueberschrift3);altertag:="";FOR +zaehlerFROM 1UPTO anzahlzeitenREP hilfstext:=zeiten(zaehler);putwert( +fnrapaufsichtszeit,hilfstext);IF length(hilfstext)=2THEN aufsichtsnr:=" "; +aufsichtsnrCAT subtext(hilfstext,2,2);ELSE aufsichtsnr:=subtext(hilfstext,2,3 +);FI ;tagnummeraufbereiten;FOR hilfszaehlerFROM 1UPTO anzahlorteREP putwert( +fnrapaufsichtsort,ortejezeile(hilfszaehler));search(dnraufsichtsplan,TRUE ); +IF dbstatus=0THEN hilfstextCAT text(wert(fnrapparaphe),6);ELSE hilfstextCAT +sixblanksFI ;PER ;zeile:=hilfstext;hilfstext:=sixblanks;putline(showdatei, +zeile);PER ;putline(showdatei,blank);.tagnummeraufbereiten:tag:=text( +hilfstext,1);IF tag="1"THEN tag:="Mo "ELIF tag="2"THEN tag:="Di "ELIF tag="3" +THEN tag:="Mi "ELIF tag="4"THEN tag:="Do "ELIF tag="5"THEN tag:="Fr "ELIF tag +="6"THEN tag:="Sa "FI ;IF tag=altertagTHEN hilfstext:=3*blankELSE hilfstext:= +tag;FI ;hilfstextCAT aufsichtsnr+". ";altertag:=tagEND PROC +prozeitproorteintraegeausaufsichtsplaninshowdatei;PROC aufsichtsplanzeigen: +zeigedatei("Aufsichtsplan : "+sjhjaufber+". Halbj.","a");END PROC +aufsichtsplanzeigen;PROC aufsichtsplandrucken(INT CONST ruecksprungregel): +INT VAR zeilenzaehler:=1;TEXT VAR zeile;gesamtueberschrift:= +"Aufsichtsplan für Schuljahr ";gesamtueberschriftCAT sjhjaufber; +gesamtueberschriftCAT ". Halbjahr";druckdatei:=sequentialfile(output, +"liste.1");input(showdatei);druckvorbereiten;druckzeilenzahl:=drucklaenge(2); +initdruckkopf(gesamtueberschrift,blank);druckkopfschreiben; +setzemitseitennummern(TRUE );WHILE NOT eof(showdatei)REP getline(showdatei, +zeile);druckzeileschreiben(zeile);zeilenzaehlerINCR 1;IF zeilenzaehler> +druckzeilenzahlTHEN seitenwechsel;zeilenzaehler:=1FI ;PER ;drucknachbereiten; +IF ruecksprungregel=0THEN return(1)ELSE return(2)FI ;standardmeldung( +mnrlistewirdgedruckt,niltext);END PROC aufsichtsplandrucken;END PACKET +aufsichtsplandrucken; + diff --git a/app/schulis/2.2.1/src/4.listen.unterrichtsverteilung b/app/schulis/2.2.1/src/4.listen.unterrichtsverteilung new file mode 100644 index 0000000..39eaee2 --- /dev/null +++ b/app/schulis/2.2.1/src/4.listen.unterrichtsverteilung @@ -0,0 +1,252 @@ +PACKET unterrichtsverteilunglistenDEFINES unterrichtsverteilungspezielleteile +:LET AUSGFELD =ROW ausgfeldlaengeTEXT ,AUSGKOPF =ROW ausgkopflaengeTEXT , +AUSGKOPFDRUCK =ROW ausgkopflaengeTEXT ;AUSGFELD VAR ausgfeld;AUSGKOPF VAR +ausgkopf;AUSGKOPFDRUCK VAR ausgkopfdruck;LET maskeunterrichtsverteilung= +"ms liste unterrichtsverteilung eingang",ausgfeldlaenge=1, +anzahlderobjekteprobildschirm=17,ueberschriftenzeilen=2,ausgkopflaenge=2, +spaltentrenner=" ",zweierspaltenbreite=2,viererspaltenbreite=4, +fuenferspaltenbreite=5,achterspaltenbreite=8,neunerspaltenbreite=9, +zehnerspaltenbreite=10,unterrichtsverteilunganfpos=2,niltext="",blank=" ", +null=0,strich="-",mnrfachfalsch=305,mnrjgstfalsch=305,mnrbearbeitetwerden=352 +,mnrparapheungueltig=344,mnrauswahlnichtsinnvoll=56;TEXT VAR +neueranfbuchstabe,teiltextmeldung,unterrichtsverteilungueberschrift:="", +schuljahr,halbjahr,altejahrgangsstufe:="",alteparaphe:="",altekopplung:="", +altesfach,gewaehltejgst,gewaehlteparaphe,gewaehltesfach,bearbeitungsschuljahr +,bearbeitungshalbjahr,jahrgangsstufe:="",fach,kennung,kopplung,paraphe, +wochenstdn,klassengruppe1,klassengruppe2,klassengruppe3,klassengruppe4, +raumgruppe1,raumgruppe2,anfbuchstabe,auswahlnichtsinnvoll;TEXT CONST +unterstreichung:=bildbreite*"-",leerzeile:=bildbreite*blank,textueb1:= +"Jgst. ",textueb2:="Fach Kenng. ",textueb3:="Paraphe ",textueb4:="Kopplung " +,textueb5:="Wstd. Klassengruppen Räume ";TEXT VAR textueberschrift +:="";INT VAR eingabestatus,bildanfang,spalte2druckbreite,druckzeilenzahl, +aktuelleindexnr:=dnrlehrveranstaltungen,feldnr,jgsthilfsvar;INT CONST +groesstejgst:=13,kleinstejgst:=5;BOOL VAR geplanteshjgewaehlt,erstezeile:= +FALSE ,sortjgstalle,sortjgstbest,sortparaphenalle,sortparaphebest, +sortkopplungen,sortfaecher,sortbestfach;BOOL PROC multistop:BOOL VAR b;IF +dbstatus=okTHEN IF sortjgstalleXOR sortparaphenalleXOR sortkopplungenXOR +sortfaecherTHEN b:=bearbeitungshalbjahr=wert(fnrlvhj)ELIF sortjgstbestTHEN b +:=gewaehltejgst=wert(fnrlvjgst)AND bearbeitungshalbjahr=wert(fnrlvhj)ELIF +sortparaphebestTHEN b:=gewaehlteparaphe=wert(fnrlvparaphe)AND +bearbeitungshalbjahr=wert(fnrlvhj)ELIF sortbestfachTHEN b:=text( +gewaehltesfach,2)=text(wert(fnrlvfachkennung),2)AND bearbeitungshalbjahr=wert +(fnrlvhj)FI ;ELSE b:=FALSE FI ;bEND PROC multistop;BOOL PROC multistopsim: +setzebestandende(FALSE );BOOL VAR b:=multistop;setzebestandende(NOT b);bEND +PROC multistopsim;PROC unterrichtsverteilungspezielleteile(INT CONST nr): +SELECT nrOF CASE 1:unterrichtsverteilungdialogvorbereitenCASE 2: +unterrichtsverteilungeingabenrichtigCASE 3: +unterrichtsverteilunglistenvorbereitenCASE 4: +unterrichtsverteilungdruckvorbereitenCASE 5:unterrichtsverteilungseitedrucken +CASE 6:unterrichtsverteilungbildschirmvorbereitenCASE 7: +unterrichtsverteilungseitezeigenENDSELECT .END PROC +unterrichtsverteilungspezielleteile;PROC +unterrichtsverteilungdialogvorbereiten:unterrichtsverteilungueberschrift:= +text(vergleichsknoten);setzeanfangswerte(maskeunterrichtsverteilung, +unterrichtsverteilunganfpos)END PROC unterrichtsverteilungdialogvorbereiten; +PROC unterrichtsverteilungeingabenrichtig:LET fnrlehrveranstgn=2, +fnrlehrveranstgnjgst=3,fnrkopplungen=4,fnrparaphen=5,fnrbestparaphe=6, +fnrfaecher=7,fnrfach=8,fnraktuelleshj=9,fnrausgbild=10,fnrausgdrucker=11; +sortjgstalle:=FALSE ;sortjgstbest:=FALSE ;sortparaphenalle:=FALSE ; +sortparaphebest:=FALSE ;sortkopplungen:=FALSE ;sortfaecher:=FALSE ; +sortbestfach:=FALSE ;IF ausgabemediumkorrektgewaehltTHEN setzeausgabedrucker( +standardmaskenfeld(fnrausgbild)=niltext);geplanteshjgewaehlt:= +standardmaskenfeld(fnraktuelleshj)=niltext; +sortierartpruefenundmerkenbzwfehlermeldungausgeben;ELSE +meldefehlerauswahldruckerbildschirm;setzeeingabetest(FALSE )FI . +ausgabemediumkorrektgewaehlt:standardpruefe(5,fnrausgbild,fnrausgdrucker,null +,niltext,eingabestatus);eingabestatus=0. +sortierartpruefenundmerkenbzwfehlermeldungausgeben:IF (standardmaskenfeld( +fnrkopplungen)=niltextAND standardmaskenfeld(fnrparaphen)=niltextAND +standardmaskenfeld(fnrbestparaphe)=niltextAND standardmaskenfeld(fnrfaecher)= +niltextAND standardmaskenfeld(fnrfach)=niltext)THEN IF standardmaskenfeld( +fnrlehrveranstgn)=niltextTHEN meldefehler;setzeeingabetest(FALSE )ELSE +sortierungnachlehrveranstaltungenweiterpruefenFI ;ELSE IF NOT ( +standardmaskenfeld(fnrlehrveranstgn)=niltextAND standardmaskenfeld( +fnrlehrveranstgnjgst)=niltext)THEN meldefehler;setzeeingabetest(FALSE )ELSE +sortierungnachkopplungenparaphenoderfaechernpruefenFI ;FI . +sortierungnachlehrveranstaltungenweiterpruefen:IF standardmaskenfeld( +fnrlehrveranstgnjgst)=niltextTHEN sortjgstalle:=TRUE ;setzeeingabetest(TRUE ) +ELSE IF jgstkorrektTHEN sortjgstbest:=TRUE ;setzeeingabetest(TRUE )ELSE +meldefehlerjgst;setzeeingabetest(FALSE )FI ;FI ;. +sortierungnachkopplungenparaphenoderfaechernpruefen:IF standardmaskenfeld( +fnrkopplungen)<>niltextTHEN IF standardmaskenfeld(fnrparaphen)=niltextAND +standardmaskenfeld(fnrbestparaphe)=niltextAND standardmaskenfeld(fnrfaecher)= +niltextAND standardmaskenfeld(fnrfach)=niltextTHEN sortkopplungen:=TRUE ; +setzeeingabetest(TRUE )ELSE meldefehler;setzeeingabetest(FALSE )FI ;ELSE IF +standardmaskenfeld(fnrparaphen)<>niltextTHEN IF standardmaskenfeld(fnrfaecher +)=niltextAND standardmaskenfeld(fnrfach)=niltextTHEN +weiterepruefungzursortierungparaphenELSE meldefehler;setzeeingabetest(FALSE ) +FI ;ELSE IF standardmaskenfeld(fnrfaecher)<>niltextTHEN IF standardmaskenfeld +(fnrparaphen)=niltextAND standardmaskenfeld(fnrbestparaphe)=niltextTHEN +weiterepruefungzursortierungfaecherELSE meldefehler;setzeeingabetest(FALSE ) +FI ;FI ;FI ;FI ;.weiterepruefungzursortierungparaphen:IF standardmaskenfeld( +fnrbestparaphe)=niltextTHEN sortparaphenalle:=TRUE ;setzeeingabetest(TRUE ) +ELSE gewaehlteparaphe:=standardmaskenfeld(fnrbestparaphe);IF paraphekorrekt +THEN sortparaphebest:=TRUE ;setzeeingabetest(TRUE )FI ;FI ;. +weiterepruefungzursortierungfaecher:IF standardmaskenfeld(fnrfach)=niltext +THEN sortfaecher:=TRUE ;setzeeingabetest(TRUE )ELSE gewaehltesfach:= +standardmaskenfeld(fnrfach);IF fachkorrektTHEN sortbestfach:=TRUE ; +setzeeingabetest(TRUE )FI ;FI ;.meldefehlerauswahldruckerbildschirm:infeld( +fnrausgbild);standardmeldung(mnrauswahlnichtsinnvoll,niltext).meldefehler: +meldungstext(mnrauswahlnichtsinnvoll,auswahlnichtsinnvoll);standardmeldung( +auswahlnichtsinnvoll,niltext).jgstkorrekt:gewaehltejgst:=standardmaskenfeld( +fnrlehrveranstgnjgst);jgsthilfsvar:=int(gewaehltejgst);IF NOT +lastconversionokTHEN LEAVE jgstkorrektWITH FALSE FI ;IF jgsthilfsvar<10THEN +gewaehltejgst:=text(jgsthilfsvar);FI ;jgsthilfsvar<=groesstejgstAND +jgsthilfsvar>=kleinstejgst.paraphekorrekt:inittupel(dnrlehrer);putwert( +fnrlparaphe,gewaehlteparaphe);search(dnrlehrer,TRUE );dbstatus=ok.fachkorrekt +:inittupel(dnrfaecher);putwert(fnrffach,gewaehltesfach);search(dnrfaecher, +TRUE );dbstatus=ok.fehlerfalscheparaphe:standardmeldung(mnrparapheungueltig, +niltext);infeld(fnrbestparaphe);.meldefehlerjgst:standardmeldung( +mnrjgstfalsch,niltext);infeld(fnrlehrveranstgnjgst);.END PROC +unterrichtsverteilungeingabenrichtig;PROC +unterrichtsverteilunglistenvorbereiten:BOOL VAR b;initspalten; +setzespaltentrenner(spaltentrenner);bearbeitungshalbjahr:=schulkenndatum( +"Schulhalbjahr");bearbeitungsschuljahr:=schulkenndatum("Schuljahr");IF +geplanteshjgewaehltTHEN geplanteshjundsjberechnen(bearbeitungshalbjahr, +bearbeitungsschuljahr);FI ;inittupel(dnrlehrveranstaltungen);setzeidentiwert( +"");initobli(anzahlderobjekteprobildschirm);putwert(fnrlvsj, +bearbeitungsschuljahr);putwert(fnrlvhj,bearbeitungshalbjahr);IF sortjgstalle +XOR sortjgstbestTHEN sortierungnachprimärindexvorbereitenELIF sortkopplungen +THEN sortierungnachsekindexlvkopplungvorbereitenELIF sortfaecherOR +sortbestfachTHEN sortierungnachsekindexlvfachvorbereitenELSE +sortierungnachsekindexlvparaphevorbereitenFI ;objektlistestarten( +aktuelleindexnr,bearbeitungsschuljahr,feldnr,TRUE ,b);setzebestandende(NOT +multistopCOR b);.sortierungnachprimärindexvorbereiten:setzescanstartwert(""); +setzescanendewert("�");textueberschrift:=(textueb1+textueb2+textueb4+2*blank+ +textueb3+blank+textueb5);aktuelleindexnr:=dnrlehrveranstaltungen;IF +sortjgstbestTHEN putwert(fnrlvjgst,gewaehltejgst);feldnr:=fnrlvfachkennung; +ELSE feldnr:=fnrlvjgst;setzescanendewert("255");FI ;. +sortierungnachsekindexlvkopplungvorbereiten:textueberschrift:=(textueb4+ +textueb1+textueb2+2*blank+textueb3+2*blank+textueb5);aktuelleindexnr:= +ixlvsjhjkopp;feldnr:=fnrlvkopplung;. +sortierungnachsekindexlvparaphevorbereiten:textueberschrift:=(textueb3+ +textueb1+textueb2+textueb4+2*blank+textueb5);aktuelleindexnr:=ixlvsjhjpar;IF +sortparaphebestTHEN putwert(fnrlvparaphe,gewaehlteparaphe);feldnr:= +fnrlvfachkennung;ELSE feldnr:=fnrlvparapheFI ;. +sortierungnachsekindexlvfachvorbereiten:textueberschrift:=(textueb2+textueb1+ +textueb4+textueb3+2*blank+textueb5);aktuelleindexnr:=ixlvsjhjkenn;IF +sortbestfachTHEN feldnr:=fnrlvfachkennung;putwert(fnrlvfachkennung, +gewaehltesfach);setzescanstartwert(gewaehltesfach);setzescanendewert(text( +gewaehltesfach,2)+code(255));ELSE feldnr:=fnrlvfachkennung;FI ;END PROC +unterrichtsverteilunglistenvorbereiten;PROC +unterrichtsverteilungbildschirmvorbereiten:LET fnrausganf=2; +unterrichtsverteilungueberschrift:="Unterrichtsverteilung im Schuljahr "+( +text(bearbeitungsschuljahr,2)+"/"+text(bearbeitungsschuljahr,2,3)+", "+ +bearbeitungshalbjahr+". Halbjahr");standardkopfmaskeaktualisieren( +unterrichtsverteilungueberschrift);bildanfang:=fnrausganf; +setzebildanfangsposition(bildanfang);INT VAR i;setzespaltenbreite(bildbreite) +;spaltenweise(textueberschrift);ausgfeld(1):=zeile;ausgfeld(1)IN ausgabepos; +erhoeheausgabeposumeins;spaltenweise(length(textueberschrift)*strich); +ausgfeld(1):=zeile;ausgfeld(1)IN ausgabepos;erhoeheausgabeposumeins; +setzebildanfangsposition(4);spaltendefinierenEND PROC +unterrichtsverteilungbildschirmvorbereiten;PROC +unterrichtsverteilungseitezeigen:altejahrgangsstufe:=niltext;alteparaphe:= +niltext;altekopplung:=niltext;altesfach:=niltext;blaettern(PROC (INT CONST ) +unterrichtsverteilungzeigen,aktion,TRUE ,TRUE ,BOOL PROC multistop)END PROC +unterrichtsverteilungseitezeigen;PROC unterrichtsverteilungzeigen(INT CONST x +):unterrichtsverteilungholen;unterrichtsverteilungaufbereitenbild; +unterrichtsverteilungaufbildschirm;END PROC unterrichtsverteilungzeigen;PROC +unterrichtsverteilungaufbereitenbild:IF sortkopplungenTHEN kopplungausgeben; +spaltenweise(jahrgangsstufe);spaltenweise(fach);spaltenweise(kennung); +spaltenweise(blank);spaltenweise(paraphe);ELIF sortjgstalleXOR sortjgstbest +THEN jahrgangsstufeausgeben;spaltenweise(fach);spaltenweise(kennung); +spaltenweise(kopplung);spaltenweise(paraphe);ELIF sortparaphenalleXOR +sortparaphebestTHEN parapheausgeben;spaltenweise(blank);spaltenweise( +jahrgangsstufe);spaltenweise(fach);spaltenweise(kennung);spaltenweise( +kopplung);ELIF sortfaecherXOR sortbestfachTHEN fachausgeben;spaltenweise( +kennung);spaltenweise(jahrgangsstufe);spaltenweise(kopplung);spaltenweise( +paraphe);FI ;spaltenweise(wochenstdn);spaltenweise(blank);spaltenweise( +klassengruppe1);spaltenweise(klassengruppe2);spaltenweise(klassengruppe3); +spaltenweise(klassengruppe4);spaltenweise(raumgruppe1);spaltenweise( +raumgruppe2);.jahrgangsstufeausgeben:IF altejahrgangsstufe<>jahrgangsstufe +THEN spaltenweise(jahrgangsstufe);altejahrgangsstufe:=jahrgangsstufe;ELSE +spaltenweise(blank)FI ;.parapheausgeben:IF alteparaphe<>parapheTHEN +spaltenweise(paraphe);alteparaphe:=parapheELSE spaltenweise(blank)FI ;. +fachausgeben:IF altesfach<>fachTHEN spaltenweise(fach);altesfach:=fachELSE +spaltenweise(blank)FI ;.kopplungausgeben:IF altekopplung<>kopplungTHEN +spaltenweise(kopplung);altekopplung:=kopplung;ELSE spaltenweise(blank)FI ; +END PROC unterrichtsverteilungaufbereitenbild;PROC +unterrichtsverteilungaufbildschirm:INT VAR i;FOR iFROM 1UPTO ausgfeldlaenge +REP ausgfeld(i):=zeile;ausgfeld(i)IN ausgabepos;erhoeheausgabeposumeins;PER ; +END PROC unterrichtsverteilungaufbildschirm;PROC +unterrichtsverteilungdruckvorbereiten:setzebestandende(FALSE );anfbuchstabe:= +" ";druckvorbereiten;variablenfuerdrucksetzen; +unterrichtsverteilungueberschrift:="Unterrichtsverteilung im Schuljahr "+( +text(bearbeitungsschuljahr,2)+"/"+text(bearbeitungsschuljahr,2,3)+", "+ +bearbeitungshalbjahr+". Halbjahr");initdruckkopf(zentriert( +unterrichtsverteilungueberschrift,druckbreite),zentriert(length( +unterrichtsverteilungueberschrift)*strich,druckbreite));spaltendefinieren; +initausgabekopfdruck;inittupel(dnrlehrveranstaltungen);putwert(fnrlvsj, +bearbeitungsschuljahr);putwert(fnrlvhj,bearbeitungshalbjahr);IF sortjgstbest +THEN putwert(fnrlvjgst,gewaehltejgst);ELIF sortparaphebestTHEN putwert( +fnrlvparaphe,gewaehlteparaphe);ELIF sortbestfachTHEN putwert(fnrlvfachkennung +,gewaehltesfach);FI ;lesenvorbereitendruck(PROC (INT CONST ,BOOL PROC ,INT +VAR )scanforward,BOOL PROC multistopsim);.variablenfuerdrucksetzen: +druckzeilenzahl:=drucklaenge(ueberschriftenzeilen)-ausgkopflaenge.END PROC +unterrichtsverteilungdruckvorbereiten;PROC initausgabekopfdruck:ausgkopfdruck +(1):=textueberschrift;ausgkopfdruck(2):=unterstreichungEND PROC +initausgabekopfdruck;PROC unterrichtsverteilungseitedrucken: +unterrichtsverteilungueberschriftdrucken;altejahrgangsstufe:=niltext; +alteparaphe:=niltext;altekopplung:=niltext;altesfach:=niltext;erstezeile:= +TRUE ;seitedrucken(PROC (INT VAR )unterrichtsverteilungdrucken, +druckzeilenzahl,ausgfeldlaenge,BOOL PROC multistopsim);seitenwechsel.END +PROC unterrichtsverteilungseitedrucken;PROC +unterrichtsverteilungueberschriftdrucken:INT VAR i;druckkopfschreiben;FOR i +FROM 1UPTO ausgkopflaengeREP druckzeileschreiben(ausgkopfdruck(i))PER END +PROC unterrichtsverteilungueberschriftdrucken;PROC +unterrichtsverteilungdrucken(INT VAR zeilenzaehler):LET markiert="#"; +unterrichtsverteilungholen;ggflmeldunganfbuchstabe;IF NOT (erstezeile)AND (( +sortjgstalleAND altejahrgangsstufe<>jahrgangsstufe)XOR (sortkopplungenAND +altekopplung<>kopplung)XOR (sortparaphenalleAND alteparaphe<>paraphe)XOR ( +sortfaecherAND altesfach<>fach))THEN leerzeileindruckdateiFI ; +unterrichtsverteilungaufbereitendruck;zeilenzaehlerINCR ausgfeldlaenge; +unterrichtsverteilungindruckdatei;erstezeile:=FALSE .leerzeileindruckdatei: +ausgfeld(1):=text(blank,druckbreite);druckzeileschreiben(ausgfeld(1)); +zeilenzaehlerINCR ausgfeldlaenge;.ggflmeldunganfbuchstabe:IF +anfbuchstabegeaendertTHEN meldunganfbuchstabeFI .anfbuchstabegeaendert:IF +sortjgstalleXOR sortjgstbestTHEN neueranfbuchstabe:=jahrgangsstufeSUB 1; +teiltextmeldung:="Jgst "ELIF sortparaphenalleXOR sortparaphebestTHEN +neueranfbuchstabe:=parapheSUB 1;teiltextmeldung:= +"Paraphen mit Anfangsbuchstaben: "ELIF sortkopplungenTHEN neueranfbuchstabe:= +kopplungSUB 1;teiltextmeldung:="Kopplungen mit Anfangsbuchstaben: "ELIF +sortfaecherXOR sortbestfachTHEN neueranfbuchstabe:=fach;teiltextmeldung:= +"Fach: "FI ;anfbuchstabe<>neueranfbuchstabe.meldunganfbuchstabe: +standardmeldung(mnrbearbeitetwerden,teiltextmeldung+neueranfbuchstabe+ +markiert);anfbuchstabe:=neueranfbuchstabe.END PROC +unterrichtsverteilungdrucken;PROC unterrichtsverteilungaufbereitendruck: +unterrichtsverteilungaufbereitenbild;ausgfeld(1):=zeile;END PROC +unterrichtsverteilungaufbereitendruck;PROC unterrichtsverteilungindruckdatei: +INT VAR i;FOR iFROM 1UPTO ausgfeldlaengeREP druckzeileschreiben(ausgfeld(1)) +PER END PROC unterrichtsverteilungindruckdatei;PROC spaltendefinieren: +initspalten;setzespaltentrenner(spaltentrenner);IF sortkopplungenTHEN +setzespaltenbreite(neunerspaltenbreite);setzespaltenbreite( +fuenferspaltenbreite);setzespaltenbreite(zweierspaltenbreite); +setzespaltenbreite(achterspaltenbreite);setzespaltenbreite( +zweierspaltenbreite);setzespaltenbreite(achterspaltenbreite);ELIF +sortjgstalleXOR sortjgstbestTHEN setzespaltenbreite(fuenferspaltenbreite); +setzespaltenbreite(zweierspaltenbreite);setzespaltenbreite( +neunerspaltenbreite);setzespaltenbreite(zehnerspaltenbreite); +setzespaltenbreite(achterspaltenbreite);ELIF sortparaphenalleXOR +sortparaphebestTHEN setzespaltenbreite(viererspaltenbreite); +setzespaltenbreite(zweierspaltenbreite);setzespaltenbreite( +fuenferspaltenbreite);setzespaltenbreite(zweierspaltenbreite); +setzespaltenbreite(neunerspaltenbreite);setzespaltenbreite( +zehnerspaltenbreite);ELIF sortfaecherXOR sortbestfachTHEN setzespaltenbreite( +viererspaltenbreite);setzespaltenbreite(achterspaltenbreite); +setzespaltenbreite(viererspaltenbreite);setzespaltenbreite( +neunerspaltenbreite);setzespaltenbreite(neunerspaltenbreite);FI ; +setzespaltenbreite(viererspaltenbreite);setzespaltenbreite( +zweierspaltenbreite);setzespaltenbreite(viererspaltenbreite); +setzespaltenbreite(viererspaltenbreite);setzespaltenbreite( +viererspaltenbreite);setzespaltenbreite(fuenferspaltenbreite); +setzespaltenbreite(viererspaltenbreite);setzespaltenbreite( +viererspaltenbreite);END PROC spaltendefinieren;PROC +unterrichtsverteilungholen:TEXT VAR fachkennung;halbjahr:=wert(fnrlvhj); +jahrgangsstufe:=text(intwert(fnrlvjgst),2);fachkennung:=wert(fnrlvfachkennung +);fach:=text(fachkennung,2);kennung:=subtext(fachkennung,3,6);kopplung:=wert( +fnrlvkopplung);paraphe:=wert(fnrlvparaphe);wochenstdn:=text(intwert( +fnrlvwochenstd),2);klassengruppe1:=wert(fnrlvklgrp1);klassengruppe2:=wert( +fnrlvklgrp2);klassengruppe3:=wert(fnrlvklgrp3);klassengruppe4:=wert( +fnrlvklgrp4);raumgruppe1:=wert(fnrlvraumgrp1);raumgruppe2:=wert(fnrlvraumgrp2 +);END PROC unterrichtsverteilungholen;END PACKET unterrichtsverteilunglisten + diff --git a/app/schulis/2.2.1/src/4.raumwuensche pruefen b/app/schulis/2.2.1/src/4.raumwuensche pruefen new file mode 100644 index 0000000..109eace --- /dev/null +++ b/app/schulis/2.2.1/src/4.raumwuensche pruefen @@ -0,0 +1,117 @@ +PACKET raumwuenschepruefenDEFINES raumwuenschepruefenstarten, +raumwuenschepruefenlistedrucken:INT VAR fnrakthj:=2,fnrausgabebildschirm:=3, +fnrausgabedrucker:=4;LET meldnrlistewirdgedruckt=58,meldnrkeinelv=326, +meldnrkeinesugruppen=334,meldnrinbearbeitung=352,meldnrzuvielesugruppen=356, +meldnrstundenplanwirdaufbereitet=357,meldnrzuvielelv=358, +meldnrstundenplanserverfehlt=376,meldnrbasisalt=377,meldnrbasisinkons=378; +LET protname="Einhaltung der Raumwünsche";FILE VAR prot;LET raumgruppendatei= +"Datei mit Raumgruppen";FILE VAR datraumgruppen;LET schuljahr="Schuljahr", +schulhalbjahr="Schulhalbjahr",schulname="Schulname",schulort="Schulort";LET +ueberschrift="Einhaltung der Raumwünsche, Stundenplan ",texthalbjahr= +". Halbjahr",kopfzeile1="Lehrver- Zeit belegter Anmerkungen",kopfzeile2= +"anstaltung Raum";LET meldkeinwunschraumfrei= +"kein Wunsch- oder Ersatzraum frei",meldwunschraumfrei=" frei", +meldkeinwunschangegeben="Raum fehlt, kein Raumwunsch angegeben";LET +fallkeinwunschraumfrei=1,fallwunschraumfrei=2,fallkeinwunschangegeben=3;LET +laengeschulname=61;LET strich="-",schraegstrich="/",blank=" ",vierblanks= +" ",leerraum=" ",kennzhell="#",editorzusatztasten="vr";LET laengeraum=4 +,laengelv=8;LET kennunglv="L",kennungraum="R",kennungwunschraum="RW", +kennungersatzraum="RE";LET erstestunde=1,letztestunde=66,zeitbelegt="1";LET +posraeumeinrgzeile=5;TEXT VAR aktsj:="",akthj:="",gewsj,gewhj;TEXT VAR +auszeile;TEXT VAR jgst,lv,letztelv,raum,freierwunschraum,wunschraeumederlv, +raeumederzeit,raumgruppenzeile,zeitenderlv;INT VAR izeit;INT VAR posraum;INT +VAR fstatusstuplan;PROC raumwuenschepruefenstarten:INT VAR fnrfehler:=0; +standardpruefe(5,fnrausgabebildschirm,fnrausgabedrucker,0,"",fnrfehler);IF +fnrfehler<>0THEN infeld(fnrfehler);return(1)ELSE +schulhalbjahrbestimmenundstundenplanholen;IF fstatusstuplan<>0THEN +stundenplanfehlerbehandeln;return(1)ELSE pruefungraumwuenschedurchfuehren;IF +listedirektdruckenTHEN standardmeldung(meldnrlistewirdgedruckt,"");print( +protname);forget(protname,quiet);return(1)ELSE zeigedatei(protname, +editorzusatztasten)FI ;FI FI .listedirektdrucken:standardmaskenfeld( +fnrausgabedrucker)<>"".schulhalbjahrbestimmenundstundenplanholen:IF aktsj="" +THEN aktsj:=schulkenndatum(schuljahr);akthj:=schulkenndatum(schulhalbjahr)FI +;gewsj:=aktsj;gewhj:=akthj;IF standardmaskenfeld(fnrakthj)=""THEN +geplanteshjundsjberechnen(gewhj,gewsj);FI ;stundenplanhalbjahrsetzen(gewhj, +gewsj);standardmeldung(meldnrstundenplanwirdaufbereitet,""); +stundenplanbasisundstundenplanholen(fstatusstuplan);IF fstatusstuplan=0THEN +stundenplanreorganisierenundsichern(fstatusstuplan)ELIF fstatusstuplan=8THEN +standardmeldung(meldnrbasisalt,"");stundenplanreorganisierenundsichern( +fstatusstuplan)FI .stundenplanfehlerbehandeln:IF fstatusstuplan=2THEN +standardmeldung(meldnrstundenplanserverfehlt,"")ELIF fstatusstuplan=4THEN +standardmeldung(meldnrkeinesugruppen,"")ELIF fstatusstuplan=5THEN +standardmeldung(meldnrzuvielesugruppen,"")ELIF fstatusstuplan=6THEN +standardmeldung(meldnrkeinelv,"")ELIF fstatusstuplan=7THEN standardmeldung( +meldnrzuvielelv,"")ELIF fstatusstuplan=8THEN standardmeldung(meldnrbasisalt, +"")ELIF fstatusstuplan=9THEN standardmeldung(meldnrbasisinkons,"")FI . +pruefungraumwuenschedurchfuehren:protokollvorbereiten;ausgabekopfaufbereiten; +raumgruppeninraumgruppendateiauslesen;letztelv:="";inittupel( +dnrlehrveranstaltungen);putwert(fnrlvsj,gewsj);putwert(fnrlvhj,gewhj); +statleseschleife(dnrlehrveranstaltungen,gewsj,gewhj,fnrlvsj,fnrlvhj,PROC +raeumeeinerlvpruefen);ausgabefussaufbereiten.protokollvorbereiten:forget( +protname,quiet);prot:=sequentialfile(output,protname).ausgabekopfaufbereiten: +auszeile:=text(schulkenndatum(schulname),laengeschulname);auszeileCAT date; +putline(prot,auszeile);putline(prot,schulkenndatum(schulort));line(prot); +auszeile:=ueberschrift;auszeileCAT subtext(gewsj,1,2);auszeileCAT +schraegstrich;auszeileCAT subtext(gewsj,3,4);auszeileCAT ", ";auszeileCAT +gewhj;auszeileCAT texthalbjahr;putline(prot,auszeile);putline(prot,length( +auszeile)*strich);line(prot);putline(prot,kopfzeile1);putline(prot,kopfzeile2 +);putline(prot,65*strich).ausgabefussaufbereiten:line(prot);putline(prot,20* +blank+20*strich).raumgruppeninraumgruppendateiauslesen:IF NOT exists( +raumgruppendatei)THEN datraumgruppen:=sequentialfile(output,raumgruppendatei) +;inittupel(dnrraumgruppen);statleseschleife(dnrraumgruppen,"","",fnrrgraumgrp +,fnrrgraeume,PROC raumgruppeindateischreiben)FI .END PROC +raumwuenschepruefenstarten;PROC raumgruppeindateischreiben(BOOL VAR b):IF +dbstatus=0THEN putline(datraumgruppen,text(wert(fnrrgraumgrp),laengeraum)+ +wert(fnrrgraeume))ELSE b:=TRUE FI END PROC raumgruppeindateischreiben;PROC +raeumeeinerlvpruefen(BOOL VAR b):IF dbstatus<>0OR wert(fnrlvsj)<>gewsjOR wert +(fnrlvhj)<>gewhjTHEN b:=TRUE ELSE pruefeallelveintraegeFI . +pruefeallelveintraege:jgst:=jgstzweistellig(intwert(fnrlvjgst));lv:=text(jgst ++wert(fnrlvfachkennung),laengelv);standardmeldung(meldnrinbearbeitung,lv+ +kennzhell);wunschraeumezulvbestimmen;zeitenderlv:=allezeitenvon(kennunglv,lv) +;FOR izeitFROM erstestundeUPTO letztestundeREP IF (zeitenderlvSUB izeit)= +zeitbelegtTHEN prueferaumeintragFI PER .wunschraeumezulvbestimmen: +wunschraeumederlv:="";raum:=datenzurlv(kennungwunschraum,lv);IF raum<>""THEN +IF bezeichnungzulaessig(kennungraum,raum)THEN wunschraeumederlvCAT raumELSE +wunschraeumederlvCAT raeumederraumgruppeFI ;FI ;raum:=datenzurlv( +kennungersatzraum,lv);IF raum<>""THEN IF bezeichnungzulaessig(kennungraum, +raum)THEN wunschraeumederlvCAT raumELSE wunschraeumederlvCAT +raeumederraumgruppeFI ;FI .prueferaumeintrag:TEXT VAR suchpara,suchlv; +planeintraglesen(izeit,kennunglv,lv,suchlv,raum,suchpara);raeumederzeit:= +datenderzeit(izeit,kennungraum);IF wunschraeumederlv<>""THEN +erstenfreienwunschraumbestimmen;IF freierwunschraum=""THEN IF +belegterraumistkeinwunschraumTHEN inlisteschreiben(fallkeinwunschraumfrei)FI +ELIF freierwunschraumistbesseralsbelegterTHEN inlisteschreiben( +fallwunschraumfrei)FI ELIF raum=leerraumTHEN inlisteschreiben( +fallkeinwunschangegeben)FI .erstenfreienwunschraumbestimmen:freierwunschraum +:="";posraum:=1;WHILE posraum<length(wunschraeumederlv)REP freierwunschraum:= +subtext(wunschraeumederlv,posraum,posraum+laengeraum-1);IF suchpos( +raeumederzeit,freierwunschraum,laengeraum)=0THEN LEAVE +erstenfreienwunschraumbestimmenFI ;posraumINCR laengeraumPER ; +freierwunschraum:="".belegterraumistkeinwunschraum:suchpos(wunschraeumederlv, +raum,laengeraum)=0.freierwunschraumistbesseralsbelegter:raum=leerraumOR ( +suchpos(wunschraeumederlv,freierwunschraum,laengeraum)<suchpos( +wunschraeumederlv,raum,laengeraum)).END PROC raeumeeinerlvpruefen;TEXT PROC +raeumederraumgruppe:datraumgruppen:=sequentialfile(modify,raumgruppendatei); +toline(datraumgruppen,1);col(datraumgruppen,1);WHILE NOT eof(datraumgruppen) +REP downety(datraumgruppen,raum);IF col(datraumgruppen)=1CAND NOT eof( +datraumgruppen)THEN readrecord(datraumgruppen,raumgruppenzeile);LEAVE +raeumederraumgruppeWITH subtext(raumgruppenzeile,posraeumeinrgzeile)ELSE col( +datraumgruppen,col(datraumgruppen)+1)FI ;PER ;"".END PROC raeumederraumgruppe +;PROC inlisteschreiben(INT CONST fallnr):auszeile:=jgst;auszeileCAT blank; +auszeileCAT subtext(lv,3,4);auszeileCAT blank;auszeileCAT subtext(lv,5); +auszeileCAT blank;auszeileCAT text(tagstunde(izeit,TRUE ),8);auszeileCAT raum +;auszeileCAT vierblanks;auszeileCAT blank;IF fallnr=fallkeinwunschraumfrei +THEN auszeileCAT meldkeinwunschraumfreiELIF fallnr=fallwunschraumfreiTHEN +auszeileCAT freierwunschraum;auszeileCAT meldwunschraumfreiELIF fallnr= +fallkeinwunschangegebenTHEN auszeileCAT meldkeinwunschangegebenFI ;IF +letztelv<>lvTHEN line(prot);letztelv:=lvFI ;putline(prot,auszeile)END PROC +inlisteschreiben;PROC raumwuenschepruefenlistedrucken(BOOL CONST drucken):IF +druckenTHEN print(protname)FI ;forget(protname,quiet);enter(2)END PROC +raumwuenschepruefenlistedrucken;INT PROC suchpos(TEXT CONST quelle,suchtext, +INT CONST laenge):INT VAR findpos:=pos(quelle,suchtext);WHILE findpos>0REP +IF findposMOD laenge=1THEN LEAVE suchposWITH findposELSE findpos:=pos(quelle, +suchtext,findpos+1);FI PER ;findposEND PROC suchpos;TEXT PROC jgstzweistellig +(INT CONST intjgst):IF intjgst=0THEN "00"ELIF intjgst>4AND intjgst<10THEN "0" ++text(intjgst)ELSE text(intjgst)FI END PROC jgstzweistellig;END PACKET +raumwuenschepruefen; + diff --git a/app/schulis/2.2.1/src/4.springstunden lehrer analysieren b/app/schulis/2.2.1/src/4.springstunden lehrer analysieren new file mode 100644 index 0000000..bd205d2 --- /dev/null +++ b/app/schulis/2.2.1/src/4.springstunden lehrer analysieren @@ -0,0 +1,122 @@ +PACKET springstundenlehrerDEFINES springstundenlehrerausfuehren:LET fnrakthj= +2,fnrohneminiplan=3,minitagestr="!",minivornachmtr=" ",miniunterricht="*", +minisprstd="o",minifrei=".",ausgabeparam="#",leerzeile=" ",laengeparbez=9, +tageprowoche=6,stdprotag=12,letztestunde=66,meldungbearbwird=352, +meldungwarten=69,meldungkeinelehrer=337,meldungkeinzeitraster=336, +meldungserverfehler=376,meldungkeinstdplan=366,meldungkeinesugruppen=334, +meldungzuvielesugruppen=356,meldungkeinelv=326,meldungzuvielelv=358, +meldungbasisinkon=378,meldungstdplauswvorber=384,kennungpar="P",kennunggesp= +"x",kennungvorm="v",kennungnachm="n",dateiname="Liste der Springstunden", +ueberschrift="Springstunden der Lehrer für das Schulhalbjahr ",unterstrich= +"-------------------------------------------------------",legende1= +"In den Mini-Stundenplänen bedeuten:",legende2= +""" Unterricht für den Lehrer",legende3=""" Springstunde für den Lehrer", +legende4=""" andere Zeiten ohne Unterricht",legende5= +" ""x"" gesperrte Zeiten aufgrund des Zeitrasters",legende6= +""" Trennzeichen Vor- und Nachmittag",legende7= +""" Trennzeichen Unterrichtstage",legende8="Zeitraster der Schule:",legende9 +="Mo Di Mi Do Fr Sa", +ausgabewstd=" Wstd. ",vorgabetage=" 0 Tage (0 v/ 0 n) ",vorgabesprstd1= +" Springstd. (",vorgabesprstd2=" x1/ ",vorgabesprstd3=" x2/ ",vorgabesprstd4= +" xgr.)",posunttage=2,posvormtage=10,posnachmtage=15,schuljahr="Schuljahr", +halbjahr="Schulhalbjahr",schulname="Schulname",schulort="Schulort";TEXT VAR +paraphe,schj,schhj,ausgabetage,ausgabesprstd,miniplan:="",iminiplan, +ausgminiplan,tagesplan,zeile,vormnachmwechsel:="",relzeit,zeichen;INT VAR i,j +,wstd,stdverschiebung,erstepos,letztepos,anzunttage,anzvormtage,anznachmtage, +anzsprstd,anzsprstd1,anzsprstd2,anzsprstdx,sprstdlaenge,indextagesanf,mittag, +fstat;TEXT VAR kvn,kzt,kaktvn;BOOL VAR miniplanausgabe:=FALSE , +erstenichtvormstd:=TRUE ,keinmittag:=TRUE ;FILE VAR datei;PROC +springstundenlehrerausfuehren:standardmeldung(meldungwarten,""); +miniplanausgabe:=FALSE ;schj:=schulkenndatum(schuljahr);schhj:=schulkenndatum +(halbjahr);IF standardmaskenfeld(fnrakthj)=""THEN geplanteshjundsjberechnen( +schhj,schj)FI ;IF standardmaskenfeld(fnrohneminiplan)=""THEN miniplanausgabe +:=TRUE ;FI ;erstelleminiplan;stundenplanhalbjahrsetzen(schhj,schj); +standardmeldung(meldungstdplauswvorber,""); +stundenplanbasisundstundenplanholen(fstat);IF fstat<>0CAND fstat<>8THEN +meldungausgeben(fstat);return(1);LEAVE springstundenlehrerausfuehrenFI ; +inittupel(dnrlehrer);IF records(dnrlehrer)=0.0THEN standardmeldung( +meldungkeinelehrer,"");return(1);LEAVE springstundenlehrerausfuehrenELSE +bereiteprotokollvor;statleseschleife(dnrlehrer,"","",dnrlehrer+1,dnrlehrer+2, +PROC lehrer)FI ;zeigedatei(dateiname,"vr").bereiteprotokollvor:forget( +dateiname,quiet);datei:=sequentialfile(output,dateiname);putline(datei, +schulkenndatum(schulname));putline(datei,text(schulkenndatum(schulort),65)+ +date);putline(datei,leerzeile);putline(datei,ueberschrift+schhj+". "+text( +schj,2)+"/"+subtext(schj,3));putline(datei,unterstrich);putline(datei, +leerzeile);IF miniplanausgabeTHEN putline(datei,legende1);putline(datei, +" """+miniunterricht+legende2);putline(datei," """+minisprstd+legende3) +;putline(datei," """+minifrei+legende4);putline(datei,legende5);putline( +datei," """+minivornachmtr+legende6);putline(datei," """+minitagestr+ +legende7);putline(datei,leerzeile);putline(datei,legende8);putline(datei, +legende9);bereiteplanauf(miniplan);putline(datei,ausgminiplan);putline(datei, +leerzeile)FI .erstelleminiplan:miniplan:="";vormnachmwechsel:="";IF records( +dnrzeitraster)=0.0THEN standardmeldung(meldungkeinzeitraster,"");return(1); +LEAVE springstundenlehrerausfuehrenFI ;erstenichtvormstd:=TRUE ;inittupel( +dnrzeitraster);statleseschleife(dnrzeitraster,schj,schhj,dnrzeitraster+1, +dnrzeitraster+2,PROC zeitrasterdaten);IF length(miniplan)<letztestundeTHEN +standardmeldung(meldungkeinzeitraster,"");return(1);LEAVE +springstundenlehrerausfuehrenFI .END PROC springstundenlehrerausfuehren;PROC +lehrer(BOOL VAR b):IF dbstatus<>0THEN b:=TRUE ELSE paraphe:=wert(fnrlparaphe) +;standardmeldung(meldungbearbwird,paraphe+ausgabeparam);wstd:= +anzahlverplstden(paraphe);zeile:=text(paraphe,laengeparbez);zeileCAT text( +wstd,2);zeileCAT ausgabewstd;untersuchetage;zeileCAT ausgabetage; +untersuchesprstden;zeileCAT ausgabesprstd;putline(datei,zeile);IF +miniplanausgabeTHEN bereiteplanauf(iminiplan);changeall(ausgminiplan, +kennungvorm,minifrei);changeall(ausgminiplan,kennungnachm,minifrei);putline( +datei,ausgminiplan)FI ;line(datei)FI .untersuchetage:ausgabetage:=vorgabetage +;IF anzunttage<>0THEN replace(ausgabetage,posunttage,text(anzunttage))FI ;IF +anzvormtage<>0THEN replace(ausgabetage,posvormtage,text(anzvormtage))FI ;IF +anznachmtage<>0THEN replace(ausgabetage,posnachmtage,text(anznachmtage))FI . +untersuchesprstden:anzsprstd:=0;anzsprstd1:=0;anzsprstd2:=0;anzsprstdx:=0; +FOR iFROM 1UPTO tageprowocheREP erstepos:=0;letztepos:=0;indextagesanf:=(i-1) +*stdprotag;tagesplan:=subtext(iminiplan,indextagesanf+1,i*stdprotag); +ermittlerandundsprstdenPER .ermittlerandundsprstden:erstepos:=pos(tagesplan, +miniunterricht);IF erstepos<>0THEN ermittleletztestd;ermittlevormnachmwechsel +;ermittlespringstdFI .ermittleletztestd:FOR jFROM stdprotagDOWNTO 1REP IF ( +tagesplanSUB j)=miniunterrichtTHEN letztepos:=j;LEAVE ermittleletztestdFI +PER .ermittlevormnachmwechsel:mittag:=0;FOR jFROM 12DOWNTO 1REP IF (miniplan +SUB indextagesanf+j)=kennungvormTHEN mittag:=j;LEAVE ermittlevormnachmwechsel +FI PER .ermittlespringstd:keinmittag:=TRUE ;FOR jFROM letzteposDOWNTO +ersteposREP IF (tagesplanSUB j)=kennungvormCOR (tagesplanSUB j)=kennungnachm +COR (tagesplanSUB j)=kennunggespTHEN anzsprstdINCR 1;sprstdlaengeINCR 1;IF +miniplanausgabeTHEN replace(iminiplan,indextagesanf+j,minisprstd);FI ;IF j= +mittag+1COR j=mittagTHEN IF keinmittagTHEN anzsprstdINCR 1;sprstdlaengeINCR 1 +;keinmittag:=FALSE FI FI ELSE IF sprstdlaenge=1THEN anzsprstd1INCR 1ELIF +sprstdlaenge=2THEN anzsprstd2INCR 1ELIF sprstdlaenge>2THEN anzsprstdxINCR 1 +FI ;sprstdlaenge:=0;FI PER ;IF keinmittagCAND erstepos<=mittagCAND letztepos> +mittagTHEN anzsprstdINCR 1;anzsprstd1INCR 1FI ;ausgabesprstd:=text(anzsprstd, +2)+vorgabesprstd1+text(anzsprstd1,2)+vorgabesprstd2+text(anzsprstd2,2)+ +vorgabesprstd3+text(anzsprstdx,2)+vorgabesprstd4.END PROC lehrer;PROC +bereiteplanauf(TEXT CONST plan):ausgminiplan:=plan;stdverschiebung:=0;FOR i +FROM 1UPTO length(vormnachmwechsel)DIV 3REP relzeit:=vormnachmwechselSUB i*3- +2;relzeitCAT (vormnachmwechselSUB i*3-1);zeichen:=vormnachmwechselSUB i*3; +insertchar(ausgminiplan,zeichen,int(relzeit)+stdverschiebung);stdverschiebung +INCR 1PER ;END PROC bereiteplanauf;PROC zeitrasterdaten(BOOL VAR b):IF wert( +fnrzrsj)<>schjCOR wert(fnrzrhj)<>schhjCOR dbstatus<>0THEN b:=TRUE ELSE kvn:= +wert(fnrzrkennungteil);kzt:=text(wert(fnrzrtagstunde),2);miniplanCAT kvn;IF +kvn<>kennungvormTHEN IF erstenichtvormstdTHEN kaktvn:=kzt;erstenichtvormstd:= +FALSE FI ELSE erstenichtvormstd:=TRUE FI ;IF int(kzt)MOD stdprotag=1CAND kzt +<>"1 "THEN IF kaktvn<>""THEN vormnachmwechselCAT kaktvn;vormnachmwechselCAT +minivornachmtr;kaktvn:=""FI ;vormnachmwechselCAT kzt;vormnachmwechselCAT +minitagestrFI ;IF kzt=text(letztestunde)THEN IF kaktvn<>""THEN +vormnachmwechselCAT kaktvn;vormnachmwechselCAT minivornachmtr;kaktvn:=""FI +FI FI END PROC zeitrasterdaten;INT PROC anzahlverplstden(TEXT CONST paraphe): +TEXT VAR stundenplan:=allezeitenvon(kennungpar,paraphe),unttage:=tageprowoche +*"0",vormtage:=tageprowoche*"0",nachmtage:=tageprowoche*"0";INT VAR einspos:= +1,anzeinsen:=0,wochentag;iminiplan:=miniplan;anzunttage:=0;anzvormtage:=0; +anznachmtage:=0;WHILE einspos<>0REP einspos:=pos(stundenplan,"1",einspos);IF +einspos<>0THEN anzeinsenINCR 1;replace(iminiplan,einspos,miniunterricht); +wochentag:=(einspos-1)DIV stdprotag+1;IF (unttageSUB wochentag)="0"THEN +replace(unttage,wochentag,"1");anzunttageINCR 1FI ;IF (vormtageSUB wochentag) +="0"CAND vormittagsunterrichtTHEN replace(vormtage,wochentag,"1");anzvormtage +INCR 1FI ;IF (nachmtageSUB wochentag)="0"CAND nachmittagsunterrichtTHEN +replace(nachmtage,wochentag,"1");anznachmtageINCR 1FI ;einsposINCR 1FI PER ; +anzeinsen.vormittagsunterricht:(miniplanSUB einspos)=kennungvorm. +nachmittagsunterricht:(miniplanSUB einspos)=kennungnachm.END PROC +anzahlverplstden;PROC meldungausgeben(INT VAR fstat):IF fstat=2THEN +standardmeldung(meldungserverfehler,"");ELIF fstat=3THEN standardmeldung( +meldungkeinstdplan,"");ELIF fstat=4THEN standardmeldung(meldungkeinesugruppen +,"");ELIF fstat=5THEN standardmeldung(meldungzuvielesugruppen,"")ELIF fstat=6 +THEN standardmeldung(meldungkeinelv,"")ELIF fstat=7THEN standardmeldung( +meldungzuvielelv,"")ELIF fstat=9THEN standardmeldung(meldungbasisinkon,""); +FI END PROC meldungausgeben;END PACKET springstundenlehrer; + diff --git a/app/schulis/2.2.1/src/4.springstunden schueler analysieren b/app/schulis/2.2.1/src/4.springstunden schueler analysieren new file mode 100644 index 0000000..39a9bfc --- /dev/null +++ b/app/schulis/2.2.1/src/4.springstunden schueler analysieren @@ -0,0 +1,137 @@ +PACKET springstundenschuelerDEFINES springstundenschuelerausfuehren:LET +fnrakthj=3,fnrohneminiplan=4,minitagestr="!",minivornachmtr=" ", +miniunterricht="*",minisprstd="o",minifrei=".",ausgabeparam="#",leerzeile=" " +,laengelv=8,laengeschgrbez=9,tageprowoche=6,stdprotag=12,letztestunde=66, +meldungbearbwird=352,meldungwarten=69,meldungkeineschueler=332, +meldungkeinzeitraster=336,meldungserverfehler=376,meldungkeinstdplan=366, +meldungkeinesugruppen=334,meldungzuvielesugruppen=356,meldungkeinelv=326, +meldungzuvielelv=358,meldungbasisinkon=378,meldungstdplauswvorber=384, +kennunglv="L",kennunggesp="x",kennungvorm="v",kennungnachm="n",dateiname= +"Liste der Springstunden",ueberschrift= +"Springstunden der Schülergruppen Sek.1 für das Schulhalbjahr ",unterstrich= +"---------------------------------------------------------------------", +legende1="In den Mini-Stundenplänen bedeuten:",legende2= +""" Unterricht für die Schülergruppe",legende3= +""" Springstunde für die Schülergruppe",legende4= +""" andere Zeiten ohne Unterricht",legende5= +" ""x"" gesperrte Zeiten aufgrund des Zeitrasters",legende6= +""" Trennzeichen Vor- und Nachmittag",legende7= +""" Trennzeichen Unterrichtstage",legende8="Zeitraster der Schule:",legende9 +="Mo Di Mi Do Fr Sa", +ausgabewstd=" Wstd. ",vorgabetage=" 0 Tage (0 v/ 0 n) ",vorgabesprstd1= +" Springstd. (",vorgabesprstd2=" x1/ ",vorgabesprstd3=" x2/ ",vorgabesprstd4= +" xgr.)",posunttage=2,posvormtage=10,posnachmtage=15,schuljahr="Schuljahr", +halbjahr="Schulhalbjahr",schulname="Schulname",schulort="Schulort";TEXT VAR +schgrbez,schj,schhj,ausgabetage,ausgabesprstd,miniplan:="",iminiplan, +ausgminiplan,tagesplan,zeile,vormnachmwechsel:="",relzeit,zeichen;TEXT VAR +kvn,kzt,kaktvn;INT VAR i,j,wstd,stdverschiebung,erstepos,letztepos,mittag, +anzunttage,anzvormtage,anznachmtage,anzsprstd,anzsprstd1,anzsprstd2, +anzsprstdx,sprstdlaenge,indextagesanf,fstat;BOOL VAR miniplanausgabe:=FALSE , +erstenichtvormstd:=TRUE ,keinmittag:=TRUE ,keinschueler:=TRUE ;FILE VAR datei +;PROC springstundenschuelerausfuehren:standardmeldung(meldungwarten,""); +miniplanausgabe:=FALSE ;schj:=schulkenndatum(schuljahr);schhj:=schulkenndatum +(halbjahr);IF standardmaskenfeld(fnrakthj)=""THEN geplanteshjundsjberechnen( +schhj,schj)FI ;IF standardmaskenfeld(fnrohneminiplan)=""THEN miniplanausgabe +:=TRUE ;FI ;erstelleminiplan;stundenplanhalbjahrsetzen(schhj,schj); +standardmeldung(meldungstdplauswvorber,""); +stundenplanbasisundstundenplanholen(fstat);IF fstat<>0CAND fstat<>8THEN +meldungausgeben(fstat);return(1);LEAVE springstundenschuelerausfuehrenFI ; +inittupel(dnraktschuelergruppen);IF records(dnraktschuelergruppen)=0.0THEN +standardmeldung(meldungkeineschueler,"");return(1);LEAVE +springstundenschuelerausfuehrenELSE bereiteprotokollvor;keinschueler:=TRUE ; +statleseschleife(dnraktschuelergruppen,schj,schhj,fnrsgrpsj,fnrsgrphj,PROC +schueler);IF keinschuelerTHEN standardmeldung(meldungkeineschueler,"");return +(1);LEAVE springstundenschuelerausfuehrenFI FI ;zeigedatei(dateiname,"vr"). +bereiteprotokollvor:forget(dateiname,quiet);datei:=sequentialfile(output, +dateiname);putline(datei,schulkenndatum(schulname));putline(datei,text( +schulkenndatum(schulort),65)+date);putline(datei,leerzeile);putline(datei, +ueberschrift+schhj+". "+text(schj,2)+"/"+subtext(schj,3));putline(datei, +unterstrich);putline(datei,leerzeile);IF miniplanausgabeTHEN putline(datei, +legende1);putline(datei," """+miniunterricht+legende2);putline(datei, +" """+minisprstd+legende3);putline(datei," """+minifrei+legende4); +putline(datei,legende5);putline(datei," """+minivornachmtr+legende6); +putline(datei," """+minitagestr+legende7);putline(datei,leerzeile);putline +(datei,legende8);putline(datei,legende9);bereiteplanauf(miniplan);putline( +datei,ausgminiplan);putline(datei,leerzeile)FI .erstelleminiplan:miniplan:="" +;vormnachmwechsel:="";IF records(dnrzeitraster)=0.0THEN standardmeldung( +meldungkeinzeitraster,"");return(1);LEAVE springstundenschuelerausfuehrenFI ; +erstenichtvormstd:=TRUE ;inittupel(dnrzeitraster);statleseschleife( +dnrzeitraster,schj,schhj,dnrzeitraster+1,dnrzeitraster+2,PROC zeitrasterdaten +);IF length(miniplan)<letztestundeTHEN standardmeldung(meldungkeinzeitraster, +"");return(1);LEAVE springstundenschuelerausfuehrenFI .END PROC +springstundenschuelerausfuehren;PROC schueler(BOOL VAR b):IF wert(fnrsgrpsj) +<>schjCOR wert(fnrsgrphj)<>schhjCOR intwert(fnrsgrpjgst)>10COR dbstatus<>0 +THEN b:=TRUE ELSE schgrbez:=jgstaufber(wert(fnrsgrpjgst))+wert(fnrsgrpkennung +);standardmeldung(meldungbearbwird,schgrbez+ausgabeparam);wstd:= +anzahlverplstden(schgrbez);zeile:=text(schgrbez,laengeschgrbez);zeileCAT text +(wstd,2);zeileCAT ausgabewstd;untersuchetage;zeileCAT ausgabetage; +untersuchesprstden;zeileCAT ausgabesprstd;putline(datei,zeile);IF +miniplanausgabeTHEN bereiteplanauf(iminiplan);changeall(ausgminiplan, +kennungvorm,minifrei);changeall(ausgminiplan,kennungnachm,minifrei);putline( +datei,ausgminiplan)FI ;line(datei);IF keinschuelerTHEN keinschueler:=FALSE +FI FI .untersuchetage:ausgabetage:=vorgabetage;IF anzunttage<>0THEN replace( +ausgabetage,posunttage,text(anzunttage))FI ;IF anzvormtage<>0THEN replace( +ausgabetage,posvormtage,text(anzvormtage))FI ;IF anznachmtage<>0THEN replace( +ausgabetage,posnachmtage,text(anznachmtage))FI .untersuchesprstden:anzsprstd +:=0;anzsprstd1:=0;anzsprstd2:=0;anzsprstdx:=0;FOR iFROM 1UPTO tageprowoche +REP erstepos:=0;letztepos:=0;indextagesanf:=(i-1)*stdprotag;tagesplan:= +subtext(iminiplan,indextagesanf+1,i*stdprotag);ermittlerandundsprstdenPER . +ermittlerandundsprstden:erstepos:=pos(tagesplan,miniunterricht);IF erstepos<> +0THEN ermittleletztestd;ermittlevormnachmwechsel;ermittlespringstdFI . +ermittleletztestd:FOR jFROM stdprotagDOWNTO 1REP IF (tagesplanSUB j)= +miniunterrichtTHEN letztepos:=j;LEAVE ermittleletztestdFI PER . +ermittlevormnachmwechsel:mittag:=0;FOR jFROM 12DOWNTO 1REP IF (miniplanSUB +indextagesanf+j)=kennungvormTHEN mittag:=j;LEAVE ermittlevormnachmwechselFI +PER .ermittlespringstd:keinmittag:=TRUE ;FOR jFROM letzteposDOWNTO erstepos +REP IF (tagesplanSUB j)=kennungvormCOR (tagesplanSUB j)=kennungnachmCOR ( +tagesplanSUB j)=kennunggespTHEN anzsprstdINCR 1;sprstdlaengeINCR 1;IF +miniplanausgabeTHEN replace(iminiplan,indextagesanf+j,minisprstd);FI ;IF j= +mittag+1COR j=mittagTHEN IF keinmittagTHEN anzsprstdINCR 1;sprstdlaengeINCR 1 +;keinmittag:=FALSE ;FI FI ELSE IF sprstdlaenge=1THEN anzsprstd1INCR 1ELIF +sprstdlaenge=2THEN anzsprstd2INCR 1ELIF sprstdlaenge>2THEN anzsprstdxINCR 1 +FI ;sprstdlaenge:=0;FI PER ;IF keinmittagCAND erstepos<=mittagCAND letztepos> +mittagTHEN anzsprstdINCR 1;anzsprstd1INCR 1FI ;ausgabesprstd:=text(anzsprstd, +2)+vorgabesprstd1+text(anzsprstd1,2)+vorgabesprstd2+text(anzsprstd2,2)+ +vorgabesprstd3+text(anzsprstdx,2)+vorgabesprstd4.END PROC schueler;PROC +bereiteplanauf(TEXT CONST plan):ausgminiplan:=plan;stdverschiebung:=0;FOR i +FROM 1UPTO length(vormnachmwechsel)DIV 3REP relzeit:=vormnachmwechselSUB i*3- +2;relzeitCAT (vormnachmwechselSUB i*3-1);zeichen:=vormnachmwechselSUB i*3; +insertchar(ausgminiplan,zeichen,int(relzeit)+stdverschiebung);stdverschiebung +INCR 1PER ;END PROC bereiteplanauf;PROC zeitrasterdaten(BOOL VAR b):IF wert( +fnrzrsj)<>schjCOR wert(fnrzrhj)<>schhjCOR dbstatus<>0THEN b:=TRUE ELSE kvn:= +wert(fnrzrkennungteil);kzt:=text(wert(fnrzrtagstunde),2);miniplanCAT kvn;IF +kvn<>kennungvormTHEN IF erstenichtvormstdTHEN kaktvn:=kzt;erstenichtvormstd:= +FALSE FI ELSE erstenichtvormstd:=TRUE FI ;IF int(kzt)MOD stdprotag=1CAND kzt +<>"1 "THEN IF kaktvn<>""THEN vormnachmwechselCAT kaktvn;vormnachmwechselCAT +minivornachmtr;kaktvn:=""FI ;vormnachmwechselCAT kzt;vormnachmwechselCAT +minitagestrFI #IF kzt=text(letztestunde)THEN IF kaktvn<>""THEN +vormnachmwechselCAT kaktvn;vormnachmwechselCAT minivornachmtr;kaktvn:=""FI +FI #FI END PROC zeitrasterdaten;INT PROC anzahlverplstden(TEXT CONST schgr): +TEXT VAR stundenplan:=erstelleallezeiten(schgr),unttage:=tageprowoche*"0", +vormtage:=tageprowoche*"0",nachmtage:=tageprowoche*"0";INT VAR einspos:=1, +anzeinsen:=0,wochentag;iminiplan:=miniplan;anzunttage:=0;anzvormtage:=0; +anznachmtage:=0;WHILE einspos<>0REP einspos:=pos(stundenplan,"1",einspos);IF +einspos<>0THEN anzeinsenINCR 1;replace(iminiplan,einspos,miniunterricht); +wochentag:=(einspos-1)DIV stdprotag+1;IF (unttageSUB wochentag)="0"THEN +replace(unttage,wochentag,"1");anzunttageINCR 1FI ;IF (vormtageSUB wochentag) +="0"CAND vormittagsunterrichtTHEN replace(vormtage,wochentag,"1");anzvormtage +INCR 1FI ;IF (nachmtageSUB wochentag)="0"CAND nachmittagsunterrichtTHEN +replace(nachmtage,wochentag,"1");anznachmtageINCR 1FI ;einsposINCR 1FI PER ; +anzeinsen.vormittagsunterricht:(miniplanSUB einspos)=kennungvorm. +nachmittagsunterricht:(miniplanSUB einspos)=kennungnachm.END PROC +anzahlverplstden;TEXT PROC erstelleallezeiten(TEXT CONST schgruppe):TEXT VAR +allelv:=lvderschuelergruppe(schgruppe),allezeiten,aktzeiten:="",aktlv;INT +VAR i,einspos:=1;aktlv:=text(allelv,laengelv);allezeiten:=allezeitenvon( +kennunglv,aktlv);FOR iFROM 2UPTO length(allelv)DIV laengelvREP aktlv:=subtext +(allelv,(i-1)*laengelv+1,i*laengelv);aktzeiten:=allezeitenvon(kennunglv,aktlv +);einspos:=1;WHILE einspos<>0REP einspos:=pos(aktzeiten,"1",einspos);IF +einspos<>0THEN IF (allezeitenSUB einspos)="0"THEN replace(allezeiten,einspos, +"1");FI ;einsposINCR 1FI ;PER ;PER ;allezeitenEND PROC erstelleallezeiten; +PROC meldungausgeben(INT VAR fstat):IF fstat=2THEN standardmeldung( +meldungserverfehler,"");ELIF fstat=3THEN standardmeldung(meldungkeinstdplan, +"");ELIF fstat=4THEN standardmeldung(meldungkeinesugruppen,"");ELIF fstat=5 +THEN standardmeldung(meldungzuvielesugruppen,"")ELIF fstat=6THEN +standardmeldung(meldungkeinelv,"")ELIF fstat=7THEN standardmeldung( +meldungzuvielelv,"")ELIF fstat=9THEN standardmeldung(meldungbasisinkon,""); +FI END PROC meldungausgeben;END PACKET springstundenschueler; + diff --git a/app/schulis/2.2.1/src/4.stand der stundenplanung analysieren b/app/schulis/2.2.1/src/4.stand der stundenplanung analysieren new file mode 100644 index 0000000..c505d27 --- /dev/null +++ b/app/schulis/2.2.1/src/4.stand der stundenplanung analysieren @@ -0,0 +1,98 @@ +PACKET standderstundenplanunganalysierenDEFINES +stundenplanstandanalyseausfuehren:LET feldakthj=2,dateiname="Fehlerprotokoll" +,schulname="Schulname",schulort="Schulort",schuljahr="Schuljahr",halbjahr= +"Schulhalbjahr",kennunglv="L",kennungkopplg="K",ausgpar="#",anzkopfzeilen=10, +laengelv=8,laengekopplg=8,laengefachkenn=6,leererraum=" ",leerzeile=" ", +ueberschrift1="Fehlerprotokoll zum Stand der Stundenplanung",unterstrich1= +"-----------------------------------------------------",ausgkopp=" " +,ausgkopplv=" ",ueberschrift2= +"Kopplung Lehrveranst. Wstd. Anmerkung",ueberschrift3= +" soll/ist",unterstrich2= +"---------+------------+-----------+--------------------------------------", +keinefehler="Keine Fehler aufgetreten (alle Kopplungen korrekt verplant)!", +zuvielverpl=" Std. zuviel verplant",raumfehlt="Raum fehlt für ",zuverplanen= +" Std. noch zu verplanen",keinekopplg="Kopplung nicht erhalten (", +meldungserverfehler=376,meldungkeinstdplan=366,meldungkeinesugruppen=334, +meldungzuvielesugruppen=356,meldungkeinelv=326,meldungzuvielelv=358, +meldungbasisinkon=378,meldungwarten=69,meldungstdplauswvorber=384, +meldungkeinehjdaten=382,meldungbearbeitetwird=352;FILE VAR datei;TEXT VAR +aktkopplg:="",aktlv:="",sj,hj,ausgzeile,ausgpostfix;BOOL VAR +kopplungausgegeben:=FALSE ,lvausgegeben:=FALSE ;INT VAR maxwstd:=0,verplstden +:=0,aktwstd:=0,anzverplstden:=0,fstat:=0,anzleereraumzuw:=0,jgstderlv;PROC +meldungausgeben(INT VAR fstat):IF fstat=2THEN standardmeldung( +meldungserverfehler,"");ELIF fstat=3THEN standardmeldung(meldungkeinstdplan, +"");ELIF fstat=4THEN standardmeldung(meldungkeinesugruppen,"");ELIF fstat=5 +THEN standardmeldung(meldungzuvielesugruppen,"")ELIF fstat=6THEN +standardmeldung(meldungkeinelv,"")ELIF fstat=7THEN standardmeldung( +meldungzuvielelv,"")ELIF fstat=9THEN standardmeldung(meldungbasisinkon,""); +FI ;return(1)END PROC meldungausgeben;PROC stundenplanstandanalyseausfuehren: +standardmeldung(meldungwarten,"");bestimmehalbjahr;bereiteprotokollvor; +setzepufferwerte;holeunduntersuchekopplungen;IF lines(datei)=anzkopfzeilen +THEN putline(datei,keinefehler)FI ;zeigedatei(dateiname,"vr"). +bereiteprotokollvor:forget(dateiname,quiet);datei:=sequentialfile(output, +dateiname);putline(datei,schulkenndatum(schulname));putline(datei,text( +schulkenndatum(schulort),65)+date);putline(datei,leerzeile);putline(datei, +ueberschrift1+" "+hj+". "+text(sj,2)+"/"+subtext(sj,3));putline(datei, +unterstrich1);putline(datei,leerzeile);putline(datei,ueberschrift2);putline( +datei,ueberschrift3);putline(datei,unterstrich2);putline(datei,leerzeile). +bestimmehalbjahr:sj:=schulkenndatum(schuljahr);hj:=schulkenndatum(halbjahr); +IF standardmaskenfeld(feldakthj)=""THEN geplanteshjundsjberechnen(hj,sj);FI . +setzepufferwerte:inittupel(dnrlehrveranstaltungen). +holeunduntersuchekopplungen:IF keinehjdatenTHEN fehlermeldungkeinelvFI ; +standardmeldung(meldungstdplauswvorber,"");stundenplanhalbjahrsetzen(hj,sj); +stundenplanbasisundstundenplanholen(fstat);IF fstat=0COR fstat=8THEN +statleseschleife(ixlvsjhjkopp,sj,hj,fnrlvsj,fnrlvhj,PROC +kopplungenuntersuchen)ELSE meldungausgeben(fstat);LEAVE +stundenplanstandanalyseausfuehren;FI .keinehjdaten:records( +dnrlehrveranstaltungen)=0.0.fehlermeldungkeinelv:standardmeldung( +meldungkeinehjdaten,"");return(1).END PROC stundenplanstandanalyseausfuehren; +PROC kopplungenuntersuchen(BOOL VAR b):IF wert(fnrlvsj)<>sjCOR wert(fnrlvhj) +<>hjCOR dbstatus<>0THEN b:=TRUE ELSE IF aktkopplg<>wert(fnrlvkopplung)THEN +IF nichterstersatzCAND mehrerelvTHEN ueberpruefeinhaltungderkopplungFI ; +aktkopplg:=wert(fnrlvkopplung);standardmeldung(meldungbearbeitetwird, +aktkopplg+ausgpar);maxwstd:=0;IF kopplungausgegebenTHEN putline(datei, +leerzeile)FI ;kopplungausgegeben:=FALSE ;FI ;lvausgegeben:=FALSE ;jgstderlv:= +intwert(fnrlvjgst);IF jgstderlv=0THEN aktlv:="00"+text(wert(fnrlvfachkennung) +,laengefachkenn)ELSE aktlv:=jgstaufber(wert(fnrlvjgst))+text(wert( +fnrlvfachkennung),laengefachkenn)FI ;aktwstd:=intwert(fnrlvwochenstd);IF +maxwstd<aktwstdTHEN maxwstd:=aktwstdFI ;ueberpruefanzstdenundleereraumangabe; +FI .nichterstersatz:aktkopplg<>"".mehrerelv:length(allelvmit(kennungkopplg, +aktkopplg))>laengelv.ueberpruefanzstdenundleereraumangabe:anzleereraumzuw:=0; +verplstden:=anzahlverplstden(kennunglv,aktlv);IF verplstden<aktwstdTHEN +fehlerzuwenigstdenELIF verplstden>aktwstdTHEN fehlerzuvielstdenFI ;IF +anzleereraumzuw>0THEN ausgzeile:="";ausgpostfix:=raumfehlt+text( +anzleereraumzuw)+" Std.";IF kopplungausgegebenTHEN IF lvausgegebenTHEN +ausgzeileCAT ausgkopplv;lvausgegeben:=TRUE ELSE ausgzeileCAT ausgkopp; +ausgzeileCAT aktlv;ausgzeileCAT text(aktwstd,8);ausgzeileCAT text(verplstden, +5);ausgzeileCAT " ";FI ;ELSE ausgzeileCAT text(aktkopplg,laengekopplg+2); +ausgzeileCAT aktlv;ausgzeileCAT text(aktwstd,8);ausgzeileCAT text(verplstden, +5);ausgzeileCAT " ";kopplungausgegeben:=TRUE ;lvausgegeben:=TRUE FI ; +ausgzeileCAT ausgpostfix;putline(datei,ausgzeile)FI .fehlerzuwenigstden: +ausgzeile:="";ausgpostfix:=aktlv;ausgpostfixCAT text(aktwstd,8);ausgpostfix +CAT text(verplstden,5);ausgpostfixCAT " ";ausgpostfixCAT text(aktwstd- +verplstden);ausgpostfixCAT zuverplanen;IF kopplungausgegebenTHEN ausgzeile:= +ausgkopp;ELSE ausgzeile:=text(aktkopplg,laengekopplg+2);kopplungausgegeben:= +TRUE FI ;ausgzeileCAT ausgpostfix;putline(datei,ausgzeile);lvausgegeben:= +TRUE .fehlerzuvielstden:ausgzeile:="";ausgpostfix:=aktlv;ausgpostfixCAT text( +aktwstd,8);ausgpostfixCAT text(verplstden,5);ausgpostfixCAT " "; +ausgpostfixCAT text(verplstden-aktwstd);ausgpostfixCAT zuvielverpl;IF +kopplungausgegebenTHEN ausgzeile:=ausgkopp;ELSE ausgzeile:=text(aktkopplg, +laengekopplg+2);kopplungausgegeben:=TRUE FI ;ausgzeileCAT ausgpostfix;putline +(datei,ausgzeile);lvausgegeben:=TRUE .ueberpruefeinhaltungderkopplung: +anzverplstden:=anzahlverplstden(kennungkopplg,aktkopplg);IF anzverplstden> +maxwstdTHEN ausgpostfix:=keinekopplg;ausgpostfixCAT text(anzverplstden); +ausgpostfixCAT " Wstd.)";IF kopplungausgegebenTHEN IF lvausgegebenTHEN +ausgzeile:=ausgkopplv;ELSE ausgzeile:=ausgkopp;ausgzeileCAT aktlv;ausgzeile +CAT text(aktwstd,8);ausgzeileCAT text(verplstden,5);ausgzeileCAT " "; +lvausgegeben:=TRUE FI ;ELSE ausgzeile:=text(aktkopplg,laengekopplg+2); +ausgzeileCAT aktlv;ausgzeileCAT text(aktwstd,8);ausgzeileCAT text(verplstden, +5);kopplungausgegeben:=TRUE FI ;ausgzeileCAT ausgpostfix;putline(datei, +ausgzeile)FI .END PROC kopplungenuntersuchen;INT PROC anzahlverplstden(TEXT +CONST kennung,kennungstext):TEXT VAR stundenplan:=allezeitenvon(kennung, +kennungstext),plv,praum,ppar;INT VAR einspos:=1,anzeinsen:=0;WHILE einspos<>0 +REP einspos:=pos(stundenplan,"1",einspos);IF einspos<>0THEN anzeinsenINCR 1; +IF kennung=kennunglvTHEN ueberpruefleererraumFI ;einsposINCR 1FI PER ; +anzeinsen.ueberpruefleererraum:planeintraglesen(einspos,kennunglv, +kennungstext,plv,praum,ppar);IF praum=leererraumTHEN anzleereraumzuwINCR 1FI +.END PROC anzahlverplstden;END PACKET standderstundenplanunganalysieren; + diff --git a/app/schulis/2.2.1/src/4.stdpluebersichten b/app/schulis/2.2.1/src/4.stdpluebersichten new file mode 100644 index 0000000..2c760c7 --- /dev/null +++ b/app/schulis/2.2.1/src/4.stdpluebersichten @@ -0,0 +1,425 @@ +PACKET stdpluebersichtenDEFINES merkeartderstdpluebersichtundzeigemaske, +stdpluebersichterstellenunddruckenggfvorherzeigen, +stdpluebersichtdruckenundggfnaechsteerstellen:INT VAR +ausgewaehlteuebersichtsart;LET artlehrer=1,artraeume=2,artsek1=3,artsek2=4, +artzeiten=5,maskennamefuerlehrer="ms stdpluebersicht fuer lehrer", +maskennamefuerraeume="ms stdpluebersicht fuer raeume",maskennamefuersek1= +"ms stdpluebersicht fuer sek1",maskennamefuersek2= +"ms stdpluebersicht fuer sek2",maskennamefuerzeiten= +"ms stdpluebersicht fuer zeiten";TEXT VAR sj,hj,kennung,vonobjekt,bisobjekt, +sek1kennungvon,sek1kennungbis,ueberschrift1,ueberschrift2,tag, +listeallerobjekte:="";INT VAR laengederlistenobjekte,ptraktobjekt,sek1jgstvon +,sek1jgstbis,varspbreite,anzahlspalten,vonstd,bisstd,anzahltage;BOOL VAR +nurdrucken,zweizeilig;LET fnr2geplsj=2,fnr3aktsj=3,fnr4einzeilig=4, +fnr5zweizeilig=5,fnr6vonobjekt=6,fnr7bisobjekt=7,fnr8vonstd=8,fnr9bisstd=9, +fnr10spaltenproseite=10,fnr11tageproseite=11,fnr12bildschirm=12,fnr13drucker= +13,fnrz4vonstd=4,fnrz5bisstd=5,fnrz6anzspalten=6,fnrz7bildschirm=7, +fnrz8drucker=8;LET erstestd=1,letztestdmofr=12,letztestdsa=6,maxanzstdn=66, +letztertag=6,erstertag=1,allewochentagsbezeichnungen= +"MODIMIDOFRSAMoDiMiDoFrSamodimidofrsa";LET konstspbreite=6, +konstkopplungsbreite=8,maxanzspalten1bis4=9,maxanzspalten5=5,maxanzspalten=9, +minanzspalten=1,spaltenbreite8=8,spaltenbreite10=10,spaltenbreite12=12, +spaltenbreite27=27,druckdatei="liste.1",textstdpluebersicht= +"Stundenplanübersicht für ",textlehrer="Lehrer",textraeume="Räume",textsek1= +"Klassen der Sek. 1",textsek2="Jgst. ",textzeiten="Zeiten", +textanfangfuerschulhalbjahr="Schuljahr 19",trennerfuerschuljahr="/", +textmittefuerschulhalbjahr=", ",textendefuerschulhalbjahr=". Halbjahr", +ueberschriftenzahl=2,spaltentrenner=":",trennstrichzeichen="-", +spaltentrennerimstrich="+",textzeiterstespalte="Zeit :",leereerstespalte= +" :",textmontag="Mo",textdienstag="Di",textmittwoch="Mi",textdonnerstag= +"Do",textfreitag="Fr",textsamstag="Sa",textkeintag=" ",trennstrichfuerlv="/" +,ueberschriftspalte2beiart4="Kopplung:",ueberschriftspalte3beiart4= +" Lehrveranstaltungen",ueberschriftbeiart5="Lv /R /P /Kopplg. ", +endeposjgstinlv=2,anfposfachinlv=3,endeposfachinlv=4,anfposkennunginlv=5, +laengeeinerlv=8,laengeeinerkopplung=8,laengeeinerparaphe=4,laengeeinesraumes= +4,laengeeinersgrp=6,laengeeinerjgst=2,zeilebeianfangneueseite=2, +maxtabzahljedruckdatei=10;LET meldnrlistewirdaufgebaut=7, +meldnrbittezahlangeben=53,meldnrzahlausserhalbdergrenzen=54, +meldnrungueltigeeingabe=55,meldnrauswahlnichtsinnvoll=56,meldnrplausi=57, +meldnrlistewirdausgedruckt=58,meldnrbittewarten=69,meldnrinbearbeitung=352, +meldnrkeinegueltigejgst=146,meldnrungueltigeparaphe=344, +meldnrkeinelehrerdatenda=337,meldnrfalscheraumangabe=359, +meldnrkeineraumdatenda=365,meldnrkeinestdpldatenda=366,meldnrfalschetagesbez= +385,meldnrfalschestundenfolge=386,meldnralphabetischefolge=380, +meldnrkeinehjdatenda=382,meldnrmaxzeichenueberschritten=383, +meldnrstdpldatenwerdenaufbereitet=384;INT VAR fehlermeldnr:= +meldnrauswahlnichtsinnvoll,status,aktdnr;BOOL VAR druckenfertig;LET niltext= +"",blank=" ",null=0,bestandraeume="c02 raeume";LET letztejgstsek1=10,jgst11= +"11",jgst12="12",jgst13="13";PROC merkeartderstdpluebersichtundzeigemaske( +INT CONST art):ausgewaehlteuebersichtsart:=art;SELECT artOF CASE artlehrer: +laengederlistenobjekte:=laengeeinerparaphe;kennung:="P";varspbreite:= +spaltenbreite10;standardvproc(maskennamefuerlehrer)CASE artraeume: +laengederlistenobjekte:=laengeeinesraumes;kennung:="R";varspbreite:= +spaltenbreite10;standardvproc(maskennamefuerraeume)CASE artsek1: +laengederlistenobjekte:=laengeeinersgrp;kennung:="S";varspbreite:= +spaltenbreite8;standardvproc(maskennamefuersek1)CASE artsek2: +laengederlistenobjekte:=laengeeinerjgst;kennung:="L";varspbreite:= +spaltenbreite12;standardvproc(maskennamefuersek2)CASE artzeiten:varspbreite:= +spaltenbreite27;standardvproc(maskennamefuerzeiten)END SELECT ;END PROC +merkeartderstdpluebersichtundzeigemaske;PROC +stdpluebersichtdruckenundggfnaechsteerstellen(BOOL CONST drucken):FILE VAR f; +IF druckenTHEN standardmeldung(meldnrlistewirdausgedruckt,niltext);f:= +sequentialfile(output,druckdatei);drucknachbereiten;ELSE TEXT VAR dateiname:= +niltext;INT VAR index:=0;THESAURUS VAR t:=allLIKE "liste.*";get(t,dateiname, +index);WHILE dateiname<>niltextREP forget(dateiname,quiet);get(t,dateiname, +index)PER ;FI ;IF druckenfertigTHEN enter(2)ELSE IF +ausgewaehlteuebersichtsart=artzeitenTHEN bereitetabellefuerzeitenaufELSE +bereitetabelleninderdruckdateiaufFI ;return(1)FI ;END PROC +stdpluebersichtdruckenundggfnaechsteerstellen;PROC +stdpluebersichterstellenunddruckenggfvorherzeigen:standardmeldung( +meldnrplausi,niltext);IF NOT (maskenwerteok)THEN return(1)ELSE IF NOT ( +druckwerteok)THEN fehlermeldnr:=meldnrmaxzeichenueberschritten; +standardmeldung(fehlermeldnr,niltext);return(1)ELSE IF NOT (datenvorhanden) +THEN standardmeldung(fehlermeldnr,niltext);return(1)ELSE IF nurdruckenTHEN +standardmeldung(meldnrbittewarten,niltext)ELSE standardmeldung( +meldnrlistewirdaufgebaut,niltext)FI ;ueberschrift2:= +textanfangfuerschulhalbjahr;ueberschrift2CAT text(sj,2);ueberschrift2CAT +trennerfuerschuljahr;ueberschrift2CAT subtext(sj,3);ueberschrift2CAT +textmittefuerschulhalbjahr;ueberschrift2CAT hj;ueberschrift2CAT +textendefuerschulhalbjahr;initdruckkopf(ueberschrift1,ueberschrift2); +setzemitseitennummern(TRUE );druckenfertig:=FALSE ;ptraktobjekt:=1;IF +ausgewaehlteuebersichtsart=artzeitenTHEN bereitetabellefuerzeitenaufELSE +bereitetabelleninderdruckdateiaufFI ;IF nurdruckenTHEN drucknachbereiten; +WHILE NOT druckenfertigREP IF ausgewaehlteuebersichtsart=artzeitenTHEN +bereitetabellefuerzeitenaufELSE bereitetabelleninderdruckdateiaufFI ; +drucknachbereiten;PER ;enter(1)ELSE zeigedatei(druckdatei,"vr");FI ;FI ;FI ; +FI ;END PROC stdpluebersichterstellenunddruckenggfvorherzeigen;BOOL PROC +maskenwerteok:standardpruefe(5,fnr2geplsj,fnr3aktsj,null,niltext,status);IF +status<>0THEN infeld(status);LEAVE maskenwerteokWITH FALSE FI ;sj:= +schulkenndatum("Schuljahr");hj:=schulkenndatum("Schulhalbjahr");IF +standardmaskenfeld(fnr3aktsj)=niltextTHEN geplanteshjundsjberechnen(hj,sj)FI +;stundenplanhalbjahrsetzen(hj,sj);IF ausgewaehlteuebersichtsart<>artzeiten +THEN IF NOT (druckerbildschirmok(fnr12bildschirm,fnr13drucker))THEN LEAVE +maskenwerteokWITH FALSE FI ;standardpruefe(5,fnr4einzeilig,fnr5zweizeilig, +null,niltext,status);IF status<>0THEN infeld(status);LEAVE maskenwerteokWITH +FALSE FI ;zweizeilig:=standardmaskenfeld(fnr4einzeilig)=niltext;IF NOT ( +spaltenanzahlok(fnr10spaltenproseite))THEN LEAVE maskenwerteokWITH FALSE FI ; +IF (standardmaskenfeld(fnr11tageproseite))=niltextTHEN anzahltage:=letztertag ++1ELSE standardpruefe(2,fnr11tageproseite,null,null,niltext,status);IF status +=0THEN standardpruefe(3,fnr11tageproseite,erstertag,letztertag,niltext,status +);IF status<>0THEN infeld(status);LEAVE maskenwerteokWITH FALSE ELSE +anzahltage:=int(standardmaskenfeld(fnr11tageproseite));FI ;ELSE infeld(status +);LEAVE maskenwerteokWITH FALSE FI ;FI ;IF standardmaskenfeld(fnr8vonstd)= +niltextTHEN vonstd:=erstestdELSE standardpruefe(2,fnr8vonstd,null,null, +niltext,status);IF status<>0THEN infeld(status);LEAVE maskenwerteokWITH +FALSE FI ;standardpruefe(3,fnr8vonstd,erstestd,letztestdmofr,niltext,status); +IF status<>0THEN infeld(status);LEAVE maskenwerteokWITH FALSE FI ;vonstd:=int +(standardmaskenfeld(fnr8vonstd))FI ;IF standardmaskenfeld(fnr9bisstd)=niltext +THEN bisstd:=letztestdmofrELSE standardpruefe(2,fnr9bisstd,null,null,niltext, +status);IF status<>0THEN infeld(status);LEAVE maskenwerteokWITH FALSE FI ; +standardpruefe(3,fnr9bisstd,erstestd,letztestdmofr,niltext,status);IF status +<>0THEN infeld(status);LEAVE maskenwerteokWITH FALSE FI ;bisstd:=int( +standardmaskenfeld(fnr9bisstd))FI ;IF vonstd>bisstdTHEN infeld(fnr9bisstd); +fehlermeldnr:=meldnrauswahlnichtsinnvoll;standardmeldung(fehlermeldnr,niltext +);LEAVE maskenwerteokWITH FALSE ;FI ;vonobjekt:=standardmaskenfeld( +fnr6vonobjekt);bisobjekt:=standardmaskenfeld(fnr7bisobjekt);ELSE IF NOT ( +druckerbildschirmok(fnrz7bildschirm,fnrz8drucker))THEN LEAVE maskenwerteok +WITH FALSE ELSE IF NOT anfangsundendzeitokTHEN standardmeldung(fehlermeldnr, +niltext);LEAVE maskenwerteokWITH FALSE FI ;IF NOT (spaltenanzahlok( +fnrz6anzspalten))THEN LEAVE maskenwerteokWITH FALSE FI ;FI ;FI ;TRUE . +anfangsundendzeitok:TEXT VAR hilfstext;INT VAR tag;hilfstext:= +standardmaskenfeld(fnrz4vonstd);IF hilfstext=niltextTHEN vonstd:=erstestd +ELSE tag:=pos(allewochentagsbezeichnungen,text(hilfstext,2));IF tag=0THEN +fehlermeldnr:=meldnrfalschetagesbez;infeld(fnrz4vonstd);LEAVE +anfangsundendzeitokWITH FALSE FI ;tag:=(tagMOD 12)DIV 2;vonstd:=int(subtext( +hilfstext,3));IF NOT lastconversionokTHEN fehlermeldnr:= +meldnrbittezahlangeben;infeld(fnrz4vonstd);LEAVE anfangsundendzeitokWITH +FALSE FI ;IF vonstd<erstestdCOR (tag<letztertag-1AND vonstd>letztestdmofr) +COR (tag=letztertag-1AND vonstd>letztestdsa)THEN fehlermeldnr:= +meldnrzahlausserhalbdergrenzen;infeld(fnrz4vonstd);LEAVE anfangsundendzeitok +WITH FALSE FI ;vonstd:=vonstd+(tag*letztestdmofr);FI ;hilfstext:= +standardmaskenfeld(fnrz5bisstd);IF hilfstext=niltextTHEN bisstd:=maxanzstdn +ELSE tag:=pos(allewochentagsbezeichnungen,text(hilfstext,2));IF tag=0THEN +fehlermeldnr:=meldnrfalschetagesbez;infeld(fnrz5bisstd);LEAVE +anfangsundendzeitokWITH FALSE FI ;tag:=(tagMOD 12)DIV 2;bisstd:=int(subtext( +hilfstext,3));IF NOT lastconversionokTHEN fehlermeldnr:= +meldnrbittezahlangeben;infeld(fnrz5bisstd);LEAVE anfangsundendzeitokWITH +FALSE FI ;IF bisstd<erstestdCOR (tag<letztertag-1AND bisstd>letztestdmofr) +COR (tag=letztertag-1AND bisstd>letztestdsa)THEN fehlermeldnr:= +meldnrzahlausserhalbdergrenzen;infeld(fnrz4vonstd);LEAVE anfangsundendzeitok +WITH FALSE FI ;bisstd:=bisstd+(tag*letztestdmofr);FI ;IF vonstd>bisstdTHEN +fehlermeldnr:=meldnrfalschestundenfolge;infeld(fnrz4vonstd);LEAVE +anfangsundendzeitokWITH FALSE FI ;TRUE END PROC maskenwerteok;BOOL PROC +druckerbildschirmok(INT CONST fnrbs,fnrdr):BOOL VAR richtig:=FALSE ; +standardpruefe(5,fnrbs,fnrdr,null,niltext,status);IF status<>0THEN infeld( +status);ELSE richtig:=TRUE ;nurdrucken:=standardmaskenfeld(fnrbs)=niltext;FI +;richtigEND PROC druckerbildschirmok;BOOL PROC spaltenanzahlok(INT CONST +fnrspaltenanz):BOOL VAR richtig:=FALSE ;INT VAR spaltenmax,spaltenstandard; +IF ausgewaehlteuebersichtsart=artzeitenTHEN spaltenstandard:=2;spaltenmax:= +maxanzspalten5;ELIF ausgewaehlteuebersichtsart=artsek2THEN spaltenstandard:=4 +;spaltenmax:=maxanzspalten1bis4ELSE spaltenstandard:=5;spaltenmax:= +maxanzspalten1bis4FI ;IF standardmaskenfeld(fnrspaltenanz)=niltextTHEN +anzahlspalten:=spaltenstandard;richtig:=TRUE ELSE standardpruefe(2, +fnrspaltenanz,null,null,niltext,status);IF status<>0THEN infeld(status);ELSE +standardpruefe(3,fnrspaltenanz,minanzspalten,spaltenmax,niltext,status);IF +status<>0THEN infeld(status)ELSE anzahlspalten:=int(standardmaskenfeld( +fnrspaltenanz));richtig:=TRUE FI ;FI ;FI ;richtigEND PROC spaltenanzahlok; +BOOL PROC druckwerteok:BOOL VAR richtig;IF ausgewaehlteuebersichtsart=artsek2 +THEN richtig:=konstspbreite+1+konstkopplungsbreite+1+(varspbreite+1)* +anzahlspalten<=druckbreiteELSE richtig:=konstspbreite+1+(varspbreite+1)* +anzahlspalten<=druckbreiteFI ;IF NOT richtigTHEN IF +ausgewaehlteuebersichtsart=artzeitenTHEN infeld(fnrz6anzspalten)ELSE infeld( +fnr10spaltenproseite)FI ;FI ;richtigEND PROC druckwerteok;BOOL PROC +datenvorhanden:BOOL VAR richtig:=FALSE ;stundenplanbasisundstundenplanholen( +status);IF status<>0AND status<>8THEN fehlermeldnr:=meldnrkeinestdpldatenda; +infeld(fnr2geplsj);ELSE SELECT ausgewaehlteuebersichtsartOF CASE artlehrer: +aktdnr:=dnrlehrer;IF (datenpruefungok(fnrlparaphe,fnrlfamname))THEN richtig:= +TRUE ;ueberschrift1:=textstdpluebersicht;ueberschrift1CAT textlehrer;FI ; +CASE artraeume:aktdnr:=dnrschluessel;IF (datenpruefungok(fnrschlsachgebiet, +fnrschlschluessel))THEN richtig:=TRUE ;ueberschrift1:=textstdpluebersicht; +ueberschrift1CAT textraeume;FI ;CASE artsek1:aktdnr:=dnraktschuelergruppen; +IF (datenpruefungok(fnrsgrpsj,fnrsgrphj))THEN richtig:=TRUE ;ueberschrift1:= +textstdpluebersicht;ueberschrift1CAT textsek1;FI ;CASE artsek2:IF jgstokTHEN +richtig:=TRUE ;ueberschrift1:=textstdpluebersicht;ueberschrift1CAT textsek2; +FI ;CASE artzeiten:richtig:=TRUE ;ueberschrift1:=textstdpluebersicht; +ueberschrift1CAT textzeiten;END SELECT ;FI ;richtig.jgstok:IF vonobjekt= +niltextTHEN vonobjekt:=jgst11FI ;IF bisobjekt=niltextTHEN bisobjekt:=jgst13 +FI ;IF vonobjekt<>jgst11AND vonobjekt<>jgst12AND vonobjekt<>jgst13THEN +fehlermeldnr:=meldnrkeinegueltigejgst;infeld(fnr6vonobjekt);LEAVE jgstokWITH +FALSE FI ;IF bisobjekt<>jgst11AND bisobjekt<>jgst12AND bisobjekt<>jgst13THEN +fehlermeldnr:=meldnrkeinegueltigejgst;infeld(fnr7bisobjekt);LEAVE jgstokWITH +FALSE FI ;IF int(bisobjekt)<int(vonobjekt)THEN fehlermeldnr:= +meldnrauswahlnichtsinnvoll;infeld(fnr6vonobjekt);LEAVE jgstokWITH FALSE FI ; +listeallerobjekte:=vonobjekt;IF vonobjekt=jgst11AND bisobjekt=jgst13THEN +listeallerobjekteCAT jgst12FI ;IF listeallerobjekte<>bisobjektTHEN +listeallerobjekteCAT bisobjektFI ;TRUE END PROC datenvorhanden;BOOL PROC +datenpruefungok(INT CONST erstesfeld,zweitesfeld):TEXT VAR ersterparameter, +zweiterparameter;inittupel(aktdnr);listeallerobjekte:=niltext;IF +ausgewaehlteuebersichtsart=artlehrerTHEN IF records(aktdnr)=0.0THEN +fehlermeldnr:=meldnrkeinelehrerdatenda;infeld(fnr6vonobjekt);LEAVE +datenpruefungokWITH FALSE ;FI ;IF vonobjekt<>niltextTHEN putwert(fnrlparaphe, +vonobjekt);search(aktdnr,TRUE );IF dbstatus<>0THEN fehlermeldnr:= +meldnrungueltigeparaphe;infeld(fnr6vonobjekt);LEAVE datenpruefungokWITH +FALSE ;FI ;FI ;IF bisobjekt<>niltextTHEN putwert(fnrlparaphe,bisobjekt); +search(aktdnr,TRUE );IF dbstatus<>0THEN fehlermeldnr:=meldnrungueltigeparaphe +;infeld(fnr7bisobjekt);LEAVE datenpruefungokWITH FALSE ;FI ;FI ; +ersterparameter:=vonobjekt;zweiterparameter:=niltext;inittupel(aktdnr);ELIF +ausgewaehlteuebersichtsart=artraeumeTHEN ersterparameter:=bestandraeume; +zweiterparameter:=vonobjekt;putwert(fnrschlsachgebiet,ersterparameter); +putwert(fnrschlschluessel,zweiterparameter);search(dnrschluessel,FALSE );IF +dbstatus<>0OR wert(fnrschlsachgebiet)<>bestandraeumeTHEN IF vonobjekt=niltext +THEN fehlermeldnr:=meldnrkeineraumdatenda;ELSE fehlermeldnr:= +meldnrfalscheraumangabe;FI ;infeld(fnr6vonobjekt);LEAVE datenpruefungokWITH +FALSE FI ;IF vonobjekt<>niltextTHEN search(dnrschluessel,TRUE );IF dbstatus<> +0THEN fehlermeldnr:=meldnrfalscheraumangabe;infeld(fnr6vonobjekt);LEAVE +datenpruefungokWITH FALSE FI ;FI ;IF bisobjekt<>niltextTHEN putwert( +fnrschlschluessel,bisobjekt);search(dnrschluessel,TRUE );IF dbstatus<>0THEN +fehlermeldnr:=meldnrfalscheraumangabe;infeld(fnr7bisobjekt);LEAVE +datenpruefungokWITH FALSE FI ;FI ;inittupel(aktdnr);ELSE ersterparameter:=sj; +zweiterparameter:=hj;putwert(fnrsgrpsj,ersterparameter);putwert(fnrsgrphj, +zweiterparameter);search(dnrschluessel,FALSE );IF dbstatus<>0OR wert( +fnrsgrphj)<>hjTHEN infeld(fnr6vonobjekt);fehlermeldnr:=meldnrkeinehjdatenda; +LEAVE datenpruefungokWITH FALSE FI ;IF vonobjekt<>niltextTHEN sek1kennungvon +:=subtext(vonobjekt,3,6);sek1jgstvon:=int(subtext(vonobjekt,1,2));IF NOT ( +lastconversionok)THEN infeld(fnr6vonobjekt);fehlermeldnr:= +meldnrkeinegueltigejgst;LEAVE datenpruefungokWITH FALSE FI ;FI ;IF bisobjekt +<>niltextTHEN sek1kennungbis:=subtext(bisobjekt,3,6);sek1jgstbis:=int(subtext +(bisobjekt,1,2));IF NOT lastconversionokCOR sek1jgstvon<5COR sek1jgstvon>11 +COR sek1jgstbis<5COR sek1jgstbis>11THEN infeld(fnr7bisobjekt);fehlermeldnr:= +meldnrkeinegueltigejgst;LEAVE datenpruefungokWITH FALSE ELSE putintwert( +fnrsgrpjgst,sek1jgstvon);putwert(fnrsgrpkennung,sek1kennungvon);IF +sek1jgstvon>sek1jgstbisTHEN infeld(fnr6vonobjekt);fehlermeldnr:= +meldnrzahlausserhalbdergrenzen;LEAVE datenpruefungokWITH FALSE FI ;IF +sek1jgstvon=sek1jgstbisTHEN IF sek1kennungvon>sek1kennungbisTHEN infeld( +fnr6vonobjekt);fehlermeldnr:=meldnralphabetischefolge;LEAVE datenpruefungok +WITH FALSE FI ;FI ;IF sek1jgstbis<>10THEN bisobjekt:="0"+text(sek1jgstbis)+ +sek1kennungbis;FI ;IF sek1jgstvon<>10THEN vonobjekt:="0"+text(sek1jgstvon)+ +sek1kennungvon;FI ;FI ;FI ;FI ;IF vonanfangbisendeTHEN statleseschleife( +aktdnr,ersterparameter,zweiterparameter,erstesfeld,zweitesfeld,PROC dateiende +);ELIF vonanfangbiswertTHEN IF NOT bezeichnungzulaessig(kennung,bisobjekt) +THEN infeld(fnr7bisobjekt);fehlermeldnr:=meldnrungueltigeeingabe; +standardmeldung(fehlermeldnr,niltext);LEAVE datenpruefungokWITH FALSE ELSE +statleseschleife(aktdnr,ersterparameter,zweiterparameter,erstesfeld, +zweitesfeld,PROC endewert);FI ;ELIF vonwertbisendeTHEN IF NOT +bezeichnungzulaessig(kennung,vonobjekt)THEN infeld(fnr6vonobjekt); +fehlermeldnr:=meldnrungueltigeeingabe;standardmeldung(fehlermeldnr,niltext); +LEAVE datenpruefungokWITH FALSE ELSE statleseschleife(aktdnr,ersterparameter, +zweiterparameter,erstesfeld,zweitesfeld,PROC dateiende);FI ;ELIF +vonwertbiswertTHEN IF NOT bezeichnungzulaessig(kennung,vonobjekt)THEN infeld( +fnr6vonobjekt);fehlermeldnr:=meldnrungueltigeeingabe;standardmeldung( +fehlermeldnr,niltext);LEAVE datenpruefungokWITH FALSE ELSE IF NOT +bezeichnungzulaessig(kennung,bisobjekt)THEN infeld(fnr7bisobjekt); +fehlermeldnr:=meldnrungueltigeeingabe;standardmeldung(fehlermeldnr,niltext); +LEAVE datenpruefungokWITH FALSE ELSE IF vonobjekt>bisobjektTHEN infeld( +fnr7bisobjekt);fehlermeldnr:=meldnralphabetischefolge;standardmeldung( +fehlermeldnr,niltext);LEAVE datenpruefungokWITH FALSE ELSE statleseschleife( +aktdnr,ersterparameter,zweiterparameter,erstesfeld,zweitesfeld,PROC endewert) +;FI ;FI ;FI ;ELSE statleseschleife(aktdnr,ersterparameter,zweiterparameter, +erstesfeld,zweitesfeld,PROC endewert);FI ;TRUE .vonanfangbisende:vonobjekt= +niltextAND bisobjekt=niltext.vonanfangbiswert:vonobjekt=niltextAND bisobjekt +<>niltext.vonwertbisende:vonobjekt<>niltextAND bisobjekt=niltext. +vonwertbiswert:vonobjekt<>niltextAND bisobjekt<>niltextEND PROC +datenpruefungok;PROC endewert(BOOL VAR letzter):IF ausgewaehlteuebersichtsart +=artlehrerTHEN IF dbstatus=0AND wert(fnrlparaphe)<=bisobjektTHEN +listeallerobjekteCAT text(wert(fnrlparaphe),laengederlistenobjekte)ELSE +letzter:=TRUE ;FI ;ELIF ausgewaehlteuebersichtsart=artraeumeTHEN IF dbstatus= +0AND wert(fnrschlsachgebiet)=bestandraeumeAND bisobjekt>=wert( +fnrschlschluessel)THEN listeallerobjekteCAT text(wert(fnrschlschluessel), +laengederlistenobjekte)ELSE letzter:=TRUE ;FI ;ELSE IF dbstatus=0AND wert( +fnrsgrpsj)=sjAND wert(fnrsgrphj)=hjAND (sek1jgstbis>intwert(fnrsgrpjgst)OR ( +sek1jgstbis=intwert(fnrsgrpjgst)AND sek1kennungbis>=wert(fnrsgrpkennung))) +THEN listeallerobjekteCAT text(wert(fnrsgrpjgst),2);listeallerobjekteCAT text +(wert(fnrsgrpkennung),4);ELSE letzter:=TRUE ;FI ;FI ;END PROC endewert;PROC +dateiende(BOOL VAR ende):IF ausgewaehlteuebersichtsart=artlehrerTHEN IF +dbstatus=0THEN listeallerobjekteCAT text(wert(fnrlparaphe), +laengederlistenobjekte)ELSE ende:=TRUE FI ;ELIF ausgewaehlteuebersichtsart= +artraeumeTHEN IF dbstatus=0AND wert(fnrschlsachgebiet)=bestandraeumeTHEN +listeallerobjekteCAT text(wert(fnrschlschluessel),laengederlistenobjekte); +ELSE ende:=TRUE FI ;ELSE IF dbstatus=0AND wert(fnrsgrpsj)=sjAND wert( +fnrsgrphj)=hjAND letztejgstsek1>=intwert(fnrsgrpjgst)THEN listeallerobjekte +CAT text(wert(fnrsgrpjgst),2);listeallerobjekteCAT text(wert(fnrsgrpkennung), +4);ELSE ende:=TRUE ;FI ;FI ;END PROC dateiende;PROC drucketrennstrich:TEXT +VAR t:=konstspbreite*trennstrichzeichen;tCAT spaltentrennerimstrich;IF +ausgewaehlteuebersichtsart=artsek2THEN tCAT konstkopplungsbreite* +trennstrichzeichen;tCAT spaltentrennerimstrich;FI ;tCAT anzahlspalten*( +varspbreite*trennstrichzeichen+spaltentrennerimstrich);druckzeileschreiben(t) +END PROC drucketrennstrich;PROC druckespaltenueberschriften(ROW maxanzspalten +TEXT CONST spaltenueberschrift):TEXT VAR t:=textzeiterstespalte;INT VAR i;IF +ausgewaehlteuebersichtsart=artsek2THEN tCAT spaltenueberschrift[1];tCAT +spaltenueberschrift[2]ELSE FOR iFROM 1UPTO anzahlspaltenREP tCAT text( +spaltenueberschrift[i],varspbreite);tCAT spaltentrennerPER FI ;tCAT blank; +druckzeileschreiben(t)END PROC druckespaltenueberschriften;PROC +bereitetabelleninderdruckdateiauf:TEXT VAR jgstbez,lvsderjgst,aktlv,aktkopplg +,lvsprozeit,kopplgnprozeit,kopplgundlvs;INT VAR ptraktlv;INT VAR position, +anfpos,endpos;INT VAR zeilenzaehler,aktstd,spaltenzaehler,stundenzaehler, +tagzaehler,tabellenzaehler;TEXT VAR t,t1,lv,rm,par;BOOL VAR +erstezeilederstunde,stundenochnichtfertig;ROW maxanzspaltenTEXT VAR +spaltenueberschrift,zusatzangabe;druckvorbereiten;FOR tabellenzaehlerFROM 1 +UPTO maxtabzahljedruckdateiREP bestimmespaltenueberschriften;IF +ausgewaehlteuebersichtsart<>artsek2THEN standardmeldung(meldnrinbearbeitung, +spaltenueberschrift(1)+"#");FI ;zeilenzaehler:=zeilebeianfangneueseite; +druckkopfschreiben;druckespaltenueberschriften(spaltenueberschrift); +drucketrennstrich;FOR tagzaehlerFROM erstertagUPTO letztertagREP IF +tagzaehler=letztertagTHEN aktstd:=min(bisstd,letztestdsa)ELSE aktstd:=bisstd +FI ;FOR stundenzaehlerFROM vonstdUPTO aktstdREP bereitezeileneinerstundeauf +PER ;IF zeilenzaehler>zeilebeianfangneueseiteTHEN drucketrennstrich; +zeilenzaehlerINCR 1;evtlseitenumbruchwgueberlaenge;FI ; +evtlseitenumbruchwgtageszahljeseite;PER ;IF zeilenzaehler> +zeilebeianfangneueseiteTHEN seitenwechsel;zeilenzaehler:= +zeilebeianfangneueseite;FI ;PER ;druckenfertig:=ptraktobjekt>length( +listeallerobjekte).bestimmespaltenueberschriften:IF +ausgewaehlteuebersichtsart=artsek2THEN IF ptraktobjekt>length( +listeallerobjekte)THEN druckenfertig:=TRUE ;LEAVE +bereitetabelleninderdruckdateiaufFI ;jgstbez:=subtext(listeallerobjekte, +ptraktobjekt,ptraktobjekt+laengederlistenobjekte-1);lvsderjgst:= +lvderschuelergruppe(jgstbez);spaltenueberschrift[1]:= +ueberschriftspalte2beiart4;spaltenueberschrift[2]:=ueberschriftspalte3beiart4 +;initdruckkopf(ueberschrift1+blank+jgstbez,ueberschrift2);ptraktobjektINCR +laengederlistenobjekte;ELSE spaltenzaehler:=0;WHILE (spaltenzaehler< +anzahlspalten)AND (ptraktobjekt<=length(listeallerobjekte))REP spaltenzaehler +INCR 1;spaltenueberschrift[spaltenzaehler]:=subtext(listeallerobjekte, +ptraktobjekt,ptraktobjekt+laengederlistenobjekte-1);ptraktobjektINCR +laengederlistenobjekte;PER ;IF spaltenzaehler=0THEN druckenfertig:=TRUE ; +LEAVE bereitetabelleninderdruckdateiaufFI ;anzahlspalten:=spaltenzaehlerFI . +bereitezeileneinerstundeauf:erstezeilederstunde:=TRUE ;stundenochnichtfertig +:=TRUE ;WHILE stundenochnichtfertigREP IF erstezeilederstundeTHEN IF +stundenzaehler=vonstdTHEN SELECT tagzaehlerOF CASE 1:t:=textmontag;CASE 2:t:= +textdienstag;CASE 3:t:=textmittwoch;CASE 4:t:=textdonnerstag;CASE 5:t:= +textfreitag;CASE 6:t:=textsamstag;END SELECT ;tag:=t;ELSE t:=textkeintagFI ;t +CAT blank;tCAT text(stundenzaehler,2);tCAT blank;tCAT spaltentrenner;ELSE t:= +leereerstespalte;FI ;IF ausgewaehlteuebersichtsart=artsek2THEN IF +erstezeilederstundeTHEN anfpos:=1;endpos:=8;lvsprozeit:=datenderzeit(( +tagzaehler-1)*letztestdmofr+stundenzaehler,"L");kopplgnprozeit:=datenderzeit( +(tagzaehler-1)*letztestdmofr+stundenzaehler,"K");position:=0;WHILE endpos<= +length(lvsderjgst)AND positionMOD 8<>1REP aktlv:=subtext(lvsderjgst,anfpos, +endpos);position:=pos(lvsprozeit,aktlv);anfposINCR 8;endposINCR 8PER ;IF +position<>0THEN aktkopplg:=subtext(kopplgnprozeit,position,position+7); +kopplgundlvs:=aktkopplg;anfpos:=1;endpos:=8;position:=pos(kopplgnprozeit, +aktkopplg);WHILE endpos<=length(kopplgnprozeit)AND position<>0REP IF position +MOD 8=1THEN aktlv:=subtext(lvsprozeit,position,position+7);IF pos( +kopplgundlvs,aktlv)=0THEN kopplgundlvsCAT aktlvFI ;anfposINCR 8;endposINCR 8; +FI ;position:=pos(kopplgnprozeit,aktkopplg,position+1);PER ;ELSE kopplgundlvs +:=niltextFI ;tCAT text(text(kopplgundlvs,laengeeinerkopplung), +konstkopplungsbreite);ptraktlv:=laengeeinerkopplung+1;ELSE tCAT +konstkopplungsbreite*blankFI ;tCAT spaltentrenner;standardmeldung( +meldnrinbearbeitung,"Jahrgangsstufe: "+jgstbez+" Wochentag: "+tag+"#");FI ; +aktstd:=(tagzaehler-1)*letztestdmofr+stundenzaehler;FOR spaltenzaehlerFROM 1 +UPTO anzahlspaltenREP IF ausgewaehlteuebersichtsart=artsek2THEN IF ptraktlv<= +length(kopplgundlvs)THEN lv:=subtext(kopplgundlvs,ptraktlv,ptraktlv+ +laengeeinerlv-1);ptraktlvINCR laengeeinerlv;planeintraglesen(aktstd,kennung, +lv,lv,rm,par);rm:=8*blank+rm;t1:=subtext(lv,anfposfachinlv,endeposfachinlv); +t1CAT blank;t1CAT subtext(lv,anfposkennunginlv);t1CAT trennstrichfuerlv;t1 +CAT par;ELSE t1:=niltext;par:=niltext;rm:=niltext;FI ;ELSE planeintraglesen( +aktstd,kennung,spaltenueberschrift[spaltenzaehler],lv,rm,par);IF lv=niltext +THEN t1:=niltextELSE IF ausgewaehlteuebersichtsart=artsek1THEN IF length(lv)> +laengeeinerlvTHEN lv:=text(lv,laengeeinerlv);t1:=datenzurlv("K",lv);rm:= +niltext;ELSE t1:=blank;t1CAT subtext(lv,anfposfachinlv,endeposfachinlv);t1 +CAT blank;t1CAT par;FI ;rm:=4*blank+rmELSE t1:=text(lv,endeposjgstinlv);t1 +CAT blank;t1CAT subtext(lv,anfposfachinlv,endeposfachinlv);t1CAT blank;t1CAT +subtext(lv,anfposkennunginlv);FI ;FI ;FI ;tCAT text(t1,varspbreite);tCAT +spaltentrenner;IF zweizeiligTHEN IF ausgewaehlteuebersichtsart=artraeumeTHEN +zusatzangabe[spaltenzaehler]:=parELSE zusatzangabe[spaltenzaehler]:=rmFI ; +zusatzangabe[spaltenzaehler]:=text(zusatzangabe[spaltenzaehler],varspbreite); +FI ;PER ;druckzeileschreiben(t);zeilenzaehlerINCR 1;IF zeilenzaehler= +drucklaenge(ueberschriftenzahl)THEN seitenwechsel;zeilenzaehler:= +zeilebeianfangneueseite;IF zweizeiligCOR tagzaehler<letztertagCOR +stundenzaehler<min(bisstd,letztestdsa)COR (ausgewaehlteuebersichtsart=artsek2 +AND ptraktlv<=length(kopplgundlvs))THEN druckkopfschreiben; +druckespaltenueberschriften(spaltenueberschrift);drucketrennstrich;FI ;FI ; +IF zweizeiligTHEN t:=leereerstespalte;IF ausgewaehlteuebersichtsart=artsek2 +THEN tCAT konstkopplungsbreite*blank;tCAT spaltentrenner;FI ;FOR +spaltenzaehlerFROM 1UPTO anzahlspaltenREP tCAT zusatzangabe[spaltenzaehler];t +CAT spaltentrenner;PER ;druckzeileschreiben(t);zeilenzaehlerINCR 1;IF +zeilenzaehler=drucklaenge(ueberschriftenzahl)THEN seitenwechsel;zeilenzaehler +:=zeilebeianfangneueseite;IF tagzaehler<letztertagCOR stundenzaehler<min( +bisstd,letztestdsa)COR (ausgewaehlteuebersichtsart=artsek2AND ptraktlv<= +length(kopplgundlvs))THEN druckkopfschreiben;druckespaltenueberschriften( +spaltenueberschrift);drucketrennstrich;FI ;FI ;FI ;IF +ausgewaehlteuebersichtsart=artsek2THEN stundenochnichtfertig:=ptraktlv<= +length(kopplgundlvs)ELSE stundenochnichtfertig:=FALSE FI ;erstezeilederstunde +:=FALSE ;PER .evtlseitenumbruchwgueberlaenge:IF zeilenzaehler=drucklaenge( +ueberschriftenzahl)THEN seitenwechsel;zeilenzaehler:=zeilebeianfangneueseite; +IF tagzaehler<letztertagTHEN druckkopfschreiben;druckespaltenueberschriften( +spaltenueberschrift);drucketrennstrich;FI ;FI . +evtlseitenumbruchwgtageszahljeseite:IF tagzaehlerMOD anzahltage=0AND +zeilenzaehler>zeilebeianfangneueseiteTHEN seitenwechsel;zeilenzaehler:= +zeilebeianfangneueseite;IF tagzaehler<letztertagTHEN druckkopfschreiben; +druckespaltenueberschriften(spaltenueberschrift);drucketrennstrich;FI ;FI . +END PROC bereitetabelleninderdruckdateiauf;PROC bereitetabellefuerzeitenauf: +BOOL VAR erstezeilederstunde:=TRUE ;TEXT VAR stringkopplungen,stringparaphen, +stringraeume;INT VAR ptraktkopplung,ptraktparaphe,ptraktraum;ROW +maxanzspaltenTEXT VAR spaltenueberschrift;INT VAR zeilenzaehler, +stundenzaehler,spaltenzaehler;TEXT VAR t;bestimmespaltenueberschriften; +druckvorbereiten;druckkopfschreiben;druckespaltenueberschriften( +spaltenueberschrift);drucketrennstrich;zeilenzaehler:=zeilebeianfangneueseite +;FOR stundenzaehlerFROM vonstdUPTO bisstdREP IF stundenzaehler=vonstdOR +stundenzaehlerMOD letztestdmofr=1THEN SELECT (stundenzaehler-1)DIV +letztestdmofrOF CASE 0:tag:=textmontag;CASE 1:tag:=textdienstag;CASE 2:tag:= +textmittwoch;CASE 3:tag:=textdonnerstag;CASE 4:tag:=textfreitag;CASE 5:tag:= +textsamstag;END SELECT ;standardmeldung(meldnrinbearbeitung,"Wochentag : "+ +tag+"#");FI ;bereitezeileneinerstundeauf;evtltrennstrichdrucken;PER ; +druckenfertig:=TRUE ;.bestimmespaltenueberschriften:FOR spaltenzaehlerFROM 1 +UPTO anzahlspaltenREP spaltenueberschrift[spaltenzaehler]:= +ueberschriftbeiart5;PER ;.evtltrennstrichdrucken:IF (stundenzaehlerMOD +letztestdmofr=0OR stundenzaehler=bisstd)AND zeilenzaehler> +zeilebeianfangneueseiteTHEN drucketrennstrich;zeilenzaehlerINCR 1;IF +zeilenzaehler=drucklaenge(ueberschriftenzahl)THEN seitenwechsel;zeilenzaehler +:=zeilebeianfangneueseite;IF stundenzaehler<bisstdTHEN druckkopfschreiben; +druckespaltenueberschriften(spaltenueberschrift);drucketrennstrich;FI ;FI FI +;.bereitezeileneinerstundeauf:listeallerobjekte:=datenderzeit(stundenzaehler, +"L");ptraktobjekt:=1;stringkopplungen:=datenderzeit(stundenzaehler,"K"); +ptraktkopplung:=1;stringparaphen:=datenderzeit(stundenzaehler,"P"); +ptraktparaphe:=1;stringraeume:=datenderzeit(stundenzaehler,"R");ptraktraum:=1 +;erstezeilederstunde:=TRUE ;WHILE ptraktobjekt<=length(listeallerobjekte)OR +erstezeilederstundeREP IF erstezeilederstundeOR zeilenzaehler= +zeilebeianfangneueseiteTHEN t:=tag;tCAT blank;tCAT text((stundenzaehler-1) +MOD letztestdmofr+1,2);tCAT blank;tCAT spaltentrenner;erstezeilederstunde:= +FALSE ELSE t:=leereerstespalteFI ;FOR spaltenzaehlerFROM 1UPTO anzahlspalten +REP IF ptraktobjekt>length(listeallerobjekte)THEN tCAT konstkopplungsbreite* +blank;tCAT trennstrichfuerlv;tCAT 4*blank;tCAT trennstrichfuerlv;tCAT 4*blank +;tCAT trennstrichfuerlv;tCAT konstkopplungsbreite*blank;tCAT spaltentrenner; +ELSE tCAT subtext(listeallerobjekte,ptraktobjekt,ptraktobjekt+laengeeinerlv-1 +);tCAT trennstrichfuerlv;ptraktobjektINCR laengeeinerlv;tCAT subtext( +stringraeume,ptraktraum,ptraktraum+laengeeinesraumes-1);tCAT +trennstrichfuerlv;ptraktraumINCR laengeeinesraumes;tCAT subtext( +stringparaphen,ptraktparaphe,ptraktparaphe+laengeeinerparaphe-1);tCAT +trennstrichfuerlv;ptraktparapheINCR laengeeinerparaphe;tCAT subtext( +stringkopplungen,ptraktkopplung,ptraktkopplung+laengeeinerkopplung-1);tCAT +spaltentrenner;ptraktkopplungINCR laengeeinerkopplung;FI ;PER ; +druckzeileschreiben(t);zeilenzaehlerINCR 1;evtlseitenumbruchwgueberlaenge; +PER .evtlseitenumbruchwgueberlaenge:IF zeilenzaehler=drucklaenge( +ueberschriftenzahl)THEN seitenwechsel;zeilenzaehler:=zeilebeianfangneueseite; +IF stundenzaehler<bisstdCOR listeallerobjekte<>niltextTHEN druckkopfschreiben +;druckespaltenueberschriften(spaltenueberschrift);drucketrennstrich;FI ;FI ;. +END PROC bereitetabellefuerzeitenauf;END PACKET stdpluebersichten; + diff --git a/app/schulis/2.2.1/src/4.stundenplan akt halbj uebernehmen b/app/schulis/2.2.1/src/4.stundenplan akt halbj uebernehmen new file mode 100644 index 0000000..0d29a46 --- /dev/null +++ b/app/schulis/2.2.1/src/4.stundenplan akt halbj uebernehmen @@ -0,0 +1,141 @@ +PACKET stundenplanakthalbjuebernehmenDEFINES stundenplanuebernehmenpruefen, +stundenplanuebernehmen:LET feldjgst1=2,feldjgst2=3,maxanzfehler=500,laengelv= +8,schuljahr="Schuljahr",halbjahr="Schulhalbjahr",schulname="Schulname", +schulort="Schulort",kennungraum="R",kennungparaphe="P",kennunglv="L",allejgst +="00050607080910111213",leererraum=" ",ausgabeparam="#",erstestd=1, +letztestd=66,dateiname="Protokoll zur Stundenplan-Übernahme",zwdatei= +"Zwischenspeicherung",lvungueltig="Lehrveranstaltung nicht geplant", +raumungueltig1="Raumbezeichnung ",raumungueltig2=" ungültig",ohneraum= +" (Übernahme ohne Raum)",schnittschueler="Zeitüberschneidung Schüler durch ", +schnittlehrer="Zeitüberschneidung Lehrer durch",schnittraum= +"Zeitüberschneidung Raum ",leerzeile=" ",ueberschrift1= +"Stundenplan für Jgst. ",ueberschrift2=" übernehmen von ",ueberschrift3= +" nach ",meldungwirklichuebern=300,meldungfalschejgst=305,meldungabbruch=400, +meldungbearbwird=352,meldungplausi=57,meldungwarten=69,meldungkeinesugruppen= +334,meldungzuvielesugruppen=356,meldungkeinelv=326,meldungserverfehler=376, +meldungbasisinkon=378,meldungjgst13=402,meldungzuvielelv=358;TEXT VAR aktsj, +akthj,geplsj,geplhj,jgst1,jgst2,allelvderzeit,alleraeumederzeit,eintrag, +aktzubearbjgst,geplzubearbjgst;INT VAR i,j,fstat,jg1,jg2,jgstpos,anzbearbjgst +,zz:=0;BOOL VAR geplstundenplanneu:=FALSE ,jgstumzusetzen:=FALSE , +erstereintrag:=TRUE ;FILE VAR datei,z;PROC stundenplanreorganisiertverlassen: +stundenplanreorganisierenundsichern(fstat);IF fstat<>0THEN return(2); +meldungausgeben(fstat)FI END PROC stundenplanreorganisiertverlassen;PROC +stundenplanuebernehmenpruefen:standardmeldung(meldungwarten," "); +holestartdaten;jgst1:=standardmaskenfeld(feldjgst1);jgst2:=standardmaskenfeld +(feldjgst2);pruefeingaben;gibmeldunguebernahmeaus;standardnproc. +holestartdaten:aktsj:=schulkenndatum(schuljahr);akthj:=schulkenndatum( +halbjahr);geplsj:=aktsj;geplhj:=akthj;geplanteshjundsjberechnen(geplhj,geplsj +).pruefeingaben:standardmeldung(meldungplausi,"");IF jgstrichtig(jgst1,jg1,1) +THEN IF NOT jgstrichtig(jgst2,jg2,2)THEN infeld(feldjgst2); +fehlermeldungfalschejgstFI ELSE infeld(feldjgst1);fehlermeldungfalschejgstFI +;IF jgst1=jgst2THEN aktzubearbjgst:=jgst1;ELSE aktzubearbjgst:=subtext( +allejgst,pos(allejgst,jgst1),pos(allejgst,jgst2)+1)FI ;anzbearbjgst:=length( +aktzubearbjgst)DIV 2;IF geplhj="2"THEN geplzubearbjgst:=aktzubearbjgstELIF +jgst1="13"THEN infeld(feldjgst1);fehlermeldungfalscherwertELIF jgst2="13" +THEN infeld(feldjgst2);fehlermeldungfalscherwertELSE jgstumzusetzen:=TRUE ; +berechnegeplzubearbjgstFI .fehlermeldungfalschejgst:standardmeldung( +meldungfalschejgst,"");return(1);LEAVE stundenplanuebernehmenpruefen. +fehlermeldungfalscherwert:standardmeldung(meldungjgst13,"");return(1);LEAVE +stundenplanuebernehmenpruefen.gibmeldunguebernahmeaus:standardmeldung( +meldungwirklichuebern,"").END PROC stundenplanuebernehmenpruefen;PROC +berechnegeplzubearbjgst:TEXT VAR jg;jgstpos:=1;geplzubearbjgst:="";FOR iFROM +1UPTO anzbearbjgstREP jg:=subtext(aktzubearbjgst,jgstpos,jgstpos+1);IF jg= +"00"THEN geplzubearbjgstCAT "00"ELSE geplzubearbjgstCAT jgstaufber(text(int( +jg)+1))FI ;jgstposINCR 2PER END PROC berechnegeplzubearbjgst;BOOL PROC +jgstrichtig(TEXT VAR jgst,INT VAR jg,INT CONST pruefung):IF jgst<>""THEN jg:= +int(jgst);IF jg=0CAND lastconversionokTHEN jgst:="00";TRUE ELIF +lastconversionokTHEN IF jg>4CAND jg<14THEN jgst:=jgstaufber(jgst);TRUE ELSE +FALSE FI ELSE FALSE FI ELIF pruefung=1THEN jgst:="05";jg:=5;TRUE ELIF +pruefung=2THEN jgst:=jgst1;jg:=jg1;TRUE ELSE FALSE FI .END PROC jgstrichtig; +PROC stundenplanuebernehmen(BOOL CONST uebernahme):TEXT VAR ueberschrift:=""; +IF uebernahmeTHEN standardmeldung(meldungbearbwird,"Stundenplan "+akthj+". "+ +text(aktsj,2)+"/"+subtext(aktsj,3)+ausgabeparam);stundenplanhalbjahrsetzen( +akthj,aktsj);stundenplanbasisundstundenplanholen(fstat);IF fstat<>0CAND fstat +<>8THEN meldungausgeben(fstat);return(2);LEAVE stundenplanuebernehmenFI ; +forget(dateiname,quiet);datei:=sequentialfile(output,dateiname);ueberschrift +:=ueberschrift1+jgst1;IF jgst1<>jgst2THEN ueberschriftCAT " bis "+jgst2FI ; +ueberschriftCAT ueberschrift2;ueberschriftCAT akthj+". ";ueberschriftCAT text +(aktsj,2)+"/";ueberschriftCAT subtext(aktsj,3);ueberschriftCAT ueberschrift3; +ueberschriftCAT geplhj+". ";ueberschriftCAT text(geplsj,2)+"/";ueberschrift +CAT subtext(geplsj,3);putline(datei,schulkenndatum(schulname));putline(datei, +text(schulkenndatum(schulort),65)+date);putline(datei,leerzeile);putline( +datei,ueberschrift);putline(datei,length(ueberschrift)*"-");holalleeintraege; +fstat:=0;loeschealleeintraege;IF fstat<>0CAND fstat<>8THEN meldungausgeben( +fstat);return(2);LEAVE stundenplanuebernehmenFI ;uebertragalleeintraege; +stundenplanreorganisiertverlassen;IF zz>maxanzfehlerTHEN standardmeldung( +meldungabbruch,text(zz)+ausgabeparam)ELIF zz=0THEN +eintragkeineuebernahmefehlerFI ;IF fstat=0THEN zeigedatei(dateiname,"vr");FI +ELSE return(2)FI .eintragkeineuebernahmefehler:putline(datei,leerzeile); +putline(datei,"Bei der Übernahme traten keine Fehler auf!").END PROC +stundenplanuebernehmen;PROC loeschealleeintraege:INT VAR jgstpos:=1; +geplstundenplanneu:=FALSE ;stundenplanhalbjahrsetzen(geplhj,geplsj); +standardmeldung(meldungbearbwird,"Stundenplan "+geplhj+". "+text(geplsj,2)+ +"/"+subtext(geplsj,3)+ausgabeparam);stundenplanbasisundstundenplanholen(fstat +);IF fstat<>0CAND fstat<>8THEN stundenplanbasisundstundenplanerstellen(fstat) +;IF fstat<>0THEN LEAVE loeschealleeintraegeELSE geplstundenplanneu:=TRUE ; +stundenplanbasissichern(fstat);stundenplansichern(fstat);IF fstat<>0THEN +meldungausgeben(fstat);return(2);LEAVE loeschealleeintraegeFI FI FI ;IF +geplstundenplanneuTHEN LEAVE loeschealleeintraegeFI ;FOR iFROM erstestdUPTO +letztestdREP standardmeldung(meldungbearbwird,tagstunde(i,FALSE )+ +" (Einträge löschen)"+ausgabeparam);allelvderzeit:=datenderzeit(i,kennunglv); +jgstpos:=1;FOR jFROM 1UPTO anzbearbjgstREP loeschelv(subtext(geplzubearbjgst, +jgstpos,jgstpos+1));jgstposINCR 2PER PER .END PROC loeschealleeintraege;PROC +loeschelv(TEXT CONST jgst):INT VAR suchab:=1,aktpos;BOOL VAR spok:=TRUE ; +WHILE pos(allelvderzeit,jgst,suchab)>0REP aktpos:=pos(allelvderzeit,jgst, +suchab);IF aktposMOD laengelv=1THEN planeintragloeschen(i,subtext( +allelvderzeit,aktpos,aktpos+7),spok)FI ;suchab:=aktpos+7PER .END PROC +loeschelv;PROC holalleeintraege:forget(zwdatei,quiet);z:=sequentialfile( +output,zwdatei);FOR iFROM erstestdUPTO letztestdREP standardmeldung( +meldungbearbwird,tagstunde(i,FALSE )+" (Einträge holen)"+ausgabeparam); +allelvderzeit:=datenderzeit(i,kennunglv);alleraeumederzeit:=datenderzeit(i, +kennungraum);jgstpos:=1;eintrag:="";FOR jFROM 1UPTO anzbearbjgstREP holelv( +subtext(aktzubearbjgst,jgstpos,jgstpos+1));jgstposINCR 2PER ;putline(z, +eintrag)PER .END PROC holalleeintraege;PROC holelv(TEXT CONST jgst):INT VAR +suchab:=1,aktpos,ii;TEXT VAR lveintrag;WHILE pos(allelvderzeit,jgst,suchab)>0 +REP aktpos:=pos(allelvderzeit,jgst,suchab);IF aktposMOD laengelv=1THEN ii:=( +aktpos+1)DIV 2;IF jgstumzusetzenTHEN lveintrag:=lv;IF text(lveintrag,2)<>"00" +THEN eintragCAT jgstaufber(text(int(text(lveintrag,2))+1));eintragCAT subtext +(lveintrag,3);ELSE eintragCAT lvFI ;eintragCAT raumELSE eintragCAT lv+raumFI +FI ;suchab:=aktpos+7PER .lv:subtext(allelvderzeit,aktpos,aktpos+7).raum: +subtext(alleraeumederzeit,ii,ii+3).END PROC holelv;PROC +uebertragalleeintraege:zz:=0;modify(z);toline(z,1);col(z,1);FOR iFROM +erstestdUPTO letztestdREP standardmeldung(meldungbearbwird,tagstunde(i,FALSE +)+" (Einträge übernehmen)"+ausgabeparam);readrecord(z,eintrag);IF eintrag<>"" +THEN erstereintrag:=TRUE ;schreibeintraegeFI ;down(z);IF zz>maxanzfehlerTHEN +putline(datei,leerzeile);putline(datei, +"Abbruch, da bei der Übernahme zuviele Fehler auftraten!");LEAVE +uebertragalleeintraegeFI PER END PROC uebertragalleeintraege;PROC +schreibeintraege:TEXT VAR lv,raum,t1,t2;INT VAR lvpos:=1;BOOL VAR ohnefehler; +WHILE lvpos<length(eintrag)REP ohnefehler:=TRUE ;lv:=subtext(eintrag,lvpos, +lvpos+7);raum:=subtext(eintrag,lvpos+8,lvpos+11);pruefungundeintrag;lvpos +INCR 12PER .pruefungundeintrag:prueflv;pruefschnittschueler; +pruefschnittlehrer;pruefraumundschnitt;IF ohnefehlerTHEN planeintragvornehmen +(i,lv,raum,ohnefehler)FI .prueflv:IF NOT bezeichnungzulaessig(kennunglv,lv) +THEN IF erstereintragTHEN putline(datei,leerzeile);erstereintrag:=FALSE FI ; +putline(datei,jgfake(lv)+": "+tagstunde(i,TRUE )+". : "+lvungueltig);zzINCR 1 +;LEAVE pruefungundeintragFI .pruefschnittschueler:IF schuelerunterrichtTHEN +IF erstereintragTHEN putline(datei,leerzeile);erstereintrag:=FALSE FI ; +putline(datei,jgfake(lv)+": "+tagstunde(i,TRUE )+". : "+schnittschueler+ +jgfake(t1));zzINCR 1;ohnefehler:=FALSE FI .schuelerunterricht: +schuelergruppenschnittbeizeit(i,kennunglv,lv,"",t1,t2).pruefschnittlehrer:t1 +:=datenzurlv(kennungparaphe,lv);IF lehrerunterrichtTHEN IF erstereintragTHEN +putline(datei,leerzeile);erstereintrag:=FALSE FI ;putline(datei,jgfake(lv)+ +": "+tagstunde(i,TRUE )+". : "+schnittlehrer+jgfake(t2));zzINCR 1;ohnefehler +:=FALSE FI .lehrerunterricht:t2:=geplantelvfuer(i,kennungparaphe,t1);t2<>lv +CAND t2<>"".pruefraumundschnitt:IF raum<>leererraumTHEN IF NOT +bezeichnungzulaessig(kennungraum,raum)THEN IF erstereintragTHEN putline(datei +,leerzeile);erstereintrag:=FALSE FI ;putline(datei,jgfake(lv)+": "+tagstunde( +i,TRUE )+". : "+raumungueltig1+raum+raumungueltig2+ohneraum);zzINCR 1;raum:= +leererraumELIF raumunterrichtTHEN IF erstereintragTHEN putline(datei, +leerzeile);erstereintrag:=FALSE FI ;putline(datei,jgfake(lv)+": "+tagstunde(i +,TRUE )+". : "+schnittraum+raum+ohneraum);zzINCR 1;raum:=leererraumFI FI . +raumunterricht:t1:=geplantelvfuer(i,kennungraum,raum);t1<>lvCAND t1<>"".END +PROC schreibeintraege;TEXT PROC jgfake(TEXT CONST lv):text(lv,2)+" "+subtext( +lv,3,4)+" "+subtext(lv,5)END PROC jgfake;PROC meldungausgeben(INT VAR fstat): +IF fstat=2THEN standardmeldung(meldungserverfehler,"");ELIF fstat=4THEN +standardmeldung(meldungkeinesugruppen,"");ELIF fstat=5THEN standardmeldung( +meldungzuvielesugruppen,"")ELIF fstat=6THEN standardmeldung(meldungkeinelv,"" +)ELIF fstat=7THEN standardmeldung(meldungzuvielelv,"")ELIF fstat=9THEN +standardmeldung(meldungbasisinkon,"");ELSE LEAVE meldungausgebenFI END PROC +meldungausgeben;END PACKET stundenplanakthalbjuebernehmen; + diff --git a/app/schulis/2.2.1/src/4.stundenplan im dialog erstellen b/app/schulis/2.2.1/src/4.stundenplan im dialog erstellen new file mode 100644 index 0000000..634545c --- /dev/null +++ b/app/schulis/2.2.1/src/4.stundenplan im dialog erstellen @@ -0,0 +1,382 @@ +PACKET stundenplanimdialogerstellenundaendernDEFINES stupidstart, +stupidbearbeitendesstundenplans,stupidspeicherndieserzeitenfuerkopplung, +stupidspeichernderraeumeundzeitenderlv,stupidkopierenderraumangabe, +stupidnichtaendernweitermitkopplung, +stupidnichtaendernweitermitnaechsterkopplung,stupidstoerendelvlisten, +stupidraumbelegunglisten,stupidlistedrucken:LET maskeeingang= +"ms erf stuplan im dialog 0";LET maskebearb1="ms erf stuplan im dialog 1"; +LET maskebearb2="ms erf stuplan im dialog 2";LET fnrkopplungbs0=2, +fnrakthalbjahr=3,fnrmitzeitwuenschen=4,fnrkopplungbs1=2,fnrwstdmaxbs1=3, +felderbistabbeginn=2,fnrersteseingabefeldbs1=4,felderproeintragbs1=2, +fnrletztesfeldbs1=135,fnrlehrveranstaltbs2=2,fnrwstdbs2=3,fnrparaphebs2=4, +fnrklassengruppenbeginn=5,fnrraumwunsch=9,felderbistabbeginnbs2=10, +fnrersterraumbs2=12,fnrletztesfeldbs2=142,felderproeintragbs2=2;INT VAR +fnrersteseingabefeldbs2;INT VAR ifnr;LET meldnrbittewarten=69, +meldnrdatenwurdengespeichert=302,meldnrdatenwurdennichtgespeichert=303, +meldnrungueltigekopplung=325,meldnrkeinelv=326,meldnrkeinesugruppen=334, +meldnrzuvielesugruppen=356,meldnrdatenaufbereitet=357,meldnrzuvielelv=358, +meldnrungueltigerraum=359,meldnrzuordnungwegensperrungunmoegl=368, +meldnrzuvielezuordnungen=369,meldnrraumschonbelegt=370, +meldnrstundenplanserverfehlt=376,meldnrbasisalt=377,meldnrbasisinkons=378, +meldnrkeinestoerendenlv=371;FILE VAR ausgabeliste;LET liste1= +"störende Lehrveranstaltungen",liste2="Raumbelegungen";TEXT VAR zeigdatei; +LET raumgruppendatei="Datei mit Raumgruppen";FILE VAR datraumgruppen;LET +wunschraumdatei="Datei mit Raumwünschen";FILE VAR datraumwunsch;LET +zwdateiname="Datei mit Zeitwünschen";FILE VAR zwdatei;LET laengelv=8, +laengefachkenn=6,laengekopplung=8,laengeparaphe=4,laengeraum=4,laengewstd=2, +laengesugruppe=6,laengeklagruppe=4,laengenfaktor=2;LET erstestd=1,letztestd= +66;LET kennzlehrergesperrt="L",kennzzeitgesperrt="X",kennzraumgesperrt="R", +kennzschuelergesperrt="S",kennzzeitrastersperrung="x",kennzlehrerwunsch="l", +kennzraumevtlgesperrt="r",kennzverplant="x",kennzkeinfreierwunschraum="x", +kennzraumungeprueft="-";LET kennungkopplung="K",kennungparaphe="P",kennunglv= +"L",kennungraum="R",kennungwunschraum="RW",kennungersatzraum="RE";LET +stundeverplant="1",stundefrei="0",stundefehlerhaft="$";LET textschulj= +"Schuljahr",texthalbj="Schulhalbjahr";LET raumkenndaten="c02 raeume";LET +posraeumeinrgzeile=5;LET raumplatzhalter=" ",lehrerplatzhalter=" ", +blankzeichen=" ",trennstrich="/",vorschlagzeichen="*",textueberschriftanhang= +" für Halbjahr ",textueberschriftbs2="Raumzuordnung in Kopplung ";LET zwbezug +="P";LET minusdrei="-3";INT VAR fstatusstuplan;INT VAR i;INT VAR +maxwochenstunden;TEXT VAR aktschulj:="",akthalbj:="",gewschulj,gewhalbj, +behandeltesschulj:="",behandelteshalbj:="";TEXT VAR kopplung,ankreuzung, +eintrag,lv,paraphe,raum,raumhinweis,raumzeile,raumgruppenzeile,zwdateizeile, +raumbelegliste,raumsetzliste,alleraeume:="",paraphenmitzeitwuenschen:="", +sugruppen;INT VAR anzahlraeume,posraum;INT VAR wstdderlv;TEXT VAR +kopplungszeiten,schuelerschnittzeiten,zeitrasterleiste:="", +halbjderzeitrasterleiste:="",zeitwunschleiste,halbjderzeitwuensche:="", +lvliste,paraphenliste;INT VAR ilv,anzahllv;TEXT VAR suchlv,suchraum, +suchparaphe;TEXT VAR ueberschrift,ueberschriftbs1:="";BOOL VAR +mitzeitwuenschen,meldungzufehlergezeigt;TEXT VAR wertfeld2:="",wertfeld3:="", +wertfeld4:="";PROC stupidstart:standardstartproc(maskeeingang); +wertedeseingangsbildschirmsholen;infeld(fnrkopplungbs0); +standardfelderausgeben;infeld(fnrkopplungbs0);standardnprocEND PROC +stupidstart;PROC stupidbearbeitendesstundenplans: +schulhalbjahrbestimmenundstundenplanholen;IF fstatusstuplan<>0THEN +stundenplanfehlerbehandeln;return(1)ELSE suchekopplung;IF +keinegueltigekopplungTHEN standardmeldung(meldnrungueltigekopplung,"");return +(1)ELSE wertedeseingangsbildschirmsmerken;standardstartproc(maskebearb1); +kopplungzeigen;standardnprocFI FI .schulhalbjahrbestimmenundstundenplanholen: +IF akthalbj=""THEN akthalbj:=schulkenndatum(texthalbj);aktschulj:= +schulkenndatum(textschulj);FI ;gewhalbj:=akthalbj;gewschulj:=aktschulj;IF +standardmaskenfeld(fnrakthalbjahr)=""THEN geplanteshjundsjberechnen(gewhalbj, +gewschulj)FI ;mitzeitwuenschen:=standardmaskenfeld(fnrmitzeitwuenschen)<>""; +IF mitzeitwuenschenTHEN IF paraphenmitzeitwuenschen=""COR gewhalbj<> +halbjderzeitwuenscheTHEN halbjderzeitwuensche:=gewhalbj;standardmeldung( +meldnrbittewarten,"");dateimitzeitwuenschenzusammenstellenFI FI ;IF NOT ( +gewhalbj=behandelteshalbjAND gewschulj=behandeltesschulj)THEN +behandelteshalbj:=gewhalbj;behandeltesschulj:=gewschulj; +stundenplanhalbjahrsetzen(gewhalbj,gewschulj);standardmeldung( +meldnrdatenaufbereitet,"");stundenplanbasisundstundenplanholen(fstatusstuplan +);IF fstatusstuplan=0THEN stundenplanreorganisierenundsichern(fstatusstuplan) +ELIF fstatusstuplan=8THEN standardmeldung(meldnrbasisalt,""); +stundenplanreorganisierenundsichern(fstatusstuplan)ELSE +stundenplanbasisundstundenplanerstellen(fstatusstuplan);IF fstatusstuplan=0 +THEN stundenplanbasissichern(fstatusstuplan);stundenplansichern( +fstatusstuplan)FI FI FI .stundenplanfehlerbehandeln:IF fstatusstuplan=2THEN +standardmeldung(meldnrstundenplanserverfehlt,"")ELIF fstatusstuplan=4THEN +standardmeldung(meldnrkeinesugruppen,"")ELIF fstatusstuplan=5THEN +standardmeldung(meldnrzuvielesugruppen,"")ELIF fstatusstuplan=6THEN +standardmeldung(meldnrkeinelv,"")ELIF fstatusstuplan=7THEN standardmeldung( +meldnrzuvielelv,"")ELIF fstatusstuplan=8THEN standardmeldung(meldnrbasisalt, +"")ELIF fstatusstuplan=9THEN standardmeldung(meldnrbasisinkons,"")FI . +suchekopplung:kopplung:=standardmaskenfeld(fnrkopplungbs0);putwert(fnrlvsj, +gewschulj);putwert(fnrlvhj,gewhalbj);putwert(fnrlvkopplung,kopplung);search( +ixlvsjhjkopp,FALSE ).END PROC stupidbearbeitendesstundenplans;BOOL PROC +keinegueltigekopplung:dbstatus<>0OR wert(fnrlvhj)<>gewhalbjOR wert(fnrlvsj)<> +gewschuljEND PROC keinegueltigekopplung;PROC +dateimitzeitwuenschenzusammenstellen:forget(zwdateiname,quiet);zwdatei:= +sequentialfile(output,zwdateiname);paraphenmitzeitwuenschen:="";inittupel( +dnrzeitwuensche);putwert(fnrzwbezug,zwbezug);statleseschleife(dnrzeitwuensche +,gewschulj,gewhalbj,fnrzwsj,fnrzwhj,PROC zeitwunschlesen)END PROC +dateimitzeitwuenschenzusammenstellen;PROC zeitwunschlesen(BOOL VAR b):IF +dbstatus<>0OR wert(fnrzwsj)<>gewschuljOR wert(fnrzwhj)<>gewhalbjOR wert( +fnrzwbezug)>zwbezugTHEN b:=TRUE ELSE paraphenmitzeitwuenschenCAT text(wert( +fnrzwbezugsobjekt),laengeparaphe);zwdateizeile:=wert(fnrzwbestimmtewuensche); +putline(zwdatei,zwdateizeile)FI END PROC zeitwunschlesen;PROC kopplungzeigen: +ueberschriftzeilezusammensetzen;standardkopfmaskeaktualisieren(ueberschrift); +standardmeldung(meldnrbittewarten,"");datenbestimmenundausgeben;infeld( +fnrersteseingabefeldbs1).ueberschriftzeilezusammensetzen:IF ueberschriftbs1= +""THEN ueberschriftbs1:=text(vergleichsknoten)FI ;ueberschrift:= +ueberschriftbs1;ueberschriftCAT textueberschriftanhang;ueberschriftCAT +gewhalbj;ueberschriftCAT blankzeichen;ueberschriftCAT subtext(gewschulj,1,2); +ueberschriftCAT trennstrich;ueberschriftCAT subtext(gewschulj,3,4). +datenbestimmenundausgeben:kopplung:=wert(fnrlvkopplung); +maxwochenstundenbestimmen;zeitrasterleistefestlegen;kopplungszeitenfestlegen; +lvlisteholen;paraphenlisteundwunschraumlisteholen;schuelerschnittzeitenholen; +zeitwunschleistefestlegen;standardmaskenfeld(kopplung,fnrkopplungbs1); +standardmaskenfeld(text(maxwochenstunden),fnrwstdmaxbs1); +meldungzufehlergezeigt:=FALSE ;FOR iFROM erstestdUPTO letztestdREP +fuelleeintrag;standardmaskenfeld(ankreuzung,i*felderproeintragbs1+ +felderbistabbeginn);standardmaskenfeld(text(eintrag,3),i*felderproeintragbs1+ +felderbistabbeginn+1);PER ;IF meldungzufehlergezeigtTHEN infeld(2)ELSE infeld +(1)FI ;standardfelderausgeben.maxwochenstundenbestimmen:maxwochenstunden:=0; +putwert(fnrlvkopplung,kopplung);putintwert(fnrlvjgst,0);statleseschleife( +ixlvsjhjkopp,gewschulj,gewhalbj,fnrlvsj,fnrlvhj,PROC maxwochenstdberechnen). +fuelleeintrag:IF (kopplungszeitenSUB i)=stundeverplantTHEN ankreuzung:= +kennzverplantELSE ankreuzung:=""FI ;eintrag:="";IF (zeitrasterleisteSUB i)= +kennzzeitrastersperrungTHEN eintragCAT kennzzeitgesperrtELSE +weiterepruefungenzueintragFI .weiterepruefungenzueintrag:IF +istlehrerzurzeitverplantTHEN eintragCAT kennzlehrergesperrtELSE IF +mitzeitwuenschenCAND (zeitwunschleisteSUB i)=stundeverplantTHEN eintragCAT +kennzlehrerwunschFI FI ;IF (schuelerschnittzeitenSUB i)=stundeverplantTHEN +eintragCAT kennzschuelergesperrtELIF (schuelerschnittzeitenSUB i)= +stundefehlerhaftCAND NOT meldungzufehlergezeigtTHEN standardmeldung( +meldnrbasisinkons,"");meldungzufehlergezeigt:=TRUE FI ;IF eintrag= +kennzlehrergesperrt+kennzschuelergesperrtTHEN eintragCAT kennzraumungeprueft +ELSE raumhinweis:="";prueferaumbelegung;eintragCAT raumhinweisFI . +kopplungszeitenfestlegen:kopplungszeiten:=allezeitenvon(kennungkopplung, +kopplung).lvlisteholen:lvliste:=allelvmit(kennungkopplung,kopplung);anzahllv +:=length(lvliste)DIV laengelv.schuelerschnittzeitenholen: +schuelerschnittzeiten:=schuelergruppenschnittallezeiten(kennungkopplung, +kopplung).paraphenlisteundwunschraumlisteholen:paraphenliste:=""; +raumgruppeninraumgruppendateiauslesen;forget(wunschraumdatei,quiet); +datraumwunsch:=sequentialfile(output,wunschraumdatei);INT VAR lvpos:=1,iraum; +FOR ilvFROM 1UPTO anzahllvREP lv:=subtext(lvliste,lvpos,lvpos+laengelv-1); +paraphenlisteCAT datenzurlv(kennungparaphe,lv);raumzeile:="";raum:=datenzurlv +(kennungwunschraum,lv);IF bezeichnungzulaessig(kennungraum,compress(raum)) +THEN raumzeileCAT raumELSE raumzeileCAT raeumederraumgruppeFI ;raum:= +datenzurlv(kennungersatzraum,lv);IF bezeichnungzulaessig(kennungraum,compress +(raum))THEN raumzeileCAT raumELSE raumzeileCAT raeumederraumgruppeFI ;putline +(datraumwunsch,raumzeile);lvpos:=lvpos+laengelvPER . +raumgruppeninraumgruppendateiauslesen:IF NOT exists(raumgruppendatei)THEN +datraumgruppen:=sequentialfile(output,raumgruppendatei);inittupel( +dnrraumgruppen);statleseschleife(dnrraumgruppen,"","",fnrrgraumgrp, +fnrrgraeume,PROC raumgruppeindateischreiben)FI .raeumederraumgruppe: +datraumgruppen:=sequentialfile(modify,raumgruppendatei);toline(datraumgruppen +,1);col(datraumgruppen,1);WHILE NOT eof(datraumgruppen)REP downety( +datraumgruppen,raum);IF col(datraumgruppen)=1CAND NOT eof(datraumgruppen) +THEN readrecord(datraumgruppen,raumgruppenzeile);LEAVE raeumederraumgruppe +WITH subtext(raumgruppenzeile,posraeumeinrgzeile)ELSE col(datraumgruppen,col( +datraumgruppen)+1)FI ;PER ;"".prueferaumbelegung:BOOL VAR vorlaeufiggesetzt; +raumbelegliste:=datenderzeit(i,kennungraum);IF raumbelegliste<>""THEN +raumsetzliste:="";datraumwunsch:=sequentialfile(input,wunschraumdatei);ilv:=0 +;WHILE NOT eof(datraumwunsch)REP getline(datraumwunsch,raumzeile);ilv:=ilv+1; +IF raumzeile<>""THEN anzahlraeume:=length(raumzeile)DIV laengeraum; +vorlaeufiggesetzt:=FALSE ;posraum:=1;FOR iraumFROM 1UPTO anzahlraeumeREP raum +:=subtext(raumzeile,posraum,posraum+laengeraum-1);prueferaum;posraum:=posraum ++laengeraumUNTIL vorlaeufiggesetztPER ;IF NOT vorlaeufiggesetztTHEN +raumhinweis:=kennzraumevtlgesperrtFI ;FI ;PER ;FI .prueferaum:IF suchpos( +raumbelegliste,raum,laengeraum)>0THEN lv:=subtext(lvliste,(ilv-1)*laengelv+1, +ilv*laengelv);planeintraglesen(i,kennungraum,raum,suchlv,suchraum,suchparaphe +);IF suchlv<>lvTHEN IF iraum=anzahlraeumeTHEN raumhinweis:=kennzraumgesperrt; +LEAVE prueferaumbelegungFI ELSE vorlaeufiggesetzt:=TRUE FI ELSE IF suchpos( +raumsetzliste,raum,laengeraum)=0THEN raumsetzliste:=raum;vorlaeufiggesetzt:= +TRUE FI FI .zeitwunschleistefestlegen:IF mitzeitwuenschenTHEN zwdatei:= +sequentialfile(modify,zwdateiname);zeitwunschleiste:=letztestd*stundefrei; +INT VAR fundpos,posparaphe:=1;WHILE posparaphe<length(paraphenliste)REP +suchparaphe:=subtext(paraphenliste,posparaphe,posparaphe+laengeparaphe-1); +fundpos:=suchpos(paraphenmitzeitwuenschen,suchparaphe,laengeparaphe);IF +fundpos>0THEN zeitwuenschezerlegenFI ;posparapheINCR laengeparaphe;PER ;FI . +zeitwuenschezerlegen:INT VAR izeile:=(fundpos+3)DIV laengeparaphe;toline( +zwdatei,izeile);readrecord(zwdatei,zwdateizeile);fundpos:=pos(zwdateizeile, +minusdrei,1);WHILE fundpos>0REP fundposINCR 1;replace(zeitwunschleiste, +fundposDIV 2,stundeverplant);fundpos:=pos(zwdateizeile,minusdrei,fundpos)PER +.END PROC kopplungzeigen;PROC raumgruppeindateischreiben(BOOL VAR b):IF +dbstatus=0THEN putline(datraumgruppen,text(wert(fnrrgraumgrp),laengeraum)+ +wert(fnrrgraeume))ELSE b:=TRUE FI END PROC raumgruppeindateischreiben;PROC +maxwochenstdberechnen(BOOL VAR b):IF dbstatus=0CAND wert(fnrlvkopplung)= +kopplungCAND wert(fnrlvsj)=gewschuljCAND wert(fnrlvhj)=gewhalbjTHEN +maxwochenstunden:=max(intwert(fnrlvwochenstd),maxwochenstunden)ELSE b:=TRUE +FI END PROC maxwochenstdberechnen;PROC zeitrasterleistefestlegen:IF gewhalbj +<>halbjderzeitrasterleisteOR zeitrasterleiste=""THEN zeitrasterleiste:= +letztestd*blankzeichen;inittupel(dnrzeitraster);statleseschleife( +dnrzeitraster,gewschulj,gewhalbj,fnrzrsj,fnrzrhj,PROC +erstellezeitrasterleiste);halbjderzeitrasterleiste:=gewhalbj;FI END PROC +zeitrasterleistefestlegen;PROC erstellezeitrasterleiste(BOOL VAR b):IF wert( +fnrzrsj)<>gewschuljCOR wert(fnrzrhj)<>gewhalbjCOR dbstatus<>0THEN b:=TRUE +ELSE IF wert(fnrzrkennungteil)=kennzzeitrastersperrungTHEN replace( +zeitrasterleiste,intwert(fnrzrtagstunde),kennzzeitrastersperrung)FI FI END +PROC erstellezeitrasterleiste;BOOL PROC istlehrerzurzeitverplant:TEXT VAR +kopplungenderzeit:="";TEXT VAR lehrerderzeit:=datenderzeit(i,kennungparaphe); +IF lehrerderzeit=""COR paraphenliste=lehrerplatzhalterTHEN LEAVE +istlehrerzurzeitverplantWITH FALSE FI ;INT VAR posparaphe:=1;INT VAR +poslehrer,poskopplung;WHILE posparaphe<=length(paraphenliste)REP paraphe:= +subtext(paraphenliste,posparaphe,posparaphe+laengeparaphe-1);IF paraphe<> +lehrerplatzhalterTHEN poslehrer:=suchpos(lehrerderzeit,paraphe,laengeparaphe) +;IF poslehrer>0THEN IF kopplungenderzeit=""THEN kopplungenderzeit:= +datenderzeit(i,kennungkopplung)FI ;poskopplung:=(poslehrer-1)*laengenfaktor+1 +;IF subtext(kopplungenderzeit,poskopplung,poskopplung+laengekopplung-1)<>text +(kopplung,laengekopplung)THEN LEAVE istlehrerzurzeitverplantWITH TRUE FI FI ; +FI ;posparaphe:=posparaphe+laengeparaphePER ;FALSE END PROC +istlehrerzurzeitverplant;PROC stupidstoerendelvlisten:TEXT VAR prueflv, +pruefkopplung,pruefparaphe,lvderzeit,kopplungenderzeit,paraphenderzeit, +vglkopplung,auszeile;INT VAR feldnr:=infeld;IF +sperrungderzeitdurchlehreroderschuelerTHEN erstelledateimitstoerendenlv; +zeigedatei(zeigdatei,"");ELSE standardmeldung(meldnrkeinestoerendenlv,""); +return(1)FI .sperrungderzeitdurchlehreroderschueler:pos(standardmaskenfeld( +feldnr+1),kennzlehrergesperrt)>0OR pos(standardmaskenfeld(feldnr+1), +kennzschuelergesperrt)>0.erstelledateimitstoerendenlv:i:=(feldnr- +felderbistabbeginn)DIV felderproeintragbs1;zeigdatei:=liste1;forget(zeigdatei +,quiet);ausgabeliste:=sequentialfile(output,zeigdatei);auszeile:="Kopplung "; +auszeileCAT kopplung;auszeileCAT " am ";auszeileCAT tagstunde(i,FALSE ); +auszeileCAT ".Stunde verhindert durch:";putline(ausgabeliste,auszeile);line( +ausgabeliste);auszeile:="Lehrveranst. (Kopplung) Lehrer Klassengruppen"; +putline(ausgabeliste,auszeile);lvderzeit:=datenderzeit(i,kennunglv); +kopplungenderzeit:=datenderzeit(i,kennungkopplung);paraphenderzeit:= +datenderzeit(i,kennungparaphe);INT VAR poslv:=1,poskopplung:=1,posparaphe:=1; +vglkopplung:=text(kopplung,laengekopplung);WHILE poslv<=length(lvderzeit)REP +pruefkopplung:=subtext(kopplungenderzeit,poskopplung,poskopplung+ +laengekopplung-1);IF pruefkopplung<>vglkopplungTHEN pruefparaphe:=subtext( +paraphenderzeit,posparaphe,posparaphe+laengeparaphe-1);prueflv:=subtext( +lvderzeit,poslv,poslv+laengelv-1);IF suchpos(paraphenliste,pruefparaphe, +laengeparaphe)>0CAND pruefparaphe<>lehrerplatzhalterTHEN vermerkelvELIF +gemeinsameschuelergruppen(kennungkopplung,kopplung,kennunglv,prueflv)THEN +vermerkelvFI ;FI ;poskopplung:=poskopplung+laengekopplung;poslv:=poslv+ +laengelv;posparaphe:=posparaphe+laengeparaphe;PER .vermerkelv:auszeile:= +subtext(prueflv,1,2);auszeileCAT blankzeichen;auszeileCAT subtext(prueflv,3,4 +);auszeileCAT blankzeichen;auszeileCAT subtext(prueflv,5);auszeileCAT " "; +auszeileCAT pruefkopplung;auszeileCAT " ";auszeileCAT pruefparaphe;auszeile +CAT " ";sugruppen:=beteiligteschuelergruppen(kennunglv,prueflv);INT VAR +possu:=1;WHILE possu<=length(sugruppen)REP auszeileCAT subtext(sugruppen, +possu,possu+laengesugruppe-1);auszeileCAT blankzeichen;possu:=possu+ +laengesugruppePER ;putline(ausgabeliste,auszeile).END PROC +stupidstoerendelvlisten;PROC stupidraumbelegunglisten:TEXT VAR auszeile;INT +VAR feldnr:=infeld;erstelledateimitraumbelegung;zeigedatei(zeigdatei,""). +erstelledateimitraumbelegung:i:=(feldnr-felderbistabbeginnbs2)DIV +felderproeintragbs2;zeigdatei:=liste2;forget(zeigdatei,quiet);ausgabeliste:= +sequentialfile(output,zeigdatei);auszeile:= +"Raumbelegung für Lehrveranstaltung ";auszeileCAT subtext(lv,1,2);auszeile +CAT blankzeichen;auszeileCAT subtext(lv,3,4);auszeileCAT blankzeichen; +auszeileCAT subtext(lv,5);auszeileCAT " am ";auszeileCAT tagstunde(i,FALSE ); +auszeileCAT ".Stunde:";putline(ausgabeliste,auszeile);line(ausgabeliste); +putline(ausgabeliste,"freie Räume:");line(ausgabeliste);IF alleraeume=""THEN +alleraeumeholenFI ;posraum:=1;WHILE posraum<=length(alleraeume)REP raum:= +subtext(alleraeume,posraum,posraum+laengeraum-1);planeintraglesen(i, +kennungraum,raum,suchlv,suchraum,suchparaphe);IF suchraum=""THEN putline( +ausgabeliste,raum)FI ;posraum:=posraum+laengeraumPER ;line(ausgabeliste);line +(ausgabeliste);putline(ausgabeliste,"Belegung der Wunsch- und Ersatzräume:"); +datraumwunsch:=sequentialfile(modify,wunschraumdatei);toline(datraumwunsch, +ilv);readrecord(datraumwunsch,raumzeile);posraum:=1;WHILE posraum<=length( +raumzeile)REP raum:=subtext(raumzeile,posraum,posraum+laengeraum-1); +planeintraglesen(i,kennungraum,raum,suchlv,suchraum,suchparaphe);IF suchraum +<>""THEN auszeile:=raum;auszeileCAT " : ";auszeileCAT subtext(suchlv,1,2); +auszeileCAT blankzeichen;auszeileCAT subtext(suchlv,3,4);auszeileCAT +blankzeichen;auszeileCAT subtext(suchlv,5);putline(ausgabeliste,auszeile);FI +;posraum:=posraum+laengeraumPER .alleraeumeholen:inittupel(dnrschluessel); +statleseschleife(dnrschluessel,raumkenndaten,"",fnrschlsachgebiet, +fnrschlschluessel,PROC raeumeholen).END PROC stupidraumbelegunglisten;PROC +raeumeholen(BOOL VAR b):IF wert(fnrschlsachgebiet)>raumkenndatenCOR dbstatus +<>0THEN b:=TRUE ELSE alleraeumeCAT text(wert(fnrschlschluessel),laengeraum) +FI END PROC raeumeholen;PROC stupidspeicherndieserzeitenfuerkopplung:BOOL +VAR plausifehler:=FALSE ;INT VAR anzahlankreuzungen:=0;ifnr:= +fnrersteseingabefeldbs1;REP IF standardmaskenfeld(ifnr)<>""THEN IF zeitbelegt +OR lehrerbelegtOR schuelerbelegtTHEN plausifehler:=TRUE ;standardmeldung( +meldnrzuordnungwegensperrungunmoegl,"");infeld(ifnr)FI ;anzahlankreuzungen +INCR 1FI ;ifnrINCR felderproeintragbs1UNTIL (ifnr>fnrletztesfeldbs1)OR +plausifehlerPER ;IF plausifehlerTHEN return(1)ELIF anzahlankreuzungen> +maxwochenstundenTHEN standardmeldung(meldnrzuvielezuordnungen,"");return(1) +ELSE speichernderkopplung;standardmeldung(meldnrdatenwurdengespeichert,""); +stundenplansichern(fstatusstuplan);IF anzahlankreuzungen=0THEN +stupidnichtaendernweitermitnaechsterkopplungELSE standardstartproc( +maskebearb2);erstelvzurkopplungnocheinmallesen;ilv:=1;lvzeigen;standardnproc +FI FI .zeitbelegt:pos(standardmaskenfeld(ifnr+1),kennzzeitgesperrt)>0. +lehrerbelegt:pos(standardmaskenfeld(ifnr+1),kennzlehrergesperrt)>0. +schuelerbelegt:pos(standardmaskenfeld(ifnr+1),kennzschuelergesperrt)>0. +erstelvzurkopplungnocheinmallesen:putwert(fnrlvsj,gewschulj);putwert(fnrlvhj, +gewhalbj);putwert(fnrlvkopplung,kopplung);search(ixlvsjhjkopp,FALSE ). +speichernderkopplung:INT VAR poslv;ifnr:=fnrersteseingabefeldbs1;FOR iFROM +erstestdUPTO letztestdREP ankreuzung:=standardmaskenfeld(ifnr);IF ( +kopplungszeitenSUB i)=stundeverplantTHEN IF ankreuzung=""THEN +kopplungentfernenELSE kopplungueberschreibenFI ELSE IF ankreuzung<>""THEN +kopplungschreibenFI ;FI ;ifnr:=ifnr+felderproeintragbs1PER .kopplungschreiben +:BOOL VAR ok;poslv:=1;WHILE poslv<=length(lvliste)REP lv:=subtext(lvliste, +poslv,poslv+laengelv-1);planeintragvornehmen(i,lv,raumplatzhalter,ok);poslv:= +poslv+laengelvPER ;replace(kopplungszeiten,i,stundeverplant). +kopplungentfernen:poslv:=1;WHILE poslv<=length(lvliste)REP lv:=subtext( +lvliste,poslv,poslv+laengelv-1);planeintragloeschen(i,lv,ok);poslv:=poslv+ +laengelvPER ;replace(kopplungszeiten,i,stundefrei).kopplungueberschreiben: +poslv:=1;WHILE poslv<=length(lvliste)REP lv:=subtext(lvliste,poslv,poslv+ +laengelv-1);planeintraglesen(i,kennunglv,lv,suchlv,suchraum,suchparaphe); +suchraum:=compress(suchraum);IF suchraum=""THEN suchraum:=raumplatzhalterFI ; +planeintragvornehmen(i,lv,suchraum,ok);poslv:=poslv+laengelvPER .END PROC +stupidspeicherndieserzeitenfuerkopplung;PROC lvzeigen: +ueberschriftzeilezusammensetzen;standardkopfmaskeaktualisieren(ueberschrift); +datenbestimmenundausgeben.ueberschriftzeilezusammensetzen:ueberschrift:= +textueberschriftbs2;ueberschriftCAT kopplung;ueberschriftCAT +textueberschriftanhang;ueberschriftCAT gewhalbj;ueberschriftCAT blankzeichen; +ueberschriftCAT subtext(gewschulj,1,2);ueberschriftCAT trennstrich; +ueberschriftCAT subtext(gewschulj,3,4).datenbestimmenundausgeben: +werteauslvsatzholen;ifnr:=felderbistabbeginnbs2;fnrersteseingabefeldbs2:=0; +FOR iFROM erstestdUPTO letztestdREP IF (kopplungszeitenSUB i)=stundeverplant +THEN planeintraglesen(i,kennunglv,text(lv,laengelv),suchlv,suchraum, +suchparaphe);IF compress(suchraum)<>""THEN standardmaskenfeld(blankzeichen, +ifnr+1);standardmaskenfeld(compress(suchraum),ifnr+2)ELSE standardmaskenfeld( +vorschlagzeichen,ifnr+1);standardmaskenfeld(compress(wunschraumvorschlag), +ifnr+2)FI ;IF fnrersteseingabefeldbs2=0THEN fnrersteseingabefeldbs2:=ifnr+2 +FI ELSE standardmaskenfeld(blankzeichen,ifnr+1);standardmaskenfeld( +raumplatzhalter,ifnr+2);feldschutz(ifnr+2)FI ;ifnr:=ifnr+felderproeintragbs2 +PER ;infeld(1);standardfelderausgeben;infeld(fnrersteseingabefeldbs2). +werteauslvsatzholen:lv:=jgstzweistellig(intwert(fnrlvjgst))+text(wert( +fnrlvfachkennung),laengefachkenn);wstdderlv:=intwert(fnrlvwochenstd);paraphe +:=wert(fnrlvparaphe);standardmaskenfeld(text(lv,laengelv), +fnrlehrveranstaltbs2);standardmaskenfeld(text(wstdderlv,laengewstd), +fnrwstdbs2);standardmaskenfeld(text(paraphe,laengeparaphe),fnrparaphebs2); +standardmaskenfeld(text(wert(fnrlvklgrp1),laengeklagruppe), +fnrklassengruppenbeginn);standardmaskenfeld(text(wert(fnrlvklgrp2), +laengeklagruppe),fnrklassengruppenbeginn+1);standardmaskenfeld(text(wert( +fnrlvklgrp3),laengeklagruppe),fnrklassengruppenbeginn+2);standardmaskenfeld( +text(wert(fnrlvklgrp4),laengeklagruppe),fnrklassengruppenbeginn+3); +standardmaskenfeld(text(wert(fnrlvraumgrp1),laengeraum),fnrraumwunsch); +standardmaskenfeld(text(wert(fnrlvraumgrp2),laengeraum),fnrraumwunsch+1). +wunschraumvorschlag:datraumwunsch:=sequentialfile(modify,wunschraumdatei); +toline(datraumwunsch,ilv);readrecord(datraumwunsch,raumzeile);raumbelegliste +:=datenderzeit(i,kennungraum);posraum:=1;WHILE posraum<=length(raumzeile)REP +raum:=subtext(raumzeile,posraum,posraum+laengeraum-1);IF suchpos( +raumbelegliste,raum,laengeraum)=0THEN LEAVE wunschraumvorschlagWITH raumFI ; +posraum:=posraum+laengeraumPER ;kennzkeinfreierwunschraum.END PROC lvzeigen; +PROC stupidspeichernderraeumeundzeitenderlv(BOOL CONST speichern):BOOL VAR +plausifehler,ok;IF speichernTHEN plausifehler:=FALSE ; +plausipruefungfuerraeumezulv;IF plausifehlerTHEN return(1)ELSE +raeumezulvspeichern;standardmeldung(meldnrdatenwurdengespeichert,""); +stundenplansichern(fstatusstuplan);naechstelvzurbearbeitungFI ELSE +standardmeldung(meldnrdatenwurdennichtgespeichert,""); +naechstelvzurbearbeitungFI .plausipruefungfuerraeumezulv:INT VAR +anzahlankreuzungen:=0;ifnr:=fnrersterraumbs2;FOR iFROM erstestdUPTO letztestd +REP IF (kopplungszeitenSUB i)=stundeverplantTHEN raum:=compress( +standardmaskenfeld(ifnr));IF raum<>""THEN anzahlankreuzungen:= +anzahlankreuzungen+1;IF raum<>kennzkeinfreierwunschraumTHEN IF NOT +bezeichnungzulaessig(kennungraum,raum)THEN standardmeldung( +meldnrungueltigerraum,"");infeld(ifnr);plausifehler:=TRUE ELIF +raumdurchanderelvbelegtTHEN standardmeldung(meldnrraumschonbelegt,"");infeld( +ifnr);plausifehler:=TRUE FI FI FI FI ;ifnr:=ifnr+felderproeintragbs2UNTIL +plausifehlerPER ;IF NOT plausifehlerTHEN IF anzahlankreuzungen>wstdderlvTHEN +standardmeldung(meldnrzuvielezuordnungen,"");infeld(fnrersteseingabefeldbs2); +plausifehler:=TRUE FI FI .raumdurchanderelvbelegt:planeintraglesen(i, +kennungraum,raum,suchlv,suchraum,suchparaphe);compress(suchraum)<>""AND +suchlv<>lv.raeumezulvspeichern:ifnr:=fnrersterraumbs2;FOR iFROM erstestdUPTO +letztestdREP IF (kopplungszeitenSUB i)=stundeverplantTHEN raum:=compress( +standardmaskenfeld(ifnr));IF raum=""THEN planeintragloeschen(i,lv,ok);ELSE +IF raum=kennzkeinfreierwunschraumTHEN raum:=raumplatzhalterFI ; +planeintragvornehmen(i,lv,raum,ok);FI FI ;ifnr:=ifnr+felderproeintragbs2PER . +naechstelvzurbearbeitung:succ(ixlvsjhjkopp);IF dbstatus=0THEN IF +weiterelvzukopplungvorhandenTHEN ilv:=ilv+1;lvzeigen;return(1)ELSE +standardstartproc(maskebearb1);kopplungzeigen;return(2)FI ELSE enter(3)FI . +weiterelvzukopplungvorhanden:wert(fnrlvkopplung)=kopplungAND wert(fnrlvhj)= +gewhalbjAND wert(fnrlvsj)=gewschulj.END PROC +stupidspeichernderraeumeundzeitenderlv;PROC stupidkopierenderraumangabe:INT +VAR feldnr:=infeld;ifnr:=feldnr;WHILE ifnr<fnrletztesfeldbs2REP ifnrINCR +felderproeintragbs2;IF standardmaskenfeld(ifnr)<>raumplatzhalterTHEN +standardmaskenfeld(standardmaskenfeld(feldnr),ifnr)FI PER ;return(1)END PROC +stupidkopierenderraumangabe;PROC stupidnichtaendernweitermitkopplung:putwert( +fnrlvkopplung,kopplung+blankzeichen);search(ixlvsjhjkopp,FALSE );IF +keinegueltigekopplungTHEN enter(3)ELSE standardstartproc(maskebearb1); +kopplungzeigen;return(2)FI END PROC stupidnichtaendernweitermitkopplung;PROC +stupidnichtaendernweitermitnaechsterkopplung:putwert(fnrlvkopplung,kopplung+ +blankzeichen);search(ixlvsjhjkopp,FALSE );IF keinegueltigekopplungTHEN enter( +2)ELSE kopplungzeigen;return(1)FI END PROC +stupidnichtaendernweitermitnaechsterkopplung;PROC stupidlistedrucken(BOOL +CONST drucken):IF druckenTHEN print(zeigdatei)FI ;forget(zeigdatei,quiet); +return(2)END PROC stupidlistedrucken;INT PROC suchpos(TEXT CONST quelle, +suchtext,INT CONST laenge):INT VAR findpos:=pos(quelle,suchtext);WHILE +findpos>0REP IF findposMOD laenge=1THEN LEAVE suchposWITH findposELSE findpos +:=pos(quelle,suchtext,findpos+1);FI PER ;findposEND PROC suchpos;TEXT PROC +jgstzweistellig(INT CONST intjgst):IF intjgst=0THEN "00"ELIF intjgst>4AND +intjgst<10THEN "0"+text(intjgst)ELSE text(intjgst)FI END PROC jgstzweistellig +;PROC wertedeseingangsbildschirmsmerken:wertfeld2:=standardmaskenfeld( +fnrkopplungbs0);wertfeld3:=standardmaskenfeld(fnrakthalbjahr);wertfeld4:= +standardmaskenfeld(fnrmitzeitwuenschen)END PROC +wertedeseingangsbildschirmsmerken;PROC wertedeseingangsbildschirmsholen: +standardmaskenfeld(wertfeld2,fnrkopplungbs0);standardmaskenfeld(wertfeld3, +fnrakthalbjahr);standardmaskenfeld(wertfeld4,fnrmitzeitwuenschen)END PROC +wertedeseingangsbildschirmsholen;END PACKET +stundenplanimdialogerstellenundaendern + diff --git a/app/schulis/2.2.1/src/4.stundenplan nach lv erfassen b/app/schulis/2.2.1/src/4.stundenplan nach lv erfassen new file mode 100644 index 0000000..376fbac --- /dev/null +++ b/app/schulis/2.2.1/src/4.stundenplan nach lv erfassen @@ -0,0 +1,133 @@ +PACKET stundenplannachlverfassenDEFINES stundenplannachlvspeichern, +stundenplannachlvreorganisiertverlassen,stundenplannachlvkopieren, +stundenplannachlvzeigen:LET stdplmaske="ms stdplan nach lv bearb", +feldeingjgst=2,feldeingfach=3,feldeingkenn=4,feldeingakthj=5,laengelv=8, +lvmitleeremraum="x",leererraum=" ",leererlehrer=" ",schuljahr= +"Schuljahr",halbjahr="Schulhalbjahr",kennungwstd="W",kennungraum="R", +kennungparaphe="P",kennunglv="L",kennungzulzeit="ZZ",ausgabeparam="#", +maxstunden=66,meldungplausi=57,meldungfeldfuellen=52,meldungfalschejgst=305, +meldungzuvielewstd=369,meldungjgstergaenzen=304,meldungfalschesfach=310, +meldungkeinestartlv=68,meldungspeichern=50,meldungwarten=69, +meldungdatenaufbereitet=357,meldungkeinesugruppen=334,meldungzuvielesugruppen +=356,meldunglehrerbesetzt=361,meldungraumbesetzt=370,meldungsugrupbesetzt=362 +,meldungzeitgesperrt=363,meldungkeinelv=326,meldungaenderungsfehler=364, +meldunguvfehler=403,meldungserverfehler=376,meldungbasisinkon=378, +meldunganderewahl=318,meldungfalscherraum=359,meldungzuvielelv=358;ROW +maxstundenTEXT VAR lvausstdpl;ROW maxstundenTEXT VAR lvvombs;TEXT VAR schhj, +schj,aktfachkenn,aktlv,eintraglv,lveintrag,raumeintrag,pareintrag,hjsjanhang +:="";INT VAR i,fstat,hjkennalt:=-1,aktjgst,uvokfeld:=2,wstdderlv,hjkennneu:=0 +;BOOL VAR spok:=TRUE ,uvok:=TRUE ,aenderungsfehler:=FALSE ;PROC +stundenplannachlvkopieren:INT VAR aktfeld:=infeld;TEXT VAR feldinhalt:="";IF +aktfeld=67THEN fehlermeldunganwunzulELSE kopierenFI ;return(1).kopieren: +feldinhalt:=standardmaskenfeld(aktfeld);standardmaskenfeld(feldinhalt,aktfeld ++1);standardfelderausgeben;infeld(aktfeld).fehlermeldunganwunzul: +standardmeldung(meldunganderewahl,"").END PROC stundenplannachlvkopieren; +PROC stundenplannachlvreorganisiertverlassen: +stundenplanreorganisierenundsichern(fstat);IF fstat<>0THEN return(1); +meldungausgeben(fstat)ELSE enter(2)FI END PROC +stundenplannachlvreorganisiertverlassen;PROC stundenplannachlvzeigen:INT VAR +jgst:=0;TEXT VAR jg:="",fach:="",kennung:="";standardmeldung(meldungwarten, +" ");jg:=standardmaskenfeld(feldeingjgst);fach:=standardmaskenfeld( +feldeingfach);kennung:=standardmaskenfeld(feldeingkenn);pruefeeingabe; +maskeundinitialisierung;holstartlv;stundenplannachlvausgeben.pruefeeingabe: +IF jg<>""THEN jgst:=int(jg);IF lastconversionokTHEN pruefjgstELSE +fehlermeldungfalschejgstFI ;FI ;prueffach;pruefkennung.pruefjgst:IF jgst<>0 +THEN IF jgst<5COR jgst>13THEN fehlermeldungfalschejgstFI FI . +fehlermeldungfalschejgst:standardmeldung(meldungfalschejgst,"");infeld( +feldeingjgst);return(1);LEAVE stundenplannachlvzeigen.prueffach:IF fach<>"" +THEN IF jg=""THEN standardmeldung(meldungjgstergaenzen,"");infeld( +feldeingjgst);return(1);LEAVE stundenplannachlvzeigenELSE fach:=compress(fach +);inittupel(dnrfaecher);putwert(fnrffach,fach);search(dnrfaecher,TRUE );IF +dbstatus<>okTHEN fehlermeldungfalschesfachFI FI FI .fehlermeldungfalschesfach +:standardmeldung(meldungfalschesfach,"");infeld(feldeingfach);return(1); +LEAVE stundenplannachlvzeigen.pruefkennung:IF kennung<>""THEN IF jg=""THEN +standardmeldung(meldungfeldfuellen,"");infeld(feldeingjgst);return(1);LEAVE +stundenplannachlvzeigenFI ;IF fach=""THEN standardmeldung(meldungfeldfuellen, +"");infeld(feldeingfach);return(1);LEAVE stundenplannachlvzeigenFI ;FI . +maskeundinitialisierung:aktlv:="";aktjgst:=0;aktfachkenn:="";IF akthj<>"" +THEN hjkennneu:=0ELSE hjkennneu:=1FI ;IF hjkennneu<>hjkennaltTHEN hjkennalt:= +hjkennneu;schj:=schulkenndatum(schuljahr);schhj:=schulkenndatum(halbjahr);IF +hjkennneu=1THEN geplanteshjundsjberechnen(schhj,schj)FI ; +stundenplanhalbjahrsetzen(schhj,schj);hjsjanhang:=schhj+". "+text(schj,2)+"/" ++subtext(schj,3);holestdplanFI .akthj:standardmaskenfeld(feldeingakthj). +holestdplan:standardmeldung(meldungdatenaufbereitet,""); +stundenplanbasisundstundenplanholen(fstat);IF fstat<>0CAND fstat<>8THEN +stundenplanbasisundstundenplanerstellen(fstat);IF fstat<>0THEN return(1); +meldungausgeben(fstat);LEAVE stundenplannachlvzeigenELSE +stundenplanbasissichern(fstat);stundenplansichern(fstat);IF fstat<>0THEN +return(1);meldungausgeben(fstat);LEAVE stundenplannachlvzeigenFI FI ELIF +fstat=8THEN meldungausgeben(fstat)FI .holstartlv:fach:=text(fach+" ",2); +inittupel(dnrlehrveranstaltungen);putwert(fnrlvsj,schj);putwert(fnrlvhj,schhj +);putintwert(fnrlvjgst,jgst);putwert(fnrlvfachkennung,fach+kennung);search( +dnrlehrveranstaltungen,FALSE );IF dbstatus>2THEN fehlermeldungkeinestartlv +ELSE aktjgst:=intwert(fnrlvjgst);aktfachkenn:=wert(fnrlvfachkennung);aktlv:= +text(jgstaufbereiten(aktjgst)+aktfachkenn,laengelv)FI . +fehlermeldungkeinestartlv:standardmeldung(meldungkeinestartlv,"");infeld( +feldeingjgst);return(1);LEAVE stundenplannachlvzeigen.END PROC +stundenplannachlvzeigen;PROC stundenplannachlvausgeben:standardstartproc( +stdplmaske);fuellemaske;IF NOT uvokTHEN infeld(uvokfeld);standardmeldung( +meldunguvfehler," ")FI ;standardnproc.END PROC stundenplannachlvausgeben; +PROC fuellemaske:standardkopfmaskeaktualisieren("Stundenplan "+hjsjanhang+ +" für Lehrveranstaltung "+aktlv+"");uvok:=TRUE ;raumeintrag:="";lveintrag:= +"";pareintrag:="";wstdderlv:=int(datenzurlv(kennungwstd,aktlv));FOR iFROM 1 +UPTO maxstundenREP planeintraglesen(i,kennunglv,aktlv,lveintrag,raumeintrag, +pareintrag);IF raumeintrag<>""THEN IF raumeintrag=leererraumTHEN raumeintrag +:=lvmitleeremraumELSE raumeintrag:=compress(raumeintrag)FI ;lvausstdpl(i):= +raumeintrag;standardmaskenfeld(raumeintrag,i+1);IF pareintrag=leererlehrer +THEN IF uvokTHEN uvok:=FALSE ;uvokfeld:=i+1;eintraglv:=lveintragFI FI ELSE +lvausstdpl(i):="";standardmaskenfeld("",i+1);FI PER ;infeld(1); +standardfelderausgeben;infeld(2).END PROC fuellemaske;PROC meldungausgeben( +INT VAR fstat):IF fstat=2THEN standardmeldung(meldungserverfehler,"");ELIF +fstat=4THEN standardmeldung(meldungkeinesugruppen,"");ELIF fstat=5THEN +standardmeldung(meldungzuvielesugruppen,"")ELIF fstat=6THEN standardmeldung( +meldungkeinelv,"")ELIF fstat=7THEN standardmeldung(meldungzuvielelv,"")ELIF +fstat=9THEN standardmeldung(meldungbasisinkon,"");ELSE LEAVE meldungausgeben +FI END PROC meldungausgeben;PROC stundenplannachlvspeichern(BOOL CONST +speichern):TEXT VAR raumeintrag,t:="",lv:="";INT VAR bisherigejgst:=0,anzwstd +;IF speichernTHEN aenderungenvornehmen;FI ;naechstersatz;return(1). +naechstersatz:succ(dnrlehrveranstaltungen);IF dbstatus>2COR wert(fnrlvsj)<> +schjCOR wert(fnrlvhj)<>schhjTHEN stundenplannachlvreorganisiertverlassen; +LEAVE stundenplannachlvspeichernELIF intwert(fnrlvjgst)<>bisherigejgstTHEN +stundenplanreorganisierenundsichern(fstat);bisherigejgst:=intwert(fnrlvjgst) +FI ;aktjgst:=intwert(fnrlvjgst);aktfachkenn:=wert(fnrlvfachkennung);aktlv:= +text(jgstaufbereiten(aktjgst)+aktfachkenn,laengelv);fuellemaske;IF NOT uvok +THEN infeld(uvokfeld);standardmeldung(meldunguvfehler,eintraglv+ausgabeparam) +FI .aenderungenvornehmen:standardmeldung(meldungplausi," ");plausipruefung; +standardmeldung(meldungspeichern," ");aenderungsfehler:=FALSE ;speicherung; +IF aenderungsfehlerTHEN standardmeldung(meldungaenderungsfehler,"");return(1) +;LEAVE stundenplannachlvspeichernELSE stundenplansichern(fstat)FI ;IF fstat<> +0THEN meldungausgeben(fstat);return(1);LEAVE stundenplannachlvspeichernFI . +plausipruefung:anzwstd:=0;FOR iFROM 1UPTO maxstundenREP infeld(i+1); +raumeintrag:=standardmaskenfeld(i+1);IF raumeintrag<>""THEN pruefezeit;IF +raumeintrag<>lvmitleeremraumTHEN prueferaum;lvvombs(i):=raumeintragELSE +lvvombs(i):=leererraumFI ;schnittraeume;schnittlehrer;schnittsugruppen; +wstdzahlok;anzwstdINCR 1;ELSE lvvombs(i):=""FI ;PER .pruefezeit:IF NOT +bezeichnungzulaessig(kennungzulzeit,text(i))THEN standardmeldung( +meldungzeitgesperrt,tagstunde(i,TRUE )+" Std."+ausgabeparam);return(1);LEAVE +stundenplannachlvspeichernFI .prueferaum:IF NOT bezeichnungzulaessig( +kennungraum,raumeintrag)THEN standardmeldung(meldungfalscherraum,"");return(1 +);LEAVE stundenplannachlvspeichernFI .schnittraeume:IF raumunterrichtTHEN +standardmeldung(meldungraumbesetzt,"");return(1);LEAVE +stundenplannachlvspeichernFI .raumunterricht:lv:=geplantelvfuer(i,kennungraum +,raumeintrag);lv<>aktlvCAND lv<>"".schnittlehrer:t:=datenzurlv(kennungparaphe +,aktlv);IF t<>leererlehrerTHEN IF lehrerunterrichtTHEN standardmeldung( +meldunglehrerbesetzt,t+ausgabeparam);return(1);LEAVE +stundenplannachlvspeichernFI FI .lehrerunterricht:lv:=geplantelvfuer(i, +kennungparaphe,t);lv<>aktlvCAND lv<>"".schnittsugruppen:IF +sugruppenichtunterrichtsfreiTHEN standardmeldung(meldungsugrupbesetzt,lv+ +ausgabeparam);return(1);LEAVE stundenplannachlvspeichernFI . +sugruppenichtunterrichtsfrei:schuelergruppenschnittbeizeit(i,kennunglv,aktlv, +"",lv,t).wstdzahlok:IF anzwstd=wstdderlvTHEN standardmeldung( +meldungzuvielewstd,"");return(1);LEAVE stundenplannachlvspeichernFI . +speicherung:FOR iFROM 1UPTO maxstundenREP IF lvausstdpl(i)<>""COR lvvombs(i) +<>""THEN infeld(i+1);IF loeschenTHEN planeintragentfernenELSE +planeintragschreibenFI ;FI ;PER .loeschen:lvausstdpl(i)<>""CAND lvvombs(i)="" +.planeintragentfernen:planeintragloeschen(i,aktlv,spok);IF NOT spokTHEN +aenderungsfehler:=TRUE FI .planeintragschreiben:IF lvausstdpl(i)<>""THEN +planeintragloeschen(i,aktlv,spok);IF spokTHEN planeintragvornehmen(i,aktlv, +lvvombs(i),spok);FI ;ELSE planeintragvornehmen(i,aktlv,lvvombs(i),spok);FI ; +IF NOT spokTHEN aenderungsfehler:=TRUE FI .END PROC +stundenplannachlvspeichern;TEXT PROC jgstaufbereiten(INT CONST jgst):TEXT +VAR lv:="0";lvCAT text(jgst);subtext(lv,length(lv)-1)END PROC jgstaufbereiten +;END PACKET stundenplannachlverfassen; + diff --git a/app/schulis/2.2.1/src/4.stundenplan nach zeiten erfassen b/app/schulis/2.2.1/src/4.stundenplan nach zeiten erfassen new file mode 100644 index 0000000..51a812d --- /dev/null +++ b/app/schulis/2.2.1/src/4.stundenplan nach zeiten erfassen @@ -0,0 +1,157 @@ +PACKET stundenplannachzeitenerfassenDEFINES stundenplannachzeitenspeichern, +stundenplannachzeitenzurueckzummenue,stdnraustagstd, +stundenplannachzeitenzeigen:LET stdplmaske="ms stdplan nach zeit bearb", +feldeingtag=2,feldeingstd=3,feldeingakt=4,laengelv=8,laengeraum=4,trenner="�" +,schuljahr="Schuljahr",halbjahr="Schulhalbjahr",kennungraum="R", +kennungparaphe="P",kennunglv="L",kennungzulzeit="ZZ",leerelv=" ", +leererraum=" ",leererlehrer=" ",ausgabeparam="#",maxeintraege=60, +erstestunde=1,letztestunde=66,stdprotag=12,meldungzeitgesperrt=363, +meldungnichtspeichern=63,meldungraumangloeschen=396,meldungraumbesetzt=370, +meldungplausi=57,meldungnur60lv=394,meldungspeichern=50,meldungwarten=69, +meldungdatenaufbereitet=357,meldungfalschertag=385,meldungfalschestd=54, +meldungfalscherraum=359,meldungkeinesugruppen=334,meldungzuvielesugruppen=356 +,meldungnichtlv=360,meldunglehrerbesetzt=361,meldungsugrupbesetzt=362, +meldungkeinelv=326,meldungaenderungsfehler=364,meldunguvfehler=403,# +meldungstdplanveraltet=377,#meldungserverfehler=376,meldungbasisinkon=378, +meldungzuvielelv=358;ROW maxeintraegeTEXT VAR eintragausstdpl;TEXT VAR +maskeneintragtag:="",maskeneintragstd:="",gewhj,gewsj,allelv,alleraeume, +alleparaphen,uvoklv,lveintrag,raumeintrag,hjsjanhang:="",altereintrag:=""; +TEXT VAR alletage:="��01�02�03�04�05�06�1�2�3�4�5�6�MO�DI�MI�DO�FR�SA�"+ +"�mo�di�mi�do�fr�sa�Mo�Di�Mi�Do�Fr�Sa�"+ +"� 1� 2� 3� 4� 5� 6�1 �2 �3 �4 �5 �6 �",allestden:= +"��01�02�03�04�05�06�07�08�09�10�11�12�13� 1� 2� 3�"+ +"� 4� 5� 6� 7� 8� 9�1 �2 �3 �4 �5 �6 �7 �8 �9 �"+"1�2�3�4�5�6�7�8�9�";INT +VAR i,fstat,abstd:=0,uvokfeld,hjkennalt:=-1,hjkennneu:=0,letztebearbstd:=66; +BOOL VAR spok:=TRUE ,uvok:=TRUE ,anzlvok:=TRUE ,stdplzeilegeloescht:=FALSE , +aenderungsfehler:=FALSE ;INT PROC stdnraustagstd(TEXT CONST tag,std):INT VAR +itag:=int(tag),istd;IF lastconversionokTHEN IF itag=0COR itag=1THEN itag:=1 +FI ELSE IF tag="MO"COR tag="mo"COR tag="Mo"COR tag=""THEN itag:=1ELIF tag= +"DI"COR tag="di"COR tag="Di"THEN itag:=2ELIF tag="MI"COR tag="mi"COR tag="Mi" +THEN itag:=3ELIF tag="DO"COR tag="do"COR tag="Do"THEN itag:=4ELIF tag="FR" +COR tag="fr"COR tag="Fr"THEN itag:=5ELSE itag:=6FI FI ;IF std=""THEN istd:=1 +ELSE istd:=int(std)FI ;(itag-1)*stdprotag+istdEND PROC stdnraustagstd;PROC +stundenplannachzeitenreorganisiertverlassen: +stundenplanreorganisierenundsichern(fstat);IF fstat<>0THEN return(1); +meldungausgeben(fstat)ELSE enter(2)FI END PROC +stundenplannachzeitenreorganisiertverlassen;PROC stundenplannachzeitenzeigen: +standardmeldung(meldungwarten," ");maskeneintragtag:=standardmaskenfeld( +feldeingtag);maskeneintragstd:=standardmaskenfeld(feldeingstd);abstd:= +stdnraustagstd(maskeneintragtag,maskeneintragstd);prueftag;pruefstd;IF akthj +<>""THEN hjkennneu:=0ELSE hjkennneu:=1FI ;IF hjkennneu<>hjkennaltTHEN +hjkennalt:=hjkennneu;gewsj:=schulkenndatum(schuljahr);gewhj:=schulkenndatum( +halbjahr);IF hjkennneu=1THEN geplanteshjundsjberechnen(gewhj,gewsj)FI ; +stundenplanhalbjahrsetzen(gewhj,gewsj);ermittleletztestunde;hjsjanhang:=" "+ +gewhj+". "+text(gewsj,2)+"/"+subtext(gewsj,3)+", Raum ";holestdplanFI ; +pruefzeitzulaessig;stundenplannachzeitenausgeben.akthj:standardmaskenfeld( +feldeingakt).holestdplan:standardmeldung(meldungdatenaufbereitet,""); +stundenplanbasisundstundenplanholen(fstat);IF fstat<>0CAND fstat<>8THEN +stundenplanbasisundstundenplanerstellen(fstat);IF fstat<>0THEN return(1); +meldungausgeben(fstat);LEAVE stundenplannachzeitenzeigenELSE +stundenplanbasissichern(fstat);stundenplansichern(fstat);IF fstat<>0THEN +return(1);meldungausgeben(fstat);LEAVE stundenplannachzeitenzeigenFI FI ELIF +fstat=8THEN meldungausgeben(fstat)FI .prueftag:IF pos(alletage,trenner+ +maskeneintragtag+trenner)=0THEN return(1);infeld(feldeingtag);standardmeldung +(meldungfalschertag,"");LEAVE stundenplannachzeitenzeigenFI .pruefstd:IF pos( +allestden,trenner+maskeneintragstd+trenner)=0THEN return(1);infeld( +feldeingstd);standardmeldung(meldungfalschestd,"");LEAVE +stundenplannachzeitenzeigenELIF abstdDIV stdprotag=6THEN IF abstd-60>6THEN +return(1);infeld(feldeingstd);standardmeldung(meldungfalschestd,"");LEAVE +stundenplannachzeitenzeigenFI ;FI .pruefzeitzulaessig:IF NOT +bezeichnungzulaessig(kennungzulzeit,text(abstd))THEN return(1);infeld( +feldeingtag);standardmeldung(meldungzeitgesperrt,tagstunde(abstd,FALSE )+"."+ +ausgabeparam);LEAVE stundenplannachzeitenzeigenFI .ermittleletztestunde:FOR i +FROM letztestundeDOWNTO erstestundeREP IF bezeichnungzulaessig(kennungzulzeit +,text(i))THEN letztebearbstd:=i;LEAVE ermittleletztestundeFI PER .END PROC +stundenplannachzeitenzeigen;PROC stundenplannachzeitenausgeben: +standardstartproc(stdplmaske);fuellemaske;IF NOT anzlvokTHEN standardmeldung( +meldungnur60lv,tagstunde(abstd,TRUE )+ausgabeparam)ELIF NOT uvokTHEN infeld( +uvokfeld);standardmeldung(meldunguvfehler," ");FI ;standardnproc.END PROC +stundenplannachzeitenausgeben;PROC fuellemaske:TEXT VAR lvimstdplan, +raumimstdplan,parimstdplan;INT VAR poslv,posraum,index;stdplzeilegeloescht:= +FALSE ;allelv:=datenderzeit(abstd,kennunglv);alleraeume:=datenderzeit(abstd, +kennungraum);alleparaphen:=datenderzeit(abstd,kennungparaphe); +standardkopfmaskeaktualisieren("Stundenplan für "+tagstunde(abstd,FALSE )+ +". Stunde");uvok:=TRUE ;anzlvok:=TRUE ;uvokfeld:=2;poslv:=1;posraum:=1;IF +length(allelv)>maxeintraege*laengelvTHEN allelv:=text(allelv,maxeintraege* +laengelv);alleraeume:=text(alleraeume,maxeintraege*laengeraum);anzlvok:= +FALSE FI ;FOR iFROM 1UPTO maxeintraegeREP index:=i*2;IF poslv<length(allelv) +THEN lvimstdplan:=subtext(allelv,poslv,poslv+7);raumimstdplan:=subtext( +alleraeume,posraum,posraum+3);parimstdplan:=subtext(alleparaphen,posraum, +posraum+3);standardmaskenfeld(compress(lvimstdplan),index);standardmaskenfeld +(compress(raumimstdplan),index+1);eintragausstdpl(i):=lvimstdplan+ +raumimstdplan;IF parimstdplan=leererlehrerCAND uvokTHEN uvokfeld:=index;uvok +:=FALSE FI ;poslvINCR 8;posraumINCR 4;ELSE standardmaskenfeld("",index); +standardmaskenfeld("",index+1);eintragausstdpl(i):=""FI ;PER ;infeld(1); +standardfelderausgeben;infeld(2).END PROC fuellemaske;PROC meldungausgeben( +INT VAR fstat):IF fstat=2THEN standardmeldung(meldungserverfehler,"");ELIF +fstat=4THEN standardmeldung(meldungkeinesugruppen,"");ELIF fstat=5THEN +standardmeldung(meldungzuvielesugruppen,"")ELIF fstat=6THEN standardmeldung( +meldungkeinelv,"")ELIF fstat=7THEN standardmeldung(meldungzuvielelv,"")ELIF +fstat=9THEN standardmeldung(meldungbasisinkon,"");ELSE LEAVE meldungausgeben +FI END PROC meldungausgeben;PROC stundenplannachzeitenspeichern(BOOL CONST +speichern):TEXT VAR par:="",lv:="",t1:="",t2:="";INT VAR pos:=1;IF abstd= +letztebearbstdTHEN IF speichernCAND anzlvokTHEN aenderungenvornehmen;ELIF +stdplzeilegeloeschtTHEN alteeintraegeschreibenFI ; +stundenplannachzeitenreorganisiertverlassenELSE IF speichernCAND anzlvokTHEN +aenderungenvornehmen;ELIF stdplzeilegeloeschtTHEN alteeintraegeschreibenFI ; +IF abstdMOD 12=0THEN stundenplanreorganisierenundsichern(fstat)FI ; +naechstestd;meldungenbeifehler;return(1)FI .alteeintraegeschreiben: +standardmeldung(meldungnichtspeichern,"");loescheinhaltaktstundenplanzeile; +FOR iFROM 1UPTO maxeintraegeREP IF eintragausstdpl(i)<>""THEN +planeintragvornehmen(abstd,text(eintragausstdpl(i),laengelv),subtext( +eintragausstdpl(i),laengelv+1),spok)ELSE LEAVE alteeintraegeschreibenFI PER . +loescheinhaltaktstundenplanzeile:stdplzeilegeloescht:=TRUE ;t1:=datenderzeit( +abstd,kennunglv);pos:=1;WHILE pos<length(t1)REP planeintragloeschen(abstd, +subtext(t1,pos,pos+laengelv-1),spok);posINCR laengelvPER .naechstestd:FOR i +FROM abstd+1UPTO letztebearbstdREP IF bezeichnungzulaessig(kennungzulzeit, +text(i))THEN abstd:=i;fuellemaske;LEAVE naechstestdELSE abstd:=letztebearbstd +FI ;PER .meldungenbeifehler:IF NOT anzlvokTHEN standardmeldung(meldungnur60lv +,tagstunde(abstd,TRUE )+ausgabeparam)ELIF NOT uvokTHEN infeld(uvokfeld); +standardmeldung(meldunguvfehler," ")FI .aenderungenvornehmen:standardmeldung( +meldungplausi," ");aenderungsfehler:=FALSE ;plausipruefungundspeicherung;IF +aenderungsfehlerTHEN standardmeldung(meldungaenderungsfehler,"");return(1); +LEAVE stundenplannachzeitenspeichernELSE standardmeldung(meldungspeichern," " +);IF abstdMOD 12=0THEN stundenplannachzeitenreorganisiertverlassenELSE +stundenplansichern(fstat)FI ;IF fstat<>0THEN meldungausgeben(fstat);return(1) +;LEAVE stundenplannachzeitenspeichernFI ;FI .plausipruefungundspeicherung: +loescheinhaltaktstundenplanzeile;FOR iFROM 1UPTO maxeintraegeREP infeld(i*2); +altereintrag:=eintragausstdpl(i);lveintrag:=standardmaskenfeld(i*2);IF ( +lveintragSUB 1)=" "THEN lveintrag:=jgstaufber(text(lveintrag,2))+subtext( +lveintrag,3)FI ;lveintrag:=text(lveintrag,laengelv);raumeintrag:=text( +standardmaskenfeld(i*2+1),laengeraum);IF lveintrag+raumeintrag<>leerelv+ +leererraumTHEN infeld(i*2);pruefelvleerundraum;pruefelvgueltig; +prueferaumgueltig;pruefelehrerfrei;prueferaumfrei;pruefesugruppenfrei; +planeintragschreibenFI ;PER .pruefelvleerundraum:IF lveintrag=leerelvCAND +raumeintrag<>leererraumTHEN standardmeldung(meldungraumangloeschen,"");return +(1);LEAVE stundenplannachzeitenspeichernFI .pruefelvgueltig:IF NOT +bezeichnungzulaessig(kennunglv,lveintrag)THEN standardmeldung(meldungnichtlv, +lveintrag+ausgabeparam);return(1);LEAVE stundenplannachzeitenspeichernFI . +prueferaumgueltig:IF raumeintrag<>leererraumTHEN IF NOT bezeichnungzulaessig( +kennungraum,raumeintrag)THEN standardmeldung(meldungfalscherraum,"");infeld(i +*2+1);return(1);LEAVE stundenplannachzeitenspeichernFI FI .pruefelehrerfrei: +par:=datenzurlv(kennungparaphe,lveintrag);IF par<>leererlehrerTHEN IF +lehrerunterrichtTHEN standardmeldung(meldunglehrerbesetzt,par+ausgabeparam); +return(1);LEAVE stundenplannachzeitenspeichernFI FI .lehrerunterricht:lv:= +geplantelvfuer(abstd,kennungparaphe,par);lv<>lveintragCAND lv<>"". +prueferaumfrei:IF raumeintrag<>leererraumTHEN IF inraumunterrichtTHEN +standardmeldung(meldungraumbesetzt,"");infeld(i*2+1);return(1);LEAVE +stundenplannachzeitenspeichernFI FI .inraumunterricht:t1:=geplantelvfuer( +abstd,kennungraum,raumeintrag);t1<>lveintragCAND t1<>"".pruefesugruppenfrei: +IF sugruppenichtunterrichtsfreiTHEN standardmeldung(meldungsugrupbesetzt,t1+ +ausgabeparam);return(1);LEAVE stundenplannachzeitenspeichernFI . +sugruppenichtunterrichtsfrei:schuelergruppenschnittbeizeit(abstd,kennunglv, +lveintrag,text(altereintrag,8),t1,t2).planeintragschreiben: +planeintragvornehmen(abstd,lveintrag,raumeintrag,spok);IF NOT spokTHEN +aenderungsfehler:=TRUE FI .END PROC stundenplannachzeitenspeichern;PROC +stundenplannachzeitenzurueckzummenue:INT VAR pos;TEXT VAR t1;standardmeldung( +meldungnichtspeichern,"");IF stdplzeilegeloeschtTHEN alteeintraegeschreiben +FI ;stundenplanreorganisierenundsichern(fstat);enter(2). +alteeintraegeschreiben:loescheinhaltaktstundenplanzeile;FOR iFROM 1UPTO +maxeintraegeREP IF eintragausstdpl(i)<>""THEN planeintragvornehmen(abstd,text +(eintragausstdpl(i),laengelv),subtext(eintragausstdpl(i),laengelv+1),spok) +ELSE LEAVE alteeintraegeschreibenFI PER .loescheinhaltaktstundenplanzeile:t1 +:=datenderzeit(abstd,kennunglv);pos:=1;WHILE pos<length(t1)REP +planeintragloeschen(abstd,subtext(t1,pos,pos+laengelv-1),spok);posINCR +laengelvPER .END PROC stundenplannachzeitenzurueckzummenue;END PACKET +stundenplannachzeitenerfassen; + diff --git a/app/schulis/2.2.1/src/4.stundenplan raumweise erfassen b/app/schulis/2.2.1/src/4.stundenplan raumweise erfassen new file mode 100644 index 0000000..03f5b9e --- /dev/null +++ b/app/schulis/2.2.1/src/4.stundenplan raumweise erfassen @@ -0,0 +1,135 @@ +PACKET stundenplanraumweiseerfassenDEFINES stundenplanraumweisespeichern, +stundenplanraumweisekopieren,stundenplanraumweisereorganisiertverlassen, +stundenplanraumweisezeigen:LET stdplmaske="ms stdplan raumweise bearb", +feldeingraum=2,feldeingakt=3,laengelv=8,laengeraum=4,laengejgst=2,trenner="�" +,raumkenndaten="c02 raeume",schuljahr="Schuljahr",halbjahr="Schulhalbjahr", +kennungraum="R",kennungparaphe="P",kennunglv="L",kennungzulzeit="ZZ", +ungueltigepar="$$$$",leererlehrer=" ",alleklst= +"�00�05�06�07�08�09�10�11�12�13�",ausgabeparam="#",maxstunden=66, +meldungplausi=57,meldungspeichern=50,meldungwarten=69,meldungdatenaufbereitet +=357,meldungfalscherraum=359,meldungkeinesugruppen=334, +meldungzuvielesugruppen=356,meldungnichtlv=360,meldunglehrerbesetzt=361, +meldungsugrupbesetzt=362,meldungzeitgesperrt=363,meldungkeinelv=326, +meldungaenderungsfehler=364,meldungkeineraeume=365,meldunguvfehler=403, +meldungstdplanveraltet=377,meldungserverfehler=376,meldungbasisinkon=378, +meldungunzulaessig=318,meldungzuvielelv=358;ROW maxstundenTEXT VAR lvausstdpl +;ROW maxstundenTEXT VAR lvvombs;TEXT VAR maskeneintragraum:="",gewhj,gewsj, +plausiraeume:=trenner+trenner,raumleiste:="",restraumleiste:="", +stdpleintraglv:="",stdpleintragjgst:="",stdpleintraglvident:="", +stdpleintraglvraum:="",stdpleintraglvpar:="",eintraglv,hjsjanhang:="";INT +VAR i,fstat,aktbspos,anzraeume:=0,hjkennalt:=-1,uvokfeld,hjkennneu:=0;BOOL +VAR spok:=TRUE ,uvok:=TRUE ,aenderungsfehler:=FALSE ;PROC +stundenplanraumweisekopieren:INT VAR aktfeld:=infeld;TEXT VAR feldinhalt:=""; +IF aktfeld=67THEN fehlermeldunganwunzulELIF aktfeld=66THEN kopieren;infeld( +aktfeld)ELSE kopieren;infeld(aktfeld+2)FI ;return(1).kopieren:feldinhalt:= +standardmaskenfeld(aktfeld);standardmaskenfeld(feldinhalt,aktfeld+1); +standardfelderausgeben.fehlermeldunganwunzul:standardmeldung( +meldungunzulaessig,"").END PROC stundenplanraumweisekopieren;PROC +stundenplanraumweisereorganisiertverlassen: +stundenplanreorganisierenundsichern(fstat);IF fstat<>0THEN return(1); +meldungausgeben(fstat)ELSE enter(2)FI END PROC +stundenplanraumweisereorganisiertverlassen;PROC stundenplanraumweisezeigen: +maskeundinitialisierung;IF maskeneintragraum<>""THEN IF raumfalsch( +maskeneintragraum)THEN standardmeldung(meldungfalscherraum,"");return(1)ELSE +restraumleiste:=text(raumleiste,pos(raumleiste,maskeneintragraum)+laengeraum- +1);anzraeume:=length(restraumleiste)DIV laengeraum; +stundenplanraumweiseausgeben(letzterraum);FI ;ELSE restraumleiste:=raumleiste +;anzraeume:=length(restraumleiste)DIV laengeraum;IF anzraeume>=1THEN +stundenplanraumweiseausgeben(letzterraum)ELSE standardmeldung( +meldungkeineraeume,"");return(1)FI ;FI .letzterraum:subtext(restraumleiste,( +anzraeume-1)*laengeraum+1).maskeundinitialisierung:standardmeldung( +meldungwarten," ");IF akthj<>""THEN hjkennneu:=0ELSE hjkennneu:=1FI ; +merkeraum;IF hjkennneu<>hjkennaltTHEN hjkennalt:=hjkennneu;gewsj:= +schulkenndatum(schuljahr);gewhj:=schulkenndatum(halbjahr);IF hjkennneu=1THEN +geplanteshjundsjberechnen(gewhj,gewsj)FI ;stundenplanhalbjahrsetzen(gewhj, +gewsj);hjsjanhang:=" "+gewhj+". "+text(gewsj,2)+"/"+subtext(gewsj,3)+ +", Raum ";holestdplanFI ;IF plausiraeume=trenner+trennerTHEN holeplausiraeume +FI .akthj:standardmaskenfeld(feldeingakt).merkeraum:maskeneintragraum:= +standardmaskenfeld(feldeingraum).holestdplan:standardmeldung( +meldungdatenaufbereitet,"");stundenplanbasisundstundenplanholen(fstat);IF +fstat<>0CAND fstat<>8THEN stundenplanbasisundstundenplanerstellen(fstat);IF +fstat<>0THEN return(1);meldungausgeben(fstat);LEAVE +stundenplanraumweisezeigenELSE stundenplanbasissichern(fstat); +stundenplansichern(fstat);IF fstat<>0THEN return(1);meldungausgeben(fstat); +LEAVE stundenplanraumweisezeigenFI FI ELIF fstat=8THEN meldungausgeben(fstat) +FI .holeplausiraeume:inittupel(dnrschluessel);statleseschleife(dnrschluessel, +raumkenndaten,"",dnrschluessel+1,dnrschluessel+2,PROC raeumeholen).END PROC +stundenplanraumweisezeigen;PROC stundenplanraumweiseausgeben(TEXT CONST raum) +:standardstartproc(stdplmaske);fuellemaske(raum);IF NOT uvokTHEN infeld( +uvokfeld);standardmeldung(meldunguvfehler," ")FI ;standardnproc.END PROC +stundenplanraumweiseausgeben;PROC fuellemaske(TEXT CONST raum):TEXT VAR +paraphelvnulleintrag:="";standardkopfmaskeaktualisieren("Stundenplan für"+ +hjsjanhang+raum);maskeneintragraum:=compress(raum);uvok:=TRUE ;uvokfeld:=2; +FOR iFROM 1UPTO maxstundenREP planeintraglesen(i,kennungraum,raum, +stdpleintraglvident,stdpleintraglvraum,stdpleintraglvpar);IF +stdpleintraglvident<>""THEN lvausstdpl(i):=stdpleintraglvident; +standardmaskenfeld(stdpleintraglvident,i+1);IF stdpleintraglvpar=leererlehrer +THEN IF uvokTHEN uvok:=FALSE ;uvokfeld:=i+1FI ELSE pruefeparaphestdplanlvnull +FI ELSE lvausstdpl(i):="";standardmaskenfeld("",i+1);FI PER ;infeld(1); +standardfelderausgeben;infeld(2).pruefeparaphestdplanlvnull: +paraphelvnulleintrag:=datenzurlv(kennungparaphe,stdpleintraglvident);IF +stdpleintraglvpar<>paraphelvnulleintragTHEN planeintragvornehmen(i, +stdpleintraglvident,paraphelvnulleintrag,spok)FI .END PROC fuellemaske;BOOL +PROC raumfalsch(TEXT CONST raum):pos(plausiraeume,trenner+raum+trenner)=0END +PROC raumfalsch;PROC raeumeholen(BOOL VAR b):IF wert(dnrschluessel+1)> +raumkenndatenCOR dbstatus<>0THEN b:=TRUE ELSE plausiraeumeCAT wert( +dnrschluessel+2);plausiraeumeCAT trenner;raumleiste:=text(wert(dnrschluessel+ +2),laengeraum)+raumleisteFI END PROC raeumeholen;PROC meldungausgeben(INT +VAR fstat):IF fstat=2THEN standardmeldung(meldungserverfehler,"");ELIF fstat= +4THEN standardmeldung(meldungkeinesugruppen,"");ELIF fstat=5THEN +standardmeldung(meldungzuvielesugruppen,"")ELIF fstat=6THEN standardmeldung( +meldungkeinelv,"")ELIF fstat=7THEN standardmeldung(meldungzuvielelv,"")ELIF +fstat=8THEN standardmeldung(meldungstdplanveraltet,"");ELIF fstat=9THEN +standardmeldung(meldungbasisinkon,"");ELSE LEAVE meldungausgebenFI END PROC +meldungausgeben;PROC stundenplanraumweisespeichern(BOOL CONST speichern): +TEXT VAR t:="",lv:="";INT VAR posrestraumleiste;IF anzraeume=1THEN IF +speichernTHEN aenderungenvornehmen;FI ; +stundenplanraumweisereorganisiertverlassenELSE IF speichernTHEN +aenderungenvornehmen;FI ;anzraeumeDECR 1;IF anzraeumeMOD 10=0THEN +stundenplanreorganisierenundsichern(fstat)FI ;naechsterraum;return(1)FI . +naechsterraum:posrestraumleiste:=(anzraeume-1)*laengeraum+1;fuellemaske( +subtext(restraumleiste,posrestraumleiste,posrestraumleiste+laengeraum-1));IF +NOT uvokTHEN infeld(uvokfeld);standardmeldung(meldunguvfehler," ")FI . +aenderungenvornehmen:standardmeldung(meldungplausi," ");plausipruefung; +standardmeldung(meldungspeichern," ");aenderungsfehler:=FALSE ;speicherung; +IF aenderungsfehlerTHEN standardmeldung(meldungaenderungsfehler,"");return(1) +;LEAVE stundenplanraumweisespeichernELSE IF anzraeumeMOD 20=0THEN +stundenplanraumweisereorganisiertverlassenELSE stundenplansichern(fstat)FI ; +IF fstat<>0THEN meldungausgeben(fstat);return(1);LEAVE +stundenplanraumweisespeichernFI ;FI .plausipruefung:FOR iFROM 1UPTO +maxstundenREP aktbspos:=i+1;infeld(aktbspos);stdpleintraglv:=text( +standardmaskenfeld(aktbspos),laengelv);stdpleintragjgst:=text(stdpleintraglv, +laengejgst);IF keinejgstmitfuehrendernullTHEN IF stdpleintragjgst="0 "COR +stdpleintragjgst=" 0"THEN stdpleintraglv:="00"+subtext(stdpleintraglv, +laengejgst+1)ELSE stdpleintraglv:=jgstaufber(stdpleintragjgst)+subtext( +stdpleintraglv,laengejgst+1);IF NOT lastconversionokTHEN standardmeldung( +meldungnichtlv,standardmaskenfeld(aktbspos)+ausgabeparam);return(1);LEAVE +stundenplanraumweisespeichernFI ;FI ;FI ;IF compress(stdpleintraglv)<>""THEN +lvvombs(i):=stdpleintraglv;pruefezeit;pruefelvundpar;pruefesugruppenfreiELSE +lvvombs(i):="";FI ;PER .speicherung:FOR iFROM 1UPTO maxstundenREP IF +lvausstdpl(i)<>""COR lvvombs(i)<>""THEN aktbspos:=i+1;infeld(aktbspos);IF +loeschenTHEN planeintragentfernenELSE planeintragschreibenFI ;FI ;PER . +keinejgstmitfuehrendernull:keinejgstCAND keinleerereintrag.keinejgst:pos( +alleklst,trenner+stdpleintragjgst+trenner)=0.keinleerereintrag:compress( +stdpleintraglv)<>"".pruefelvundpar:t:=datenzurlv(kennungparaphe, +stdpleintraglv);IF t=ungueltigeparTHEN standardmeldung(meldungnichtlv, +standardmaskenfeld(aktbspos)+ausgabeparam);return(1);LEAVE +stundenplanraumweisespeichernELIF t<>leererlehrerTHEN IF lehrerunterricht +THEN standardmeldung(meldunglehrerbesetzt,t+ausgabeparam);return(1);LEAVE +stundenplanraumweisespeichernFI FI .lehrerunterricht:lv:=geplantelvfuer(i, +kennungparaphe,t);lv<>stdpleintraglvCAND lv<>"".pruefesugruppenfrei:IF +sugruppenichtunterrichtsfreiTHEN standardmeldung(meldungsugrupbesetzt,lv+ +ausgabeparam);return(1);LEAVE stundenplanraumweisespeichernFI . +sugruppenichtunterrichtsfrei:schuelergruppenschnittbeizeit(i,kennunglv, +stdpleintraglv,lvausstdpl(i),lv,t).pruefezeit:t:=text(i);IF NOT +bezeichnungzulaessig(kennungzulzeit,t)THEN standardmeldung( +meldungzeitgesperrt,tagstunde(i,TRUE )+" Std."+ausgabeparam);return(1);LEAVE +stundenplanraumweisespeichernFI .loeschen:lvausstdpl(i)<>""CAND lvvombs(i)="" +.planeintragentfernen:planeintragloeschen(i,lvausstdpl(i),spok);IF NOT spok +THEN aenderungsfehler:=TRUE FI .planeintragschreiben:IF lvausstdpl(i)<>"" +THEN planeintragloeschen(i,lvausstdpl(i),spok);IF spokTHEN +planeintragvornehmen(i,lvvombs(i),maskeneintragraum,spok);FI ;ELSE +planeintragvornehmen(i,lvvombs(i),maskeneintragraum,spok);FI ;IF NOT spok +THEN aenderungsfehler:=TRUE FI .END PROC stundenplanraumweisespeichern;END +PACKET stundenplanraumweiseerfassen; + diff --git a/app/schulis/2.2.1/src/4.stundenplan schnittstelle b/app/schulis/2.2.1/src/4.stundenplan schnittstelle new file mode 100644 index 0000000..bc036af --- /dev/null +++ b/app/schulis/2.2.1/src/4.stundenplan schnittstelle @@ -0,0 +1,692 @@ +PACKET stundenplanschnittstelleDEFINES tagstunde,stundenplanhalbjahrsetzen, +stundenplanbasisundstundenplanerstellen,stundenplanerstellen, +stundenplanbasisundstundenplanholen,stundenplanbasissichern, +stundenplansichern,stundenplandatenvorhanden, +stundenplanbasisundstundenplanloeschen,stundenplanloeschen, +stundenplanreorganisierenundsichern,bezeichnungzulaessig,datenzurlv, +beteiligteschuelergruppen,schuelergruppenschnittbeizeit, +schuelergruppenschnittallezeiten,gemeinsameschuelergruppen, +lvderschuelergruppe,allelvmit,lvgeplant,geplantelvfuer,allezeitenvon, +datenderzeit,planeintraglesen,planeintragvornehmen,planeintragloeschen, +erstellungszeitderdatenraeume:LET maxdatenraumeintraege=4000, +maxlehrveranstaltungen=2500,erstestunde=1,letztestunde=66,stdprotag=12, +samstagstd=6,schultage=6,stuplanverwalter="stundenplan server",sgnull= +"Stundenplan-0 ",sgeins="Stundenplan-1 ",lvnull="Stundenplan-2 ",lveins= +"Stundenplan-3 ",stuplan="Stundenplan-4 ",aenderungakt="aktuell", +aenderunggepl="geplant",maxsugruppen=30,laengelv=8,laengekopplung=8, +laengeparaphe=4,laengeraum=4,laengezeit=2,laengejgst=2,laengefachkennung=6, +laengesugruppe=6,laengeklagruppe=4,laengewochenstd=2,laengestuplaneintrag=24, +stuplanposjgst=1,stuplanposkopplung=9,stuplanposparaphe=17,stuplanposraum=21, +erstellzeittag=1,erstellzeitmonat=4,erstellzeitjahr=7,erstellzeitstdmin=10, +beginnlvjgst=1,beginnlvbez=1,beginnlvkopplung=9,beginnlvparaphe=17, +beginnlvwochenstd=21,beginnlvraumgr1=23,beginnlvraumgr2=27;INT CONST +endelvbez:=beginnlvbez+laengelv-1,endelvkopplung:=beginnlvkopplung+ +laengekopplung-1,endelvparaphe:=beginnlvparaphe+laengeparaphe-1, +endelvwochenstd:=beginnlvwochenstd+laengewochenstd-1,endelvraumgr1:= +beginnlvraumgr1+laengeraum-1,endelvraumgr2:=beginnlvraumgr2+laengeraum-1;LET +leistenlaenge=8,bits=16,jgstnull=0,jgstfuenf=5,jgstdreizehn=13,anzklst=9, +trenner="�",klstjgst="�05�5�06�6�07�7�08�8�09�9�10�11�12�13�", +zeitrastersperre="x",dbraeume="c02 raeume",dbaenderung= +"c02 aenderungsvermerk",dbaenderungakt="aktuell",dbaenderunggepl="geplant", +halbj="Schulhalbjahr",fehlerzeichen="$",blank=" ",punkt=".",null="0",eins="1" +,leereraumangabe=" ",kennunglv="L",kennungkopplung="K",kennungparaphe="P", +kennungraum="R",kennungzeit="ZA",kennungzugelassenezeit="ZZ",kennungsugruppe= +"S",kennungwochenstd="W",kennungwunschraum="RW",kennungersatzraum="RE";LET +kennungmo="Mo ",kennungdi="Di ",kennungmi="Mi ",kennungdo="Do ",kennungfr= +"Fr ",kennungsa="Sa ",kennungmontag="Montag ",kennungdienstag="Dienstag ", +kennungmittwoch="Mittwoch ",kennungdonnerstag="Donnerstag ",kennungfreitag= +"Freitag ",kennungsamstag="Samstag ";TYPE BITLEISTE =ROW leistenlaengeINT ; +BITLEISTE VAR sugrupurleiste,sugrupleiste;BOUND ROW maxlehrveranstaltungen +BITLEISTE VAR lvbitleisten;BOUND ROW maxdatenraumeintraegeBITLEISTE VAR +sgbitleisten;ROW maxsugruppenBITLEISTE VAR sugruppenstack;DATASPACE VAR dslv, +dssugrup,dsstdpl;FILE VAR lvdatei,sugrupdatei,stuplandatei;TEXT VAR gewschulj +:="",gewhalbj:="",halbjplausizeit:="",dateieintrag,ergebnis,dserstellungszeit +,behandeltesugruppen:=trenner,letztedbzeit,lvzeile,sugruppeneinerklgr:="", +plausiparaphen:=trenner,plausizeiten:="",plausiklgr:=trenner,plausiraeume:= +trenner;INT VAR i,j,k,zz,anzbitleisten:=0,lowbit,anzsugrup,anzsugrupundklgr, +anzlv,lvjgstnullanfang,lvjgstnullende,lvsugrupjgstanfang,lvsugrupjgstende, +letzteposstuplanzeile,letzterzugrifflv0:=1;BOOL VAR klgreintrag;TEXT PROC +tagstunde(INT CONST anwstdnr,BOOL CONST mitkurzform):INT VAR stdnr:= +konvertierezeit(anwstdnr);TEXT VAR std;IF stdnr<erstestundeCOR stdnr> +letztestundeTHEN ""ELSE std:=text((stdnr-1)MOD stdprotag+1);IF mitkurzform +THEN SELECT (stdnr-1)DIV stdprotagOF CASE 0:kennungmo+stdCASE 1:kennungdi+std +CASE 2:kennungmi+stdCASE 3:kennungdo+stdCASE 4:kennungfr+stdCASE 5:kennungsa+ +stdOTHERWISE ""END SELECT ELSE SELECT (stdnr-1)DIV stdprotagOF CASE 0: +kennungmontag+stdCASE 1:kennungdienstag+stdCASE 2:kennungmittwoch+stdCASE 3: +kennungdonnerstag+stdCASE 4:kennungfreitag+stdCASE 5:kennungsamstag+std +OTHERWISE ""END SELECT FI FI END PROC tagstunde;PROC +stundenplanhalbjahrsetzen(TEXT CONST anwhalbj,anwschulj):gewschulj:=anwschulj +;gewhalbj:=anwhalbj;plausizeiten:=""END PROC stundenplanhalbjahrsetzen;PROC +stundenplanbasisundstundenplanerstellen(INT VAR fehlerstatus):IF gewschulj="" +THEN fehlerstatus:=1ELSE hilfsdatenerstellen(fehlerstatus);IF fehlerstatus=0 +THEN schreibeerstellungszeitFI ;FI .END PROC +stundenplanbasisundstundenplanerstellen;PROC stundenplanerstellen(TEXT CONST +zeit,INT VAR fehlerstatus):commanddialogue(FALSE );IF gewschulj=""THEN +fehlerstatus:=1;forget(stuplandatenraum)ELSE forget(stuplandatenraum);# +dsstdpl:=new(stuplandatenraum);forget(dsstdpl);#commanddialogue(TRUE ); +stuplandatei:=sequentialfile(modify,stuplandatenraum);FOR iFROM erstestunde +UPTO letztestunde+1REP insertrecord(stuplandatei)PER ;schreibzeitinstdpl; +fehlerstatus:=0FI .schreibzeitinstdpl:toline(stuplandatei,letztestunde+1); +writerecord(stuplandatei,zeit).END PROC stundenplanerstellen;PROC +stundenplanbasissichern(INT VAR fehlerstatus):TASK VAR server;disablestop; +server:=task(stuplanverwalter);IF iserrorTHEN clearerror;fehlerstatus:=2; +ELIF gewschulj=""THEN fehlerstatus:=1;ELIF NOT exists(lvnulldatenraum)COR +NOT exists(lveinsdatenraum)COR NOT exists(sgnulldatenraum)COR NOT exists( +sgeinsdatenraum)THEN fehlerstatus:=3ELSE commanddialogue(FALSE );save( +lvnulldatenraum,server);save(lveinsdatenraum,server);save(sgnulldatenraum, +server);save(sgeinsdatenraum,server);commanddialogue(TRUE );fehlerstatus:=0 +FI ;enablestopEND PROC stundenplanbasissichern;PROC stundenplansichern(INT +VAR fehlerstatus):TASK VAR server;disablestop;server:=task(stuplanverwalter); +IF iserrorTHEN clearerror;fehlerstatus:=2;ELIF gewschulj=""THEN fehlerstatus +:=1ELIF NOT exists(stuplandatenraum)THEN fehlerstatus:=3ELSE commanddialogue( +FALSE );save(stuplandatenraum,server);commanddialogue(TRUE );fehlerstatus:=0; +FI ;enablestopEND PROC stundenplansichern;PROC +stundenplanbasisundstundenplanholen(INT VAR fehlerstatus):TASK VAR server; +disablestop;server:=task(stuplanverwalter);IF iserrorTHEN clearerror; +fehlerstatus:=2;ELIF gewschulj=""THEN fehlerstatus:=1ELIF NOT exists( +lvnulldatenraum,server)COR NOT exists(lveinsdatenraum,server)COR NOT exists( +sgnulldatenraum,server)COR NOT exists(sgeinsdatenraum,server)COR NOT exists( +stuplandatenraum,server)THEN fehlerstatus:=3;ELSE commanddialogue(FALSE ); +fetch(stuplandatenraum,server);fetch(lvnulldatenraum,server);fetch( +lveinsdatenraum,server);fetch(sgnulldatenraum,server);fetch(sgeinsdatenraum, +server);datenraeumeankoppeln;commanddialogue(TRUE );IF +stundenplanbasisaktuell(fehlerstatus)THEN anzsugrupundklgr:=lines(sugrupdatei +)-anzklst;anzsugrup:=anzsugrupundklgr-int(records(dnrklassengruppen));anzlv:= +lines(lvdatei);fehlerstatus:=0;ELSE IF fehlerstatus=9THEN +aenderungsvermerkderdbsetzen;FI ;stundenplanbasiserstellen(fehlerstatus);IF +fehlerstatus=0THEN stundenplanbasissichern(fehlerstatus);IF fehlerstatus=0 +THEN stundenplansichern(fehlerstatus);fehlerstatus:=8FI FI FI FI ;enablestop. +aenderungsvermerkderdbsetzen:IF gewhalbj=schulkenndatum(halbj)THEN +aenderungsvermerksetzen(aenderungakt)ELSE aenderungsvermerksetzen( +aenderunggepl)FI .END PROC stundenplanbasisundstundenplanholen;BOOL PROC +stundenplandatenvorhanden:TASK VAR server;IF NOT existstask(stuplanverwalter) +THEN FALSE ELIF gewschulj=""THEN FALSE ELSE server:=task(stuplanverwalter); +exists(lvnulldatenraum,server)COR exists(lveinsdatenraum,server)COR exists( +sgnulldatenraum,server)COR exists(sgeinsdatenraum,server)COR exists( +stuplandatenraum,server)FI END PROC stundenplandatenvorhanden;PROC +stundenplanbasisundstundenplanloeschen(INT VAR fehlerstatus):TASK VAR server; +IF NOT existstask(stuplanverwalter)THEN fehlerstatus:=2ELIF gewschulj=""THEN +fehlerstatus:=1;ELSE server:=task(stuplanverwalter);commanddialogue(FALSE ); +erase(stuplandatenraum,server);erase(lvnulldatenraum,server);erase( +lveinsdatenraum,server);erase(sgnulldatenraum,server);erase(sgeinsdatenraum, +server);commanddialogue(TRUE );fehlerstatus:=0;FI END PROC +stundenplanbasisundstundenplanloeschen;PROC stundenplanloeschen(INT VAR +fehlerstatus):IF gewschulj=""THEN fehlerstatus:=1ELIF NOT exists( +stuplandatenraum)THEN fehlerstatus:=3;ELSE forget(stuplandatenraum,quiet); +fehlerstatus:=0FI END PROC stundenplanloeschen;PROC +stundenplanreorganisierenundsichern(INT VAR fehlerstatus):INT VAR kanal;IF +gewschulj=""THEN fehlerstatus:=1ELIF NOT exists(stuplandatenraum)THEN +fehlerstatus:=3ELSE kanal:=channel(myself);break(quiet);reorganize( +stuplandatenraum);continue(kanal);modify(stuplandatei);stundenplansichern( +fehlerstatus)FI END PROC stundenplanreorganisierenundsichern;TEXT PROC +erstellungszeitderdatenraeume:IF exists(stuplandatenraum)THEN toline( +stuplandatei,letztestunde+1);readrecord(stuplandatei,dserstellungszeit); +dserstellungszeitELSE fehlerzeichenFI END PROC erstellungszeitderdatenraeume; +BOOL PROC bezeichnungzulaessig(TEXT CONST kennung,kennungstext):TEXT VAR +sicherung;INT VAR zeit,alterdbstatus;IF kennung=kennunglvTHEN lv0eintrag(text +(kennungstext,laengelv))<>""ELIF kennung=kennungkopplungTHEN kopplunginlv0( +text(kennungstext,laengekopplung))ELIF kennung=kennungparapheTHEN IF +plausiparaphen=trennerTHEN alterdbstatus:=dbstatus;savetupel(dnrlehrer, +sicherung);statleseschleife(dnrlehrer,"","",fnrlparaphe,fnrlparaphe,PROC +paraphencat);restoretupel(dnrlehrer,sicherung);dbstatus(alterdbstatus)FI ;pos +(plausiparaphen,trenner+text(kennungstext,laengeparaphe)+trenner)>0ELIF +kennung=kennungsugruppeTHEN sg0eintrag(text(kennungstext,laengesugruppe)) +ELIF kennung=kennungraumTHEN IF plausiraeume=trennerTHEN alterdbstatus:= +dbstatus;savetupel(dnrschluessel,sicherung);statleseschleife(dnrschluessel, +dbraeume,"",fnrschlsachgebiet,fnrschlschluessel,PROC raumcat);restoretupel( +dnrschluessel,sicherung);dbstatus(alterdbstatus)FI ;pos(plausiraeume,trenner+ +text(kennungstext,laengeraum)+trenner)>0ELIF kennung=kennungzeitTHEN IF real( +kennungstext)<1000.0THEN konvertierezeit(int(kennungstext))<>0ELSE FALSE FI +ELIF kennung=kennungzugelassenezeitTHEN IF real(kennungstext)>1000.0THEN +LEAVE bezeichnungzulaessigWITH FALSE FI ;IF plausizeiten=""COR gewhalbj<> +halbjplausizeitTHEN halbjplausizeit:=gewhalbj;plausizeiten:=letztestunde*"0"; +inittupel(dnrzeitraster);alterdbstatus:=dbstatus;savetupel(dnrzeitraster, +sicherung);statleseschleife(dnrzeitraster,gewschulj,gewhalbj,fnrzrsj,fnrzrhj, +PROC erstelleplausizeiten);restoretupel(dnrzeitraster,sicherung);dbstatus( +alterdbstatus)FI ;zeit:=konvertierezeit(int(kennungstext));IF zeit<>0THEN ( +plausizeitenSUB zeit)="0"ELSE FALSE FI ELSE FALSE FI END PROC +bezeichnungzulaessig;TEXT PROC datenzurlv(TEXT CONST kennung, +lehrveranstaltung):lvzeile:=lv0eintrag(text(lehrveranstaltung,laengelv));IF +lvzeile<>""THEN IF kennung=kennungparapheTHEN paraphederlv(lvzeile)ELIF +kennung=kennungkopplungTHEN kopplungderlv(lvzeile)ELIF kennung= +kennungwochenstdTHEN wochenstdderlv(lvzeile)ELIF kennung=kennungwunschraum +THEN wunschraumderlv(lvzeile)ELIF kennung=kennungersatzraumTHEN +ersatzraumderlv(lvzeile)ELSE fehlerzeichenFI ELSE ungueltigesergebnis(kennung +)FI END PROC datenzurlv;TEXT PROC beteiligteschuelergruppen(TEXT CONST +kennung,kennungstext):BITLEISTE VAR bitleiste;IF kennung=kennunglvTHEN IF +lv0eintrag(text(kennungstext,laengelv))=""THEN ungueltigesergebnis( +kennungsugruppe)ELSE sugruppenausbitleiste(lv1eintrag(zugriffszeilelv0))FI +ELIF kennung=kennungkopplungTHEN sammlebitleisten(text(kennungstext, +laengekopplung),beginnlvkopplung,bitleiste);sugruppenausbitleiste(bitleiste) +ELSE ungueltigesergebnis(kennungsugruppe)FI END PROC +beteiligteschuelergruppen;TEXT PROC schuelergruppenschnittallezeiten(TEXT +CONST kennung,anwkennungstext1):BITLEISTE VAR bitleiste,stdplbitleiste;TEXT +VAR allestdpllv:="",gesamtlv:="",jgst:="",kopplung:="",stdpllv:="",stdplkopp +:="",stdpljgst:="",schuelergruppen:="",jgstzurnull:=trenner,verfplan:="", +schgrjgst:="",fehler:=letztestunde*fehlerzeichen;TEXT VAR kennungstext1:=""; +INT VAR zeit,anfangeintrag,laengeallestdpllv,ij,schgrindex;BOOL VAR schnitt:= +FALSE ;IF kennung=kennunglvTHEN kennungstext1:=text(anwkennungstext1,laengelv +);gesamtlv:=lv0eintrag(kennungstext1);IF gesamtlv=""THEN LEAVE +schuelergruppenschnittallezeitenWITH fehlerELSE jgst:=text(gesamtlv, +laengejgst);kopplung:=kopplungderlv(gesamtlv);bitleiste:=lv1eintrag( +zugriffszeilelv0);FI ELIF kennung=kennungkopplungTHEN kennungstext1:=text( +anwkennungstext1,laengekopplung);jgst:=jgstzukopplung(kennungstext1);kopplung +:=kennungstext1;IF jgst=""THEN LEAVE schuelergruppenschnittallezeitenWITH +fehlerELSE sammlebitleisten(kennungstext1,beginnlvkopplung,bitleiste)FI ELSE +LEAVE schuelergruppenschnittallezeitenWITH fehlerFI ;IF jgst="00"THEN +bildejgstzurnullFI ;FOR zeitFROM erstestundeUPTO letztestundeREP allestdpllv +:=stuplanzeile(zeit);laengeallestdpllv:=length(allestdpllv);IF +laengeallestdpllv>laengejgstTHEN schnitt:=FALSE ; +pruefeallestdplanlvaufschnitt;IF schnittTHEN verfplanCAT einsELSE verfplan +CAT nullFI ;ELSE verfplanCAT nullFI ;PER ;verfplan.bildejgstzurnull: +schuelergruppen:=beteiligteschuelergruppen(kennung,kennungstext1);FOR ijFROM +1UPTO length(schuelergruppen)DIV laengesugruppeREP schgrindex:=(ij-1)* +laengesugruppe;schgrjgst:=subtext(schuelergruppen,schgrindex+1,schgrindex+2); +IF pos(jgstzurnull,trenner+schgrjgst+trenner)=0THEN jgstzurnullCAT schgrjgst; +jgstzurnullCAT trennerFI PER ;IF length(jgstzurnull)=4THEN jgst:=subtext( +jgstzurnull,2,3);jgstzurnull:=""FI .pruefeallestdplanlvaufschnitt: +anfangeintrag:=0;WHILE anfangeintrag<laengeallestdpllvREP stdpllv:=subtext( +allestdpllv,anfangeintrag+beginnlvjgst,anfangeintrag+endelvbez);stdpljgst:= +text(stdpllv,laengejgst);IF kennung=kennunglvTHEN IF jgstgleichCAND stdpllv<> +kennungstext1THEN stdplkopp:=subtext(allestdpllv,anfangeintrag+ +beginnlvkopplung,anfangeintrag+endelvkopplung);IF kopplungsbezunterschiedlich +THEN IF lv0eintrag(stdpllv)<>""THEN stdplbitleiste:=lv1eintrag( +zugriffszeilelv0);IF bitleistenschnittTHEN schnitt:=TRUE ;LEAVE +pruefeallestdplanlvaufschnittFI ELSE LEAVE schuelergruppenschnittallezeiten +WITH fehlerFI ;FI ;FI ;ELSE IF jgstgleichTHEN stdplkopp:=subtext(allestdpllv, +anfangeintrag+beginnlvkopplung,anfangeintrag+endelvkopplung);IF +kopplungsbezunterschiedlichTHEN IF lv0eintrag(stdpllv)<>""THEN stdplbitleiste +:=lv1eintrag(zugriffszeilelv0);IF bitleistenschnittTHEN schnitt:=TRUE ;LEAVE +pruefeallestdplanlvaufschnittFI ELSE LEAVE schuelergruppenschnittallezeiten +WITH fehlerFI ;FI ;FI ;FI ;anfangeintrag:=anfangeintrag+laengestuplaneintrag +PER .jgstgleich:jgst=stdpljgstCOR stdpljgst="00"COR pos(jgstzurnull,trenner+ +stdpljgst+trenner)>0.kopplungsbezunterschiedlich:kopplung<>stdplkopp. +bitleistenschnitt:gibtesgemeinsamesugruppen(bitleiste,stdplbitleiste).END +PROC schuelergruppenschnittallezeiten;BOOL PROC schuelergruppenschnittbeizeit +(INT CONST anwzeit,TEXT CONST kennung,anwkennungstext1,anwkennungstext2): +BITLEISTE VAR bitleiste,stdplbitleiste;TEXT VAR allestdpllv:="",gesamtlv:="", +jgst:="",kopplung:="",stdpllv:="",stdplkopp:="",stdpljgst:="",schgrjgst:="", +schuelergruppen:="",jgstzurnull:=trenner;TEXT VAR kennungstext1:="", +kennungstext2:="";INT VAR zeit:=konvertierezeit(anwzeit),anfangeintrag, +laengeallestdpllv,ij,schgrindex;IF zeit=0THEN LEAVE +schuelergruppenschnittbeizeitWITH TRUE ELIF kennung=kennunglvTHEN +kennungstext1:=text(anwkennungstext1,laengelv);IF anwkennungstext2<>""THEN +kennungstext2:=text(anwkennungstext2,laengelv)FI ;gesamtlv:=lv0eintrag( +kennungstext1);IF gesamtlv=""THEN LEAVE schuelergruppenschnittbeizeitWITH +TRUE ELSE jgst:=text(gesamtlv,laengejgst);kopplung:=kopplungderlv(gesamtlv); +bitleiste:=lv1eintrag(zugriffszeilelv0);FI ELIF kennung=kennungkopplungTHEN +kennungstext1:=text(anwkennungstext1,laengekopplung);jgst:=jgstzukopplung( +kennungstext1);kopplung:=kennungstext1;IF jgst=""THEN LEAVE +schuelergruppenschnittbeizeitWITH TRUE ELSE sammlebitleisten(kennungstext1, +beginnlvkopplung,bitleiste)FI ELSE LEAVE schuelergruppenschnittbeizeitWITH +TRUE FI ;allestdpllv:=stuplanzeile(zeit);laengeallestdpllv:=length( +allestdpllv);IF laengeallestdpllv<laengejgstTHEN LEAVE +schuelergruppenschnittbeizeitWITH FALSE FI ;IF jgst="00"THEN bildejgstzurnull +FI ;anfangeintrag:=0;WHILE anfangeintrag<laengeallestdpllvREP stdpllv:= +subtext(allestdpllv,anfangeintrag+beginnlvjgst,anfangeintrag+endelvbez); +stdpljgst:=text(stdpllv,laengejgst);IF kennung=kennunglvTHEN IF jgstgleich +CAND stdpllv<>kennungstext1CAND stdpllv<>kennungstext2THEN stdplkopp:=subtext +(allestdpllv,anfangeintrag+beginnlvkopplung,anfangeintrag+endelvkopplung);IF +kopplungsbezunterschiedlichTHEN IF lv0eintrag(stdpllv)<>""THEN stdplbitleiste +:=lv1eintrag(zugriffszeilelv0);IF bitleistenschnittTHEN LEAVE +schuelergruppenschnittbeizeitWITH TRUE FI ELSE LEAVE +schuelergruppenschnittbeizeitWITH TRUE FI ;FI ;FI ;ELSE IF jgstgleichTHEN +stdplkopp:=subtext(allestdpllv,anfangeintrag+beginnlvkopplung,anfangeintrag+ +endelvkopplung);IF kopplungsbezunterschiedlichTHEN IF lv0eintrag(stdpllv)<>"" +THEN stdplbitleiste:=lv1eintrag(zugriffszeilelv0);IF bitleistenschnittTHEN +LEAVE schuelergruppenschnittbeizeitWITH TRUE FI ELSE LEAVE +schuelergruppenschnittbeizeitWITH TRUE FI ;FI ;FI ;FI ;anfangeintrag:= +anfangeintrag+laengestuplaneintragPER ;FALSE .bildejgstzurnull: +schuelergruppen:=beteiligteschuelergruppen(kennung,kennungstext1);FOR ijFROM +1UPTO length(schuelergruppen)DIV laengesugruppeREP schgrindex:=(ij-1)* +laengesugruppe;schgrjgst:=subtext(schuelergruppen,schgrindex+1,schgrindex+2); +IF pos(jgstzurnull,trenner+schgrjgst+trenner)=0THEN jgstzurnullCAT schgrjgst; +jgstzurnullCAT trennerFI PER ;IF length(jgstzurnull)=4THEN jgst:=subtext( +jgstzurnull,2,3);jgstzurnull:=""FI .jgstgleich:jgst=stdpljgstCOR stdpljgst= +"00"COR pos(jgstzurnull,trenner+stdpljgst+trenner)>0. +kopplungsbezunterschiedlich:kopplung<>stdplkopp.bitleistenschnitt: +gibtesgemeinsamesugruppen(bitleiste,stdplbitleiste).END PROC +schuelergruppenschnittbeizeit;BOOL PROC schuelergruppenschnittbeizeit(INT +CONST anwzeit,TEXT CONST kennung,anwkennungstext1,anwkennungstext2,TEXT VAR +lv,sugruppen):BITLEISTE VAR bitleiste,stdplbitleiste;TEXT VAR allestdpllv, +gesamtlv,jgst,kopplung,stdpllv,stdplkopp,stdpljgst:="",schgrjgst:="", +schuelergruppen:="",jgstzurnull:=trenner;TEXT VAR kennungstext1:="", +kennungstext2:="";INT VAR zeit:=konvertierezeit(anwzeit),anfangeintrag, +laengeallestdpllv,ij,schgrindex;lv:="";sugruppen:="";IF zeit=0THEN LEAVE +schuelergruppenschnittbeizeitWITH TRUE ELIF kennung=kennunglvTHEN +kennungstext1:=text(anwkennungstext1,laengelv);IF anwkennungstext2<>""THEN +kennungstext2:=text(anwkennungstext2,laengelv)FI ;gesamtlv:=lv0eintrag( +kennungstext1);IF gesamtlv=""THEN LEAVE schuelergruppenschnittbeizeitWITH +TRUE ELSE jgst:=text(gesamtlv,laengejgst);kopplung:=kopplungderlv(gesamtlv); +bitleiste:=lv1eintrag(zugriffszeilelv0);FI ELIF kennung=kennungkopplungTHEN +kennungstext1:=text(anwkennungstext1,laengekopplung);jgst:=jgstzukopplung( +kennungstext1);kopplung:=kennungstext1;IF jgst=""THEN LEAVE +schuelergruppenschnittbeizeitWITH TRUE ELSE sammlebitleisten(kennungstext1, +beginnlvkopplung,bitleiste)FI ELSE LEAVE schuelergruppenschnittbeizeitWITH +TRUE FI ;allestdpllv:=stuplanzeile(zeit);laengeallestdpllv:=length( +allestdpllv);IF laengeallestdpllv<laengejgstTHEN LEAVE +schuelergruppenschnittbeizeitWITH FALSE FI ;IF jgst="00"THEN bildejgstzurnull +FI ;anfangeintrag:=0;WHILE anfangeintrag<laengeallestdpllvREP stdpllv:= +subtext(allestdpllv,anfangeintrag+beginnlvjgst,anfangeintrag+endelvbez); +stdpljgst:=text(stdpllv,laengejgst);IF kennung=kennunglvTHEN IF jgstgleich +CAND stdpllv<>kennungstext1CAND stdpllv<>kennungstext2THEN stdplkopp:=subtext +(allestdpllv,anfangeintrag+beginnlvkopplung,anfangeintrag+endelvkopplung);IF +kopplungsbezunterschiedlichTHEN IF lv0eintrag(stdpllv)<>""THEN stdplbitleiste +:=lv1eintrag(zugriffszeilelv0);IF bitleistenschnittTHEN lv:=stdpllv;sugruppen +:=sugruppenausbitleiste(bitleistegemeinsamesugruppen(stdplbitleiste,bitleiste +));LEAVE schuelergruppenschnittbeizeitWITH TRUE FI ELSE LEAVE +schuelergruppenschnittbeizeitWITH TRUE FI ;FI ;FI ;ELSE IF jgstgleichTHEN +stdplkopp:=subtext(allestdpllv,anfangeintrag+beginnlvkopplung,anfangeintrag+ +endelvkopplung);IF kopplungsbezunterschiedlichTHEN IF lv0eintrag(stdpllv)<>"" +THEN stdplbitleiste:=lv1eintrag(zugriffszeilelv0);IF bitleistenschnittTHEN lv +:=stdpllv;sugruppen:=sugruppenausbitleiste(bitleistegemeinsamesugruppen( +stdplbitleiste,bitleiste));LEAVE schuelergruppenschnittbeizeitWITH TRUE FI +ELSE LEAVE schuelergruppenschnittbeizeitWITH TRUE FI ;FI ;FI ;FI ; +anfangeintrag:=anfangeintrag+laengestuplaneintragPER ;FALSE .bildejgstzurnull +:schuelergruppen:=beteiligteschuelergruppen(kennung,kennungstext1);FOR ij +FROM 1UPTO length(schuelergruppen)DIV laengesugruppeREP schgrindex:=(ij-1)* +laengesugruppe;schgrjgst:=subtext(schuelergruppen,schgrindex+1,schgrindex+2); +IF pos(jgstzurnull,trenner+schgrjgst+trenner)=0THEN jgstzurnullCAT schgrjgst; +jgstzurnullCAT trennerFI PER ;IF length(jgstzurnull)=4THEN jgst:=subtext( +jgstzurnull,2,3);jgstzurnull:=""FI .jgstgleich:jgst=stdpljgstCOR stdpljgst= +"00"COR pos(jgstzurnull,trenner+stdpljgst+trenner)>0. +kopplungsbezunterschiedlich:kopplung<>stdplkopp.bitleistenschnitt: +gibtesgemeinsamesugruppen(bitleiste,stdplbitleiste).END PROC +schuelergruppenschnittbeizeit;BOOL PROC gemeinsameschuelergruppen(TEXT CONST +kennung1,akennungstext1,kennung2,akennungstext2):BITLEISTE VAR bitleiste1, +bitleiste2;TEXT VAR kennungstext1:="",kennungstext2:="";IF kennung1=kennunglv +THEN kennungstext1:=text(akennungstext1,laengelv);IF lv0eintrag(kennungstext1 +)=""THEN LEAVE gemeinsameschuelergruppenWITH TRUE ELSE bitleiste1:=lv1eintrag +(zugriffszeilelv0)FI ELIF kennung1=kennungkopplungTHEN kennungstext1:=text( +akennungstext1,laengekopplung);sammlebitleisten(kennungstext1, +beginnlvkopplung,bitleiste1);ELSE LEAVE gemeinsameschuelergruppenWITH TRUE +FI ;IF kennung2=kennunglvTHEN kennungstext2:=text(akennungstext2,laengelv); +IF lv0eintrag(kennungstext2)=""THEN LEAVE gemeinsameschuelergruppenWITH TRUE +ELSE bitleiste2:=lv1eintrag(zugriffszeilelv0)FI ELIF kennung2=kennungkopplung +THEN kennungstext2:=text(akennungstext2,laengekopplung);sammlebitleisten( +kennungstext2,beginnlvkopplung,bitleiste2);ELSE LEAVE +gemeinsameschuelergruppenWITH TRUE FI ;gibtesgemeinsamesugruppen(bitleiste1, +bitleiste2)END PROC gemeinsameschuelergruppen;TEXT PROC lvderschuelergruppe( +TEXT CONST anwsugrup):INT VAR i,folgejgst:=5;TEXT VAR lvmitsugrup:="", +aufberjgst:=formatjgst(anwsugrup),sugrup:=text(anwsugrup,laengesugruppe); +BITLEISTE VAR bitleiste:=sugrupurleiste;IF pos(klstjgst,trenner+compress( +sugrup)+trenner)>0COR aufberjgst="00"COR schuelergruppeTHEN betrachtelvELSE +ungueltigesergebnis(kennunglv)FI .betrachtelv:bitleiste:=sg1eintrag(sugrup); +lvjgstnullanfang:=1;lvjgstnullende:=-1;WHILE lvjgstnullende=-1CAND folgejgst< +14REP lvjgstnullende:=erstezeileindatei(lvdatei,formatjgst(text(folgejgst)),1 +,beginnlvjgst)-1;folgejgstINCR 1PER ;IF formatjgst(anwsugrup)<>"00"THEN +lvsugrupjgstanfang:=erstezeileindatei(lvdatei,aufberjgst,1,beginnlvjgst);IF +int(sugrup)=jgstdreizehnTHEN lvsugrupjgstende:=anzlv;ELSE lvsugrupjgstende:= +erstezeileindatei(lvdatei,formatjgst(text(int(sugrup)+1)),lvsugrupjgstanfang, +beginnlvjgst);FI ;IF lvsugrupjgstanfang=0THEN lvsugrupjgstanfang:= +lvsugrupjgstende+1FI ELSE lvsugrupjgstanfang:=1;lvsugrupjgstende:=0FI ;FOR i +FROM lvjgstnullanfangUPTO lvjgstnullendeREP IF +bitleistenvergleichgemeinsamesugruppenTHEN lvmitsugrupCAT text(lv0eintrag(i), +laengelv)FI PER ;FOR iFROM lvsugrupjgstanfangUPTO lvsugrupjgstendeREP IF +bitleistenvergleichgemeinsamesugruppenTHEN lvmitsugrupCAT text(lv0eintrag(i), +laengelv)FI PER ;lvmitsugrup.bitleistenvergleichgemeinsamesugruppen: +gibtesgemeinsamesugruppen(bitleiste,lv1eintrag(i)).schuelergruppe:toline( +sugrupdatei,1);col(sugrupdatei,1);WHILE NOT eof(sugrupdatei)REP downety( +sugrupdatei,sugrup);IF col(sugrupdatei)=1THEN LEAVE schuelergruppeWITH TRUE +ELSE positionierenFI ;PER ;FALSE .positionieren:col(sugrupdatei,col( +sugrupdatei)+1).END PROC lvderschuelergruppe;TEXT PROC allelvmit(TEXT CONST +kennung,anwkennungstext):TEXT VAR lvmit:="",lv:="",kennungstext:="";INT VAR +richtigepos;IF kennung=kennungparapheTHEN kennungstext:=text(anwkennungstext, +laengeparaphe);richtigepos:=stuplanposparapheELIF kennung=kennungkopplung +THEN kennungstext:=text(anwkennungstext,laengekopplung);richtigepos:= +stuplanposkopplungELSE LEAVE allelvmitWITH ungueltigesergebnis(kennunglv)FI ; +toline(lvdatei,1);col(lvdatei,1);WHILE NOT eof(lvdatei)REP downety(lvdatei, +kennungstext);IF col(lvdatei)=richtigeposCAND NOT eof(lvdatei)THEN readrecord +(lvdatei,lv);lvmitCAT text(lv,laengelv)FI ;positionierenPER ;lvmit. +positionieren:col(lvdatei,col(lvdatei)+1).END PROC allelvmit;BOOL PROC +lvgeplant(INT CONST zeit,TEXT CONST lehrveranstaltung):INT CONST std:= +konvertierezeit(zeit);TEXT VAR eintrag:="";IF std=0THEN TRUE ELSE eintrag:= +stuplanzeile(std);instuplanzeile(eintrag,text(lehrveranstaltung,laengelv), +stuplanposjgst,letzteposstuplanzeile)FI END PROC lvgeplant;TEXT PROC +geplantelvfuer(INT CONST zeit,TEXT CONST kennung,anwkennungstext):INT VAR std +:=konvertierezeit(zeit),poslv,richtigepos;TEXT VAR kennungstext:="";IF std=0 +THEN LEAVE geplantelvfuerWITH ungueltigesergebnis(kennunglv)ELIF kennung= +kennungparapheTHEN kennungstext:=text(anwkennungstext,laengeparaphe); +richtigepos:=stuplanposparapheELIF kennung=kennungraumTHEN kennungstext:=text +(anwkennungstext,laengeraum);richtigepos:=stuplanposraumELSE LEAVE +geplantelvfuerWITH ungueltigesergebnis(kennunglv)FI ;IF instuplanzeile( +stuplanzeile(std),kennungstext,richtigepos,letzteposstuplanzeile)THEN +holentsprlvELSE ""FI .holentsprlv:poslv:=letzteposstuplanzeile-richtigepos+1; +subtext(stuplanzeile(std),poslv,poslv+laengelv-1).END PROC geplantelvfuer; +TEXT PROC allezeitenvon(TEXT CONST kennung,anwkennungstext):INT VAR i, +richtigepos;TEXT VAR verfplan:="",kennungstext:="";IF kennung=kennungparaphe +THEN kennungstext:=text(anwkennungstext,laengeparaphe);richtigepos:= +stuplanposparapheELIF kennung=kennunglvTHEN kennungstext:=text( +anwkennungstext,laengelv);richtigepos:=stuplanposjgstELIF kennung=kennungraum +THEN kennungstext:=text(anwkennungstext,laengeraum);richtigepos:= +stuplanposraumELIF kennung=kennungkopplungTHEN kennungstext:=text( +anwkennungstext,laengekopplung);richtigepos:=stuplanposkopplungELSE LEAVE +allezeitenvonWITH letztestunde*fehlerzeichenFI ;FOR iFROM erstestundeUPTO +letztestundeREP IF instuplanzeile(stuplanzeile(i),kennungstext,richtigepos, +letzteposstuplanzeile)THEN verfplanCAT einsELSE verfplanCAT nullFI PER ; +verfplanEND PROC allezeitenvon;TEXT PROC datenderzeit(INT CONST zeit,TEXT +CONST kennung):INT VAR std:=konvertierezeit(zeit),poseintrag,laengeeintrag, +objektlaenge,objektbeginn;TEXT VAR eintrag:="",ausgabe:="";IF kennung= +kennunglvTHEN objektlaenge:=laengelv;objektbeginn:=stuplanposjgstELIF kennung +=kennungkopplungTHEN objektlaenge:=laengekopplung;objektbeginn:= +stuplanposkopplungELIF kennung=kennungparapheTHEN objektlaenge:=laengeparaphe +;objektbeginn:=stuplanposparapheELIF kennung=kennungraumTHEN objektlaenge:= +laengeraum;objektbeginn:=stuplanposraumELSE LEAVE datenderzeitWITH +fehlerzeichenFI ;IF std=0THEN LEAVE datenderzeitWITH ungueltigesergebnis( +kennung)FI ;toline(stuplandatei,std);readrecord(stuplandatei,eintrag);ausgabe +:="";poseintrag:=objektbeginn;laengeeintrag:=length(eintrag);WHILE poseintrag +<laengeeintragREP ausgabeCAT subtext(eintrag,poseintrag,poseintrag+ +objektlaenge-1);poseintrag:=poseintrag+laengestuplaneintragPER ;ausgabeEND +PROC datenderzeit;PROC planeintraglesen(INT CONST zeit,TEXT CONST kennung, +anwkennungstext,TEXT VAR lehrveranstaltung,raum,paraphe):INT VAR std:= +konvertierezeit(zeit),poslv,richtigepos,stackpos,anfangeintrag, +laengeallestdpllv;TEXT VAR kennungstext:="",stdpllv,allestdpllv,jgstdersugrup +,jgstderlv;BITLEISTE VAR sugrupbitleiste,stdplbitleiste;IF std=0THEN +lehrveranstaltung:=ungueltigesergebnis(kennunglv);raum:="";paraphe:="";LEAVE +planeintraglesenELIF kennung=kennunglvTHEN kennungstext:=text(anwkennungstext +,laengelv);richtigepos:=stuplanposjgstELIF kennung=kennungparapheTHEN +kennungstext:=text(anwkennungstext,laengeparaphe);richtigepos:= +stuplanposparapheELIF kennung=kennungraumTHEN kennungstext:=text( +anwkennungstext,laengeraum);richtigepos:=stuplanposraumELIF kennung= +kennungsugruppeTHEN jgstdersugrup:=jgstaufber(text(anwkennungstext,laengejgst +));kennungstext:=text(jgstdersugrup+subtext(anwkennungstext,laengejgst+1), +laengesugruppe)ELSE fehlerbehandlungFI ;lehrveranstaltung:="";raum:=""; +paraphe:="";IF kennung<>kennungsugruppeTHEN IF instuplanzeile(stuplanzeile( +std),kennungstext,richtigepos,letzteposstuplanzeile)THEN holentsprlvFI ELSE +holelvderzeit;ermittlebitleiste;vergleichelvmitbitleisteFI .holentsprlv:poslv +:=letzteposstuplanzeile-richtigepos+1;lehrveranstaltung:=subtext(stuplanzeile +(std),poslv,poslv+laengestuplaneintrag-1);raum:=subtext(lehrveranstaltung, +stuplanposraum);paraphe:=subtext(lehrveranstaltung,stuplanposparaphe, +stuplanposparaphe+laengeparaphe-1);lehrveranstaltung:=text(lehrveranstaltung, +laengelv).ermittlebitleiste:stackpos:=pos(behandeltesugruppen,trenner+ +kennungstext+trenner);IF bitleistenochzuermittelnTHEN sugrupbitleiste:= +sg1eintrag(kennungstext);IF anzbitleisten<maxsugruppenTHEN sugruppenstack( +anzbitleisten+1):=sugrupbitleiste;behandeltesugruppenCAT kennungstext; +behandeltesugruppenCAT trenner;anzbitleistenINCR 1FI ELSE sugrupbitleiste:= +sugruppenstack((stackpos+6)DIV 7)FI .bitleistenochzuermitteln:stackpos=0. +holelvderzeit:allestdpllv:=stuplanzeile(std);laengeallestdpllv:=length( +allestdpllv);IF laengeallestdpllv<laengejgstTHEN LEAVE planeintraglesenFI . +vergleichelvmitbitleiste:anfangeintrag:=0;WHILE anfangeintrag< +laengeallestdpllvREP stdpllv:=subtext(allestdpllv,anfangeintrag+beginnlvjgst, +anfangeintrag+endelvbez);jgstderlv:=text(stdpllv,laengejgst);IF +jgstgleichodernullnullTHEN IF lv0eintrag(stdpllv)<>""THEN stdplbitleiste:= +lv1eintrag(zugriffszeilelv0);IF bitleistenschnittTHEN lehrveranstaltungCAT +stdpllv;raumCAT subtext(allestdpllv,anfangeintrag+stuplanposraum, +anfangeintrag+laengestuplaneintrag);parapheCAT subtext(allestdpllv, +anfangeintrag+stuplanposparaphe,anfangeintrag+stuplanposraum-1)FI FI ;FI ; +anfangeintrag:=anfangeintrag+laengestuplaneintragPER .jgstgleichodernullnull: +jgstdersugrup=jgstderlvCOR jgstderlv="00".bitleistenschnitt: +gibtesgemeinsamesugruppen(sugrupbitleiste,stdplbitleiste).fehlerbehandlung: +lehrveranstaltung:=ungueltigesergebnis(kennunglv);raum:="";paraphe:="";LEAVE +planeintraglesen.END PROC planeintraglesen;PROC planeintragvornehmen(INT +CONST zeit,TEXT CONST anwlehrveranstaltung,anwraum,BOOL VAR ok):INT VAR std:= +konvertierezeit(zeit);TEXT VAR lv,eintrag,neuereintrag,lehrveranstaltung:= +text(anwlehrveranstaltung,laengelv),raum:=text(anwraum,laengeraum);IF std=0 +THEN ok:=FALSE ;LEAVE planeintragvornehmenFI ;IF raum<>leereraumangabeAND ( +NOT bezeichnungzulaessig(kennungraum,raum))THEN ok:=FALSE ;LEAVE +planeintragvornehmenFI ;lv:=lv0eintrag(lehrveranstaltung);IF lv=""THEN ok:= +FALSE ;ELIF instuplanzeile(stuplanzeile(std),lehrveranstaltung,stuplanposjgst +,letzteposstuplanzeile)THEN holstuplaneintrag;substituierelvELSE +holstuplaneintrag;erweitereumlvFI .holstuplaneintrag:ok:=TRUE ;toline( +stuplandatei,std);readrecord(stuplandatei,eintrag).erweitereumlv:eintragCAT +text(lv,laengelv+laengekopplung+laengeparaphe);eintragCAT text(raum, +laengeraum);writerecord(stuplandatei,eintrag).substituierelv:neuereintrag:= +text(eintrag,letzteposstuplanzeile-1);neuereintragCAT text(lv,laengelv+ +laengekopplung+laengeparaphe);neuereintragCAT text(raum,laengeraum); +neuereintragCAT subtext(eintrag,letzteposstuplanzeile+laengestuplaneintrag); +writerecord(stuplandatei,neuereintrag).END PROC planeintragvornehmen;PROC +planeintragloeschen(INT CONST zeit,TEXT CONST lehrveranstaltung,BOOL VAR ok): +INT VAR std:=konvertierezeit(zeit);TEXT VAR eintrag,neuereintrag;IF std=0 +THEN ok:=FALSE ELIF instuplanzeile(stuplanzeile(std),text(lehrveranstaltung, +laengelv),stuplanposjgst,letzteposstuplanzeile)THEN holstuplaneintrag; +loescheeintragELSE ok:=FALSE FI .holstuplaneintrag:ok:=TRUE ;toline( +stuplandatei,std);readrecord(stuplandatei,eintrag).loescheeintrag: +neuereintrag:=text(eintrag,letzteposstuplanzeile-1);neuereintragCAT subtext( +eintrag,letzteposstuplanzeile+laengestuplaneintrag);writerecord(stuplandatei, +neuereintrag).END PROC planeintragloeschen;PROC resetbitleiste(BITLEISTE VAR +bitleiste):FOR iFROM 1UPTO leistenlaengeREP FOR jFROM 0UPTO bits-1REP +resetbit(bitleiste(i),j)PER PER ;END PROC resetbitleiste;PROC +loeschdatenraeume:forget(lvnulldatenraum,quiet);forget(sgnulldatenraum,quiet) +;forget(lveinsdatenraum,quiet);forget(sgeinsdatenraum,quiet)END PROC +loeschdatenraeume;OP :=(BITLEISTE VAR eins,BITLEISTE CONST zwei):INT VAR i; +FOR iFROM 1UPTO leistenlaengeREP eins(i):=zwei(i)PER END OP :=;PROC +schreibesugrupundklgrinds:zz:=0;positioniersugrup;holsugrupdaten;IF zz=0THEN +LEAVE schreibesugrupundklgrindsFI ;anzsugrup:=zz;positionierklgr;holklgrdaten +;IF anzsugrup=-1THEN LEAVE schreibesugrupundklgrindsFI ;anzsugrupundklgr:=zz; +FOR iFROM jgstfuenfUPTO jgstdreizehnREP toline(sugrupdatei,lines(sugrupdatei) ++1);schreibjgstindateiPER .positioniersugrup:inittupel(dnraktschuelergruppen) +;putwert(fnrsgrpsj,gewschulj);putwert(fnrsgrphj,gewhalbj);putintwert( +fnrsgrpjgst,0).positionierklgr:inittupel(dnrklassengruppen);first( +dnrklassengruppen).holsugrupdaten:IF records(dnraktschuelergruppen)=0.0THEN +LEAVE schreibesugrupundklgrindsFI ;statleseschleife(dnraktschuelergruppen, +gewschulj,gewhalbj,fnrsgrpsj,fnrsgrphj,PROC sugrupinds).holklgrdaten:IF +records(dnrklassengruppen)=0.0THEN LEAVE holklgrdatenFI ;statleseschleife( +dnrklassengruppen,"","",fnrkgklassengrp,fnrkgschuelergrp,PROC klgrinds). +schreibjgstindatei:putds(sugrupdatei,text(formatjgst(text(i)),laengesugruppe) +);schreibbitleisteinds.schreibbitleisteinds:sugrupleiste:=sugrupurleiste; +ermittlebitleistejgstodersugrupklgr(formatjgst(text(i,laengejgst))); +sgbitleisten(zz+1):=sugrupleiste;zzINCR 1.END PROC schreibesugrupundklgrinds; +PROC schreibelvinds:anzlv:=0;sucheerstensatz;schreibsugrupleiste;IF zz<>0 +THEN anzlv:=zz-1FI .sucheerstensatz:IF records(dnrlehrveranstaltungen)=0.0 +THEN LEAVE schreibelvindsFI ;inittupel(dnrlehrveranstaltungen);putwert( +fnrlvsj,gewschulj);putwert(fnrlvhj,gewhalbj);putintwert(fnrlvjgst,jgstnull); +putwert(fnrlvfachkennung,"");search(dnrlehrveranstaltungen,FALSE ). +schreibsugrupleiste:zz:=0;statleseschleife(dnrlehrveranstaltungen,gewschulj, +gewhalbj,fnrlvsj,fnrlvhj,PROC sugrupleisteinds).END PROC schreibelvinds;PROC +sugrupleisteinds(BOOL VAR b):IF wert(fnrlvsj)=gewschuljCAND wert(fnrlvhj)= +gewhalbjCAND dbstatus=0CAND zz<2499THEN klgreintrag:=FALSE ;sugrupleiste:= +sugrupurleiste;analysiereklgreinerlv(fnrlvklgrp1);IF anzsugrup=-1THEN b:= +TRUE ;LEAVE sugrupleisteindsELSE analysiereklgreinerlv(fnrlvklgrp2);IF +anzsugrup=-1THEN b:=TRUE ;LEAVE sugrupleisteindsELSE analysiereklgreinerlv( +fnrlvklgrp3);IF anzsugrup=-1THEN b:=TRUE ;LEAVE sugrupleisteindsELSE +analysiereklgreinerlv(fnrlvklgrp4);FI ;FI ;FI ;IF NOT klgreintragTHEN +ermittlebitleistejgst(wert(fnrlvjgst));FI ;schreiblvindatei; +schreibsugrupleisteindsELSE b:=TRUE FI .schreiblvindatei:dateieintrag:=""; +dateieintragCAT formatjgst(wert(fnrlvjgst));dateieintragCAT text(wert( +fnrlvfachkennung),laengefachkennung);dateieintragCAT text(wert(fnrlvkopplung) +,laengekopplung);dateieintragCAT text(wert(fnrlvparaphe),laengeparaphe); +dateieintragCAT text(wert(fnrlvwochenstd),laengewochenstd);dateieintragCAT +text(wert(fnrlvraumgrp1),laengeraum);dateieintragCAT text(wert(fnrlvraumgrp2) +,laengeraum);putds(lvdatei,dateieintrag).schreibsugrupleisteinds:lvbitleisten +(zz+1):=sugrupleiste;zzINCR 1;.END PROC sugrupleisteinds;PROC +analysiereklgreinerlv(INT CONST lvklgrfeld):IF wert(lvklgrfeld)<>""THEN IF +istjgst(wert(lvklgrfeld))THEN ermittlebitleistejgst(wert(lvklgrfeld));ELIF +istklgr(wert(lvklgrfeld))THEN ermittlebitleistejgstodersugrupklgr(wert( +lvklgrfeld));ELSE ermittlebitleistejgstodersugrupklgr(formatjgst(wert( +fnrlvjgst))+wert(lvklgrfeld));IF anzsugrup=-1THEN LEAVE analysiereklgreinerlv +FI ;FI ;klgreintrag:=TRUE FI ;END PROC analysiereklgreinerlv;PROC sugrupinds( +BOOL VAR b):IF wert(fnrsgrpsj)=gewschuljCAND wert(fnrsgrphj)=gewhalbjCAND +dbstatus=0THEN sugrupleiste:=sugrupurleiste;putds(sugrupdatei,formatjgst(wert +(fnrsgrpjgst))+text(wert(fnrsgrpkennung),laengeklagruppe));IF zz<127THEN +schreibesugrupleisteFI ;sgbitleisten(zz+1):=sugrupleiste;zzINCR 1;ELIF wert( +fnrsgrpsj)>gewschuljCOR wert(fnrsgrphj)>gewhalbjCOR dbstatus<>0COR zz=127 +THEN b:=TRUE FI .schreibesugrupleiste:setzebit(zz).END PROC sugrupinds;PROC +klgrinds(BOOL VAR b):IF dbstatus=0THEN toline(sugrupdatei,lines(sugrupdatei)+ +1);plausiklgrCAT wert(fnrkgklassengrp)+trenner;putds(sugrupdatei,text(wert( +fnrkgklassengrp),laengesugruppe));analysieresugrupen;sgbitleisten(zz+1):= +sugrupleiste;zzINCR 1ELSE b:=TRUE FI .analysieresugrupen:sugrupleiste:= +sugrupurleiste;sugruppeneinerklgr:=wert(fnrkgschuelergrp);FOR kFROM 1UPTO +LENGTH sugruppeneinerklgrDIV laengesugruppeREP +ermittlebitleistejgstodersugrupklgr(subtext(sugruppeneinerklgr,(k-1)* +laengesugruppe+1,k*laengesugruppe));IF anzsugrup=-1THEN b:=TRUE ;LEAVE +klgrindsFI ;PER .END PROC klgrinds;PROC ermittlebitleistejgstodersugrupklgr( +TEXT CONST klgrteil):TEXT VAR compklgrteil:=compress(klgrteil);IF istjgst( +compklgrteil)THEN stellebitleistenjgstELSE stellebitleistesugrupoderklgrFI . +stellebitleistesugrupoderklgr:IF istklgr(compklgrteil)THEN toline(sugrupdatei +,anzsugrup);ELSE toline(sugrupdatei,1);FI ;col(sugrupdatei,1);downety( +sugrupdatei,compklgrteil);IF NOT eof(sugrupdatei)THEN oderbitleisten;LEAVE +stellebitleistesugrupoderklgrELSE anzsugrup:=-1;LEAVE +ermittlebitleistejgstodersugrupklgrFI .stellebitleistenjgst:toline( +sugrupdatei,1);col(sugrupdatei,1);WHILE NOT eof(sugrupdatei)REP downety( +sugrupdatei,formatjgst(klgrteil));IF col(sugrupdatei)=1CAND lineno( +sugrupdatei)<=anzsugrupTHEN oderbitleistenFI ;positionierenPER .positionieren +:col(sugrupdatei,col(sugrupdatei)+1).oderbitleisten:BITLEISTE VAR bitleiste:= +sgbitleisten(lineno(sugrupdatei));FOR jFROM 1UPTO leistenlaengeREP +sugrupleiste(j):=sugrupleiste(j)OR bitleiste(j)PER .END PROC +ermittlebitleistejgstodersugrupklgr;PROC ermittlebitleistejgst(TEXT CONST +klgrteil):stellebitleistenjgst.stellebitleistenjgst:toline(sugrupdatei, +anzsugrupundklgr);col(sugrupdatei,1);WHILE NOT eof(sugrupdatei)REP downety( +sugrupdatei,formatjgst(klgrteil));IF col(sugrupdatei)=1THEN oderbitleistenFI +;positionierenPER .positionieren:col(sugrupdatei,col(sugrupdatei)+1). +oderbitleisten:BITLEISTE VAR bitleiste:=sgbitleisten(lineno(sugrupdatei)); +FOR jFROM 1UPTO leistenlaengeREP sugrupleiste(j):=sugrupleiste(j)OR bitleiste +(j)PER .END PROC ermittlebitleistejgst;BOOL PROC stundenplanbasisaktuell(INT +VAR fehlerstatus):dserstellungszeit:="";letztedbzeit:="";ermittledszeit; +ermittledbzeit;vergleichezeit;IF fehlerstatus=0THEN TRUE ELSE FALSE FI . +ermittledszeit:dserstellungszeit:=erstellungszeitderdatenraeume. +ermittledbzeit:IF gewhalbj=schulkenndatum(halbj)THEN inittupel(dnrschluessel) +;putwert(fnrschlschluessel,dbaenderungakt);ELSE inittupel(dnrschluessel); +putwert(fnrschlschluessel,dbaenderunggepl);FI ;putwert(fnrschlsachgebiet, +dbaenderung);search(dnrschluessel,TRUE );IF dbstatus<>okTHEN fehlerstatus:=9; +LEAVE stundenplanbasisaktuellWITH FALSE ELSE letztedbzeit:=wert( +fnrschllangtext)FI .vergleichezeit:IF dsjahr=dbjahrTHEN pruefmonatELIF dsjahr +>dbjahrTHEN fehlerstatus:=0ELSE fehlerstatus:=1FI .pruefmonat:IF dsmonat= +dbmonatTHEN prueftagELIF dsmonat>dbmonatTHEN fehlerstatus:=0ELSE fehlerstatus +:=1FI .prueftag:IF dstag=dbtagTHEN pruefzeitELIF dstag>dbtagTHEN fehlerstatus +:=0ELSE fehlerstatus:=1FI .pruefzeit:IF dszeit>=dbzeitTHEN fehlerstatus:=0 +ELSE fehlerstatus:=1FI .dsjahr:subtext(dserstellungszeit,erstellzeitjahr, +erstellzeitjahr+1).dbjahr:subtext(letztedbzeit,erstellzeitjahr, +erstellzeitjahr+1).dsmonat:subtext(dserstellungszeit,erstellzeitmonat, +erstellzeitmonat+1).dbmonat:subtext(letztedbzeit,erstellzeitmonat, +erstellzeitmonat+1).dstag:text(dserstellungszeit,erstellzeittag+1).dbtag:text +(letztedbzeit,erstellzeittag+1).dszeit:subtext(dserstellungszeit, +erstellzeitstdmin).dbzeit:subtext(letztedbzeit,erstellzeitstdmin).END PROC +stundenplanbasisaktuell;PROC stundenplanbasiserstellen(INT VAR fehlerstatus): +hilfsdatenerstellen(fehlerstatus);IF fehlerstatus=0THEN toline(stuplandatei, +letztestunde+1);writerecord(stuplandatei,date+blank+timeofday);FI .END PROC +stundenplanbasiserstellen;PROC hilfsdatenerstellen(INT VAR fehlerstatus): +inithilfsdateien;schreibesugrupundklgrinds;IF anzsugrup=-1THEN fehlerstatus:= +9;forget(sgnulldatenraum,quiet);forget(sgeinsdatenraum,quiet)ELIF anzsugrup=0 +THEN fehlerstatus:=4ELIF anzsugrup>127THEN fehlerstatus:=5;loeschdatenraeume +ELSE schreibelvinds;IF anzsugrup=-1THEN fehlerstatus:=9;loeschdatenraeume +ELIF anzlv=0THEN fehlerstatus:=6;loeschdatenraeumeELIF anzlv>2499THEN +fehlerstatus:=7;loeschdatenraeumeELSE fehlerstatus:=0FI ;FI .inithilfsdateien +:commanddialogue(FALSE );loeschdatenraeume;commanddialogue(TRUE );#dslv:=new( +lvnulldatenraum);dssugrup:=new(sgnulldatenraum);commanddialogue(FALSE ); +forget(dslv);forget(dssugrup);commanddialogue(TRUE );#lvdatei:=sequentialfile +(modify,lvnulldatenraum);sugrupdatei:=sequentialfile(modify,sgnulldatenraum); +lvbitleisten:=new(lveinsdatenraum);sgbitleisten:=new(sgeinsdatenraum); +resetbitleiste(sugrupurleiste).END PROC hilfsdatenerstellen;PROC +datenraeumeankoppeln:IF exists(lvnulldatenraum)THEN lvdatei:=sequentialfile( +modify,old(lvnulldatenraum))FI ;IF exists(sgnulldatenraum)THEN sugrupdatei:= +sequentialfile(modify,old(sgnulldatenraum))FI ;IF exists(stuplandatenraum) +THEN stuplandatei:=sequentialfile(modify,old(stuplandatenraum))FI ;IF exists( +lveinsdatenraum)THEN lvbitleisten:=old(lveinsdatenraum);FI ;IF exists( +sgeinsdatenraum)THEN sgbitleisten:=old(sgeinsdatenraum);FI END PROC +datenraeumeankoppeln;INT PROC zugriffszeilelv0:letzterzugrifflv0END PROC +zugriffszeilelv0;TEXT PROC lv0eintrag(TEXT CONST lv):TEXT VAR dateieintrag:= +"";letzterzugrifflv0:=0;dateieintrag:="";toline(lvdatei,1);col(lvdatei,1); +WHILE NOT eof(lvdatei)REP downety(lvdatei,lv);IF col(lvdatei)=beginnlvbez +CAND NOT eof(lvdatei)THEN readrecord(lvdatei,dateieintrag);letzterzugrifflv0 +:=lineno(lvdatei);LEAVE lv0eintragWITH dateieintragELSE positionierenFI ;PER +;"".positionieren:col(lvdatei,col(lvdatei)+1).END PROC lv0eintrag;TEXT PROC +lv0eintrag(INT CONST index):TEXT VAR dateieintrag:="";toline(lvdatei,index); +col(lvdatei,1);IF eof(lvdatei)THEN ""ELSE readrecord(lvdatei,dateieintrag); +dateieintragFI END PROC lv0eintrag;BOOL PROC kopplunginlv0(TEXT CONST +kopplung):toline(lvdatei,1);col(lvdatei,1);WHILE NOT eof(lvdatei)REP downety( +lvdatei,kopplung);IF col(lvdatei)=beginnlvkopplungCAND NOT eof(lvdatei)THEN +LEAVE kopplunginlv0WITH TRUE ELSE positionierenFI ;PER ;FALSE .positionieren: +col(lvdatei,col(lvdatei)+1).END PROC kopplunginlv0;BOOL PROC sg0eintrag(TEXT +CONST sg):toline(sugrupdatei,1);col(sugrupdatei,1);WHILE NOT eof(sugrupdatei) +REP downety(sugrupdatei,sg);IF col(sugrupdatei)=1CAND NOT eof(sugrupdatei) +CAND lineno(sugrupdatei)<=anzsugrupTHEN LEAVE sg0eintragWITH TRUE ELSE +positionierenFI ;PER ;FALSE .positionieren:col(sugrupdatei,col(sugrupdatei)+1 +).END PROC sg0eintrag;TEXT PROC sg0eintrag(INT CONST index):dateieintrag:=""; +toline(sugrupdatei,index);col(sugrupdatei,1);IF eof(sugrupdatei)THEN ""ELSE +readrecord(sugrupdatei,dateieintrag);text(dateieintrag,laengesugruppe)FI END +PROC sg0eintrag;BITLEISTE PROC sg1eintrag(TEXT CONST anwsugrup):TEXT VAR +sugrup:=text(anwsugrup,laengesugruppe);toline(sugrupdatei,1);col(sugrupdatei, +1);WHILE NOT eof(sugrupdatei)REP downety(sugrupdatei,sugrup);IF col( +sugrupdatei)=1CAND NOT eof(sugrupdatei)THEN LEAVE sg1eintragWITH sgbitleisten +(lineno(sugrupdatei))ELSE positionierenFI ;PER ;sugrupurleiste.positionieren: +col(sugrupdatei,col(sugrupdatei)+1).END PROC sg1eintrag;BITLEISTE PROC +lv1eintrag(INT CONST index):lvbitleisten(index)END PROC lv1eintrag;TEXT PROC +sugruppenausbitleiste(BITLEISTE CONST bitleiste):sugruppeneinerklgr:="";FOR j +FROM 1UPTO leistenlaengeREP lowbit:=lowestset(bitleiste(j));IF lowbit<>-1 +THEN FOR kFROM lowbitUPTO bits-1REP IF bit(bitleiste(j),k)THEN +sugruppeneinerklgrCAT sg0eintrag(k+(j-1)*bits+1)FI PER ;FI ;PER ; +sugruppeneinerklgrEND PROC sugruppenausbitleiste;BITLEISTE PROC +bitleisteallesugruppen(BITLEISTE VAR v,BITLEISTE CONST c):BITLEISTE VAR b:= +sugrupurleiste;FOR jFROM 1UPTO leistenlaengeREP b(j):=v(j)OR c(j)PER ;bEND +PROC bitleisteallesugruppen;BITLEISTE PROC bitleistegemeinsamesugruppen( +BITLEISTE CONST v,c):BITLEISTE VAR b:=sugrupurleiste;FOR jFROM 1UPTO +leistenlaengeREP b(j):=v(j)AND c(j)PER ;bEND PROC +bitleistegemeinsamesugruppen;BOOL PROC gibtesgemeinsamesugruppen(BITLEISTE +CONST v,c):BITLEISTE VAR b:=sugrupurleiste;FOR jFROM 1UPTO leistenlaengeREP b +(j):=v(j)AND c(j);lowbit:=lowestset(b(j));IF lowbit<>-1THEN LEAVE +gibtesgemeinsamesugruppenWITH TRUE FI ;PER ;FALSE END PROC +gibtesgemeinsamesugruppen;BITLEISTE PROC bitleistenichtgemeinsamesugruppen( +BITLEISTE CONST v,c):BITLEISTE VAR b:=sugrupurleiste;FOR jFROM 1UPTO +leistenlaengeREP b(j):=v(j)XOR c(j)PER ;bEND PROC +bitleistenichtgemeinsamesugruppen;PROC sammlebitleisten(TEXT CONST +kennungstext,INT CONST richtigepos,BITLEISTE VAR bitleiste):resetbitleiste( +bitleiste);toline(lvdatei,1);col(lvdatei,1);WHILE NOT eof(lvdatei)REP downety +(lvdatei,kennungstext);IF col(lvdatei)=richtigeposCAND NOT eof(lvdatei)THEN +bitleiste:=bitleisteallesugruppen(bitleiste,lv1eintrag(lineno(lvdatei)));FI ; +positionieren;PER .positionieren:col(lvdatei,col(lvdatei)+1).END PROC +sammlebitleisten;TEXT PROC jgstzukopplung(TEXT CONST kennungstext):TEXT VAR +lv:="";toline(lvdatei,1);col(lvdatei,1);WHILE NOT eof(lvdatei)REP downety( +lvdatei,kennungstext);IF col(lvdatei)=beginnlvkopplungCAND NOT eof(lvdatei) +THEN readrecord(lvdatei,lv);LEAVE jgstzukopplungWITH text(lv,laengejgst)FI ; +positionieren;PER ;"".positionieren:col(lvdatei,col(lvdatei)+1).END PROC +jgstzukopplung;TEXT PROC ungueltigesergebnis(TEXT CONST kennung):IF kennung= +kennunglvTHEN ergebnis:=laengelv*fehlerzeichenELIF kennung=kennungzeitOR +kennung=kennungzugelassenezeitTHEN ergebnis:=laengezeit*fehlerzeichenELIF +kennung=kennungparapheTHEN ergebnis:=laengeparaphe*fehlerzeichenELIF kennung= +kennungkopplungTHEN ergebnis:=laengekopplung*fehlerzeichenELIF kennung= +kennungsugruppeTHEN ergebnis:=laengesugruppe*fehlerzeichenELIF kennung= +kennungraumOR kennung=kennungwunschraumOR kennung=kennungersatzraumTHEN +ergebnis:=laengeraum*fehlerzeichenELIF kennung=kennungwochenstdTHEN ergebnis +:=laengewochenstd*fehlerzeichenELSE ergebnis:=fehlerzeichenFI ;ergebnisEND +PROC ungueltigesergebnis;PROC raumcat(BOOL VAR b):IF wert(fnrschlsachgebiet)= +dbraeumeTHEN plausiraeumeCAT text(wert(fnrschlschluessel),laengeraum)+trenner +;ELIF wert(fnrschlsachgebiet)>dbraeumeCOR dbstatus<>0THEN b:=TRUE FI END +PROC raumcat;PROC paraphencat(BOOL VAR b):IF dbstatus<>0THEN b:=TRUE ELSE +plausiparaphenCAT text(wert(dnrlehrer+1),laengeparaphe);plausiparaphenCAT +trennerFI END PROC paraphencat;PROC erstelleplausizeiten(BOOL VAR b):IF wert( +fnrzrsj)>gewschuljCOR wert(fnrzrhj)<>gewhalbjCOR dbstatus<>0THEN b:=TRUE +ELSE IF wert(fnrzrkennungteil)=zeitrastersperreTHEN replace(plausizeiten, +intwert(fnrzrtagstunde),"1")FI ;FI END PROC erstelleplausizeiten;TEXT PROC +stuplanzeile(INT CONST zeit):INT VAR std:=konvertierezeit(zeit);TEXT VAR +eintrag:="";IF std=0THEN laengestuplaneintrag*fehlerzeichenELSE toline( +stuplandatei,std);eintrag:="";readrecord(stuplandatei,eintrag);eintragFI END +PROC stuplanzeile;BOOL PROC instuplanzeile(TEXT CONST quelle,muster,INT +CONST richtigepos,INT VAR findpos):INT VAR suchab:=1,aktpos;WHILE pos(quelle, +muster,suchab)<>0REP aktpos:=pos(quelle,muster,suchab);IF aktposMOD +laengestuplaneintrag=richtigeposTHEN findpos:=aktpos;LEAVE instuplanzeile +WITH TRUE ELSE suchab:=aktpos+1FI PER ;FALSE END PROC instuplanzeile;INT +PROC erstezeileindatei(FILE VAR datei,TEXT CONST muster,INT CONST suchab, +richtigepos):toline(datei,suchab);col(datei,1);WHILE NOT eof(datei)REP +downety(datei,muster);IF col(datei)=richtigeposTHEN LEAVE erstezeileindatei +WITH lineno(datei)FI ;positionierenPER ;0.positionieren:col(datei,col(datei)+ +1).END PROC erstezeileindatei;PROC schreibeerstellungszeit:INT VAR +fehlerstatus;IF NOT exists(stuplandatenraum)THEN stundenplanerstellen(date+ +blank+timeofday,fehlerstatus)FI END PROC schreibeerstellungszeit;INT PROC +konvertierezeit(INT CONST tagstd):IF tagstd<1THEN 0ELIF tagstd<=letztestunde +THEN tagstdELIF tagstd>schultage*100+samstagstdTHEN 0ELIF tagstdMOD 100> +stdprotagTHEN 0ELIF tagstdMOD 100=0THEN 0ELSE ((tagstdDIV 100)-1)*stdprotag+( +tagstdMOD 100)FI END PROC konvertierezeit;PROC setzebit(INT CONST bitnr):IF +bitnrDIV bits+1>leistenlaengeTHEN LEAVE setzebitFI ;setbit(sugrupleiste(bitnr +DIV bits+1),bitnrMOD bits)END PROC setzebit;BOOL PROC istjgst(TEXT CONST t): +pos(klstjgst,trenner+t+trenner)>0END PROC istjgst;BOOL PROC istklgr(TEXT +CONST t):pos(plausiklgr,trenner+t+trenner)>0END PROC istklgr;PROC putds(FILE +VAR file,TEXT CONST t):insertrecord(file);writerecord(file,t);down(file);END +PROC putds;TEXT PROC formatjgst(TEXT CONST t):subtext("0"+compress(text(t, +laengejgst)),length("0"+compress(text(t,laengejgst)))-1)END PROC formatjgst; +TEXT PROC lvnulldatenraum:lvnull+gewhalbj+punkt+gewschuljEND PROC +lvnulldatenraum;TEXT PROC lveinsdatenraum:lveins+gewhalbj+punkt+gewschuljEND +PROC lveinsdatenraum;TEXT PROC sgnulldatenraum:sgnull+gewhalbj+punkt+ +gewschuljEND PROC sgnulldatenraum;TEXT PROC sgeinsdatenraum:sgeins+gewhalbj+ +punkt+gewschuljEND PROC sgeinsdatenraum;TEXT PROC stuplandatenraum:stuplan+ +gewhalbj+punkt+gewschuljEND PROC stuplandatenraum;TEXT PROC bezderlv(TEXT +CONST lvzeile):subtext(lvzeile,beginnlvbez,endelvbez)END PROC bezderlv;TEXT +PROC kopplungderlv(TEXT CONST lvzeile):subtext(lvzeile,beginnlvkopplung, +endelvkopplung)END PROC kopplungderlv;TEXT PROC paraphederlv(TEXT CONST +lvzeile):subtext(lvzeile,beginnlvparaphe,endelvparaphe)END PROC paraphederlv; +TEXT PROC wochenstdderlv(TEXT CONST lvzeile):subtext(lvzeile, +beginnlvwochenstd,endelvwochenstd)END PROC wochenstdderlv;TEXT PROC +wunschraumderlv(TEXT CONST lvzeile):subtext(lvzeile,beginnlvraumgr1, +endelvraumgr1)END PROC wunschraumderlv;TEXT PROC ersatzraumderlv(TEXT CONST +lvzeile):subtext(lvzeile,beginnlvraumgr2,endelvraumgr2)END PROC +ersatzraumderlv;END PACKET stundenplanschnittstelle + diff --git a/app/schulis/2.2.1/src/4.teilstdpl fach lehrer b/app/schulis/2.2.1/src/4.teilstdpl fach lehrer new file mode 100644 index 0000000..c9b0972 --- /dev/null +++ b/app/schulis/2.2.1/src/4.teilstdpl fach lehrer @@ -0,0 +1,124 @@ +PACKET teilstdplfachlehrerDEFINES stdplfachlehrerspezielleteile:LET +eingangsmaske="ms teilstdpl fach lehrer",maskenanfpos=2,spaltentrenner=":", +niltext="",blank=" ",komma=",",null=0,ueberschriftenzeilen=2,ausgkopflaenge=2 +,ausgfeldlaenge=1,anzahlderobjekteprobildschirm=17,spalte1fach=4, +spalte2paraphe=6,spalte3art=3,spalte4lvs=59,mnrgewaehltezeitenfalsch=397, +mnrkeinestdplandatenvorhanden=366,mnrauswahlnichtsinnvoll=56, +mnrbearbeitetwerden=352;TEXT VAR spaltenstrich,stdplfachlehreruebbild, +stdplfachlehreruebdruck1:= +"Übersicht über Lehrbefähigte und ihren Stundenplan zu bestimmten Zeiten", +stdplfachlehreruebdruck2,spaltenueberschrift,anfbuchstabe,neueranfbuchstabe:= +"",teiltextmeldung1:="die Fächer mit Anfangsbuchstaben: ",teiltextmeldung2:= +"das Fach: ",angegebenesfach,fach,altesfach,paraphe,art,lehrveranstaltung, +schuljahr,halbjahr,sjhjaufber;INT VAR status,index:=dnrlehrbefaehigungen, +eingabestatus,lesestart,bildanfang,druckzeilenzahl,zeit,zaehler;LET +maxanzahlzeiten=6;ROW maxanzahlzeitenINT VAR zeiten;BOOL VAR +geplantessjgewaehlt,mitscanner,bestfachgewaehlt;LET AUSGFELD =ROW +ausgfeldlaengeTEXT ,AUSGKOPF =ROW ausgkopflaengeTEXT ;AUSGFELD VAR ausgfeld; +AUSGKOPF VAR ausgkopf;BOOL PROC multistop:BOOL VAR a;IF bestfachgewaehltTHEN +a:=wert(fnrlbfach)=angegebenesfachAND dbstatus=okELSE a:=dbstatus=0FI ;aEND +PROC multistop;BOOL PROC multistopsim:setzebestandende(FALSE );BOOL VAR b:= +multistop;setzebestandende(NOT b);bEND PROC multistopsim;PROC +stdplfachlehrerspezielleteile(INT CONST nr):SELECT nrOF CASE 1: +stdplfachlehrerdialogvorbereitenCASE 2:stdplfachlehrereingabenrichtigCASE 3: +stdplfachlehrerlistenvorbereitenCASE 4:stdplfachlehrerdruckvorbereitenCASE 5: +stdplfachlehrerseitedruckenCASE 6:stdplfachlehrerbildschirmvorbereitenCASE 7: +stdplfachlehrerseitezeigenENDSELECT .END PROC stdplfachlehrerspezielleteile; +PROC stdplfachlehrerdialogvorbereiten:stdplfachlehreruebbild:=text( +vergleichsknoten);setzeanfangswerte(eingangsmaske,maskenanfpos);END PROC +stdplfachlehrerdialogvorbereiten;PROC stdplfachlehrereingabenrichtig:LET +fnrfach=2,fnrakthj=69,fnrgeplhj=70,fnrausgbild=71,fnrausgdruck=72; +standardpruefe(5,fnrausgbild,fnrausgdruck,null,niltext,status);IF status<>0 +THEN infeld(status);setzeeingabetest(FALSE )ELSE standardpruefe(5,fnrakthj, +fnrgeplhj,null,niltext,status);IF status<>0THEN infeld(status); +setzeeingabetest(FALSE )ELSE IF NOT anzahldergewaehltenzeitenkorrektTHEN +infeld(3);standardmeldung(mnrgewaehltezeitenfalsch,niltext);setzeeingabetest( +FALSE )ELSE spaltenstrich:="----+------+---+";spaltenstrichCAT zeit* +"--------+";parametersetzen;IF NOT stundenplandatenvorhandenTHEN infeld( +fnrakthj);standardmeldung(mnrkeinestdplandatenvorhanden,niltext); +setzeeingabetest(FALSE )ELSE setzeausgabedrucker(standardmaskenfeld( +fnrausgbild)=niltext);setzeeingabetest(TRUE )FI ;FI ;FI ;FI . +anzahldergewaehltenzeitenkorrekt:INT VAR unterrichtsstd,std;zeit:=0; +spaltenueberschrift:="Fach Lehrer Art ";FOR stdFROM 3UPTO 68REP IF +standardmaskenfeld(std)<>niltextTHEN zeitINCR 1;IF zeit<=maxanzahlzeitenTHEN +unterrichtsstd:=std-2;zeiten(zeit):=unterrichtsstd; +spaltenueberschriftweiterzusammenbauen(unterrichtsstd);FI ;FI ;PER ;zeit<= +maxanzahlzeitenAND zeit>0.parametersetzen:angegebenesfach:=standardmaskenfeld +(fnrfach);bestfachgewaehlt:=angegebenesfach<>niltext;mitscanner:= +bestfachgewaehlt;geplantessjgewaehlt:=standardmaskenfeld(fnrakthj)=niltext; +schuljahr:=schulkenndatum("Schuljahr");halbjahr:=schulkenndatum( +"Schulhalbjahr");IF geplantessjgewaehltTHEN geplanteshjundsjberechnen( +halbjahr,schuljahr);FI ;sjhjaufber:=subtext(schuljahr,1,2)+"/";sjhjaufberCAT +subtext(schuljahr,3,4)+komma+blank;sjhjaufberCAT halbjahr;. +stundenplandatenvorhanden:stundenplanhalbjahrsetzen(halbjahr,schuljahr); +stundenplanbasisundstundenplanholen(eingabestatus);eingabestatus=0END PROC +stdplfachlehrereingabenrichtig;PROC spaltenueberschriftweiterzusammenbauen( +INT VAR unterrichtsstd):INT VAR x;TEXT VAR hilfstext;x:=(unterrichtsstd-1) +DIV 12;IF x=0THEN hilfstext:="Mo "ELIF x=1THEN hilfstext:="Di "ELIF x=2THEN +hilfstext:="Mi "ELIF x=3THEN hilfstext:="Do "ELIF x=4THEN hilfstext:="Fr " +ELSE hilfstext:="Sa "FI ;x:=unterrichtsstdMOD 12;IF x=0THEN hilfstextCAT +"12 "ELSE hilfstextCAT text(x,2)+4*blankFI ;spaltenueberschriftCAT +hilfstext;END PROC spaltenueberschriftweiterzusammenbauen;PROC +stdplfachlehrerlistenvorbereiten:BOOL VAR b;altesfach:=niltext;inittupel( +dnrlehrbefaehigungen);initspalten;setzeidentiwert("");initobli( +anzahlderobjekteprobildschirm);putwert(fnrlbfach,angegebenesfach);IF +bestfachgewaehltTHEN objektlistestarten(index,angegebenesfach,fnrlbparaphe, +TRUE ,b)ELSE objektlistestarten(index,angegebenesfach,0,TRUE ,b);FI ; +setzebestandende(NOT multistopCOR b);END PROC +stdplfachlehrerlistenvorbereiten;PROC stdplfachlehrerbildschirmvorbereiten: +LET fnrausganf=2;standardkopfmaskeaktualisieren(stdplfachlehreruebbild); +bildanfang:=fnrausganf;setzebildanfangsposition(bildanfang); +setzespaltenbreite(bildbreite);spaltenweise(spaltenueberschrift);ausgfeld(1) +:=zeile;ausgfeld(1)IN ausgabepos;erhoeheausgabeposumeins;spaltenweise( +spaltenstrich);ausgfeld(1):=zeile;ausgfeld(1)IN ausgabepos; +erhoeheausgabeposumeins;setzebildanfangsposition(4);spaltenbreitensetzen;END +PROC stdplfachlehrerbildschirmvorbereiten;PROC spaltenbreitensetzen: +initspalten;setzespaltentrenner(spaltentrenner);setzespaltenbreite( +spalte1fach);setzespaltenbreite(spalte2paraphe);setzespaltenbreite(spalte3art +);setzespaltenbreite(spalte4lvs);END PROC spaltenbreitensetzen;PROC +stdplfachlehrerseitezeigen:altesfach:=niltext;blaettern(PROC (INT CONST ) +teilstdplfachlehrerzeigen,aktion,TRUE ,mitscanner,BOOL PROC multistop);END +PROC stdplfachlehrerseitezeigen;PROC teilstdplfachlehrerzeigen(INT CONST x): +datenauslehrbefundstdplholen;datenauslehrbefundstdplaufbereitenbild; +datenauslehrbefundstdplaufbildschirmEND PROC teilstdplfachlehrerzeigen;PROC +datenauslehrbefundstdplholen:TEXT VAR lv,raum,par;lehrveranstaltung:=niltext; +paraphe:=wert(fnrlbparaphe);art:=wert(fnrlbart);fach:=wert(fnrlbfach);FOR +zaehlerFROM 1UPTO zeitREP planeintraglesen(zeiten(zaehler),"P",paraphe,lv, +raum,par);lehrveranstaltungCAT text(lv,8)+spaltentrennerPER ;END PROC +datenauslehrbefundstdplholen;PROC datenauslehrbefundstdplaufbereitenbild:IF +altesfach<>fachTHEN spaltenweise(fach);altesfach:=fach;ELSE spaltenweise( +blank);FI ;spaltenweise(paraphe);spaltenweise(art);spaltenweise( +lehrveranstaltung)END PROC datenauslehrbefundstdplaufbereitenbild;PROC +datenauslehrbefundstdplaufbildschirm:INT VAR i;FOR iFROM 1UPTO ausgfeldlaenge +REP ausgfeld(i):=zeile;ausgfeld(i)IN ausgabepos;erhoeheausgabeposumeins;PER ; +END PROC datenauslehrbefundstdplaufbildschirm;PROC +stdplfachlehrerdruckvorbereiten:setzebestandende(FALSE );anfbuchstabe:=" "; +druckvorbereiten;druckzeilenzahl:=drucklaenge(ueberschriftenzeilen)- +ausgkopflaenge;stdplfachlehreruebdruck2:="Schulhalbjahr "; +stdplfachlehreruebdruck2CAT sjhjaufber;stdplfachlehreruebdruck2CAT +". Halbjahr";initdruckkopf(stdplfachlehreruebdruck1,stdplfachlehreruebdruck2) +;inittupel(index);putwert(fnrlbfach,angegebenesfach);lesenvorbereitendruck( +PROC (INT CONST ,BOOL PROC ,INT VAR )scanforward,BOOL PROC multistop); +setzebestandende(NOT multistop)END PROC stdplfachlehrerdruckvorbereiten;PROC +stdplfachlehrerseitedrucken:druckkopfschreiben;initspalten;setzespaltenbreite +(bildbreite);spaltenweise(spaltenueberschrift);ausgfeld(1):=zeile;ausgfeld(1) +IN ausgabepos;druckzeileschreiben(ausgfeld(1));spaltenweise(spaltenstrich); +ausgfeld(1):=zeile;druckzeileschreiben(ausgfeld(1));spaltenbreitensetzen; +altesfach:=niltext;seitedrucken(PROC (INT VAR )stdplfachlehrerdrucken, +druckzeilenzahl,ausgfeldlaenge,BOOL PROC multistopsim);seitenwechsel;END +PROC stdplfachlehrerseitedrucken;PROC stdplfachlehrerdrucken(INT VAR +zeilenzaehler):LET markiert="#";datenauslehrbefundstdplholen; +ggflmeldunganfbuchstabe;stdplfachlehreraufbereitendruck;zeilenzaehlerINCR +ausgfeldlaenge;stdplfachlehrerindruckdatei.ggflmeldunganfbuchstabe:IF +anfbuchstabegeaendertTHEN meldunganfbuchstabeFI .anfbuchstabegeaendert: +neueranfbuchstabe:=fachSUB 1;anfbuchstabe<>neueranfbuchstabe. +meldunganfbuchstabe:IF bestfachgewaehltTHEN standardmeldung( +mnrbearbeitetwerden,teiltextmeldung2+fach+markiert);ELSE standardmeldung( +mnrbearbeitetwerden,teiltextmeldung1+neueranfbuchstabe+markiert);FI ; +anfbuchstabe:=neueranfbuchstabeEND PROC stdplfachlehrerdrucken;PROC +stdplfachlehreraufbereitendruck:datenauslehrbefundstdplaufbereitenbild; +ausgfeld(1):=zeile;END PROC stdplfachlehreraufbereitendruck;PROC +stdplfachlehrerindruckdatei:INT VAR i;FOR iFROM 1UPTO ausgfeldlaengeREP +druckzeileschreiben(ausgfeld(1))PER .END PROC stdplfachlehrerindruckdatei; +END PACKET teilstdplfachlehrer + diff --git a/app/schulis/2.2.1/src/4.uv und kopplungen bearbeiten b/app/schulis/2.2.1/src/4.uv und kopplungen bearbeiten new file mode 100644 index 0000000..2733d0d --- /dev/null +++ b/app/schulis/2.2.1/src/4.uv und kopplungen bearbeiten @@ -0,0 +1,319 @@ +PACKET uvundkopplungenbearbeitenDEFINES uvukstdvproc,uvukspeichern,uvuklisten +,uvukvorjparaphe,uvukpruefbearb:LET ausknr=746,auskende="*",ra="c02 raeume", +sj="Schuljahr",hj="Schulhalbjahr",eingmaske="ms eing uv und kopplungen", +bearbmaske="ms bearb uv und kopplungen",kennzeichnungakt="aktuell", +kennzeichnunggepl="geplant",ausgparam="#",leereparaphe="",trenner="�",bearbzl +=18,letztesfld=163,anzeingfld=10,laengekopplung=8,laengejgst=2,laengefach=2, +krlvjgst=2,fldjgst=3,krlvfa=4,fldfa=5,krlvkopp=6,fldkopp=7,krlvpar=8,fldpar=9 +,fldjahr=10,meldg0=56,meldg1=325,meldg2=326,meldg3=69,meldg4=60,meldg6=305, +meldg7=355,meldg8=353,meldg9=354,meldg11=149,meldg12=142,meldg13=50,meldg14= +63,meldg15=327,meldg16=328,meldg17=329,meldg18=360,meldg19=318,meldg20=310, +meldg21=387,meldg22=388,meldg23=352;ROW anzeingfldTEXT VAR eingbs;ROW bearbzl +STRUCT (TEXT kopplg,fakenn,lehrer,ROW 4TEXT klgr,ROW 2TEXT rgr)VAR dbinh;INT +VAR i,k,z,zz,letztepos:=2,index:=0,fall:=0,aktpos,suchpos,anzdbsaetze;INT +VAR aktzeile,jgst,fachsoll,fachist,lehrersoll,lehrerist,lehrerimfach;TEXT +VAR lv,sicherungstupel,allefaecher,fachbez,fachgrbez,fach,paraphe, +lehrbeflehrer,liste;TEXT VAR klgrkatalog,jgstkatalog,rgrkatalog,lehrv:="", +fachkatalog:="",klgrpruefkatalog,parkatalog,sollstdkatalog,aktschgrkatalog, +geplschgrkatalog;TEXT VAR schj,schhj:="0",aktschhj:="0",aktschj:="0", +geplschhj:="0",geplschj:="0",aenderungskennzeichen:="";TEXT VAR plausikopp, +plausipa,plausilv,jgstsugrp,plausijgst;TEXT VAR kopplung,lvfake,lehrer,sgr1, +sgr2,sgr3,sgr4,rgr1,rgr2,maskenkopf;BOOL VAR istfehler:=FALSE , +koppparnichtgeprueft:=TRUE ,saetzeunveraendert:=TRUE ,ohnefehler:=TRUE ;PROC +holeakthj:aktschhj:=schulkenndatum(hj);aktschj:=schulkenndatum(sj);geplschhj +:=aktschhj;geplschj:=aktschj;geplanteshjundsjberechnen(geplschhj,geplschj) +END PROC holeakthj;PROC holeaktdatenpruefung:i:=100;statleseschleife( +dnrfaecher,"","",fnrffach,fnrffach,PROC spezcat);i:=103;statleseschleife( +dnrlehrer,"","",fnrlparaphe,fnrlparaphe,PROC spezcat);END PROC +holeaktdatenpruefung;PROC holeaktdatenspeicherung:i:=101;statleseschleife( +dnrklassengruppen,"","",fnrkgklassengrp,fnrkgklassengrp,PROC spezcat);i:=102; +statleseschleife(dnrraumgruppen,"","",fnrrgraumgrp,fnrrgraumgrp,PROC spezcat) +;i:=104;statleseschleife(dnrschluessel,ra,"",fnrschlsachgebiet, +fnrschlschluessel,PROC spezcat);i:=105;statleseschleife(dnraktschuelergruppen +,"","",fnrsgrpsj,fnrsgrphj,PROC spezcat);i:=106;statleseschleife( +dnraktschuelergruppen,"","",fnrsgrpsj,fnrsgrphj,PROC spezcat);END PROC +holeaktdatenspeicherung;PROC initrows:IF fachkatalog=""THEN fachkatalog:= +trenner;klgrkatalog:=trenner;klgrpruefkatalog:=trenner;jgstkatalog:= +"�5�05�6�06�7�07�8�08�";jgstkatalogCAT "9�09�10�11�12�13�0�00�"; +aktschgrkatalog:=trenner;geplschgrkatalog:=trenner;rgrkatalog:=trenner; +parkatalog:=trenner;sollstdkatalog:=trenner;FOR iFROM 1UPTO anzeingfldREP +eingbs(i):=""PER ;FOR iFROM 1UPTO bearbzlREP dbinh(i).kopplg:="";dbinh(i). +fakenn:="";dbinh(i).lehrer:="";dbinh(i).klgr(1):="";dbinh(i).klgr(2):=""; +dbinh(i).klgr(3):="";dbinh(i).klgr(4):="";dbinh(i).rgr(1):="";dbinh(i).rgr(2) +:="";PER ;FI END PROC initrows;PROC uvukpruefbearb:standardmeldung(meldg3," " +);IF schhj="0"THEN holeakthjFI ;merkeeingsch;istfehler:=FALSE ;gibteskennz; +stellejahrfest;putwert(fnrlvsj,schj);putwert(fnrlvhj,schhj);putintwert( +fnrlvjgst,0);putwert(fnrlvfachkennung,"");search(dnrlehrveranstaltungen, +FALSE );IF dbstatus<>okCAND wert(fnrlvsj)<>schjCAND wert(fnrlvhj)<>schhjTHEN +dateileerFI ;pruefung;erfasstelvausgeben;standardnproc.gibteskennz:letztepos +:=2;IF eingbs(krlvjgst)<>""THEN fall:=2;LEAVE gibteskennzELIF eingbs(krlvfa) +<>""THEN fall:=4;LEAVE gibteskennzELIF eingbs(krlvkopp)<>""THEN fall:=6; +LEAVE gibteskennzELIF eingbs(krlvpar)<>""THEN fall:=8;LEAVE gibteskennzELSE +zurueckmitmeldg(meldg0,1,letztepos,"");LEAVE uvukpruefbearbFI ;IF eingbs(fall ++1)<>""THEN letztepos:=fall+1ELSE letztepos:=fallFI .stellejahrfest:IF eingbs +(fldjahr)=""THEN schhj:=geplschhj;schj:=geplschj;aenderungskennzeichen:= +kennzeichnunggeplELSE schhj:=aktschhj;schj:=aktschj;aenderungskennzeichen:= +kennzeichnungaktFI .pruefung:IF fachkatalog=trennerTHEN holeaktdatenpruefung +FI ;prueferest(fall);IF istfehlerTHEN zurueckmitmeldg(meldg0,1,letztepos,""); +LEAVE uvukpruefbearbFI ;IF fall=2THEN IF eingbs(fldjgst)<>""THEN pruefejgst; +FI ;index:=dnrlehrveranstaltungen;ELIF fall=4THEN pruefedbfld(eingbs(fldfa), +fachkatalog,fldfa);index:=ixlvsjhjkennELIF fall=6THEN pruefekopplungsnr;index +:=ixlvsjhjkopp;ELSE pruefedbfld(eingbs(fldpar),parkatalog,fldpar);index:= +ixlvsjhjparFI ;IF istfehlerTHEN LEAVE uvukpruefbearbFI .pruefekopplungsnr: +putwert(fnrlvsj,schj);putwert(fnrlvhj,schhj);putwert(fnrlvkopplung,eingbs( +fldkopp));search(ixlvsjhjkopp);IF dbstatus=1COR dbstatus=3THEN +koppnichtgefundenFI .koppnichtgefunden:zurueckmitmeldg(meldg1,1,fldkopp,""); +LEAVE uvukpruefbearb.dateileer:zurueckmitmeldg(meldg2,1,letztepos,"");LEAVE +uvukpruefbearb.END PROC uvukpruefbearb;PROC prueferest(INT CONST feldnr):FOR +iFROM 2UPTO feldnr-1REP IF eingbs(i)<>""THEN fehlerFI PER ;FOR iFROM feldnr+2 +UPTO 9REP IF eingbs(i)<>""THEN fehlerFI PER .fehler:istfehler:=TRUE ; +letztepos:=i;LEAVE prueferest.END PROC prueferest;PROC pruefejgst:IF compress +(eingbs(fldjgst))="0"COR eingbs(fldjgst)="00"THEN LEAVE pruefejgstELIF int( +eingbs(fldjgst))>4CAND int(eingbs(fldjgst))<14THEN LEAVE pruefejgstELSE +zurueckmitmeldg(meldg6,1,fldjgst,"");istfehler:=TRUE ;FI .END PROC pruefejgst +;PROC pruefedbfld(TEXT CONST objekt,katalog,INT CONST feld):plausijgst:=text( +standardmaskenfeld(i*9-6),2);IF objekt=""THEN LEAVE pruefedbfldELIF katalog= +jgstkatalogTHEN IF pos(jgstkatalog,trenner+objekt+trenner)=0THEN +pruefeaufschuelergruppeELSE pruefejgstenFI ;ELIF pos(katalog,trenner+objekt+ +trenner)=0THEN istfehler:=TRUE ;IF katalog=fachkatalogTHEN zurueckmitmeldg( +meldg11,1,feld,objekt+"#")ELIF katalog=parkatalogTHEN zurueckmitmeldg(meldg12 +,1,feld,objekt+"#")ELIF katalog=rgrkatalogTHEN zurueckmitmeldg(meldg16,1,feld +,objekt+"#")FI FI .pruefeaufschuelergruppe:IF eingbs(fldjahr)<>""THEN IF pos( +aktschgrkatalog,trenner+text(int(plausijgst))+objekt+trenner)<>0THEN LEAVE +pruefedbfldELSE pruefeaufklgrFI ELIF pos(geplschgrkatalog,trenner+text(int( +plausijgst))+objekt+trenner)<>0THEN LEAVE pruefedbfldELSE pruefeaufklgrFI . +pruefeaufklgr:IF pos(klgrkatalog,trenner+objekt+trenner)>0THEN IF +jgstnichtnullTHEN pruefejgstinklgrFI ELSE istfehler:=TRUE ;zurueckmitmeldg( +meldg15,1,feld,objekt+"#")FI .pruefejgsten:IF int(plausijgst)<>int(objekt) +CAND int(plausijgst)<>0THEN istfehler:=TRUE ;zurueckmitmeldg(meldg9,1,feld, +objekt+"#"+plausijgst+"#");FI .jgstnichtnull:plausijgst<>"00". +pruefejgstinklgr:zz:=0;jgstsugrp:="";zz:=pos(klgrpruefkatalog,trenner+objekt+ +trenner)+length(objekt)+2;jgstsugrp:=subtext(klgrpruefkatalog,zz,pos( +klgrpruefkatalog,trenner,zz)-1);FOR zzFROM 1UPTO length(jgstsugrp)DIV 2REP +IF subtext(jgstsugrp,zz*2-1,zz*2)<>plausijgstTHEN istfehler:=TRUE ; +zurueckmitmeldg(meldg9,1,feld,objekt+"#"+plausijgst+"#");LEAVE pruefedbfldFI +PER ;END PROC pruefedbfld;PROC pruefekopplgpar(TEXT CONST kopp,lv,pa,INT +CONST feldnr):plausikopp:=kopp;plausipa:=pa;plausilv:=lv;pruefeindb; +pruefeaufbs.pruefeindb:istfehler:=FALSE ;inittupel(dnrlehrveranstaltungen); +putwert(fnrlvkopplung,plausikopp);z:=feldnr;statleseschleife(ixlvsjhjkopp, +schj,schhj,fnrlvsj,fnrlvhj,PROC suchekopplungen);IF istfehlerTHEN infeld( +feldnr);LEAVE pruefekopplgparFI .pruefeaufbs:INT VAR z;FOR zFROM 1UPTO i-1 +REP IF plausikopp=standardmaskenfeld(z*9-7)THEN IF plausipa= +standardmaskenfeld(z*9-5)THEN istfehler:=TRUE ;zurueckmitmeldg(meldg8,1, +feldnr,plausipa+"#"+plausikopp+"#"+text(standardmaskenfeld(z*9-6),2)+dbinh(z) +.fakenn+"#");LEAVE pruefekopplgparFI ;FI ;PER ;FOR zFROM i+1UPTO bearbzlREP +IF plausikopp=standardmaskenfeld(z*9-7)THEN IF plausipa=standardmaskenfeld(z* +9-5)THEN istfehler:=TRUE ;zurueckmitmeldg(meldg8,1,feldnr,plausipa+"#"+ +plausikopp+"#"+text(standardmaskenfeld(z*9-6),2)+dbinh(z).fakenn+"#");LEAVE +pruefekopplgparFI ;FI ;PER .END PROC pruefekopplgpar;PROC suchekopplungen( +BOOL VAR b):IF wert(fnrlvsj)=schjCAND wert(fnrlvhj)=schhjCAND wert( +fnrlvkopplung)=plausikoppCAND dbstatus=0THEN ueberpruefeparapheELSE b:=TRUE +FI .ueberpruefeparaphe:IF wert(fnrlvparaphe)=plausipaCAND nichtplausilvTHEN +istfehler:=TRUE ;zurueckmitmeldg(meldg8,1,z,plausipa+"#"+plausikopp+"#"+ +formattext(wert(fnrlvjgst))+wert(fnrlvfachkennung)+"#");b:=TRUE ;LEAVE +suchekopplungenFI .nichtplausilv:formattext(wert(fnrlvjgst))<>text(plausilv,2 +)COR wert(fnrlvfachkennung)<>dbinh(i).fakenn.END PROC suchekopplungen;PROC +zurueckmitmeldg(INT CONST meldg,ruecksprung,feld,TEXT CONST markiert):IF +ruecksprung>0THEN return(ruecksprung)FI ;standardmeldung(meldg,markiert);IF +feld>0THEN infeld(feld)FI END PROC zurueckmitmeldg;PROC uvukstdvproc:initrows +;fachbez:=trenner;fachgrbez:=trenner;gibeingschaus;standardnproc.END PROC +uvukstdvproc;PROC gibeingschaus:standardstartproc(eingmaske);gibeingbsaus; +standardfelderausgeben;infeld(letztepos).gibeingbsaus:FOR iFROM 2UPTO +anzeingfldREP standardmaskenfeld(eingbs(i),i);IF eingbs(i)<>""THEN letztepos +:=iFI PER .END PROC gibeingschaus;PROC erfasstelvausgeben:anzdbsaetze:=0;k:=1 +;pruefobsaetzevorhanden;loeschefelder;maskenkopf:=text(vergleichsknoten)+" "+ +schhj+"."+" "+subtext(schj,1,2)+"/"+subtext(schj,3);standardstartproc( +bearbmaske);standardkopfmaskeaktualisieren(maskenkopf);startebildschirmblock( +index,bearbzl-1);bildschirmblock(PROC gibbearbzeileaus,BOOL PROC (INT CONST ) +pruefung,i);standardfelderausgeben;infeld(2).pruefobsaetzevorhanden:putwert( +fnrlvsj,schj);putwert(fnrlvhj,schhj);putintwert(fnrlvjgst,int(eingbs(fldjgst) +));putwert(fnrlvfachkennung,eingbs(fldfa));putwert(fnrlvkopplung,eingbs( +fldkopp));putwert(fnrlvparaphe,eingbs(fldpar));search(index,FALSE );IF +dbstatus<>okTHEN zurueckmitmeldg(meldg2,1,letztepos,"");LEAVE +erfasstelvausgebenELSE pruefobsatzrichtigFI .pruefobsatzrichtig:IF wert( +fnrlvsj)=schjCAND wert(fnrlvhj)=schhjTHEN IF fall=1CAND eingbs(fldjgst)<>"" +CAND intwert(fnrlvjgst)<>int(eingbs(fldjgst))THEN gibfehlerausELIF fall=2 +CAND eingbs(fldfa)<>""CAND text(wert(fnrlvfachkennung),2)<>eingbs(fldfa)THEN +gibfehlerausELIF fall=3CAND eingbs(fldkopp)<>""CAND wert(fnrlvkopplung)<> +eingbs(fldkopp)THEN gibfehlerausELIF fall=4CAND eingbs(fldpar)<>""CAND wert( +fnrlvparaphe)<>eingbs(fldpar)THEN gibfehlerausFI ELSE gibfehlerausFI . +gibfehleraus:zurueckmitmeldg(meldg2,1,letztepos,"");LEAVE erfasstelvausgeben. +END PROC erfasstelvausgeben;PROC loeschefelder:FOR iFROM 1UPTO bearbzlREP +dbinh(i).kopplg:="";dbinh(i).fakenn:="";dbinh(i).lehrer:="";dbinh(i).klgr(1) +:="";dbinh(i).klgr(2):="";dbinh(i).klgr(3):="";dbinh(i).klgr(4):="";dbinh(i). +rgr(1):="";dbinh(i).rgr(2):="";PER ;FOR iFROM 2UPTO letztesfldREP +standardmaskenfeld("",i)PER .END PROC loeschefelder;PROC gibbearbzeileaus: +kopplung:=wert(fnrlvkopplung);lvfake:=wert(fnrlvfachkennung);lehrer:=wert( +fnrlvparaphe);sgr1:=wert(fnrlvklgrp1);sgr2:=wert(fnrlvklgrp2);sgr3:=wert( +fnrlvklgrp3);sgr4:=wert(fnrlvklgrp4);rgr1:=wert(fnrlvraumgrp1);rgr2:=wert( +fnrlvraumgrp2);merkdbwerte;lehrv:=formattext(wert(fnrlvjgst))+text(lvfake,2)+ +text(subtext(lvfake,3),4)+text(intwert(fnrlvwochenstd),2);standardmaskenfeld( +kopplung,k*9-7);standardmaskenfeld(lehrv,k*9-6);standardmaskenfeld(lehrer,k*9 +-5);standardmaskenfeld(sgr1,k*9-4);standardmaskenfeld(sgr2,k*9-3); +standardmaskenfeld(sgr3,k*9-2);standardmaskenfeld(sgr4,k*9-1); +standardmaskenfeld(rgr1,k*9);standardmaskenfeld(rgr2,k*9+1);IF k<bearbzlTHEN +kINCR 1FI .merkdbwerte:dbinh(k).kopplg:=kopplung;dbinh(k).fakenn:=lvfake; +dbinh(k).lehrer:=lehrer;dbinh(k).klgr(1):=sgr1;dbinh(k).klgr(2):=sgr2;dbinh(k +).klgr(3):=sgr3;dbinh(k).klgr(4):=sgr4;dbinh(k).rgr(1):=rgr1;dbinh(k).rgr(2) +:=rgr2;anzdbsaetzeINCR 1.END PROC gibbearbzeileaus;BOOL PROC pruefung(INT +CONST notwprocparam):schhj=wert(fnrlvhj)CAND schj=wert(fnrlvsj)END PROC +pruefung;PROC merkeeingsch:FOR iFROM 2UPTO anzeingfldREP eingbs(i):= +standardmaskenfeld(i)PER ;END PROC merkeeingsch;TEXT PROC formattext(TEXT +CONST jgst):IF int(jgst)<10CAND jgst<>"00"THEN LEAVE formattextWITH "0"+jgst +FI ;jgstEND PROC formattext;PROC uvukspeichern(BOOL CONST speichern):IF +speichernTHEN speicherdaten;naechsterbildschirmELSE zurueckmitmeldg(meldg14,0 +,1,"");naechsterbildschirmFI .speicherdaten:saetzeunveraendert:=TRUE ;IF +aktschgrkatalog=trennerTHEN holeaktdatenspeicherungFI ;zurueckmitmeldg( +meldg17,0,1,"");FOR iFROM 1UPTO anzdbsaetzeREP kopplung:=standardmaskenfeld(i +*9-7);lehrer:=standardmaskenfeld(i*9-5);sgr1:=standardmaskenfeld(i*9-4);sgr2 +:=standardmaskenfeld(i*9-3);sgr3:=standardmaskenfeld(i*9-2);sgr4:= +standardmaskenfeld(i*9-1);rgr1:=standardmaskenfeld(i*9);rgr2:= +standardmaskenfeld(i*9+1);IF satzgeaendertTHEN infeld(i*9-7);pruefedaten;FI +PER ;zurueckmitmeldg(meldg13,0,1,"");FOR iFROM 1UPTO anzdbsaetzeREP kopplung +:=standardmaskenfeld(i*9-7);lehrer:=standardmaskenfeld(i*9-5);sgr1:= +standardmaskenfeld(i*9-4);sgr2:=standardmaskenfeld(i*9-3);sgr3:= +standardmaskenfeld(i*9-2);sgr4:=standardmaskenfeld(i*9-1);rgr1:= +standardmaskenfeld(i*9);rgr2:=standardmaskenfeld(i*9+1);IF satzgeaendertTHEN +IF saetzeunveraendertTHEN saetzeunveraendert:=FALSE FI ;infeld(i*9-7); +speicheraenderungenFI PER ;IF NOT saetzeunveraendertTHEN +aenderungsvermerksetzen(aenderungskennzeichen)FI .satzgeaendert:kopplung<> +dbinh(i).kopplgCOR lehrer<>dbinh(i).lehrerCOR sgr1<>dbinh(i).klgr(1)COR sgr2 +<>dbinh(i).klgr(2)COR sgr3<>dbinh(i).klgr(3)COR sgr4<>dbinh(i).klgr(4)COR +rgr1<>dbinh(i).rgr(1)COR rgr2<>dbinh(i).rgr(2).pruefedaten:istfehler:=FALSE ; +koppparnichtgeprueft:=TRUE ;IF kopplung<>dbinh(i).kopplgTHEN +pruefekopplungsnrFI ;IF lehrer<>dbinh(i).lehrerCAND lehrer<>leereparapheTHEN +pruefelehrerFI ;IF sgr1<>dbinh(i).klgr(1)COR sgr2<>dbinh(i).klgr(2)COR sgr3<> +dbinh(i).klgr(3)COR sgr4<>dbinh(i).klgr(4)THEN pruefeklassenFI ;IF rgr1<> +dbinh(i).rgr(1)COR rgr2<>dbinh(i).rgr(2)THEN prueferaeumeFI . +pruefekopplungsnr:IF kopplung=""THEN istfehler:=TRUE ;zurueckmitmeldg(meldg7, +1,i*9-7,"");LEAVE uvukspeichernELIF length(kopplung)>laengekopplungTHEN +istfehler:=TRUE ;zurueckmitmeldg(meldg4,1,i*9-7,"");LEAVE uvukspeichernELSE +koppparnichtgeprueft:=FALSE ;IF lehrer<>leereparapheTHEN pruefekopplgpar( +kopplung,standardmaskenfeld(i*9-6),lehrer,i*9-7);abfragefehlerFI FI . +pruefelehrer:pruefedbfld(lehrer,parkatalog,i*9-5);abfragefehler;IF +koppparnichtgeprueftTHEN pruefekopplgpar(kopplung,standardmaskenfeld(i*9-6), +lehrer,i*9-5);abfragefehlerFI .pruefeklassen:IF sgr1<>dbinh(i).klgr(1)THEN +pruefedbfld(sgr1,jgstkatalog,i*9-4);abfragefehlerFI ;IF sgr2<>dbinh(i).klgr(2 +)THEN pruefedbfld(sgr2,jgstkatalog,i*9-3);abfragefehlerFI ;IF sgr3<>dbinh(i). +klgr(3)THEN pruefedbfld(sgr3,jgstkatalog,i*9-2);abfragefehlerFI ;IF sgr4<> +dbinh(i).klgr(4)THEN pruefedbfld(sgr4,jgstkatalog,i*9-1);abfragefehlerFI . +prueferaeume:pruefedbfld(rgr1,rgrkatalog,i*9);abfragefehler;pruefedbfld(rgr2, +rgrkatalog,i*9+1);abfragefehler.abfragefehler:IF istfehlerTHEN LEAVE +uvukspeichernFI .speicheraenderungen:putwert(fnrlvsj,schj);putwert(fnrlvhj, +schhj);putintwert(fnrlvjgst,int(text(standardmaskenfeld(i*9-6),2)));putwert( +fnrlvfachkennung,dbinh(i).fakenn);search(dnrlehrveranstaltungen,TRUE );IF +dbstatus=0THEN aktualisierenFI .aktualisieren:putwert(fnrlvkopplung,kopplung) +;putwert(fnrlvparaphe,lehrer);putwert(fnrlvklgrp1,sgr1);putwert(fnrlvklgrp2, +sgr2);putwert(fnrlvklgrp3,sgr3);putwert(fnrlvklgrp4,sgr4);putwert( +fnrlvraumgrp1,rgr1);putwert(fnrlvraumgrp2,rgr2);update(dnrlehrveranstaltungen +).naechsterbildschirm:IF anzdbsaetze<bearbzlTHEN enter(2);LEAVE uvukspeichern +FI ;k:=1;putwert(fnrlvsj,schj);putwert(fnrlvhj,schhj);putintwert(fnrlvjgst, +int(text(lehrv,2)));putwert(fnrlvfachkennung,dbinh(anzdbsaetze).fakenn); +search(dnrlehrveranstaltungen,TRUE );changeindex;succ(index);loeschefelder; +IF dbstatus<>okTHEN enter(2)ELSE anzdbsaetze:=0; +standardkopfmaskeaktualisieren(maskenkopf);startebildschirmblock(index, +bearbzl-1);bildschirmblock(PROC gibbearbzeileaus,BOOL PROC (INT CONST ) +pruefung,i);infeld(1);standardfelderausgeben;infeld(2);return(1)FI .END PROC +uvukspeichern;PROC uvuklisten:INT VAR aktfeld:=infeld;WINDOW VAR w:= +startwindow(42,23,77,1);liste:="";standardmeldung(meldg3,"");aktzeile:=( +aktfeld-2)DIV 9+1;jgst:=int(text(standardmaskenfeld(aktzeile*9-6),laengejgst) +);lv:=text(dbinh(aktzeile).fakenn,laengefach);sicherdbposition; +berechnefachdaten;bereitelisteauf;giballelehreraus;listeCAT "*";listeCAT +auskunftstextende;erstelledbposition;IF menuedraussenTHEN reorganizescreenFI +;open(w);auskunfterteilung(liste,w,FALSE );reorganizescreen;setlasteditvalues +;return(1).sicherdbposition:savetupel(index,sicherungstupel);. +erstelledbposition:restoretupel(index,sicherungstupel).berechnefachdaten: +allefaecher:=trenner;inittupel(dnrfaecher);putwert(fnrffach,compress(lv)); +search(dnrfaecher,TRUE );IF dbstatus<>okTHEN standardmeldung(meldg20,""); +return(1);LEAVE uvuklistenELSE IF wert(fnrffachgrp)<>""THEN lv:=text(wert( +fnrffachgrp),laengefach);ermittleanderefaecherELSE allefaecherCAT lv; +allefaecherCAT trenner;FI ;ermittlestdenFI .ermittleanderefaecher:IF fachbez= +trennerTHEN IF records(dnrfaecher)=0.0THEN standardmeldung(meldg21,"");return +(1);LEAVE uvuklistenELSE statleseschleife(dnrfaecher,"","",fnrffach,fnrffach, +PROC faecherholen)FI ;FI ;holallefaecher.holallefaecher:allefaecher:= +allefaecherzu(trenner+lv+trenner).ermittlestden:allestdenberechnen. +bereitelisteauf:listeCAT "Lehrbefähigte mit Stundenzahl:";listeCAT +auskunftstextende;listeCAT " Soll Ist im Fach Rest";listeCAT +auskunftstextende;listeCAT "Fach: ----+----+-------+----";listeCAT +auskunftstextende;listeCAT text(lv,5);listeCAT text(fachsoll,6);listeCAT text +(fachist,5);listeCAT text(fachsoll-fachist,13);listeCAT auskunftstextende; +listeCAT " ";listeCAT auskunftstextende.giballelehreraus:IF fachkatalog= +trennerTHEN holeaktdatenpruefungFI ;lehrbeflehrer:="";inittupel( +dnrlehrbefaehigungen);statleseschleife(dnrlehrbefaehigungen,compress(lv),"", +fnrlbfach,fnrlbparaphe,PROC lehrbeflehrerholen);IF lehrbeflehrer=""THEN +meldungkeinelehrbeflehrerELSE giblehrerausFI .meldungkeinelehrbeflehrer: +standardmeldung(meldg22,lv+ausgparam);return(1);LEAVE uvuklisten.giblehreraus +:suchpos:=1;aktpos:=1;listeCAT "Lehrer:";listeCAT auskunftstextende;WHILE +aktpos>0REP aktpos:=pos(lehrbeflehrer,trenner,suchpos);IF aktpos>0THEN +paraphe:=subtext(lehrbeflehrer,suchpos,aktpos-1);standardmeldung(meldg23, +paraphe+ausgparam);ermittlestdenlehrer;IF ohnefehlerTHEN listeCAT text( +paraphe,5);listeCAT text(lehrersoll,6);listeCAT text(lehrerist,5);listeCAT +text(lehrerimfach,8);listeCAT text(lehrersoll-lehrerist,5);listeCAT +auskunftstextendeFI ;suchpos:=aktpos+1FI ;PER ;infeld(1); +standardfelderausgeben;infeld(aktfeld).END PROC uvuklisten;PROC +ermittlestdenlehrer:lehrersoll:=0;lehrerist:=0;lehrerimfach:=0;ohnefehler:= +TRUE ;ermittlelehrersoll;ermittlelehreristundimfach.ermittlelehrersoll:zz:= +pos(parkatalog,trenner+paraphe+trenner);IF zz>0THEN lehrersoll:=int(( +sollstdkatalogSUB (zz+1))+(sollstdkatalogSUB (zz+2)))ELSE ohnefehler:=FALSE ; +LEAVE ermittlestdenlehrerFI .ermittlelehreristundimfach:inittupel( +dnrlehrveranstaltungen);putwert(fnrlvparaphe,paraphe);statleseschleife( +ixlvsjhjpar,schj,schhj,fnrlvsj,fnrlvhj,PROC holelehrerstden).END PROC +ermittlestdenlehrer;PROC holelehrerstden(BOOL VAR b):TEXT VAR lvfach:=text( +wert(fnrlvfachkennung),laengefach);IF wert(fnrlvsj)<>schjCOR wert(fnrlvhj)<> +schhjCOR wert(fnrlvparaphe)<>parapheTHEN b:=TRUE ELSE IF inallefaecher(lvfach +)THEN lehrerimfachINCR intwert(fnrlvwochenstd)FI ;lehreristINCR intwert( +fnrlvwochenstd)FI END PROC holelehrerstden;BOOL PROC inallefaecher(TEXT +CONST fach):pos(allefaecher,trenner+text(fach,laengefach)+trenner)>0END PROC +inallefaecher;PROC lehrbeflehrerholen(BOOL VAR b):IF dbstatus<>okCOR text( +wert(fnrlbfach),laengefach)<>lvTHEN b:=TRUE ELSE lehrbeflehrerCAT wert( +fnrlbparaphe);lehrbeflehrerCAT trenner;FI END PROC lehrbeflehrerholen;PROC +allestdenberechnen:INT VAR i;fachsoll:=0;fachist:=0;FOR iFROM 1UPTO length( +allefaecher)DIV (laengefach+1)REP fach:=(subtext(allefaecher,(i-1)*( +laengefach+1)+2,i*(laengefach+1)));berechnestdenzufachPER END PROC +allestdenberechnen;PROC berechnestdenzufach:inittupel(dnrlehrveranstaltungen) +;putwert(fnrlvfachkennung,fach);statleseschleife(ixlvsjhjkenn,schj,schhj, +fnrlvsj,fnrlvhj,PROC stdenzufach)END PROC berechnestdenzufach;PROC +stdenzufach(BOOL VAR b):TEXT VAR lvfach:=text(wert(fnrlvfachkennung), +laengefach);INT VAR lvstd;IF wert(fnrlvsj)<>schjCOR wert(fnrlvhj)<>schhjCOR +lvfach>fachTHEN b:=TRUE ELSE IF lvfach=fachTHEN lvstd:=intwert(fnrlvwochenstd +);fachsollINCR lvstd;IF wert(fnrlvparaphe)<>""THEN fachistINCR lvstdFI FI FI +END PROC stdenzufach;TEXT PROC allefaecherzu(TEXT CONST bez):suchpos:=1; +aktpos:=1;WHILE aktpos>0REP aktpos:=pos(fachgrbez,bez,suchpos);IF aktpos>0 +THEN allefaecherCAT (fachbezSUB (aktpos+1));allefaecherCAT (fachbezSUB ( +aktpos+2));allefaecherCAT trenner;suchpos:=aktpos+1;FI PER ;allefaecherEND +PROC allefaecherzu;PROC uvukvorjparaphe:IF aenderungskennzeichen= +kennzeichnungaktTHEN standardmeldung(meldg19,"");return(1)ELSE aktzeile:=( +infeld-2)DIV 9+1;jgst:=int(text(standardmaskenfeld(aktzeile*9-6),laengejgst)) +;lv:=dbinh(aktzeile).fakenn;IF geplschhj="1"CAND jgst=5THEN standardmeldung( +meldg19,"");return(1);LEAVE uvukvorjparapheFI ;suchedbsatzundausgabeFI . +suchedbsatzundausgabe:savetupel(index,sicherungstupel);saveupdateposition( +index);IF index<>dnrlehrveranstaltungenTHEN changeindex;FI ;inittupel( +dnrlehrveranstaltungen);putwert(fnrlvsj,aktschj);putwert(fnrlvhj,aktschhj); +IF aktschhj="2"CAND jgst>5THEN putintwert(fnrlvjgst,jgst-1);ELSE putintwert( +fnrlvjgst,jgst)FI ;putwert(fnrlvfachkennung,lv);search(dnrlehrveranstaltungen +,TRUE );IF dbstatus<>okTHEN standardmeldung(meldg18,"Schulj. "+aktschhj+". "+ +text(aktschj,2)+"/"+subtext(aktschj,3)+" Lv. "+text(jgst)+lv+ausgparam); +return(1);LEAVE uvukvorjparapheELSE standardmaskenfeld(wert(fnrlvparaphe), +aktzeile*9-5);standardfelderausgebenFI ;IF index<>dnrlehrveranstaltungenTHEN +changeindex;FI ;restoreupdateposition(index);restoretupel(index, +sicherungstupel);return(1).END PROC uvukvorjparaphe;PROC faecherholen(BOOL +VAR b):IF dbstatus<>okTHEN b:=TRUE ELSE fachbezCAT text(wert(fnrffach), +laengefach);fachbezCAT trenner;fachgrbezCAT text(wert(fnrffachgrp),laengefach +);fachgrbezCAT trennerFI END PROC faecherholen;PROC spezcat(BOOL VAR b):TEXT +VAR zwsp:="";IF i=100THEN fachkatalogCAT wert(fnrffach)+trenner;ELIF i=101 +THEN jgstsugrp:="";klgrkatalogCAT wert(fnrkgklassengrp)+trenner; +klgrpruefkatalogCAT wert(fnrkgklassengrp)+trenner;jgstsugrp:=wert( +fnrkgschuelergrp);stellejgstzurklgrfest;ELIF i=105THEN IF wert(fnrsgrphj)= +aktschhjCAND dbstatus=okTHEN aktschgrkatalogCAT wert(fnrsgrpjgst)+wert( +fnrsgrpkennung)+trenner;ELIF dbstatus<>okTHEN b:=TRUE FI ELIF i=106THEN IF +wert(fnrsgrphj)=geplschhjCAND dbstatus=okTHEN geplschgrkatalogCAT wert( +fnrsgrpjgst)+wert(fnrsgrpkennung)+trenner;ELIF dbstatus<>okTHEN b:=TRUE FI +ELIF i=102THEN rgrkatalogCAT wert(fnrrgraumgrp)+trenner;ELIF i=103THEN zwsp:= +wert(fnrlparaphe)+trenner;parkatalogCAT zwsp;sollstdkatalogCAT text(wert( +fnrlsollstd),length(zwsp))ELIF i=104THEN IF wert(fnrschlsachgebiet)=raTHEN +rgrkatalogCAT wert(fnrschlschluessel)+trenner;ELIF wert(fnrschlsachgebiet)>ra +THEN b:=TRUE FI FI .stellejgstzurklgrfest:FOR zzFROM 1UPTO length(jgstsugrp) +DIV 6REP klgrpruefkatalogCAT subtext(jgstsugrp,zz*6-5,zz*6-4)PER ; +klgrpruefkatalogCAT trenner.END PROC spezcat;END PACKET +uvundkopplungenbearbeiten; + diff --git a/app/schulis/2.2.1/src/4.vertretungen organisieren b/app/schulis/2.2.1/src/4.vertretungen organisieren new file mode 100644 index 0000000..e0cd6ba --- /dev/null +++ b/app/schulis/2.2.1/src/4.vertretungen organisieren @@ -0,0 +1,318 @@ +PACKET vertretungenorganisierenDEFINES vertretungenorgbearbeiten, +vertretungenorgvertretungsdatenlisten,vertretungenorginlisteblaettern, +vertretungenorgspeichern,vertretungenorglvauflisten, +vertretungenorglvauflisteneinlesen,vertretungenorginlvlisteblaettern, +vertretungenorgangekreuztebearbeiten:LET maskebearb= +"ms vertretungen organisieren",maskeliste="mu objektliste";LET fnrsuchparaphe +=2,fnrstartdatum=3,fnrstartstunde=4,fnrendedatum=5,fnrendestunde=6,fnrparaphe +=2,fnranrechnungart=3,fnrvertretdatum=4,fnrvertrettag=5,fnrvertretstd=6, +fnrvertretlv=7,fnrvertretparaphe=8,fnrtabellenanfang=9;LET +meldnrlistewirdaufbereitet=7,meldnrbittefuellen=52, +meldnrungueltigerschluessel=55,meldnrletzterbehandelt=67,meldnrbittewarten=69 +,meldnrblaetternnichtmoeglich=72,meldnrspeicherungunmoeglich=73, +meldnrzulangevertretungsdauer=157,meldnrdatenwerdengespeichert=301, +meldnrdatenwerdennichtgespeichert=303,meldnrungueltigeparaphe=344, +meldnrstundenplanfehlt=366,meldnrparapheschonzugeteilt=361, +meldnrzweitesdatumkleiner=386,meldnrkeinunterrichtzurzeit=395;LET schuljahr= +"Schuljahr",schulhalbjahr="Schulhalbjahr";LET sachgebietanrechnungskennz= +"c02 anrechnung vertret";LET kennzhell="#";LET kennzfreistunde="f",ankreuzung +="x",fehlanzeige="-",lehrerbelegt="1",trenner="�";LET erstestunde=1, +letztestunde=66,samstagstd=6,stundenprotag=12;LET kennungparaphe="P", +kennunglv="L";LET laengesugruppe=6,laengeparaphe=4,laengelv=8;LET +logbucheintrag="Anw. 4.6.1 Vertretungen eingegeben oder geändert";INT VAR +pruefstatus:=0;INT VAR ifnr;TEXT VAR gueltigeanrechnungskennz:="", +gueltigeparaphen:="";TEXT VAR paraphe,gespeicherteparaphe,startdatum, +startstunde,endedatum,endestunde,aktschuljahr:="",akthalbjahr:="";TEXT VAR +auszeile;TEXT VAR liste:="";TEXT VAR lv,letztebehandeltelv:="", +vertretungsdatum,hinweisfreistunde,hinweisvorherfrei,hinweisnachherfrei, +hinweislehrerinsugruppe,hinweislehrbefaehigung,hinweislehrbefart;INT VAR std, +dauer,erstevertretstd,letztevertretstd,idatum;INT VAR ivertret,maxvertret, +erstevertretaufbildschirm;LET maxvertretaufbildschirm=14;FILE VAR fvertret; +LET namevertretdatei="Liste der Vertretungsmöglichkeiten";INT VAR ilv,maxlv; +ROW letztestundeSTRUCT (INT datum,INT std,TEXT lv)VAR vertret;ROW +letztestundeBOOL VAR listenankreuzung;INT VAR erstelvinliste;INT VAR izeile; +LET maxlistenzeile=18,erstesfeldinliste=2,felderprozeileinliste=2;TEXT VAR +zeitendeslehrers,paraphenzursugruppe,allelvdersugruppe,lehrerderzeitvorher, +lehrerderzeit,lehrerderzeitnachher,freielehrerderzeit,lehrerdesfachs, +lehrbefartdesfachs,sugruppe,sugruppen,zuletztbehandeltesugruppen:="";TEXT +VAR fundlv,fundraum,fundparaphe,suchfach,zuletztbehandeltesfach:="";INT VAR +poslv,posparaphe,posfachlehrer,possugruppe;BOOL VAR vertretungliegtvor, +bearbeitungueberobjektliste;INT VAR fstatusstuplan;PROC +vertretungenorgbearbeiten:eingangspruefung;IF pruefstatus<>0THEN infeld( +pruefstatus);return(1)ELSE standardmeldung(meldnrbittewarten,""); +vertretungsorganisationvorbereiten;IF zuvertretendelvvorhandenTHEN +standardstartproc(maskebearb);bearbeitungueberobjektliste:=FALSE ; +zeigebsmitvertretungsmoeglichkeiten;standardnprocELSE standardmeldung( +meldnrkeinunterrichtzurzeit,"");infeld(fnrstartdatum);return(1)FI FI . +zuvertretendelvvorhanden:ilv<=maxlv.END PROC vertretungenorgbearbeiten;PROC +vertretungsorganisationvorbereiten:zeitendeslehrers:=allezeitenvon( +kennungparaphe,paraphe);idatum:=datum(startdatum);erstevertretstd:=stundezu( +startdatum,startstunde);letztevertretstd:=stundezu(endedatum,endestunde);ilv +:=0;IF erstevertretstd>letztevertretstdTHEN FOR stdFROM erstevertretstdUPTO +letztestundeREP IF (zeitendeslehrersSUB std)=lehrerbelegtTHEN +planeintraglesen(std,kennungparaphe,paraphe,fundlv,fundraum,fundparaphe);ilv +INCR 1;vertret(ilv).datum:=idatum;vertret(ilv).std:=std;vertret(ilv).lv:= +fundlv;FI ;IF (stdMOD stundenprotag)=0THEN idatumINCR 1FI PER ;idatumINCR 2; +erstevertretstd:=erstestunde;FI ;std:=erstevertretstd;WHILE std<= +letztevertretstdREP IF (zeitendeslehrersSUB std)=lehrerbelegtTHEN +planeintraglesen(std,kennungparaphe,paraphe,fundlv,fundraum,fundparaphe);ilv +INCR 1;vertret(ilv).datum:=idatum;vertret(ilv).std:=std;vertret(ilv).lv:= +fundlv;FI ;IF (stdMOD stundenprotag)=0THEN idatumINCR 1FI ;stdINCR 1PER ; +maxlv:=ilv;ilv:=1END PROC vertretungsorganisationvorbereiten;PROC +zeigebsmitvertretungsmoeglichkeiten:lv:=vertret(ilv).lv;std:=vertret(ilv).std +;idatum:=vertret(ilv).datum;vertretungsdatum:=datum(idatum); +standardmaskenfeld(vertretungsdatum,fnrvertretdatum);standardmaskenfeld( +namedestags(tagnummer(vertretungsdatum)),fnrvertrettag);standardmaskenfeld( +stundennummer(std),fnrvertretstd);standardmaskenfeld(lv,fnrvertretlv); +standardmaskenfeld(text(paraphe,laengeparaphe),fnrvertretparaphe); +holemoeglichevertretungenzulv;vertretungliegtvor:=FALSE ;inittupel( +dnrvertretungen);putwert(fnrvdatum,vertretungsdatum);putintwert(fnrvtagstd, +std);search(dnrvertretungen,FALSE );WHILE dbstatus=0AND wert(fnrvdatum)= +vertretungsdatumAND intwert(fnrvtagstd)=stdREP IF compress(wert( +fnrvveranstaltung))=compress(lv)THEN vertretungliegtvor:=TRUE ; +standardmaskenfeld(wert(fnrvparaphe),fnrparaphe);standardmaskenfeld(wert( +fnrvanrechnung),fnranrechnungart);FI ;succ(dnrvertretungen);UNTIL +vertretungliegtvorPER ;IF NOT vertretungliegtvorTHEN standardmaskenfeld("", +fnrparaphe);standardmaskenfeld("",fnranrechnungart);FI ;gespeicherteparaphe:= +standardmaskenfeld(fnrparaphe);infeld(1);standardfelderausgeben;infeld( +fnrparaphe).END PROC zeigebsmitvertretungsmoeglichkeiten;PROC +holemoeglichevertretungenzulv:moeglichevertretungsdatenzusammenstellen; +vertretungsdatenzeigen(1).moeglichevertretungsdatenzusammenstellen:ivertret:= +0;forget(namevertretdatei,quiet);fvertret:=sequentialfile(output, +namevertretdatei);IF (stdMOD stundenprotag)=0THEN lehrerderzeitnachher:=""; +lehrerderzeitvorher:=datenderzeit(std-1,kennungparaphe)ELIF (stdMOD +stundenprotag)=1THEN lehrerderzeitvorher:="";lehrerderzeitnachher:= +datenderzeit(std+1,kennungparaphe)ELSE lehrerderzeitvorher:=datenderzeit(std- +1,kennungparaphe);lehrerderzeitnachher:=datenderzeit(std+1,kennungparaphe)FI +;IF lv<>letztebehandeltelvTHEN letztebehandeltelv:=lv;sugruppen:= +beteiligteschuelergruppen(kennunglv,lv);IF sugruppen<> +zuletztbehandeltesugruppenTHEN zuletztbehandeltesugruppen:=sugruppen; +bestimmedieparaphenzursugruppeFI FI ;freielehrerderzeit:=""; +holeallelehrerdesfachs;inittupel(dnrvertretungen);putwert(fnrvdatum, +vertretungsdatum);putintwert(fnrvtagstd,std);search(dnrvertretungen,FALSE ); +WHILE dbstatus=0AND wert(fnrvdatum)=vertretungsdatumAND intwert(fnrvtagstd)= +stdREP IF wert(fnrvanrechnung)=kennzfreistundeTHEN fundparaphe:=wert( +fnrvparaphe);hinweisfreistunde:=ankreuzung; +weiterehinweisezugefundenerparaphesetzen; +ausgabezeilezugefundenerparapheindateischreibenFI ;succ(dnrvertretungen);PER +;lehrerderzeit:=datenderzeit(std,kennungparaphe);posparaphe:=1;WHILE +posparaphe<length(gueltigeparaphen)REP fundparaphe:=subtext(gueltigeparaphen, +posparaphe,posparaphe+laengeparaphe-1);IF suchpos(lehrerderzeit,fundparaphe, +laengeparaphe)=0THEN hinweisfreistunde:=fehlanzeige; +weiterehinweisezugefundenerparaphesetzen; +ausgabezeilezugefundenerparapheindateischreibenFI ;posparapheINCR +laengeparaphePER ;maxvertret:=ivertret.bestimmedieparaphenzursugruppe: +allelvdersugruppe:="";possugruppe:=1;WHILE possugruppe<length(sugruppen)REP +sugruppe:=subtext(sugruppen,possugruppe,possugruppe+laengesugruppe-1); +allelvdersugruppeCAT lvderschuelergruppe(sugruppe);possugruppeINCR +laengesugruppePER ;paraphenzursugruppe:="";poslv:=1;WHILE poslv<length( +allelvdersugruppe)REP fundlv:=subtext(allelvdersugruppe,poslv,poslv+laengelv- +1);paraphenzursugruppeCAT datenzurlv(kennungparaphe,fundlv);poslvINCR +laengelvPER END PROC holemoeglichevertretungenzulv;PROC +holeallelehrerdesfachs:suchfach:=compress(subtext(lv,3,4));IF suchfach<> +zuletztbehandeltesfachTHEN zuletztbehandeltesfach:=suchfach; +holeallelehrerdesfachsganzneuFI .holeallelehrerdesfachsganzneu:lehrerdesfachs +:="";lehrbefartdesfachs:="";dbstatus(0);inittupel(dnrlehrbefaehigungen); +statleseschleife(dnrlehrbefaehigungen,suchfach,suchfach,fnrlbfach,fnrlbfach, +PROC lehrbefaehigunglesen);inittupel(dnrfaecher);putwert(fnrffach,suchfach); +search(dnrfaecher,TRUE );IF dbstatus=0AND wert(fnrffachgrp)<>""THEN suchfach +:=wert(fnrffachgrp);inittupel(dnrlehrbefaehigungen);statleseschleife( +dnrlehrbefaehigungen,suchfach,suchfach,fnrlbfach,fnrlbfach,PROC +lehrbefaehigunglesen);FI ;END PROC holeallelehrerdesfachs;PROC +lehrbefaehigunglesen(BOOL VAR b):IF dbstatus<>0OR suchfach<>wert(fnrlbfach) +THEN b:=TRUE ELSE lehrerdesfachsCAT text(wert(fnrlbparaphe),laengeparaphe); +lehrbefartdesfachsCAT text(wert(fnrlbart),1)FI END PROC lehrbefaehigunglesen; +PROC weiterehinweisezugefundenerparaphesetzen:IF suchpos(lehrerderzeitvorher, +fundparaphe,laengeparaphe)>0THEN hinweisvorherfrei:=ankreuzungELSE +hinweisvorherfrei:=fehlanzeigeFI ;IF suchpos(lehrerderzeitnachher,fundparaphe +,laengeparaphe)>0THEN hinweisnachherfrei:=ankreuzungELSE hinweisnachherfrei:= +fehlanzeigeFI ;IF suchpos(paraphenzursugruppe,fundparaphe,laengeparaphe)>0 +THEN hinweislehrerinsugruppe:=ankreuzungELSE hinweislehrerinsugruppe:= +fehlanzeigeFI ;posfachlehrer:=suchpos(lehrerdesfachs,fundparaphe, +laengeparaphe);IF posfachlehrer>0THEN hinweislehrbefaehigung:=ankreuzung; +hinweislehrbefart:=lehrbefartdeslehrersELSE hinweislehrbefaehigung:= +fehlanzeige;hinweislehrbefart:=" "FI .lehrbefartdeslehrers:lehrbefartdesfachs +SUB ((posfachlehrerDIV laengeparaphe)+1).END PROC +weiterehinweisezugefundenerparaphesetzen;PROC +ausgabezeilezugefundenerparapheindateischreiben:auszeile:=text(fundparaphe, +laengeparaphe);freielehrerderzeitCAT auszeile;auszeileCAT hinweisfreistunde; +auszeileCAT hinweisvorherfrei;auszeileCAT hinweisnachherfrei;auszeileCAT +hinweislehrerinsugruppe;auszeileCAT hinweislehrbefaehigung;auszeileCAT +hinweislehrbefart;putline(fvertret,auszeile);ivertretINCR 1END PROC +ausgabezeilezugefundenerparapheindateischreiben;PROC vertretungsdatenzeigen( +INT CONST abzeile):fvertret:=sequentialfile(modify,namevertretdatei); +erstevertretaufbildschirm:=abzeile;toline(fvertret,abzeile);col(fvertret,1); +ivertret:=1;ifnr:=fnrtabellenanfang;WHILE ivertret<=maxvertretaufbildschirm +REP IF NOT eof(fvertret)THEN readrecord(fvertret,auszeile);standardmaskenfeld +(auszeile,ifnr);down(fvertret)ELSE standardmaskenfeld(" ",ifnr)FI ; +ifnrINCR 1;ivertretINCR 1PER ;END PROC vertretungsdatenzeigen;PROC +vertretungenorgvertretungsdatenlisten:WINDOW VAR w:=startwindow(37,24,77,7); +fundparaphe:=standardmaskenfeld(fnrparaphe);IF parapheungueltigTHEN +standardmeldung(meldnrungueltigeparaphe,"");return(1)ELSE standardmeldung( +meldnrlistewirdaufbereitet,"");bereitelistenausgabeauf;IF menuedraussenTHEN +reorganizescreenFI ;open(w);auskunfterteilung(liste,w,FALSE ); +reorganizescreen;setlasteditvalues;infeld(1);standardfelderausgeben;infeld( +fnrparaphe);return(1)FI .bereitelistenausgabeauf:liste:= +"Vertretungsdaten zu Paraphe ";listeCAT fundparaphe;listeCAT +auskunftstextende;listeCAT "Datum Zeit Art Lehrveranst.";listeCAT +auskunftstextende;inittupel(dnrvertretungen);dbstatus(0);statleseschleife( +ixvpar,fundparaphe,fundparaphe,fnrvparaphe,fnrvparaphe,PROC +vertretdatenzuparapheaufbereiten);listeCAT "*";listeCAT auskunftstextende. +END PROC vertretungenorgvertretungsdatenlisten;PROC +vertretdatenzuparapheaufbereiten(BOOL VAR b):IF dbstatus=0AND wert( +fnrvparaphe)=fundparapheTHEN listeCAT wert(fnrvdatum);listeCAT " ";listeCAT +namedestags(tagnummer(wert(fnrvdatum)));listeCAT " ";listeCAT stundennummer( +intwert(fnrvtagstd));listeCAT ". ";listeCAT text(wert(fnrvanrechnung),2); +listeCAT " ";listeCAT lvaufbereitet;listeCAT auskunftstextendeELSE b:=TRUE +FI .lvaufbereitet:fundlv:=wert(fnrvveranstaltung);subtext(fundlv,1,2)+" "+ +subtext(fundlv,3,4)+" "+subtext(fundlv,5,8).END PROC +vertretdatenzuparapheaufbereiten;PROC vertretungenorginlisteblaettern(BOOL +CONST vor):IF vorTHEN IF erstevertretaufbildschirm+maxvertretaufbildschirm> +maxvertretTHEN standardmeldung(meldnrblaetternnichtmoeglich,"")ELSE +vertretungsdatenzeigen(erstevertretaufbildschirm+maxvertretaufbildschirm)FI +ELSE IF erstevertretaufbildschirm=1THEN standardmeldung( +meldnrblaetternnichtmoeglich,"")ELSE vertretungsdatenzeigen( +erstevertretaufbildschirm-maxvertretaufbildschirm)FI FI ;return(1)END PROC +vertretungenorginlisteblaettern;PROC vertretungenorgspeichern(BOOL CONST +speichern):IF speichernTHEN fundparaphe:=standardmaskenfeld(fnrparaphe);IF +plausifehlerTHEN return(1)ELSE vertretungwieangegebenspeichern;logeintrag( +logbucheintrag);IF dbstatus<>0THEN standardmeldung( +meldnrspeicherungunmoeglich,"");return(1)ELSE naechstelvzeigenoderzurueckFI +FI ELSE standardmeldung(meldnrdatenwerdennichtgespeichert,""); +naechstelvzeigenoderzurueckFI .plausifehler:IF fundparaphe=""THEN +standardmeldung(meldnrbittefuellen,"");infeld(fnrparaphe);TRUE ELIF +parapheungueltigTHEN standardmeldung(meldnrungueltigeparaphe,"");infeld( +fnrparaphe);TRUE ELIF suchpos(freielehrerderzeit,fundparaphe,laengeparaphe)=0 +THEN standardmeldung(meldnrparapheschonzugeteilt,fundparaphe+kennzhell); +infeld(fnrparaphe);TRUE ELIF standardmaskenfeld(fnranrechnungart)= +kennzfreistundeTHEN standardmeldung(meldnrungueltigerschluessel,"");infeld( +fnranrechnungart);TRUE ELIF ungueltigesanrechnungskennz(standardmaskenfeld( +fnranrechnungart))THEN standardmeldung(meldnrungueltigerschluessel,"");infeld +(fnranrechnungart);TRUE ELIF vertretungkannsonichtgespeichertwerdenTHEN +standardmeldung(meldnrparapheschonzugeteilt,fundparaphe+kennzhell);infeld( +fnrparaphe);TRUE ELSE FALSE FI .vertretungkannsonichtgespeichertwerden: +inittupel(dnrvertretungen);putwert(fnrvdatum,vertretungsdatum);putintwert( +fnrvtagstd,std);putwert(fnrvparaphe,fundparaphe);search(dnrvertretungen,TRUE +);IF dbstatus<>0THEN FALSE ELIF wert(fnrvanrechnung)=kennzfreistundeTHEN +delete(dnrvertretungen);FALSE ELIF wert(fnrvveranstaltung)=compress(lv)THEN +FALSE ELSE TRUE FI .vertretungwieangegebenspeichern:standardmeldung( +meldnrdatenwerdengespeichert,"");putwert(fnrvdatum,vertretungsdatum); +putintwert(fnrvtagstd,std);IF gespeicherteparaphe=""THEN putwert(fnrvparaphe, +fundparaphe);putwert(fnrvanrechnung,standardmaskenfeld(fnranrechnungart)); +putwert(fnrvveranstaltung,compress(lv));insert(dnrvertretungen)ELSE putwert( +fnrvparaphe,gespeicherteparaphe);search(dnrvertretungen,TRUE );IF dbstatus=0 +THEN putwert(fnrvparaphe,fundparaphe);putwert(fnrvanrechnung, +standardmaskenfeld(fnranrechnungart));putwert(fnrvveranstaltung,compress(lv)) +;update(dnrvertretungen)FI FI .naechstelvzeigenoderzurueck:IF +bearbeitungueberobjektlisteTHEN naechsteangekreuztelvsetzenELSE ilvINCR 1FI ; +IF ilv>maxlvTHEN standardmeldung(meldnrletzterbehandelt,"");IF +bearbeitungueberobjektlisteTHEN enter(3)ELSE enter(2)FI ELSE +zeigebsmitvertretungsmoeglichkeiten;return(1)FI .naechsteangekreuztelvsetzen: +ilvINCR 1;WHILE NOT listenankreuzung(ilv)REP ilvINCR 1UNTIL ilv>maxlvPER . +END PROC vertretungenorgspeichern;PROC vertretungenorglvauflisten: +eingangspruefung;IF pruefstatus<>0THEN infeld(pruefstatus);return(1)ELSE +vertretungsorganisationvorbereiten;IF zuvertretendelvvorhandenTHEN +bearbeitungueberobjektliste:=TRUE ;standardstartproc(maskeliste); +standardmeldung(meldnrbittewarten,"");initlistenankreuzung;erstelvinliste:=1; +zeigelvinliste;vertretungenorglvauflisteneinlesenELSE standardmeldung( +meldnrkeinunterrichtzurzeit,"");infeld(fnrstartdatum);return(1)FI FI . +zuvertretendelvvorhanden:ilv<=maxlv.initlistenankreuzung:FOR ilvFROM 1UPTO +letztestundeREP listenankreuzung(ilv):=FALSE PER .END PROC +vertretungenorglvauflisten;PROC zeigelvinliste:ifnr:=erstesfeldinliste;ilv:= +erstelvinliste;FOR izeileFROM 1UPTO maxlistenzeileREP IF ilv>maxlvTHEN +zeigeleerzeileELSE zeigelvzeile;ilvINCR 1FI ;ifnrINCR felderprozeileinliste +PER ;infeld(1);standardfelderausgeben;infeld(erstesfeldinliste);. +zeigeleerzeile:feldschutz(ifnr);standardmaskenfeld("",ifnr); +standardmaskenfeld(" ",ifnr+1).zeigelvzeile:feldfrei(ifnr);IF +listenankreuzung(ilv)THEN standardmaskenfeld(ankreuzung,ifnr)ELSE +standardmaskenfeld("",ifnr)FI ;auszeilezusammenbauen;standardmaskenfeld( +auszeile,ifnr+1).auszeilezusammenbauen:auszeile:=datum(vertret(ilv).datum); +auszeileCAT " ";auszeileCAT namedestags(tagnummer(datum(vertret(ilv).datum)) +);auszeileCAT " ";auszeileCAT stundennummer(vertret(ilv).std);auszeileCAT +". ";auszeileCAT " ";auszeileCAT lvaufbereitet.lvaufbereitet:fundlv:= +vertret(ilv).lv;subtext(fundlv,1,2)+" "+subtext(fundlv,3,4)+" "+subtext( +fundlv,5,8).END PROC zeigelvinliste;PROC vertretungenorglvauflisteneinlesen: +infeld(erstesfeldinliste);standardnproc;ilv:=erstelvinliste;ifnr:= +erstesfeldinliste;FOR izeileFROM 1UPTO maxlistenzeileREP IF ilv<=maxlvTHEN +IF standardmaskenfeld(ifnr)<>""THEN listenankreuzung(ilv):=TRUE ELSE +listenankreuzung(ilv):=FALSE FI ;ilvINCR 1FI ;ifnrINCR felderprozeileinliste +PER END PROC vertretungenorglvauflisteneinlesen;PROC +vertretungenorginlvlisteblaettern(BOOL CONST vor):IF vorTHEN IF +erstelvinliste+maxlistenzeile>maxlvTHEN standardmeldung( +meldnrblaetternnichtmoeglich,"")ELSE erstelvinlisteINCR maxlistenzeile; +zeigelvinlisteFI ;return(1)ELSE IF erstelvinliste=1THEN standardmeldung( +meldnrblaetternnichtmoeglich,"")ELSE erstelvinlisteDECR maxlistenzeile; +zeigelvinlisteFI ;return(1)FI END PROC vertretungenorginlvlisteblaettern; +PROC vertretungenorgangekreuztebearbeiten:ilv:=1;WHILE NOT listenankreuzung( +ilv)REP ilvINCR 1UNTIL ilv>maxlvPER ;IF ilv>maxlvTHEN standardmeldung( +meldnrletzterbehandelt,"");enter(2)ELSE standardstartproc(maskebearb); +zeigebsmitvertretungsmoeglichkeiten;standardnprocFI END PROC +vertretungenorgangekreuztebearbeiten;PROC eingangspruefung:IF aktschuljahr="" +THEN aktschuljahr:=schulkenndatum(schuljahr);akthalbjahr:=schulkenndatum( +schulhalbjahr)FI ;stundenplanhalbjahrsetzen(akthalbjahr,aktschuljahr); +stundenplanbasisundstundenplanholen(fstatusstuplan);IF fstatusstuplan<>0AND +fstatusstuplan<>8THEN standardmeldung(meldnrstundenplanfehlt,"");pruefstatus +:=fnrsuchparaphe;LEAVE eingangspruefungFI ;standardpruefe(1,fnrsuchparaphe,0, +0,"",pruefstatus);IF pruefstatus<>0THEN LEAVE eingangspruefungELSE +fundparaphe:=standardmaskenfeld(fnrsuchparaphe);IF gueltigeparaphen=""THEN +holegueltigeparaphenFI ;IF parapheungueltigTHEN standardmeldung( +meldnrungueltigeparaphe,"");pruefstatus:=fnrsuchparaphe;LEAVE +eingangspruefungELSE paraphe:=fundparapheFI ;standardpruefe(6,fnrstartdatum,0 +,0,"",pruefstatus);IF pruefstatus<>0THEN LEAVE eingangspruefungELSE +startdatum:=standardmaskenfeld(fnrstartdatum)FI ;INT VAR ug,og,wochentagnr; +standardpruefe(2,fnrstartstunde,0,0,"",pruefstatus);IF pruefstatus<>0THEN +LEAVE eingangspruefungELSE wochentagnr:=tagnummer(startdatum);IF wochentagnr= +6THEN og:=samstagstdELSE og:=stundenprotagFI ;ug:=erstestunde;standardpruefe( +3,fnrstartstunde,ug,og,"",pruefstatus);IF pruefstatus<>0THEN LEAVE +eingangspruefungELSE startstunde:=standardmaskenfeld(fnrstartstunde)FI FI ; +endedatum:=standardmaskenfeld(fnrendedatum);endestunde:=standardmaskenfeld( +fnrendestunde);IF endedatum=""THEN endedatum:=startdatum;IF endestunde="" +THEN endestunde:=startstunde;LEAVE eingangspruefungELSE standardpruefe(2, +fnrendestunde,0,0,"",pruefstatus);IF pruefstatus<>0THEN LEAVE +eingangspruefungELIF wochentagnr=6THEN og:=samstagstdELSE og:=stundenprotag +FI ;ug:=int(startstunde);standardpruefe(3,fnrendestunde,ug,og,"",pruefstatus) +;IF pruefstatus<>0THEN LEAVE eingangspruefungFI FI ;ELSE standardpruefe(6, +fnrendedatum,0,0,"",pruefstatus);IF pruefstatus<>0THEN LEAVE eingangspruefung +FI ;standardpruefe(2,fnrendestunde,0,0,"",pruefstatus);IF pruefstatus<>0THEN +LEAVE eingangspruefungELSE wochentagnr:=tagnummer(endedatum);IF wochentagnr=6 +THEN og:=samstagstdELSE og:=stundenprotagFI ;ug:=erstestunde;standardpruefe(3 +,fnrendestunde,ug,og,"",pruefstatus);IF pruefstatus<>0THEN LEAVE +eingangspruefungFI ;FI ;dauer:=datum(endedatum)-datum(startdatum);pruefstatus +:=fnrendedatum;IF dauer<0THEN standardmeldung(meldnrzweitesdatumkleiner,""); +LEAVE eingangspruefungELIF dauer=0THEN IF int(endestunde)<int(startstunde) +THEN standardmeldung(meldnrzweitesdatumkleiner,"");LEAVE eingangspruefungFI +ELIF dauer>7THEN standardmeldung(meldnrzulangevertretungsdauer,"");LEAVE +eingangspruefungELIF dauer>6THEN IF int(endestunde)>=int(startstunde)THEN +standardmeldung(meldnrzulangevertretungsdauer,"");LEAVE eingangspruefungFI +FI ;pruefstatus:=0;FI ;FI ;END PROC eingangspruefung;BOOL PROC +parapheungueltig:suchpos(gueltigeparaphen,fundparaphe,laengeparaphe)=0END +PROC parapheungueltig;PROC holegueltigeparaphen:gueltigeparaphen:=""; +inittupel(dnrlehrer);statleseschleife(dnrlehrer,"","",fnrlparaphe,fnrlparaphe +,PROC paraphelesen)END PROC holegueltigeparaphen;PROC paraphelesen(BOOL VAR b +):IF dbstatus<>0THEN b:=TRUE ELSE gueltigeparaphenCAT text(wert(fnrlparaphe), +laengeparaphe)FI END PROC paraphelesen;BOOL PROC ungueltigesanrechnungskennz( +TEXT CONST kennz):IF gueltigeanrechnungskennz=""THEN +holegueltigeanrechnungskennzFI ;pos(gueltigeanrechnungskennz,trenner+kennz+ +trenner)=0END PROC ungueltigesanrechnungskennz;PROC +holegueltigeanrechnungskennz:gueltigeanrechnungskennz:=trenner;inittupel( +dnrschluessel);statleseschleife(dnrschluessel,sachgebietanrechnungskennz,"", +fnrschlsachgebiet,fnrschlschluessel,PROC anrechnungskennzlesen)END PROC +holegueltigeanrechnungskennz;PROC anrechnungskennzlesen(BOOL VAR b):IF +dbstatus<>0COR wert(fnrschlsachgebiet)<>sachgebietanrechnungskennzTHEN b:= +TRUE ELSE gueltigeanrechnungskennzCAT wert(fnrschlschluessel); +gueltigeanrechnungskennzCAT trennerFI END PROC anrechnungskennzlesen;INT +PROC suchpos(TEXT CONST quelle,suchtext,INT CONST laenge):INT VAR findpos:= +pos(quelle,suchtext);WHILE findpos>0REP IF findposMOD laenge=1THEN LEAVE +suchposWITH findposELSE findpos:=pos(quelle,suchtext,findpos+1);FI PER ; +findposEND PROC suchpos;TEXT PROC jgstzweistellig(INT CONST intjgst):IF +intjgst=0THEN "00"ELIF intjgst>4AND intjgst<10THEN "0"+text(intjgst)ELSE text +(intjgst)FI END PROC jgstzweistellig;INT PROC tagnummer(TEXT CONST +datumsangabe):(datum(datumsangabe)+5)MOD 7END PROC tagnummer;TEXT PROC +namedestags(INT CONST tagesnummer):SELECT tagesnummerOF CASE 0:"So"CASE 1: +"Mo"CASE 2:"Di"CASE 3:"Mi"CASE 4:"Do"CASE 5:"Fr"CASE 6:"Sa"OTHERWISE ""END +SELECT .END PROC namedestags;TEXT PROC stundennummer(INT CONST istd):IF (istd +MOD stundenprotag)=0THEN text(stundenprotag)ELSE text(istdMOD stundenprotag,2 +)FI END PROC stundennummer;INT PROC stundezu(TEXT CONST angtag,angstd):( +tagnummer(angtag)-1)*stundenprotag+int(angstd)END PROC stundezu;END PACKET +vertretungenorganisieren + diff --git a/app/schulis/2.2.1/src/4.vertretungsdaten bearbeiten b/app/schulis/2.2.1/src/4.vertretungsdaten bearbeiten new file mode 100644 index 0000000..7034ab6 --- /dev/null +++ b/app/schulis/2.2.1/src/4.vertretungsdaten bearbeiten @@ -0,0 +1,279 @@ +PACKET vertretungsdatenbearbeitenDEFINES vertretungsdatenbearbeiteneingang, +vertretungsdatenbearbeitenstart,vertretungsdatenentfernenstart, +vertretungsdatenentfernen,vertretungsdatenzeileeinfuegen, +vertretungsdatenspeichern:LET maskeeingang= +"ms vertretungsdaten bearbeiten eingang";LET maskebearb= +"ms vertretungsdaten bearbeiten";LET fnrauswahlparaphe=2,fnrstartparaphe=3, +fnrauswahldatum=4,fnrstartdatum=5,fnrauswahlentfernen=6,fnrentfernendatum=7; +LET feldanzmaskeeingang=7;ROW feldanzmaskeeingangTEXT VAR feldbs1;LET +felderprozeile=6;LET ersteseingabefeld=2;LET erstestabellenfeld=2;LET +meldnrungueltigerschluessel=55,meldnrungueltigeauswahl=56, +meldnrplausiwirdgeprueft=57,meldnrloeschen=61,meldnrnichtloeschen=62, +meldnrloeschfrage=65,meldnrloeschenmitdatum=83,meldnrvertretunggibtsschon=88, +meldnrdatumfehltzurestangaben=129,meldnrungueltigesdatum=157, +meldnrdatenwerdengespeichert=301,meldnrdatenwerdennichtgespeichert=303, +meldnrletztezeilenichteinfuegen=314,meldnrfalschetastezuankreuz=318, +meldnrfalscheausfuellung=319,meldnrungueltigeparaphe=344;LET +sachgebietanrechnungskennz="c02 anrechnung vertret";LET kennzhell="#";LET +erstesdatum="01.01.00",erstestunde=1,samstagstd=6,stundenprotag=12;LET +trenner="�",punkt=".";LET logbucheintrag= +"Anw. 4.6.2 Vertretungen eingegeben oder geändert";INT VAR zugriff;BOOL VAR +eingangsmaskenfehler:=FALSE ;INT VAR pruefstatus:=0,letztecursorfnr:= +fnrauswahlparaphe;INT VAR aktzeile;INT VAR ifnr;TEXT VAR startparaphe, +startdatum,entfernendatum;TEXT VAR nfparaphe,nfdatum,nftagstd;TEXT VAR +gueltigeanrechnungskennz:="",gueltigeparaphen:="";INT VAR izeile, +anzahlgezeigtezeilen,anzahleingegebenezeilen;LET zeilenanzahl=18;ROW +zeilenanzahlSTRUCT (TEXT datum,TEXT tag,TEXT stunde,TEXT paraphe,TEXT art, +TEXT lv,TEXT tagstd)VAR bszeile;BOOL VAR leerenbszeigen; +initfelderdeseingangsbildschirms;initbszeilepuffer;PROC +vertretungsdatenbearbeiteneingang:standardstartproc(maskeeingang); +wertedeseingangsbildschirmsholen;infeld(fnrauswahlparaphe); +standardfelderausgeben;infeld(letztecursorfnr);standardnprocEND PROC +vertretungsdatenbearbeiteneingang;PROC vertretungsdatenbearbeitenstart: +eingangsbehandlung(1);IF eingangsmaskenfehlerTHEN infeld(pruefstatus);return( +1)ELSE wertedeseingangsbildschirmsmerken;zugriffaufvertretungsdatenbestimmen; +erstensatzlesen;standardstartproc(maskebearb);bsfuellen;infeld( +ersteseingabefeld);standardnprocFI .zugriffaufvertretungsdatenbestimmen:IF +standardmaskenfeld(fnrauswahlparaphe)=""THEN zugriff:=dnrvertretungenELSE +zugriff:=ixvparFI .erstensatzlesen:inittupel(dnrvertretungen);IF zugriff= +ixvparTHEN putwert(fnrvparaphe,startparaphe)ELSE putwert(fnrvdatum,startdatum +)FI ;search(zugriff,FALSE );leerenbszeigen:=dbstatus<>ok;IF dbstatus=0THEN +IF zugriff=dnrvertretungenTHEN IF startdatum<>erstesdatumAND startdatum<>wert +(fnrvdatum)THEN pred(zugriff)FI ELIF zugriff=ixvparTHEN IF startparaphe<>"" +AND startparaphe<>wert(fnrvparaphe)THEN pred(zugriff)FI FI FI .END PROC +vertretungsdatenbearbeitenstart;PROC bsfuellen:izeile:=0;IF NOT +leerenbszeigenTHEN startebildschirmblock(zugriff,zeilenanzahl-1); +bildschirmblock(PROC satzmerken,BOOL PROC (INT CONST )satzzubehandeln,0);IF +dbstatus=0THEN succ(zugriff);IF dbstatus<>0THEN inittupel(dnrvertretungen); +FI ELSE inittupel(dnrvertretungen);FI ;merkesatzalsnachfolgerELSE nfdatum:= +erstesdatumFI ;evtlleerzeilenhinzufuegen; +werteausbszeileinstandardfeldersetzen;infeld(1);standardfelderausgeben;. +evtlleerzeilenhinzufuegen:anzahlgezeigtezeilen:=izeile;WHILE izeile< +zeilenanzahlREP izeileINCR 1;bszeile(izeile).datum:="";bszeile(izeile).tag:= +" ";bszeile(izeile).stunde:="";bszeile(izeile).paraphe:="";bszeile(izeile). +art:="";bszeile(izeile).lv:="";bszeile(izeile).tagstd:="";PER . +werteausbszeileinstandardfeldersetzen:ifnr:=erstestabellenfeld;FOR izeile +FROM 1UPTO zeilenanzahlREP standardmaskenfeld(bszeile(izeile).datum,ifnr); +standardmaskenfeld(bszeile(izeile).tag,ifnr+1);standardmaskenfeld(bszeile( +izeile).stunde,ifnr+2);standardmaskenfeld(bszeile(izeile).paraphe,ifnr+3); +standardmaskenfeld(bszeile(izeile).art,ifnr+4);standardmaskenfeld(bszeile( +izeile).lv,ifnr+5);ifnrINCR felderprozeilePER .merkesatzalsnachfolger:nfdatum +:=wert(fnrvdatum);nftagstd:=wert(fnrvtagstd);nfparaphe:=wert(fnrvparaphe). +END PROC bsfuellen;BOOL PROC satzzubehandeln(INT CONST dummynr):IF NOT ( +izeile<zeilenanzahlCAND dbstatus=ok)THEN LEAVE satzzubehandelnWITH FALSE FI ; +TRUE .END PROC satzzubehandeln;PROC satzmerken:izeileINCR 1;bszeile(izeile). +datum:=ausgabedatum;bszeile(izeile).tag:=namedestags(tagnummer(wert(fnrvdatum +)));bszeile(izeile).stunde:=text(ausgabestd);bszeile(izeile).paraphe:=wert( +fnrvparaphe);bszeile(izeile).art:=wert(fnrvanrechnung);bszeile(izeile).lv:= +wert(fnrvveranstaltung);bszeile(izeile).tagstd:=wert(fnrvtagstd).ausgabedatum +:subtext(wert(fnrvdatum),1,2)+subtext(wert(fnrvdatum),4,5)+subtext(wert( +fnrvdatum),7,8).ausgabestd:INT VAR ausgabezeit:=intwert(fnrvtagstd)MOD +stundenprotag;IF ausgabezeit=0THEN stundenprotagELSE ausgabezeitFI .END PROC +satzmerken;PROC vertretungsdatenentfernenstart:eingangsbehandlung(2);IF +eingangsmaskenfehlerTHEN infeld(pruefstatus);return(1)ELSE +wertedeseingangsbildschirmsmerken;FOR ifnrFROM fnrauswahlparapheUPTO +fnrstartdatumREP feldschutz(ifnr)PER ;feldschutz(fnrentfernendatum);infeld( +fnrauswahlentfernen);standardmeldung(meldnrloeschfrage,"");standardnprocFI +END PROC vertretungsdatenentfernenstart;PROC vertretungsdatenentfernen(BOOL +CONST entfernen):IF entfernenTHEN standardmeldung(meldnrloeschen,""); +entfernendervertretungsdatenvornehmenELSE standardmeldung(meldnrnichtloeschen +,"")FI ;enter(2).entfernendervertretungsdatenvornehmen:TEXT VAR +gelesenesdatum,datuminmeldung:="";INT VAR stichdatum:=datum(entfernendatum); +first(dnrvertretungen);gelesenesdatum:=wert(fnrvdatum);WHILE dbstatus=0CAND +datum(gelesenesdatum)<stichdatumREP delete(dnrvertretungen);IF gelesenesdatum +<>datuminmeldungTHEN datuminmeldung:=gelesenesdatum;standardmeldung( +meldnrloeschenmitdatum,datuminmeldung+kennzhell)FI ;succ(dnrvertretungen); +gelesenesdatum:=wert(fnrvdatum)PER END PROC vertretungsdatenentfernen;PROC +vertretungsdatenzeileeinfuegen(BOOL CONST einfuegen):INT VAR erstefnr;IF +einfuegenTHEN zeileeinfuegenELSE zeileloeschenFI ;return(1).zeileeinfuegen: +aktzeile:=bearbeitungszeilezufeld(infeld);IF aktzeile=zeilenanzahlTHEN +standardmeldung(meldnrletztezeilenichteinfuegen,"");LEAVE zeileeinfuegenFI ; +IF bszeile(zeilenanzahl).datum<>""THEN merkeverdraengtensatzalsnachfolgesatz; +anzahlgezeigtezeilen:=zeilenanzahlFI ;FOR izeileFROM zeilenanzahl-1DOWNTO +aktzeile+1REP zeileiminternenpufferverschieben; +wertederzeileaufdembildschirmverschiebenPER ;izeile:=aktzeile+1; +leerzeileschreiben;werteineingefuegterzeilevermerken;neuezeilenausgeben. +merkeverdraengtensatzalsnachfolgesatz:startdatum:=bszeile(zeilenanzahl).datum +;nfdatum:=subtext(startdatum,1,2)+punkt+subtext(startdatum,3,4)+punkt+subtext +(startdatum,5,6);nfparaphe:=bszeile(zeilenanzahl).paraphe;nftagstd:=bszeile( +zeilenanzahl).tagstd.zeileiminternenpufferverschieben:bszeile(izeile+1).datum +:=bszeile(izeile).datum;bszeile(izeile+1).tag:=bszeile(izeile).tag;bszeile( +izeile+1).stunde:=bszeile(izeile).stunde;bszeile(izeile+1).paraphe:=bszeile( +izeile).paraphe;bszeile(izeile+1).art:=bszeile(izeile).art;bszeile(izeile+1). +lv:=bszeile(izeile).lv;bszeile(izeile+1).tagstd:=bszeile(izeile).tagstd;. +wertederzeileaufdembildschirmverschieben:FOR ifnrFROM erstesfeldderzeileUPTO +letztesfeldderzeileREP standardmaskenfeld(standardmaskenfeld(ifnr),ifnr+ +felderprozeile)PER .erstesfeldderzeile:(izeile-1)*felderprozeile+ +erstestabellenfeld.letztesfeldderzeile:erstesfeldderzeile+felderprozeile-1. +werteineingefuegterzeilevermerken:bszeile(izeile).datum:="";bszeile(izeile). +tag:=" ";bszeile(izeile).stunde:="";bszeile(izeile).paraphe:="";bszeile( +izeile).art:="";bszeile(izeile).lv:="";bszeile(izeile).tagstd:="";. +zeileloeschen:izeile:=bearbeitungszeilezufeld(infeld);leerzeileschreiben; +neuezeilenausgeben.leerzeileschreiben:erstefnr:=erstesfeldderzeile; +standardmaskenfeld("",erstefnr);standardmaskenfeld(" ",erstefnr+1);FOR ifnr +FROM erstefnr+2UPTO letztesfeldderzeileREP standardmaskenfeld("",ifnr)PER . +neuezeilenausgeben:infeld(erstefnr);standardfelderausgeben;infeld(erstefnr). +END PROC vertretungsdatenzeileeinfuegen;INT PROC bearbeitungszeilezufeld(INT +CONST feldnr):((feldnr-erstestabellenfeld)DIV felderprozeile)+1END PROC +bearbeitungszeilezufeld;PROC vertretungsdatenspeichern(BOOL CONST speichern): +IF speichernTHEN standardmeldung(meldnrplausiwirdgeprueft,"");plausipruefung +ELSE pruefstatus:=0FI ;IF pruefstatus<>0THEN infeld(pruefstatus);return(1) +ELSE datenspeichern(speichern);IF nachfolgesatzvorhandenTHEN +holewertedesnachfolgersatzes;search(dnrvertretungen,TRUE );IF dbstatus<>0 +THEN search(dnrvertretungen,FALSE )FI ;izeile:=0;IF satzzubehandeln(izeile) +THEN changeindex;leerenbszeigen:=FALSE ;naechstenbildschirmzeigenELSE enter(2 +)FI ELIF letzteeingabezeilegefuelltTHEN leerenbszeigen:=TRUE ; +naechstenbildschirmzeigenELSE enter(2)FI ;FI .nachfolgesatzvorhanden:nfdatum +<>erstesdatum.letzteeingabezeilegefuellt:standardmaskenfeld((zeilenanzahl-1)* +felderprozeile+ersteseingabefeld)<>"".holewertedesnachfolgersatzes:putwert( +fnrvdatum,nfdatum);putwert(fnrvtagstd,nftagstd);putwert(fnrvparaphe,nfparaphe +).naechstenbildschirmzeigen:bsfuellen;infeld(ersteseingabefeld);return(1). +END PROC vertretungsdatenspeichern;PROC datenspeichern(BOOL CONST speichern): +IF speichernTHEN standardmeldung(meldnrdatenwerdengespeichert,""); +datenspeicherungdurchfuehrenELSE standardmeldung( +meldnrdatenwerdennichtgespeichert,"")FI END PROC datenspeichern;PROC +datenspeicherungdurchfuehren:FOR izeileFROM 1UPTO zeilenanzahlREP +holevergleichswerte;IF vertretungseintragloeschenTHEN aenderungszeileanzeigen +;altevertretungloeschenELIF vertretungseintrageinfuegenTHEN +aenderungszeileanzeigen;neuevertretungeinfuegenELIF +vertretungseintragueberschreibenTHEN aenderungszeileanzeigen; +altevertretungupdateFI PER ;logeintrag(logbucheintrag).holevergleichswerte: +INT VAR prueffnr:=datumfnrin(izeile);TEXT VAR pruefdatum:=standardmaskenfeld( +prueffnr);TEXT VAR altesdatum:=bszeile(izeile).datum. +vertretungseintragloeschen:pruefdatum=""CAND altesdatum<>"". +altevertretungloeschen:setzealtesuchwerteindbpuffer;search(dnrvertretungen, +TRUE );IF dbstatus=0THEN delete(dnrvertretungen)FI . +vertretungseintrageinfuegen:pruefdatum<>""CAND altesdatum="". +neuevertretungeinfuegen:setzeneuewerteindbpuffer;insert(dnrvertretungen). +vertretungseintragueberschreiben:NOT (standardmaskenfeld(prueffnr)=bszeile( +izeile).datumCAND standardmaskenfeld(prueffnr+2)=bszeile(izeile).stundeCAND +standardmaskenfeld(prueffnr+3)=bszeile(izeile).parapheCAND standardmaskenfeld +(prueffnr+4)=bszeile(izeile).artCAND standardmaskenfeld(prueffnr+5)=bszeile( +izeile).lv).altevertretungupdate:setzealtesuchwerteindbpuffer;search( +dnrvertretungen,TRUE );setzeneuewerteindbpuffer;update(dnrvertretungen). +setzealtesuchwerteindbpuffer:pruefdatum:=bszeile(izeile).datum;pruefdatum:= +subtext(pruefdatum,1,2)+punkt+subtext(pruefdatum,3,4)+punkt+subtext( +pruefdatum,5,6);putwert(fnrvdatum,pruefdatum);putwert(fnrvtagstd,bszeile( +izeile).tagstd);putwert(fnrvparaphe,bszeile(izeile).paraphe). +setzeneuewerteindbpuffer:pruefdatum:=standardmaskenfeld(prueffnr);pruefdatum +:=subtext(pruefdatum,1,2)+punkt+subtext(pruefdatum,3,4)+punkt+subtext( +pruefdatum,5,6);putwert(fnrvdatum,pruefdatum);putintwert(fnrvtagstd, +wochenstunde);putwert(fnrvparaphe,standardmaskenfeld(prueffnr+3));putwert( +fnrvanrechnung,standardmaskenfeld(prueffnr+4));putwert(fnrvveranstaltung, +standardmaskenfeld(prueffnr+5));.wochenstunde:(tagnummer(pruefdatum)-1)* +stundenprotag+int(standardmaskenfeld(prueffnr+2)).END PROC +datenspeicherungdurchfuehren;PROC aenderungszeileanzeigen:infeld((izeile-1)* +felderprozeile+ersteseingabefeld)END PROC aenderungszeileanzeigen;INT PROC +datumfnrin(INT CONST zeilennr):(zeilennr-1)*felderprozeile+ersteseingabefeld +END PROC datumfnrin;INT PROC tagnummer(TEXT CONST datumsangabe):(datum( +datumsangabe)+5)MOD 7END PROC tagnummer;TEXT PROC namedestags(INT CONST +tagesnummer):SELECT tagesnummerOF CASE 0:"So"CASE 1:"Mo"CASE 2:"Di"CASE 3: +"Mi"CASE 4:"Do"CASE 5:"Fr"CASE 6:"Sa"OTHERWISE ""END SELECT .END PROC +namedestags;PROC eingangsbehandlung(INT CONST art):LET bearbeiten=1,entfernen +=2;reinitparsing;eingangsmaskenfehler:=FALSE ;ankreuzfelderpruefen;IF +mehralseineauswahlangekreuztTHEN standardmeldung(meldnrungueltigeauswahl,""); +pruefstatus:=fnrauswahlparaphe;eingangsmaskenfehler:=TRUE ;LEAVE +eingangsbehandlungFI ;IF entfernenpruefungTHEN IF ankreuz1THEN ankreuzfehler( +fnrauswahlparaphe);LEAVE eingangsbehandlungELIF ankreuz2THEN ankreuzfehler( +fnrauswahldatum);LEAVE eingangsbehandlungFI ELIF bearbeitenpruefungTHEN IF +ankreuz3THEN ankreuzfehler(fnrauswahlentfernen);LEAVE eingangsbehandlungFI +FI ;IF bearbeitenpruefungTHEN IF ankreuz1THEN IF standardmaskenfeld( +fnrstartdatum)<>""THEN eintragfehler(fnrstartdatum);LEAVE eingangsbehandlung +ELIF standardmaskenfeld(fnrentfernendatum)<>""THEN eintragfehler( +fnrentfernendatum);LEAVE eingangsbehandlungFI ;startparaphe:= +standardmaskenfeld(fnrstartparaphe);ELIF ankreuz2THEN IF standardmaskenfeld( +fnrstartparaphe)<>""THEN eintragfehler(fnrstartparaphe);LEAVE +eingangsbehandlungELIF standardmaskenfeld(fnrentfernendatum)<>""THEN +eintragfehler(fnrentfernendatum);LEAVE eingangsbehandlungFI ;IF +standardmaskenfeld(fnrstartdatum)=""THEN startdatum:=erstesdatum;ELSE +standardpruefe(6,fnrstartdatum,0,0,"",pruefstatus);IF pruefstatus<>0THEN +eingangsmaskenfehler:=TRUE ;LEAVE eingangsbehandlungELSE startdatum:= +standardmaskenfeld(fnrstartdatum);startdatum:=subtext(startdatum,1,2)+punkt+ +subtext(startdatum,3,4)+punkt+subtext(startdatum,5,6)FI ;FI ;FI ;FI ;IF +entfernenpruefungTHEN IF standardmaskenfeld(fnrstartparaphe)<>""THEN +eintragfehler(fnrstartparaphe);LEAVE eingangsbehandlungELIF +standardmaskenfeld(fnrstartdatum)<>""THEN eintragfehler(fnrstartdatum);LEAVE +eingangsbehandlungFI ;standardpruefe(6,fnrentfernendatum,0,0,"",pruefstatus); +IF pruefstatus<>0THEN eingangsmaskenfehler:=TRUE ELSE entfernendatum:= +standardmaskenfeld(fnrentfernendatum);entfernendatum:=subtext(entfernendatum, +1,2)+punkt+subtext(entfernendatum,3,4)+punkt+subtext(entfernendatum,5,6)FI ; +FI ;.ankreuzfelderpruefen:INT VAR summe:=0;IF ankreuz1THEN summeINCR 1FI ;IF +ankreuz2THEN summeINCR 1FI ;IF ankreuz3THEN summeINCR 1FI . +mehralseineauswahlangekreuzt:summe<>1.ankreuz1:standardmaskenfeld( +fnrauswahlparaphe)<>"".ankreuz2:standardmaskenfeld(fnrauswahldatum)<>"". +ankreuz3:standardmaskenfeld(fnrauswahlentfernen)<>"".bearbeitenpruefung:art= +bearbeiten.entfernenpruefung:art=entfernen.END PROC eingangsbehandlung;PROC +ankreuzfehler(INT CONST fehlerfeld):pruefstatus:=fehlerfeld; +eingangsmaskenfehler:=TRUE ;standardmeldung(meldnrfalschetastezuankreuz,""). +END PROC ankreuzfehler;PROC eintragfehler(INT CONST fehlerfeld):pruefstatus:= +fehlerfeld;eingangsmaskenfehler:=TRUE ;standardmeldung( +meldnrfalscheausfuellung,"").END PROC eintragfehler;PROC plausipruefung: +pruefstatus:=0;vertretungseintraegepruefen;IF eingabefehlerTHEN LEAVE +plausipruefungFI ;datenkonsistenzpruefen;IF eingabefehlerTHEN LEAVE +plausipruefungFI .eingabefehler:pruefstatus<>0.END PROC plausipruefung;PROC +vertretungseintraegepruefen:anzahleingegebenezeilen:=0;IF gueltigeparaphen="" +THEN holegueltigeparaphenFI ;IF gueltigeanrechnungskennz=""THEN +holegueltigeanrechnungskennzFI ;FOR izeileFROM 1UPTO zeilenanzahlREP IF +datumsfehlerTHEN LEAVE vertretungseintraegepruefenFI PER .datumsfehler:INT +VAR prueffnr:=datumfnrin(izeile);TEXT VAR pruefdatum:=standardmaskenfeld( +prueffnr);IF pruefdatumleerTHEN IF eintraginfolgefelderderzeileTHEN +pruefstatus:=prueffnr;standardmeldung(meldnrdatumfehltzurestangaben,"");TRUE +ELSE FALSE FI ELSE standardpruefe(6,prueffnr,0,0,"",pruefstatus);IF +pruefstatus<>0THEN TRUE ELSE pruefdatum:=subtext(pruefdatum,1,2)+punkt+ +subtext(pruefdatum,3,4)+punkt+subtext(pruefdatum,5,6);IF tagnummer(pruefdatum +)=0THEN pruefstatus:=prueffnr;standardmeldung(meldnrungueltigesdatum,""); +TRUE ELIF stundeungueltigTHEN TRUE ELIF parapheungueltigTHEN standardmeldung( +meldnrungueltigeparaphe,"");pruefstatus:=prueffnr+3;TRUE ELIF +anrechnungskennzungueltigTHEN standardmeldung(meldnrungueltigerschluessel,"") +;pruefstatus:=prueffnr+4;TRUE ELSE anzahleingegebenezeilenINCR 1;FALSE FI FI +FI .pruefdatumleer:pruefdatum="".eintraginfolgefelderderzeile: +standardmaskenfeld(prueffnr+2)<>""COR standardmaskenfeld(prueffnr+3)<>""COR +standardmaskenfeld(prueffnr+4)<>""COR standardmaskenfeld(prueffnr+5)<>"". +stundeungueltig:INT VAR ug,og,wochentagnr;standardpruefe(2,prueffnr+2,0,0,"", +pruefstatus);IF pruefstatus<>0THEN TRUE ELSE wochentagnr:=tagnummer( +pruefdatum);IF wochentagnr=6THEN og:=samstagstdELSE og:=stundenprotagFI ;ug:= +erstestunde;standardpruefe(3,prueffnr+2,ug,og,"",pruefstatus);pruefstatus<>0 +FI .parapheungueltig:pos(gueltigeparaphen,trenner+standardmaskenfeld(prueffnr ++3)+trenner)=0.anrechnungskennzungueltig:pos(gueltigeanrechnungskennz,trenner ++standardmaskenfeld(prueffnr+4)+trenner)=0.END PROC +vertretungseintraegepruefen;PROC datenkonsistenzpruefen:FOR izeileFROM 1UPTO +zeilenanzahlREP IF zeileungueltigTHEN pruefstatus:=prueffnr;standardmeldung( +meldnrvertretunggibtsschon,"");LEAVE datenkonsistenzpruefenFI PER . +zeileungueltig:IF leerzeileTHEN FALSE ELIF +zeileistimschluesselunveraendertgebliebenTHEN FALSE ELSE +ergebnisderpruefungzeileschongespeichertFI .leerzeile:INT VAR prueffnr:= +datumfnrin(izeile);TEXT VAR pruefdatum:=standardmaskenfeld(prueffnr); +pruefdatum="".zeileistimschluesselunveraendertgeblieben:standardmaskenfeld( +prueffnr)=bszeile(izeile).datumCAND standardmaskenfeld(prueffnr+2)=bszeile( +izeile).stundeCAND standardmaskenfeld(prueffnr+3)=bszeile(izeile).paraphe. +ergebnisderpruefungzeileschongespeichert:neuewerteindbpuffersetzen;search( +dnrvertretungen,TRUE );dbstatus=0.neuewerteindbpuffersetzen:pruefdatum:= +subtext(pruefdatum,1,2)+punkt+subtext(pruefdatum,3,4)+punkt+subtext( +pruefdatum,5,6);putwert(fnrvdatum,pruefdatum);putintwert(fnrvtagstd, +wochenstunde);putwert(fnrvparaphe,standardmaskenfeld(prueffnr+3)). +wochenstunde:(tagnummer(pruefdatum)-1)*stundenprotag+int(standardmaskenfeld( +prueffnr+2)).END PROC datenkonsistenzpruefen;PROC holegueltigeparaphen: +gueltigeparaphen:=trenner;inittupel(dnrlehrer);statleseschleife(dnrlehrer,"", +"",fnrlparaphe,fnrlparaphe,PROC paraphelesen)END PROC holegueltigeparaphen; +PROC paraphelesen(BOOL VAR b):IF dbstatus<>0THEN b:=TRUE ELSE +gueltigeparaphenCAT wert(fnrlparaphe);gueltigeparaphenCAT trennerFI END PROC +paraphelesen;PROC holegueltigeanrechnungskennz:gueltigeanrechnungskennz:= +trenner;inittupel(dnrschluessel);statleseschleife(dnrschluessel, +sachgebietanrechnungskennz,"",fnrschlsachgebiet,fnrschlschluessel,PROC +anrechnungskennzlesen)END PROC holegueltigeanrechnungskennz;PROC +anrechnungskennzlesen(BOOL VAR b):IF dbstatus<>0COR wert(fnrschlsachgebiet)<> +sachgebietanrechnungskennzTHEN b:=TRUE ELSE gueltigeanrechnungskennzCAT wert( +fnrschlschluessel);gueltigeanrechnungskennzCAT trennerFI END PROC +anrechnungskennzlesen;PROC initfelderdeseingangsbildschirms:INT VAR i;FOR i +FROM 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;PROC initbszeilepuffer:FOR izeileFROM 1UPTO +zeilenanzahlREP bszeile(izeile).datum:="";bszeile(izeile).tag:="";bszeile( +izeile).stunde:="";bszeile(izeile).paraphe:="";bszeile(izeile).art:=""; +bszeile(izeile).lv:="";bszeile(izeile).tagstd:="";PER END PROC +initbszeilepuffer;END PACKET vertretungsdatenbearbeiten + diff --git a/app/schulis/2.2.1/src/4.zeitwuensche bearbeiten b/app/schulis/2.2.1/src/4.zeitwuensche bearbeiten new file mode 100644 index 0000000..c52a4a9 --- /dev/null +++ b/app/schulis/2.2.1/src/4.zeitwuensche bearbeiten @@ -0,0 +1,243 @@ +PACKET zeitwuenschebearbeitenDEFINES zeitwuenschebearbeiten, +zeitwuenschekopieren,zeitwuenschespeichern:LET bearbmaske= +"ms zeitwuensche bearb",zulgewichte="�-3�-2�-1�-0�+0�+1�+2�+3�",fldkzlehrer=2 +,fldparaphe=3,fldkzsugrup=4,fldjgst=5,fldkenn=6,fldkzraeume=7,fldraeume=8, +fldkzfaecher=9,fldfaecher=10,fldkzkopp=11,fldkopp=12,fldhjkz=13,bearbfldbez=2 +,bearbfldmo1=3,bearbfldmo12=14,bearbflddi12=26,bearbfldmi12=38,bearbflddo12= +50,bearbfldfr12=62,bearbfldsa6=68,bearbfldutanz=69,bearbfldutgew=70, +bearbfldvmanz=71,bearbfldvmgew=72,bearbfldnmanz=73,bearbfldnmgew=74,posanzut= +1,posgewut=3,posanzvm=4,posgewvm=6,posanznm=7,posgewnm=9,laengeallezeitw=132, +laengejgst=2,laengeparaphe=4,laengefach=2,laengesugrup=6,laengesugrupkenn=4, +laengeraum=4,laengebezfeld=22,meldungwarten=69,meldungobjektunbek=55, +meldungfalschekz=56,meldungkeinelehrer=337,meldungkeinelv=321, +meldungkeinefaecher=68,meldungkeinesugrup=332,meldungkeineraeume=365, +meldungwertfalsch=34,meldungwertfehlt=129,meldungpruefen=329,meldungspeichern +=50,meldungnichtsp=63,trenner="�",leererunbestwunsch=" ", +raumkenndaten="c02 raeume",schuljahr="Schuljahr",halbjahr="Schulhalbjahr", +kennpar="P",kennsugrup="S",kennraum="R",kennfach="F",kennkopp="K",minus="-", +plus="+";INT VAR i;INT VAR prueffeld:=2,fall,objektlaenge:=0,anztage,anzvm, +anznm,dbstatusbeimholen,hjkenn:=-1;TEXT VAR schj:="",schhj:="",hjkennz:="", +startobjekt,allefaecher:=trenner,alleraeume:=trenner,alleparaphen:=trenner, +allesugruppen:=trenner;TEXT VAR bearbfolge:="",bezug,bsbestzw:="",bsunbestzw +:="",dbbestzw:="",dbunbestzw:="";TEXT VAR leererbestwunsch:= +" "+ +" ";LET +logbucheintrag="Anw. 4.1.4 Zeitwünsche Lehrer geändert";PROC +zeitwuenschebearbeiten:standardmeldung(meldungwarten,""); +pruefeingmaskeundsetzewerte;standardstartproc(bearbmaske); +standardkopfmaskeaktualisieren(text(vergleichsknoten)+" "+schhj+"."+" "+text( +schj,2)+"/"+subtext(schj,3));zeitwuenscheausgeben(startobjekt,bezug); +standardnproc.pruefeingmaskeundsetzewerte:hjkennz:=standardmaskenfeld(fldhjkz +);IF (hjkenn=0CAND hjkennz="")COR (hjkenn=1CAND hjkennz<>"")COR hjkenn=-1 +THEN ermittlehalbjahrFI ;IF standardmaskenfeld(fldkzlehrer)<>""THEN fall:= +fldkzlehrer;bezug:=kennpar;IF restleer(fall)THEN startobjekt:= +standardmaskenfeld(fldparaphe);IF startobjekt<>""THEN startobjekt:=text( +startobjekt,laengeparaphe);IF bestandsfehlerTHEN IF alleparaphen<>trenner +THEN standardmeldung(meldungobjektunbek,"");infeld(fall+1);return(1)FI ; +LEAVE zeitwuenschebearbeitenELSE bearbfolge:=subtext(alleparaphen,pos( +alleparaphen,trenner+startobjekt+trenner)+laengeparaphe+2);FI ;ELSE IF +alleparaphen=trennerTHEN holalleparaphenFI ;IF alleparaphen=trennerTHEN +standardmeldung(meldungkeinelehrer,"");infeld(fall+1);return(1);LEAVE +zeitwuenschebearbeitenELSE bearbfolge:=subtext(alleparaphen,laengeparaphe+3); +startobjekt:=subtext(alleparaphen,2,2+laengeparaphe-1)FI ;FI ;objektlaenge:= +laengeparaphe;ELSE standardmeldung(meldungfalschekz,"");infeld(prueffeld); +return(1);LEAVE zeitwuenschebearbeitenFI ELIF standardmaskenfeld(fldkzsugrup) +<>""THEN fall:=fldkzsugrup;bezug:=kennsugrup;IF restleer(fall)THEN +objektlaenge:=laengejgst+laengesugrupkenn;startobjekt:=standardmaskenfeld( +fldjgst);IF startobjekt<>""THEN startobjekt:=jgstaufber(startobjekt); +startobjektCAT text(standardmaskenfeld(fldkenn),laengesugrupkenn);IF +bestandsfehlerTHEN IF allesugruppen<>trennerTHEN standardmeldung( +meldungobjektunbek,"");infeld(fall+1);return(1)FI ;LEAVE +zeitwuenschebearbeitenELSE bearbfolge:=subtext(allesugruppen,pos( +allesugruppen,trenner+startobjekt+trenner)+objektlaenge+2);FI ;ELSE IF +allesugruppen=trennerTHEN holallesugruppen;FI ;IF allesugruppen=trennerTHEN +standardmeldung(meldungobjektunbek,"");infeld(fall+1);return(1);LEAVE +zeitwuenschebearbeitenELSE bearbfolge:=subtext(allesugruppen,laengesugrup+3); +startobjekt:=subtext(allesugruppen,2,2+laengesugrup-1)FI ;FI ;ELSE +standardmeldung(meldungfalschekz,"");infeld(prueffeld);return(1);LEAVE +zeitwuenschebearbeitenFI ELIF standardmaskenfeld(fldkzraeume)<>""THEN fall:= +fldkzraeume;bezug:=kennraum;IF restleer(fall)THEN startobjekt:= +standardmaskenfeld(fldraeume);IF startobjekt<>""THEN startobjekt:=text( +startobjekt,laengeraum);IF bestandsfehlerTHEN IF alleraeume<>trennerTHEN +standardmeldung(meldungobjektunbek,"");infeld(fall+1);return(1)FI ;LEAVE +zeitwuenschebearbeitenELSE bearbfolge:=subtext(alleraeume,pos(alleraeume, +trenner+startobjekt+trenner)+laengeraum+2);FI ;ELSE IF alleraeume=trenner +THEN holalleraeumeFI ;IF alleraeume=trennerTHEN standardmeldung( +meldungkeineraeume,"");infeld(fall+1);return(1);LEAVE zeitwuenschebearbeiten +ELSE bearbfolge:=subtext(alleraeume,laengeraum+3);startobjekt:=subtext( +alleraeume,2,2+laengeraum-1)FI ;FI ;objektlaenge:=laengeraum;ELSE +standardmeldung(meldungfalschekz,"");infeld(prueffeld);return(1);LEAVE +zeitwuenschebearbeitenFI ELIF standardmaskenfeld(fldkzfaecher)<>""THEN fall:= +fldkzfaecher;bezug:=kennfach;IF restleer(fall)THEN startobjekt:= +standardmaskenfeld(fldfaecher);IF startobjekt<>""THEN startobjekt:=text( +startobjekt,laengefach);IF bestandsfehlerTHEN IF allefaecher<>trennerTHEN +standardmeldung(meldungobjektunbek,"");infeld(fall+1);return(1);FI ;LEAVE +zeitwuenschebearbeitenELSE bearbfolge:=subtext(allefaecher,pos(allefaecher, +trenner+startobjekt+trenner)+laengefach+2);FI ;ELSE IF allefaecher=trenner +THEN holallefaecherFI ;IF allefaecher=trennerTHEN standardmeldung( +meldungkeinefaecher,"");infeld(fall+1);return(1);LEAVE zeitwuenschebearbeiten +ELSE bearbfolge:=subtext(allefaecher,laengefach+3);startobjekt:=subtext( +allefaecher,2,2+laengefach-1)FI ;FI ;objektlaenge:=laengefach;ELSE +standardmeldung(meldungfalschekz,"");infeld(prueffeld);return(1);LEAVE +zeitwuenschebearbeitenFI ELIF standardmaskenfeld(fldkzkopp)<>""THEN fall:= +fldkzkopp;bezug:=kennkopp;IF restleer(fall)THEN startobjekt:= +standardmaskenfeld(fldkopp);IF startobjekt<>""THEN IF bestandsfehlerTHEN IF +wert(fnrlvsj)=schjCAND wert(fnrlvhj)=schhjTHEN standardmeldung( +meldungobjektunbek,"");infeld(fall+1);return(1)FI ;LEAVE +zeitwuenschebearbeitenFI ;ELSE holestartobjektFI ;ELSE standardmeldung( +meldungfalschekz,"");infeld(prueffeld);return(1);LEAVE zeitwuenschebearbeiten +FI ELSE standardmeldung(meldungwertfehlt,"");infeld(fldkzlehrer);return(1); +LEAVE zeitwuenschebearbeitenFI .ermittlehalbjahr:allesugruppen:=trenner;schhj +:=schulkenndatum(halbjahr);schj:=schulkenndatum(schuljahr);IF hjkennz=""THEN +geplanteshjundsjberechnen(schhj,schj);hjkenn:=1ELSE hjkenn:=0FI . +holestartobjekt:inittupel(dnrlehrveranstaltungen);putwert(fnrlvsj,schj); +putwert(fnrlvhj,schhj);putwert(fnrlvkopplung,"");search(ixlvsjhjkopp,FALSE ); +IF wert(fnrlvsj)=schjCAND wert(fnrlvhj)=schhjCAND dbstatus<2THEN startobjekt +:=wert(fnrlvkopplung)ELSE standardmeldung(meldungkeinelv,"");infeld(fall); +return(1);LEAVE zeitwuenschebearbeitenFI .END PROC zeitwuenschebearbeiten; +PROC zeitwuenscheausgeben(TEXT CONST objekt,bez):IF fall=fldkzlehrerTHEN +standardmaskenfeld(text("Lehrer: "+objekt,laengebezfeld),bearbfldbez)ELIF +fall=fldkzsugrupTHEN standardmaskenfeld(text("Schülergruppe: "+startobjekt, +laengebezfeld),bearbfldbez)ELIF fall=fldkzraeumeTHEN standardmaskenfeld(text( +"Raum: "+objekt,laengebezfeld),bearbfldbez)ELIF fall=fldkzfaecherTHEN +standardmaskenfeld(text("Fach: "+objekt,laengebezfeld),bearbfldbez)ELSE +standardmaskenfeld(text("Kopplung: "+objekt,laengebezfeld),bearbfldbez)FI ; +infeld(1);loeschebildschirm;zeitwunschholen;IF dbstatus=0THEN +zeitwunschausgebenELSE setzedbwerteFI ;standardfelderausgeben;infeld( +bearbfldmo1).loeschebildschirm:FOR iFROM bearbfldmo1UPTO bearbfldnmgewREP +standardmaskenfeld("",i)PER .zeitwunschholen:inittupel(dnrzeitwuensche); +putwert(fnrzwsj,schj);putwert(fnrzwhj,schhj);putwert(fnrzwbezug,bez);putwert( +fnrzwbezugsobjekt,compress(objekt));search(dnrzeitwuensche,TRUE ); +dbstatusbeimholen:=dbstatus.zeitwunschausgeben:dbbestzw:=wert( +fnrzwbestimmtewuensche);dbunbestzw:=wert(fnrzwunbestimmtewuensche); +gibbestwuenscheaus(dbbestzw);gibunbestwuenscheaus(dbunbestzw).setzedbwerte: +dbbestzw:=leererbestwunsch;dbunbestzw:=leererunbestwunsch.END PROC +zeitwuenscheausgeben;PROC gibbestwuenscheaus(TEXT CONST bestwunsch):INT VAR +suchpos:=1;TEXT VAR wunsch:="";WHILE suchpos<>0REP suchpos:=pos(bestwunsch, +minus,suchpos);IF suchpos<>0THEN wunsch:=subtext(bestwunsch,suchpos,suchpos+1 +);standardmaskenfeld(wunsch,suchposDIV 2+3);suchposINCR 1FI ;PER ;suchpos:=1; +WHILE suchpos<>0REP suchpos:=pos(bestwunsch,plus,suchpos);IF suchpos<>0THEN +wunsch:=subtext(bestwunsch,suchpos,suchpos+1);standardmaskenfeld(wunsch, +suchposDIV 2+3);suchposINCR 1FI ;PER .END PROC gibbestwuenscheaus;PROC +gibunbestwuenscheaus(TEXT CONST unbestwunsch):TEXT VAR datum;IF unbestwunsch +<>leererunbestwunschTHEN datum:=unbestwunschSUB posanzut;IF datum<>" "THEN +standardmaskenfeld(datum,bearbfldutanz);FI ;datum:=unbestwunschSUB posgewut; +IF datum<>" "THEN standardmaskenfeld(datum,bearbfldutgew);FI ;datum:= +unbestwunschSUB posanzvm;IF datum<>" "THEN standardmaskenfeld(datum, +bearbfldvmanz)FI ;datum:=unbestwunschSUB posgewvm;IF datum<>" "THEN +standardmaskenfeld(datum,bearbfldvmgew)FI ;datum:=unbestwunschSUB posanznm; +IF datum<>" "THEN standardmaskenfeld(datum,bearbfldnmanz)FI ;datum:= +unbestwunschSUB posgewnm;IF datum<>" "THEN standardmaskenfeld(datum, +bearbfldnmgew)FI ;FI END PROC gibunbestwuenscheaus;BOOL PROC bestandsfehler: +IF fall=fldkzlehrerTHEN pruefparapheELIF fall=fldkzsugrupTHEN pruefsugrup +ELIF fall=fldkzraeumeTHEN pruefraumELIF fall=fldkzfaecherTHEN prueffachELIF +fall=fldkzkoppTHEN pruefkoppELSE FALSE FI .pruefparaphe:IF alleparaphen= +trennerTHEN holalleparaphen;IF alleparaphen=trennerTHEN standardmeldung( +meldungkeinelehrer,"");return(1);LEAVE bestandsfehlerWITH TRUE FI FI ;pos( +alleparaphen,trenner+startobjekt+trenner)=0.pruefsugrup:IF allesugruppen= +trennerTHEN holallesugruppen;IF allesugruppen=trennerTHEN standardmeldung( +meldungkeinesugrup,"");return(1);LEAVE bestandsfehlerWITH TRUE FI FI ;pos( +allesugruppen,trenner+startobjekt+trenner)=0.pruefraum:IF alleraeume=trenner +THEN holalleraeume;IF alleraeume=trennerTHEN standardmeldung( +meldungkeineraeume,"");return(1);LEAVE bestandsfehlerWITH TRUE FI FI ;pos( +alleraeume,trenner+startobjekt+trenner)=0.prueffach:IF allefaecher=trenner +THEN holallefaecher;IF allefaecher=trennerTHEN standardmeldung( +meldungkeinefaecher,"");return(1);LEAVE bestandsfehlerWITH TRUE FI FI ;pos( +allefaecher,trenner+startobjekt+trenner)=0.pruefkopp:inittupel( +dnrlehrveranstaltungen);putwert(fnrlvsj,schj);putwert(fnrlvhj,schhj);putwert( +fnrlvkopplung,startobjekt);search(ixlvsjhjkopp,TRUE );dbstatus<>ok.END PROC +bestandsfehler;PROC holalleparaphen:inittupel(dnrlehrer);statleseschleife( +dnrlehrer,"","",fnrlparaphe,fnrlfamname,PROC lehrer).END PROC holalleparaphen +;PROC holalleraeume:inittupel(dnrschluessel);statleseschleife(dnrschluessel, +raumkenndaten,"",fnrschlsachgebiet,fnrschlschluessel,PROC raeume).END PROC +holalleraeume;PROC holallesugruppen:inittupel(dnraktschuelergruppen); +statleseschleife(dnraktschuelergruppen,schj,schhj,fnrsgrpsj,fnrsgrphj,PROC +sugruppen).END PROC holallesugruppen;PROC holallefaecher:inittupel(dnrfaecher +);statleseschleife(dnrfaecher,"","",fnrffach,fnrffachbez,PROC faecher).END +PROC holallefaecher;PROC lehrer(BOOL VAR b):IF dbstatus<>0THEN b:=TRUE ELSE +alleparaphenCAT text(wert(fnrlparaphe),laengeparaphe);alleparaphenCAT trenner +FI END PROC lehrer;PROC sugruppen(BOOL VAR b):IF dbstatus<>0COR wert( +fnrsgrpsj)<>schjCOR wert(fnrsgrphj)<>schhjTHEN b:=TRUE ELSE allesugruppenCAT +jgstaufber(wert(fnrsgrpjgst));allesugruppenCAT text(wert(fnrsgrpkennung), +laengesugrupkenn);allesugruppenCAT trennerFI END PROC sugruppen;PROC raeume( +BOOL VAR b):IF dbstatus<>0COR wert(fnrschlsachgebiet)>raumkenndatenTHEN b:= +TRUE ELSE alleraeumeCAT text(wert(fnrschlschluessel),laengeraum);alleraeume +CAT trennerFI END PROC raeume;PROC faecher(BOOL VAR b):IF dbstatus<>0THEN b:= +TRUE ELSE allefaecherCAT text(wert(fnrffach),laengefach);allefaecherCAT +trennerFI END PROC faecher;BOOL PROC restleer(INT CONST fall):IF fall= +fldkzlehrerTHEN FOR iFROM fldkzsugrupUPTO fldkoppREP IF standardmaskenfeld(i) +<>""THEN prueffeld:=i;LEAVE restleerWITH FALSE FI PER ELIF fall=fldkzsugrup +THEN IF standardmaskenfeld(fldkzlehrer)<>""THEN prueffeld:=fldkzlehrer;LEAVE +restleerWITH FALSE FI ;IF standardmaskenfeld(fldparaphe)<>""THEN prueffeld:= +fldparaphe;LEAVE restleerWITH FALSE FI ;FOR iFROM fldkzraeumeUPTO fldkoppREP +IF standardmaskenfeld(i)<>""THEN prueffeld:=i;LEAVE restleerWITH FALSE FI +PER ELIF fall=fldkzraeumeCOR fall=fldkzfaecherTHEN FOR iFROM fldkzlehrerUPTO +fall-1REP IF standardmaskenfeld(i)<>""THEN prueffeld:=i;LEAVE restleerWITH +FALSE FI PER ;FOR iFROM fall+2UPTO fldkoppREP IF standardmaskenfeld(i)<>"" +THEN prueffeld:=i;LEAVE restleerWITH FALSE FI PER ;ELIF fall=fldkzkoppTHEN +FOR iFROM fldkzlehrerUPTO fldfaecherREP IF standardmaskenfeld(i)<>""THEN +prueffeld:=i;LEAVE restleerWITH FALSE FI PER ;FI ;TRUE END PROC restleer; +PROC zeitwuenschekopieren:INT VAR aktfld:=infeld;TEXT VAR wunsch;IF aktfld>= +bearbfldmo1CAND aktfld<=bearbfldsa6THEN kopierfeldinhaltaufrestzeileFI ; +return(1).kopierfeldinhaltaufrestzeile:wunsch:=standardmaskenfeld(aktfld);IF +aktfld<=bearbfldmo12THEN FOR iFROM aktfldUPTO bearbfldmo12REP +standardmaskenfeld(wunsch,i)PER ELIF aktfld<=bearbflddi12THEN FOR iFROM +aktfldUPTO bearbflddi12REP standardmaskenfeld(wunsch,i)PER ELIF aktfld<= +bearbfldmi12THEN FOR iFROM aktfldUPTO bearbfldmi12REP standardmaskenfeld( +wunsch,i)PER ELIF aktfld<=bearbflddo12THEN FOR iFROM aktfldUPTO bearbflddo12 +REP standardmaskenfeld(wunsch,i)PER ELIF aktfld<=bearbfldfr12THEN FOR iFROM +aktfldUPTO bearbfldfr12REP standardmaskenfeld(wunsch,i)PER ELSE FOR iFROM +aktfldUPTO bearbfldsa6REP standardmaskenfeld(wunsch,i)PER FI ; +standardfelderausgeben;infeld(aktfld).END PROC zeitwuenschekopieren;PROC +zeitwuenschespeichern(BOOL CONST speichern):TEXT VAR zw:="";BOOL VAR +aenderung:=FALSE ;IF speichernTHEN standardmeldung(meldungpruefen,"");anztage +:=0;anzvm:=0;anznm:=0;bsbestzw:="";bsunbestzw:="";FOR iFROM bearbfldmo1UPTO +bearbfldsa6REP zw:=standardmaskenfeld(i);IF zw=""THEN bsbestzwCAT " "ELIF zw +="-0"THEN bsbestzwCAT " "ELIF zw="+0"THEN bsbestzwCAT " "ELSE bsbestzwCAT +zwFI PER ;FOR iFROM bearbfldutanzUPTO bearbfldnmgewREP zw:=standardmaskenfeld +(i);IF length(zw)>1THEN infeld(i);fehlermeldungFI ;IF iMOD 2=0THEN +bearbeitegewichtELSE bearbeiteanzahlFI PER ;IF dbbestzw<>bsbestzwTHEN +aenderung:=TRUE ;pruefebestzwFI ;IF dbunbestzw<>bsunbestzwTHEN aenderung:= +TRUE ;pruefeunbestzwFI ;IF aenderungTHEN standardmeldung(meldungspeichern,"") +;logeintrag(logbucheintrag);datenspeichernFI ;ELSE standardmeldung( +meldungnichtsp,"")FI ;naechsterbildschirm.bearbeitegewicht:IF zw=""THEN +bsunbestzwCAT " "ELSE bsunbestzwCAT "-";bsunbestzwCAT zwFI .bearbeiteanzahl: +IF zw=""THEN bsunbestzwCAT " "ELSE bsunbestzwCAT zwFI .pruefebestzw:i:=1; +WHILE i<laengeallezeitwREP zw:=subtext(bsbestzw,i,i+1);IF subtext(dbbestzw,i, +i+1)<>zwTHEN pruefeeintragFI ;iINCR 2PER .pruefeeintrag:IF zw=" "THEN LEAVE +pruefeeintragFI ;IF pos(zulgewichte,trenner+zw+trenner)=0THEN infeld(iDIV 2+3 +);fehlermeldungFI .pruefeunbestzw:IF eingabefalsch(1,1,5)THEN infeld( +bearbfldutanz);fehlermeldungFI ;IF eingabefalsch(4,1,6)THEN infeld( +bearbfldvmanz);fehlermeldungFI ;IF eingabefalsch(7,1,5)THEN infeld( +bearbfldnmanz);fehlermeldungFI ;IF eingabefalsch(3,1,3)THEN infeld( +bearbfldutgew);fehlermeldungFI ;IF eingabefalsch(6,1,3)THEN infeld( +bearbfldvmgew);fehlermeldungFI ;IF eingabefalsch(9,1,3)THEN infeld( +bearbfldnmgew);fehlermeldungFI ;IF anztage+anzvm>6THEN infeld(bearbfldutanz); +fehlermeldungnichtmöglichELIF anztage+anznm>6THEN infeld(bearbfldutanz); +fehlermeldungnichtmöglichELIF anztage*2+anzvm+anznm>11THEN infeld( +bearbfldutanz);fehlermeldungnichtmöglichFI ;FOR iFROM 1UPTO 3REP IF ( +bsunbestzwSUB (i*3-2))=" "CAND (bsunbestzwSUB (i*3))<>" "THEN infeld( +bearbfldutanz+((i-1)*2));fehlermeldungfehlenderwertELIF (bsunbestzwSUB (i*3-2 +))<>" "CAND (bsunbestzwSUB (i*3))=" "THEN infeld(bearbfldutgew+((i-1)*2)); +fehlermeldungfehlenderwertFI PER .fehlermeldungnichtmöglich:return(1); +standardmeldung(meldungfalschekz,"");LEAVE zeitwuenschespeichern. +fehlermeldungfehlenderwert:return(1);standardmeldung(meldungwertfehlt,""); +LEAVE zeitwuenschespeichern.fehlermeldung:return(1);standardmeldung( +meldungwertfalsch,"");LEAVE zeitwuenschespeichern.naechsterbildschirm:IF fall +=fldkzkoppTHEN WHILE wert(fnrlvkopplung)=startobjektCAND dbstatus<>3REP succ( +ixlvsjhjkopp);PER ;IF wert(fnrlvsj)=schjCAND wert(fnrlvhj)=schhjCAND dbstatus +<>3THEN startobjekt:=wert(fnrlvkopplung);zeitwuenscheausgeben(startobjekt, +bezug);return(1)ELSE enter(2)FI ELIF bearbfolge=""THEN enter(2)ELSE +startobjekt:=text(bearbfolge,objektlaenge);bearbfolge:=subtext(bearbfolge, +objektlaenge+2);zeitwuenscheausgeben(startobjekt,bezug);return(1)FI . +datenspeichern:putwert(fnrzwbestimmtewuensche,bsbestzw);putwert( +fnrzwunbestimmtewuensche,bsunbestzw);IF dbstatusbeimholen=0THEN update( +dnrzeitwuensche)ELSE insert(dnrzeitwuensche)FI ;IF dbstatus<>0THEN +fehlermeldungbeimspeichernFI .fehlermeldungbeimspeichern:return(1); +standardmeldung(meldungnichtsp,"");LEAVE zeitwuenschespeichern.END PROC +zeitwuenschespeichern;BOOL PROC eingabefalsch(INT CONST charpos,ugr,ogr): +TEXT VAR datum:=bsunbestzwSUB charpos;INT VAR dat;IF datum=" "THEN FALSE +ELSE dat:=int(datum);IF charpos=1THEN anztage:=datELIF charpos=4THEN anzvm:= +datELIF charpos=7THEN anznm:=datFI ;IF lastconversionokTHEN dat<ugrCOR dat> +ogrELSE TRUE FI FI END PROC eingabefalsch;END PACKET zeitwuenschebearbeiten + diff --git a/app/schulis/2.2.1/src/4.zeitwuensche drucken b/app/schulis/2.2.1/src/4.zeitwuensche drucken new file mode 100644 index 0000000..521ab2b --- /dev/null +++ b/app/schulis/2.2.1/src/4.zeitwuensche drucken @@ -0,0 +1,129 @@ +PACKET zeitwuenschedruckenDEFINES zeitwuenschespezielleteile:LET AUSGFELD = +ROW ausgfeldlaengeTEXT ,ausgfeldlaenge=18,zeilenbreite=60,zeilenanzahl=1,sj= +"Schuljahr",hj="Schulhalbjahr",ueberschrzeilen=0,ausgabeparam="#",eingmaske= +"ms liste zeitwuensche",meldungbearb=352,meldungpraez=129,fldsortlehrer=2, +fldsortsugrup=3,fldsortraeume=4,fldsortfaecher=5,fldsortkopplg=6,fldakthj=7, +fldaufdr=9,fldaufbs=8,posanzut=1,posgewut=3,posanzvm=4,posgewvm=6,posanznm=7, +posgewnm=9,ausganzpos=11,ausggewpos=18,minus="-",plus="+",leerzeile=" ", +kennzlehrer="P",kennzsugrup="S",kennzraeume="R",kennzfaecher="F",kennzkoppl= +"K",moeintrag="Mo ",dieintrag="Di ",mieintrag="Mi ",doeintrag="Do ", +freintrag="Fr ",saeintrag="Sa ",anhangl="Lehrer ",anhangs="Schülergruppen " +,anhangr="Räume ",anhangf="Fächer ",anhangk="Kopplungen ",ueberschrift= +"Liste der Zeitwünsche für ",leererunbestwunsch=" ";AUSGFELD VAR +ausgfeld;INT VAR i,status,druckzeilenzahl,fall;TEXT VAR bezug,objekt, +objektbez,druckstrich;TEXT VAR sjahr,hjahr;INT VAR schj,schhj:=0;TEXT VAR +bestwunsch,unbestwunsch,zeitwuenscheueberschrift:="";TEXT VAR bestwzeile, +unbestwtage,unbestwvorm,unbestwnachm,bestwurzeile:= +" _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _"+ +" _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ "+ +" _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ "+ +"_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ";TEXT VAR +moobjeintrag,diobjeintrag,miobjeintrag,doobjeintrag,frobjeintrag,saobjeintrag +;BOOL PROC multistop:dbstatus=okCAND wert(fnrzwbezug)=bezugCAND intwert( +fnrzwhj)=schhjCAND intwert(fnrzwsj)=schjEND PROC multistop;BOOL PROC +multistopsim:IF dbstatus=okTHEN IF intwert(fnrzwhj)=schhjCAND intwert(fnrzwsj +)=schjCAND wert(fnrzwbezug)=bezugTHEN LEAVE multistopsimWITH TRUE ELSE +setzebestandende(TRUE );LEAVE multistopsimWITH FALSE FI ELSE setzebestandende +(TRUE )FI ;FALSE END PROC multistopsim;PROC holeakthj:holakthj;holaktj;IF +standardmaskenfeld(fldakthj)=""THEN bergeplhjujFI .holakthj:hjahr:= +schulkenndatum(hj);schhj:=int(hjahr).holaktj:sjahr:=schulkenndatum(sj);schj:= +int(sjahr).bergeplhjuj:geplanteshjundsjberechnen(hjahr,sjahr);schj:=int(sjahr +);schhj:=int(hjahr).END PROC holeakthj;PROC zeitwuenschespezielleteile(INT +CONST anwahl):SELECT anwahlOF CASE 1:zeitwuenschedialogvorbereitenCASE 2: +zeitwuenscherichtigCASE 3:zeitwuenschelistenvorbereitenCASE 4: +zeitwuenschedruckvorbereitenCASE 5:zeitwuenscheseitedruckenCASE 6: +zeitwuenschebsvorbereitenCASE 7:zeitwuenscheseitezeigenEND SELECT .END PROC +zeitwuenschespezielleteile;PROC zeitwuenschedialogvorbereiten: +setzeanfangswerte(eingmaske,fldsortlehrer)END PROC +zeitwuenschedialogvorbereiten;PROC zeitwuenscherichtig:IF standardmaskenfeld( +fldsortlehrer)=""CAND standardmaskenfeld(fldsortsugrup)=""CAND +standardmaskenfeld(fldsortraeume)=""CAND standardmaskenfeld(fldsortfaecher)= +""CAND standardmaskenfeld(fldsortkopplg)=""THEN standardmeldung(meldungpraez, +"");setzeeingabetest(FALSE );infeld(fldsortlehrer);LEAVE zeitwuenscherichtig +ELIF standardmaskenfeld(fldaufdr)=""CAND standardmaskenfeld(fldaufbs)=""THEN +standardmeldung(meldungpraez,"");setzeeingabetest(FALSE );infeld( +fldsortlehrer);LEAVE zeitwuenscherichtigFI ;standardpruefe(5,fldsortlehrer, +fldsortkopplg,0,"",status);IF status<>0THEN infeld(status);setzeeingabetest( +FALSE )ELSE standardpruefe(5,fldaufdr,fldaufbs,0,"",status);IF status<>0THEN +infeld(status);setzeeingabetest(FALSE )ELSE IF standardmaskenfeld( +fldsortlehrer)<>""THEN fall:=fldsortlehrer;objektbez:=anhangl;bezug:= +kennzlehrerELIF standardmaskenfeld(fldsortsugrup)<>""THEN fall:=fldsortsugrup +;objektbez:=anhangs;bezug:=kennzsugrupELIF standardmaskenfeld(fldsortraeume) +<>""THEN fall:=fldsortraeume;objektbez:=anhangr;bezug:=kennzraeumeELIF +standardmaskenfeld(fldsortfaecher)<>""THEN fall:=fldsortfaecher;objektbez:= +anhangf;bezug:=kennzfaecherELIF standardmaskenfeld(fldsortkopplg)<>""THEN +fall:=fldsortkopplg;objektbez:=anhangk;bezug:=kennzkopplFI ; +setzeausgabedrucker(standardmaskenfeld(fldaufdr)<>"");setzeeingabetest(TRUE ) +;holeakthj;zeitwuenscheueberschrift:=ueberschrift+objektbez+hjahr+". "+text( +sjahr,2)+"/"+subtext(sjahr,3)FI ;FI END PROC zeitwuenscherichtig;PROC +zeitwuenschelistenvorbereiten:BOOL VAR b;inittupel(dnrzeitwuensche);initobli( +zeilenanzahl);setzeidentiwert("");setzewerte;objektlistestarten( +dnrzeitwuensche,sjahr,fnrzwbezugsobjekt,TRUE ,b);setzebestandende(NOT +multistopCOR b).setzewerte:putintwert(fnrzwsj,schj);putintwert(fnrzwhj,schhj) +;putwert(fnrzwbezug,bezug).END PROC zeitwuenschelistenvorbereiten;PROC +zeitwuenschebsvorbereiten:standardkopfmaskeaktualisieren(zentriert( +zeitwuenscheueberschrift,51));setzebildanfangsposition(3)END PROC +zeitwuenschebsvorbereiten;PROC zeitwuenscheseitezeigen:blaettern(PROC (INT +CONST )zeitwuenschezeigen,aktion,TRUE ,TRUE ,BOOL PROC multistop);END PROC +zeitwuenscheseitezeigen;PROC zeitwuenschezeigen(INT CONST procparameter): +zeitwuenscheholen;zeitwuenscheaufbereiten;zeitwuenscheaufbs;END PROC +zeitwuenschezeigen;PROC zeitwuenscheholen:objekt:=wert(fnrzwbezugsobjekt); +bestwunsch:=wert(fnrzwbestimmtewuensche);unbestwunsch:=wert( +fnrzwunbestimmtewuensche);IF NOT multistopTHEN setzebestandende(TRUE )FI . +END PROC zeitwuenscheholen;PROC zeitwuenscheaufbereiten:bereiteobjektauf( +objekt)END PROC zeitwuenscheaufbereiten;PROC zeitwuenscheaufbs:FOR iFROM 1 +UPTO ausgfeldlaengeREP ausgfeld(i)IN ausgabepos;erhoeheausgabeposumeinsPER +END PROC zeitwuenscheaufbs;PROC zeitwuenschedruckvorbereiten:druckvorbereiten +;variablensetzen;initdruckkopf(zentriert(zeitwuenscheueberschrift,druckbreite +));inittupel(dnrzeitwuensche);setzebestandende(FALSE );setzewerte; +lesenvorbereitendruck(PROC (INT CONST ,BOOL PROC ,INT VAR )scanforward,BOOL +PROC multistopsim).variablensetzen:druckstrich:=druckbreite*"-"; +druckzeilenzahl:=drucklaenge(ueberschrzeilen).setzewerte:putintwert(fnrzwsj, +schj);putintwert(fnrzwhj,schhj);putwert(fnrzwbezug,bezug).END PROC +zeitwuenschedruckvorbereiten;PROC zeitwuenscheseitedrucken: +zeitwuenscheueberschriftdrucken;seitedrucken(PROC (INT VAR ) +zeitwuenschedrucken,druckzeilenzahl,ausgfeldlaenge,BOOL PROC multistopsim); +seitenwechselEND PROC zeitwuenscheseitedrucken;PROC +zeitwuenscheueberschriftdrucken:druckkopfschreibenEND PROC +zeitwuenscheueberschriftdrucken;PROC zeitwuenschedrucken(INT VAR zz): +zeitwuenscheholen;standardmeldung(meldungbearb,objektbez+objekt+ausgabeparam) +;zeitwuenscheaufbereiten(zz);zeitwuenscheindruckdatei(zz)END PROC +zeitwuenschedrucken;PROC zeitwuenscheaufbereiten(INT VAR zz):bereiteobjektauf +(objekt)END PROC zeitwuenscheaufbereiten;PROC zeitwuenscheindruckdatei(INT +VAR zz):FOR iFROM 1UPTO ausgfeldlaengeREP druckzeileschreiben(ausgfeld(i));zz +INCR 1PER ;druckzeileschreiben(leerzeile);zzINCR 1;druckzeileschreiben( +leerzeile);zzINCR 1END PROC zeitwuenscheindruckdatei;PROC bereiteobjektauf( +TEXT CONST objekt):INT VAR suchpos:=1;TEXT VAR wunsch:="";moobjeintrag:= +moeintrag;diobjeintrag:=dieintrag;miobjeintrag:=mieintrag;doobjeintrag:= +doeintrag;frobjeintrag:=freintrag;saobjeintrag:=saeintrag;uebertragwuensche; +ausgfeld(1):=(objekt+":");ausgfeld(2):=leerzeile;ausgfeld(3):=( +"Wünsche zu festen Zeiten:");ausgfeld(4):=(leerzeile);ausgfeld(5):=( +" 1 2 3 4 5 6 7 8 9 10 11 12");ausgfeld(6):=( +moobjeintrag+text(bestwzeile,48));ausgfeld(7):=(diobjeintrag+subtext( +bestwzeile,49,96));ausgfeld(8):=(miobjeintrag+subtext(bestwzeile,97,144)); +ausgfeld(9):=(doobjeintrag+subtext(bestwzeile,145,192));ausgfeld(10):=( +frobjeintrag+subtext(bestwzeile,193,240));ausgfeld(11):=(saobjeintrag+subtext +(bestwzeile,241));ausgfeld(12):=(leerzeile);ausgfeld(13):=( +" allgemeine Wünsche:");ausgfeld(14):=( +" Anzahl/Gewicht ");ausgfeld(15):=("ganze Tage " ++unbestwtage);ausgfeld(16):=("zusätzl. Vorm. "+unbestwvorm);ausgfeld(17):=( +"zusätzl. Nachm. "+unbestwnachm);ausgfeld(18):=(leerzeile).uebertragwuensche: +bestwzeile:=bestwurzeile;unbestwtage:=" _ _ ";unbestwvorm:= +" _ _ ";unbestwnachm:=" _ _ ";tragbestwuenscheein +;tragunbestwuenscheein.tragbestwuenscheein:suchpos:=1;WHILE suchpos<>0REP +suchpos:=pos(bestwunsch,minus,suchpos);IF suchpos<>0THEN wunsch:=subtext( +bestwunsch,suchpos,suchpos+1);replace(bestwzeile,suchpos*2-1,wunsch);suchpos +INCR 1FI ;PER ;suchpos:=1;WHILE suchpos<>0REP suchpos:=pos(bestwunsch,plus, +suchpos);IF suchpos<>0THEN wunsch:=subtext(bestwunsch,suchpos,suchpos+1); +replace(bestwzeile,suchpos*2-1,wunsch);suchposINCR 1FI ;PER . +tragunbestwuenscheein:IF unbestwunsch<>leererunbestwunschTHEN wunsch:= +unbestwunschSUB posanzut;IF wunsch<>" "THEN replace(unbestwtage,ausganzpos, +wunsch)FI ;wunsch:=unbestwunschSUB posgewut;IF wunsch<>" "THEN replace( +unbestwtage,ausggewpos,wunsch)FI ;wunsch:=unbestwunschSUB posanzvm;IF wunsch +<>" "THEN replace(unbestwvorm,ausganzpos,wunsch)FI ;wunsch:=unbestwunschSUB +posgewvm;IF wunsch<>" "THEN replace(unbestwvorm,ausggewpos,wunsch)FI ;wunsch +:=unbestwunschSUB posanznm;IF wunsch<>" "THEN replace(unbestwnachm,ausganzpos +,wunsch)FI ;wunsch:=unbestwunschSUB posgewnm;IF wunsch<>" "THEN replace( +unbestwnachm,ausggewpos,wunsch)FI FI .END PROC bereiteobjektauf;END PACKET +zeitwuenschedrucken + diff --git a/app/schulis/2.2.1/src/5.STATISTIK SERVER.files b/app/schulis/2.2.1/src/5.STATISTIK SERVER.files new file mode 100644 index 0000000..c813089 --- /dev/null +++ b/app/schulis/2.2.1/src/5.STATISTIK SERVER.files @@ -0,0 +1,2 @@ +5.manager + diff --git a/app/schulis/2.2.1/src/5.STATISTIK.files b/app/schulis/2.2.1/src/5.STATISTIK.files new file mode 100644 index 0000000..26554d2 --- /dev/null +++ b/app/schulis/2.2.1/src/5.STATISTIK.files @@ -0,0 +1,9 @@ +5.thesaurus +5.statistik liste +5.merkmale +5.datenbasis +5.erstellen +5.benennen +5.felder +5.drucken + diff --git a/app/schulis/2.2.1/src/5.benennen b/app/schulis/2.2.1/src/5.benennen new file mode 100644 index 0000000..6f67e8a --- /dev/null +++ b/app/schulis/2.2.1/src/5.benennen @@ -0,0 +1,116 @@ +PACKET benennenDEFINES statbenennen:LET statistikdatei="STATISTIK.", +statistikserver="statistik server",maskebenennen="mst statistik benennen", +statistikvorzeilen=3,maxstatistiken=200,maxzeilen=75,maxspalten=50, +minspaltenbreite=4,niltext="",space=" ",meldungzusatz="+",meldungback= +"��������������",alt="alt",meldungrestore=" ",mgibtesnicht=477, +mgibtesschon=485,mspeichern=486,mnichtspeichern=487,mentfernenfrage=488, +mgeloescht=489,mnichtgeloescht=490,fstatnr=2,fbezeichnung=3,fzeilen=4, +fspalten=5,fentfernen=6,pruefeimintervall=3,pruefeobwert=1;TEXT VAR +statistiknummer;FILE VAR stat;PROC statbenennen(INT CONST was):SELECT wasOF +CASE 1:benennenstartprocCASE 2:benennennprocCASE 3: +benennenbearbeitenstartprocCASE 4:benennenbearbeitenspeichernCASE 5: +benennenneustartprocCASE 6:benennenentfernenstartprocCASE 7: +benennenentfernenexec;leave(2)CASE 8:statlistezeigen(int(standardmaskenfeld( +fstatnr)))CASE 9:benennenlistebearbeitenstartprocCASE 10: +benennenlistebearbeitenspeichernCASE 11:benennenlisteentfernenstartprocCASE +12:benennenentfernenexec;enter(1)CASE 13:benennenbearbeitennichtspeichern +CASE 14:benennenentfernennichtloeschen;leave(2)CASE 15: +benennenentfernennichtloeschen;enter(1)CASE 16:benennenentfernennichtloeschen +;leave(3)END SELECT .benennenstartproc:standardstartproc(maskebenennen); +standardmaskenfeld(niltext,fstatnr);benennennproc.benennennproc: +standardmaskenfeld(niltext,fbezeichnung);feldschutz(fbezeichnung); +standardmaskenfeld(niltext,fzeilen);feldschutz(fzeilen);standardmaskenfeld( +niltext,fspalten);feldschutz(fspalten);feldschutz(fentfernen);feldfrei( +fstatnr);infeld(fstatnr);standardnproc.benennenbearbeitenstartproc:IF NOT +nummerokTHEN leave(1);ELIF NOT statistikexistiert(statnummer)THEN statmeldung +(mgibtesnicht);infeld(fstatnr);leave(1);ELSE benennenfreigebenundnproc;FI . +benennenbearbeitenspeichern:IF NOT eingabenokTHEN leave(1);ELIF NOT ( +statistiknummer=statnummer)AND statistikexistiert(statnummer)THEN statmeldung +(mgibtesschon);infeld(fstatnr);leave(1);ELSE statmeldung(mspeichern); +statistikspeichern(statistiknummer,statnummer);standardmaskenfeld(niltext, +fstatnr);leave(2);FI .benennenneustartproc:IF NOT nummerokTHEN leave(1);ELIF +statistikexistiert(statnummer)THEN statmeldung(mgibtesschon);infeld(fstatnr); +leave(1);ELSE benennenfreigeben;statistiknummer:=statnummer;standardnprocFI . +benennenentfernenstartproc:IF NOT nummerokTHEN leave(1);ELIF NOT +statistikexistiert(statnummer)THEN statmeldung(mgibtesnicht);infeld(fstatnr); +leave(1);ELSE benennenschuetzenundnproc;FI .benennenschuetzenundnproc: +benennenausfuellen(statnummer);feldschutz(fstatnr);feldschutz(fbezeichnung); +feldschutz(fzeilen);feldschutz(fspalten);infeld(fstatnr); +standardfelderausgeben;statmeldung(mentfernenfrage);infeld(fentfernen); +standardnproc.benennenfreigebenundnproc:benennenausfuellen(statnummer); +benennenfreigeben;statistiknummer:=statnummer;standardnproc.benennenfreigeben +:feldfrei(fbezeichnung);feldfrei(fzeilen);feldfrei(fspalten);feldschutz( +fentfernen);statnummerIN fstatnr;infeld(fbezeichnung).benennenentfernenexec: +statistikloeschen(statnummer);statmeldung(mgeloescht);standardmaskenfeld( +niltext,fstatnr).benennenlistebearbeitenstartproc:statlistebearbeiten( +maskebenennen);IF statlisteeintrag>niltextTHEN standardmaskenfeld( +statlisteeintrag,fstatnr);benennenfreigebenundnproc;ELSE standardmaskenfeld( +niltext,fstatnr);leave(2);FI .benennenlistebearbeitenspeichern:IF NOT +eingabenokTHEN leave(1);ELIF NOT (statistiknummer=statnummer)AND +statistikexistiert(statnummer)THEN statmeldung(mgibtesschon);infeld(fstatnr); +leave(1);ELSE statmeldung(mspeichern);statistikspeichern(statistiknummer, +statnummer);enter(1);FI .benennenlisteentfernenstartproc:statlistebearbeiten( +maskebenennen);IF statlisteeintrag>niltextTHEN standardmaskenfeld( +statlisteeintrag,fstatnr);benennenschuetzenundnproc;ELSE standardmaskenfeld( +niltext,fstatnr);leave(2);FI .benennenbearbeitennichtspeichern:statmeldung( +mnichtspeichern);standardmaskenfeld(niltext,fstatnr);leave(2). +benennenentfernennichtloeschen:statmeldung(mnichtgeloescht); +standardmaskenfeld(niltext,fstatnr).nummerok:INT VAR status;standardpruefe( +pruefeimintervall,fstatnr,1,maxstatistiken,niltext,status);IF status>0THEN +infeld(status)FI ;status=0.eingabenok:IF nummerokTHEN standardpruefe( +pruefeobwert,fbezeichnung,0,0,niltext,status);FI ;IF status=0THEN +standardpruefe(pruefeimintervall,fzeilen,1,maxzeilen,niltext,status);FI ;IF +status=0THEN standardpruefe(pruefeimintervall,fspalten,1,maxspalten,niltext, +status);FI ;IF status>0THEN infeld(status);FI ;status=0.statnummer:text(int( +standardmaskenfeld(fstatnr))).END PROC statbenennen;PROC statmeldung(INT +CONST meldungnummer):standardmeldung(meldungnummer,standardmaskenfeld(fstatnr +)+meldungzusatz);END PROC statmeldung;PROC benennenausfuellen(TEXT CONST +statnummer):TEXT VAR bezeichnung;INT VAR wert;forget(statistikdatei+ +statnummer,quiet);fetch(statistikdatei+statnummer,task(statistikserver));stat +:=sequentialfile(input,statistikdatei+statnummer);standardmaskenfeld( +statnummer,fstatnr);getline(stat,bezeichnung);standardmaskenfeld(bezeichnung, +fbezeichnung);get(stat,wert);standardmaskenfeld(text(wert),fzeilen);get(stat, +wert);standardmaskenfeld(text(wert),fspalten);forget(statistikdatei+ +statnummer,quiet);END PROC benennenausfuellen;BOOL PROC statistikexistiert( +TEXT CONST statnummer):exists(statistikdatei+statnummer,task(statistikserver) +)END PROC statistikexistiert;PROC statistikloeschen(TEXT CONST statnummer): +IF statistikexistiert(statnummer)THEN commanddialogue(FALSE );erase( +statistikdatei+statnummer,task(statistikserver));commanddialogue(TRUE );FI ; +END PROC statistikloeschen;PROC statistikspeichern(TEXT CONST altername, +neuername):INT VAR zeilenneu:=int(standardmaskenfeld(fzeilen)),spaltenneu:= +int(standardmaskenfeld(fspalten)),benennenneu:=zeilenneu*spaltenneu,zeilenalt +,spaltenalt,benennenalt,zaehl,zeile,spalte;TEXT VAR dateizeile;FILE VAR +statalt;forget(statistikdatei+altername,quiet);forget(statistikdatei+ +neuername,quiet);IF NOT statistikexistiert(altername)THEN +erzeugeneuestatistikELSE aenderealtestatistik;statistikloeschen(altername); +FI ;sichereneuestatistik.erzeugeneuestatistik:erzeugestatistikmitneuemnamen; +display(meldungback);FOR zaehlFROM benennenneuDOWNTO 1REP line(stat);cout( +zaehl);PER ;display(meldungrestore).erzeugestatistikmitneuemnamen:stat:= +sequentialfile(output,statistikdatei+neuername);putline(stat, +standardmaskenfeld(fbezeichnung));dateizeile:=text(zeilenneu)+space+text( +spaltenneu)+space;FOR zaehlFROM 1UPTO spaltenneuREP dateizeileCAT text( +minspaltenbreite);dateizeileCAT space;PER ;putline(stat,dateizeile);line(stat +).sichereneuestatistik:save(statistikdatei+neuername,task(statistikserver)); +forget(statistikdatei+neuername,quiet).aenderealtestatistik:forget( +statistikdatei+alt,quiet);fetch(statistikdatei+altername,task(statistikserver +));rename(statistikdatei+altername,statistikdatei+alt);statalt:= +sequentialfile(input,statistikdatei+alt);getline(statalt,dateizeile);get( +statalt,zeilenalt);get(statalt,spaltenalt);benennenalt:=zeilenalt*spaltenalt; +IF zeilenalt<>zeilenneuOR spaltenalt<>spaltenneuTHEN aenderedieganzestatistik +ELIF dateizeile<>standardmaskenfeld(fbezeichnung)THEN aenderediedateizeile +ELSE rename(statistikdatei+alt,statistikdatei+neuername);FI . +aenderediedateizeile:modify(statalt);tofirstrecord(statalt);writerecord( +statalt,standardmaskenfeld(fbezeichnung));rename(statistikdatei+alt, +statistikdatei+neuername).aenderedieganzestatistik: +erzeugestatistikmitneuemnamen;modify(statalt);zaehl:=benennenneu;display( +meldungback);FOR zeileFROM 1UPTO min(zeilenalt,zeilenneu)REP +uebertrageeinezeileausaltinneu;PER ;FOR zeileFROM zeilenalt+1UPTO zeilenneu +REP schreibeeineleerezeile;PER ;display(meldungrestore);forget(statistikdatei ++alt,quiet).uebertrageeinezeileausaltinneu:toline(statalt,statistikvorzeilen+ +(zeile-1)*spaltenalt+1);FOR spalteFROM 1UPTO min(spaltenalt,spaltenneu)REP +readrecord(statalt,dateizeile);putline(stat,dateizeile);down(statalt);zaehlen +PER ;FOR spalteFROM spaltenalt+1UPTO spaltenneuREP line(stat);zaehlenPER . +schreibeeineleerezeile:FOR spalteFROM 1UPTO spaltenneuREP line(stat);zaehlen +PER .zaehlen:cout(zaehl);zaehlDECR 1.END PROC statistikspeichern;END PACKET +benennen; + diff --git a/app/schulis/2.2.1/src/5.datenbasis b/app/schulis/2.2.1/src/5.datenbasis new file mode 100644 index 0000000..4d28ff7 --- /dev/null +++ b/app/schulis/2.2.1/src/5.datenbasis @@ -0,0 +1,62 @@ +PACKET datenbasisDEFINES statdatenbasisstartproc,statdatenbasisnproc, +statdatenbasisaufbereiten,statdatenbasisentfernen, +statdatenbasisentfernenmeldung,statdatenbasisnichtentfernen, +statdatenbasisermitteln,statdatenbasisvorhanden:LET datenbasisname= +"STATISTIK.basis",statistikserver="statistik server",maskedatenbasis= +"mst datenbasis bereitstellen",niltext="",meldungzusatz="+",meldungstichtag= +"zum Stichtag ",meldungnichtda="nicht ",mnichts="+ +", +mstart="�����������",mkeinedaten=68,mentfernenfrage=470,mkeinebasis=471, +mbasisentfernt=472,mbasisnichtentfernt=473,maufbereitung=474,mabbruch=475, +mbasisfertig=476,fstatnr=2,fcursor=3,filesize=4000,tupelstackgroesse=5;FILE +VAR basis;BOOL VAR datenbasisda;TEXT VAR datenbasisstichtag;PROC +statdatenbasisstartproc:enablestop;standardstartproc(maskedatenbasis); +statdatenbasisermitteln(fstatnr);statdatenbasisnproc;END PROC +statdatenbasisstartproc;PROC statdatenbasisnproc:infeld(fstatnr); +standardfelderausgeben;infeld(fcursor);standardnproc;END PROC +statdatenbasisnproc;PROC statdatenbasisermitteln(INT CONST feldnr):forget( +datenbasisname,quiet);datenbasisda:=existstask(statistikserver)CAND exists( +datenbasisname,task(statistikserver));IF datenbasisdaTHEN fetch( +datenbasisname,task(statistikserver));basis:=sequentialfile(modify, +datenbasisname);tofirstrecord(basis);readrecord(basis,datenbasisstichtag); +datenbasisstichtag:=meldungstichtag+datenbasisstichtag;forget(datenbasisname, +quiet);ELSE datenbasisstichtag:=meldungnichtdaFI ;standardmaskenfeld( +datenbasisstichtag,feldnr);END PROC statdatenbasisermitteln;BOOL PROC +statdatenbasisvorhanden:datenbasisdaEND PROC statdatenbasisvorhanden;PROC +statdatenbasisentfernenmeldung:IF datenbasisdaTHEN standardmeldung( +mentfernenfrage,niltext);infeld(fcursor);ELSE standardmeldung(mkeinebasis, +niltext);leave(1);FI END PROC statdatenbasisentfernenmeldung;PROC +statdatenbasisentfernen:datenbasisloeschen;standardmeldung(mbasisentfernt, +datenbasisstichtag+meldungzusatz);statdatenbasisermitteln(fstatnr);leave(2); +END PROC statdatenbasisentfernen;PROC statdatenbasisnichtentfernen: +standardmeldung(mbasisnichtentfernt,datenbasisstichtag+meldungzusatz);leave(2 +);END PROC statdatenbasisnichtentfernen;PROC datenbasisloeschen:BOOL CONST +comdia:=commanddialogue;IF datenbasisdaCAND exists(datenbasisname,task( +statistikserver))THEN commanddialogue(FALSE );erase(datenbasisname,task( +statistikserver));commanddialogue(comdia);FI ;END PROC datenbasisloeschen; +PROC statdatenbasisaufbereiten:BOOL VAR schuelerda,abbruch:=FALSE ;INT VAR +anzahltupel:=tupelstackgroesse,bearbeitetetupel:=tupelstackgroesse, +schuelerzahl:=0;IF datenbasisdaTHEN standardmeldung(mbasisentfernt, +datenbasisstichtag+meldungzusatz);ELSE standardmeldung(maufbereitung,date+ +meldungzusatz);FI ;schuelerlesenvorbereiten;IF schuelerdaTHEN +datenbasisaufbereiten;FI ;IF NOT schuelerdaTHEN standardmeldung(mkeinedaten, +niltext);ELIF abbruchTHEN standardmeldung(mabbruch,niltext);forget( +datenbasisname,quiet);ELSE datenbasisloeschen;datenbasissichern; +statdatenbasisermitteln(fstatnr);standardmeldung(mbasisfertig,niltext);FI ; +leave(1).datenbasisaufbereiten:forget(datenbasisname,quiet);basis:= +sequentialfile(output,datenbasisname);putline(basis,date);standardmeldung( +maufbereitung,date+meldungzusatz);out(mstart);REP putline(basis, +statdatenbasiszeile);schuelerzahlINCR 1;cout(schuelerzahl);naechsterschueler; +UNTIL bestandendePER .schuelerindex:ixsustatfamrufgeb. +schuelerlesenvorbereiten:inittupel(dnrdiffdaten);inittupel(dnrhalbjahresdaten +);inittupel(dnrschulen);inittupel(dnrschueler);parsenooffields(50); +systemdboff;search(schuelerindex,FALSE );schuelerda:=dbstatus=ok; +setzebestandende(NOT schuelerda).naechsterschueler:IF bearbeitetetupel= +anzahltupelTHEN IF anzahltupel<>tupelstackgroesseTHEN setzebestandende(TRUE ) +;ELIF NOT abbruchgewuenschtTHEN einpaarschuelerholen;FI ;ELSE multisucc; +bearbeitetetupelINCR 1;FI .einpaarschuelerholen:anzahltupel:= +tupelstackgroesse;scanstatus(ok);multisucc(schuelerindex,anzahltupel);IF +anzahltupel>0THEN multisucc;bearbeitetetupel:=1;ELSE setzebestandende(TRUE ) +FI .abbruchgewuenscht:abbruch:=lines(basis)>=filesize;abbruch. +datenbasissichern:save(datenbasisname,task(statistikserver)).END PROC +statdatenbasisaufbereiten;END PACKET datenbasis; + diff --git a/app/schulis/2.2.1/src/5.drucken b/app/schulis/2.2.1/src/5.drucken new file mode 100644 index 0000000..9b775ff --- /dev/null +++ b/app/schulis/2.2.1/src/5.drucken @@ -0,0 +1,153 @@ +PACKET druckenDEFINES statdrucken:LET statistikdatei="STATISTIK.", +statistikserver="statistik server",erstedruckdatei="liste.1",druckdatei= +"liste.",maxstatistiken=200,statistikvorzeilen=3,niltext="",space=" ",quote= +"""",edittasten="vr",statistiktext="Statistik Nr. ",stichtagtext="Stichtag: " +,definitiontext="Definition der Statistik Nr. ",groessetext= +"Größe: Zeilen, Spalten",tabellentext= +"Feld Z / Sp Art Länge Definition",tabellenlinie= +"----+--------+----+------+----------",tabelleleer= +" ",prozenttext=" %",meldungzusatz="+",mgibtesnicht +=477,fstatnr=2,fmini=3,fstd=4,fscreen=5,fprinter=6,tsenkrecht=":",twaagerecht +="-",tkreuz="+",tschraeg="/",pruefeimintervall=3,pruefenureinkreuz=5, +minspaltenbreite=4,maxspalten=50,KONST =STRUCT (BOOL def,TEXT maske,INT +mvorbereiten,mdrucken,mnichtdrucken);KONST VAR druck;BOOL VAR +ausgabebildschirm,ausgabeminimal;TEXT VAR druckstatistik;ROW maxspaltenINT +VAR breiten;INT VAR zeilen,spalten,felder;FILE VAR stat;PROC statdrucken( +BOOL CONST defdrucken,INT CONST was):INT VAR status:=0;IF defdruckenTHEN +druck:=KONST :(TRUE ,"mst statistik drucken",484,498,499);ELSE druck:=KONST : +(FALSE ,"mst statistik ausgeben",481,482,483);FI ;SELECT wasOF CASE 1: +druckenexecCASE 2:druckenlistezeigenCASE 3:druckenlisteexecCASE 4:ausdrucken; +enter(1)CASE 5:ausdrucken;leave(2)CASE 6:nichtdrucken;enter(1);CASE 7: +nichtdrucken;leave(2);END SELECT .druckenexec:standardpruefe( +pruefeimintervall,fstatnr,1,maxstatistiken,niltext,status);IF NOT +alleeingabenkorrektTHEN leave(1);ELIF NOT exists(gewaehltestatistik,task( +statistikserver))THEN standardmeldung(mgibtesnicht,standardmaskenfeld(2)+ +meldungzusatz);infeld(fstatnr);leave(1);ELSE drucken(text(int( +standardmaskenfeld(fstatnr))));IF NOT ausgabebildschirmTHEN leave(1);FI ;FI . +gewaehltestatistik:statistikdatei+text(int(standardmaskenfeld(fstatnr))). +druckenlistezeigen:status:=0;IF alleeingabenkorrektTHEN statlistezeigen(int( +standardmaskenfeld(fstatnr)));ELSE leave(1);FI .druckenlisteexec:IF +ausgabebildschirmTHEN statlistebearbeiten(druck.maske);IF statlisteeintrag> +niltextTHEN drucken(statlisteeintrag);ELSE leave(2);FI ;ELSE +statlistebearbeiten(druck.maske);WHILE statlisteeintrag>niltextREP drucken( +statlisteeintrag);statlistebearbeiten(druck.maske);PER ;leave(2);FI . +alleeingabenkorrekt:IF status=0THEN standardpruefe(pruefenureinkreuz,fmini, +fstd,0,niltext,status);FI ;IF druck.defTHEN ausgabebildschirm:= +standardmaskenfeld(fmini)<>niltext;ELSE IF status=0THEN standardpruefe( +pruefenureinkreuz,fscreen,fprinter,0,niltext,status);FI ;ausgabeminimal:= +standardmaskenfeld(fmini)<>niltext;ausgabebildschirm:=standardmaskenfeld( +fscreen)<>niltext;FI ;IF status>0THEN infeld(status)FI ;status=0.ausdrucken: +standardmeldung(druck.mdrucken,druckstatistik+meldungzusatz); +druckdateibehandeln(PROC (TEXT CONST )print);druckdateibehandeln(PROC (TEXT +CONST )forget).nichtdrucken:infeld(fstatnr);standardmaskenfeld(niltext, +fstatnr);standardmeldung(druck.mnichtdrucken,druckstatistik+meldungzusatz); +druckdateibehandeln(PROC (TEXT CONST )forget).END PROC statdrucken;PROC +drucken(TEXT CONST statistiknummer):statistiknummerIN fstatnr;infeld(fstatnr) +;standardmaskenfeld(niltext,fstatnr);erstellediedruckdatei;IF +ausgabebildschirmTHEN druckstatistik:=statistiknummer;standardmeldung(niltext +,meldungzusatz);zeigedatei(erstedruckdatei,edittasten);ELSE standardmeldung( +druck.mdrucken,statistiknummer+meldungzusatz);druckdateibehandeln(PROC (TEXT +CONST )print);druckdateibehandeln(PROC (TEXT CONST )forget);FI . +erstellediedruckdatei:standardmeldung(druck.mvorbereiten,statistiknummer+ +meldungzusatz+meldungzusatz);druckdateibehandeln(PROC (TEXT CONST )forget); +statistikladen(statistiknummer);druckvorbereiten;IF druck.defTHEN +druckestatdef(statistiknummer);ELSE druckestatistik(statistiknummer);FI ; +drucknachbereitenohneausdrucken;forget(statistikdatei+statistiknummer,quiet). +END PROC drucken;PROC druckestatistik(TEXT CONST statistiknummer):TEXT VAR +kopf1,kopf2,linie,dateizeile;BOOL VAR inhalt;INT VAR gedrucktespalten:=0, +spaltendieseseite:=0,aktspalte,aktzeile,aktbreite,zeilenbisseitenende, +gedrucktefelder:=0;seitenkopffestlegen;evtlspaltenbreitenverkuerzen;REP +ermittlespaltendieseseite;druckeallezeilenbiszudieserspalte;gedrucktespalten +INCR spaltendieseseite;UNTIL gedrucktespalten=spaltenPER .seitenkopffestlegen +:toline(stat,1);readrecord(stat,kopf1);kopf1:=statistiktext+statistiknummer+ +space+kopf1;toline(stat,statistikvorzeilen);readrecord(stat,kopf2);kopf2:= +compress(kopf2);IF kopf2>niltextTHEN kopf2:=stichtagtext+kopf2FI ;inhalt:= +kopf2>niltext;setzemitseitennummern(FALSE );initdruckkopf(kopf1,kopf2). +evtlspaltenbreitenverkuerzen:IF ausgabeminimalTHEN FOR aktspalteFROM 1UPTO +spaltenREP breiten[aktspalte]:=minspaltenbreite;PER FI . +ermittlespaltendieseseite:initspalten;setzespaltentrenner(tsenkrecht); +setzespaltenbreite(2);aktbreite:=3;spaltendieseseite:=0;REP spaltendieseseite +INCR 1;aktbreiteINCR breiten[letztespalte];aktbreiteINCR 1;setzespaltenbreite +(breiten[letztespalte]);UNTIL letztespalte>=spaltenCOR aktbreite+breiten[ +letztespalte+1]>=druckbreitePER .letztespalte:gedrucktespalten+ +spaltendieseseite.druckeallezeilenbiszudieserspalte:aktzeile:=0;erzeugelinie; +WHILE aktzeile<zeilenREP druckeeineseitebiszudieserspaltePER .erzeugelinie: +linie:=twaagerecht+twaagerecht+tkreuz;FOR aktspalteFROM gedrucktespalten+1 +UPTO letztespalteREP linieCAT (breiten[aktspalte]*twaagerecht);linieCAT +tkreuz;PER .druckeeineseitebiszudieserspalte:zeilenbisseitenende:=drucklaenge +(anzahlkopfzeilen);druckkopfschreiben;spaltenkopfschreiben;WHILE +zeilenbisseitenende>=benoetigtezeilenREP aktzeileINCR 1;einezeileschreiben; +IF aktzeileMOD 2=0THEN gibstandaus(statistiknummer,gedrucktefelder,felder); +FI ;UNTIL aktzeile>=zeilenPER ;seitenwechsel.anzahlkopfzeilen:IF inhaltTHEN 2 +ELSE 1FI .benoetigtezeilen:IF ausgabeminimalTHEN 1ELSE 2FI . +spaltenkopfschreiben:spaltenweise(niltext);FOR aktspalteFROM gedrucktespalten ++1UPTO letztespalteREP spaltenweise(text(aktspalte,3));PER ; +druckzeileschreiben(zeile+tsenkrecht);zeilenbisseitenendeDECR 1. +einezeileschreiben:IF NOT ausgabeminimalTHEN druckzeileschreiben(linie); +zeilenbisseitenendeDECR 1;FI ;spaltenweise(text(aktzeile,2));FOR aktspalte +FROM gedrucktespalten+1UPTO letztespalteREP tragefeldinhalteinPER ; +gedrucktefelderINCR spaltendieseseite;druckzeileschreiben(zeile+tsenkrecht); +zeilenbisseitenendeDECR 1.tragefeldinhaltein:toline(stat,((aktzeile-1)* +spalten)+aktspalte+3);readrecord(stat,dateizeile);IF (dateizeileSUB 5)="t" +THEN dateizeile:=subtext(dateizeile,7,length(dateizeile)-1);changeall( +dateizeile,quote+quote,quote);spaltenweise(dateizeile);ELIF inhaltTHEN +spaltenweise(subtext(dateizeile,1,4));ELSE spaltenweise(niltext);FI .END +PROC druckestatistik;PROC druckestatdef(TEXT CONST statistiknummer):TEXT VAR +kopfname,kopfgroesse,kopflinie,dateizeile;INT VAR zeilenbisseitenende,aktfeld +:=0,deffeldbreite,benoetigtezeilen,zeilenende;seitenkopffestlegen; +tabellefestlegen;liesnaechstesfeld;REP druckeeineseiteUNTIL aktfeld>felder +PER .seitenkopffestlegen:toline(stat,1);readrecord(stat,kopfname);kopfgroesse +:=groessetext;replace(kopfgroesse,8,text(zeilen,2));replace(kopfgroesse,19, +text(spalten,2));setzemitseitennummern(FALSE );initdruckkopf(definitiontext+ +statistiknummer,kopfname).tabellefestlegen:kopflinie:=tabellenlinie;WHILE +length(kopflinie)<druckbreiteREP kopflinieCAT twaagerecht;PER ;initspalten; +setzespaltentrenner(tsenkrecht);setzespaltenbreite(4);setzespaltenbreite(8); +setzespaltenbreite(4);setzespaltenbreite(6);deffeldbreite:=druckbreite-length +(tabelleleer).druckeeineseite:zeilenbisseitenende:=drucklaenge( +anzahlkopfzeilen);druckkopfschreiben;tabellenkopfschreiben;WHILE +zeilenbisseitenende>=benoetigtezeilenREP schreibedasfeld;IF aktfeldMOD 15=0 +THEN gibstandaus(statistiknummer,aktfeld,felder);FI ;liesnaechstesfeld;UNTIL +aktfeld>felderPER ;seitenwechsel.anzahlkopfzeilen:IF kopfname=niltextTHEN 1 +ELSE 2FI .tabellenkopfschreiben:IF aktfeld<=1THEN druckzeileschreiben( +kopfgroesse);druckzeileschreiben(niltext);zeilenbisseitenendeDECR 2;FI ; +druckzeileschreiben(tabellentext);druckzeileschreiben(kopflinie); +zeilenbisseitenendeDECR 2.liesnaechstesfeld:aktfeldINCR 1;IF aktfeld<=felder +THEN toline(stat,aktfeld+3);readrecord(stat,dateizeile);spaltenweise(text( +aktfeld,4));spaltenweise(zeileundspalte);spaltenweise(space+space+(dateizeile +SUB 5));spaltenweise(text(breiten[aktspalte],5));benoetigtezeilen:=1;IF +length(dateizeile)-5>deffeldbreiteTHEN zaehlebenoetigtezeilenFI ;FI . +zeileundspalte:text(aktzeile,3)+tschraeg+text(aktspalte,3).aktzeile:(aktfeld- +1)DIV spalten+1.aktspalte:(aktfeld-1)MOD spalten+1.zaehlebenoetigtezeilen: +zeilenende:=5+deffeldbreite;gehezurueckzumwortende(dateizeile,zeilenende); +WHILE zeilenende<length(dateizeile)REP benoetigtezeilenINCR 1; +gehezurueckzumwortende(dateizeile,zeilenende);zeilenendeINCR deffeldbreite+1; +PER .schreibedasfeld:zeilenende:=5+deffeldbreite;gehezurueckzumwortende( +dateizeile,zeilenende);druckzeileschreiben(zeile+tsenkrecht+space+subtext( +dateizeile,6,zeilenende));zeilenbisseitenendeDECR 1;WHILE zeilenende<length( +dateizeile)REP dateizeile:=subtext(dateizeile,zeilenende+2);zeilenende:= +deffeldbreite;gehezurueckzumwortende(dateizeile,zeilenende); +druckzeileschreiben(tabelleleer+subtext(dateizeile,1,zeilenende)); +zeilenbisseitenendeDECR 1;PER .END PROC druckestatdef;PROC +gehezurueckzumwortende(TEXT CONST dateizeile,INT VAR zeilenende):INT VAR +naechsteszeichen;IF zeilenende<length(dateizeile)CAND NOT amwortendeTHEN REP +findewortende;UNTIL NOT hieristeinsamesquotePER ;zeilenende:=max(15, +zeilenende);FI .findewortende:REP zeilenendeDECR 1;UNTIL amwortendeOR +zeilenende<1PER .amwortende:(dateizeileSUB zeilenende)<>spaceAND (dateizeile +SUB (zeilenende+1))=space.hieristeinsamesquote:naechsteszeichen:=pos( +dateizeile,"!","�",zeilenende+1);naechsteszeichen>0CAND (dateizeileSUB +naechsteszeichen)=quote.END PROC gehezurueckzumwortende;PROC gibstandaus( +TEXT CONST nummer,INT CONST wert,hundert):disablestop;INT VAR proz:=(wert*100 +)DIV hundert;IF iserrorTHEN clearerror;proz:=int((real(wert)*100.0)/real( +hundert));FI ;standardmeldung(druck.mvorbereiten,nummer+meldungzusatz+text( +proz)+prozenttext+meldungzusatz);END PROC gibstandaus;PROC statistikladen( +TEXT CONST statnummer):TEXT VAR dummy;INT VAR spaltenzaehler;forget( +statistikdatei+statnummer,quiet);fetch(statistikdatei+statnummer,task( +statistikserver));stat:=sequentialfile(input,statistikdatei+statnummer); +getline(stat,dummy);get(stat,zeilen);get(stat,spalten);FOR spaltenzaehler +FROM 1UPTO spaltenREP get(stat,breiten[spaltenzaehler]);PER ;modify(stat); +felder:=zeilen*spalten;END PROC statistikladen;PROC druckdateibehandeln(PROC +(TEXT CONST )machwas):INT VAR i;TEXT VAR name;commanddialogue(FALSE );get(all +,name,i);WHILE i>0REP IF subtext(name,1,length(druckdatei))=druckdateiTHEN +machwas(name);FI ;get(all,name,i);PER ;commanddialogue(TRUE ).END PROC +druckdateibehandeln;END PACKET drucken; + diff --git a/app/schulis/2.2.1/src/5.erstellen b/app/schulis/2.2.1/src/5.erstellen new file mode 100644 index 0000000..902729d --- /dev/null +++ b/app/schulis/2.2.1/src/5.erstellen @@ -0,0 +1,146 @@ +PACKET erstellenDEFINES staterstellen:LET datenbasisname="STATISTIK.basis", +statistikdatei="STATISTIK.",statistikserver="statistik server",maskeerstellen +="mst statistik erstellen",niltext="",space=" ",meldungzusatz="+",spaces= +" ",sjoker="*",squote="""",sklammerzu=")",adate=2,erstedatenzeile=2, +defvorzeilen=3,fstatnr=2,fstichtag=3,datepos=14,mkeinebasis=471,mzahleingeben +=53,mgibtesnicht=477,mstatprozent=479,mstaterstellt=480,ogleich=1,ogroesser=2 +,okleiner=3,ogroessergleich=4,okleinergleich=5,oungleich=6,oenthalten=7,olike +=8,maxvergleiche=25,ende=0,VERGLEICH =STRUCT (BOOL kursvergleich,INT operator +,von,bis,INT undvergleich,odervergleich,INT zweiterkursvergleich,TEXT text); +ROW maxvergleicheVERGLEICH VAR vergleiche;INT VAR anzahlvergleiche,verglpos; +TEXT VAR vergl,basiszeile;PROC staterstellen(INT CONST was):SELECT wasOF +CASE 1:erstellenstartprocCASE 2:erstellenexecCASE 3:statlistezeigen(int( +standardmaskenfeld(fstatnr)))CASE 4:erstellenlisteexecEND SELECT . +erstellenstartproc:standardstartproc(maskeerstellen);statdatenbasisermitteln( +fstichtag);standardnproc.erstellenexec:IF NOT statdatenbasisvorhandenTHEN +standardmeldung(mkeinebasis,niltext);ELIF int(standardmaskenfeld(fstatnr))<=0 +THEN standardmaskenfeld(niltext,fstatnr);standardmeldung(mzahleingeben, +niltext);ELSE holedatenbasis;erstellen(standardmaskenfeld(fstatnr)); +loeschedatenbasis;FI ;leave(1).erstellenlisteexec:statlistebearbeiten( +maskeerstellen);statdatenbasisermitteln(fstichtag);standardfelderausgeben;IF +NOT statdatenbasisvorhandenTHEN standardmeldung(mkeinebasis,niltext);ELSE +holedatenbasis;WHILE statlisteeintrag>niltextREP erstellen(statlisteeintrag); +statlistebearbeiten(maskeerstellen);PER ;loeschedatenbasis;FI ; +standardmaskenfeld(niltext,fstatnr);leave(2).END PROC staterstellen;PROC +erstellen(TEXT CONST statistiknummer):BOOL VAR abbruch:=FALSE ;IF NOT exists( +gewaehltestatistik,task(statistikserver))THEN standardmeldung(mgibtesnicht, +statistiknummer+meldungzusatz);ELSE erstellestatistik;FI .erstellestatistik: +statistiknummerIN fstatnr;standardmaskenfeld(niltext,fstatnr);standardmeldung +(mstaterstellt,statistiknummer+meldungzusatz+"wird"+meldungzusatz);forget( +gewaehltestatistik,quiet);fetch(gewaehltestatistik,task(statistikserver)); +fuelleallefelderaus;IF abbruchTHEN standardmeldung(mstaterstellt, +statistiknummer+meldungzusatz+"nicht"+meldungzusatz);ELSE commanddialogue( +FALSE );save(gewaehltestatistik,task(statistikserver));commanddialogue(TRUE ) +;standardmeldung(mstaterstellt,statistiknummer+meldungzusatz+ +standardmaskenfeld(fstichtag)+meldungzusatz);FI ;forget(gewaehltestatistik, +quiet).fuelleallefelderaus:FILE VAR basis:=sequentialfile(modify, +datenbasisname),stat:=sequentialfile(modify,gewaehltestatistik);INT VAR +aktfeld,bearbeitetefelder:=0,felder:=lines(stat)-defvorzeilen;TEXT VAR +dateizeile;fuellebedingungfelder;fuellesummenfelder;toline(stat,defvorzeilen) +;writerecord(stat,subtext(standardmaskenfeld(fstichtag),datepos)). +fuellebedingungfelder:toline(stat,defvorzeilen+1);col(stat,1);WHILE NOT eof( +stat)REP readrecord(stat,dateizeile);SELECT pos("bst",dateizeileSUB 5)OF +CASE 1:wertebedingungausCASE 2:replace(dateizeile,1," ")OTHERWISE +bearbeitetefelderINCR 1END SELECT ;writerecord(stat,dateizeile);down(stat); +UNTIL abbruchPER .fuellesummenfelder:toline(stat,defvorzeilen+1);WHILE NOT +eof(stat)REP readrecord(stat,dateizeile);IF (dateizeileSUB 5)="s"THEN +wertesummeausFI ;writerecord(stat,dateizeile);down(stat);UNTIL abbruchPER . +wertebedingungaus:replace(dateizeile,1,text(anzahlschueler(basis,subtext( +dateizeile,6)),4));gibprozentmeldungaus.wertesummeaus:aktfeld:=lineno(stat); +replace(dateizeile,1,text(summe(stat,subtext(dateizeile,6)),4));toline(stat, +aktfeld);gibprozentmeldungaus.gibprozentmeldungaus:bearbeitetefelderINCR 1; +disablestop;INT VAR proz:=(bearbeitetefelder*100)DIV felder;IF iserrorTHEN +clearerror;proz:=int((real(bearbeitetefelder)*100.0)/real(felder));FI ; +enablestop;standardmeldung(mstatprozent,statistiknummer+meldungzusatz+text( +proz)+meldungzusatz);.gewaehltestatistik:statistikdatei+statistiknummer.END +PROC erstellen;PROC holedatenbasis:forget(datenbasisname,quiet);fetch( +datenbasisname,task(statistikserver));END PROC holedatenbasis;PROC +loeschedatenbasis:forget(datenbasisname,quiet);END PROC loeschedatenbasis; +INT PROC summe(FILE VAR stat,TEXT CONST formel):INT VAR summe:=0,posi:=1, +feldnr,faktor;REP faktor:=pos("+-",formelSUB posi);IF faktor>0THEN posiINCR 2 +;FI ;feldnr:=int(subtext(formel,posi+1,posi+4));toline(stat,feldnr+3);IF +faktor=2THEN summeDECR int(subtext(stat,1,4));ELSE summeINCR int(subtext(stat +,1,4));FI ;posi:=pos(formel,space,posi)+1;UNTIL posi<=1PER ;max(summe,0).END +PROC summe;INT PROC anzahlschueler(FILE VAR basis,TEXT CONST bedingung):INT +VAR erstervergleich,anzahl;liesallevergleiche;zaehledieschueler;anzahl. +liesallevergleiche:anzahlvergleiche:=0;verglpos:=1;vergl:=bedingung; +erstervergleich:=liesvergleich.zaehledieschueler:anzahl:=0;toline(basis, +erstedatenzeile);col(basis,1);WHILE NOT eof(basis)REP readrecord(basis, +basiszeile);IF vergleichpositiv(erstervergleich)THEN anzahlINCR 1;FI ;down( +basis);PER .END PROC anzahlschueler;INT PROC liesvergleich:INT VAR wurzel, +knoten;BOOL VAR opand;wurzel:=naechstervergleich;verglposINCR 1;WHILE +nochmehrvergleicheREP liesboolop;knoten:=naechstervergleich;IF opandTHEN +verknuepfeand(wurzel,knoten);ELSE verknuepfeor(wurzel,knoten);FI ;verglpos +INCR 1;PER ;wurzel.naechstervergleich:SELECT pos("(mk",verglSUB verglpos)OF +CASE 1:behandleklammerCASE 2:liesmerkmalCASE 3:lieskursOTHERWISE errorstop( +"unzulässiger Vergleich");0END SELECT .behandleklammer:verglposINCR 1; +liesvergleich.nochmehrvergleiche:(verglSUB verglpos-1)<>sklammerzuAND +verglpos<length(vergl).liesboolop:SELECT pos(vergl," ",verglpos)-verglposOF +CASE 2:verglposINCR 3;opand:=FALSE ;CASE 4:verglposINCR 5;opand:=FALSE ; +OTHERWISE verglposINCR 4;opand:=TRUE ;END SELECT .END PROC liesvergleich;INT +PROC liesmerkmal:INT VAR merkmal:=int(subtext(vergl,verglpos+1,verglpos+2)), +operator:=pos("=><",verglSUB verglpos+4)+pos(".=>",verglSUB verglpos+5),von, +bis,jokerpos;TEXT VAR vergltext:=niltext;IF operator>okleinerTHEN verglpos +INCR 7;ELSE verglposINCR 6;FI ;IF (verglSUB verglpos)=sjokerTHEN operator:= +ogroesser;vergltext:=subtext(spaces,1,statfeldlaenge(merkmal));verglposINCR 1 +;ELSE liestext(vergltext);FI ;erzeugemerkmalvergleich.erzeugemerkmalvergleich +:von:=statfeldpos(merkmal);bis:=von-1+statfeldlaenge(merkmal);jokerpos:=pos( +vergltext,sjoker);IF jokerpos>0THEN aenderevergleichsmerkmale;ELIF +statfeldart(merkmal)=adateTHEN vergltext:=vergleichbaresdatum(vergltext);FI ; +anzahlvergleicheINCR 1;vergleiche[anzahlvergleiche]:=VERGLEICH :(FALSE , +operator,von,bis,ende,ende,ende,vergltext);anzahlvergleiche. +aenderevergleichsmerkmale:IF jokerpos=1AND pos(vergltext,sjoker,2)=length( +vergltext)THEN operator:=oenthalten;vergltext:=subtext(vergltext,2,length( +vergltext)-1);ELIF pos(vergltext,sjoker,jokerpos+1)>0THEN operator:=olike; +ELIF jokerpos=1THEN vergltext:=subtext(vergltext,2);vonINCR (bis-von-length( +vergltext)+1);ELIF jokerpos=length(vergltext)THEN vergltext:=subtext( +vergltext,1,length(vergltext)-1);bisDECR (bis-von-length(vergltext)+1);ELSE +operator:=olike;FI .END PROC liesmerkmal;PROC liestext(TEXT VAR vergltext): +INT VAR beginn;verglposINCR 1;REP beginn:=verglpos;verglpos:=pos(vergl,squote +,beginn+1);vergltextCAT subtext(vergl,beginn,verglpos-1);verglposINCR 1; +UNTIL (verglSUB verglpos)<>squotePER END PROC liestext;INT PROC lieskurs: +TEXT VAR vergl1:=niltext,vergl2:=niltext;INT VAR von1:=1,bis1:=0,von2,bis2, +teilfeld,operator:=ogleich;BOOL VAR zweivergleiche:=FALSE ;ROW 4INT CONST +laenge:=ROW 4INT :(2,2,4,1);verglposINCR 6;FOR teilfeldFROM 1UPTO 4REP +liesnaechstenteiltext;PER ;erzeugekursvergleich.liesnaechstenteiltext: +verglposINCR 1;IF (verglSUB verglpos)=sjokerTHEN verglposINCR 1; +leererteiltext;ELIF zweivergleicheTHEN liestext(vergl2);bis2INCR laenge[ +teilfeld];ELSE liestext(vergl1);bis1INCR laenge[teilfeld];FI .leererteiltext: +IF zweivergleicheTHEN IF von2>bis2THEN von2INCR laenge[teilfeld];bis2INCR +laenge[teilfeld];FI ;ELIF von1>bis1THEN von1INCR laenge[teilfeld];bis1INCR +laenge[teilfeld];ELSE zweivergleiche:=TRUE ;von2:=bis1+laenge[teilfeld]+1; +bis2:=bis1+laenge[teilfeld];FI .erzeugekursvergleich:IF von1>bis1THEN +operator:=ogroesser;ELIF zweivergleicheAND von2>bis2THEN zweivergleiche:= +FALSE ;FI ;anzahlvergleicheINCR 1;vergleiche[anzahlvergleiche]:=VERGLEICH :( +TRUE ,operator,von1,bis1,ende,ende,evtlvergl2,vergl1);IF zweivergleicheTHEN +anzahlvergleicheINCR 1;vergleiche[anzahlvergleiche]:=VERGLEICH :(TRUE , +ogleich,von2,bis2,ende,ende,ende,vergl2);anzahlvergleiche-1ELSE +anzahlvergleicheFI .evtlvergl2:IF zweivergleicheTHEN anzahlvergleiche+1ELSE +endeFI .END PROC lieskurs;PROC verknuepfeand(INT CONST wurzel,knoten):IF +vergleiche[wurzel].undvergleich<>endeTHEN verknuepfeand(vergleiche[wurzel]. +undvergleich,knoten);ELIF wurzel<>knotenTHEN vergleiche[wurzel].undvergleich +:=knoten;FI ;IF vergleiche[wurzel].odervergleich<>endeTHEN verknuepfeand( +vergleiche[wurzel].odervergleich,knoten);FI ;END PROC verknuepfeand;PROC +verknuepfeor(INT CONST wurzel,knoten):IF vergleiche[wurzel].odervergleich= +endeTHEN vergleiche[wurzel].odervergleich:=knotenELSE verknuepfeor(vergleiche +[wurzel].odervergleich,knoten);FI ;END PROC verknuepfeor;BOOL PROC +vergleichpositiv(INT CONST wurzel):(wurzelbedingungerfuelltCAND +undbedingungenerfuellt)COR oderbedingungenerfuellt.undbedingungenerfuellt:(v. +undvergleich=endeOR vergleichpositiv(v.undvergleich)).oderbedingungenerfuellt +:(v.odervergleich<>endeAND vergleichpositiv(v.odervergleich)). +wurzelbedingungerfuellt:IF v.kursvergleichTHEN kursvergleichpositiv(wurzel) +ELSE SELECT v.operatorOF CASE ogleich:basistext=v.textCASE ogroesser: +basistext>v.textCASE okleiner:basistext<v.textCASE ogroessergleich:basistext +>=v.textCASE okleinergleich:basistext<=v.textCASE oungleich:basistext<>v.text +CASE oenthalten:pos(basistext,v.text)>0OTHERWISE basistextLIKE v.textEND +SELECT FI .basistext:subtext(basiszeile,v.von,v.bis).v:vergleiche[wurzel]. +END PROC vergleichpositiv;BOOL PROC kursvergleichpositiv(INT CONST wurzel): +INT VAR kurspos:=122;IF v.operator=ogroesserTHEN stellefestobkursebelegtELSE +REP kurspos:=pos(basiszeile,v.text,kurspos+1);UNTIL kurspos=0COR ( +kursposstimmtCAND zweitervergleichok)PER ;kurspos>0FI . +stellefestobkursebelegt:pos(basiszeile,"!","�",kurspos+1)>0.kursposstimmt:(( +kurspos-6)MOD 9)=v.von-1.zweitervergleichok:v.zweiterkursvergleich=endeCOR v2 +.text=subtext(basiszeile,beginn+v2.von,beginn+v2.bis).v:vergleiche[wurzel].v2 +:vergleiche[v.zweiterkursvergleich].beginn:kurspos-v.von.END PROC +kursvergleichpositiv;END PACKET erstellen; + diff --git a/app/schulis/2.2.1/src/5.felder b/app/schulis/2.2.1/src/5.felder new file mode 100644 index 0000000..3fd6225 --- /dev/null +++ b/app/schulis/2.2.1/src/5.felder @@ -0,0 +1,263 @@ +PACKET felderDEFINES statfelder:LET statistikdatei="STATISTIK.", +statistikserver="statistik server",maskefelderdefinieren= +"mst statistik felder definieren",maskefelderbearbeiten= +"mst statistik felder bearbeiten",maskefelderstandarddruck= +"mst statistik felder standarddruck",statistikvorzeilen=3,maxstatistiken=200, +maxspalten=50,minbreite=4,maxbreite=30,niltext="",space=" ",meldungzusatz="+" +,pruefeimintervall=3,fwarten=1,fstatnr=2,fuebertragen=3,ffeldnr=3,fzeile=4, +fspalte=5,fart=6,fdef=7,fkopieren=8,fnaechstes=9,mnichterlaubt=34, +mgibtesnicht=477,martangeben=478,mmussleerbleiben=491,mnureineauswahl=492, +mspeichern=486,mnichtspeichern=487,muebernehmenfrage=493,mnichtgleichgross= +494,muebernehmen=495,msyntaxfehler=496,mdefzulang=497;FILE VAR stat;TEXT VAR +statistikname;BOOL VAR statgeaendert;INT VAR zeilen,spalten,felder, +letztemeldung,verlassentiefe;ROW maxspaltenINT VAR breiten;LET normalesende= +FALSE ,klammeramende=TRUE ,fvergleicherwartet=1,fmerkmalerwartet=2, +fvergleichsoperwartet=3,fkommaerwartet=4,ftexterwartet=5,fklammerzuerwartet=6 +,fbooloperwartet=7,ftextfeldsummiert=8,fdatumfalsch=9,fhierkeinjoker=10, +frechenoperwartet=11,ffeldnrerwartet=12,ffeldnrzuhoch=13,fzubreit=14, +fpatternzulang=15,fzahlfalsch=16,tendedestextes=7,tname=1,ttext=4,atext=1, +adate=2,azahl=3,akurs=4,squote="""",snull="0",skomma=",",sgleich="=",sspace= +" ",sgroesser=">",sklammerauf="(",skleiner="<",sklammerzu=")",sgroessergleich +=">=",sfeld="f",skleinergleich="<=",skurs="kurs",sungleich="<>",smerkmal="m", +sand="AND",sjoker="*",sor="OR",splus="+",sund="UND",sminus="-",soder="ODER"; +TEXT VAR symbol;INT VAR type,fehlernr;BOOL VAR ok;PROC statfelder(INT CONST +was):TEXT VAR bezeichnung,liste;INT VAR breite,hoehe,zaehler,status;SELECT +wasOF CASE 1:felderbearbeitenstartprocCASE 2:felderbearbeitenspeichernCASE 3: +felderbearbeitennaechstesfeldCASE 4:felderbearbeitenzumbeginnCASE 5: +felderbearbeitenmerkmalslisteCASE 6:felderbearbeitendefinitionkopierenCASE 7: +felderlistezeigenCASE 8:felderlistebearbeitenstartprocCASE 9: +felderstandarddruckstartprocCASE 10:felderstandarddruckspeichernCASE 11: +felderstandarddrucknichtspeichernCASE 12:felderlistestandarddruckstartproc +CASE 13:felderlistestandarddruckspeichernCASE 14: +felderlistestandarddrucknichtspeichernCASE 15: +felderlistestandarddruckzumbeginnCASE 16:felderuebernehmenstartprocCASE 17: +felderuebernehmenexecCASE 18:allefelderspeichernEND SELECT . +felderbearbeitenstartproc:IF NOT statnummerokTHEN leave(1);ELIF +standardmaskenfeld(fuebertragen)>niltextTHEN standardmeldung(mmussleerbleiben +,niltext);infeld(fuebertragen);leave(1);ELSE statistikladen(statnummer); +standardstartproc(maskefelderbearbeiten);verlassentiefe:=0;feldbearbeiten(1); +standardnproc;FI .felderbearbeitenspeichern:IF NOT feldeingabenokTHEN leave(1 +);ELSE speicherefeldab;felderbearbeitennaechstesfeld;FI . +felderbearbeitennaechstesfeld:IF NOT naechstefeldnummerokTHEN leave(1);ELIF +compress(standardmaskenfeld(fnaechstes))=niltextTHEN +felderbearbeitenzumbeginnELSE feldbearbeiten(int(standardmaskenfeld( +fnaechstes)));leave(1);FI .felderbearbeitenzumbeginn:statistiksichern; +standardstartproc(maskefelderdefinieren);standardmaskenfeld(statistikname, +fstatnr);leave(2+verlassentiefe).allefelderspeichern:WHILE feldeingabenok +CAND naechstefeldnummerokREP speicherefeldab;IF standardmaskenfeld(fnaechstes +)=niltextTHEN felderbearbeitenzumbeginn;LEAVE allefelderspeichernELSE +feldbearbeiten(int(standardmaskenfeld(fnaechstes)));FI ;PER ;leave(1). +felderbearbeitenmerkmalsliste:WINDOW VAR w:=startwindow(40,23,77,1);open(w); +bereitelisteauf;listeCAT "*";listeCAT auskunftstextende;auskunfterteilung( +liste,w,FALSE );reorganizescreen;setlasteditvalues;leave(1).bereitelisteauf: +liste:="Bez. Feld Länge";listeCAT auskunftstextende;FOR +zaehlerFROM 1UPTO 50REP IF zaehler=39THEN listeCAT +" davon Art 2";listeCAT auskunftstextende;listeCAT +" Fach 2";listeCAT auskunftstextende;listeCAT +" Kennung 4";listeCAT auskunftstextende;listeCAT +" Klausur 1";listeCAT auskunftstextende;FI ;IF zaehler< +10THEN listeCAT "m0"ELSE listeCAT "m"FI ;listeCAT text(zaehler);listeCAT +" = ";listeCAT text(statfeldname(zaehler),24);listeCAT text(statfeldlaenge( +zaehler));listeCAT auskunftstextende;PER .felderbearbeitendefinitionkopieren: +standardpruefe(pruefeimintervall,fkopieren,1,felder,niltext,status);IF status +>0THEN infeld(status)ELSE felddefinitionzeigen(int(standardmaskenfeld( +fkopieren)))FI ;leave(1).felderlistezeigen:letztemeldung:=0;statlistezeigen( +int(standardmaskenfeld(fstatnr))).felderlistebearbeitenstartproc:IF +highestentry(thesaurusauswahl)=1THEN statlistebearbeiten( +maskefelderbearbeiten);statistikladen(statlisteeintrag);verlassentiefe:=1; +feldbearbeiten(1);standardnproc;ELSE standardstartproc(maskefelderdefinieren) +;IF highestentry(thesaurusauswahl)>1THEN standardmeldung(mnureineauswahl, +niltext);FI ;leave(2);FI .felderstandarddruckstartproc:IF NOT statnummerok +THEN leave(1);ELIF standardmaskenfeld(fuebertragen)>niltextTHEN +standardmeldung(mmussleerbleiben,niltext);infeld(fuebertragen);leave(1);ELSE +statistikladen(statnummer);standardstartproc(maskefelderstandarddruck); +spaltenbreiteneintragen;standardnproc;FI .felderstandarddruckspeichern:IF +NOT spaltenbreitenokTHEN leave(1);ELSE spaltenbreitenspeichern; +standardstartproc(maskefelderdefinieren);standardmeldung(mspeichern, +statistikname+meldungzusatz);statistiksichern;standardmaskenfeld( +statistikname,fstatnr);leave(2);FI .felderstandarddrucknichtspeichern: +standardstartproc(maskefelderdefinieren);standardmeldung(mnichtspeichern, +statistikname+meldungzusatz);statistikvergessen;standardmaskenfeld( +statistikname,fstatnr);leave(2).felderlistestandarddruckstartproc: +statlistebearbeiten(maskefelderstandarddruck);IF statlisteeintrag>niltext +THEN statistikladen(statlisteeintrag);spaltenbreiteneintragen;standardnproc; +ELSE standardstartproc(maskefelderdefinieren);IF letztemeldung=mspeichernOR +letztemeldung=mnichtspeichernTHEN standardmeldung(letztemeldung,statistikname ++meldungzusatz);FI ;leave(2);FI .felderlistestandarddruckspeichern:IF NOT +spaltenbreitenokTHEN leave(1);ELSE standardmeldung(mspeichern,statistikname+ +meldungzusatz);letztemeldung:=mspeichern;spaltenbreitenspeichern; +statistiksichern;standardmaskenfeld(statistikname,fstatnr);enter(1);FI . +felderlistestandarddrucknichtspeichern:standardmeldung(mnichtspeichern, +statistikname+meldungzusatz);letztemeldung:=mnichtspeichern; +statistikvergessen;enter(1).felderlistestandarddruckzumbeginn: +statistikvergessen;enter(3).felderuebernehmenstartproc:standardpruefe( +pruefeimintervall,fuebertragen,1,maxstatistiken,niltext,status);IF status>0 +THEN infeld(status);leave(1);ELIF NOT statistikexistiert(uebernehmennummer) +THEN standardmeldung(mgibtesnicht,uebernehmennummer+meldungzusatz);infeld( +fuebertragen);leave(1);ELIF NOT statnummerokTHEN leave(1);ELIF +diedefinitionensindnichtgleichgrossTHEN standardmeldung(mnichtgleichgross, +niltext);leave(1);ELSE standardmeldung(muebernehmenfrage,niltext);feldschutz( +fwarten);feldschutz(fstatnr);feldschutz(fuebertragen);infeld(fwarten); +standardnproc;FI .diedefinitionensindnichtgleichgross:statistikladen( +statnummer);hoehe:=zeilen;breite:=spalten;statistikvergessen;statistikladen( +uebernehmennummer);statistikvergessen;hoehe<>zeilenOR breite<>spalten. +felderuebernehmenexec:statistikladen(statnummer);tofirstrecord(stat); +readrecord(stat,bezeichnung);statistikvergessen;statistikladen( +uebernehmennummer);tofirstrecord(stat);writerecord(stat,bezeichnung);toline( +stat,statistikvorzeilen);writerecord(stat,niltext);rename(statistikdatei+ +uebernehmennummer,statistikdatei+statnummer);statistikname:=statnummer; +statistiksichern;standardmeldung(muebernehmen,uebernehmennummer+meldungzusatz +);feldfrei(fstatnr);feldfrei(fuebertragen);standardmaskenfeld(niltext, +fuebertragen);infeld(fstatnr);leave(2).naechstefeldnummerok:IF compress( +standardmaskenfeld(fnaechstes))=niltextTHEN standardmaskenfeld(niltext, +fnaechstes);status:=0;ELSE standardpruefe(pruefeimintervall,fnaechstes,1, +felder,niltext,status);FI ;IF status>0THEN infeld(status)FI ;status=0. +feldeingabenok:status:=0;IF art=0THEN standardmeldung(mnichterlaubt,niltext); +status:=fart;ELIF NOT definitionokTHEN status:=fdef;ELIF standardmaskenfeld( +fkopieren)>niltextTHEN standardmeldung(mmussleerbleiben,niltext);status:= +fkopieren;ELIF NOT naechstefeldnummerokTHEN status:=fnaechstes;FI ;IF status> +0THEN infeld(status);FI ;status=0.definitionok:SELECT artOF CASE 1: +bedingungok(fdef)CASE 2:summeok(fdef)CASE 3:textok(fdef,breiten[int( +standardmaskenfeld(fspalte))])OTHERWISE leerokEND SELECT .leerok:IF +standardmaskenfeld(fdef)>niltextTHEN standardmeldung(martangeben,niltext); +FALSE ELSE TRUE FI .art:IF standardmaskenfeld(fart)=niltextTHEN 4ELSE pos( +"bst ",standardmaskenfeld(fart))FI .spaltenbreiteneintragen:input(stat); +getline(stat,bezeichnung);get(stat,hoehe);get(stat,breite);standardmaskenfeld +(text(statistikname,3),fstatnr);FOR zaehlerFROM 1UPTO spaltenREP +tragespaltenwertein;feldfrei(breitenfeld+1);PER ;FOR zaehlerFROM spalten+1 +UPTO maxspaltenREP standardmaskenfeld(space+space,breitenfeld); +standardmaskenfeld(space+space,breitenfeld+1);feldschutz(breitenfeld+1);PER ; +modify(stat);infeld(2);standardfelderausgeben;infeld(4).tragespaltenwertein: +get(stat,breite);standardmaskenfeld(text(zaehler,2),breitenfeld); +standardmaskenfeld(text(breite),breitenfeld+1).breitenfeld:(zaehler-1)MOD 10* +10+(zaehler-1)DIV 10*2+3.spaltenbreitenok:FOR zaehlerFROM 1UPTO spaltenREP +standardpruefe(pruefeimintervall,breitenfeld+1,minbreite,maxbreite,niltext, +status);UNTIL status>0PER ;IF status>0THEN infeld(status)FI ;status=0. +spaltenbreitenspeichern:bezeichnung:=text(zeilen)+space+text(spalten)+space; +FOR zaehlerFROM 1UPTO spaltenREP bezeichnungCAT text(int(standardmaskenfeld( +breitenfeld+1)));bezeichnungCAT space;PER ;toline(stat,2);writerecord(stat, +bezeichnung).statnummerok:standardpruefe(pruefeimintervall,fstatnr,1, +maxstatistiken,niltext,status);IF status>0THEN infeld(status)ELIF NOT +statistikexistiert(statnummer)THEN standardmeldung(mgibtesnicht,statnummer+ +meldungzusatz);infeld(fstatnr);status:=fstatnrFI ;status=0.statnummer:text( +int(standardmaskenfeld(fstatnr))).uebernehmennummer:text(int( +standardmaskenfeld(fuebertragen))).END PROC statfelder;PROC statistikladen( +TEXT CONST statnummer):INT VAR spaltenzaehler;forget(statistikdatei+ +statnummer,quiet);fetch(statistikdatei+statnummer,task(statistikserver));stat +:=sequentialfile(input,statistikdatei+statnummer);getline(stat,statistikname) +;get(stat,zeilen);get(stat,spalten);FOR spaltenzaehlerFROM 1UPTO spaltenREP +get(stat,breiten[spaltenzaehler]);PER ;modify(stat);felder:=zeilen*spalten; +statistikname:=statnummer;statgeaendert:=FALSE ;END PROC statistikladen;PROC +statistiksichern:IF statgeaendertTHEN toline(stat,statistikvorzeilen); +writerecord(stat,niltext);FI ;commanddialogue(FALSE );save(statistikdatei+ +statistikname,task(statistikserver));commanddialogue(TRUE ); +statistikvergessen;END PROC statistiksichern;PROC statistikvergessen:forget( +statistikdatei+statistikname,quiet);END PROC statistikvergessen;BOOL PROC +statistikexistiert(TEXT CONST statnummer):exists(statistikdatei+statnummer, +task(statistikserver))END PROC statistikexistiert;PROC feldbearbeiten(INT +CONST feldnummer):standardmaskenfeld(text(statistikname,3),fstatnr); +standardmaskenfeld(text(feldnummer,4),ffeldnr);standardmaskenfeld(text(( +feldnummer-1)DIV spalten+1,2),fzeile);standardmaskenfeld(text((feldnummer-1) +MOD spalten+1,2),fspalte);IF feldnummer<felderTHEN standardmaskenfeld(text( +feldnummer+1),fnaechstes);ELSE standardmaskenfeld(niltext,fnaechstes);FI ; +felddefinitionzeigen(feldnummer);END PROC feldbearbeiten;PROC +felddefinitionzeigen(INT CONST feldnummer):TEXT VAR felddefinition;toline( +stat,statistikvorzeilen+feldnummer);readrecord(stat,felddefinition); +standardmaskenfeld(felddefinitionSUB 5,fart);standardmaskenfeld(subtext( +felddefinition,6),fdef);standardmaskenfeld(niltext,fkopieren);infeld(fstatnr) +;standardfelderausgeben;infeld(fart);END PROC felddefinitionzeigen;PROC +speicherefeldab:TEXT VAR felddefinition;IF standardmaskenfeld(fart)=niltext +OR standardmaskenfeld(fart)=spaceTHEN felddefinition:=niltextELSE +felddefinition:=minbreite*space;felddefinitionCAT standardmaskenfeld(fart); +felddefinitionCAT standardmaskenfeld(fdef);FI ;toline(stat,statistikvorzeilen ++int(standardmaskenfeld(ffeldnr)));writerecord(stat,felddefinition); +statgeaendert:=TRUE ;END PROC speicherefeldab;BOOL PROC bedingungok(INT +CONST maskenfeld):TEXT VAR bedingung;ok:=TRUE ;fehlernr:=0;scan( +standardmaskenfeld(maskenfeld));naechstessymbol;bedingung:=normbedingung( +normalesende);IF NOT okTHEN standardmeldung(msyntaxfehler,fehlermeldung+ +meldungzusatz);ELIF length(bedingung)>250THEN standardmaskenfeld(bedingung, +maskenfeld);standardmeldung(mdefzulang,niltext);ELSE standardmaskenfeld( +bedingung,maskenfeld);bedingungIN maskenfeld;FI ;okEND PROC bedingungok;TEXT +PROC normbedingung(BOOL CONST endeklammerzu):TEXT VAR bedingung:=niltext, +operator;INT VAR merkmal;IF type=tendedestextesTHEN fehler(fvergleicherwartet +);ELIF symbol=sklammeraufTHEN behandleklammerELIF symbol=skursTHEN +behandlekursELSE behandlemerkmalFI ;IF NOT okTHEN ELIF type<>tendedestextes +THEN liesverknuepfungoderklammerzuELIF endeklammerzuTHEN fehler( +fklammerzuerwartet);FI ;bedingung.behandleklammer:naechstessymbol;bedingung:= +sklammerauf+normbedingung(klammeramende)+sklammerzu.behandlemerkmal: +liesmerkmal;liesoperator;IF okTHEN bedingungCAT textderlaenge(statfeldlaenge( +merkmal),statfeldart(merkmal),operator);FI .liesmerkmal:merkmal:=int(subtext( +symbol,2,3));IF type=tnameAND length(symbol)=3AND (symbolSUB 1)=smerkmalAND +merkmal>=1AND merkmal<=50AND lastconversionokTHEN bedingungCAT symbol; +naechstessymbol;ELSE fehler(fmerkmalerwartet);FI .liesoperator:IF symbol= +sgleichOR symbol=sgroesserOR symbol=sgroessergleichOR symbol=sungleichOR +symbol=skleinerOR symbol=skleinergleichTHEN bedingungCAT sspace;bedingungCAT +symbol;bedingungCAT sspace;operator:=symbol;ELIF okTHEN fehler( +fvergleichsoperwartet);FI .behandlekurs:naechstessymbol;IF symbol=sgleich +THEN bedingungCAT skurs+sspace+sgleich+sspace;bedingungCAT textderlaenge(2, +akurs,sgleich);lieskomma;bedingungCAT textderlaenge(2,akurs,sgleich); +lieskomma;bedingungCAT textderlaenge(4,akurs,sgleich);lieskomma;bedingungCAT +textderlaenge(1,akurs,sgleich);ELSE fehler(fvergleichsoperwartet)FI . +lieskomma:IF symbol=skommaTHEN bedingungCAT symbol;ELIF okTHEN fehler( +fkommaerwartet);FI .liesverknuepfungoderklammerzu:IF endeklammerzuAND symbol= +sklammerzuTHEN naechstessymbol;ELIF symbol=sandOR symbol=sundOR symbol=sorOR +symbol=soderTHEN bedingungCAT sspace;bedingungCAT symbol;bedingungCAT sspace; +naechstessymbol;bedingungCAT normbedingung(endeklammerzu);ELSE fehler( +fbooloperwartet);FI .END PROC normbedingung;TEXT PROC textderlaenge(INT +CONST laenge,art,TEXT CONST operator):TEXT VAR textsammler:=niltext;IF ok +THEN sammletextteile;normieretext;textanhaengen;FI ;textsammler. +sammletextteile:REP naechstessymbol;IF type=ttextTHEN textsammlerCAT symbol +ELIF symbol=sjokerTHEN textsammlerCAT symbolELSE fehler(ftexterwartet);FI ; +naechstessymbol;UNTIL NOT okOR symbol<>splusPER .normieretext:SELECT artOF +CASE atext:textbehandelnCASE adate:datumbehandelnCASE azahl:zahlbehandeln +CASE akurs:kursbehandelnEND SELECT .textbehandeln:WHILE pos(textsammler, +sjoker+sjoker)>0REP change(textsammler,sjoker+sjoker,sjoker);PER ;IF pos( +textsammler,sjoker)=0THEN textsammler:=text(textsammler,laenge);ELIF operator +<>sgleichTHEN fehler(fhierkeinjoker);ELIF length(textsammler)>laengeTHEN +fehler(fpatternzulang);FI .datumbehandeln:textsammler:=datum(datum( +textsammler));IF textsammler=niltextTHEN fehler(fdatumfalsch);FI . +zahlbehandeln:textsammler:=text(int(subtext(textsammler,1,4)));IF length( +textsammler)>laengeOR textsammler=niltextOR NOT lastconversionokTHEN fehler( +fzahlfalsch)ELSE textsammler:=(laenge-length(textsammler))*snull+textsammler; +FI .kursbehandeln:IF pos(textsammler,sjoker)=0THEN textsammler:=text( +textsammler,laenge);ELIF length(textsammler)<>1THEN fehler(fhierkeinjoker); +FI .textanhaengen:IF textsammler<>sjokerTHEN changeall(textsammler,squote, +squote+squote);textsammler:=squote+textsammler+squote;FI .END PROC +textderlaenge;BOOL PROC summeok(INT CONST maskenfeld):TEXT VAR summe:=niltext +;ok:=TRUE ;fehlernr:=0;scan(standardmaskenfeld(maskenfeld));summenormieren; +IF NOT okTHEN standardmeldung(msyntaxfehler,fehlermeldung+meldungzusatz); +ELIF length(summe)>250THEN standardmaskenfeld(summe,maskenfeld); +standardmeldung(mdefzulang,niltext);ELSE standardmaskenfeld(summe,maskenfeld) +;summeIN maskenfeld;FI ;ok.summenormieren:naechstessymbol;REP IF symbol=splus +OR symbol=sminusTHEN summeCAT sspace;summeCAT symbol;naechstessymbol;ELIF +summe>niltextTHEN fehler(frechenoperwartet);FI ;INT CONST feldnr:=int(subtext +(symbol,2,5));IF okTHEN IF type=tnameCAND lastconversionokCAND (symbolSUB 1)= +sfeldCAND (symbolSUB 2)<>snullCAND feldnr>=1CAND feldnr<=felderCAND NOT +isttextfeldTHEN summeCAT sspace;summeCAT symbol;naechstessymbol;ELIF feldnr> +felderTHEN fehler(ffeldnrzuhoch);ELIF isttextfeldTHEN fehler( +ftextfeldsummiert);ELIF okTHEN fehler(ffeldnrerwartet);FI ;FI ;UNTIL type= +tendedestextesOR NOT okPER ;summe:=subtext(summe,2).isttextfeld:toline(stat, +statistikvorzeilen+feldnr);subtext(stat,minbreite+1,minbreite+1)="t".END +PROC summeok;BOOL PROC textok(INT CONST maskenfeld,feldbreite):TEXT VAR tex:= +compress(standardmaskenfeld(maskenfeld));fehlernr:=0;ok:=TRUE ;scan(tex); +naechstessymbol;IF type=tendedestextesTHEN tex:=squote+squoteELIF pos(symbol, +sjoker)>0THEN fehler(fhierkeinjoker)ELIF type<>ttextTHEN fehler(ftexterwartet +);ELIF length(symbol)>feldbreiteTHEN fehler(fzubreit);ELSE naechstessymbol; +IF type<>tendedestextesTHEN fehler(ftexterwartet);FI ;FI ;IF NOT okTHEN +standardmeldung(msyntaxfehler,fehlermeldung+meldungzusatz);ELSE +standardmaskenfeld(tex,maskenfeld);texIN maskenfeld;FI ;ok.END PROC textok; +PROC naechstessymbol:nextsymbol(symbol,type);END PROC naechstessymbol;PROC +fehler(INT CONST nummer):ok:=FALSE ;fehlernr:=nummer;END PROC fehler;TEXT +PROC fehlermeldung:SELECT fehlernrOF CASE fvergleicherwartet: +"Vergleich erwartet"CASE fmerkmalerwartet:"Merkmal m01 bis m50 erwartet"CASE +fvergleichsoperwartet:"=, >, <, >=, <= oder <> erwartet"CASE fkommaerwartet: +"Komma erwartet"CASE ftexterwartet:"""Text"" erwartet"CASE fklammerzuerwartet +:"')' erwartet"CASE fbooloperwartet:"'UND' oder 'ODER' erwartet"CASE +ftextfeldsummiert:"Text-Feld in der Summenformel"CASE fdatumfalsch: +"Datum nicht zulässig"CASE fhierkeinjoker:"'*' nicht zulässig"CASE +frechenoperwartet:"'+' oder '-' erwartet"CASE ffeldnrerwartet: +"Feldnummer (z.B. f17) erwartet"CASE ffeldnrzuhoch:"Feldnummer zu hoch"CASE +fzubreit:"Text länger als Spaltenbreite"CASE fpatternzulang: +"Pattern für das Merkmal zu lang"CASE fzahlfalsch:"Zahl falsch angegeben" +OTHERWISE niltextEND SELECT END PROC fehlermeldung;END PACKET felder; + diff --git a/app/schulis/2.2.1/src/5.manager b/app/schulis/2.2.1/src/5.manager new file mode 100644 index 0000000..c7fb1e4 --- /dev/null +++ b/app/schulis/2.2.1/src/5.manager @@ -0,0 +1,47 @@ +PACKET statistikmanagerDEFINES statistikmanager:LET statistikdatei= +"STATISTIK.",statistikbasis="STATISTIK.basis",statistikverzeichnis= +"statistik verzeichnis",maxstatistiken=200,maxtheslaenge=80,niltext="", +trenner=" ",stichtag="Stichtag ",keinstichtag=" ";LET ack=0, +fetchcode=11,savecode=12,erasecode=14,continuecode=100;THESAURUS VAR +statliste,statbezeichnungen;TEXT VAR filename;BOUND STRUCT (TEXT name, +writepass,readpass)VAR msg;PROC statmanager(DATASPACE VAR ds,INT CONST order, +phase,TASK CONST ordertask):disablestop;IF order>continuecodeTHEN +yterminaldialogELIF order=fetchcodeTHEN ylisteschickenELIF order=savecode +THEN yeintraghinzufuegenELIF order=erasecodeTHEN yeintragloeschenELSE +freemanager(ds,order,phase,ordertask)FI .yeintraghinzufuegen:IF phase=1THEN +getfilename;freemanager(ds,order,phase,ordertask);ELSE freemanager(ds,order, +phase,ordertask);IF NOT iserrorAND exists(filename)THEN eintragloeschen( +filename);eintraghinzufuegen(filename);FI FI .yeintragloeschen:getfilename; +freemanager(ds,order,phase,ordertask);IF NOT iserrorAND phase<>1AND NOT +exists(filename)THEN eintragloeschen(filename);FI .ylisteschicken:getfilename +;IF filename=statistikverzeichnisTHEN schickedenthesaurusELSE freemanager(ds, +order,phase,ordertask)FI .schickedenthesaurus:forget(ds);ds:=nilspace;BOUND +THESAURUS VAR allestatistiken:=ds;allestatistiken:=statbezeichnungen;send( +ordertask,ack,ds);forget(ds).yterminaldialog:freemanager(ds,order,phase, +ordertask);clearerror;statlisteerstellen.getfilename:msg:=ds;filename:=msg. +name.END PROC statmanager;PROC eintragloeschen(TEXT CONST filename): +enablestop;INT VAR index:=link(statliste,filename);IF index>0AND iststatistik +(filename)THEN delete(statliste,index);delete(statbezeichnungen,index);FI +END PROC eintragloeschen;PROC eintraghinzufuegen(TEXT CONST filename): +disablestop;IF iststatistik(filename)THEN eintragbearbeiten(filename);IF +iserrorTHEN clearerror;forget(filename,quiet);FI ;ELIF NOT (filename= +statistikbasis)THEN forget(filename,quiet);FI .END PROC eintraghinzufuegen; +PROC eintragbearbeiten(TEXT CONST filename):enablestop;FILE VAR f:= +sequentialfile(modify,filename);TEXT VAR eintrag,dateizeile;eintrag:=text(int +(statistiknummer),3);eintragCAT trenner;eintragCAT stichtagtext;eintragCAT +trenner;eintragCAT bezeichnung;insert(statliste,filename);insert( +statbezeichnungen,subtext(eintrag,1,maxtheslaenge)).statistiknummer:subtext( +filename,length(statistikdatei)+1).stichtagtext:toline(f,3);readrecord(f, +dateizeile);IF dateizeile>niltextTHEN stichtag+dateizeileELSE keinstichtagFI +.bezeichnung:toline(f,1);readrecord(f,dateizeile);dateizeile.END PROC +eintragbearbeiten;PROC statlisteerstellen:enablestop;INT VAR index:=0;TEXT +VAR eintrag;statliste:=emptythesaurus;statbezeichnungen:=emptythesaurus;get( +all,eintrag,index);WHILE index>0REP eintraghinzufuegen(eintrag);get(all, +eintrag,index);PER ;END PROC statlisteerstellen;BOOL PROC iststatistik(TEXT +CONST filename):enablestop;TEXT CONST zahltext:=subtext(filename,length( +statistikdatei)+1);INT CONST zahl:=int(zahltext);subtext(filename,1,length( +statistikdatei))=statistikdateiAND zahl>=1AND zahl<=maxstatistikenAND text( +zahl)=zahltext.END PROC iststatistik;PROC statistikmanager:statlisteerstellen +;globalmanager(PROC (DATASPACE VAR ,INT CONST ,INT CONST ,TASK CONST ) +statmanager)END PROC statistikmanager;END PACKET statistikmanager; + diff --git a/app/schulis/2.2.1/src/5.merkmale b/app/schulis/2.2.1/src/5.merkmale new file mode 100644 index 0000000..f41709f --- /dev/null +++ b/app/schulis/2.2.1/src/5.merkmale @@ -0,0 +1,52 @@ +PACKET merkmaleDEFINES statfeldname,statfeldlaenge,statfeldpos,statfeldart, +statdatenbasiszeile,vergleichbaresdatum:LET niltext="",space=" ",null="0", +arttext=1,artdate=2,artzahl=3;ROW 50INT CONST feldnr:=ROW 50INT :(5,6,7,8,10, +12,13,0,16,17,18,0,27,35,36,38,39,42,43,44,45,46,47,48,49,50,55,56,58,59,61, +62,64,65,67,68,69,0,0,0,0,0,0,0,0,0,0,0,0,0);ROW 50INT CONST feldlaenge:=ROW +50INT :(8,3,2,4,1,1,2,2,8,1,1,2,3,3,1,1,3,2,8,4,4,4,4,4,4,4,2,3,2,3,2,3,2,3,2 +,8,8,9,9,9,9,9,9,9,9,9,9,9,9,9);ROW 50INT CONST feldpos:=ROW 50INT :(1,9,12, +14,18,19,20,22,24,32,33,34,36,39,42,43,44,47,49,57,61,65,69,73,77,81,85,87,90 +,92,95,97,100,102,105,107,115,123,132,141,150,159,168,177,186,195,204,213,222 +,231);ROW 50INT CONST feldart:=ROW 50INT :(2,1,3,1,1,1,3,1,2,1,1,1,1,1,1,1,1, +3,2,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1);TEXT +CONST leerezeile:=(feldpos[38]-1)*space,leerekurse:=(feldlaenge[38]*(50-37))* +space;TEXT PROC statfeldname(INT CONST merkmal):INT CONST feldnum:=feldnr[ +merkmal];IF feldnum>0THEN name(feldnum)ELIF merkmal=8THEN +"Schulart letzte Schule"ELIF merkmal=12THEN "Schulart neue Schule"ELSE text( +merkmal-37)+". Kurs"FI .END PROC statfeldname;INT PROC statfeldlaenge(INT +CONST merkmal):feldlaenge[merkmal]END PROC statfeldlaenge;INT PROC +statfeldpos(INT CONST merkmal):feldpos[merkmal]END PROC statfeldpos;INT PROC +statfeldart(INT CONST merkmal):feldart[merkmal]END PROC statfeldart;TEXT +PROC statdatenbasiszeile:TEXT VAR zeile:=leerezeile,kurse:=leerekurse,kennung +,schule;INT VAR feldzaehler;holediffdaten;uebertragestandardfelder; +uebertrageschularten;IF hjdatendaTHEN uebertragehjdatenFI ;zeileCAT kurse; +zeile.uebertragestandardfelder:FOR feldzaehlerFROM 1UPTO 38REP IF feldnr[ +feldzaehler]>0THEN replace(zeile,feldpos[feldzaehler],feldinhalt);FI ;PER . +feldinhalt:SELECT feldart[feldzaehler]OF CASE arttext:feldwertCASE artdate: +vergleichbaresdatum(feldwert)CASE artzahl:kennung:=compress(feldwert);( +feldlaenge[feldzaehler]-length(kennung))*null+kennungOTHERWISE niltextEND +SELECT .feldwert:subtext(wert(feldnr[feldzaehler]),1,feldlaenge[feldzaehler]) +.holediffdaten:IF wert(fnrsutiddiffdaten)=niltextTHEN errorstop( +"Keine Diffdaten zu Schüler "+wert(fnrsufamnames));ELSE readtid(dnrdiffdaten, +wert(fnrsutiddiffdaten));FI .uebertrageschularten:schule:=wert( +fnrsuskennlschule);IF schule>niltextTHEN putwert(fnrschkennung,schule);search +(dnrschulen);IF dbstatus=okTHEN replace(zeile,feldpos[8],wert(fnrschart));FI +;FI ;schule:=wert(fnrsuskennnschule);IF schule>niltextTHEN putwert( +fnrschkennung,schule);search(dnrschulen);IF dbstatus=okTHEN replace(zeile, +feldpos[12],wert(fnrschart));FI ;FI .hjdatenda:wert(fnrsutidakthjd)>niltext. +uebertragehjdaten:readtid(dnrhalbjahresdaten,wert(fnrsutidakthjd));kennung:= +wert(fnrhjdkursart);FOR feldzaehlerFROM 0UPTO length(kennung)DIV 2-1REP +replace(kurse,feldzaehler*9+1,diesekurskennung);PER ;kennung:=wert(fnrhjdfach +);FOR feldzaehlerFROM 0UPTO length(kennung)DIV 2-1REP replace(kurse, +feldzaehler*9+3,diesefachkennung);PER ;kennung:=wert(fnrhjdlerngrpkenn);FOR +feldzaehlerFROM 0UPTO length(kennung)DIV 2-1REP replace(kurse,feldzaehler*9+5 +,dieselernkennung);PER ;kennung:=wert(fnrhjdklausurteiln);FOR feldzaehler +FROM 1UPTO length(kennung)REP replace(kurse,feldzaehler*9,dieseklsrkennung); +PER .diesekurskennung:subtext(kennung,feldzaehler*2+1,feldzaehler*2+2). +diesefachkennung:subtext(kennung,feldzaehler*2+1,feldzaehler*2+2). +dieselernkennung:subtext(kennung,feldzaehler*4+1,feldzaehler*4+4). +dieseklsrkennung:kennungSUB feldzaehler.END PROC statdatenbasiszeile;TEXT +PROC vergleichbaresdatum(TEXT CONST dat):INT CONST datzahl:=datum(dat);IF +datzahl<0THEN " 0"+text(datzahl-minint,5)ELSE " 1"+text(datzahl,5)FI END +PROC vergleichbaresdatum;END PACKET merkmale; + diff --git a/app/schulis/2.2.1/src/5.statistik liste b/app/schulis/2.2.1/src/5.statistik liste new file mode 100644 index 0000000..f7c00ca --- /dev/null +++ b/app/schulis/2.2.1/src/5.statistik liste @@ -0,0 +1,27 @@ +PACKET statistiklisteDEFINES statlistezeigen,statlistebearbeiten, +statlisteeintrag:LET statistikserver="statistik server",niltext="", +maxstatistiken=200,null="�",eins="�",maxi="�",mlistewirderstellt=7, +mkeinedaten=68;THESAURUS VAR thesauswahl;TEXT VAR theseintrag;INT VAR +thesindex;BOOL VAR theszeigen;PROC statlistezeigen(INT CONST abnr):BOOL VAR +istleer;standardmeldung(mlistewirderstellt,niltext); +thesauruszeigenvorbereiten(allestatistikensortiert(abnr),istleer);IF istleer +THEN standardmeldung(mkeinedaten,niltext);leave(1);ELSE theszeigen:=TRUE ; +thesauruszeigen;FI .END PROC statlistezeigen;PROC statlistebearbeiten(TEXT +CONST standardmaskenname):IF theszeigenTHEN theszeigen:=FALSE ;thesauswahl:= +thesaurusauswahl;thesindex:=0;standardstartproc(standardmaskenname);FI ;get( +thesauswahl,theseintrag,thesindex);IF thesindex=0THEN theseintrag:=niltext; +ELSE theseintrag:=text(int(theseintrag));FI ;END PROC statlistebearbeiten; +TEXT PROC statlisteeintrag:theseintragEND PROC statlisteeintrag;THESAURUS +PROC allestatistikensortiert(INT CONST abnr):THESAURUS VAR verzeichnis:= +allestatistiken(task(statistikserver)),sortiert:=emptythesaurus;INT VAR index +:=0;TEXT VAR eintrag,sorter:=maxstatistiken*null;get(verzeichnis,eintrag, +index);WHILE index>0REP replace(sorter,int(eintrag),code(index));get( +verzeichnis,eintrag,index);PER ;index:=pos(sorter,eins,maxi,max(1,abnr)); +WHILE index>0REP insert(sortiert,name(verzeichnis,code(sorterSUB index))); +index:=pos(sorter,eins,maxi,index+1);PER ;sortiert.END PROC +allestatistikensortiert;LET statistikverzeichnis="statistik verzeichnis"; +DATASPACE VAR ds;THESAURUS PROC allestatistiken(TASK CONST statmanager): +disablestop;forget(ds);fetch(ds,statistikverzeichnis,statmanager);BOUND +THESAURUS VAR res:=ds;THESAURUS VAR result:=CONCR (res);forget(ds);resultEND +PROC allestatistiken;END PACKET statistikliste; + diff --git a/app/schulis/2.2.1/src/5.thesaurus b/app/schulis/2.2.1/src/5.thesaurus new file mode 100644 index 0000000..571edf9 --- /dev/null +++ b/app/schulis/2.2.1/src/5.thesaurus @@ -0,0 +1,38 @@ +PACKET thesauruszeigenDEFINES thesauruszeigenvorbereiten,thesauruszeigen, +thesaurusblaettern,thesaurusauswahl:LET listenmaskenname="mu objektliste"; +LET niltext="",markoff=" ",markon="x";LET andenanfang=1,andasende=2,vorwaerts +=3,rueckwaerts=4;LET zeileninliste=18,ausgabelaenge=71;THESAURUS VAR +dateiliste;TEXT VAR markmerker;INT VAR erstezeile,letztezeile;PROC +thesauruszeigenvorbereiten(THESAURUS CONST th,BOOL VAR istleer):dateiliste:= +COMPR th;letztezeile:=highestentry(dateiliste);markmerker:=letztezeile* +markoff;erstezeile:=1;istleer:=letztezeile=0;END PROC +thesauruszeigenvorbereiten;PROC thesauruszeigen:standardstartproc( +listenmaskenname);eineseitezeigen;standardnproc;END PROC thesauruszeigen; +PROC thesaurusblaettern(INT CONST wohin):INT VAR merkeerstezeile:=erstezeile; +SELECT wohinOF CASE andenanfang:andendateianfangCASE andasende:andasdateiende +CASE vorwaerts:vorwaertsblaetternindateiCASE rueckwaerts: +rueckwaertsblaetternindateiEND SELECT ;IF merkeerstezeile<>erstezeileTHEN +speicheremarkierungen(merkeerstezeile);eineseitezeigen;ELSE standardmeldung( +72,niltext);FI ;leave(1).andendateianfang:IF erstezeile<>1THEN erstezeile:=1; +FI .andasdateiende:IF erstezeile<letztezeile-zeileninliste+1THEN erstezeile:= +letztezeile-zeileninliste+1;FI .vorwaertsblaetternindatei:IF erstezeile< +letztezeile-zeileninliste+1THEN erstezeileINCR zeileninliste;FI . +rueckwaertsblaetternindatei:erstezeile:=max(1,erstezeile-zeileninliste).END +PROC thesaurusblaettern;THESAURUS PROC thesaurusauswahl:THESAURUS VAR auswahl +:=emptythesaurus;INT VAR i;speicheremarkierungen(erstezeile);FOR iFROM 1UPTO +letztezeileREP IF (markmerkerSUB i)=markonTHEN insert(auswahl,name(dateiliste +,i));FI ;PER ;auswahlEND PROC thesaurusauswahl;PROC speicheremarkierungen( +INT CONST erstezeile):INT VAR i;FOR iFROM 1UPTO zeileninlisteREP IF +standardmaskenfeld(2*i)<>niltextTHEN replace(markmerker,erstezeile+i-1,markon +);ELSE replace(markmerker,erstezeile+i-1,markoff);FI PER END PROC +speicheremarkierungen;PROC eineseitezeigen:INT VAR i;FOR iFROM 1UPTO +zeileninlisteREP IF aktzeile<=letztezeileTHEN standardmaskenfeld(eintrag,i*2+ +1);standardmaskenfeld(markiert,i*2);ELSE standardmaskenfeld(spaces,i*2+1); +standardmaskenfeld(niltext,i*2);feldschutz(i*2);FI PER ;infeld(2).markiert: +IF (markmerkerSUB (aktzeile))=markonTHEN markonELSE niltextFI .aktzeile: +erstezeile+i-1.eintrag:text(name(dateiliste,aktzeile),ausgabelaenge).spaces: +text(niltext,ausgabelaenge).END PROC eineseitezeigen;THESAURUS OP COMPR ( +THESAURUS CONST th):THESAURUS VAR res:=emptythesaurus;TEXT VAR eintrag;INT +VAR index:=0;get(th,eintrag,index);WHILE index>0REP insert(res,eintrag);get( +th,eintrag,index);PER ;resEND OP COMPR ;END PACKET thesauruszeigen; + diff --git a/app/schulis/2.2.1/src/6.IDA.files b/app/schulis/2.2.1/src/6.IDA.files new file mode 100644 index 0000000..b901335 --- /dev/null +++ b/app/schulis/2.2.1/src/6.IDA.files @@ -0,0 +1,17 @@ +6.db ref.sc +6.db sel.sc +6.db q.sc +6.db snd query.sc +0.ida.data +6.ida.gen +6.ida.druck +0.ida.form +6.ida.def.druck +6.ida.grund +6.ida.check +6.ida.plausi +6.ida.definieren +6.ida.auswahl +6.ida.eingang + + diff --git a/app/schulis/2.2.1/src/6.db q.sc b/app/schulis/2.2.1/src/6.db q.sc new file mode 100644 index 0000000..4b3c2b2 --- /dev/null +++ b/app/schulis/2.2.1/src/6.db q.sc @@ -0,0 +1,222 @@ +#$IF mitinternerqueryTHEN #PACKET queryparserDEFINES QUERY ,query, +getscanbedingung,getdnr,getinr,getanzahlverbunde,getselpointer, +getstopbedpointer,getquery,putquery,setzeschluessel,getanzahltupel, +getswanzfld,getswnachfld,getswvonfld,getswallefelder,getswfwert,getsohnverb, +getbruderverb,geterstestupel,puterstestupel,selektionerfuellt,initquery,:=, +baumdurchlauf,listeschluessel,putletzterverbund,getletzterverbund,puttid, +gettid,getbruder,putbruder,tidfeld,updatefnr,updateausdruck,queryart, +anzupdatefelder:TYPE UPDSTACK =STRUCT (INT uuuuuv,TEXT uuuuuw);BOUND ROW 100 +UPDSTACK VAR uuuuux;TYPE VERBELEMENT =STRUCT (TEXT uuuuuy,uuuuuz,BOOL uuuuvu, +INT uuuuvv,uuuuvw,uuuuvx,uuuuvy,uuuuvz,uuuuwu);TYPE VERBUND =ROW uuuuwv +VERBELEMENT ;TYPE QUERY =STRUCT (INT uuuuww,uuuuwx,uuuuwy,TEXT uuuuwz,uuuuxu, +SELEKTION uuuuxv,VERBUND uuuuxw,SCHLUESSEL uuuuxx);TYPE SWERT =STRUCT (INT +uuuuxy,uuuuxz,TEXT wert);TYPE SCHLUESSELWERTE =STRUCT (BOOL uuuuyu,INT uuuuyv +,ROW uuuuywSWERT uuuuyx);TYPE SCHLUESSEL =ROW uuuuwvSCHLUESSELWERTE ;LET +uuuuyz=0,uuuuzu=1,uuuuzv=2,uuuuzw=3,uuuuzx=6,uuuuzy=5,uuuuzz=7,uuuvuu=7, +uuuvuv=4,uuuvuw="BY",uuuvux="UPDATE",uuuvuy="DELETE",uuuvuz=".query",uuuvvu= +";",uuuvvv="(",uuuvvw=")",#uuuvvx=",",uuuvvy="=",uuuvvz=">=",uuuvwu="<=",# +uuuvwv="/",uuuvww="""",uuuvwx=".",uuuvwy=":",uuuvwz=" ",uuuvxu=":=",uuuvxv= +"<",uuuuwv=10,uuuvxx=20,uuuuyw=10,uuuvxz=80,uuuvyu=1,uuuvyv=2,uuuvyw=3;INT +VAR uuuvyx:=-5,uuuvyy:=-33,uuuvyz;DATASPACE VAR uuuvzu:=nilspace;INT VAR +uuuvzv:=0;INT PROC tidfeld:uuuvyyENDPROC tidfeld;FILE VAR uuuvzz;TEXT VAR +uuuwuu:="",uuuwuv:="",uuuwuw:="",uuuwux:="";INT VAR uuuwuy,uuuwuz,uuuwvu; +BOOL VAR uuuwvv,uuuwvw;INT VAR uuuwvx:=0,uuuwvy,uuuwvz;ROW uuuvxxTEXT VAR +uuuwwv;OP :=(QUERY VAR uuuwww,QUERY CONST uuuwwx):CONCR (uuuwww):=CONCR ( +uuuwwx)ENDOP :=;OP :=(VERBELEMENT VAR uuuwww,VERBELEMENT CONST uuuwwx):CONCR +(uuuwww):=CONCR (uuuwwx)ENDOP :=;OP :=(VERBUND VAR uuuwww,VERBUND CONST +uuuwwx):CONCR (uuuwww):=CONCR (uuuwwx)ENDOP :=;INT PROC updatefnr(INT CONST +uuuwyx):uuuuux[uuuwyx].uuuuuvENDPROC updatefnr;TEXT PROC updateausdruck(INT +CONST uuuwyx):uuuuux[uuuwyx].uuuuuwENDPROC updateausdruck;INT PROC queryart: +uuuvzvENDPROC queryart;PROC queryart(INT CONST uuuxvu):uuuvzv:=uuuxvuENDPROC +queryart;INT PROC anzupdatefelder:uuuvyzENDPROC anzupdatefelder;PROC +initquery(QUERY VAR uuuxww):uuuxwx;uuuxww.uuuuww:=0;uuuxww.uuuuwx:=0;uuuxww. +uuuuwz:="";uuuxww.uuuuxu:="";initselektionen(uuuxww.uuuuxv);uuuxyw(uuuxww. +uuuuxw);uuuxyz(uuuxww.uuuuxx)ENDPROC initquery;PROC uuuxwx:forget(uuuvzu); +uuuvzu:=nilspace;uuuuux:=uuuvzuENDPROC uuuxwx;initquery(uuuyuy);PROC uuuxyw( +VERBUND VAR uuuyvu):FOR uuuwvyFROM 1UPTO uuuuwvREP uuuyvx(uuuyvu[uuuwvy])PER +ENDPROC uuuxyw;PROC uuuyvx(VERBELEMENT VAR uuuyww):uuuyww.uuuuuy:="";uuuyww. +uuuuuz:=""ENDPROC uuuyvx;#BOUND QUERY VAR uuuyuy;#QUERY VAR uuuyuy;PROC +getquery(QUERY VAR uuuxww):CONCR (uuuxww):=CONCR (uuuyuy)ENDPROC getquery; +PROC putquery(QUERY CONST uuuxww):CONCR (uuuyuy):=CONCR (uuuxww)ENDPROC +putquery;PROC query:query(lastparam)ENDPROC query;PROC uuuyzz(TEXT CONST +uuuzuu):TEXT VAR uuuzuv:="",uuuzuw:="",uuuzux:="",uuuwuv:="";INT VAR uuuzuz; +uuuxwx;uuuzvv;nextsymbol;queryparser(uuuzvx);uuuzvy;uuuzvz;uuuzwu;uuuzwv; +baumdurchlauf;.uuuzvy:nextsymbol;WHILE uuuwuy<>uuuuzzREP uuuzxu;nextsymbol +PER .uuuzxu:uuuzuw:="";IF uuuwuy<>uuuuzuTHEN uuuzxz( +"Refinementname erwartet: "+uuuwuu)ELSE uuuzuv:=uuuwuu;nextsymbol;IF uuuwuu<> +uuuvwyTHEN uuuzxz(uuuvww+uuuvwy+uuuvww+" erwartet: "+uuuwuu)ELSE uuuzzy; +putref(uuuzuv,uuuzuw)FI FI .uuuzzy:nextsymbol;WHILE uuuwuy<>uuuuzzCAND uuuwuu +<>uuuvwxREP uuuzuw:=uuuzuw+uuvuvw;nextsymbolPER ;IF uuuwuy=uuuuzzTHEN uuuzxz( +"Refinement nicht mit ""."" abgeschlossen")FI .uuuzvv:enablestop;uuuvzz:= +sequentialfile(input,uuuzuu);IF exists(uuuzuu+uuuvuz)THEN forget(uuuzuu+ +uuuvuz,quiet)FI ;#uuuyuy:=new(uuuzuu+uuuvuz);#lastparam(uuuzuu);uuvuxz(0); +uuuwvx:=0;clearrefs;scan(uuuvzz);.uuuzwu:FOR uuuzuzFROM 1UPTO uuuwvxREP +uuuzux:="";uuuwuv:=uuvuzv(uuuzuz);scan(uuuwuv);nextsymbol(uuuwuu,uuuwuy); +WHILE uuuwuy<>uuuuzzREP IF uuuwuy=uuuuzuTHEN uuuzux:=uuuzux+getreftext(uuuwuu +)ELSE uuuzux:=uuuzux+uuvuvwFI ;nextsymbol(uuuwuu,uuuwuy)PER ;uuvvwu(uuuzux, +uuuzuz)PER .uuuzwv:INT VAR uuvvwy;initsel(uuuyuy.uuuuxv);FOR uuuzuzFROM 1 +UPTO getanzahlverbundeREP uuvvxx;uuvvxyPER .uuvvxx:uuvvwy:=getstopbedpointer( +uuuzuz);IF uuvvwy>uuuuyzTHEN uuuwuv:=uuvuzv(uuvvwy);uuvvzw(baueselektionauf( +uuuyuy.uuuuxv,uuuwuv),uuuzuz)FI .uuvvxy:uuvvwy:=getselpointer(uuuzuz);IF +uuvvwy>uuuuyzTHEN uuuwuv:=uuvuzv(uuvvwy);uuvwvy(baueselektionauf(uuuyuy. +uuuuxv,uuuwuv),uuuzuz)FI .ENDPROC uuuyzz;PROC uuuzvz:INT VAR uuuzuz:=1;BOOL +VAR uuvwxu:=FALSE ;TEXT VAR uuuzux:="";WHILE uuuzuz<=getanzahlverbundeREP +uuuzux:="";uuuwuv:=getscanbedingung(uuuzuz);scan(uuuwuv);nextsymbol(uuuwuu, +uuuwuy);WHILE uuuwuy<>uuuuzzREP IF uuuwuy=uuuuzuTHEN uuuzux:=uuuzux+ +getreftext(uuuwuu)ELSE uuuzux:=uuuzux+uuvuvwFI ;nextsymbol(uuuwuu,uuuwuy)PER +;IF getdnr(uuuzuz)=uuuvyxTHEN queryparser(uuuzux,uuuzuz);uuvwxu:=TRUE ELSE +uuvxwu(uuuzux,uuuzuz)FI ;uuuzuzINCR 1PER ;IF uuvwxuTHEN uuuzvzFI ENDPROC +uuuzvz;PROC queryparser(TEXT CONST uuuwuv,INT CONST uuvxxx):INT VAR uuvxxy; +scan(uuuwuv);nextsymbol;uuvxyu;queryparser(uuvxxx);uuvxyx.uuvxyu:uuvxxy:= +getbruderverb(uuvxxx);.uuvxyx:uuvxzx(uuvxxy,uuvxxx).ENDPROC queryparser;PROC +queryparser(INT CONST uuvxxx):TEXT VAR uuvyux:="";BOOL VAR uuvyuy:=FALSE ; +uuuvzv:=0;REP uuvyvu;UNTIL uuvyuyPER ;uuvyvw;uuvyvx;uuvyvy;uuvyvz;SELECT +uuuvzvOF CASE uuuvyv,uuuvyu:uuvywx;IF uuvxxx=1THEN uuvywzFI CASE uuuvyw: +uuvyxvENDSELECT .uuvyvu:IF uuuwuy=uuuvuvTHEN uuvyxz(dateinr(uuuwuu),uuvxxx); +IF uuuvzv<1THEN uuuvzv:=uuuvyuFI ;uuvyuy:=TRUE ELSE IF uuuwuy=uuuuzvTHEN IF +uuuwuu=uuuvuxTHEN nextsymbol;uuuvzv:=uuuvywELIF uuuwuu=uuuvuyTHEN nextsymbol; +uuuvzv:=uuuvyvELSE uuuzxz("Dateiname nicht gefunden: "+uuuwuu)FI FI FI . +uuvyvw:nextsymbol;IF uuuwuy=uuuuzvCAND uuuwuu=uuuvuwTHEN uuvzvz;uuvzwuELSE +IF uuuwuy=uuuuzxCAND uuuwuu=uuuvvvTHEN uuvzwz(#getdnr(uuvxxx)#0,uuvxxx)ELSE +uuuzxz("Indexname bzw. ""("" fehlt")FI FI .uuvzvz:nextsymbol;IF uuuwuy=uuuvuv +THEN uuvzwz(indexnr(uuuwuu),uuvxxx)ELSE uuuzxz("Indexname nicht gefunden: "+ +uuuwuu)FI .uuvzwu:nextsymbol;IF NOT (uuuwuy=uuuuzxCAND uuuwuu=uuuvvv)THEN +uuuzxz(uuuvww+uuuvvv+uuuvww+" erwartet")FI .uuvyvx:uuwuuy(uuuwuv);uuvxwu( +uuuwuv,uuvxxx);.uuvyvy:BOOL VAR stop:=TRUE ;uuwuvy.uuvyvz:stop:=FALSE ;uuwuvy +.uuwuvy:INT VAR uuvvwy;uuuwuw:="";IF NOT uuuwvvTHEN uuwuuy(uuuwuw);IF uuuwuw= +""THEN IF stopTHEN uuvvzw(uuuuyz,uuvxxx)ELSE uuvwvy(uuuuyz,uuvxxx)FI ELSE +uuvvwy:=uuwuyx;IF stopTHEN uuvvzw(uuvvwy,uuvxxx)ELSE uuvwvy(uuvvwy,uuvxxx)FI +;uuvvwu(uuuwuw,uuvvwy)FI ELSE uuvwvy(uuuuyz,uuvxxx)FI .uuvywx:INT VAR uuwvuz; +IF NOT uuuwvvTHEN uuwvvv(uuvxxx,uuwvuz);uuwvvy(uuwvuz,uuvxxx);uuvxzx(uuuuyz, +uuvxxx)FI .uuvywz:nextsymbol;IF uuuwuy=uuuuzxOR uuuwuy=uuuuzzOR uuuwuy=uuuuzy +THEN IF uuuwuu<>uuuvwvTHEN uuwvyvFI ;uuuuwx;uuwvyxELSE uuuzxz(uuuvww+uuuvwv+ +uuuvww+" bzw. "+uuuvww+uuuvvu+uuuvww+uuuvwv+uuuvww+uuuvwx+uuuvww+" erwartet") +FI .uuwvyv:IF uuuwuu=uuuvvuOR uuuwuu=uuuvwxOR uuuwuy=uuuuzzTHEN uuwwvy(0); +LEAVE uuvywzELSE uuuzxz("Falscher Tupelzahl-Operator: "+uuuwuu)FI .uuuuwx: +nextsymbol;IF uuuwuy=uuuuzwTHEN uuwwvy(int(uuuwuu));ELSE uuuzxz( +"Keine Zahlenangabe: "+uuuwuu)FI .uuwvyx:nextsymbol;IF uuuwuy<>uuuuzzCAND ( +NOT (uuuwuu=uuuvvuCOR uuuwuu=uuuvwx))THEN uuuzxz("""."" oder "";"" erwartet") +FI .uuvyxv:uuuvyz:=0;nextsymbol;WHILE NOT uuuwvvREP uuuvyzINCR 1;uuwwzx; +uuwwzy;uuwwzz;PER .uuwwzx:IF uuuwuy=uuuuzuTHEN uuwxuxELSE uuwxuyFI .uuwxux: +uuuzxz("Zur Zeit keine Refinements in Update-Liste erlaubt!").uuwxuy:uuuuux[ +uuuvyz].uuuuuv:=feldnr(uuuwuu);IF uuuuux[uuuvyz].uuuuuv<3THEN uuuzxz( +"Falscher Feldname: "+uuuwuu)FI ;nextsymbol.uuwwzy:IF NOT (uuuwuy=uuuuzyCAND +uuuwuu=uuuvxu)THEN uuuzxz("Keine Zuweisung: "+uuuwuu)FI .uuwwzz:uuwxyv(uuvyux +);uuuuux[uuuvyz].uuuuuw:=uuvyux;nextsymbol.ENDPROC queryparser;PROC uuwxyv( +TEXT VAR uuwxzx):INT VAR uuwxzy:=0,uuwxzz:=0;uuwxzx:="";uuuwuu:="";uuuwuy:=0; +REP uuwxzx:=uuwxzx+uuvuvw;uuwxzy:=uuuwuy;nextsymbolUNTIL uuwyvwPER .uuwyvw: +IF (uuuwuy=uuuuzxCAND (uuuwuu=uuuvvuCOR (uuuwuu=uuuvvwCAND uuwxzz=0)))THEN +uuuwvv:=uuuwuu=uuuvvw;TRUE ELSE IF uuuwuy=uuuuzzTHEN uuuzxz( +"Vorzeitiges END OF FILE!");FALSE ELSE IF uuuwuy=uuuuzxTHEN IF uuuwuu=uuuvvv +THEN uuwxzzINCR 1FI ;IF uuuwuu=uuuvvwTHEN uuwxzzDECR 1FI ;FI ;FALSE FI FI . +ENDPROC uuwxyv;PROC uuwvvv(INT CONST uuvxxx,INT VAR uuwvuz):INT VAR uuwyzz:= +uuuuyz;uuwvuz:=uuuuyz;nextsymbol;IF uuuwuy=uuuuzxCAND uuuwuu=uuuvvwTHEN +uuuwvv:=TRUE ;LEAVE uuwvvvELIF uuuwuy=uuuuzuTHEN uuwvuz:=uuuzvx;uuvxwu(uuuwuu +,uuwvuz);uuvwvy(uuuuyz,uuwvuz);uuvyxz(uuuvyx,uuwvuz);uuwvvv(uuwvuz,uuwyzz); +uuvxzx(uuwyzz,uuwvuz)ELIF uuuwuy=uuuvuvTHEN uuwvuz:=uuuzvx;queryparser(uuwvuz +);uuuwvv:=FALSE ;uuwvvv(uuwvuz,uuwyzz);uuvxzx(uuwyzz,uuwvuz)ELIF (uuuwuy= +uuuuzxCAND uuuwuu=uuuvvu)THEN uuwvvv(uuvxxx,uuwvuz)ELSE uuuzxz( +"Verbund-Fehler bei : "+uuuwuu)FI ENDPROC uuwvvv;PROC uuwuuy(TEXT VAR uuwxzx) +:INT VAR uuwxzy:=0;uuwxzx:="";uuuwuu:="";uuuwuy:=0;uuuwvv:=FALSE ;REP uuwxzx +:=uuwxzx+uuvuvw;uuwxzy:=uuuwuy;nextsymbolUNTIL uuxuyxPER .uuxuyx:IF (uuuwuy= +uuuuzyCAND uuuwuu=uuuvwv)THEN TRUE ELSE IF uuuwuy=uuuuzzTHEN uuuzxz(uuuvww+ +uuuvwv+uuuvww+" fehlt");FALSE ELSE FALSE FI FI .ENDPROC uuwuuy;TEXT PROC +uuvuvw:IF uuuwuy=uuuvuvTHEN uuuvww+uuuwuu+uuuvwwELIF uuuwuy=uuuuzvTHEN uuuvwz ++uuuwuu+uuuvwzELSE uuuwuuFI ENDPROC uuvuvw;PROC nextsymbol:nextsymbol(uuuvzz, +uuuwuu,uuuwuy);ENDPROC nextsymbol;PROC uuuzxz(TEXT CONST uuxvxx):errorstop( +"Zeile "+text(lineno(uuuvzz))+" : "+uuxvxx)ENDPROC uuuzxz;PROC puterstestupel +(TEXT CONST uuxvyw):uuuyuy.uuuuwz:=uuxvywENDPROC puterstestupel;TEXT PROC +geterstestupel:uuuyuy.uuuuwzENDPROC geterstestupel;PROC uuxvzz(TEXT CONST +uuxvyw):uuuyuy.uuuuxu:=uuxvywENDPROC uuxvzz;TEXT PROC uuxwuz:uuuyuy.uuuuxu +ENDPROC uuxwuz;PROC uuwwvy(INT CONST uuxwvy):uuuyuy.uuuuwx:=uuxwvyENDPROC +uuwwvy;INT PROC getanzahltupel:uuuyuy.uuuuwxENDPROC getanzahltupel;PROC +putletzterverbund(INT CONST uuxwxw):uuuyuy.uuuuwy:=uuxwxwENDPROC +putletzterverbund;INT PROC getletzterverbund:uuuyuy.uuuuwyENDPROC +getletzterverbund;PROC puttid(INT CONST uuxwzu,TEXT CONST uuxwzv):uuuyuy. +uuuuxw[uuxwzu].uuuuuz:=uuxwzvENDPROC puttid;TEXT PROC gettid(INT CONST uuxwzu +):uuuyuy.uuuuxw[uuxwzu].uuuuuzENDPROC gettid;PROC putbruder(INT CONST uuxwzu, +BOOL CONST uuxxvz):uuuyuy.uuuuxw[uuxwzu].uuuuvu:=uuxxvzENDPROC putbruder; +BOOL PROC getbruder(INT CONST uuxwzu):uuuyuy.uuuuxw[uuxwzu].uuuuvuENDPROC +getbruder;PROC uuvxwu(TEXT CONST uuxxyw,INT CONST uuuzuz):uuuyuy.uuuuxw[ +uuuzuz].uuuuuy:=uuxxywENDPROC uuvxwu;TEXT PROC getscanbedingung(INT CONST +uuuzuz):uuuyuy.uuuuxw[uuuzuz].uuuuuyENDPROC getscanbedingung;PROC uuvyxz(INT +CONST uuxyvu,uuuzuz):uuuyuy.uuuuxw[uuuzuz].uuuuvv:=uuxyvuENDPROC uuvyxz;PROC +uuvzwz(INT CONST uuxywx,uuuzuz):uuuyuy.uuuuxw[uuuzuz].uuuuvw:=uuxywxENDPROC +uuvzwz;INT PROC getdnr(INT CONST uuuzuz):uuuyuy.uuuuxw[uuuzuz].uuuuvvENDPROC +getdnr;INT PROC getinr(INT CONST uuuzuz):uuuyuy.uuuuxw[uuuzuz].uuuuvwENDPROC +getinr;PROC uuvwvy(INT CONST uuxzuw,uuuzuz):uuuyuy.uuuuxw[uuuzuz].uuuuvx:= +uuxzuwENDPROC uuvwvy;INT PROC getselpointer(INT CONST uuuzuz):uuuyuy.uuuuxw[ +uuuzuz].uuuuvxENDPROC getselpointer;PROC uuvvzw(INT CONST uuxzuw,uuuzuz): +uuuyuy.uuuuxw[uuuzuz].uuuuvy:=uuxzuwENDPROC uuvvzw;INT PROC getstopbedpointer +(INT CONST uuuzuz):uuuyuy.uuuuxw[uuuzuz].uuuuvyENDPROC getstopbedpointer; +PROC uuvxzx(INT CONST uuxzuw,uuuzuz):uuuyuy.uuuuxw[uuuzuz].uuuuvz:=uuxzuw +ENDPROC uuvxzx;INT PROC getbruderverb(INT CONST uuuzuz):uuuyuy.uuuuxw[uuuzuz] +.uuuuvzENDPROC getbruderverb;PROC uuwvvy(INT CONST uuxzuw,uuuzuz):uuuyuy. +uuuuxw[uuuzuz].uuuuwu:=uuxzuwENDPROC uuwvvy;INT PROC getsohnverb(INT CONST +uuuzuz):uuuyuy.uuuuxw[uuuzuz].uuuuwuENDPROC getsohnverb;PROC uuvuxz(INT +CONST uuyuzu):uuuyuy.uuuuww:=uuyuzuENDPROC uuvuxz;INT PROC getanzahlverbunde: +uuuyuy.uuuuwwENDPROC getanzahlverbunde;INT PROC uuuzvx:INT VAR uuyuzu:= +getanzahlverbunde+1;uuvuxz(uuyuzu);uuvxzx(uuuuyz,uuyuzu);uuwvvy(uuuuyz,uuyuzu +);uuvxwu("",uuyuzu);uuyuzuENDPROC uuuzvx;INT PROC uuwuyx:uuuwvxINCR 1;uuuwvx +ENDPROC uuwuyx;PROC uuvvwu(TEXT CONST uuuwuw,INT CONST uuvvwy):uuuwwv[uuvvwy] +:=uuuwuwENDPROC uuvvwu;TEXT PROC uuvuzv(INT CONST uuvvwy):uuuwwv[uuvvwy] +ENDPROC uuvuzv;PROC baumdurchlauf:IF mittestausgabenTHEN uuyvzzFI .uuyvzz: +INT VAR uuywuv;FOR uuywuvFROM 1UPTO getanzahlverbundeREP note("Verbund : "+ +text(uuywuv));noteline;note(" Datei : "+text(getdnr(uuywuv)));noteline;note +(" Index : "+text(getinr(uuywuv)));noteline;note(" Scan : "+ +getscanbedingung(uuywuv));noteline;note(" Bruder: "+text(getbruderverb( +uuywuv)));noteline;note(" Sohn : "+text(getsohnverb(uuywuv)));noteline; +note(" SelPoi: "+text(getselpointer(uuywuv)));noteline;noteline;PER ; +checkselektion(uuuyuy.uuuuxv).ENDPROC baumdurchlauf;PROC setzeschluessel(INT +CONST uuxwzu):TEXT VAR uuywxy:=getscanbedingung(uuxwzu);scan(uuywxy); +nextsymbol;uuywyw;uuywyx;uuywyy;uuywyz;WHILE uuuwuy<>uuuvuuREP IF uuuwuu= +uuuvxvTHEN nextsymbol;uuywzy(uuxwzu,uuyxuu,uuuwuu);uuyxuw(uuxwzu,uuyxuu, +uuyxuz);uuyxvu(uuxwzu,uuyxuu,0);ELIF uuuwuy=uuuvuvTHEN uuywzy(uuxwzu,uuyxuu, +"");uuyxuw(uuxwzu,uuyxuu,uuyxuz);uuyxvu(uuxwzu,uuyxuu,feldnr(uuuwuu));ELIF +uuuwuu=uuuvvuTHEN uuyxyuFI ;nextsymbolPER ;uuyxyv.uuywyx:IF uuuwuy=uuuvuv +CAND feldtyp(feldnr(uuuwuu))=uuuvxzTHEN uuywzy(uuxwzu,1,"");uuyxuw(uuxwzu,1, +tidfeld);uuyxvu(uuxwzu,1,feldnr(uuuwuu));uuyyux(uuxwzu,TRUE );uuyyuz(uuxwzu,1 +);LEAVE setzeschluesselFI ;.uuywyz:uuywzy(uuxwzu,1,"");uuyxuw(uuxwzu,1,0); +uuyxvu(uuxwzu,1,0).uuyxyu:IF uuuwvwTHEN uuyxuzINCR 1ELSE uuuwuz:=uuuwvu+1; +uuuwvu:=pos(uuuwux,uuuvvu,uuuwuz);uuyxuz:=uuxyvu+int(subtext(uuuwux,uuuwuz, +uuuwvu-1))FI ;uuyxuuINCR 1.uuywyw:INT VAR uuyyzv:=getinr(uuxwzu),uuxyvu:= +getdnr(uuxwzu),uuyxuz;IF uuyyzv=0THEN uuuwvw:=TRUE ;uuyxuz:=uuxyvu+1ELSE +uuuwux:=zugriff(uuyyzv);uuuwvu:=pos(uuuwux,uuuvvu);uuyxuz:=int(subtext(uuuwux +,1,uuuwvu-1))+uuxyvu;uuuwvw:=FALSE FI .uuyzwy:IF uuuwvwTHEN (uuyxuz-uuxyvu)= +anzkey(uuxyvu)ELSE uuuwvu=length(uuuwux)FI .uuywyy:INT VAR uuyxuu:=1;IF +uuuwuy=uuuvuuTHEN uuyxuu:=0FI .uuyxyv:uuyyux(uuxwzu,uuyzwyCAND (uuyxuu>0)); +uuyyuz(uuxwzu,uuyxuu).ENDPROC setzeschluessel;PROC uuyxvu(INT CONST uuxwzu, +uuzuux,uuyxuz):uuuyuy.uuuuxx[uuxwzu].uuuuyx[uuzuux].uuuuxy:=uuyxuzENDPROC +uuyxvu;PROC uuyxuw(INT CONST uuxwzu,uuzuux,uuyxuz):uuuyuy.uuuuxx[uuxwzu]. +uuuuyx[uuzuux].uuuuxz:=uuyxuzENDPROC uuyxuw;INT PROC getswvonfld(INT CONST +uuxwzu,uuzuux):uuuyuy.uuuuxx[uuxwzu].uuuuyx[uuzuux].uuuuxyENDPROC getswvonfld +;INT PROC getswnachfld(INT CONST uuxwzu,uuzuux):uuuyuy.uuuuxx[uuxwzu].uuuuyx[ +uuzuux].uuuuxzENDPROC getswnachfld;PROC uuywzy(INT CONST uuxwzu,uuzuux,TEXT +CONST uuzvwu):uuuyuy.uuuuxx[uuxwzu].uuuuyx[uuzuux].wert:=uuzvwuENDPROC uuywzy +;TEXT PROC getswfwert(INT CONST uuxwzu,uuzuux):uuuyuy.uuuuxx[uuxwzu].uuuuyx[ +uuzuux].wertENDPROC getswfwert;PROC uuyyux(INT CONST uuxwzu,BOOL CONST uuzvzv +):uuuyuy.uuuuxx[uuxwzu].uuuuyu:=uuzvzvENDPROC uuyyux;BOOL PROC +getswallefelder(INT CONST uuxwzu):uuuyuy.uuuuxx[uuxwzu].uuuuyuENDPROC +getswallefelder;PROC uuyyuz(INT CONST uuxwzu,uuzwvz):uuuyuy.uuuuxx[uuxwzu]. +uuuuyv:=uuzwvzENDPROC uuyyuz;INT PROC getswanzfld(INT CONST uuxwzu):uuuyuy. +uuuuxx[uuxwzu].uuuuyvENDPROC getswanzfld;PROC query(TEXT CONST uuzwyw):INT +VAR uuuzuz;uuuyzz(uuzwyw);FOR uuuzuzFROM 1UPTO getanzahlverbundeREP +setzeschluessel(uuuzuz)PER ;listeschluesselENDPROC query;OP :=( +SCHLUESSELWERTE VAR uuuwww,SCHLUESSELWERTE CONST uuuwwx):CONCR (uuuwww):= +CONCR (uuuwwx)ENDOP :=;OP :=(SWERT VAR uuuwww,SWERT CONST uuuwwx):CONCR ( +uuuwww):=CONCR (uuuwwx)ENDOP :=;OP :=(SCHLUESSEL VAR uuuwww,SCHLUESSEL CONST +uuuwwx):CONCR (uuuwww):=CONCR (uuuwwx)ENDOP :=;PROC listeschluessel:IF NOT +mittestausgabenTHEN LEAVE listeschluesselFI ;INT VAR uuuzuz,uuywuv;FOR uuuzuz +FROM 1UPTO getanzahlverbundeREP noteline;note("Verbund : "+text(uuuzuz)); +noteline;note("=============");noteline;noteline;note("ANZAHL FLD: "+text( +getswanzfld(uuuzuz)));noteline;note("ALLE : "+uuzxxx);noteline;noteline; +FOR uuywuvFROM 1UPTO getswanzfld(uuuzuz)REP note(" VON : "+text(getswvonfld +(uuuzuz,uuywuv)));noteline;note(" NACH: "+text(getswnachfld(uuuzuz,uuywuv)) +);noteline;note(" WERT: "+getswfwert(uuuzuz,uuywuv));noteline;PER PER . +uuzxxx:IF getswallefelder(uuuzuz)THEN "vollständiger Schlüssel"ELSE +"unvollständiger Schlüssel"FI .ENDPROC listeschluessel;BOOL PROC +selektionerfuellt(INT CONST uuzyux):werteselektionaus(uuuyuy.uuuuxv,uuzyux) +ENDPROC selektionerfuellt;PROC uuuxyz(SCHLUESSEL VAR uuzyvx):FOR uuuwvyFROM 1 +UPTO uuuuwvREP FOR uuuwvzFROM 1UPTO uuuuywREP uuzyvx[uuuwvy].uuuuyx[uuuwvz]. +wert:=""PER PER ENDPROC uuuxyz;ENDPACKET queryparser;#$FI # + diff --git a/app/schulis/2.2.1/src/6.db ref.sc b/app/schulis/2.2.1/src/6.db ref.sc new file mode 100644 index 0000000..58b059b --- /dev/null +++ b/app/schulis/2.2.1/src/6.db ref.sc @@ -0,0 +1,20 @@ +#$IF mitinternerqueryTHEN #PACKET queryrefDEFINES putref,getreftext, +anzahlrefs,listerefs,clearrefs:LET uuuuuv=50,uuuuuw=1,uuuuux=2;LET +REFELEMENT =ROW 2TEXT ;TYPE REFINEMENT =STRUCT (INT uuuuuy,ROW uuuuuv +REFELEMENT uuuuvu);REFINEMENT VAR uuuuvv;PROC putref(TEXT CONST uuuuvw,uuuuvx +):INT VAR uuuuvy;FOR uuuuvyFROM 1UPTO uuuuvv.uuuuuyREP IF uuuuvv.uuuuvu[ +uuuuvy][uuuuuw]=uuuuvwTHEN uuuuvv.uuuuvu[uuuuvy][uuuuuw]:=uuuuvx;LEAVE putref +FI PER ;IF uuuuvv.uuuuuy=uuuuuvTHEN errorstop("Zuviele Refinements!")FI ; +uuuuvv.uuuuuyINCR 1;uuuuvv.uuuuvu[uuuuvv.uuuuuy][uuuuuw]:=uuuuvw;uuuuvv. +uuuuvu[uuuuvv.uuuuuy][uuuuux]:=uuuuvxENDPROC putref;TEXT PROC getreftext( +TEXT CONST uuuuvw):INT VAR uuuuvy;FOR uuuuvyFROM 1UPTO uuuuvv.uuuuuyREP IF +uuuuvv.uuuuvu[uuuuvy][uuuuuw]=uuuuvwTHEN LEAVE getreftextWITH uuuuvv.uuuuvu[ +uuuuvy][uuuuux]FI PER ;uuuuvwENDPROC getreftext;PROC clearrefs:INT VAR uuuuvy +;FOR uuuuvyFROM 1UPTO uuuuvv.uuuuuyREP uuuuvv.uuuuvu[uuuuvy][uuuuuw]:=""; +uuuuvv.uuuuvu[uuuuvy][uuuuux]:=""PER ;uuuuvv.uuuuuy:=0ENDPROC clearrefs;INT +PROC anzahlrefs:uuuuvv.uuuuuyENDPROC anzahlrefs;PROC listerefs:INT VAR uuuwuu +;note("Liste der Refinements :");noteline;note("======================="); +noteline;noteline;FOR uuuwuuFROM 1UPTO anzahlrefsREP note(text(uuuuvv.uuuuvu[ +uuuwuu][uuuuuw],30)+":"+uuuuvv.uuuuvu[uuuwuu][uuuuux]);notelinePER ENDPROC +listerefs;ENDPACKET queryref;#$FI # + diff --git a/app/schulis/2.2.1/src/6.db sel.sc b/app/schulis/2.2.1/src/6.db sel.sc new file mode 100644 index 0000000..4577620 --- /dev/null +++ b/app/schulis/2.2.1/src/6.db sel.sc @@ -0,0 +1,127 @@ +PACKET queryselektionDEFINES SELEKTION ,#putoptyp,putrechts,putlinks, +putselwert,#optyp,rechts,links,selwert,fnrlinks,fnrrechts,#allocselelement,# +:=,checkselektion,baueselektionauf,werteselektionaus,mittestausgaben, +initselektionen,initsel,initialisiereselektion,lex,lexon,lexoff:LET uuuuuv=0, +uuuuuw=1,uuuuux=2,uuuuuy=6,uuuuuz=7,uuuuvu=8,uuuuvv=9,#uuuuvw=1,uuuuvx=3,# +uuuuvy=2,uuuuvz=4,uuuuwu=5,uuuuwv=10,uuuuww=11,uuuuwx=12,uuuuwy=13,uuuuwz=14, +uuuuxu=15,uuuuxv=16,uuuuxw=17,uuuuxx=18,uuuuxy=19,uuuuxz=20,uuuuyu=30,uuuuyv= +73,uuuuyw=82,uuuuyx=68,uuuuyy=84;TYPE NODE =STRUCT (INT uuuuyz,uuuuzu,uuuuzv, +TEXT selwert);TYPE SELEKTION =STRUCT (INT uuuuzx,ROW uuuuyuNODE exp);INT VAR +uuuuzz,uuuvuu,uuuvuv;REAL VAR uuuvuw,uuuvux;TEXT VAR uuuvuy,uuuvuz;INT VAR +uuuvvu;TEXT VAR uuuvvv:="";BOOL VAR uuuvvw:=FALSE ,lexsort:=FALSE ;BOOL PROC +lex:lexsortENDPROC lex;PROC lexon:lexsort:=TRUE ENDPROC lexon;PROC lexoff: +lexsort:=FALSE ENDPROC lexoff;PROC mittestausgaben(BOOL CONST uuuvwy):uuuvvw +:=uuuvwyENDPROC mittestausgaben;BOOL PROC mittestausgaben:uuuvvwENDPROC +mittestausgaben;OP :=(NODE VAR uuuvxz,NODE CONST uuuvyu):CONCR (uuuvxz):= +CONCR (uuuvyu)ENDOP :=;OP :=(SELEKTION VAR uuuvxz,SELEKTION CONST uuuvyu): +CONCR (uuuvxz):=CONCR (uuuvyu)ENDOP :=;PROC initsel(SELEKTION VAR uuuvzw): +uuuvzw.uuuuzx:=0ENDPROC initsel;PROC initselektionen(SELEKTION VAR uuuwuv): +INT VAR uuuwuw;FOR uuuwuwFROM 1UPTO uuuuyuREP uuuwuv.exp[uuuwuw].selwert:="" +PER ENDPROC initselektionen;PROC initialisiereselektion(SELEKTION VAR uuuvzw) +:initsel(uuuvzw);initselektionen(uuuvzw)ENDPROC initialisiereselektion;PROC +uuuwwy(SELEKTION VAR uuuvzw,INT CONST uuuwxu):uuuvzw.exp[uuuwxu].uuuuyz:= +uuuuxy;uuuvzw.exp[uuuwxu].uuuuzv:=0;uuuvzw.exp[uuuwxu].uuuuzu:=0;uuuvzw.exp[ +uuuwxu].selwert:=""ENDPROC uuuwwy;INT PROC allocselelement(SELEKTION VAR +uuuvzw):uuuvzw.uuuuzxINCR 1;uuuwwy(uuuvzw,uuuvzw.uuuuzx);uuuvzw.uuuuzx +ENDPROC allocselelement;PROC putoptyp(SELEKTION VAR uuuvzw,INT CONST uuuxvy, +optyp):uuuvzw.exp[uuuxvy].uuuuyz:=optypENDPROC putoptyp;PROC uuuxwz( +SELEKTION VAR uuuvzw,INT CONST uuuxvy,uuuxxw):uuuvzw.exp[uuuxvy].uuuuzv:= +uuuxxwENDPROC uuuxwz;PROC putrechts(SELEKTION VAR uuuvzw,INT CONST uuuxvy, +uuuxyz):uuuvzw.exp[uuuxvy].uuuuzv:=uuuxyzENDPROC putrechts;PROC uuuxzz( +SELEKTION VAR uuuvzw,INT CONST uuuxvy,uuuxxw):uuuvzw.exp[uuuxvy].uuuuzu:= +uuuxxwENDPROC uuuxzz;PROC putlinks(SELEKTION VAR uuuvzw,INT CONST uuuxvy, +uuuwuw):uuuvzw.exp[uuuxvy].uuuuzu:=uuuwuwENDPROC putlinks;PROC putselwert( +SELEKTION VAR uuuvzw,INT CONST uuuxvy,TEXT CONST uuuyxw):uuuvzw.exp[uuuxvy]. +selwert:=uuuyxwENDPROC putselwert;INT PROC optyp(SELEKTION VAR uuuvzw,INT +CONST uuuxvy):uuuvzw.exp[uuuxvy].uuuuyzENDPROC optyp;INT PROC fnrrechts( +SELEKTION VAR uuuvzw,INT CONST uuuxvy):uuuvzw.exp[uuuxvy].uuuuzvENDPROC +fnrrechts;INT PROC fnrlinks(SELEKTION VAR uuuvzw,INT CONST uuuxvy):uuuvzw.exp +[uuuxvy].uuuuzuENDPROC fnrlinks;INT PROC rechts(SELEKTION CONST uuuvzw,INT +CONST uuuxvy):uuuvzw.exp[uuuxvy].uuuuzvENDPROC rechts;INT PROC links( +SELEKTION CONST uuuvzw,INT CONST uuuxvy):uuuvzw.exp[uuuxvy].uuuuzuENDPROC +links;TEXT PROC selwert(SELEKTION VAR uuuvzw,INT CONST uuuxvy):uuuvzw.exp[ +uuuxvy].selwertENDPROC selwert;INT PROC baueselektionauf(SELEKTION VAR uuuzzx +,TEXT CONST uuuzzy):IF compress(uuuzzy)<>""THEN scan(uuuzzy);uuvuuv(uuuzzx) +ELSE 0FI ENDPROC baueselektionauf;INT PROC uuvuuv(SELEKTION VAR uuuzzx):INT +VAR uuuwuw,uuvuvv;uuuwuw:=uuvuvx(uuuzzx);nextsymbol;IF uuvuvz=uuuuxxOR uuvuvz +=uuuuxvTHEN uuvuvv:=allocselelement(uuuzzx);putoptyp(uuuzzx,uuvuvv,uuvuvz); +putlinks(uuuzzx,uuvuvv,uuuwuw);putrechts(uuuzzx,uuvuvv,uuvuuv(uuuzzx));uuvuvv +ELSE uuuwuwFI ENDPROC uuvuuv;INT PROC uuvuvx(SELEKTION VAR uuuzzx):INT VAR +uuvvuu;nextsymbol;SELECT uuvuvzOF CASE uuuuuw:uuvvuu:=uuvuuv(uuuzzx);# +nextsymbol;#IF uuvuvz<>uuuuuxTHEN errorstop("Klammer zu fehlt! Gefunden: "+ +uuuvvv)FI ;CASE uuuuxw:uuvvuu:=allocselelement(uuuzzx);putoptyp(uuuzzx,uuvvuu +,uuvuvz);putlinks(uuuzzx,uuvvuu,uuvuvx(uuuzzx));CASE uuuuuy:CASE uuuuvu: +uuvvuu:=allocselelement(uuuzzx);uuvvyx;uuvvyy;nextsymbol;uuvvyzCASE uuuuvv: +uuvvuu:=allocselelement(uuuzzx);uuvvzy;uuvvzz;uuvwuuCASE uuuuuz:OTHERWISE : +errorstop("Falsches Symbol: "+uuuvvv+text(uuuvvu))ENDSELECT ;uuvvuu.uuvvyx: +nextsymbol;IF uuuvvu<>uuuuvzTHEN uuvwvw("Falsche Wertangabe")ELSE putselwert( +uuuzzx,uuvvuu,uuuvvv);nextsymbol;IF uuuvvu<>uuuuwuCAND uuuvvv<>">"THEN uuvwvw +(""">"" bei Wertangabe fehlt!")FI FI .uuvvzz:nextsymbol;IF uuuvvu<>uuuuwu +THEN uuvwvw("Falscher Operator: "+uuuvvv)FI ;putoptyp(uuuzzx,uuvvuu,uuvwyv). +uuvvyy:nextsymbol;IF (uuuvvu=uuuuwu)COR (uuuvvu=uuuuvyCAND uuuvvv="IN")THEN +putoptyp(uuuzzx,uuvvuu,uuvwyv)ELSE uuvwvw("Falscher Operator: "+uuuvvv)FI ;. +uuvvyz:uuuxwz(uuuzzx,uuvvuu,feldnr(uuuvvv)).uuvvzy:uuuxzz(uuuzzx,uuvvuu, +feldnr(uuuvvv)).uuvwuu:nextsymbol;IF uuvuvz=uuuuvuTHEN uuvvyxELSE uuvvyzFI . +ENDPROC uuvuvx;INT PROC uuvwyv:IF uuuvvv=">"THEN uuuuwzELIF uuuvvv="<"THEN +uuuuxuELIF uuuvvv="="THEN uuuuwvELIF uuuvvv=">="THEN uuuuwyELIF uuuvvv="<=" +THEN uuuuwxELIF uuuvvv="<>"THEN uuuuwwELIF uuuvvv="IN"THEN uuuuxzELSE uuuuxy +FI ENDPROC uuvwyv;PROC nextsymbol:nextsymbol(uuuvvv,uuuvvu)ENDPROC nextsymbol +;INT PROC uuvuvz:IF uuuvvv="("THEN uuuuuwELIF uuuvvv=")"THEN uuuuuxELIF +uuuvvv="NOT"OR uuuvvv="NICHT"THEN uuuuxwELIF uuuvvv="AND"OR uuuvvv="UND"THEN +uuuuxvELIF uuuvvv="OR"OR uuuvvv="ODER"THEN uuuuxxELIF uuuvvu=13THEN uuuuuy +ELIF uuuvvu=uuuuwuCAND uuuvvv="<"THEN uuuuvuELIF uuuvvu=uuuuvzTHEN uuuuvv +ELIF uuuvvu=7THEN uuuuuzELSE uuuuuvFI ENDPROC uuvuvz;PROC uuvwvw(TEXT CONST +uuvyyz):errorstop("FEHLERHAFTER AUSDRUCK: "+uuvyyz)ENDPROC uuvwvw;PROC +checkselektion(SELEKTION CONST uuuzzx):INT VAR uuvyzy,uuvyzz:=uuuzzx.uuuuzx; +note("Anzahl Knoten: "+text(text(uuvyzz),5));noteline;noteline;noteline;FOR +uuvyzyFROM 1UPTO uuvyzzREP note("Knoten: "+text(uuvyzy));noteline;note( +" Operat: "+uuvzvu(uuuzzx.exp[uuvyzy]));noteline;note(" links : "+ +text(links(uuuzzx,uuvyzy)));noteline;note(" rechts: "+text(rechts(uuuzzx, +uuvyzy)));noteline;note(" Wert : "+">"+uuuzzx.exp[uuvyzy].selwert+"<"); +notelinePER ENDPROC checkselektion;TEXT PROC uuvzvu(NODE CONST uuuvzw): +SELECT uuuvzw.uuuuyzOF CASE uuuuwv:"="CASE uuuuww:"<>"CASE uuuuwx:"<="CASE +uuuuwy:">="CASE uuuuwz:">"CASE uuuuxu:"<"CASE uuuuxw:"NOT"CASE uuuuxv:"AND" +CASE uuuuxx:"OR"CASE uuuuxz:"IN"OTHERWISE :"UNDEFINED OPERATOR"ENDSELECT +ENDPROC uuvzvu;BOOL PROC werteselektionaus(SELEKTION VAR uuuvzw,INT CONST +uuvyzy):IF uuvyzy=0THEN LEAVE werteselektionausWITH TRUE FI ;uuwuux;SELECT +uuwuuyOF CASE uuuuxx:uuwuvuOR uuwuvvCASE uuuuxv:uuwuvuAND uuwuvvCASE uuuuxw: +NOT uuwuvuCASE uuuuwx:uuwuwwCASE uuuuwy:uuwuwyCASE uuuuww:uuwuxuCASE uuuuwv: +uuwuxwCASE uuuuxu:uuwuxyCASE uuuuwz:uuwuyuCASE uuuuxz:uuwuywOTHERWISE :FALSE +ENDSELECT .uuwuvu:werteselektionaus(uuuvzw,links(uuuvzw,uuvyzy)).uuwuvv: +werteselektionaus(uuuvzw,rechts(uuuvzw,uuvyzy)).uuwuux:IF uuwuuy=uuuuxxCOR +uuwuuy=uuuuxvCOR uuwuuy=uuuuxwTHEN LEAVE uuwuuxELSE uuwvvz;uuwvwuFI .uuwvvz: +IF fnrlinks(uuuvzw,uuvyzy)=0THEN SELECT uuwvwzOF CASE uuuuyv:uuuvuu:=int( +selwert(uuuvzw,uuvyzy));uuuuzz:=uuuuyvCASE uuuuyw:uuuvuw:=real(selwert(uuuvzw +,uuvyzy));uuuuzz:=uuuuywCASE uuuuyx:uuuvuw:=date(selwert(uuuvzw,uuvyzy)); +uuuuzz:=uuuuywOTHERWISE :uuuvuy:=selwert(uuuvzw,uuvyzy);uuuuzz:=uuuuyy +ENDSELECT ELSE SELECT feldtyp(fnrlinks(uuuvzw,uuvyzy))OF CASE uuuuyv:uuuvuu:= +intwert(fnrlinks(uuuvzw,uuvyzy));uuuuzz:=uuuuyvCASE uuuuyw:uuuvuw:=realwert( +fnrlinks(uuuvzw,uuvyzy));uuuuzz:=uuuuywCASE uuuuyx:uuuvuw:=date(datumwert( +fnrlinks(uuuvzw,uuvyzy)));uuuuzz:=uuuuywOTHERWISE :uuuvuy:=wert(fnrlinks( +uuuvzw,uuvyzy));uuuuzz:=uuuuyyENDSELECT FI .uuwvwu:IF fnrrechts(uuuvzw,uuvyzy +)=0THEN SELECT uuwxvvOF CASE uuuuyv:uuuvuv:=int(selwert(uuuvzw,uuvyzy))CASE +uuuuyw:uuuvux:=real(selwert(uuuvzw,uuvyzy))CASE uuuuyx:uuuvux:=date(selwert( +uuuvzw,uuvyzy))OTHERWISE :uuuvuz:=selwert(uuuvzw,uuvyzy)ENDSELECT ELSE +SELECT feldtyp(fnrrechts(uuuvzw,uuvyzy))OF CASE uuuuyv:uuuvuv:=intwert( +fnrrechts(uuuvzw,uuvyzy))CASE uuuuyw:uuuvux:=realwert(fnrrechts(uuuvzw,uuvyzy +))CASE uuuuyx:uuuvux:=date(datumwert(fnrrechts(uuuvzw,uuvyzy)))OTHERWISE : +uuuvuz:=wert(fnrrechts(uuuvzw,uuvyzy))ENDSELECT FI .uuwxvv:IF fnrlinks(uuuvzw +,uuvyzy)=0THEN uuuuyyELSE feldtyp(fnrlinks(uuuvzw,uuvyzy))FI .uuwvwz:IF +fnrrechts(uuuvzw,uuvyzy)=0THEN uuuuyyELSE feldtyp(fnrrechts(uuuvzw,uuvyzy)) +FI .uuwuuy:optyp(uuuvzw,uuvyzy).ENDPROC werteselektionaus;BOOL PROC uuwuww: +SELECT uuuuzzOF CASE uuuuyv:uuuvuu<=uuuvuvCASE uuuuyw:uuuvuw<=uuuvux +OTHERWISE :uuuvuy<=uuuvuzENDSELECT ENDPROC uuwuww;BOOL PROC uuwuwy:SELECT +uuuuzzOF CASE uuuuyv:uuuvuu>=uuuvuvCASE uuuuyw:uuuvuw>=uuuvuxOTHERWISE : +uuuvuy>=uuuvuzENDSELECT ENDPROC uuwuwy;BOOL PROC uuwuxy:SELECT uuuuzzOF CASE +uuuuyv:uuuvuu<uuuvuvCASE uuuuyw:uuuvuw<uuuvuxOTHERWISE :IF lexsortTHEN NOT ( +uuuvuyLEXGREATEREQUAL uuuvuz)ELSE uuuvuy<uuuvuzFI ENDSELECT ENDPROC uuwuxy; +BOOL PROC uuwuyu:SELECT uuuuzzOF CASE uuuuyv:uuuvuu>uuuvuvCASE uuuuyw:uuuvuw> +uuuvuxOTHERWISE :IF lexsortTHEN uuuvuyLEXGREATER uuuvuzELSE uuuvuy>uuuvuzFI +ENDSELECT ENDPROC uuwuyu;BOOL PROC uuwuxw:SELECT uuuuzzOF CASE uuuuyv:uuuvuu= +uuuvuvCASE uuuuyw:uuuvuw=uuuvuxOTHERWISE :IF lexsortTHEN uuuvuyLEXEQUAL +uuuvuzELSE uuuvuy=uuuvuzFI ENDSELECT ENDPROC uuwuxw;BOOL PROC uuwuxu:SELECT +uuuuzzOF CASE uuuuyv:uuuvuu<>uuuvuvCASE uuuuyw:uuuvuw<>uuuvuxOTHERWISE :IF +lexsortTHEN NOT (uuuvuyLEXEQUAL uuuvuz)ELSE uuuvuy<>uuuvuzFI ENDSELECT +ENDPROC uuwuxu;BOOL PROC uuwuyw:IF uuuuzz=uuuuyyTHEN pos(uuuvuz,uuuvuy)>0 +ELSE FALSE FI ENDPROC uuwuyw;ENDPACKET queryselektion; + diff --git a/app/schulis/2.2.1/src/6.db snd query.sc b/app/schulis/2.2.1/src/6.db snd query.sc new file mode 100644 index 0000000..dbf9cf5 --- /dev/null +++ b/app/schulis/2.2.1/src/6.db snd query.sc @@ -0,0 +1,39 @@ +#$IF mitinternerqueryTHEN #PACKET dbsndqueryDEFINES auswertung, +auswertungfortsetzen,qsucc,endofscan,ordernewstack,puttiefennr,gettiefennr, +endqueryserver:LET uuuuuv=25,uuuuuw=0,uuuuux=1,uuuuuy=2,uuuuuz=2,uuuuvu=37, +uuuuvv=10,uuuuvw=39,uuuuvx=40,uuuuvy=41,uuuuvz=1;INT CONST endofscan:=8, +ordernewstack:=9;INT VAR uuuuwu,uuuuwv;DATASPACE VAR uuuuww;BOUND QUERY VAR +uuuuwx;BOUND TEXT VAR uuuuwy;ROW uuuuvvINT VAR uuuuxu;TYPE TUPEL =STRUCT ( +INT uuuuxv,uuuuxw,uuuuxx,TEXT uuuuxy);TYPE QUERYSTACK =STRUCT (INT uuuuxz, +TASK uuuuyu,ROW uuuuuvTUPEL uuuuyw);INT VAR uuuuyx:=getanzahltupel,uuuuyy; +TEXT VAR uuuuyz:="",uuuuzu:="";PROC endqueryserver:forget(uuuuww);uuuuww:= +nilspace;send(uuuuzy,uuuuvx,uuuuww)ENDPROC endqueryserver;TASK VAR uuuuzy; +BOUND QUERYSTACK VAR uuuvux;OP :=(TUPEL VAR uuuvuy,TUPEL CONST uuuvuz):CONCR +(uuuvuy):=CONCR (uuuvuz)ENDOP :=;OP :=(QUERYSTACK VAR uuuvuy,QUERYSTACK +CONST uuuvuz):CONCR (uuuvuy):=CONCR (uuuvuz)ENDOP :=;INT PROC gettiefennr( +INT CONST uuuvwv):IF uuuvwv=0THEN 0ELSE uuuuxu[uuuvwv]FI ENDPROC gettiefennr; +PROC puttiefennr(INT CONST uuuvwv,uuuvxw):uuuuxu[uuuvwv]:=uuuvxwENDPROC +puttiefennr;PROC auswertung(TEXT CONST uuuvyv):uuuuyy:=0;query(uuuvyv);IF +queryart=uuuuvzTHEN uuuvyzELSE uuuvzuFI .uuuvyz:uuuvzw;forget(uuuuww);uuuuww +:=nilspace;uuuuwx:=uuuuww;getquery(uuuuwx);call(/name(1),uuuuvu,uuuuww,uuuuwu +);uuuwuz;uuuvux:=uuuuww;uuuuzy:=uuuvux.uuuuyu.uuuvzu:forget(uuuuww);uuuuww:= +old(uuuvyv);call(/name(1),uuuuvy,uuuuww,uuuuwu);uuuwuz.ENDPROC auswertung; +PROC uuuvzw:uuuuwv:=0;uuuwxx(1)ENDPROC uuuvzw;PROC uuuwxx(INT CONST uuuwyu): +uuuuwvINCR 1;puttiefennr(uuuwyu,uuuuwv);IF getsohnverb(uuuwyu)<>uuuuuwTHEN +uuuwxx(getsohnverb(uuuwyu))FI ;IF getbruderverb(uuuwyu)<>uuuuuwTHEN uuuwxx( +getbruderverb(uuuwyu))FI ENDPROC uuuwxx;PROC auswertung(QUERY VAR uuuvyv): +queryart(uuuuvz);uuuvzw;uuuuyy:=0;forget(uuuuww);uuuuww:=nilspace;uuuuwx:= +uuuuww;uuuuwx:=uuuvyv;call(/name(1),uuuuvu,uuuuww,uuuuwu);uuuwuz;uuuvux:= +uuuuww;uuuuzy:=uuuvux.uuuuyuENDPROC auswertung;PROC auswertungfortsetzen: +uuuuyy:=0;forget(uuuuww);uuuuww:=nilspace;call(uuuuzy,uuuuvw,uuuuww,uuuuwu); +uuuwuz;uuuvux:=uuuuwwENDPROC auswertungfortsetzen;PROC uuuwuz:IF uuuuwu= +uuuuuzTHEN dbstatus(dberror);uuuuwy:=uuuuww;forget(uuuuww);errorstop(uuuuwy) +ELSE dbstatus(uuuuwu)FI ENDPROC uuuwuz;PROC qsucc(INT VAR uuuwyu,uuuyuz): +uuuuyyINCR 1;IF uuuuyy>uuuvux.uuuuxzTHEN uuuwyu:=0;uuuyuz:=0;dbstatus( +endoffile)ELSE uuuyuz:=uuuvux.uuuuyw[uuuuyy].uuuuxw;#uuuywz(uuuvux.uuuuyw[ +uuuuyy].uuuuxy[uuuuux]);uuuyxz(uuuvux.uuuuyw[uuuuyy].uuuuxy[uuuuuy]);# +parsetupel(uuuyuz,uuuyzu);IF uuuyzvTHEN dbstatus(endofscan)ELSE dbstatus(ok) +FI FI .uuuyzu:uuuvux.uuuuyw[uuuuyy].uuuuxy.uuuyzv:uuuwyu:=uuuvux.uuuuyw[ +uuuuyy].uuuuxv;IF uuuwyu<0THEN uuuwyu:=abs(uuuwyu);TRUE ELSE FALSE FI . +ENDPROC qsucc;ENDPACKET dbsndquery;#$FI # + diff --git a/app/schulis/2.2.1/src/6.ida.auswahl b/app/schulis/2.2.1/src/6.ida.auswahl new file mode 100644 index 0000000..be92224 --- /dev/null +++ b/app/schulis/2.2.1/src/6.ida.auswahl @@ -0,0 +1,23 @@ +PACKET idaauswahlDEFINES idaauswahleinlesenundbearbeiten,idaauswahleinlesen, +pruefungidaauswahl:LET niltext="";LET anzahlzeilen=18,erstesausgabefeld=2, +vorwaerts=3;INT VAR anfang,ende,lv;TAG VAR maske;PROC +idaauswahleinlesenundbearbeiten(INT CONST nr):BOOL VAR listeexistiertnicht:= +FALSE ;anfang:=(nr-1)*10+1;ende:=anfang+9;putintwert(fnridanummer,anfang); +objektlistestarten(dnrida,text(anfang),fnridanummer,TRUE ,listeexistiertnicht +);IF listeexistiertnichtOR NOT pruefungidaauswahlTHEN return(1)ELSE +datensatzlistenausgabe(PROC (INT CONST )erfassungdruckausgabe,TRUE ,BOOL +PROC pruefungidaauswahl);FI END PROC idaauswahleinlesenundbearbeiten;PROC +idaauswahleinlesen:feldersperren;infeld(erstesausgabefeld);standardnproc;END +PROC idaauswahleinlesen;BOOL PROC pruefungidaauswahl:intwert(fnridanummer)>= +anfangCAND intwert(fnridanummer)<=endeEND PROC pruefungidaauswahl;PROC +datensatzlistenausgabe(PROC (INT CONST )erfassungspeziell,BOOL CONST scanja, +BOOL PROC pruefungspeziell):BOOL VAR rs:=ruecksprung;initobli; +listenmaskeholenundausgeben;inlisteblaettern(PROC erfassungspeziell,vorwaerts +,TRUE ,scanja,BOOL PROC pruefungspeziell);idaauswahleinlesenENDPROC +datensatzlistenausgabe;PROC listenmaskeholenundausgeben:LET listenmaskenname= +"mu objektliste";initmaske(maske,listenmaskenname);setzeaktuellemaske(maske); +standardstartproc(listenmaskenname)END PROC listenmaskeholenundausgeben;PROC +feldersperren:FOR lvFROM 1UPTO anzahlzeilenREP IF standardmaskenfeld(lv*2+1)= +niltextTHEN protect(maske,lv*2,TRUE )FI PER END PROC feldersperren;END +PACKET idaauswahl; + diff --git a/app/schulis/2.2.1/src/6.ida.check b/app/schulis/2.2.1/src/6.ida.check new file mode 100644 index 0000000..34d7616 --- /dev/null +++ b/app/schulis/2.2.1/src/6.ida.check @@ -0,0 +1,162 @@ +PACKET ispidacheckDEFINES fehlerinformular,formfehlermelden, +fehlerindruckvariable,ausdruckwardruckvariable:LET okkenner="k",kennnormal= +"+",kennauffaellig="#",linkeklammer="<",rechteklammer=">";FILE VAR formtext; +TEXT VAR zeile:="",blockstruktur:="",zugriffsreihenfolge:="";INT VAR errormld +:=0,errorline:=0;BOOL VAR fehlerfrei;LET mldplatzhalter=230,mldschachtelung= +231,mldtextkosmetik=232,mldnichtverfuegbar=233,mldregelunbekannt=234, +mldvarunbekannt=235,mldfeldunbekannt=236,mlddateiunbekannt=237, +mldmussleitobjekt=238,laengeblockkey=6,kzkosmetik="#";LET mldkeinevar=239, +mldvarfehler=240,mldkeinbegrenzer=241,mldtypkonflikt=242,mldkeinezeichenkette +=243,mldrestunbekannt=244,mldklammerfehlt=245;LET parametergrenze="%", +parametertrennzeichen="#",otherwise="*",textbegrenzer="""";BOOL VAR +wardruckvar:=TRUE ;PROC fehlersetzen(INT CONST nr):errormld:=nr;errorline:= +max(lineno(formtext)-1,1);fehlerfrei:=FALSE ;ENDPROC fehlersetzen;PROC +formfehlermelden:TEXT VAR zusatz:=" in Zeile ";IF errormld>0THEN zusatzCAT +text(errorline);standardmeldung(errormld,zusatz+kennnormal+" <CR> "+ +kennauffaellig);pause;FI ;errormld:=0ENDPROC formfehlermelden;PROC +zugriffmerken(INT CONST objklasse):INT CONST dnr:=dateinr(getobjektklasse( +objklasse));IF dnr=0THEN fehlersetzen(mlddateiunbekannt)ELSE +zugriffsreihenfolgeCAT "!"+text(dnr)+"!"FI ENDPROC zugriffmerken;BOOL PROC +dateischonimzugriff(INT CONST datei):pos(zugriffsreihenfolge,"!"+text(datei)+ +"!")>0ENDPROC dateischonimzugriff;TEXT PROC blockkey(INT CONST objklasse, +regel):"!"+text(objklasse,2)+text(regel,2)+"!"ENDPROC blockkey;BOOL PROC +blockschliessen(INT CONST objklasse,regel):INT CONST p:=pos(blockstruktur, +blockkey(objklasse,regel));IF p>0CAND fehlerfreiTHEN +pruefeobregelmehrfachauftritt;IF fehlerfreiTHEN pruefeobrichtiggeklammertFI +FI ;p>0.pruefeobregelmehrfachauftritt:IF pos(subtext(blockstruktur,p+ +laengeblockkey),blockkey(objklasse,regel))>0THEN fehlersetzen(mldschachtelung +)FI .pruefeobrichtiggeklammert:TEXT VAR bs:=subtext(blockstruktur,p+ +laengeblockkey),kr:="";INT VAR pp;WHILE length(bs)>1REP kr:=text(bs, +laengeblockkey);bs:=subtext(bs,laengeblockkey+1);pp:=pos(bs,kr);IF pp=0THEN +fehlersetzen(mldschachtelung);LEAVE pruefeobrichtiggeklammertELSE change(bs, +pp,pp+laengeblockkey-1,"")FI PER .ENDPROC blockschliessen;PROC +pruefeaufdisjunkteobjektklassen(INT CONST objkl):TEXT VAR bs:=blockstruktur, +kr:="";TEXT CONST objklkey:="!"+text(objkl,2);INT VAR p:=pos(bs,objklkey); +WHILE p>0REP kr:=subtext(bs,p,p+laengeblockkey-1);change(bs,p,p+ +laengeblockkey-1,"");p:=pos(bs,kr);IF p=0THEN fehlersetzen(mldschachtelung); +LEAVE pruefeaufdisjunkteobjektklassenELSE change(bs,p,p+laengeblockkey-1,""); +p:=pos(bs,objklkey)FI PER ENDPROC pruefeaufdisjunkteobjektklassen;PROC +pruefeobverbundfelderverfuegbar(INT CONST regelnummer):INT VAR i,fnr,datei; +TEXT VAR vglwert:="";FOR iFROM 1UPTO getanzahlregelfelder(regelnummer)REP +vglwert:=getvergleichswert(regelnummer,i);IF feldnameTHEN fnr:=feldnr(vglwert +);IF fnr=0THEN fehlersetzen(mldfeldunbekannt);LEAVE +pruefeobverbundfelderverfuegbarFI ;datei:=dateinrzufeld(fnr);IF NOT +dateischonimzugriff(datei)THEN fehlersetzen(mldnichtverfuegbar);LEAVE +pruefeobverbundfelderverfuegbarFI FI PER .feldname:(vglwertSUB 1)<>"""". +ENDPROC pruefeobverbundfelderverfuegbar;PROC pruefeobdatenbereitsverfuegbar( +TEXT CONST ausdruck):LET parametergrenze="%";TEXT VAR evtlfeldname:=ausdruck; +INT VAR fnr,dnr;IF pos(evtlfeldname,parametergrenze)>0THEN evtlfeldname:=text +(evtlfeldname,pos(evtlfeldname,parametergrenze)-1);FI ;fnr:=feldnr( +evtlfeldname);IF fnr>0THEN dnr:=dateinrzufeld(fnr);IF NOT dateischonimzugriff +(dnr)THEN fehlersetzen(mldnichtverfuegbar);FI FI ENDPROC +pruefeobdatenbereitsverfuegbar;PROC blockkeymerken(INT CONST objklasse,regel) +:IF blockstruktur=""CAND objklasse<>1CAND fehlerfreiTHEN fehlersetzen( +mldmussleitobjekt)ELSE blockstrukturCAT blockkey(objklasse,regel);FI ENDPROC +blockkeymerken;BOOL PROC textkommando(TEXT CONST ausdruck):TEXT VAR parameter +:="";IF pos("!page!head!bottom!end!","!"+ausdruck+"!")>0THEN LEAVE +textkommandoWITH TRUE FI ;IF pos(ausdruck,"on")=1THEN parameter:=compress( +subtext(ausdruck,3));pruefeparameterELIF pos(ausdruck,"off")=1THEN parameter +:=compress(subtext(ausdruck,4));pruefeparameterELSE FALSE FI .pruefeparameter +:IF text(parameter,2)<>"("""COR subtext(parameter,length(parameter)-1)<>""")" +THEN LEAVE pruefeparameterWITH FALSE FI ;parameter:=subtext(parameter,3, +length(parameter)-2);pos("!bold!b!underline!u!","!"+parameter+"!")>0.ENDPROC +textkommando;PROC zeileueberpruefen(TEXT CONST zeile):TEXT VAR textzeile:= +zeile,ausdruck:="";INT VAR vonp,bisp,stcodenr,ausglaenge;BOOL VAR rbuendig, +druckvar;IF fehlerfreiTHEN druckvariablenpruefen;textkosmetikpruefenFI . +druckvariablenpruefen:vonp:=pos(textzeile,linkeklammer);WHILE vonp>0REP bisp +:=pos(textzeile,rechteklammer,vonp+1);IF bisp=0THEN fehlersetzen( +mldplatzhalter);LEAVE zeileueberpruefenFI ;disablestop;stcodenr:=int(subtext( +textzeile,vonp+1,bisp-1));clearerror;enablestop;getsteuercode(stcodenr, +ausdruck,ausglaenge,rbuendig,druckvar);IF ausdruck=""COR NOT lastconversionok +THEN fehlersetzen(mldvarunbekannt);LEAVE zeileueberpruefenELSE +pruefeobdatenbereitsverfuegbar(ausdruck);FI ;change(textzeile,vonp,bisp,""); +vonp:=pos(textzeile,linkeklammer);PER .textkosmetikpruefen:textzeile:=zeile; +vonp:=pos(textzeile,kzkosmetik);WHILE vonp>0REP bisp:=pos(textzeile, +kzkosmetik,vonp+1);IF bisp=0THEN fehlersetzen(mldtextkosmetik);LEAVE +zeileueberpruefenFI ;ausdruck:=compress(subtext(textzeile,vonp+1,bisp-1));IF +NOT textkommando(ausdruck)THEN fehlersetzen(mldtextkosmetik);LEAVE +zeileueberpruefenFI ;change(textzeile,vonp,bisp,"");vonp:=pos(textzeile, +kzkosmetik);PER .ENDPROC zeileueberpruefen;PROC bearbeiteblock:INT VAR p,bis, +objklasse,regel;BOOL VAR eoformtext:=FALSE ;WHILE NOT eoformtextCAND +fehlerfreiREP IF zugriffsregelgefundenTHEN okundregelbestimmen;IF +blockschliessen(objklasse,regel)THEN blockkeymerken(objklasse,regel);LEAVE +bearbeiteblockELSE pruefeaufdisjunkteobjektklassen(objklasse);IF NOT +fehlerfreiTHEN LEAVE bearbeiteblockFI ;IF objklasse>1CAND fehlerfreiTHEN +pruefeobverbundfelderverfuegbar(getregelnummer(objklasse,regel));FI ; +blockkeymerken(objklasse,regel);zugriffmerken(objklasse);IF NOT fehlerfrei +THEN LEAVE bearbeiteblockFI ;IF compress(zeile)=""CAND NOT eoformtextTHEN +getline(formtext,zeile);FI ;bearbeiteblockFI ;ELSE zeileueberpruefen(zeile) +FI ;IF eof(formtext)THEN eoformtext:=TRUE ELSE getline(formtext,zeile);FI ; +PER ;.zugriffsregelgefunden:p:=pos(zeile,linkeklammer+okkenner);p>0. +okundregelbestimmen:bis:=p+2;objklasse:=int(zeileSUB bis);bisINCR 1;IF +istziffer(zeileSUB bis)THEN objklasse:=objklasse*10+int(zeileSUB bis);bis +INCR 1;FI ;IF objklasse<1COR objklasse>10THEN fehlersetzen(mldplatzhalter); +LEAVE bearbeiteblockFI ;IF (zeileSUB bis)=rechteklammerTHEN regel:=1ELSE +regel:=int(zeileSUB bis+1);bisINCR 2;IF istziffer(zeileSUB bis)THEN regel:= +regel*10+int(zeileSUB bis);bisINCR 1;FI ;FI ;change(zeile,p,bis,"");IF +objklasse>1CAND getregelnummer(objklasse,regel)=0THEN fehlersetzen( +mldregelunbekannt);LEAVE bearbeiteblockFI ;.ENDPROC bearbeiteblock;BOOL PROC +fehlerinformular:#openformular(nr);#fehlerfrei:=TRUE ;stopbeifalschemnamen( +FALSE );blockstruktur:="";zugriffsreihenfolge:="";zeile:="";errormld:=0; +errorline:=0;formtext:=sequentialfile(input,getformtextname);IF NOT eof( +formtext)THEN getline(formtext,zeile)FI ;IF eof(formtext)CAND zeile=""THEN +ELSE bearbeiteblockFI ;IF fehlerfreiCAND length(blockstruktur)<= +laengeblockkeyTHEN fehlersetzen(mldschachtelung)FI ;stopbeifalschemnamen( +TRUE );NOT fehlerfreiENDPROC fehlerinformular;BOOL PROC istziffer(TEXT CONST +t):pos("0123456789",t)>0END PROC istziffer;BOOL PROC istsonderfunktion(TEXT +CONST ausdruck):TEXT CONST liste:="#tagesdatum#tag#monat#jahr#zeit#tt#mm#jj#" +;pos(liste,"#"+ausdruck+"#")>0ENDPROC istsonderfunktion;BOOL PROC istdbfeld( +TEXT CONST feldname):feldnr(feldname)>0ENDPROC istdbfeld;BOOL PROC +falscherdenotertyp(TEXT CONST vglswert,INT CONST aktfeldtyp):BOOL VAR fehler +:=FALSE ;INT VAR i;REAL VAR r;disablestop;IF aktfeldtyp=intfeldTHEN i:=int( +vglswert);fehler:=NOT lastconversionokCOR iserrorELIF aktfeldtyp=realfeld +THEN r:=real(vglswert);fehler:=NOT lastconversionokCOR iserrorELIF aktfeldtyp +=datumfeldTHEN r:=date(vglswert);fehler:=iserrorFI ;clearerror;enablestop; +fehlerEND PROC falscherdenotertyp;BOOL PROC ausdruckwardruckvariable: +wardruckvarENDPROC ausdruckwardruckvariable;BOOL PROC fehlerindruckvariable( +TEXT CONST origausdruck):BOOL VAR fehlerhaft:=FALSE ;INT VAR p;TEXT VAR +ausdruck:=compress(origausdruck),feldname:="";stopbeifalschemnamen(FALSE ); +wardruckvar:=TRUE ;liesfeldname;IF NOT istdbfeld(feldname)THEN IF +istsonderfunktion(feldname)THEN IF ausdruck=""THEN wardruckvar:=FALSE ELSE +standardmeldung(mldvarfehler,ausdruck);fehlerhaft:=TRUE ;FI ELSE +standardmeldung(mldkeinevar,feldname);fehlerhaft:=TRUE ;FI ;leaveprocFI ;IF +ausdruck>""THEN fehlerhaft:=zusammengesetzterausdruck(feldname,ausdruck)FI ; +stopbeifalschemnamen(TRUE );fehlerhaft.liesfeldname:p:=pos(ausdruck, +parametergrenze);IF p>0THEN feldname:=text(ausdruck,p-1);ausdruck:=subtext( +ausdruck,p+1)ELSE feldname:=ausdruck;ausdruck:=""FI .leaveproc: +stopbeifalschemnamen(TRUE );LEAVE fehlerindruckvariableWITH fehlerhaft. +ENDPROC fehlerindruckvariable;BOOL PROC zusammengesetzterausdruck(TEXT CONST +aktfeld,TEXT VAR ausdruck):TEXT VAR feldname:="",vglswert:="";INT CONST +aktfeldtyp:=feldtyp(feldnr(aktfeld));INT VAR p;BOOL VAR fehlerhaft:=FALSE ; +WHILE ausdruck>""CAND (ausdruckSUB 1)<>rechteklammerREP +pruefefallunterscheidung;PER ;fehlerhaft.pruefefallunterscheidung:p:=pos( +ausdruck,parametertrennzeichen);IF p=0THEN standardmeldung(mldkeinbegrenzer, +ausdruck);LEAVE zusammengesetzterausdruckWITH TRUE FI ;vglswert:=text( +ausdruck,p-1);ausdruck:=subtext(ausdruck,p+1);IF falscherdenotertyp(vglswert, +aktfeldtyp)THEN standardmeldung(mldtypkonflikt,vglswert);LEAVE +zusammengesetzterausdruckWITH TRUE FI ;pruefesequenz;IF (ausdruckSUB 1)= +otherwiseTHEN deletechar(ausdruck,1);pruefesequenzELIF (ausdruckSUB 1)= +parametertrennzeichenTHEN deletechar(ausdruck,1)ELIF ausdruck>""THEN IF ( +ausdruckSUB 1)=parametertrennzeichenTHEN ELIF (ausdruckSUB 1)=rechteklammer +THEN deletechar(ausdruck,1);LEAVE zusammengesetzterausdruckWITH fehlerhaft +ELSE standardmeldung(mldrestunbekannt,ausdruck);LEAVE +zusammengesetzterausdruckWITH TRUE FI FI .pruefesequenz: +zeichenketteueberlesen;IF (ausdruckSUB 1)=linkeklammerTHEN deletechar( +ausdruck,1);IF postext(ausdruck,rechteklammer,1)=0THEN standardmeldung( +mldklammerfehlt,ausdruck);LEAVE zusammengesetzterausdruckWITH TRUE FI ; +liesfeldname;IF (ausdruckSUB 1)=parametergrenzeTHEN deletechar(ausdruck,1); +fehlerhaft:=zusammengesetzterausdruck(feldname,ausdruck);IF fehlerhaftTHEN +LEAVE zusammengesetzterausdruckWITH TRUE FI ;ELSE deletechar(ausdruck,1);FI +FI .liesfeldname:p:=1;WHILE (ausdruckSUB p)<>rechteklammerCAND (ausdruckSUB p +)<>parametergrenzeREP pINCR 1PER ;feldname:=text(ausdruck,p-1);ausdruck:= +subtext(ausdruck,p);IF NOT istdbfeld(feldname)THEN standardmeldung( +mldfeldunbekannt,feldname);LEAVE zusammengesetzterausdruckWITH TRUE FI . +zeichenketteueberlesen:IF (ausdruckSUB 1)<>textbegrenzerTHEN standardmeldung( +mldkeinezeichenkette,ausdruck);LEAVE zusammengesetzterausdruckWITH TRUE FI ;p +:=2;WHILE (ausdruckSUB p)<>textbegrenzerREP pINCR 1;IF (ausdruckSUB p)= +textbegrenzerCAND (ausdruckSUB p+1)=textbegrenzerTHEN pINCR 2;FI ;UNTIL p> +length(ausdruck)PER ;IF p>length(ausdruck)THEN standardmeldung( +mldkeinezeichenkette,ausdruck);LEAVE zusammengesetzterausdruckWITH TRUE FI ; +ausdruck:=compress(subtext(ausdruck,p+1)).ENDPROC zusammengesetzterausdruck; +END PACKET ispidacheck + diff --git a/app/schulis/2.2.1/src/6.ida.def.druck b/app/schulis/2.2.1/src/6.ida.def.druck new file mode 100644 index 0000000..81d218d --- /dev/null +++ b/app/schulis/2.2.1/src/6.ida.def.druck @@ -0,0 +1,64 @@ +PACKET ispidadefinitiondruckenDEFINES druckdefinitionzusammenstellen, +benoetigteregel,idaankreuzfelderpruefen:LET druckfile="Hilfsdatei.Druck", +filenamezug="Hilfsdatei.Zugriff",niltext="";LET maxobjektklassen=10, +maxvariablen=100,zobjklasse=2;BOOL VAR ba,bb;INT VAR ia,ib,ic,id,ie,lva,lvb, +regelnummer;REAL VAR ra,rb,rc;TEXT VAR ta,tb,tc;FILE VAR f,g;PROC +druckdefinitionzusammenstellen(PROC (INT CONST )indatei,ROW 100TEXT VAR feld) +:forget(druckfile,quiet);f:=sequentialfile(output,druckfile); +nameundtypindateischreiben;objektklassenindateischreiben; +zugriffsregelnindateischreiben(PROC (INT CONST )indatei,feld); +selektionenindateischreiben(PROC (INT CONST )indatei); +druckformularindateischreiben;druckvariablenindateischreiben; +wertefuerdruckindateischreiben;print(druckfile);END PROC +druckdefinitionzusammenstellen;PROC nameundtypindateischreiben:putline(f, +niltext);getformularinfo(ta,ia,ba);putline(f,"Nummer: "+text(ia));putline(f, +" Name: "+ta);END PROC nameundtypindateischreiben;PROC +objektklassenindateischreiben:putline(f,niltext);putline(f,"Objektklassen"); +putline(f,niltext);FOR iaFROM 1UPTO maxobjektklassenREP ta:=getobjektklasse( +ia);IF ta<>niltextTHEN putline(f,"k"+text(ia)+": "+ta);ELSE LEAVE +objektklassenindateischreibenFI PER ;END PROC objektklassenindateischreiben; +PROC zugriffsregelnindateischreiben(PROC (INT CONST )indatei,ROW 100TEXT VAR +feld):putline(f,niltext);putline(f,"Zugriffsregeln");putline(f,niltext);FOR +lvaFROM 1UPTO getanzahlregelnREP bb:=TRUE ;getzugriffsregel(lva,ib,ic,id,ie); +regelnummer:=lva;IF getobjektklasse(ib)<>niltextTHEN feld[zobjklasse]:=text( +ib);indatei(4);g:=sequentialfile(modify,filenamezug);FOR lvbFROM 1UPTO lines( +g)REP toline(g,lvb);readrecord(g,tb);IF pos(tb,"</>")>0THEN +zeilezusammensetzen;putline(f,ta);bb:=FALSE FI PER ;FI PER . +zeilezusammensetzen:IF bbTHEN ta:="k"+text(ib,2)+"r"+text(ic,2)+" : ";ELSE ta +:=9*" "FI ;taCAT text(subtext(tb,pos(tb,"<#>")+3,pos(tb,"<!>")-1),25);taCAT +" : ";taCAT subtext(tb,pos(tb,"</>")+3).END PROC +zugriffsregelnindateischreiben;PROC selektionenindateischreiben(PROC (INT +CONST )indatei):putline(f,niltext);putline(f,"Selektionen");putline(f,niltext +);FOR lvaFROM 1UPTO getanzahlselfelderREP getselektion(lva,ta,tb);IF subtext( +tb,pos(tb,"</>")+3)<>niltextTHEN zeilezusammensetzen;putline(f,tc)FI PER . +zeilezusammensetzen:tc:=text(ta,25);tcCAT " : ";tcCAT tb.END PROC +selektionenindateischreiben;PROC druckformularindateischreiben:putline(f, +niltext);putline(f,"Druckformular");putline(f,niltext);g:=sequentialfile( +modify,getformtextname);FOR iaFROM 1UPTO lines(g)REP toline(g,ia);readrecord( +g,ta);changeall(ta,"#","\#");putline(f,ta);PER ;END PROC +druckformularindateischreiben;PROC druckvariablenindateischreiben:putline(f, +niltext);putline(f,"Druckvariablen");putline(f,niltext);FOR iaFROM 1UPTO +maxvariablenREP getsteuercode(ia,ta,ib,ba,bb);IF ta<>niltextTHEN changeall(ta +,"#","\#");putline(f,text(ia,3)+": "+ta);put(f," Länge: "+text(ib,2)+ +" rechts-/linksbündig: ");IF baTHEN putline(f,"rechtsbündig")ELSE putline(f, +"linksbündig")FI FI PER END PROC druckvariablenindateischreiben;PROC +wertefuerdruckindateischreiben:putline(f,niltext);putline(f, +"Werte für die Druckaufbereitung");putline(f,niltext);getdruckaufbereitung(ta +,ra,rb,ia,rc);putline(f," Schrifttyp: "+ta);putline(f, +" linker oberer Rand: "+text(rb,4,1)+" cm von oben");putline(f, +" : "+text(ra,4,1)+" cm von links");putline(f, +" Anzahl der Zeilen pro Seite: "+text(ia));putline(f, +"Anzahl der Zeichen pro Zeile: "+subtext(text(rc),1,pos(text(rc),".")-1)); +END PROC wertefuerdruckindateischreiben;INT PROC benoetigteregel:regelnummer +END PROC benoetigteregel;BOOL PROC idaankreuzfelderpruefen:LET +meldungalternative=56,zeileninobjektliste=18;LET niltext="";BOOL VAR +angekreuzt:=FALSE ;INT VAR lva,lvi;IF NOT richtigangekreuztTHEN +standardmeldung(meldungalternative,niltext);return(1);FALSE ELSE TRUE FI . +richtigangekreuzt:FOR lvaFROM 1UPTO anzahlderbelegtenzeilen-1REP IF +standardmaskenfeld(lva*2)<>niltextTHEN IF angekreuztTHEN infeld(lva*2);LEAVE +richtigangekreuztWITH FALSE ELSE angekreuzt:=TRUE FI FI PER ;angekreuzt. +anzahlderbelegtenzeilen:FOR lviFROM 1UPTO zeileninobjektlisteREP IF +standardmaskenfeld(lvi*2+1)=niltextTHEN LEAVE anzahlderbelegtenzeilenWITH lvi +FI PER ;0.END PROC idaankreuzfelderpruefen;END PACKET ispidadefinitiondrucken +; + diff --git a/app/schulis/2.2.1/src/6.ida.definieren b/app/schulis/2.2.1/src/6.ida.definieren new file mode 100644 index 0000000..696409b --- /dev/null +++ b/app/schulis/2.2.1/src/6.ida.definieren @@ -0,0 +1,516 @@ +PACKET ispidadefinierenDEFINES druckausgabeeingangaufbauenundeinlesen, +druckausgabeeingangeinlesen,druckausgabeaufbauenundeinlesen, +druckausgabeeinlesen,druckausgabeausgebenundbearbeiten,druckausgabespeichern, +druckausgabeneueinfuegen,druckausgabeloeschenvorbereiten, +druckausgabeloeschfrage,druckausgabeloeschen, +druckausgabelisteaufbauenundeinlesen,druckausgabelisteeinlesen, +ausgesuchtedruckausgabeausgebenundbearbeiten,ausgesuchtedruckausgabeeinlesen, +ausgesuchtedruckausgabeloeschenvorbereiten,ausgesuchtedruckausgabeloeschfrage +,listederdruckausgabenzeigen,listederdruckausgabeneinlesen, +indruckausgabenblaettern,inselektionenzurdruckausgabeblaettern, +inregelzurdruckausgabeblaettern,zurueckzurbearbeitung,formularausdrucken, +setzenummerderdruckausgabe,nochmeldungauszugeben,pruefungida,:LET filenamezug +="Hilfsdatei.Zugriff",filenamesel="Hilfsdatei.Selektion",#filenamedruck= +"Hilfsdatei.Druck",#filenameform="FORMTEXT.",filenamedata="FORMDATA.";LET +maskenzusatz=" für Druckausgabe ";LET nameundtyp=1,objektklassen=2,# +datenvorrat=3,#zugriffsregeln=4,selektion=5,druckformular=6,druckvariablen=7, +druckwerte=8,druckdefinition=9;LET ntnummer=2,ntname=3;LET oleitobjekt=2;LET +zobjklasse=2,zregelnr=3,zobjklname=4,znummer=5,zersterzugriff=6, +zerstervergleich=7;LET sersteselektion=2,serstervergleich=3;LET dvnummer=2, +dvdefinition=3,dvlaenge=4,dvrechtsbuendig=5;LET dwschriftart=2, +dwlinkerrandoben=3,dwlinkerrandlinks=4,dwzeilenproseite=5,dwzeichenprozeile=6 +;LET minanfang=1.0,maxanfang=10.0;LET ankreuzzeichen="x",anzahltrenner="<?>", +namentrenner="<#>",zeilennrtrenner="<!>",vergleichtrenner="</>",vartrenner= +"%",trenner=". ",leitobjektschueler="Schüler",leitobjektlehrer="Lehrer",# +gueltigerstatus="nw",#niltext="",semikolon=";"#oblitrenner="$"#;LET +leitobjekt=1,vorwaerts=1#rueckwaerts=2#;LET tl=3,maxzugriffe=16, +maxselektionen=17,maxobjektklassen=10;LET fnrerstesausgabefeld=2, +anzmaskeneing=2,anzmaskenbearb=9,anzmaskentitel=9;LET meldunglistenerstellung +=7,meldungalternative=56,meldungplausipruefung=57,meldungloeschfrage=65, +meldungkeineliste=68,meldungkeinblaettern=72,meldungformdrucken=219, +meldungfalscheeingabe=204,meldungdgibtesschon=205,meldungdgibtesnicht=206, +meldungfalschenummer=207,meldungfalschesobjekt=208,meldungsammelndruckdef=209 +,meldungdruckendruckdef=210,meldungrgibtesschon=211,meldungrgibtesnicht=212, +meldungvgibtesschon=213,meldungvgibtesnicht=214,meldungkeinleitobjekt=215, +meldungfalscheregel=217,meldungfalschevariable=218,meldungkeinefonttabelle= +250,meldungkeineobjektklasse=251;BOOL VAR loeschenderdruckausgabe:=FALSE , +neuedruckausgabe:=FALSE ,neuedruckvariable:=FALSE ,neuezugriffsregel:=FALSE , +druckenderdefinition:=FALSE ,druckvariablegibtesbereits:=FALSE , +zugriffsregelgibtesbereits:=FALSE ;BOOL VAR drvrechtsbuendig,drvdruckvar; +FILE VAR f;INT VAR fnrletztesausgabefeld:=100,fehlseite:=0,fehlzeile:=0, +fehlmeld:=0;INT VAR startpos,datenseite,merkzeile,anzahlderdateizeilen, +leseanfangindatei,fnummer,zeilennr,nrdruckausgabe,anzfelder,dnr,zuwas;INT +VAR regelnr,regnr,objklasse;INT VAR zrregel,zrobjekt,zrindex,zranzahl;INT +VAR drvlaenge;ROW anzmaskenbearbINT VAR letztesmaskenfeld:=ROW anzmaskenbearb +INT :(3,11,100,52,35,100,5,6,100);ROW anzmaskeneingTEXT VAR eingangsmaske:= +ROW anzmaskeneingTEXT :("mdr name und typ der druckausgabe", +"mdr objektklasse waehlen eingang");ROW anzmaskenbearbTEXT VAR bearbmaske:= +ROW anzmaskenbearbTEXT :("mdr name und typ der druckausgabe", +"mdr objektklasse waehlen bearb","","mdr zugriffsregeln bearb", +"mdr selektionsbedingung bearb","","mdr variablen definieren bearb", +"mdr werte fuer druckausgabe festlegen bearb", +"mdr objektklasse waehlen eingang");ROW anzmaskentitelTEXT VAR +maskentiteleingang:=ROW anzmaskentitelTEXT :("Name und Nummer definieren", +"Objektklassen wählen","Datenvorrat festlegen","Zugriffsregeln bearbeiten", +"Selektionsbedingungen angeben","Druckformular editieren", +"Druckvariablen definieren","Werte für Druckaufbereitung", +"Definition ausdrucken");ROW 100TEXT VAR erfassungsfeld;TAG VAR maske;BOOL +VAR gespeichert:=FALSE ;TEXT VAR sfeldname,svergleichswert;TEXT VAR +filenameformtp:="DUMMY";TEXT VAR meldungstext:="",nummerderdruckausgabe:="", +pattern,zeile,programmname;PROC druckausgabeeingangaufbauenundeinlesen(INT +CONST was):systemdboff;drvdruckvar:=ruecksprung;loeschenderdruckausgabe:= +FALSE ;setzedruckausgabelistenauswahl(FALSE ); +setzelistederdruckausgabengezeigt(FALSE );fehlseite:=1;fehlzeile:=1;fehlmeld +:=0;init(erfassungsfeld);startpos:=fnrerstesausgabefeld;zuwas:=was; +programmname:=maskentiteleingang[zuwas];eingangsmaskeinitialisieren; +felderausgebenundeinlesen;.eingangsmaskeinitialisieren:IF zuwas=1THEN +initmaske(maske,eingangsmaske[1])ELSE initmaske(maske,eingangsmaske[2])FI ; +nummerderdruckausgabe:=niltext;setzeaktuellemaske(maske). +felderausgebenundeinlesen:IF zuwas=1THEN standardstartproc(eingangsmaske[1]) +ELSE standardstartproc(eingangsmaske[2])FI ;fnrletztesausgabefeld:= +letztesmaskenfeld[zuwas];feldschutzfestlegen(fnrerstesausgabefeld+1); +loeschfeldverdecken;eventuellmeldungausgeben;get(maske,erfassungsfeld, +startpos);nummerderdruckausgabe:=erfassungsfeld[fnrerstesausgabefeld]; +standardmaskenfeld(nummerderdruckausgabe,fnrerstesausgabefeld).END PROC +druckausgabeeingangaufbauenundeinlesen;PROC druckausgabeeingangeinlesen(INT +CONST was):putget(maske,nummerderdruckausgabe,fnrerstesausgabefeld);END PROC +druckausgabeeingangeinlesen;PROC druckausgabeaufbauenundeinlesen(INT CONST +was):IF ruecksprungTHEN bearbeitungsbildschirmausgeben(PROC +erneuteeingabeerforderlich)ELSE eingangsbildschirmueberpruefen(PROC +erneuteeingabeerforderlich)FI END PROC druckausgabeaufbauenundeinlesen;PROC +druckausgabeeinlesen(INT CONST was):IF was=druckformularTHEN editiere( +filenameformtp,FALSE )ELSE get(maske,erfassungsfeld,startpos); +standardfelderfuellen;FI END PROC druckausgabeeinlesen;PROC +druckausgabeausgebenundbearbeiten(INT CONST was):zuwas:=was;loeschemeldung( +aktuellemaske);loeschenderdruckausgabe:=FALSE ;neuedruckausgabe:=FALSE ; +SELECT wasOF CASE zugriffsregeln:neuezugriffsregel:=FALSE ; +zugriffsregelueberpruefenCASE druckvariablen:neuedruckvariable:=FALSE ; +druckvariableueberpruefenCASE druckdefinition:eingangsbildschirmueberpruefen( +PROC druckdefinitiondrucken)OTHERWISE :zurueck;eingangsbildschirmueberpruefen +(PROC maskenwertezeigenundbearbeiten)END SELECT ;.END PROC +druckausgabeausgebenundbearbeiten;PROC druckausgabespeichern(BOOL CONST +speichern,INT CONST was):IF speichernTHEN angabenabspeichern(was);gespeichert +:=TRUE ELSE gespeichert:=FALSE ;meldungstext:=("Die Angaben "+ +meldungseinschub+" wurden nicht gespeichert ");hilfsfilesloeschen;IF NOT +druckausgabelistenauswahl#dr01.08.88#THEN forget(getformtextname,quiet); +forget(filenameformtp,quiet)FI ;eventuellmeldungbeilistenabarbeitungFI ; +stopbeifalschemnamen(TRUE )END PROC druckausgabespeichern;PROC +druckausgabeneueinfuegen(INT CONST was):loeschemeldung(aktuellemaske); +loeschenderdruckausgabe:=FALSE ;SELECT wasOF CASE nameundtyp:neuedruckausgabe +:=TRUE ;eingangsbildschirmueberpruefen(PROC maskenwertezeigenundbearbeiten) +CASE zugriffsregeln:neuezugriffsregel:=TRUE ;zugriffsregelueberpruefenCASE +druckvariablen:neuedruckvariable:=TRUE ;druckvariableueberpruefenOTHERWISE : +rueckschrittevorproc(2)END SELECT END PROC druckausgabeneueinfuegen;PROC +druckausgabeloeschenvorbereiten(INT CONST was):loeschemeldung(aktuellemaske); +loeschenderdruckausgabe:=TRUE ;SELECT wasOF CASE nameundtyp:neuedruckausgabe +:=FALSE ;eingangsbildschirmueberpruefen(PROC maskenwertezeigenundbearbeiten) +CASE zugriffsregeln:neuezugriffsregel:=FALSE ;zugriffsregelueberpruefenCASE +druckvariablen:neuedruckvariable:=FALSE ;druckvariableueberpruefenOTHERWISE : +rueckschrittevorproc(2)END SELECT ;END PROC druckausgabeloeschenvorbereiten; +PROC druckausgabeloeschfrage:TEXT VAR xy;meldeauffaellig(aktuellemaske, +meldungloeschfrage);startpos:=letztesmaskenfeld[zuwas]+1;get(maske,xy, +startpos).END PROC druckausgabeloeschfrage;PROC druckausgabeloeschen(BOOL +CONST loeschen,INT CONST was):IF loeschenTHEN meldungstext:=("Die Angaben "+ +meldungseinschub+" wurden gelöscht ");angabenloeschen(was);ELSE meldungstext +:=("Die Angaben "+meldungseinschub+" wurden nicht gelöscht "); +hilfsfilesloeschen;FI ;loeschenderdruckausgabe:=FALSE ; +eventuellmeldungbeilistenabarbeitung;END PROC druckausgabeloeschen;PROC +druckausgabelisteaufbauenundeinlesen(INT CONST was): +setzedruckausgabelistenauswahl(FALSE );SELECT wasOF CASE nameundtyp: +druckausgabenlistezeigenCASE zugriffsregeln:listederregelnzeigenCASE +druckvariablen:listederdruckvariablenzeigenEND SELECT ;IF (was=nameundtypAND +listederdruckausgabengezeigt)OR ((was=zugriffsregelnOR was=druckvariablen) +AND druckausgabelistenauswahl)THEN druckausgabelisteeinlesen(was);FI . +listederregelnzeigen:loeschemeldung(aktuellemaske);IF erlaubteregeleingabeOR +regelleerTHEN regellistezeigenELSE meldeauffaellig(aktuellemaske, +meldungfalscheregel);return(1);LEAVE druckausgabelisteaufbauenundeinlesenFI . +regelleer:erfassungsfeld[zobjklasse]=niltextAND erfassungsfeld[zregelnr]= +niltext.listederdruckvariablenzeigen:loeschemeldung(aktuellemaske);IF +erlaubtevariableneingabeOR druckvariableleerTHEN variablenlistezeigenELSE +meldeauffaellig(aktuellemaske,meldungfalschevariable);return(1);LEAVE +druckausgabelisteaufbauenundeinlesenFI .druckvariableleer:erfassungsfeld[ +dvnummer]=niltext.END PROC druckausgabelisteaufbauenundeinlesen;PROC +druckausgabelisteeinlesen(INT CONST was):infeld(fnrerstesausgabefeld); +standardnproc;maskenwertesichern;END PROC druckausgabelisteeinlesen;PROC +ausgesuchtedruckausgabeausgebenundbearbeiten(INT CONST was): +behandlungderausgesuchten(PROC (INT CONST )druckausgabeausgebenundbearbeiten, +erfassungsfeld,was);END PROC ausgesuchtedruckausgabeausgebenundbearbeiten; +PROC ausgesuchtedruckausgabeeinlesen(INT CONST welche):druckausgabeeinlesen( +welche)END PROC ausgesuchtedruckausgabeeinlesen;PROC +ausgesuchtedruckausgabeloeschenvorbereiten(INT CONST was): +behandlungderausgesuchten(PROC (INT CONST )druckausgabeloeschenvorbereiten, +erfassungsfeld,was);END PROC ausgesuchtedruckausgabeloeschenvorbereiten;PROC +ausgesuchtedruckausgabeloeschfrage:druckausgabeloeschfrageEND PROC +ausgesuchtedruckausgabeloeschfrage;PROC listederdruckausgabenzeigen:BOOL VAR +listeexistiertnicht:=FALSE ;loeschemeldung(aktuellemaske); +nummerderdruckausgabe:=erfassungsfeld[fnrerstesausgabefeld]; +standardmaskenfeld(nummerderdruckausgabe,fnrerstesausgabefeld);IF +nummerinrichtigengrenzen(nummerderdruckausgabe)OR nummerderdruckausgabe= +niltextTHEN #putkeypart(niltext);putdatapart(niltext);##vorläufig14.03.88# +pruefenobdruckausgabenexistierenELSE meldeauffaellig(aktuellemaske, +meldungfalschenummer);rueckschrittenachproc(1)FI . +pruefenobdruckausgabenexistieren:meldeauffaellig(aktuellemaske, +meldunglistenerstellung);putwert(fnridanummer,nummerderdruckausgabe); +objektlistestarten(dnrida,standardmaskenfeld(fnrerstesausgabefeld), +fnridanummer,TRUE ,listeexistiertnicht);IF listeexistiertnichtTHEN +meldeauffaellig(aktuellemaske,meldungkeineliste);rueckschrittenachproc(1) +ELSE druckausgabelisteaufbauenundeinlesen(nameundtyp)FI .END PROC +listederdruckausgabenzeigen;PROC listederdruckausgabeneinlesen: +druckausgabelisteeinlesen(nameundtyp)END PROC listederdruckausgabeneinlesen; +PROC indruckausgabenblaettern(INT CONST wie,worin):inlisteblaettern(wie);IF +ruecksprungTHEN meldeauffaellig(aktuellemaske,meldungkeinblaettern);FI ; +return(1)END PROC indruckausgabenblaettern;PROC +inselektionenzurdruckausgabeblaettern(INT CONST wie):loeschemeldung( +aktuellemaske);selektionenindateieintragen(leseanfangindatei,erfassungsfeld); +datenseiteraufoderrunter(wie);IF maxselektionen*(datenseite-1)>= +anzahlderdateizeilenOR datenseite=0THEN meldeauffaellig(aktuellemaske, +meldungkeinblaettern);datenseiterunteroderrauf(wie)ELSE +selektionenzeigenvorbereiten(datenseite);FI ;put(maske,erfassungsfeld, +letztesmaskenfeld[zuwas]);startpos:=serstervergleich;rueckschrittenachproc(1) +;END PROC inselektionenzurdruckausgabeblaettern;PROC +inregelzurdruckausgabeblaettern(INT CONST wie):loeschemeldung(aktuellemaske); +zugriffsregelnindateieintragen(leseanfangindatei,erfassungsfeld); +datenseiteraufoderrunter(wie);IF maxzugriffe*(datenseite-1)>= +anzahlderdateizeilenOR datenseite=0THEN meldeauffaellig(aktuellemaske, +meldungkeinblaettern);datenseiterunteroderrauf(wie)ELSE +zugriffezeigenvorbereiten(datenseite)FI ;put(maske,erfassungsfeld, +letztesmaskenfeld[zuwas]);startpos:=zerstervergleich;rueckschrittenachproc(1) +END PROC inregelzurdruckausgabeblaettern;INT PROC nochmeldungauszugeben:IF +meldungstext=niltextTHEN 0ELSE meldungstext:=niltext;IF gespeichertTHEN 191 +ELSE 195FI FI END PROC nochmeldungauszugeben;PROC setzenummerderdruckausgabe( +TEXT CONST nr):nummerderdruckausgabe:=nrEND PROC setzenummerderdruckausgabe; +BOOL PROC pruefungida:FALSE END PROC pruefungida;PROC zurueckzurbearbeitung( +INT CONST anzahl):zurueck;setzedruckausgabelistenauswahl(FALSE );init( +erfassungsfeld);enter(anzahl)END PROC zurueckzurbearbeitung;PROC +formularausdrucken:standardmeldung(meldungformdrucken,niltext);changeinfile( +filenameformtp,"#","\#");print(filenameformtp);changeinfile(filenameformtp,"\#" +,"#");rueckschrittenachproc(1)END PROC formularausdrucken;PROC +druckvariableueberpruefen:IF erlaubtevariableneingabeTHEN +standardkopfmaskeaktualisieren(programmname);IF druckausgabelistenauswahl +THEN initmaske(maske,bearbmaske[zuwas]);setzeaktuellemaske(maske);show( +aktuellemaske);loeschfeldverdecken;FI ;IF existenzdervariablennotwendigTHEN +fehlerbehandlung;rueckschrittenachproc(1)ELSE maskenwertezeigenundbearbeiten; +FI ELSE meldeauffaellig(aktuellemaske,meldungfalschevariable);startpos:= +fnrerstesausgabefeld;rueckschrittenachproc(1)FI . +existenzdervariablennotwendig:(neuedruckvariableAND +druckvariableexistiertschon)OR (NOT neuedruckvariableAND NOT +druckvariableexistiertschon).druckvariableexistiertschon:getsteuercode(int( +erfassungsfeld[dvnummer]),erfassungsfeld[dvdefinition],drvlaenge, +drvrechtsbuendig,drvdruckvar);druckvariablegibtesbereits:=erfassungsfeld[ +dvdefinition]<>niltext;erfassungsfeld[dvdefinition]<>niltext.fehlerbehandlung +:IF neuedruckvariableAND druckvariableexistiertschonTHEN meldeauffaellig( +aktuellemaske,meldungvgibtesschon)ELSE meldeauffaellig(aktuellemaske, +meldungvgibtesnicht)FI .END PROC druckvariableueberpruefen;PROC +eingangsbildschirmueberpruefen(PROC wasweiter):BOOL VAR +druckausgabegibtesschon:=druckausgabeexistiertbereits;IF eingangsbildschirmok +THEN IF listederdruckausgabengezeigtTHEN nummerderdruckausgabesetzen( +nummerderdruckausgabe);druckausgabegibtesschon:=druckausgabeexistiertbereits +FI ;getform(int(nummerderdruckausgabe));openformular(int( +nummerderdruckausgabe));init(erfassungsfeld);angegebenedruckausgabebearbeiten +ELSE fehlerbehandlung1;rueckschrittenachproc(1)FI .eingangsbildschirmok:IF +listederdruckausgabengezeigtTHEN nureinedruckausgabeangekreuztELSE +nummerinrichtigengrenzen(nummerderdruckausgabe)FI .fehlerbehandlung1:IF +listederdruckausgabengezeigtTHEN meldeauffaellig(aktuellemaske, +meldungalternative)ELSE meldeauffaellig(aktuellemaske,meldungfalschenummer) +FI .angegebenedruckausgabebearbeiten:IF existenzderdruckausgabenoetigTHEN IF +zuwas=druckdefinitionTHEN #wasweiterersetztdr16.12.87# +bearbeitungsbildschirmausgeben(PROC wasweiter);ELIF zuwas=selektionAND +getobjektklasse(leitobjekt)=niltextTHEN meldeauffaellig(aktuellemaske, +meldungkeinleitobjekt);rueckschrittenachproc(1)ELSE saveupdateposition(dnrida +);bearbeitungsbildschirmausgeben(PROC wasweiter);FI ELSE fehlerbehandlung2; +rueckschrittenachproc(1)FI .existenzderdruckausgabenoetig:( +druckausgabegibtesschonAND NOT neuedruckausgabe)OR (NOT +druckausgabegibtesschonAND neuedruckausgabe).fehlerbehandlung2:IF NOT +druckausgabegibtesschonAND NOT neuedruckausgabeTHEN meldeauffaellig( +aktuellemaske,meldungdgibtesnicht);forget(filenameform+text(getactivformular) +,quiet);forget(filenamedata+text(getactivformular),quiet)ELIF +druckausgabegibtesschonAND neuedruckausgabeTHEN meldeauffaellig(aktuellemaske +,meldungdgibtesschon)FI ;.END PROC eingangsbildschirmueberpruefen;BOOL PROC +druckausgabeexistiertbereits:#putkeypart(niltext);putdatapart(niltext);## +vorläufig14.03.88#inittupel(dnrida);putwert(fnridanummer, +nummerderdruckausgabe);search(dnrida,TRUE );dbstatus=okEND PROC +druckausgabeexistiertbereits;PROC bearbeitungsbildschirmausgeben(PROC +wasweiter):programmname:=maskentiteleingang[zuwas]+maskenzusatz+ +nummerderdruckausgabe;standardkopfmaskeaktualisieren(programmname); +bearbeitungsmaskeausgeben;eventuellmeldungausgeben;wasweiter. +bearbeitungsmaskeausgeben:initmaske(maske,bearbmaske[zuwas]); +setzeaktuellemaske(maske);fnrletztesausgabefeld:=letztesmaskenfeld[zuwas]; +show(aktuellemaske);loeschfeldverdecken;getform(int(nummerderdruckausgabe)); +openformular(int(nummerderdruckausgabe)).END PROC +bearbeitungsbildschirmausgeben;PROC zugriffsregelueberpruefen:IF +erlaubteregeleingabeTHEN standardkopfmaskeaktualisieren(programmname);IF +druckausgabelistenauswahlTHEN initmaske(maske,bearbmaske[zuwas]); +setzeaktuellemaske(maske);show(aktuellemaske);loeschfeldverdeckenFI ;IF +existenzderregelnotwendigTHEN fehlerbehandlung;rueckschrittenachproc(1)ELSE +maskenwertezeigenundbearbeiten;FI ELSE #dr02.05.88#IF falscheregelTHEN +meldeauffaellig(aktuellemaske,meldungfalscheregel)ELIF +esexistiertkeineobjektklasseTHEN meldeauffaellig(aktuellemaske, +meldungkeineobjektklasse)FI ;startpos:=fnrerstesausgabefeld; +rueckschrittenachproc(1)FI .existenzderregelnotwendig:(neuezugriffsregelAND +zugriffsregelexistiertschon)OR (NOT neuezugriffsregelAND NOT +zugriffsregelexistiertschon).zugriffsregelexistiertschon:objklasse:=int( +erfassungsfeld[zobjklasse]);regnr:=int(erfassungsfeld[zregelnr]);regelnr:= +getregelnummer(objklasse,regnr);zugriffsregelgibtesbereits:=regelnr>0;regelnr +>0.fehlerbehandlung:IF neuezugriffsregelAND zugriffsregelexistiertschonTHEN +meldeauffaellig(aktuellemaske,meldungrgibtesschon)ELSE meldeauffaellig( +aktuellemaske,meldungrgibtesnicht)FI .falscheregel:erfassungsfeld[zobjklasse] +=niltextCOR erfassungsfeld[zregelnr]=niltext.esexistiertkeineobjektklasse: +erfassungsfeld[zobjklasse]<>niltext#dr02.05.88#CAND int(erfassungsfeld[ +zobjklasse])<=10CAND getobjektklasse(int(erfassungsfeld[zobjklasse]))=niltext +.END PROC zugriffsregelueberpruefen;PROC erneuteeingabeerforderlich: +allefeldersperren(FALSE );feldschutzfuerbearbeitungfestlegen(zuwas);startpos +:=fnrerstesausgabefeld;put(maske,erfassungsfeld,letztesmaskenfeld[zuwas]); +druckausgabeeinlesen(zuwas)END PROC erneuteeingabeerforderlich;PROC +angabenabspeichern(INT CONST was):INT VAR lvf;TEXT VAR txt;fehlseite:=1; +fehlzeile:=1;fehlmeld:=0;SELECT wasOF CASE nameundtyp:nameundtypspeichern +CASE objektklassen:objektklassenspeichernCASE zugriffsregeln: +zugriffsregelspeichernCASE selektion:selektionspeichernCASE druckformular: +druckformularspeichernCASE druckvariablen:druckvariablespeichernCASE +druckwerte:druckwertespeichernEND SELECT ;meldungstext:=("Die Angaben "+ +meldungseinschub+" wurden gespeichert ");eventuellmeldungbeilistenabarbeitung +#dr01.08.88#.nameundtypspeichern:meldeauffaellig(aktuellemaske, +meldungplausipruefung);IF nameundtypok(erfassungsfeld,fnummer)THEN +putformularinfo(erfassungsfeld[ntname],int(erfassungsfeld[ntnummer]),FALSE ); +nameundtypindbeintragen;sichernundhilfsfilesloeschenELSE +meldefehlernameundtyp;startpos:=fnummer;rueckschrittenachproc(1);LEAVE +angabenabspeichernFI .nameundtypindbeintragen:putwert(fnridanummer, +erfassungsfeld[ntnummer]);putwert(fnridaname,erfassungsfeld[ntname]);IF +neuedruckausgabeTHEN insert(dnrida)ELSE restoreupdateposition(dnrida);update( +dnrida)FI .objektklassenspeichern:meldeauffaellig(aktuellemaske, +meldungplausipruefung);IF objektklassenzugelassenTHEN FOR lvfFROM 1UPTO +maxobjektklassenREP putobjektklasse(lvf,erfassungsfeld[lvf+1])PER ; +sichernundhilfsfilesloeschenELSE meldeauffaellig(aktuellemaske, +meldungfalschesobjekt);startpos:=lvf+1;rueckschrittenachproc(1);LEAVE +angabenabspeichernFI .objektklassenzugelassen:IF +leitobjektklasseleeroderungueltigTHEN lvf:=1;LEAVE objektklassenzugelassen +WITH FALSE FI ;stopbeifalschemnamen(FALSE );FOR lvfFROM 1UPTO +maxobjektklassenREP IF erfassungsfeld[lvf+1]<>niltextTHEN IF +objektklassekeindateinameTHEN LEAVE objektklassenzugelassenWITH FALSE FI FI +PER ;stopbeifalschemnamen(TRUE );TRUE .leitobjektklasseleeroderungueltig: +erfassungsfeld[oleitobjekt]=niltextCOR (pos(leitobjektschueler,erfassungsfeld +[oleitobjekt])=0AND pos(leitobjektlehrer,erfassungsfeld[oleitobjekt])=0). +objektklassekeindateiname:dateinr(erfassungsfeld[lvf+1])=0. +zugriffsregelspeichern:zugriffsregelnindateieintragen(leseanfangindatei, +erfassungsfeld);meldeauffaellig(aktuellemaske,meldungplausipruefung);IF +zugriffsregelnok(fehlseite,fehlzeile,fehlmeld)THEN zugriffsregelnabspeichern; +sichernundhilfsfilesloeschenELSE stopbeifalschemnamen(TRUE );datenseite:= +fehlseite;zugriffezeigenvorbereiten(datenseite);put(maske,erfassungsfeld, +letztesmaskenfeld[zuwas]);meldeauffaellig(aktuellemaske,fehlmeld);startpos:= +fehlzeile+((fehlzeile+2)*2);rueckschrittenachproc(1);LEAVE angabenabspeichern +FI .zugriffsregelnabspeichern:wertesetzenbeineuerzugriffsregel; +erstenvergleichsuchenundindexsetzen;zugriffsregelundvergleichswertespeichern. +wertesetzenbeineuerzugriffsregel:IF neuezugriffsregelTHEN regelnr:= +getanzahlregeln+1;zrobjekt:=objklasse;zrregel:=regnr;ELSE FI . +erstenvergleichsuchenundindexsetzen:pattern:=vergleichtrenner;toline(f,1); +readrecord(f,zeile);IF pos(zeile,pattern)=0THEN down(f,pattern);readrecord(f, +zeile);FI ;zrindex:=int(subtext(zeile,1,pos(zeile,anzahltrenner)-1)). +zugriffsregelundvergleichswertespeichern:putzugriffsregel(regelnr,zrobjekt, +zrregel,zrindex,0);WHILE pos(zeile,vergleichtrenner)>0REP putvergleichswert( +regelnr,subtext(zeile,pos(zeile,vergleichtrenner)+tl));toline(f,lineno(f)+1); +readrecord(f,zeile);PER .selektionspeichern:selektionenindateieintragen( +leseanfangindatei,erfassungsfeld);meldeauffaellig(aktuellemaske, +meldungplausipruefung);IF selektionswerteok(dnr,fehlseite,fehlzeile,fehlmeld) +THEN selektionenabspeichern;sichernundhilfsfilesloeschenELSE datenseite:= +fehlseite;selektionenzeigenvorbereiten(datenseite);put(maske,erfassungsfeld, +letztesmaskenfeld[zuwas]);meldeauffaellig(aktuellemaske,fehlmeld);startpos:=( +fehlzeile*2)+1;rueckschrittenachproc(1);LEAVE angabenabspeichernFI . +selektionenabspeichern:putanzahlselfelder(0);FOR lvfFROM 1UPTO anzattr(dnr) +REP toline(f,lvf);readrecord(f,zeile);sfeldname:=subtext(zeile,1,pos(zeile, +zeilennrtrenner)-1);svergleichswert:=subtext(zeile,pos(zeile,vergleichtrenner +)+tl);putselektion(sfeldname,svergleichswert)PER .druckformularspeichern: +standardmeldung(meldungplausipruefung,niltext);forget(getformtextname,quiet); +copy(filenameformtp,getformtextname);IF fehlerinformularTHEN formfehlermelden +;rueckschrittenachproc(1);LEAVE angabenabspeichernELSE forget(filenameformtp, +quiet);sichernundhilfsfilesloeschenFI .druckvariablespeichern:meldeauffaellig +(aktuellemaske,meldungplausipruefung);IF fehlerindruckvariable(erfassungsfeld +[dvdefinition])THEN rueckschrittenachproc(1);LEAVE angabenabspeichernELSE +drvdruckvar:=ausdruckwardruckvariable;putsteuercode(int(erfassungsfeld[ +dvnummer]),erfassungsfeld[dvdefinition],int(erfassungsfeld[dvlaenge]), +erfassungsfeld[dvrechtsbuendig]<>niltext,drvdruckvar); +sichernundhilfsfilesloeschenFI .druckwertespeichern:meldeauffaellig( +aktuellemaske,meldungplausipruefung);IF druckwerteokTHEN startpos:= +fnrerstesausgabefeld;putdruckaufbereitung(erfassungsfeld[dwschriftart],real( +erfassungsfeld[dwlinkerrandlinks]),real(erfassungsfeld[dwlinkerrandoben]),int +(erfassungsfeld[dwzeilenproseite]),real(erfassungsfeld[dwzeichenprozeile])); +sichernundhilfsfilesloeschenELSE IF lvf=0THEN meldeauffaellig(aktuellemaske, +meldungfalscheeingabe);ELSE meldeauffaellig(aktuellemaske, +meldungkeinefonttabelle);FI ;rueckschrittenachproc(1);LEAVE +angabenabspeichernFI .druckwerteok:lvf:=0;fonttabelleeingestelltCAND +fontexistiertauchCAND linkerrandrichtigCAND rechterrandrichtig. +linkerrandrichtig:startpos:=dwlinkerrandlinks;real(erfassungsfeld[ +dwlinkerrandlinks])>=minanfangCAND real(erfassungsfeld[dwlinkerrandlinks])<= +maxanfang.rechterrandrichtig:startpos:=dwlinkerrandoben;real(erfassungsfeld[ +dwlinkerrandoben])>=minanfangCAND real(erfassungsfeld[dwlinkerrandoben])<= +maxanfang.fonttabelleeingestellt:startpos:=dwschriftart;disablestop;txt:=font +(1);IF iserrorTHEN clearerror;lvf:=1FI ;enablestop;lvf=0.fontexistiertauch: +startpos:=dwschriftart;font(erfassungsfeld[dwschriftart])>0.END PROC +angabenabspeichern;PROC maskenwertezeigenundbearbeiten:IF +loeschenderdruckausgabeTHEN allefeldersperren(TRUE ); +maskenwerteholenundausgeben(zuwas);druckausgabeloeschfrageELSE +allefeldersperren(FALSE );maskenwerteholenundausgeben(zuwas); +druckausgabeeinlesen(zuwas)FI ;END PROC maskenwertezeigenundbearbeiten;PROC +maskenwerteholenundausgeben(INT CONST wozu):LET maxanzobjektklassen=10;INT +VAR feld,nrindex,lvf,lvi;TEXT VAR z,datname;datenseite:=1;SELECT wozuOF CASE +nameundtyp:nameundtypzeigenCASE objektklassen:objektklassenzeigenCASE +zugriffsregeln:zugriffsregelzeigenCASE selektion:selektionzeigenCASE +druckformular:druckformularzeigenCASE druckvariablen:druckvariablezeigenCASE +druckwerte:druckwertezeigenEND SELECT ;IF wozu<>druckformularTHEN put(maske, +erfassungsfeld,letztesmaskenfeld[zuwas]);FI .nameundtypzeigen:BOOL VAR +ausgabelistenweise;erfassungsfeld[ntnummer]:=nummerderdruckausgabe;IF NOT +neuedruckausgabeTHEN ausgabelistenweise:=FALSE ;getformularinfo( +erfassungsfeld[ntname],nrdruckausgabe,ausgabelistenweise);FI ;IF +neuedruckausgabeTHEN protect(maske,fnrerstesausgabefeld,TRUE )FI ;startpos:= +fnrerstesausgabefeld+1;.objektklassenzeigen:FOR lvfFROM 1UPTO +maxanzobjektklassenREP erfassungsfeld[lvf+1]:=getobjektklasse(lvf)PER ;. +zugriffsregelzeigen:objektklasseholen;moeglichezugriffezeigen; +anzahlderdateizeilen:=lines(f);IF zugriffsregelgibtesbereitsTHEN +gespeichertezugriffezeigen;FI ;zugriffezeigenvorbereiten(datenseite);startpos +:=zerstervergleich.moeglichezugriffezeigen:primaerzugriffholen;IF firstindex> +0THEN sekundaerzugriffeholen;FI ;.primaerzugriffholen:forget(filenamezug, +quiet);f:=sequentialfile(modify,filenamezug);datname:=erfassungsfeld[ +zobjklname];dnr:=dateinr(datname);anzfelder:=anzkey(dnr);zeilennr:=1;nrindex +:=0;FOR lvfFROM 1UPTO anzfelderREP feld:=dnr+lvf;zeileindateischreiben;PER ;. +sekundaerzugriffeholen:FOR lviFROM firstindexUPTO firstfree-1REP IF dateinr( +primdatid(lvi))=dnrTHEN anzahlderfelderbestimmen;nrindexINCR 1;FOR lvfFROM 1 +UPTO anzfelderREP feld:=dnr+int(subtext(z,1,pos(z,semikolon)-1));z:=subtext(z +,pos(z,semikolon)+1);zeileindateischreiben;PER ;FI ;PER ;. +anzahlderfelderbestimmen:z:=zugriff(lvi);INT VAR posi;anzfelder:=0;posi:=pos( +z,semikolon);WHILE posi>0REP anzfelderINCR 1;posi:=pos(z,semikolon,posi+1) +PER ;.zeileindateischreiben:zeilezusammensetzen;toline(f,zeilennr); +insertrecord(f);writerecord(f,zeile);zeilennrINCR 1;.zeilezusammensetzen:IF +lvf=1THEN zeile:=text(nrindex)+anzahltrenner;zeileCAT text(anzfelder);zeile +CAT namentrenner;ELSE zeile:=namentrennerFI ;zeileCAT name(feld);zeileCAT +zeilennrtrenner;zeileCAT text(zeilennr);.gespeichertezugriffezeigen: +gespeichertezugriffeholen;gespeichertezugriffeindateieintragen. +gespeichertezugriffeholen:IF druckenderdefinitionTHEN regelnr:= +benoetigteregelFI ;getzugriffsregel(regelnr,zrobjekt,zrregel,zrindex,zranzahl +);.gespeichertezugriffeindateieintragen:pattern:=text(zrindex)+anzahltrenner; +toline(f,1);readrecord(f,zeile);IF pos(zeile,pattern)>0THEN zugriffeeintragen +ELSE down(f,pattern);IF patternfoundTHEN zugriffeeintragenFI FI . +zugriffeeintragen:zeilennr:=lineno(f);FOR lvfFROM 1UPTO zranzahlREP toline(f, +zeilennr);readrecord(f,zeile);zeileCAT vergleichtrenner;zeileCAT +getvergleichswert(regelnr,lvf);writerecord(f,zeile);zeilennrINCR 1;PER . +selektionzeigen:forget(filenamesel,quiet);f:=sequentialfile(modify, +filenamesel);dnr:=dateinr(getobjektklasse(leitobjekt)); +feldnamenindateischreiben;anzahlderdateizeilen:=lines(f); +gespeicherteselektionenindateischreiben;selektionenzeigenvorbereiten( +datenseite);startpos:=serstervergleich.feldnamenindateischreiben:FOR lvfFROM +1UPTO anzattr(dnr)REP toline(f,lvf);insertrecord(f);zeile:=name(dnr+lvf)+ +zeilennrtrenner+text(lvf)+vergleichtrenner;writerecord(f,zeile);PER . +gespeicherteselektionenindateischreiben:IF getanzahlselfelder<>0THEN FOR lvf +FROM 1UPTO getanzahlselfelderREP toline(f,lvf);readrecord(f,zeile); +getselektion(lvf,sfeldname,svergleichswert);zeileCAT svergleichswert; +writerecord(f,zeile);PER FI .druckformularzeigen:filenameformtp:=wert( +fnridanummer)+trenner+wert(fnridaname);forget(filenameformtp,quiet);IF exists +(getformtextname)THEN copy(getformtextname,filenameformtp)FI ;startpos:= +fnrerstesausgabefeld.druckvariablezeigen:IF druckvariablegibtesbereitsTHEN +protect(maske,dvnummer,TRUE );IF drvlaenge=0THEN erfassungsfeld[dvlaenge]:= +niltextELSE erfassungsfeld[dvlaenge]:=text(drvlaenge)FI ;IF drvrechtsbuendig +THEN erfassungsfeld[dvrechtsbuendig]:=ankreuzzeichenELSE erfassungsfeld[ +dvrechtsbuendig]:=niltextFI FI ;startpos:=dvdefinition.druckwertezeigen:REAL +VAR linksoben,linkslinks,spalten;INT VAR zeilen;zurueck;getdruckaufbereitung( +erfassungsfeld[dwschriftart],linkslinks,linksoben,zeilen,spalten); +erfassungsfeld[dwlinkerrandlinks]:=text(linkslinks);erfassungsfeld[ +dwlinkerrandoben]:=text(linksoben);erfassungsfeld[dwzeilenproseite]:=text( +zeilen);erfassungsfeld[dwzeichenprozeile]:=subtext(text(spalten),1,pos(text( +spalten),".")-1);.END PROC maskenwerteholenundausgeben;PROC objektklasseholen +:erfassungsfeld[zobjklname]:=getobjektklasse(int(erfassungsfeld[zobjklasse])) +;END PROC objektklasseholen;PROC selektionenzeigenvorbereiten(INT CONST +seitennr):bildschirmausgabenselektionsammeln(seitennr); +selektionsfeldersperren;freizeilenselektionloeschenEND PROC +selektionenzeigenvorbereiten;PROC bildschirmausgabenselektionsammeln(INT +CONST seitennr):INT VAR lvf;merkzeile:=maxselektionen+1;leseanfangindatei:=( +seitennr-1)*maxselektionen+1;FOR lvfFROM 1UPTO maxselektionenREP IF lvf+ +leseanfangindatei-1<=anzahlderdateizeilenTHEN toline(f,lvf+leseanfangindatei- +1);readrecord(f,zeile);erfassungsfeld[sersteselektion+(lvf-1)*2]:=subtext( +zeile,1,pos(zeile,zeilennrtrenner)-1);IF pos(zeile,vergleichtrenner)>0THEN +erfassungsfeld[serstervergleich+(lvf-1)*2]:=subtext(zeile,pos(zeile, +vergleichtrenner)+tl);FI ;ELSE merkzeile:=lvf;LEAVE +bildschirmausgabenselektionsammelnFI PER ;END PROC +bildschirmausgabenselektionsammeln;PROC selektionsfeldersperren:INT VAR lvf; +allefeldersperren(TRUE );FOR lvfFROM 1UPTO maxselektionenREP protect(maske, +serstervergleich+(lvf-1)*2,FALSE )PER END PROC selektionsfeldersperren;PROC +freizeilenselektionloeschen:INT VAR lv;FOR lvFROM merkzeileUPTO +maxselektionenREP erfassungsfeld[sersteselektion+(lv-1)*2]:=niltext; +erfassungsfeld[serstervergleich+(lv-1)*2]:=niltext;protect(maske, +serstervergleich+(lv-1)*2,TRUE )PER END PROC freizeilenselektionloeschen; +PROC zugriffezeigenvorbereiten(INT CONST seitennr): +bildschirmausgabenzugriffsammeln(seitennr);zugriffsfeldersperren; +freizeilenzugriffloeschenEND PROC zugriffezeigenvorbereiten;PROC +bildschirmausgabenzugriffsammeln(INT CONST seitennr):INT VAR lvf;merkzeile:= +maxzugriffe+1;leseanfangindatei:=(seitennr-1)*maxzugriffe+1;FOR lvfFROM 1 +UPTO maxzugriffeREP IF lvf+leseanfangindatei-1<=anzahlderdateizeilenTHEN +toline(f,lvf+leseanfangindatei-1);readrecord(f,zeile);erfassungsfeld[znummer+ +(lvf-1)*3]:=subtext(zeile,1,pos(zeile,anzahltrenner)-1);erfassungsfeld[ +zersterzugriff+(lvf-1)*3]:=subtext(zeile,pos(zeile,namentrenner)+tl,pos(zeile +,zeilennrtrenner)-1);IF pos(zeile,vergleichtrenner)>0THEN erfassungsfeld[ +zerstervergleich+(lvf-1)*3]:=subtext(zeile,pos(zeile,vergleichtrenner)+tl); +ELSE erfassungsfeld[zerstervergleich+(lvf-1)*3]:=niltextFI ;ELSE merkzeile:= +lvf;LEAVE bildschirmausgabenzugriffsammelnFI PER ;.END PROC +bildschirmausgabenzugriffsammeln;PROC zugriffsfeldersperren:INT VAR lvf; +allefeldersperren(TRUE );FOR lvfFROM 1UPTO maxzugriffeREP protect(maske, +zerstervergleich+(lvf-1)*3,FALSE )PER END PROC zugriffsfeldersperren;PROC +freizeilenzugriffloeschen:INT VAR lv;FOR lvFROM merkzeileUPTO maxzugriffeREP +erfassungsfeld[znummer+(lv-1)*3]:=niltext;erfassungsfeld[zersterzugriff+(lv-1 +)*3]:=niltext;erfassungsfeld[zerstervergleich+(lv-1)*3]:=niltext;protect( +maske,zerstervergleich+(lv-1)*3,TRUE )PER END PROC freizeilenzugriffloeschen; +PROC datenseiteraufoderrunter(INT CONST wie):IF wie=vorwaertsTHEN datenseite +INCR 1ELSE datenseiteDECR 1FI ;END PROC datenseiteraufoderrunter;PROC +datenseiterunteroderrauf(INT CONST wie):IF wie=vorwaertsTHEN datenseiteDECR 1 +ELSE datenseiteINCR 1FI END PROC datenseiterunteroderrauf;PROC +angabenloeschen(INT CONST was):SELECT wasOF CASE nameundtyp: +nameundtyploeschenCASE zugriffsregeln:zugriffsregelloeschenCASE +druckvariablen:druckvariableloeschenEND SELECT .nameundtyploeschen:delform( +getactivformular);forget(getformtextname,quiet);forget(filenamedata+text( +getactivformular),quiet);delete(dnrida).zugriffsregelloeschen:deleteregel( +regelnr);sichernundhilfsfilesloeschen;.druckvariableloeschen:putsteuercode( +int(erfassungsfeld[dvnummer]),niltext,0,FALSE ,FALSE ); +sichernundhilfsfilesloeschen.END PROC angabenloeschen;PROC allefeldersperren( +BOOL CONST freigabe):INT VAR lv;FOR lvFROM fnrerstesausgabefeldUPTO +letztesmaskenfeld[zuwas]+5REP protect(maske,lv,freigabe)PER ;protect(maske, +letztesmaskenfeld[zuwas]+1,TRUE );startpos:=fnrerstesausgabefeld;END PROC +allefeldersperren;PROC changeinfile(TEXT CONST fname,vorher,nachher):INT VAR +lv;f:=sequentialfile(modify,fname);FOR lvFROM 1UPTO lines(f)REP toline(f,lv); +readrecord(f,zeile);changeall(zeile,vorher,nachher);writerecord(f,zeile)PER ; +toline(f,1)END PROC changeinfile;PROC druckdefinitiondrucken: +druckenderdefinition:=TRUE ;zugriffsregelgibtesbereits:=TRUE ;meldeauffaellig +(aktuellemaske,meldungsammelndruckdef);druckdefinitionzusammenstellen(PROC ( +INT CONST )maskenwerteholenundausgeben,erfassungsfeld);meldeauffaellig( +aktuellemaske,meldungdruckendruckdef);sichernundhilfsfilesloeschen; +nummerderdruckausgabe:=niltext;druckenderdefinition:=FALSE ; +zugriffsregelgibtesbereits:=FALSE ;rueckschrittevorproc(1)#dr16.12.87#END +PROC druckdefinitiondrucken;BOOL PROC erlaubteregeleingabe:LET maxeingabe=10; +(nummernummerisch(erfassungsfeld[zobjklasse])CAND int(erfassungsfeld[ +zobjklasse])>1CAND int(erfassungsfeld[zobjklasse])<=maxeingabeCAND +getobjektklasse(int(erfassungsfeld[zobjklasse]))<>niltext)CAND ( +nummernummerisch(erfassungsfeld[zregelnr])CAND int(erfassungsfeld[zregelnr])> +0CAND int(erfassungsfeld[zregelnr])<=maxeingabe)END PROC erlaubteregeleingabe +;BOOL PROC erlaubtevariableneingabe:LET maxeingabe=100;(nummernummerisch( +erfassungsfeld[dvnummer])CAND int(erfassungsfeld[dvnummer])>0CAND int( +erfassungsfeld[dvnummer])<=maxeingabe)END PROC erlaubtevariableneingabe;PROC +eventuellmeldungausgeben:IF meldungstext<>niltextTHEN meldeauffaellig( +aktuellemaske,meldungstext);meldungstext:=niltext;FI END PROC +eventuellmeldungausgeben;PROC eventuellmeldungbeilistenabarbeitung:IF +druckausgabelistenauswahlTHEN meldeauffaellig(aktuellemaske,meldungstext); +kurzepause;meldungstext:=niltext;enter(1)ELSE IF listederdruckausgabengezeigt +CAND (zuwas=zugriffsregelnOR zuwas=druckvariablen)CAND NOT ( +druckausgabelistenauswahl)THEN zurueckzurbearbeitung(2)ELSE +rueckschrittevorproc(2)FI ;FI .kurzepause:pause(10).END PROC +eventuellmeldungbeilistenabarbeitung;PROC feldschutzfestlegen(INT CONST abwo) +:INT VAR lv;protect(maske,1,TRUE );FOR lvFROM abwoUPTO letztesmaskenfeld[ +zuwas]REP protect(maske,lv,TRUE )PER END PROC feldschutzfestlegen;PROC +feldschutzfuerbearbeitungfestlegen(INT CONST wozu):protect(maske,1,TRUE ); +SELECT wozuOF CASE zugriffsregeln:feldschutzfestlegen(fnrerstesausgabefeld+2) +CASE druckvariablen:feldschutzfestlegen(fnrerstesausgabefeld+1)OTHERWISE : +allefeldersperren(FALSE )END SELECT ;END PROC +feldschutzfuerbearbeitungfestlegen;PROC loeschfeldverdecken:LET rahmenzeichen +="=";put(aktuellemaske,rahmenzeichen,letztesmaskenfeld[zuwas]+1);END PROC +loeschfeldverdecken;TEXT PROC meldungseinschub:TEXT VAR t;SELECT zuwasOF +CASE zugriffsregeln:t:="zur Regel k"+compress(erfassungsfeld[zobjklasse])+"r" ++compress(erfassungsfeld[zregelnr])CASE druckvariablen:t:= +"zur Druckvariablen "+erfassungsfeld[dvnummer]OTHERWISE :t:= +"zur Druckausgabe "+text(getactivformular)END SELECT ;tEND PROC +meldungseinschub;PROC standardfelderfuellen:INT VAR lv;FOR lvFROM 1UPTO +letztesmaskenfeld[zuwas]REP standardmaskenfeld(erfassungsfeld[lv],(lv))PER +END PROC standardfelderfuellen;END PACKET ispidadefinieren; + diff --git a/app/schulis/2.2.1/src/6.ida.druck b/app/schulis/2.2.1/src/6.ida.druck new file mode 100644 index 0000000..d24c0cd --- /dev/null +++ b/app/schulis/2.2.1/src/6.ida.druck @@ -0,0 +1,261 @@ +PACKET idadruckDEFINES listendruck,ausdruckauswerten,bschirm,drucker, +namederdruckausgabe,namederdruckausgabeohne,druckausgabeausgeben,ruecksprung, +zurueck,postext,seitenweise:LET linkeklammer="<",rechteklammer=">", +platzhalter="�",linefeed="
",trenner=" ",kzkosmetik="#",kzseitenzahl="%", +ddrucker=1,dbschirm=2,mlddrucken=58,mldaufb=190;TEXT VAR filename:= +"ISP-Liste";INT CONST drucker:=ddrucker,bschirm:=dbschirm;FILE VAR ausgfile; +INT VAR dbauswertung,anzzeilen,zeilenzaehler:=0,fusszeilen:=0,kopfzeilen:=0, +aktuelleseite:=0,aktuellerds:=0,zeilenlaenge,verbund;BOOL VAR tupelbearbeitet +,isppageform:=FALSE ;TEXT VAR restderletztenzeile:="";TEXT VAR schriftart:="" +,kopfbereich:="",fussbereich:="",kosmetikbereich:="zzzz";REAL VAR links,oben; +#nurtest!!!!!!PROC standardmeldung(INT CONST mldaufb,TEXT CONST t):fehler( +"MELDUNG: "+text(mldaufb)+" "+t)ENDPROC standardmeldung;PROC editiere(TEXT +CONST fname,BOOL CONST f):edit(fname)ENDPROC editiere;PROC enter(INT CONST i) +:ENDPROC enter;#PROC seitenweise(BOOL CONST jn):isppageform:=jnENDPROC +seitenweise;BOOL PROC seitenweise:isppageformENDPROC seitenweise;TEXT PROC +rechtscompress(TEXT CONST zeile):TEXT VAR z:=zeile;INT VAR p:=length(zeile); +WHILE p>0CAND (zSUB p)=trennerREP pDECR 1PER ;z:=text(z,p);zENDPROC +rechtscompress;INT PROC bestimmevorhandeneblanks(TEXT CONST zeile):INT VAR +vorhandeneblanks:=0,i;FOR iFROM 1UPTO length(zeile)REP IF (zeileSUB i)= +trennerTHEN vorhandeneblanksINCR 1FI UNTIL (zeileSUB i)<>trennerPER ; +vorhandeneblanksENDPROC bestimmevorhandeneblanks;TEXT PROC +textmitfuehrendenblanks(TEXT CONST z,INT CONST anzblanks):INT VAR +vorhandeneblanks:=0;TEXT VAR zeile:=z;vorhandeneblanks:= +bestimmevorhandeneblanks(zeile);IF vorhandeneblanks>anzblanksTHEN +zeilekuerzenELSE mitblanksauffuellenFI ;zeile.zeilekuerzen:zeile:=subtext( +zeile,vorhandeneblanks-anzblanks).mitblanksauffuellen:zeile:=(anzblanks- +vorhandeneblanks)*trenner+zeile.ENDPROC textmitfuehrendenblanks;TEXT PROC +aktfilename:IF aktuellerds=0THEN filenameELSE filename+"."+text(aktuellerds) +FI ENDPROC aktfilename;PROC schreibebereich(TEXT CONST bereich,BOOL CONST +kopf):INT VAR von:=0,bis;TEXT VAR zeile:="";bis:=pos(bereich,linefeed);WHILE +bis>0REP zeile:=subtext(bereich,von+1,bis-1);IF kopfTHEN changeall(zeile, +kzseitenzahl,text(aktuelleseite));zeilenzaehlerINCR 1FI ;putline(ausgfile, +zeile);von:=bis;bis:=pos(bereich,linefeed,von+1);PER ENDPROC schreibebereich; +PROC schreibekopf:schreibebereich(kopfbereich,TRUE )ENDPROC schreibekopf; +PROC schreibefuss:schreibebereich(fussbereich,FALSE )ENDPROC schreibefuss; +PROC seitenvorschub:schreibefuss;IF filefastvollTHEN ausgabedateianlegenELSE +putline(ausgfile,"#page#")FI ;zeilenzaehler:=0;aktuelleseiteINCR 1; +schreibekopf.filefastvoll:lines(ausgfile)>=3000COR storage(old(aktfilename))> +700.ENDPROC seitenvorschub;PROC pageeinfuegen:putline(ausgfile,"#page#"); +zeilenzaehler:=0;ENDPROC pageeinfuegen;PROC zeilenvorschubundfussdrucken: +WHILE zeilenzaehler<anzzeilen-fusszeilenREP putline(ausgfile,""); +zeilenzaehlerINCR 1PER ;schreibefussENDPROC zeilenvorschubundfussdrucken; +PROC putlein(TEXT CONST zeile,BOOL CONST nurkosmetik):IF seitenweiseTHEN IF +NOT nurkosmetikCAND zeilenzaehler=anzzeilen-fusszeilenTHEN seitenvorschubFI +ELSE IF zeilenzaehler=anzzeilen-fusszeilen-kopfzeilenTHEN pageeinfuegenFI FI +;putline(ausgfile,zeile);zeilenzaehlerINCR 1ENDPROC putlein;PROC putzeile( +TEXT CONST zeile):TEXT VAR auszeile:="";BOOL CONST blocksatz:=(zeileSUB +length(zeile))=trenner;INT VAR trennpos,linkerrand;IF length( +restderletztenzeile)>0THEN auszeile:=restderletztenzeile;IF +keintrennerzwischenzeilenTHEN auszeileCAT trennerFI FI ;auszeileCAT zeile; +restderletztenzeile:="";IF length(auszeile)<=zeilenlaengeTHEN putlein( +auszeile,FALSE )ELSE bestimmelinkenrand;WHILE length(auszeile)>zeilenlaenge +REP trennpositionbestimmen;zeileausgebenundkürzen;PER ;IF length(auszeile)>0 +THEN IF blocksatzTHEN putlein(auszeile,FALSE )ELSE restderletztenzeile:= +textmitfuehrendenblanks(auszeile,linkerrand)FI FI FI . +keintrennerzwischenzeilen:(restderletztenzeileSUB length(restderletztenzeile) +)<>trennerCAND (zeileSUB 1)<>trenner.bestimmelinkenrand:linkerrand:= +bestimmevorhandeneblanks(auszeile);.trennpositionbestimmen:trennpos:= +zeilenlaenge;WHILE trennpos>linkerrandCAND (auszeileSUB trennpos)<>trenner +REP trennposDECR 1PER ;IF trennpos<=linkerrandTHEN trennpos:=max(zeilenlaenge +,linkerrand+1);WHILE trennpos<=length(auszeile)CAND (auszeileSUB trennpos)<> +trennerREP trennposINCR 1PER ;FI .zeileausgebenundkürzen:putlein( +rechtscompress(text(auszeile,trennpos-1)),FALSE );auszeile:=compress(subtext( +auszeile,trennpos+1));IF length(auszeile)>0THEN auszeile:= +textmitfuehrendenblanks(auszeile,linkerrand)FI .ENDPROC putzeile;PROC +nextergebnistupel:INT VAR dnr;qsucc(verbund,dnr);tupelbearbeitet:=FALSE ; +verbund:=gettiefennr(verbund);IF dbstatus=endoffileCAND dbauswertung= +ordernewstackTHEN auswertungfortsetzen;dbauswertung:=dbstatus;qsucc(verbund, +dnr);verbund:=gettiefennr(verbund);FI ENDPROC nextergebnistupel;TEXT PROC +sonderfunktion(TEXT CONST stcode):TEXT VAR t:=stcode,ausdruck:=stcode;IF ( +ausdruckSUB 1)=linkeklammerTHEN deletechar(ausdruck,1)FI ;IF (ausdruckSUB +length(ausdruck))=rechteklammerTHEN deletechar(ausdruck,length(ausdruck))FI ; +IF ausdruck="tagesdatum"THEN t:=dateELIF ausdruck="tag"THEN t:=day(date(date) +)ELIF ausdruck="monat"THEN t:=month(date(date))ELIF ausdruck="jahr"THEN t:= +year(date(date))ELIF ausdruck="zeit"THEN t:=timeofdayELIF ausdruck="tt"THEN t +:=text(date,2)ELIF ausdruck="mm"THEN t:=subtext(date,4,5)ELIF ausdruck="jj" +THEN t:=subtext(date,7)FI ;tENDPROC sonderfunktion;TEXT PROC +aufbereitetezeile(TEXT CONST zeile,einfuegstellen):TEXT VAR auszeile:="", +auswert:="",ausdruck:="";INT VAR p:=1,pp,ppalt:=1,ix,laenge;BOOL VAR rbuendig +,druckvar;pp:=pos(zeile,platzhalter,ppalt);WHILE pp>0REP auszeileCAT subtext( +zeile,ppalt,pp-1);ix:=decodezahl(einfuegstellen,p);IF ix>0THEN getsteuercode( +ix,ausdruck,laenge,rbuendig,druckvar);IF druckvarTHEN auswert:= +ausdruckauswerten(ausdruck);aufbereitenundschreiben;ELSE auswert:= +sonderfunktion(ausdruck);aufbereitenundschreiben;FI FI ;ppalt:=pp+1;pp:=pos( +zeile,platzhalter,ppalt);PER ;auszeileCAT subtext(zeile,ppalt);auszeile. +aufbereitenundschreiben:IF laenge>0THEN IF length(auswert)>=laengeCOR NOT +rbuendigTHEN auswert:=text(auswert,laenge)ELSE auswert:=((laenge-length( +auswert))*" ")+auswertFI ;FI ;auszeileCAT auswert.ENDPROC aufbereitetezeile; +PROC druckezeile(TEXT CONST zeile,einfuegstellen):putzeile(aufbereitetezeile( +zeile,einfuegstellen))ENDPROC druckezeile;PROC druckeblock(INT CONST blocknr) +:INT VAR aktzeile:=1,pb,pz,nextblock,nextblockvorzeile;REP IF aktzeile=1CAND +verbund=blocknrTHEN tupelbearbeitet:=TRUE FI ;pb:=1;pz:=1;bestimmeunterblock; +WHILE aktzeile<=getzeilenanzahl(blocknr)COR aktzeile=nextblockvorzeileREP IF +aktzeile=nextblockvorzeileTHEN IF verbund<nextblockCAND tupelbearbeitetTHEN +nextergebnistupelFI ;IF verbund=nextblockTHEN druckeblock(nextblock);FI ; +bestimmeunterblock;ELSE IF NOT (seitenweiseCAND innerhalbkosmetikbereich) +THEN druckezeile(getzeile(blocknr,aktzeile),geteinfuegstellen(blocknr, +aktzeile));IF innerhalbkosmetikbereichTHEN zeilenzaehlerDECR 1FI FI ;aktzeile +INCR 1;FI ;PER ;aktzeile:=1;IF tupelbearbeitetTHEN nextergebnistupel;IF +verbund<>blocknrTHEN LEAVE druckeblockFI ELIF verbund<>blocknrTHEN LEAVE +druckeblockFI UNTIL blocknr=0PER .innerhalbkosmetikbereich:(blocknr=0)CAND (( +aktzeile>=code(kosmetikbereichSUB 1)CAND aktzeile<=code(kosmetikbereichSUB 2) +)COR (aktzeile>=code(kosmetikbereichSUB 3)CAND aktzeile<=code(kosmetikbereich +SUB 4))).bestimmeunterblock:nextblock:=decodezahl(getunterbloecke(blocknr),pb +);nextblockvorzeile:=decodezahl(getvorzeilennr(blocknr),pz);.ENDPROC +druckeblock;PROC listendruck(INT CONST nr):listendruck(nr,bschirm)ENDPROC +listendruck;PROC ausgabedateianlegen:aktuellerdsINCR 1;forget(aktfilename, +quiet);ausgfile:=sequentialfile(output,aktfilename);putlein(schrifttyp,TRUE ) +;putlein(startanweisung,TRUE );zeilenzaehler:=0.schrifttyp:IF schriftart="" +THEN ""ELSE "#type ("""+schriftart+""")#"FI .startanweisung:"#start("+text( +links)+","+text(oben)+")# ".ENDPROC ausgabedateianlegen;PROC +headundbottommerken:#block(0)nachheadundbottomuntersuchen#INT VAR aktzeile:=1 +,p;TEXT VAR ausdruck:="",zeile:="";kopfzeilen:=0;fusszeilen:=0;kopfbereich:= +"";fussbereich:="";kosmetikbereich:="zzzz";WHILE aktzeile<=getzeilenanzahl(0) +REP zeile:=getzeile(0,aktzeile);aktzeileINCR 1;p:=pos(zeile,kzkosmetik);IF p> +0THEN ausdruckeinlesen;IF ausdruck="head"THEN kopfeinlesenELIF ausdruck= +"bottom"THEN fusseinlesenFI ;FI ;PER .ausdruckeinlesen:ausdruck:=compress( +subtext(zeile,p+1,pos(zeile,kzkosmetik,p+1)-1)).bereichsende:p:=pos(zeile, +kzkosmetik);IF p>0THEN ausdruckeinlesen;pos(";head;bottom;end;",";"+ausdruck+ +";")>0ELSE FALSE FI .kopfeinlesen:replace(kosmetikbereich,1,code(aktzeile-1)) +;REP zeile:=getzeile(0,aktzeile);aktzeileINCR 1;IF bereichsendeTHEN replace( +kosmetikbereich,2,code(aktzeile-1));LEAVE kopfeinlesenELSE kopfzeilenINCR 1; +zeile:=aufbereitetezeile(zeile,geteinfuegstellen(0,aktzeile-1));kopfbereich +CAT (zeile+linefeed)FI PER .fusseinlesen:replace(kosmetikbereich,3,code( +aktzeile-1));REP zeile:=getzeile(0,aktzeile);aktzeileINCR 1;IF bereichsende +THEN replace(kosmetikbereich,4,code(aktzeile-1));LEAVE fusseinlesenELSE +fusszeilenINCR 1;zeile:=aufbereitetezeile(zeile,geteinfuegstellen(0,aktzeile- +1));fussbereichCAT (zeile+linefeed)FI PER .ENDPROC headundbottommerken;PROC +listendruck(INT CONST nr,INT CONST medium):REAL VAR limit;INT VAR fontnr:=0; +getdruckaufbereitung(schriftart,links,oben,anzzeilen,limit);schriftartpruefen +;zeilenlaenge:=int(limit);#IF seitenweiseTHEN #headundbottommerken; +aktuelleseite:=1;aktuellerds:=-1;ausgabedateianlegen;IF seitenweiseTHEN +schreibekopfFI ;auswertung("QUERY."+text(nr));dbauswertung:=dbstatus; +restderletztenzeile:="";verbund:=-1;tupelbearbeitet:=TRUE ;druckeblock(0);IF +length(restderletztenzeile)>0THEN putzeile("")FI ;IF seitenweiseCAND +fusszeilen>0THEN zeilenvorschubundfussdruckenFI ;druckegesamtliste. +schriftartpruefen:disablestop;fontnr:=font(schriftart);IF iserrorTHEN +schriftart:="";clearerror;ELIF fontnr=0THEN schriftart:=font(1)FI ;enablestop +.druckegesamtliste:BOOL VAR cd:=commanddialogue;INT VAR i;IF seitenweiseCOR +schriftart=""THEN druckausgabeausgeben(filename,medium);IF seitenweiseCAND +aktuellerds>0CAND medium=druckerTHEN FOR iFROM 1UPTO aktuellerdsREP +druckausgabeausgeben(filename,medium);PER FI ELSE sysout("dummy"); +commanddialogue(FALSE );standardmeldung(mldaufb,"");autopageform(filename); +forget(filename,quiet);sysout("");forget("dummy",quiet);commanddialogue(cd); +druckausgabeausgeben(filename+".p",medium)FI .ENDPROC listendruck;TEXT PROC +namederdruckausgabeohne:filenameENDPROC namederdruckausgabeohne;TEXT PROC +namederdruckausgabe:filename+".p"ENDPROC namederdruckausgabe;PROC +namederdruckausgabe(TEXT CONST fname):filename:=fnameENDPROC +namederdruckausgabe;PROC druckausgabeausgeben(TEXT CONST fname,INT CONST +medium):SELECT mediumOF CASE dbschirm:caufanfang;editiere(fname,FALSE );CASE +ddrucker:standardmeldung(mlddrucken,"");print(fname);enter(1)OTHERWISE : +errorstop("Falscher Druck-Code")ENDSELECT ;zurueck.caufanfang:FILE VAR f:= +sequentialfile(modify,fname);toline(f,1).ENDPROC druckausgabeausgeben;BOOL +VAR rueck:=FALSE ;PROC zurueck:rueck:=TRUE ENDPROC zurueck;BOOL PROC +ruecksprung:BOOL VAR b:=rueck;rueck:=FALSE ;bENDPROC ruecksprung;LET +parametergrenze="%",parametertrennzeichen="#",otherwise="*",niltext="", +textbegrenzer="""";INT PROC postextende(TEXT CONST ausgabe,INT CONST +aktuelleposition):INT VAR neupos:=aktuelleposition+1;WHILE (ausgabeSUB neupos +)<>textbegrenzerREP neuposINCR 1;IF (ausgabeSUB neupos)=textbegrenzerCAND ( +ausgabeSUB neupos+1)=textbegrenzerTHEN neuposINCR 2;FI ;UNTIL neupos>length( +ausgabe)PER ;neupos+1ENDPROC postextende;INT PROC postext(TEXT CONST source, +pattern,INT CONST from):INT VAR p:=from;WHILE (sourceSUB p)<>patternREP +nextcharUNTIL p>length(source)PER ;#9.12.87#IF p>length(source)THEN 0ELSE p +FI .nextchar:IF (sourceSUB p)=textbegrenzerTHEN p:=postextende(source,p)ELSE +pINCR 1;#9.12.87#FI .ENDPROC postext;TEXT PROC dbwert(TEXT CONST feldname, +BOOL VAR textvergleich):LET null="0",nulldatum="01.01.00";TEXT VAR ausgabe:= +"";INT CONST fnr:=feldnr(compress(feldname));IF fnr>0THEN ausgabe:=wert(fnr); +IF ((feldtyp(fnr)=intfeld)CAND (ausgabe=null))COR ((feldtyp(fnr)=datumfeld) +CAND (ausgabe=nulldatum))THEN ausgabe:=""FI ;textvergleich:=NOT (feldtyp(fnr) +=realfeldCOR feldtyp(fnr)=intfeld)ELSE textvergleich:=TRUE FI ;ausgabeEND +PROC dbwert;TEXT PROC auswerten(TEXT CONST eingabe):INT VAR +positionlinkeklammer:=1,positionrechteklammer:=1,positionlinkeskreuz, +positionrechteskreuz,positionmittlereskreuz,positionparametergrenze, +aktuelleposition:=1,positionotherwise,anzahldergeoeffnetenklammern;BOOL VAR +ausdruckvorhanden,caseaufruf,linkeseitevariabel,rechteseitevariabel, +textvergleich;TEXT VAR puffer,vergleichswert,aktuellessymbol,parameter1, +ausgabe:=compress(eingabe);REP zeichenketteueberlesen; +auffindeneinesspitzgeklammertenausdrucks;IF ausdruckvorhandenTHEN +bestimmungdesfeldnamensfuerdieprozedurdbwert;aufrufderprozedurdbwert;IF +caseaufrufTHEN bestimmungderrichtigenalternativeFI ; +einsetzendesfeldwertsoderderalternative;FI ;UNTIL NOT ausdruckvorhandenPER ; +ausgabe.zeichenketteueberlesen:INT VAR p:=aktuelleposition;#1#BOOL VAR +innerhalbzeichenkette:=TRUE ;IF (ausgabeSUB p)=linkeklammerTHEN pINCR 1;FI ; +IF aktuelleszeichenisttextbegrenzerTHEN WHILE innerhalbzeichenketteREP REP +UNTIL textendeCOR aktuelleszeichenisttextbegrenzerPER ;IF NOT textendeCAND ( +ausgabeSUB p)=textbegrenzerTHEN innerhalbzeichenkette:=TRUE ;pINCR 1ELSE +innerhalbzeichenkette:=FALSE ;FI PER ;pDECR 1;aktuelleposition:=p; +leerzeichenentfernen;FI .aktuelleszeichenisttextbegrenzer:IF (ausgabeSUB p)= +textbegrenzerTHEN deletechar(ausgabe,p);TRUE ELSE pINCR 1;FALSE FI .textende: +p>length(ausgabe).leerzeichenentfernen:WHILE (ausgabeSUB p)=" "REP deletechar +(ausgabe,p)PER .auffindeneinesspitzgeklammertenausdrucks:#aktuelleposition:=0 +;#linkeseitevariabel:=FALSE ;rechteseitevariabel:=FALSE ;aktuelleposition:= +pos(ausgabe,linkeklammer,aktuelleposition);ausdruckvorhanden:= +aktuelleposition<>0;positionlinkeklammer:=aktuelleposition. +bestimmungdesfeldnamensfuerdieprozedurdbwert: +ueberpruefeoblinkeseitedoppeltgeklammert;bestimmedenfeldnamen;IF +aktuellessymbol=rechteklammerTHEN caseaufruf:=FALSE ;fuehreleseoperationaus; +ueberpruefeobrechteseitedoppeltgeklammertELSE caseaufruf:=TRUE ; +positionparametergrenze:=aktuellepositionFI .fuehreleseoperationaus: +aktuellepositionINCR 1;IF aktuelleposition>length(ausgabe)THEN +aktuellessymbol:=rechteklammerELSE aktuellessymbol:=ausgabeSUB +aktuelleposition;FI ;IF aktuellessymbol=linkeklammerTHEN +anzahldergeoeffnetenklammernINCR 1ELIF aktuellessymbol=rechteklammerTHEN +anzahldergeoeffnetenklammernDECR 1FI .fuehreleseoperationausmittextueberlesen +:aktuellepositionINCR 1;IF (ausgabeSUB aktuelleposition)=textbegrenzerTHEN +aktuelleposition:=postextende(ausgabe,aktuelleposition)FI ;IF +aktuelleposition>length(ausgabe)THEN aktuellessymbol:=rechteklammerELSE +aktuellessymbol:=ausgabeSUB aktuelleposition;FI ;IF aktuellessymbol= +linkeklammerTHEN anzahldergeoeffnetenklammernINCR 1ELIF aktuellessymbol= +rechteklammerTHEN anzahldergeoeffnetenklammernDECR 1FI . +ueberpruefeoblinkeseitedoppeltgeklammert:fuehreleseoperationaus; +linkeseitevariabel:=aktuellessymbol=linkeklammer.bestimmedenfeldnamen:WHILE +NOT (aktuellessymbol=parametertrennzeichenOR aktuellessymbol=parametergrenze +OR aktuellessymbol=rechteklammer)REP fuehreleseoperationausPER ;IF +linkeseitevariabelTHEN parameter1:=(subtext(ausgabe,positionlinkeklammer+2, +aktuelleposition-1))ELSE parameter1:=(subtext(ausgabe,positionlinkeklammer+1, +aktuelleposition-1))FI .ueberpruefeobrechteseitedoppeltgeklammert:IF +aktuellessymbol=rechteklammerTHEN rechteseitevariabel:=TRUE ; +positionrechteklammer:=aktuellepositionELSE positionrechteklammer:= +aktuelleposition-1FI .aufrufderprozedurdbwert:puffer:=dbwert(parameter1, +textvergleich).bestimmungderrichtigenalternative: +bestimmungdeserstenvergleichswertes;WHILE +vergleichswertstimmtnichtuebereinundeinweiterervorhandenREP +suchenaechstenvergleichswertPER ;positionrechteklammerbeicaseaufrufbestimmen; +IF vergleichswertstimmtmitdemergebnisausdemdbwertaufrufuebereinTHEN +bereitstellenderentsprechendenalternativeELIF (ausgabeSUB positionotherwise)= +otherwiseTHEN puffer:=auswerten(subtext(ausgabe,positionotherwise+1, +positionrechteklammer-1))ELSE bereitstelleneinerleerenalternativeFI . +bestimmungdeserstenvergleichswertes:positionlinkeskreuz:= +positionparametergrenze;positionmittlereskreuz:=postext(ausgabe, +parametertrennzeichen,positionlinkeskreuz+1);vergleichswert:=subtext(ausgabe, +positionlinkeskreuz+1,positionmittlereskreuz-1);rechteskreuzbestimmen. +suchenaechstenvergleichswert:positionlinkeskreuz:=positionrechteskreuz; +positionmittlereskreuz:=postext(ausgabe,parametertrennzeichen, +positionlinkeskreuz+1);vergleichswert:=subtext(ausgabe,positionlinkeskreuz+1, +positionmittlereskreuz-1);rechteskreuzbestimmen.rechteskreuzbestimmen: +aktuelleposition:=positionmittlereskreuz;anzahldergeoeffnetenklammern:=0;REP +fuehreleseoperationausmittextueberlesenUNTIL (anzahldergeoeffnetenklammern=0 +AND (aktuellessymbol=parametertrennzeichenOR aktuellessymbol=otherwise))OR +anzahldergeoeffnetenklammern<0PER ;positionrechteskreuz:=aktuelleposition; +positionotherwise:=aktuelleposition. +vergleichswertstimmtmitdemergebnisausdemdbwertaufrufueberein:IF textvergleich +THEN vergleichswert=pufferELSE real(vergleichswert)=real(puffer)FI . +bereitstellenderentsprechendenalternative:puffer:=auswerten(subtext(ausgabe, +positionmittlereskreuz+1,positionrechteskreuz-1)). +bereitstelleneinerleerenalternative:puffer:=niltext. +vergleichswertstimmtnichtuebereinundeinweiterervorhanden:NOT +vergleichswertstimmtmitdemergebnisausdemdbwertaufrufuebereinAND +einweiterervergleichswertistvorhanden.einweiterervergleichswertistvorhanden: +aktuellessymbol=parametertrennzeichen. +positionrechteklammerbeicaseaufrufbestimmen:anzahldergeoeffnetenklammern:=0; +IF aktuellessymbol<>rechteklammerTHEN WHILE NOT (anzahldergeoeffnetenklammern +<0AND aktuellessymbol=rechteklammer)REP +fuehreleseoperationausmittextueberlesenPER FI ;positionrechteklammer:= +aktuelleposition.einsetzendesfeldwertsoderderalternative:change(ausgabe, +positionlinkeklammer,positionrechteklammer,puffer).ENDPROC auswerten;TEXT +PROC ausdruckauswerten(TEXT CONST ausdruck):TEXT VAR eingabe:=ausdruck;IF ( +eingabeSUB 1)<>linkeklammerTHEN insertchar(eingabe,linkeklammer,1)FI ;IF ( +eingabeSUB (length(eingabe)))<>rechteklammerTHEN eingabeCAT rechteklammerFI ; +auswerten(eingabe)ENDPROC ausdruckauswerten;ENDPACKET idadruck; + diff --git a/app/schulis/2.2.1/src/6.ida.eingang b/app/schulis/2.2.1/src/6.ida.eingang new file mode 100644 index 0000000..c4de3f7 --- /dev/null +++ b/app/schulis/2.2.1/src/6.ida.eingang @@ -0,0 +1,87 @@ +PACKET idaeingangsbildschirmDEFINES generieredruckausgabe, +eingangsbildschirmdarstellen#,putdrucktyp,putdruckindex#:LET maskennamelehrer +="mdr lehrerweise dr eingang",maskennameeinzeln= +"mdr einzelobjekt druckausgabe eingang";LET maxfeld=8,wartemeldnr=69, +auswahlnichtkorrekt=188,auswahlnichteind=189,niltext="",mldnrformnichtda=262; +LET markiert="#";LET lehrer="Lehrer",schueler="Schüler";TEXT VAR +leitobjektklasse,scanwertlehrer;INT CONST primindex:=2;#(ROW maxfeldINT :(246 +,255,247,246,246,246,246,0),ROW maxfeldINT :(246,255,247,246,246,246,246,246) +);#ROW maxfeldINT VAR indicesschueler:=ROW maxfeldINT :(ixsustatfamrufgeb, +ixsustatjgst,ixsustatjgstzug,ixsustatfamrufgeb,ixsustatfamrufgeb, +ixsustatfamrufgeb,ixsustatfamrufgeb,ixsustatfamrufgeb);TEXT VAR maskenname:= +"";INT VAR letztenummerderdruckausgabe:=0;INT VAR druckinx,ankreuzfeld;INT +PROC druckindex:druckinxENDPROC druckindex;PROC putdruckindex(INT CONST dinx) +:druckinx:=dinxENDPROC putdruckindex;PROC eingangsbildschirmdarstellen:TEXT +VAR fname:="";INT VAR findex:=0,nochmeld;BOOL VAR ftyp; +setzelistederdruckausgabengezeigt(FALSE );IF ruecksprungTHEN ohnepruefung +ELSE mitpruefungFI .mitpruefung:IF listenweiseauswahlkorrektTHEN +letztenummerderdruckausgabe:=nummerderdruckausgabe;putdruckindex( +letztenummerderdruckausgabe);holeformular;namederdruckausgabe(getformularname +);#standardkopfmaskeaktualisieren(namederdruckausgabe);#maskedarstellen;FI . +ohnepruefung:putdruckindex(letztenummerderdruckausgabe);holeformular; +maskedarstellen.holeformular:setzenummerderdruckausgabe(text( +letztenummerderdruckausgabe));IF formexists(druckinx)THEN getform(druckinx) +ELSE formunvollstaendigFI ;#openformular(druckinx);bereitsinformularzerlegen! +#formularzerlegen(druckinx);IF getblockanzahl<1THEN formunvollstaendigFI ; +getformularinfo(fname,findex,ftyp);systemdboff.formunvollstaendig: +standardmeldung(mldnrformnichtda,niltext);return(1);LEAVE +eingangsbildschirmdarstellen.listenweiseauswahlkorrekt: +idaankreuzfelderpruefen.maskedarstellen:leitobjektklasse:=getobjektklasse(1); +IF leitobjektklasse=schuelerTHEN maskenname:=maskennameeinzelnELIF +leitobjektklasse=lehrerTHEN maskenname:=maskennamelehrerFI ;standardstartproc +(maskenname);standardkopfmaskeaktualisieren(namederdruckausgabeohne);nochmeld +:=nochmeldungauszugeben;IF nochmeld<>0THEN TEXT VAR drinx:=text(druckindex)+ +markiert;standardmeldung(nochmeld,drinx)FI ;standardnproc.END PROC +eingangsbildschirmdarstellen;PROC generieredruckausgabe(INT CONST medium): +INT VAR leitinx;generieredruck.generieredruck:IF leitobjektklasse=schueler +THEN leitinx:=leitindexschueler;ueberpruefeleitinx;putleitindex( +leitindexschueler);ELSE leitinx:=leitindexlehrer;ueberpruefeleitinx; +putleitindex(leitindexlehrer)FI ;putobjektklasse(1,leitobjektklasse);IF +leitobjektklasse=schuelerTHEN putscan(erzeugescan)ELSE putscan(scanwertlehrer +)FI ;erzeugequery(druckindex);standardmeldung(wartemeldnr,niltext); +listendruck(druckindex,medium).ueberpruefeleitinx:IF leitinx<=0THEN #return(1 +);#LEAVE generieredruckausgabeFI ;ENDPROC generieredruckausgabe;INT PROC +leitindexschueler:INT VAR wievielter;INT VAR i,leitinx,offset:=1;ankreuzfeld +:=0;pruefeeindeutigkeit;bestimmeindex;bestimmewievielterindex. +pruefeeindeutigkeit:FOR iFROM 2UPTO maxfeld+offsetREP IF standardmaskenfeld(i +)<>""THEN IF ankreuzfeld>0THEN #note("Feld : "+text(i)+" Inhalt : "+ +standardmaskenfeld(i));noteline;note("Ankreuzfeld : "+text(ankreuzfeld)); +noteline;#standardmeldung(auswahlnichteind,niltext);return(1);LEAVE +leitindexschuelerWITH (-1)ELSE ankreuzfeld:=iFI FI PER ;IF ankreuzfeld<=0 +THEN #note("Feld : "+text(i)+" Inhalt : "+standardmaskenfeld(i));noteline; +note("Ankreuzfeld : "+text(ankreuzfeld));noteline;#standardmeldung( +auswahlnichtkorrekt,niltext);return(1);LEAVE leitindexschuelerWITH (-2)FI . +bestimmeindex:leitinx:=indicesschueler[ankreuzfeld-1];. +bestimmewievielterindex:wievielter:=0;FOR iFROM firstindexUPTO firstfree-1 +REP IF dateinr(primdatid(i))=primindexTHEN wievielterINCR 1;IF i=leitinxTHEN +LEAVE leitindexschuelerWITH wievielterFI FI PER ;0ENDPROC leitindexschueler; +INT PROC leitindexlehrer:INT VAR status,leitinx;scanwertlehrer:=""; +standardpruefe(5,2,4,0,"",status);IF status<>0THEN standardmeldung( +auswahlnichtkorrekt,niltext);return(1);leitinx:=-1;ELSE IF standardmaskenfeld +(5)=""THEN IF standardmaskenfeld(2)<>""THEN leitinx:=dnrlehrerELIF +standardmaskenfeld(3)<>""THEN leitinx:=ixlfamrufELIF standardmaskenfeld(4)<> +""THEN infeld(5);standardmeldung(auswahlnichteind,niltext);return(1);leitinx +:=-1FI ;ELSE IF standardmaskenfeld(4)<>""THEN leitinx:=dnrlehrer; +scanwertlehrer:="<""";scanwertlehrerCAT standardmaskenfeld(5);scanwertlehrer +CAT """>";ELSE standardmeldung(auswahlnichtkorrekt,niltext);return(1);leitinx +:=-1;FI ;FI ;FI ;leitinxEND PROC leitindexlehrer;TEXT PROC erzeugescan:INT +VAR i,evteinzel:=0;evteinzel:=1;scanfuereinzel.scanfuereinzel:SELECT +ankreuzfeldOF CASE 2:"<""ls"">"CASE 3:statusjgstCASE 4:statusjgstzugCASE 5: +"<""ls"">"+evtschuelerCASE 6:"<""n05"">"+evtschuelerCASE 7:"<""n11"">"+ +evtschuelerCASE 8:"<""nso"">"+evtschuelerCASE 9:"<""abg"">"+evtschueler +OTHERWISE :""ENDSELECT .evtschueler:scantxt:="";FOR iFROM 12UPTO 14REP IF +standardmaskenfeld(i)<>""THEN scantxt:=scantxt+";"+"<"""+evtdatum+""">"ELSE +LEAVE evtschuelerWITH scantxtFI PER ;scantxt.evtdatum:IF i=14THEN +datumskonversion(standardmaskenfeld(i))ELSE standardmaskenfeld(i)FI . +statusjgst:IF standardmaskenfeld(9+evteinzel)<>""THEN "<""ls"">;<"""+ +jgstaufber(standardmaskenfeld(9+evteinzel))+""">"ELSE "<""ls"">"FI . +statusjgstzug:TEXT VAR scantxt:="";IF standardmaskenfeld(9+evteinzel)<>"" +THEN scantxt:="<""ls"">;<"""+jgstaufber(standardmaskenfeld(9+evteinzel))+ +""">";IF standardmaskenfeld(10+evteinzel)<>""THEN scantxt:=scantxt+";<"""+ +standardmaskenfeld(10+evteinzel)+""">"FI ;scantxtELSE "<""ls"">"FI .ENDPROC +erzeugescan;INT PROC nummerderdruckausgabe:TEXT VAR t;INT VAR i,lv;FOR lv +FROM 1UPTO 10REP IF standardmaskenfeld(lv*2#+1#)<>""THEN nummerermittelnFI +PER ;0.nummerermitteln:t:=standardmaskenfeld(lv*2+1);t:=subtext(t,1,pos(t, +" = ")-1);i:=int(t);LEAVE nummerderdruckausgabeWITH i.END PROC +nummerderdruckausgabe;ENDPACKET idaeingangsbildschirm; + diff --git a/app/schulis/2.2.1/src/6.ida.gen b/app/schulis/2.2.1/src/6.ida.gen new file mode 100644 index 0000000..c4d4eeb --- /dev/null +++ b/app/schulis/2.2.1/src/6.ida.gen @@ -0,0 +1,79 @@ +PACKET idagenDEFINES formularzerlegen,erzeugequery:LET platzhalter="�", +okkenner="k",linkeklammer="<",rechteklammer=">";FILE VAR formtext;TEXT VAR +zeile:="",blockstruktur:="";INT VAR lastblock:=0;TEXT PROC blockcode(INT +CONST objklasse,regel):"!"+text(objklasse)+"."+text(regel)+"!"ENDPROC +blockcode;BOOL PROC blockende(INT CONST objklasse,regel):pos(blockstruktur, +blockcode(objklasse,regel))>0ENDPROC blockende;PROC blockmerken(INT CONST +objklasse,regel):blockstrukturCAT blockcode(objklasse,regel)ENDPROC +blockmerken;PROC unterblockeintragen(INT CONST blocknr,unterblock):TEXT VAR +ub:=getunterbloecke(blocknr),vz:=getvorzeilennr(blocknr);INT VAR zeilennr:= +getzeilenanzahl(blocknr);ubCAT text(unterblock)+";";vzCAT text(zeilennr+1)+ +";";putunterbloecke(blocknr,ub);putvorzeilennr(blocknr,vz);ENDPROC +unterblockeintragen;PROC inaktuellenblockuebernehmen(TEXT CONST zeile,INT +CONST blocknr):TEXT VAR textzeile:=zeile,einfuegstellen:="";INT VAR zeilennr +:=getzeilenanzahl(blocknr)+1,vonp,bisp,stcodenr;druckvariablenersetzen; +putzeilenanzahl(blocknr,zeilennr);putzeile(blocknr,zeilennr,textzeile); +puteinfuegstellen(blocknr,zeilennr,einfuegstellen);.druckvariablenersetzen: +vonp:=pos(textzeile,linkeklammer);WHILE vonp>0REP bisp:=pos(textzeile, +rechteklammer,vonp+1);IF bisp=0THEN bisp:=length(textzeile)FI ;stcodenr:=int( +subtext(textzeile,vonp+1,bisp-1));einfuegstellenCAT text(stcodenr)+";";change +(textzeile,vonp,bisp,platzhalter);vonp:=pos(textzeile,linkeklammer);PER . +ENDPROC inaktuellenblockuebernehmen;PROC bearbeiteblock(INT CONST b):INT +CONST blocknr:=b;INT VAR p,bis,objklasse,regel;BOOL VAR eoformtext:=FALSE ; +putzeilenanzahl(blocknr,0);putunterbloecke(blocknr,"");putvorzeilennr(blocknr +,"");WHILE NOT eoformtextREP IF zugriffsregelgefundenTHEN okundregelbestimmen +;IF blockende(objklasse,regel)THEN LEAVE bearbeiteblockELSE blockmerken( +objklasse,regel);IF compress(zeile)=""CAND NOT eof(formtext)THEN getline( +formtext,zeile);FI ;lastblockINCR 1;unterblockeintragen(blocknr,lastblock); +putblockregelnummer(lastblock,getregelnummer(objklasse,regel));bearbeiteblock +(lastblock)FI ;ELSE inaktuellenblockuebernehmen(zeile,blocknr)FI ;IF eof( +formtext)THEN eoformtext:=TRUE ELSE getline(formtext,zeile);FI ;PER ;. +zugriffsregelgefunden:p:=pos(zeile,linkeklammer+okkenner);p>0. +okundregelbestimmen:bis:=p+2;objklasse:=int(zeileSUB bis);bisINCR 1;IF +istziffer(zeileSUB bis)THEN objklasse:=objklasse*10+int(zeileSUB bis);bis +INCR 1;FI ;IF (zeileSUB bis)=rechteklammerTHEN regel:=1ELSE regel:=int(zeile +SUB bis+1);bisINCR 2;IF istziffer(zeileSUB bis)THEN regel:=regel*10+int(zeile +SUB bis);bisINCR 1;FI ;FI ;change(zeile,p,bis,"").ENDPROC bearbeiteblock; +PROC formularzerlegen(INT CONST nr):openformular(nr);lastblock:=0; +blockstruktur:="";zeile:="";formtext:=sequentialfile(input,getformtextname); +IF NOT eof(formtext)THEN getline(formtext,zeile)FI ;IF eof(formtext)CAND +zeile=""THEN putzeilenanzahl(0,0);putunterbloecke(0,"");putvorzeilennr(0,""); +ELSE bearbeiteblock(0)FI ENDPROC formularzerlegen;BOOL PROC istziffer(TEXT +CONST t):pos("0123456789",t)>0END PROC istziffer;LET textbegrenzer="""", +klammerauf=" ( ",klammerzu=" ).",trenner=" / ",refinementname="verbund";FILE +VAR queryfile;TEXT PROC alstext(TEXT CONST t):textbegrenzer+t+textbegrenzer +ENDPROC alstext;TEXT PROC bestimmeindexname(TEXT CONST dateiname,INT CONST nr +):TEXT VAR n:=alstext(dateiname);INT VAR i,treffer:=0;IF nr>0CAND firstindex> +0THEN FOR iFROM firstindexUPTO firstfree-1REP IF name(dateinr(primdatid(i)))= +dateinameTHEN trefferINCR 1FI ;IF treffer=nrTHEN n:=n+" BY "+alstext(name(i)) +;FI UNTIL treffer=nrPER FI ;nENDPROC bestimmeindexname;TEXT PROC +bestimmeverbunde(INT CONST blocknr):TEXT VAR v:="";INT VAR nr,p:=1;REP nr:= +decodezahl(getunterbloecke(blocknr),p);IF nr>0THEN IF v=""THEN vCAT +refinementname+text(nr)ELSE vCAT ";"+refinementname+text(nr)FI FI UNTIL nr=0 +PER ;vENDPROC bestimmeverbunde;TEXT PROC bestimmescanbedingung(INT CONST +regel,anzkeyfelder):TEXT VAR scan:="",vgl:="";INT VAR f;FOR fFROM 1UPTO +anzkeyfelderREP vgl:=getvergleichswert(regel,f);vergleichswertcodieren;IF +scan=""THEN scanCAT vglELSE scanCAT ";"+vglFI PER ;scan. +vergleichswertcodieren:IF konstanteTHEN vgl:=linkeklammer+vgl+rechteklammer +ELSE vgl:=textbegrenzer+vgl+textbegrenzerFI .konstante:(vglSUB 1)= +textbegrenzer.ENDPROC bestimmescanbedingung;PROC verbund(INT CONST blocknr): +TEXT VAR string:="";INT CONST regelnr:=getblockregelnummer(blocknr);INT VAR k +,r,index,anzfelder;IF regelnr>0THEN getzugriffsregel(regelnr,k,r,index, +anzfelder)FI ;line(queryfile);putline(queryfile,refinementname+text(blocknr)+ +":");IF regelnr>0THEN string:=bestimmeindexname(getobjektklasse(k),index); +stringCAT klammerauf;stringCAT bestimmescanbedingung(regelnr,anzfelder); +stringCAT trenner;stringCAT trenner;stringCAT trenner;stringCAT +bestimmeverbunde(blocknr);stringCAT klammerzu;putline(queryfile,string)ELSE +putline(queryfile,".")FI ENDPROC verbund;PROC erzeugequery(INT CONST nr):INT +VAR b;TEXT VAR string:="";forget(queryfilename,quiet);queryfile:= +sequentialfile(output,queryfilename);FOR bFROM 1UPTO getblockanzahlREP IF b=1 +THEN initqueryELSE verbund(b)FI PER ;.queryfilename:"QUERY."+text(nr). +initquery:string:=bestimmeindexname(getobjektklasse(1),getleitindex);string +CAT klammerauf;stringCAT getscan;stringCAT trenner;stringCAT trenner;putline( +queryfile,string);string:="";IF getselektion>""THEN stringCAT "selektion"FI ; +stringCAT trenner;putline(queryfile,string);string:="";stringCAT +bestimmeverbunde(1);stringCAT klammerzu;putline(queryfile,string);IF +getselektion>""THEN line(queryfile);string:="selektion: ";stringCAT +getselektion;stringCAT ".";putline(queryfile,string);FI .ENDPROC erzeugequery +;ENDPACKET idagen + diff --git a/app/schulis/2.2.1/src/6.ida.grund b/app/schulis/2.2.1/src/6.ida.grund new file mode 100644 index 0000000..b298b95 --- /dev/null +++ b/app/schulis/2.2.1/src/6.ida.grund @@ -0,0 +1,182 @@ +PACKET ispidagrundfunktionenDEFINES selektionenindateieintragen, +zugriffsregelnindateieintragen,druckausgabenlistezeigen,regellistezeigen, +variablenlistezeigen,behandlungderausgesuchten,inlisteblaettern, +maskenwertesichern,nummerderdruckausgabesetzen,nureinedruckausgabeangekreuzt, +rueckschrittevorproc,rueckschrittenachproc,sichernundhilfsfilesloeschen, +hilfsfilesloeschen,erfassungdruckausgabe,init,put, +setzedruckausgabelistenauswahl,druckausgabelistenauswahl, +setzelistederdruckausgabengezeigt,listederdruckausgabengezeigt, +setzeaktuellemaske,aktuellemaske:LET filenamezug="Hilfsdatei.Zugriff", +filenamesel="Hilfsdatei.Selektion",filenamedruck="Hilfsdatei.Druck", +filenamedliste="Druckausgaben",filenamezliste="Zugriffe",filenamevliste= +"Variablen";LET meldunglistenerstellung=7,meldungletzterwert=67, +meldungkeineliste=68,meldungkeinblaettern=72,meldungkeinezugriffe=200, +meldungkeinevariablen=201;LET maxselektionen=17,maxzugriffe=16,zeileninliste= +18,ausgabelaenge=71,maxvariablen=100;LET zugriffsregeln=4,druckvariablen=7; +LET serstervergleich=3,zobjkl=2,zregnr=3,zerstervergleich=7,lt=3,dnummer=2, +vnummer=2;LET vergleichtrenner="</>",trenner=" = ",oblitrenner="$",blank=" ", +kleinr="r",kleink="k",niltext="";LET andenanfang=1,andasende=2,vorwaerts=3, +rueckwaerts=4;BOOL VAR listenauswahl,listegezeigt;BOOL VAR dvrrechts, +dvrdruckvar,listeeinmalgezeigt:=FALSE ;INT VAR lvi,lvf,posi,zeilennr, +dvrlaenge,zobjekt,zregel,zindex,zanzahl,startzeile,zeilenindatei,schritte; +FILE VAR f,g;TAG VAR aktmaske;TEXT VAR zeile,dvrname,wert1,wert2,datname; +PROC selektionenindateieintragen(INT CONST leseanfangindatei,ROW 100TEXT +CONST erfassungsfeld):f:=sequentialfile(modify,filenamesel);zeilennr:= +leseanfangindatei;lvi:=serstervergleich;FOR lvfFROM leseanfangindateiUPTO +leseanfangindatei+maxselektionen-1REP IF zeilennr<=lines(f)THEN +vergleichswerteanhaengenFI PER ;.vergleichswerteanhaengen:toline(f,lvf); +readrecord(f,zeile);posi:=pos(zeile,vergleichtrenner);IF posi>0THEN zeile:= +subtext(zeile,1,posi-1)FI ;zeileCAT vergleichtrenner;zeileCAT erfassungsfeld[ +lvi];writerecord(f,zeile);lviINCR 2;zeilennrINCR 1;.END PROC +selektionenindateieintragen;PROC zugriffsregelnindateieintragen(INT CONST +leseanfangindatei,ROW 100TEXT CONST erfassungsfeld):f:=sequentialfile(modify, +filenamezug);zeilennr:=leseanfangindatei;lvi:=zerstervergleich;FOR lvfFROM +leseanfangindateiUPTO leseanfangindatei+maxzugriffe-1REP IF zeilennr<=lines(f +)THEN vergleichswerteanhaengenFI PER ;.vergleichswerteanhaengen:toline(f,lvf) +;readrecord(f,zeile);posi:=pos(zeile,vergleichtrenner);IF posi>0THEN zeile:= +subtext(zeile,1,posi-1);FI ;IF erfassungsfeld[lvi]<>niltextTHEN zeileCAT +vergleichtrenner;zeileCAT erfassungsfeld[lvi];FI ;writerecord(f,zeile);lvi +INCR 3;zeilennrINCR 1;.END PROC zugriffsregelnindateieintragen;PROC +druckausgabenlistezeigen:forget(filenamedliste,quiet);datname:=filenamedliste +;f:=sequentialfile(output,datname);first(dnrida);WHILE dbstatus=okREP +zeilezusammensetzen;putline(f,text(zeile,ausgabelaenge));succ(dnrida)PER ; +startzeiledruckausgabenlistebestimmen(datname);IF startzeile=0THEN +meldeauffaellig(aktuellemaske,meldungkeineliste);return(1)ELSE +setzelistederdruckausgabengezeigt(TRUE );listeeinmalgezeigt:=TRUE ; +listezeigen(datname)FI .zeilezusammensetzen:zeile:=wert(fnridanummer)+trenner ++wert(fnridaname);.END PROC druckausgabenlistezeigen;PROC +startzeiledruckausgabenlistebestimmen(TEXT VAR fname):INT VAR lv;f:= +sequentialfile(modify,fname);FOR lvFROM 1UPTO lines(f)REP toline(f,lv); +readrecord(f,zeile);IF int(subtext(zeile,1,pos(zeile,trenner)-1))>=int( +standardmaskenfeld(dnummer))THEN startzeile:=lv;LEAVE +startzeiledruckausgabenlistebestimmenFI PER ;startzeile:=0END PROC +startzeiledruckausgabenlistebestimmen;PROC regellistezeigen:forget( +filenamezliste,quiet);datname:=filenamezliste;f:=sequentialfile(output, +datname);IF getanzahlregeln=0THEN meldeauffaellig(aktuellemaske, +meldungkeinezugriffe);return(1)ELSE meldeauffaellig(aktuellemaske, +meldunglistenerstellung);listeeinmalgezeigt:=FALSE ; +listederregelnzusammenstellen;startzeileregellistebestimmen(datname);IF +startzeile=0THEN meldeauffaellig(aktuellemaske,meldungkeineliste);return(1) +ELSE setzedruckausgabelistenauswahl(TRUE );listezeigen(datname)FI FI ;END +PROC regellistezeigen;PROC listederregelnzusammenstellen:FOR lvfFROM 1UPTO +getanzahlregelnREP getzugriffsregel(lvf,zobjekt,zregel,zindex,zanzahl);zeile +:=kleink+text(zobjekt)+kleinr+text(zregel);putline(f,text(zeile,ausgabelaenge +))PER END PROC listederregelnzusammenstellen;PROC +startzeileregellistebestimmen(TEXT VAR fname):INT VAR lv,lvi,anzahl;f:= +sequentialfile(modify,fname);regelnsortieren;anzahl:=lines(f);FOR lvFROM 1 +UPTO anzahlREP toline(f,lv);readrecord(f,zeile);IF objektindatei= +objektinmaskeTHEN lvi:=lv;WHILE regelindatei<regelinmaskeREP +pruefenobdateiendesonstnaechstenlesenUNTIL objektindatei>objektinmaskePER ; +startzeile:=lvi;LEAVE startzeileregellistebestimmenFI ;IF objektindatei> +objektinmaskeTHEN startzeile:=lv;LEAVE startzeileregellistebestimmenFI PER ; +startzeile:=0.objektindatei:int(subtext(zeile,2,pos(zeile,kleinr)-1)). +objektinmaske:int(standardmaskenfeld(zobjkl)).regelindatei:int(subtext(zeile, +pos(zeile,kleinr)+1)).regelinmaske:int(standardmaskenfeld(zregnr)). +pruefenobdateiendesonstnaechstenlesen:IF lvi=anzahlTHEN startzeile:=0;LEAVE +startzeileregellistebestimmenELSE lviINCR 1;toline(f,lvi);readrecord(f,zeile) +;FI .END PROC startzeileregellistebestimmen;PROC variablenlistezeigen:forget( +filenamevliste,quiet);datname:=filenamevliste;f:=sequentialfile(output, +datname);FOR lvfFROM 1UPTO maxvariablenREP getsteuercode(lvf,dvrname, +dvrlaenge,dvrrechts,dvrdruckvar);IF dvrname<>niltextTHEN +listedervariablenzusammenstellen;FI PER ;IF lines(f)=0THEN meldeauffaellig( +aktuellemaske,meldungkeinevariablen);return(1)ELSE meldeauffaellig( +aktuellemaske,meldunglistenerstellung);listeeinmalgezeigt:=FALSE ; +startzeilevariablenlistebestimmen(datname);IF startzeile=0THEN +meldeauffaellig(aktuellemaske,meldungkeineliste);return(1)ELSE +setzedruckausgabelistenauswahl(TRUE );listezeigen(datname)FI FI END PROC +variablenlistezeigen;PROC listedervariablenzusammenstellen:zeile:=text(lvf); +zeileCAT trenner;zeileCAT dvrname;putline(f,text(zeile,ausgabelaenge))END +PROC listedervariablenzusammenstellen;PROC startzeilevariablenlistebestimmen( +TEXT VAR fname):INT VAR lv;f:=sequentialfile(modify,fname);FOR lvFROM 1UPTO +lines(f)REP toline(f,lv);readrecord(f,zeile);IF int(subtext(zeile,1,pos(zeile +,trenner)-1))>=int(standardmaskenfeld(vnummer))THEN startzeile:=lv;LEAVE +startzeilevariablenlistebestimmenFI PER ;startzeile:=0END PROC +startzeilevariablenlistebestimmen;PROC listezeigen(TEXT CONST dateiname):LET +listenmaskenname="mu objektliste";initobli;initmaske(aktmaske, +listenmaskenname);standardstartproc(listenmaskenname);f:=sequentialfile( +modify,dateiname);zeilenindatei:=lines(f);seitezeigenEND PROC listezeigen; +PROC inlisteblaettern(INT CONST wohin):SELECT wohinOF CASE andenanfang: +andendateianfangCASE andasende:andasdateiendeCASE vorwaerts: +vorwaertsblaetternindateiCASE rueckwaerts:rueckwaertsblaetternindateiEND +SELECT ;.andendateianfang:IF startzeile<>1THEN startzeile:=1;seitezeigenELSE +zurueck;FI .andasdateiende:IF startzeile<zeilenindatei-zeileninliste+1THEN +startzeile:=zeilenindatei-zeileninliste+1;seitezeigenELSE zurueck;FI . +vorwaertsblaetternindatei:IF startzeile<zeilenindatei-zeileninliste+1THEN +startzeileINCR zeileninliste;seitezeigenELSE zurueck;FI . +rueckwaertsblaetternindatei:IF startzeile>zeileninlisteTHEN startzeileDECR +zeileninliste;seitezeigenELSE andendateianfangFI .END PROC inlisteblaettern; +PROC seitezeigen:FOR lvfFROM 1UPTO zeileninlisteREP IF startzeile+lvf-1<= +zeilenindateiTHEN toline(f,startzeile+lvf-1);readrecord(f,zeile);posi:=pos( +zeile,vergleichtrenner);IF posi>0THEN standardmaskenfeld(subtext(zeile,1,posi +-1),lvf*2+1);standardmaskenfeld(subtext(zeile,posi+lt),lvf*2);ELSE +standardmaskenfeld(zeile,lvf*2+1);standardmaskenfeld(niltext,lvf*2);FI ; +feldfrei(lvf*2)ELSE standardmaskenfeld(text(niltext,ausgabelaenge),lvf*2+1); +standardmaskenfeld(niltext,lvf*2);feldschutz(lvf*2)FI PER ;END PROC +seitezeigen;PROC maskenwertesichern:FOR lvfFROM 1UPTO zeileninlisteREP IF +standardmaskenfeld(lvf*2+1)<>ausgabelaenge*blankTHEN zeile:= +standardmaskenfeld(lvf*2+1);zeileCAT vergleichtrenner;zeileCAT +standardmaskenfeld(lvf*2);toline(f,startzeile+lvf-1);writerecord(f,zeile)FI +PER END PROC maskenwertesichern;PROC behandlungderausgesuchten(PROC (INT +CONST )wastun,ROW 100TEXT VAR feld,INT CONST womit):BOOL VAR ok:=FALSE ;init( +feld);wertholen(womit,ok);IF okTHEN feldervorbelegen;wastun(womit);ELSE +meldeauffaellig(aktuellemaske,meldungletzterwert);zurueck; +setzedruckausgabelistenauswahl(FALSE );forget(datname,quiet); +listeeinmalgezeigt:=FALSE ;enter(2)#rueckschrittevorproc(2)dr01.08.88#FI . +feldervorbelegen:SELECT womitOF CASE zugriffsregeln:feld[zobjkl]:=wert1;feld[ +zregnr]:=wert2;CASE druckvariablen:feld[vnummer]:=wert1END SELECT .END PROC +behandlungderausgesuchten;PROC wertholen(INT CONST wozu,BOOL VAR nochda):g:= +sequentialfile(modify,datname);#dr01.08.88#nochda:=lines(g)>0;IF NOT nochda +THEN LEAVE wertholenELSE toline(g,1);WHILE lines(g)>0REP readrecord(g,zeile); +posi:=pos(zeile,vergleichtrenner);deleterecord(g);UNTIL posi>0CAND subtext( +zeile,posi+lt)<>niltextPER ;IF lines(g)>0THEN werteermittelnELIF posi>0CAND +subtext(zeile,posi+lt)<>niltextTHEN werteermittelnELSE nochda:=FALSE FI FI . +werteermitteln:SELECT wozuOF CASE zugriffsregeln:objektundregelermittelnCASE +druckvariablen:variablennummerermittelnEND SELECT .objektundregelermitteln: +wert1:=subtext(zeile,pos(zeile,kleink)+1,pos(zeile,kleinr)-1);wert2:=subtext( +zeile,pos(zeile,kleinr)+1,pos(zeile,blank)-1).variablennummerermitteln:wert1 +:=subtext(zeile,1,pos(zeile,trenner)-1);wert2:=niltext.END PROC wertholen; +PROC rueckschrittevorproc(INT CONST wieviele):BOOL VAR b:=TRUE ;schritte:= +wieviele;WHILE bREP IF listeeinmalgezeigtTHEN schritteINCR 1;b:=FALSE ELSE # +dr01.08.88#b:=listederdruckausgabengezeigt;listeeinmalgezeigt:=TRUE FI PER ; +listeeinmalgezeigt:=listederdruckausgabengezeigt;enter(schritte)END PROC +rueckschrittevorproc;PROC rueckschrittenachproc(INT CONST wieviele):return( +wieviele);END PROC rueckschrittenachproc;PROC nummerderdruckausgabesetzen( +TEXT VAR nr):FOR lvfFROM 1UPTO lines(f)REP toline(f,lvf);readrecord(f,zeile); +posi:=pos(zeile,vergleichtrenner);IF posi>0CAND subtext(zeile,posi+lt)<> +niltextTHEN nr:=subtext(zeile,1,pos(zeile," = ")-1);LEAVE +nummerderdruckausgabesetzenFI ;PER END PROC nummerderdruckausgabesetzen;BOOL +PROC nureinedruckausgabeangekreuzt:BOOL VAR angekreuzt:=FALSE ;f:= +sequentialfile(modify,filenamedliste);FOR lvfFROM 1UPTO lines(f)REP toline(f, +lvf);readrecord(f,zeile);posi:=pos(zeile,vergleichtrenner);IF posi>0CAND +subtext(zeile,posi+lt)<>niltextTHEN IF angekreuztTHEN LEAVE +nureinedruckausgabeangekreuztWITH FALSE ELSE angekreuzt:=TRUE FI FI PER ; +angekreuztEND PROC nureinedruckausgabeangekreuzt;PROC +sichernundhilfsfilesloeschen:putform;hilfsfilesloeschenEND PROC +sichernundhilfsfilesloeschen;PROC hilfsfilesloeschen:forget(filenamezug,quiet +);forget(filenamesel,quiet);forget(filenamedruck,quiet);forget(filenamedliste +,quiet)END PROC hilfsfilesloeschen;PROC erfassungdruckausgabe(INT CONST n): +LET trenner=" = ";LET laengezeile=71;TEXT VAR identizeile;identizeile:=wert( +fnridanummer)+trenner+wert(fnridaname);identizeile:=text(identizeile, +laengezeile);setzeidentiwert(identizeilemitschluesselanhang). +identizeilemitschluesselanhang:identizeile+oblitrenner+wert(fnridanummer). +END PROC erfassungdruckausgabe;PROC init(ROW 100TEXT VAR feld):INT VAR i;FOR +iFROM 1UPTO 100REP feld(i):=""PER END PROC init;PROC put(TAG CONST maske,ROW +100TEXT CONST feld,INT CONST letztesfeld):INT VAR lv;FOR lvFROM 2UPTO +letztesfeldREP IF fieldexists(maske,lv)THEN put(maske,feld[lv],lv)FI PER END +PROC put;PROC setzeaktuellemaske(TAG CONST welchemaske):aktmaske:=welchemaske +END PROC setzeaktuellemaske;TAG PROC aktuellemaske:aktmaskeEND PROC +aktuellemaske;PROC setzedruckausgabelistenauswahl(BOOL CONST b):listenauswahl +:=bEND PROC setzedruckausgabelistenauswahl;BOOL PROC +listederdruckausgabengezeigt:listegezeigtEND PROC +listederdruckausgabengezeigt;PROC setzelistederdruckausgabengezeigt(BOOL +CONST b):listegezeigt:=bEND PROC setzelistederdruckausgabengezeigt;BOOL PROC +druckausgabelistenauswahl:listenauswahlEND PROC druckausgabelistenauswahl; +PROC regelnsortieren:INT VAR lv,anzahl;anzahl:=lines(f);blanksentfernen;sort( +filenamezliste);moeglicherweisenachsortieren.blanksentfernen:FOR lvFROM 1 +UPTO anzahlREP toline(f,lv);readrecord(f,zeile);changeall(zeile," ",""); +writerecord(f,text(zeile,ausgabelaenge))PER .moeglicherweisenachsortieren: +FOR lvFROM 1UPTO anzahlREP toline(f,1);readrecord(f,zeile);IF subtext(zeile,2 +,2)="1"THEN deleterecord(f);toline(f,anzahl);insertrecord(f);writerecord(f, +text(zeile,ausgabelaenge))ELSE LEAVE regelnsortierenFI PER .END PROC +regelnsortieren;END PACKET ispidagrundfunktionen; + diff --git a/app/schulis/2.2.1/src/6.ida.plausi b/app/schulis/2.2.1/src/6.ida.plausi new file mode 100644 index 0000000..b25272d --- /dev/null +++ b/app/schulis/2.2.1/src/6.ida.plausi @@ -0,0 +1,114 @@ +PACKET ispidaplausiDEFINES nameundtypok,selektionswerteok,zugriffsregelnok, +meldefehlernameundtyp,nummerinrichtigengrenzen,nummernummerisch,checktyp:LET +filenamesel="Hilfsdatei.Selektion",filenamezug="Hilfsdatei.Zugriff", +filenamedata="FORMDATA.",filenameform="FORMTEXT.";LET meldungalternative=56, +meldungungueltigeangaben=204,meldungdgibtesschon=205,meldungfalschenummer=207 +,meldungnamezulang=216,meldungnichterstezeile=252,meldungkeingeschlindex=253, +meldungkeinfeldname=254,meldungkeinanfuehrzeichen=255,meldungfalscherfeldtypn +=256,meldungfalscherfeldtypw=257,meldungletzterkeinvgl=258, +meldungfalschervergleich=259,meldungfalscheroperator=260, +meldungfalscheverkettung=261;LET ntnummer=2,ntname=3,ntliste=4,nteinzel=5; +LET vergleichtrenner="</>",namentrenner="<#>",zeilennrtrenner="<!>", +anzahltrenner="<?>",gueltigeziffern="0123456789",anfuehrung="""",niltext=""; +LET namenlaenge=46,kleinstedruckausgabe=1,groesstedruckausgabe=100,tl=3;LET +anzzeilenregeln=16,anzzeilenselektionen=17;FILE VAR f;INT VAR +fehlermldnametyp:=0;INT VAR zeilennr;TEXT VAR zeile,pattern;BOOL PROC +nameundtypok(ROW 100TEXT CONST feld,INT VAR fnr):IF +nummerderdruckausgabegeaendertTHEN ausstiegbeifalschernummer; +ausstiegfallsschonvorhandenFI ;ausstiegbeizulangemnamen;TRUE . +nummerderdruckausgabegeaendert:getactivformular<>int(feld[ntnummer]). +ausstiegbeifalschernummer:IF NOT nummerinrichtigengrenzen(feld[ntnummer]) +THEN fehlermldnametyp:=meldungfalschenummer;fnr:=ntnummer;LEAVE nameundtypok +WITH FALSE FI .ausstiegfallsschonvorhanden:IF formexists(int(feld[ntnummer])) +THEN fehlermldnametyp:=meldungdgibtesschon;fnr:=ntnummer;LEAVE nameundtypok +WITH FALSE ELSE rename(filenamedata+text(getactivformular),filenamedata+feld[ +ntnummer]);rename(filenameform+text(getactivformular),filenameform+feld[ +ntnummer]);delform(getactivformular);openformular(int(feld[ntnummer]))FI . +ausstiegbeizulangemnamen:IF length(feld[ntname])>namenlaengeTHEN +fehlermldnametyp:=meldungnamezulang;fnr:=ntname;LEAVE nameundtypokWITH FALSE +FI .END PROC nameundtypok;BOOL PROC nummerinrichtigengrenzen(TEXT CONST nr): +nummernummerisch(nr)CAND int(nr)>=kleinstedruckausgabeCAND int(nr)<= +groesstedruckausgabeEND PROC nummerinrichtigengrenzen;BOOL PROC +nummernummerisch(TEXT CONST nr):INT VAR lv;IF length(nr)=0#dr02.05.88#THEN +LEAVE nummernummerischWITH FALSE ELSE FOR lvFROM 1UPTO length(nr)REP IF pos( +gueltigeziffern,nrSUB lv)=0THEN LEAVE nummernummerischWITH FALSE FI PER ;FI ; +TRUE END PROC nummernummerisch;PROC meldefehlernameundtyp:meldeauffaellig( +aktuellemaske,fehlermldnametyp);fehlermldnametyp:=0END PROC +meldefehlernameundtyp;BOOL PROC selektionswerteok(INT CONST dnr,INT VAR fehls +,fehlz,fehlm):INT VAR lvf;TEXT VAR sfeldname,svergleichswert;BOOL VAR ok;f:= +sequentialfile(modify,filenamesel);FOR lvfFROM 1UPTO anzattr(dnr)REP toline(f +,lvf);readrecord(f,zeile);sfeldname:=subtext(zeile,1,pos(zeile, +zeilennrtrenner)-1);svergleichswert:=subtext(zeile,pos(zeile,vergleichtrenner +)+tl);IF svergleichswert<>niltextTHEN IF NOT vergleichswertokTHEN fehls:=lvf +DIV anzzeilenselektionen+1;fehlz:=lvfMOD anzzeilenselektionen;LEAVE +selektionswerteokWITH FALSE FI FI PER ;TRUE .vergleichswertok: +pruefeselektionswert(sfeldname,svergleichswert,ok,fehlm);ok.END PROC +selektionswerteok;PROC pruefeselektionswert(TEXT CONST vglname,vglwert,BOOL +VAR bool,INT VAR fehlm):LET bold=2,textstring=4,operator=5,scanende=7, +gueltigeoperatoren="<$<=$<>$>$>=$=",gueltigeverkettung="$UND$ODER$";BOOL VAR +op:=FALSE ,vgl:=FALSE ,vkt:=TRUE ;INT VAR type:=0,typesich:=0;TEXT VAR symbol +:="",twert:=compress(vglwert),tname:=compress(vglname);IF +keineanfuehrungszeichenTHEN fehlm:=meldungkeinanfuehrzeichen;ausstiegmitfalse +ELSE pruefendervergleiche;IF typesich<>textstringTHEN fehlm:= +meldungletzterkeinvgl;ausstiegmitfalseELSE bool:=TRUE FI FI . +keineanfuehrungszeichen:pos(twert,anfuehrung)=0.pruefendervergleiche:scan( +twert);WHILE type<>scanendeREP nextsymbol(symbol,type);SELECT typeOF CASE +bold:verkettungueberpruefenCASE textstring:textueberpruefenCASE operator: +operatorueberpruefenCASE scanende:LEAVE pruefendervergleicheOTHERWISE :fehlm +:=meldungungueltigeangaben;ausstiegmitfalseEND SELECT ;typesich:=typePER . +operatorueberpruefen:IF opOR NOT vktOR (NOT opAND pos(gueltigeoperatoren, +symbol)=0)THEN fehlm:=meldungfalscheroperator;ausstiegmitfalseELSE op:=TRUE ; +FI .textueberpruefen:IF vglOR NOT opOR NOT checktyp(tname,symbol)THEN fehlm:= +meldungfalschervergleich;ausstiegmitfalseELSE vgl:=TRUE ;vkt:=FALSE FI . +verkettungueberpruefen:INT VAR posi:=pos(gueltigeverkettung,symbol);IF vktOR +NOT opOR NOT vglOR posi=0OR (posi<>0AND (((gueltigeverkettungSUB posi-1)<>"$" +)OR ((gueltigeverkettungSUB posi+length(symbol))<>"$")))THEN fehlm:= +meldungfalscheverkettung;ausstiegmitfalseELSE vkt:=TRUE ;op:=FALSE ;vgl:= +FALSE FI .ausstiegmitfalse:bool:=FALSE ;LEAVE pruefeselektionswert.END PROC +pruefeselektionswert;BOOL PROC zugriffsregelnok(INT VAR fehlseite,fehlzeile, +fehlmeld):f:=sequentialfile(modify,filenamezug);toline(f,1);pattern:= +vergleichtrenner;readrecord(f,zeile);zeilennr:=1;IF pos(zeile,pattern)>0THEN +diesesistersteindexzeileCAND nurfelderausdiesemindexgewaehlt(fehlseite, +fehlzeile,fehlmeld)ELSE down(f,pattern);IF patternfoundTHEN zeilennr:=lineno( +f);readrecord(f,zeile);diesesistersteindexzeileCAND +nurfelderausdiesemindexgewaehlt(fehlseite,fehlzeile,fehlmeld)ELSE TRUE FI FI +.diesesistersteindexzeile:fehlseite:=zeilennrDIV anzzeilenregeln+1;fehlzeile +:=zeilennrMOD anzzeilenregeln;fehlmeld:=meldungnichterstezeile;pos(zeile, +anzahltrenner)<>0.END PROC zugriffsregelnok;BOOL PROC +nurfelderausdiesemindexgewaehlt(INT VAR fehls,fehlz,fehlm):INT VAR merker:=0, +lv,anzfelder;TEXT VAR twert:="",tname:="";anzfelder:=int(subtext(zeile,pos( +zeile,anzahltrenner)+tl,pos(zeile,namentrenner)-1));FOR lvFROM zeilennrUPTO +zeilennr+anzfelder-1REP toline(f,lv);readrecord(f,zeile);IF pos(zeile,pattern +)>0THEN IF merker=1THEN fehls:=((lv-1)DIV anzzeilenregeln)+1;fehlz:=(lv-1) +MOD anzzeilenregeln;fehlm:=meldungkeingeschlindex;LEAVE +nurfelderausdiesemindexgewaehltWITH FALSE ELSE vergleichswertpruefenFI ELSE +merker:=1;FI PER ;IF lines(f)=1OR lines(f)=lineno(f)THEN LEAVE +nurfelderausdiesemindexgewaehltWITH TRUE ELSE down(f);down(f,pattern)FI ; +fehls:=lineno(f)DIV anzzeilenregeln+1;fehlz:=lineno(f)MOD anzzeilenregeln; +fehlm:=meldungkeingeschlindex;NOT patternfound.vergleichswertpruefen:twert:= +compress(subtext(zeile,pos(zeile,pattern)+tl));tname:=compress(subtext(zeile, +pos(zeile,namentrenner)+tl,pos(zeile,zeilennrtrenner)-1));IF +ersteszeichenkeinanfuehrungszeichenTHEN stopbeifalschemnamen(FALSE );IF +eingabekeinfeldnameTHEN fehls:=lvDIV anzzeilenregeln+1;fehlz:=lvMOD +anzzeilenregeln;fehlm:=meldungkeinfeldname;LEAVE +nurfelderausdiesemindexgewaehltWITH FALSE ELSE feldtypueberpruefenFI ; +stopbeifalschemnamen(TRUE );ELSE IF letzteszeichenkeinanfuehrungszeichenTHEN +fehls:=lvDIV anzzeilenregeln+1;fehlz:=lvMOD anzzeilenregeln;fehlm:= +meldungkeinanfuehrzeichen;LEAVE nurfelderausdiesemindexgewaehltWITH FALSE +ELSE eingabemitfeldtypvergleichenFI ;FI .ersteszeichenkeinanfuehrungszeichen: +(twertSUB 1)<>anfuehrung.eingabekeinfeldname:feldnr(twert)=0. +feldtypueberpruefen:IF feldtyp(feldnr(twert))<>feldtyp(feldnr(tname))THEN +fehls:=lvDIV anzzeilenregeln+1;fehlz:=lvMOD anzzeilenregeln;fehlm:= +meldungfalscherfeldtypn;LEAVE nurfelderausdiesemindexgewaehltWITH FALSE FI . +letzteszeichenkeinanfuehrungszeichen:(twertSUB length(twert))<>anfuehrung. +eingabemitfeldtypvergleichen:twert:=subtext(twert,2,length(twert)-1);IF NOT +checktyp(tname,twert)THEN fehls:=lvDIV anzzeilenregeln+1;fehlz:=lvMOD +anzzeilenregeln;fehlm:=meldungfalscherfeldtypw;LEAVE +nurfelderausdiesemindexgewaehltWITH FALSE FI .END PROC +nurfelderausdiesemindexgewaehlt;BOOL PROC checktyp(TEXT CONST fname, +fvergleich):LET integer=73,realwert=82,datum=68;disablestop;SELECT feldtyp( +feldnr(fname))OF CASE integer:INT VAR i:=int(fvergleich)CASE realwert:REAL +VAR r:=real(fvergleich)CASE datum:REAL VAR d:=date(fvergleich)END SELECT ;IF +iserrorCOR NOT lastconversionokTHEN clearerror;enablestop;LEAVE checktypWITH +FALSE FI ;enablestop;TRUE END PROC checktyp;END PACKET ispidaplausi; + diff --git a/app/schulis/2.2.1/src/insert schulis b/app/schulis/2.2.1/src/insert schulis new file mode 100644 index 0000000..a28c829 --- /dev/null +++ b/app/schulis/2.2.1/src/insert schulis @@ -0,0 +1,472 @@ +LET versionsnummer=" 2.2.1";INT VAR kanal:=0,meinestation:=0;ROW 2TEXT VAR +ausbaustufe;ausbaustufe(1):="0,1,6,";ausbaustufe(2):="0,1,6,3,4,2,5,";INT +VAR ausbaustufenr:=1;LET teilsystem4="4",teilsystem6="6",teilsystem2="2", +teilsystem5="5";LET praefixtrenner=".",teilsystemtrenner=",",allgemeinedatei= +"0";TEXT VAR gueltigepraefixe:=",";TEXT VAR installverzeichnis:="";TASK VAR +tasksourcequelle,testtask;BOOL VAR fehlerbeiinsert:=FALSE , +idanichtinstallierbar:=FALSE ;LET stundenplanpraefix="Stundenplan-*";LET +kurswahlpraefix="Kurswahl-*";TEXT VAR qtt:="SCHULIS-Quellen";page;TEXT VAR +procaufruf1:="setze schulis zeichensatz(""",procaufruf2:= +"setze ida zeichensatz(""",procaufrufende:=""")",gewzeichensatz:="";BOOL VAR +exists:=TRUE ;disablestop;gewzeichensatz:=font(1);IF iserrorTHEN clearerror; +line;putline("Vor Installation bitte Fonttabelle in "+ +"Task 'configurator' laden!");enablestop;ELSE enablestop;WHILE existsREP page +;cursor(10,10);put("Bitte gewünschten Schrifttyp für Listen und andere"); +cursor(10,11);put("Druckausgaben angeben : ");editget(gewzeichensatz);exists +:=NOT fontexists(gewzeichensatz)PER ;procaufruf1CAT gewzeichensatz; +procaufruf1CAT procaufrufende;procaufruf2CAT gewzeichensatz;procaufruf2CAT +procaufrufende;startinsertinggesamtsystem;commanddialogue(FALSE );forget(all) +;commanddialogue(TRUE );FI ;BOOL PROC einzurichten(TEXT CONST teilsystemnr): +pos(gueltigepraefixe,teilsystemtrenner+teilsystemnr+teilsystemtrenner)>0END +PROC einzurichten;TEXT PROC inv(TEXT CONST txt):""+txt+"�"ENDPROC inv;PROC +startinsertinggesamtsystem:TASK VAR t;INT VAR msgcode;DATASPACE VAR ds:= +nilspace;maske;maskentexteinitialisieren;maskentexte;IF NOT maskeeditiert +THEN LEAVE startinsertinggesamtsystemFI ;line;kanal:=channel;taskpassword( +taskpasswort);beginpassword(beginnpasswort);fetch((ALL sourcetaskbaisydb) +LIKE "*BAISY-0",sourcetaskbaisydb);INT VAR pospraefixende;THESAURUS VAR thes +:=allLIKE "*.BAISY-0";TEXT VAR datenraumname;INT VAR indexthes:=0;get(thes, +datenraumname,indexthes);WHILE indexthes>0REP pospraefixende:=pos( +datenraumname,praefixtrenner);ausbaustufenr:=int(subtext(datenraumname,1, +pospraefixende-1));forget(datenraumname,quiet);get(thes,datenraumname, +indexthes)PER ;gueltigepraefixeCAT ausbaustufe(ausbaustufenr); +tasksourcequelle:=sourcetaskbaisy;checkoff;fetchundinsert("BASIS.files"); +break(quiet);disablestop;IF NOT fehlerbeiinsertTHEN begin("ACCESS",PROC +startinsertingaccess,t);call(t,0,ds,msgcode);IF msgcode=0THEN fehlerbeiinsert +:=TRUE FI ;FI ;IF NOT fehlerbeiinsertTHEN begin("baisy server",PROC +startinsertingbaisyserver,t);call(t,0,ds,msgcode);IF msgcode=0THEN +fehlerbeiinsert:=TRUE FI ;FI ;IF NOT fehlerbeiinsertTHEN begin("ida server", +PROC startinsertingidaserver,t);call(t,0,ds,msgcode);IF msgcode=0THEN +fehlerbeiinsert:=TRUE FI ;FI ;IF NOT fehlerbeiinsertTHEN begin( +"anschreiben server",PROC startinsertinganschreibenserver,t);call(t,0,ds, +msgcode);IF msgcode=0THEN fehlerbeiinsert:=TRUE FI ;FI ;IF NOT +fehlerbeiinsertTHEN begin("statistik server",PROC +startinsertingstatistikserver,t);call(t,0,ds,msgcode);IF msgcode=0THEN +fehlerbeiinsert:=TRUE FI ;FI ;IF NOT fehlerbeiinsertTHEN begin( +"kurswahl server",PROC startinsertingkurswahlserver,t);call(t,0,ds,msgcode); +IF msgcode=0THEN fehlerbeiinsert:=TRUE FI ;FI ;IF NOT fehlerbeiinsertTHEN +begin("stundenplan server",PROC startinsertingstundenplanserver,t);call(t,0, +ds,msgcode);IF msgcode=0THEN fehlerbeiinsert:=TRUE FI ;FI ;IF NOT +fehlerbeiinsertTHEN begin("DB.kom",PROC startinsertingdbkom,t);call(t,0,ds, +msgcode);IF msgcodeMOD 2=0THEN fehlerbeiinsert:=TRUE FI ;IF msgcode>=2THEN +idanichtinstallierbar:=TRUE FI FI ;clearerror;enablestop;continue(kanal); +putline("Hier ist wieder "+name(myself));putline("SCHULIS ist "+fehler+ +" eingerichtet !");IF idanichtinstallierbarTHEN putline( +"Das Modul ""Anwenderspezifische Druckausgaben"" wurde nicht eingerichtet,"); +putline("da die EUMEL-Textverarbeitung fehlt !");lineFI ;IF NOT +fehlerbeiinsertTHEN putline( +"Bitte Task ""isp.archive"" unter SYSUR einrichten!");putline( +"Bitte Task ""LOG"" unter SYSUR einrichten! <RETURN>")ELSE putline( +"Bitte beliebige Taste (außer STOP und SV) drücken !")FI ;pause; +freeglobalmanager.fehler:IF fehlerbeiinsertTHEN "FEHLERHAFT"ELSE +"ordnungsgemäß"FI .END PROC startinsertinggesamtsystem;PROC +startinsertingbaisyserver:TASK VAR ruftask;INT VAR msgcodert;DATASPACE VAR +dsrt:=nilspace;wait(dsrt,msgcodert,ruftask);continue(kanal);line;putline(name +(myself));tasksourcequelle:=sourcetaskbaisy;line;IF taskpasswort=""THEN +taskpassword("-")ELSE taskpassword(taskpasswort)FI ;beginpassword( +beginnpasswort);disablestop;fetch((ALL sourcetaskbaisydb)LIKE "*BAISY-*", +sourcetaskbaisydb);INT VAR pospraefixende;THESAURUS VAR thes:=allLIKE (text( +ausbaustufenr)+".BAISY-*");TEXT VAR datenraumname,neuername;INT VAR indexthes +:=0;get(thes,datenraumname,indexthes);WHILE indexthes>0REP pospraefixende:= +pos(datenraumname,praefixtrenner);neuername:=subtext(datenraumname, +pospraefixende+1);rename(datenraumname,neuername);get(thes,datenraumname, +indexthes)PER ;fetchundinsert("BAISY SERVER.files");IF iserrorTHEN putline( +errormessage);clearerror;fehlerbeiinsert:=TRUE FI ;enablestop;putline(name( +myself)+" ist komplett.");break(quiet);IF fehlerbeiinsertTHEN msgcodert:=0 +ELSE msgcodert:=1FI ;send(ruftask,msgcodert,dsrt);do("baisy server")END PROC +startinsertingbaisyserver;PROC startinsertingidaserver:TASK VAR ruftask;INT +VAR msgcodert;DATASPACE VAR dsrt:=nilspace;wait(dsrt,msgcodert,ruftask); +continue(kanal);line;putline(name(myself));tasksourcequelle:= +sourcetaskschulis;#fehlerbeiinsert:=FALSE ;#line;IF taskpasswort=""THEN +taskpassword("-")ELSE taskpassword(taskpasswort)FI ;beginpassword( +beginnpasswort);disablestop;fetchundinsert("0.IDA SERVER.files");IF iserror +THEN putline(errormessage);clearerror;fehlerbeiinsert:=TRUE FI ;enablestop; +putline(name(myself)+" ist komplett.");break(quiet);IF fehlerbeiinsertTHEN +msgcodert:=0ELSE msgcodert:=1FI ;send(ruftask,msgcodert,dsrt);do("ida server" +)END PROC startinsertingidaserver;PROC startinsertingstundenplanserver:TASK +VAR ruftask;INT VAR msgcodert;DATASPACE VAR dsrt:=nilspace;wait(dsrt, +msgcodert,ruftask);continue(kanal);line;putline(name(myself));# +fehlerbeiinsert:=FALSE ;#line;taskpassword("-");beginpassword("-");fetch(( +ALL sourcetaskschulisdb)LIKE stundenplanpraefix,sourcetaskschulisdb);putline( +name(myself)+" ist komplett.");break(quiet);msgcodert:=1;send(ruftask, +msgcodert,dsrt);freeglobalmanager;END PROC startinsertingstundenplanserver; +PROC startinsertingstatistikserver:TASK VAR ruftask;INT VAR msgcodert; +DATASPACE VAR dsrt:=nilspace;wait(dsrt,msgcodert,ruftask);continue(kanal); +line;putline(name(myself));tasksourcequelle:=sourcetaskschulis;# +fehlerbeiinsert:=FALSE ;#line;IF taskpasswort=""THEN taskpassword("-")ELSE +taskpassword(taskpasswort)FI ;beginpassword(beginnpasswort);disablestop; +fetchundinsert("5.STATISTIK SERVER.files");IF iserrorTHEN putline( +errormessage);clearerror;fehlerbeiinsert:=TRUE FI ;enablestop;putline(name( +myself)+" ist komplett.");break(quiet);IF fehlerbeiinsertTHEN msgcodert:=0 +ELSE msgcodert:=1FI ;send(ruftask,msgcodert,dsrt);do("statistik manager")END +PROC startinsertingstatistikserver;PROC startinsertingkurswahlserver:TASK +VAR ruftask;INT VAR msgcodert;DATASPACE VAR dsrt:=nilspace;wait(dsrt, +msgcodert,ruftask);continue(kanal);line;putline(name(myself));# +fehlerbeiinsert:=FALSE ;#line;taskpassword("-");beginpassword("-");fetch(( +ALL sourcetaskschulisdb)LIKE kurswahlpraefix,sourcetaskschulisdb);putline( +name(myself)+" ist komplett.");break(quiet);msgcodert:=1;send(ruftask, +msgcodert,dsrt);freeglobalmanager;END PROC startinsertingkurswahlserver;PROC +startinsertinganschreibenserver:TASK VAR ruftask;INT VAR msgcodert;DATASPACE +VAR dsrt:=nilspace;wait(dsrt,msgcodert,ruftask);continue(kanal);line;putline( +name(myself));#fehlerbeiinsert:=FALSE ;#line;taskpassword(taskpasswort); +beginpassword(beginnpasswort);disablestop;fetch("VORDRUCKE.files", +sourcetaskvordrucke);fetch(ALL "VORDRUCKE.files",sourcetaskvordrucke); +clearerror;enablestop;putline(name(myself)+" ist komplett.");break(quiet); +msgcodert:=1;send(ruftask,msgcodert,dsrt);freeglobalmanager;END PROC +startinsertinganschreibenserver;PROC startinsertingdbdd:TASK VAR t,ruftask; +INT VAR msgcodert,msgcode;DATASPACE VAR dsrt:=nilspace,ds:=nilspace;wait(dsrt +,msgcodert,ruftask);continue(kanal);line;putline(name(myself));line; +taskpassword(taskpasswort);beginpassword(beginnpasswort);disablestop; +tasksourcequelle:=sourcetaskschulis;fetchundinsert("0.IDA SICHERUNG.files"); +tasksourcequelle:=sourcetaskbaisy;fetchundinsert("SICHERUNG.files");do( +"postfix ("""")");do("ausgabe namen");do("kf (TRUE)");IF iserrorTHEN putline( +errormessage);clearerror;fehlerbeiinsert:=TRUE FI ;enablestop;IF NOT +fehlerbeiinsertTHEN erzeugeeumelbasebaisy;erzeugeeumelbaseschulis;FI ;break( +quiet);IF NOT fehlerbeiinsertTHEN begin("statistik sicherung",PROC +startinsertingstatistiksich,t);call(t,0,ds,msgcode);IF msgcode=0THEN +fehlerbeiinsert:=TRUE FI ;FI ;IF NOT fehlerbeiinsertTHEN begin( +"schulis sicherung",PROC startinsertingschulissich,t);call(t,0,ds,msgcode); +IF msgcode=0THEN fehlerbeiinsert:=TRUE FI ;FI ;IF NOT fehlerbeiinsertTHEN +begin("baisy sicherung",PROC startinsertingbaisysich,t);call(t,0,ds,msgcode); +IF msgcode=0THEN fehlerbeiinsert:=TRUE FI ;FI ;IF NOT fehlerbeiinsertTHEN +begin("ida sicherung",PROC startinsertingidasich,t);call(t,0,ds,msgcode);IF +msgcode=0THEN fehlerbeiinsert:=TRUE FI ;FI ;IF fehlerbeiinsertTHEN msgcodert +:=0ELSE msgcodert:=1FI ;send(ruftask,msgcodert,dsrt);freeglobalmanagerEND +PROC startinsertingdbdd;PROC startinsertingstatistiksich:TASK VAR ruftask; +INT VAR msgcodert;DATASPACE VAR dsrt:=nilspace;wait(dsrt,msgcodert,ruftask); +continue(kanal);line;putline(name(myself));line;taskpassword(taskpasswort); +beginpassword(beginnpasswort);break(quiet);msgcodert:=1;send(ruftask, +msgcodert,dsrt);do("statistik(TRUE)");do(" postfix ("""") ");commanddialogue( +FALSE );do("isp monitor sicherungstask(""Statistik"")")END PROC +startinsertingstatistiksich;PROC startinsertingidasich:TASK VAR ruftask;INT +VAR msgcodert;DATASPACE VAR dsrt:=nilspace;wait(dsrt,msgcodert,ruftask); +continue(kanal);line;putline(name(myself));line;taskpassword(taskpasswort); +beginpassword(beginnpasswort);break(quiet);msgcodert:=1;send(ruftask, +msgcodert,dsrt);do("ida(TRUE)");do("open mit loeschen (FALSE)");do( +" postfix ("""") ");do(" fetch dd (""EUMELbase.schulis"") ");do( +" BOOL VAR b:: db open (""EUMELbase.schulis"") ");commanddialogue(FALSE );do( +"isp monitor sicherungstask(""EUMELbase.schulis"")")ENDPROC +startinsertingidasich;PROC startinsertingschulissich:TASK VAR ruftask;INT +VAR msgcodert;DATASPACE VAR dsrt:=nilspace;wait(dsrt,msgcodert,ruftask); +continue(kanal);line;putline(name(myself));line;taskpassword(taskpasswort); +beginpassword(beginnpasswort);tasksourcequelle:=sourcetaskschulisdb;fetch(( +ALL tasksourcequelle)LIKE "EUMELbase.schulis*",tasksourcequelle);break(quiet) +;msgcodert:=1;send(ruftask,msgcodert,dsrt);do( +"isp monitor sicherungstask(""EUMELbase.schulis"")")ENDPROC +startinsertingschulissich;PROC startinsertingbaisysich:TASK VAR ruftask;INT +VAR msgcodert;DATASPACE VAR dsrt:=nilspace;wait(dsrt,msgcodert,ruftask); +continue(kanal);line;putline(name(myself));line;taskpassword(taskpasswort); +beginpassword(beginnpasswort);tasksourcequelle:=sourcetaskbaisydb;fetch((ALL +tasksourcequelle)LIKE "EUMELbase.baisy*",tasksourcequelle);fetch((ALL +tasksourcequelle)LIKE "*BAISY-*",tasksourcequelle);rename(text(ausbaustufenr) ++".BAISY-0","BAISY-0");rename(text(ausbaustufenr)+".BAISY-1","BAISY-1");break +(quiet);msgcodert:=1;send(ruftask,msgcodert,dsrt);do( +"isp monitor sicherungstask(""EUMELbase.baisy"")")ENDPROC +startinsertingbaisysich;PROC startinsertingdbkom:TASK VAR t,ruftask;INT VAR +msgcodert,msgcode;DATASPACE VAR dsrt:=nilspace,ds:=nilspace;wait(dsrt, +msgcodert,ruftask);continue(kanal);line;putline(name(myself)); +tasksourcequelle:=sourcetaskbaisy;#fehlerbeiinsert:=FALSE ;# +idanichtinstallierbar:=FALSE ;line;taskpassword(taskpasswort);beginpassword( +beginnpasswort);disablestop;fetch("EUMELbase.schulis",sourcetaskschulisdb); +fetchundinsert("DB.files");IF iserrorTHEN putline(errormessage);clearerror; +fehlerbeiinsert:=TRUE FI ;enablestop;break(quiet);IF NOT fehlerbeiinsertTHEN +begin("DB.dd",PROC startinsertingdbdd,t);call(t,0,ds,msgcode);IF msgcode=0 +THEN fehlerbeiinsert:=TRUE FI ;FI ;IF NOT fehlerbeiinsertTHEN begin( +"standard",PROC startinsertingstandard,t);call(t,0,ds,msgcode);IF msgcodeMOD +2=0THEN fehlerbeiinsert:=TRUE FI ;IF msgcode>=2THEN idanichtinstallierbar:= +TRUE FI FI ;continue(kanal);putline(name(myself)+" ist komplett.");break( +quiet);IF fehlerbeiinsertTHEN msgcodert:=0ELSE msgcodert:=1FI ;IF +idanichtinstallierbarTHEN msgcodert:=msgcodert+2FI ;send(ruftask,msgcodert, +dsrt);freeglobalmanager;END PROC startinsertingdbkom;PROC +startinsertingstandard:TASK VAR t,ruftask;INT VAR msgcodert,msgcode; +DATASPACE VAR dsrt:=nilspace,ds:=nilspace;wait(dsrt,msgcodert,ruftask); +continue(kanal);line;putline(name(myself));tasksourcequelle:=sourcetaskbaisy; +#fehlerbeiinsert:=FALSE ;#idanichtinstallierbar:=FALSE ;line;taskpassword( +taskpasswort);beginpassword(beginnpasswort);disablestop;fetchundinsert( +"STANDARD.files");IF iserrorTHEN putline(errormessage);clearerror; +fehlerbeiinsert:=TRUE FI ;enablestop;break(quiet);IF einzurichten(teilsystem6 +)THEN IF NOT fehlerbeiinsertTHEN IF procexists("autopageform")THEN begin( +"ida",PROC startinsertingida,t);call(t,0,ds,msgcode);IF msgcode=0THEN +fehlerbeiinsert:=TRUE FI ELSE idanichtinstallierbar:=TRUE FI FI ;FI ; +fehlerbeiinsert:=FALSE ;IF NOT fehlerbeiinsertTHEN begin( +"anschrlist werkzeuge",PROC startinsertinganschrlistwerkzeuge,t);call(t,0,ds, +msgcode);IF msgcode=0THEN fehlerbeiinsert:=TRUE FI ;FI ;fehlerbeiinsert:= +FALSE ;IF NOT fehlerbeiinsertTHEN begin("erfassungen",PROC +startinsertingerfassungen,t);call(t,0,ds,msgcode);IF msgcode=0THEN +fehlerbeiinsert:=TRUE FI ;FI ;fehlerbeiinsert:=FALSE ;IF NOT fehlerbeiinsert +THEN begin("anwendung",PROC startinsertinganwendung,t);call(t,0,ds,msgcode); +IF msgcode=0THEN fehlerbeiinsert:=TRUE FI ;FI ;continue(kanal);putline(name( +myself)+" ist komplett.");break(quiet);IF fehlerbeiinsertTHEN msgcodert:=0 +ELSE msgcodert:=1FI ;IF idanichtinstallierbarTHEN msgcodert:=msgcodert+2FI ; +send(ruftask,msgcodert,dsrt);freeglobalmanager;END PROC +startinsertingstandard;PROC startinsertingaccess:TASK VAR t,ruftask;INT VAR +msgcodert,msgcode;DATASPACE VAR dsrt:=nilspace,ds:=nilspace;wait(dsrt, +msgcodert,ruftask);continue(kanal);line;putline(name(myself)); +tasksourcequelle:=sourcetaskeumelbase;#fehlerbeiinsert:=FALSE ;#line; +taskpassword(taskpasswort);beginpassword(beginnpasswort);disablestop; +fetchundinsert("ACCESS.files");IF iserrorTHEN putline(errormessage); +clearerror;fehlerbeiinsert:=TRUE FI ;enablestop;break(quiet);IF NOT +fehlerbeiinsertTHEN begin("LOCAL",PROC startinsertinglocal,t);call(t,0,ds, +msgcode);IF msgcode=0THEN fehlerbeiinsert:=TRUE FI ;FI ;IF NOT +fehlerbeiinsertTHEN begin("DB REORG",PROC startinsertingdbreorg,t);call(t,0, +ds,msgcode);IF msgcode=0THEN fehlerbeiinsert:=TRUE FI ;FI ;continue(kanal); +putline(name(myself)+" ist komplett.");break(quiet);IF fehlerbeiinsertTHEN +msgcodert:=0ELSE msgcodert:=1FI ;send(ruftask,msgcodert,dsrt); +freeglobalmanagerEND PROC startinsertingaccess;PROC startinsertinglocal:TASK +VAR t,ruftask;INT VAR msgcodert,msgcode;DATASPACE VAR dsrt:=nilspace,ds:= +nilspace;wait(dsrt,msgcodert,ruftask);continue(kanal);line;putline(name( +myself));tasksourcequelle:=sourcetaskschulis;line;taskpassword(taskpasswort); +beginpassword(beginnpasswort);disablestop;fetchundinsert("0.LOCAL.files");IF +iserrorTHEN putline(errormessage);clearerror;fehlerbeiinsert:=TRUE FI ; +enablestop;break(quiet);IF NOT fehlerbeiinsertTHEN begin("MM",PROC +startinsertingmm,t);call(t,0,ds,msgcode);IF msgcode=0THEN fehlerbeiinsert:= +TRUE FI ;FI ;continue(kanal);putline(name(myself)+" ist komplett.");break( +quiet);IF fehlerbeiinsertTHEN msgcodert:=0ELSE msgcodert:=1FI ;send(ruftask, +msgcodert,dsrt);freeglobalmanagerEND PROC startinsertinglocal;PROC +startinsertingdbreorg:TASK VAR t,ruftask;INT VAR msgcodert,msgcode;DATASPACE +VAR dsrt:=nilspace,ds:=nilspace;wait(dsrt,msgcodert,ruftask);continue(kanal); +line;putline(name(myself));tasksourcequelle:=sourcetaskbaisy;line; +taskpassword(taskpasswort);beginpassword(beginnpasswort);disablestop; +fetchundinsert("DB REORG.files");IF iserrorTHEN putline(errormessage); +clearerror;fehlerbeiinsert:=TRUE FI ;enablestop;putline(name(myself)+ +" ist komplett.");break(quiet);IF fehlerbeiinsertTHEN msgcodert:=0ELSE +msgcodert:=1FI ;send(ruftask,msgcodert,dsrt);do("db reorganisation manager") +END PROC startinsertingdbreorg;PROC startinsertingmm:TASK VAR ruftask;INT +VAR msgcodert;DATASPACE VAR dsrt:=nilspace;wait(dsrt,msgcodert,ruftask); +continue(kanal);line;putline(name(myself));tasksourcequelle:= +sourcetaskeumelbase;line;taskpassword(taskpasswort);beginpassword( +beginnpasswort);disablestop;fetchundinsert("MM BAISY.files");IF iserrorTHEN +fehlerbeiinsert:=TRUE ;putline(errormessage);clearerrorFI ;enablestop;putline +(name(myself)+" ist komplett.");enablestop;break(quiet);IF fehlerbeiinsert +THEN msgcodert:=0ELSE msgcodert:=1FI ;send(ruftask,msgcodert,dsrt);do( +"generate db manager")END PROC startinsertingmm;PROC erzeugeeumelbasebaisy: +disablestop;testtask:=/"EUMELbase.baisy";IF iserrorTHEN clearerror; +tasksourcequelle:=sourcetaskbaisydb;fetch((ALL tasksourcequelle)LIKE +"EUMELbase.baisy*",tasksourcequelle);do( +"BOOL VAR b:: create db (""EUMELbase.baisy"")");do( +"restore db (""EUMELbase.baisy"")");commanddialogue(FALSE );forget(all); +commanddialogue(TRUE );FI ;enablestopENDPROC erzeugeeumelbasebaisy;PROC +erzeugeeumelbaseschulis:disablestop;testtask:=/"EUMELbase.schulis";IF iserror +THEN clearerror;tasksourcequelle:=sourcetaskschulisdb;fetch((ALL +tasksourcequelle)LIKE "EUMELbase.schulis*",tasksourcequelle);do( +"BOOL VAR b:: create db (""EUMELbase.schulis"")");do( +"restore db (""EUMELbase.schulis"")");commanddialogue(FALSE );forget(all); +commanddialogue(TRUE );FI ;enablestopENDPROC erzeugeeumelbaseschulis;PROC +startinsertinganwendung:TASK VAR ruftask,t;INT VAR msgcodert,i;DATASPACE VAR +dsrt:=nilspace;wait(dsrt,msgcodert,ruftask);continue(kanal);line;putline(name +(myself));tasksourcequelle:=sourcetaskschulis;line;taskpassword(taskpasswort) +;beginpassword(beginnpasswort);disablestop;tasksourcequelle:=sourcetaskbaisy; +checkoff;fetchundinsert("ANWENDUNG.files");IF iserrorTHEN putline( +errormessage);clearerror;fehlerbeiinsert:=TRUE FI ;enablestop;break(quiet); +FOR iFROM 1UPTO anzahlschulistasksREP IF NOT fehlerbeiinsertTHEN begin( +"schulis"+text(i),PROC startschulis1,t);FI ;PER ;continue(kanal);putline(name +(myself)+" ist komplett.");break(quiet);IF fehlerbeiinsertTHEN msgcodert:=0 +ELSE msgcodert:=1FI ;send(ruftask,msgcodert,dsrt);freeglobalmanager;END PROC +startinsertinganwendung;PROC startinsertinganschrlistwerkzeuge:TASK VAR +ruftask,t;INT VAR msgcodert,msgcode;DATASPACE VAR dsrt:=nilspace,ds:=nilspace +;wait(dsrt,msgcodert,ruftask);continue(kanal);line;putline(name(myself)); +tasksourcequelle:=sourcetaskschulis;#fehlerbeiinsert:=FALSE ;#line; +taskpassword(taskpasswort);beginpassword(beginnpasswort);disablestop; +fetchundinsert("0.ANSCHRLISTWERKZEUGE.files");do(procaufruf1);fetchundinsert( +"0.ANSCHRLISTWERKZEUGE TEIL2.files");IF iserrorTHEN putline(errormessage); +clearerror;fehlerbeiinsert:=TRUE FI ;enablestop;break(quiet);IF einzurichten( +teilsystem5)THEN fehlerbeiinsert:=FALSE ;IF NOT fehlerbeiinsertTHEN +installverzeichnis:="5.STATISTIK.files";begin("statistik",PROC +startinsertinganwendungstask,t);call(t,0,ds,msgcode);IF msgcode=0THEN +fehlerbeiinsert:=TRUE FI ;FI ;FI ;IF einzurichten(teilsystem2)THEN +fehlerbeiinsert:=FALSE ;IF NOT fehlerbeiinsertTHEN installverzeichnis:= +"2.AUSWERTUNGEN KURSWAHL.files";begin("auswertungen kurswahl",PROC +startinsertinganwendungstask,t);call(t,0,ds,msgcode);IF msgcode=0THEN +fehlerbeiinsert:=TRUE FI ;FI ;FI ;IF einzurichten(teilsystem4)THEN +fehlerbeiinsert:=FALSE ;IF NOT fehlerbeiinsertTHEN installverzeichnis:= +"4.AUSWERTUNGEN STUNDENPLAN 3.files";begin("auswertungen stundenplan 3",PROC +startinsertinganwendungstask,t);call(t,0,ds,msgcode);IF msgcode=0THEN +fehlerbeiinsert:=TRUE FI ;FI ;fehlerbeiinsert:=FALSE ;IF NOT fehlerbeiinsert +THEN installverzeichnis:="4.AUSWERTUNGEN STUNDENPLAN 2.files";begin( +"auswertungen stundenplan 2",PROC startinsertinganwendungstask,t);call(t,0,ds +,msgcode);IF msgcode=0THEN fehlerbeiinsert:=TRUE FI ;FI ;fehlerbeiinsert:= +FALSE ;IF NOT fehlerbeiinsertTHEN installverzeichnis:= +"4.AUSWERTUNGEN STUNDENPLAN.files";begin("auswertungen stundenplan",PROC +startinsertinganwendungstask,t);call(t,0,ds,msgcode);IF msgcode=0THEN +fehlerbeiinsert:=TRUE FI ;FI ;FI ;fehlerbeiinsert:=FALSE ;IF NOT +fehlerbeiinsertTHEN installverzeichnis:="0.ANSCHREIBEN.files";begin( +"anschreiben",PROC startinsertinganwendungstask,t);call(t,0,ds,msgcode);IF +msgcode=0THEN fehlerbeiinsert:=TRUE FI ;FI ;fehlerbeiinsert:=FALSE ;IF NOT +fehlerbeiinsertTHEN installverzeichnis:="0.LISTEN 2.files";begin("listen 2", +PROC startinsertinganwendungstask,t);call(t,0,ds,msgcode);IF msgcode=0THEN +fehlerbeiinsert:=TRUE FI ;FI ;fehlerbeiinsert:=FALSE ;IF NOT fehlerbeiinsert +THEN installverzeichnis:="0.LISTEN.files";begin("listen",PROC +startinsertinganwendungstask,t);call(t,0,ds,msgcode);IF msgcode=0THEN +fehlerbeiinsert:=TRUE FI ;FI ;continue(kanal);putline(name(myself)+ +" ist komplett.");break(quiet);IF fehlerbeiinsertTHEN msgcodert:=0ELSE +msgcodert:=1FI ;send(ruftask,msgcodert,dsrt);freeglobalmanager;END PROC +startinsertinganschrlistwerkzeuge;PROC startinsertinganwendungstask:TASK VAR +ruftask,t;INT VAR msgcodert;DATASPACE VAR dsrt:=nilspace;wait(dsrt,msgcodert, +ruftask);continue(kanal);line;putline(name(myself));tasksourcequelle:= +sourcetaskschulis;#fehlerbeiinsert:=FALSE ;#line;taskpassword(taskpasswort); +beginpassword(beginnpasswort);disablestop;fetchundinsert(installverzeichnis); +IF iserrorTHEN putline(errormessage);clearerror;fehlerbeiinsert:=TRUE FI ; +enablestop;break(quiet);IF NOT fehlerbeiinsertTHEN begin(name(myself)+ +" manager",PROC starteaufrufmanager,t);FI ;continue(kanal);putline(name( +myself)+" ist komplett.");break(quiet);IF fehlerbeiinsertTHEN msgcodert:=0 +ELSE msgcodert:=1FI ;send(ruftask,msgcodert,dsrt);freeglobalmanager;END PROC +startinsertinganwendungstask;PROC startinsertingerfassungen:TASK VAR ruftask, +t;INT VAR msgcodert,msgcode;DATASPACE VAR dsrt:=nilspace,ds:=nilspace;wait( +dsrt,msgcodert,ruftask);continue(kanal);line;putline(name(myself)); +tasksourcequelle:=sourcetaskschulis;#fehlerbeiinsert:=FALSE ;#line; +taskpassword(taskpasswort);beginpassword(beginnpasswort);disablestop; +fetchundinsert("0.ERFASSUNGEN.files");IF iserrorTHEN putline(errormessage); +clearerror;fehlerbeiinsert:=TRUE FI ;enablestop;break(quiet);IF einzurichten( +teilsystem2)THEN fehlerbeiinsert:=FALSE ;IF NOT fehlerbeiinsertTHEN +installverzeichnis:="2.ERFASSUNGEN KURSWAHL 2.files";begin( +"erfassungen kurswahl 2",PROC startinsertinganwendungstask,t);call(t,0,ds, +msgcode);IF msgcode=0THEN fehlerbeiinsert:=TRUE FI ;FI ;fehlerbeiinsert:= +FALSE ;IF NOT fehlerbeiinsertTHEN installverzeichnis:= +"2.ERFASSUNGEN KURSWAHL.files";begin("erfassungen kurswahl",PROC +startinsertinganwendungstask,t);call(t,0,ds,msgcode);IF msgcode=0THEN +fehlerbeiinsert:=TRUE FI ;FI ;FI ;IF einzurichten(teilsystem4)THEN IF NOT +fehlerbeiinsertTHEN installverzeichnis:="4.ERFASSUNGEN STUNDENPLAN.files"; +begin("erfassungen stundenplan",PROC startinsertingerfassungenstundenplan,t); +call(t,0,ds,msgcode);IF msgcode=0THEN fehlerbeiinsert:=TRUE FI ;FI ;FI ; +fehlerbeiinsert:=FALSE ;IF NOT fehlerbeiinsertTHEN installverzeichnis:= +"0.ERFASSUNGEN EINZELN 2.files";begin("erfassungen einzeln 2",PROC +startinsertinganwendungstask,t);call(t,0,ds,msgcode);IF msgcode=0THEN +fehlerbeiinsert:=TRUE FI ;FI ;fehlerbeiinsert:=FALSE ;IF NOT fehlerbeiinsert +THEN installverzeichnis:="0.ERFASSUNGEN EINZELN.files";begin( +"erfassungen einzeln",PROC startinsertinganwendungstask,t);call(t,0,ds, +msgcode);IF msgcode=0THEN fehlerbeiinsert:=TRUE FI ;FI ;fehlerbeiinsert:= +FALSE ;IF einzurichten(teilsystem4)THEN IF NOT fehlerbeiinsertTHEN +installverzeichnis:="4.ERFASSUNGEN LISTENWEISE 3.files";begin( +"erfassungen listenweise 3",PROC startinsertinganwendungstask,t);call(t,0,ds, +msgcode);IF msgcode=0THEN fehlerbeiinsert:=TRUE FI ;FI ;fehlerbeiinsert:= +FALSE ;IF NOT fehlerbeiinsertTHEN installverzeichnis:= +"4.ERFASSUNGEN LISTENWEISE 2.files";begin("erfassungen listenweise 2",PROC +startinsertinganwendungstask,t);call(t,0,ds,msgcode);IF msgcode=0THEN +fehlerbeiinsert:=TRUE FI ;FI ;FI ;fehlerbeiinsert:=FALSE ;IF NOT +fehlerbeiinsertTHEN installverzeichnis:="0.ERFASSUNGEN LISTENWEISE.files"; +begin("erfassungen listenweise",PROC startinsertinganwendungstask,t);call(t,0 +,ds,msgcode);IF msgcode=0THEN fehlerbeiinsert:=TRUE FI ;FI ;continue(kanal); +putline(name(myself)+" ist komplett.");break(quiet);IF fehlerbeiinsertTHEN +msgcodert:=0ELSE msgcodert:=1FI ;send(ruftask,msgcodert,dsrt); +freeglobalmanager;END PROC startinsertingerfassungen;PROC +startinsertingerfassungenstundenplan:TASK VAR ruftask,t;INT VAR msgcodert; +DATASPACE VAR dsrt:=nilspace;wait(dsrt,msgcodert,ruftask);continue(kanal); +line;putline(name(myself));tasksourcequelle:=sourcetaskschulis;# +fehlerbeiinsert:=FALSE ;#line;taskpassword(taskpasswort);beginpassword( +beginnpasswort);disablestop;fetchundinsert("4.ERFASSUNGEN STUNDENPLAN.files") +;IF iserrorTHEN putline(errormessage);clearerror;fehlerbeiinsert:=TRUE FI ; +enablestop;break(quiet);IF NOT fehlerbeiinsertTHEN begin(name(myself)+ +" manager",PROC starteaufrufmanagersingletask,t);FI ;continue(kanal);putline( +name(myself)+" ist komplett.");break(quiet);IF fehlerbeiinsertTHEN msgcodert +:=0ELSE msgcodert:=1FI ;send(ruftask,msgcodert,dsrt);freeglobalmanager;END +PROC startinsertingerfassungenstundenplan;PROC starteaufrufmanager:do( +"starte aufruf manager")ENDPROC starteaufrufmanager;PROC +starteaufrufmanagersingletask:do("starte aufruf manager(1)")ENDPROC +starteaufrufmanagersingletask;PROC startinsertingida:TASK VAR ruftask,t;INT +VAR msgcodert;DATASPACE VAR dsrt:=nilspace;wait(dsrt,msgcodert,ruftask); +continue(kanal);line;putline(name(myself));tasksourcequelle:= +sourcetaskschulis;line;taskpassword(taskpasswort);beginpassword( +beginnpasswort);disablestop;fetchundinsert("6.IDA.files");do(procaufruf2);IF +iserrorTHEN putline(errormessage);clearerror;fehlerbeiinsert:=TRUE FI ; +enablestop;break(quiet);IF NOT fehlerbeiinsertTHEN begin("ida manager",PROC +starteaufrufmanager,t);FI ;continue(kanal);putline(name(myself)+ +" ist komplett.");break(quiet);IF fehlerbeiinsertTHEN msgcodert:=0ELSE +msgcodert:=1FI ;send(ruftask,msgcodert,dsrt);freeglobalmanager;END PROC +startinsertingida;PROC startbaisy1:do("monitor")END PROC startbaisy1;PROC +startschulis1:disablestop;startschulisunterdisablestop;IF iserrorTHEN +clearerrorFI ;enablestop;do("monitor")END PROC startschulis1;PROC +startschulisunterdisablestop:enablestop;do( +"oeffne datenbank (""EUMELbase.schulis"")");do("starte schulis");END PROC +startschulisunterdisablestop;PROC fetchundinsert(TEXT CONST datname):IF +fehlerbeiinsertTHEN LEAVE fetchundinsertFI ;disablestop;fetch(datname, +tasksourcequelle);putline("Task "+name(myself)+" wird eingerichtet !");INT +VAR indexnr:=0;TEXT VAR thesname;THESAURUS VAR thes:=ALL datname;get(thes, +thesname,indexnr);WHILE indexnr>0REP IF dateizuberuecksichtigen(thesname) +THEN fetch(thesname,tasksourcequelle);putline(thesname);INT VAR taskkanal:= +channel;break(quiet);insert(thesname);continue(taskkanal);IF iserrorTHEN +fehlerbeiinsert:=TRUE ;put(errormessage);clearerrorFI ;forget(thesname,quiet) +FI ;get(thes,thesname,indexnr);PER ;commanddialogue(FALSE );forget(datname, +quiet);commanddialogue(TRUE );enablestop.END PROC fetchundinsert;BOOL PROC +dateizuberuecksichtigen(TEXT CONST dateiname):INT VAR pospraefixende:=pos( +dateiname,praefixtrenner);TEXT VAR dateipraefix:=subtext(dateiname,1, +pospraefixende-1);IF dateipraefix=""THEN TRUE ELIF dateipraefix= +allgemeinedateiTHEN TRUE ELIF dateipraefix>"9"THEN TRUE ELSE pos( +gueltigepraefixe,teilsystemtrenner+dateipraefix+teilsystemtrenner)>0FI END +PROC dateizuberuecksichtigen;LET invers="",inversoff="",cdown=10,cup=3,esc= +27,hop=1,zeilenlaenge=80,strichelement="=",maxiofelder=15;TYPE MASKENTEXTE = +STRUCT (INT x,y,l,TEXT t,BOOL lfest);ROW maxiofelderMASKENTEXTE VAR mt;TASK +PROC sourcetask(INT CONST i):IF int(mt[i+1].t)<>meinestationTHEN int(mt[i+1]. +t)/mt[i].tELSE /mt[i].tFI ENDPROC sourcetask;TASK PROC sourcetaskbaisy: +sourcetask(1)ENDPROC sourcetaskbaisy;TASK PROC sourcetaskschulis:sourcetask(3 +)ENDPROC sourcetaskschulis;TASK PROC sourcetaskeumelbase:sourcetask(5) +ENDPROC sourcetaskeumelbase;TASK PROC sourcetaskvordrucke:sourcetask(7) +ENDPROC sourcetaskvordrucke;TASK PROC sourcetaskbaisydb:sourcetask(9)ENDPROC +sourcetaskbaisydb;TASK PROC sourcetaskschulisdb:sourcetask(11)ENDPROC +sourcetaskschulisdb;INT PROC anzahlschulistasks:int(mt[13].t)ENDPROC +anzahlschulistasks;TEXT PROC taskpasswort:mt[14].tENDPROC taskpasswort;TEXT +PROC beginnpasswort:mt[15].tENDPROC beginnpasswort;PROC writexytext(INT +CONST x,y,TEXT CONST t):cursor(x,y);write(t)ENDPROC writexytext;PROC +writexyinvers(INT CONST x,y,TEXT CONST t):cursor(x,y);write(invers+t+ +inversoff)ENDPROC writexyinvers;PROC strich(INT CONST zeile):writexytext(1, +zeile,zeilenlaenge*strichelement)ENDPROC strich;PROC kosmetik:page;strich(1); +strich(4);strich(23);kopf.kopf:writexyinvers(27,2," S C H U L I S "); +writexytext(10,3,"Installationsprogramm für SCHULIS Version "+versionsnummer) +.ENDPROC kosmetik;PROC maske:kosmetik;fuss;rumpf.fuss:writexyinvers(2,24, +"ESC HOP = Start CURSOR UP/DOWN = nächstes/voriges Feld ESC ESC = Abbruch" +);.rumpf:writexytext(3,5, +"BAISY-Quelltexte in Task : auf Station:"); +writexytext(3,7, +"SCHULIS-Quelltexte in Task : auf Station:"); +writexytext(3,9, +"EUMELbase-Quelltexte in Task: auf Station:"); +writexytext(3,11, +"Vordrucke in Task : auf Station:"); +writexytext(3,13, +"BAISY-Datenbank in Task : auf Station:"); +writexytext(3,15, +"SCHULIS-Datenbank in Task : auf Station:"); +writexytext(3,20,"Anzahl der Arbeitsplätze für SCHULIS:");writexytext(3,22, +"Task-Password: Beginn-Password:").ENDPROC maske; +TEXT PROC mystation:text(station(myself))ENDPROC mystation;PROC +maskentexteinitialisieren:setmt(1,33,5,27,"BAISY-Quellen");setmt(2,75,5,3, +mystation,TRUE );setmt(3,33,7,27,"SCHULIS-Quellen");setmt(4,75,7,3,mystation, +TRUE );setmt(5,33,9,27,"EUMELbase-Quellen");setmt(6,75,9,3,mystation,TRUE ); +setmt(7,33,11,27,"VORDRUCKE");setmt(8,75,11,3,mystation,TRUE );setmt(9,33,13, +27,"BAISY-SCHULIS-DB");setmt(10,75,13,3,mystation,TRUE );setmt(11,33,15,27, +"BAISY-SCHULIS-DB");setmt(12,75,15,3,mystation,TRUE );setmt(13,45,20,3,"1", +TRUE );setmt(14,18,22,21,"");setmt(15,60,22,21,"");ENDPROC +maskentexteinitialisieren;PROC setmt(INT CONST i,px,py,pl,TEXT CONST pt): +setmt(i,px,py,pl,pt,FALSE )ENDPROC setmt;PROC setmt(INT CONST i,px,py,pl, +TEXT CONST pt,BOOL CONST pf):mt[i].x:=px;mt[i].y:=py;mt[i].l:=pl;mt[i].t:=pt; +mt[i].lfest:=pfENDPROC setmt;PROC maskentexte:INT VAR i;FOR iFROM 1UPTO +maxiofelderREP writexytext(mt[i].x,mt[i].y,text(mt[i].t,mt[i].l))PER ENDPROC +maskentexte;BOOL PROC maskeeditiert:INT VAR fnr:=1,editl;TEXT VAR exitchar:= +"";REP cursor(mt[fnr].x,mt[fnr].y);bestimmeeditlaenge;editget(mt[fnr].t,editl +,mt[fnr].l,"� +","��?",exitchar);exitchar:=exitcharSUB length(exitchar); +SELECT code(exitchar)OF CASE cup:vorigesfeldCASE cdown:naechstesfeldCASE esc: +kosmetik;cursor(8,10);IF yes( +"Soll die Installation tatsächlich abgebrochen werden")THEN LEAVE +maskeeditiertWITH FALSE ELSE restorescreenFI CASE hop:kosmetik;cursor(1,10); +IF yes("Soll mit der Installation von SCHULIS begonnen werden")THEN page; +LEAVE maskeeditiertWITH TRUE ELSE restorescreenFI OTHERWISE :naechstesfeld +ENDSELECT PER ;FALSE .restorescreen:maske;maskentexte.naechstesfeld:fnr:=(fnr +MOD maxiofelder)+1.vorigesfeld:IF fnr=1THEN fnr:=maxiofelderELSE fnrDECR 1FI +.bestimmeeditlaenge:IF mt[fnr].lfestTHEN editl:=mt[fnr].lELSE editl:=maxint-1 +FI .ENDPROC maskeeditiert;LET endofpermanenttable=32767;DATASPACE VAR +bulletinds:=nilspace;FILE VAR bulletinfile;TEXT VAR buffer,objectname,pattern +;INT VAR packetlink,linenumber;BOOL VAR found:=TRUE ;BOOL PROC procexists( +TEXT CONST procname):prepbulletin;objectname:=compress(procname);scan( +objectname);nextsymbol(pattern);packetlink:=endofpermanenttable;standardhelp. +prepbulletin:forget(bulletinds);bulletinds:=nilspace;bulletinfile:= +sequentialfile(output,bulletinds);linenumber:=0;buffer:="".standardhelp: +toobject(pattern);found.END PROC procexists;PROC toobject(TEXT CONST +searchedobject):LET endofhashtable=1023;INT VAR permanentpointer,index,ntlink +;ntlink:=0;FOR indexFROM 1UPTO LENGTH searchedobjectREP ntlinkINCR ntlink;IF +ntlink>endofhashtableTHEN ntlinkDECR endofhashtableFI ;ntlink:=(ntlink+code( +searchedobjectSUB index))MOD 1024PER ;found:=FALSE ;WHILE yetanotherntentry +REP permanentpointer:=cdbint(ntlink+1);objectname:=cdbtext(ntlink+2);IF +objectname=searchedobjectTHEN found:=TRUE ;LEAVE toobjectFI PER . +yetanotherntentry:ntlink:=cdbint(ntlink);ntlink<>0.END PROC toobject;INT +PROC cdbint(INT CONST index):EXTERNAL 116END PROC cdbint;TEXT PROC cdbtext( +INT CONST index):EXTERNAL 117END PROC cdbtext; + |