1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
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;
|