diff --git a/WEGA/contrib/ingres/dbs/ing_src/teil2/report2.8 b/WEGA/contrib/ingres/dbs/ing_src/teil2/report2.8 new file mode 100644 index 0000000..fae77ca --- /dev/null +++ b/WEGA/contrib/ingres/dbs/ing_src/teil2/report2.8 @@ -0,0 +1,1034 @@ +.NH 3 +.ft B +Ausgabe von Werten als Bin\o'a"'r-, Oktal- +.br + oder Hexadezimalzahl im Byte- oder Wortformat +.ft R +.LP +Der Reportgenerator f\o'u"'r \*(yy\ bietet die M\o'o"'glichkeit, Werte +in einem anderen Zahlensystem darzustellen. Die Werte werden +unabh\o'a"'ngig von der Wertart als Bitketten interpretiert und in das +gew\o'u"'nschte Zahlensystem umgewandelt. + +.ft B +Syntax +.ft R +.DS L + + _ _ + | | + | Systemvariable | + _ _ | Systemkonstante | + | BIT | _ _ |_ _ | + | OCT | | BYTE | laenge || LAST | | + | HEX | | WORD | || VALUE | number | + | DEC | ~ ~ || NEXT | | + ~ ~ ~~ ~ ~ + +.DE +.LP +BYTE ist Standard, f\o'u"'hrende Nullen werden unterdr\o'u"'ckt. +.LP +Ist die L\o'a"'nge angegeben, wird der Wert entweder vollst\o'a"'ndig +oder rechts verk\o'u"'rzt linksb\o'u"'ndig in den bereitgestellten Platz +eingetragen. Fehlt die L\o'a"'ngenangabe, wird der Wert vollst\o'a"'ndig +in der tats\o'a"'chlichen L\o'a"'nge ausgegeben. + +.ft B +Beispiel +.ft R +.DS L + BIT LENGTH 10 VALUE 1 '*' + OCT VALUE 1 '*' + HEX VALUE 1 + NEW LINE + + Wert von VALUE 1: + + a) 71 =i2 + b) 30 =i1 + c) 'ABC' string =c3 + + Darstellung: + + BIT OCT HEX + + a) 0001000111 * 000000 000107 * 0000 0047 + b) 00011110 * 036 * 1E + c) 0100000101 * 101 102 103 * 41 42 43 +.DE +.NH 3 +.ft B +Wertzuweisungen zu Systemvariablen - +.br + arithmetische Ausdr\o'u"'cke +.ft R +.LP +F\o'u"'r die Berechnung nicht in der Relation enthaltener Werte steht +im Reportgenerator eine umfangreiche Arithmetik zur Verf\o'u"'gung. +Dem an C gew\o'o"'hnten Nutzer wird zus\o'a"'tzlich die Notation +arithmetischer Zuweisungen gem\o'a"'ss C gestattet. + +.ft B +Syntax +.ft R +.DS L + + SET systemvariable = arithm ausdruck +.DE +.LP +Durch die SET-Anweisung wird einer Systemvariablen das Ergebnis +eines arithmetischen Ausdrucks zugewiesen. Bei den Variablen +COLUMN und LINE ist die Wertzuweisung mit Ausgabeoperationen +verbunden. +Im arithmetischen +Ausdruck k\o'o"'nnen beliebige numerische Werte mit den Operationen +.DS L + + + oder += Addition + - oder -= Subtration + * oder *= Multiplikation + : oder := Division + / oder /= ganzzahlige Division + % oder %= Modulodivision (Divisionsrest) +.DE + +verkn\o'u"'pft werden. Die Klammerung von Teilausdr\o'u"'cken und die +Negation von Werten ist m\o'o"'glich. Die Syntax eines arithmetischen +Ausdruckes entspricht der allgemein \o'u"'blichen Notation +mathematischer Formeln. +.LP +.ft B +Beispiele +.ft R +.IP 1. +allgemeiner Ausdruck +.DS L +SET VAR 30 = ( - VALUE 10 * VAR 3 + 27.12E-7 ) + : ( VAR 7 % 19 / 7.2 ) +.DE +.IP 2. +Es soll die durchschnittliche Planerf\o'u"'llung +einer Plankennziffer VALUE 4 mit den Istwerten +VALUE 5 bis 7 ausgegeben werden: +.DS L +SET VAR 1 = ( VALUE 5 + VALUE 6 + VALUE 7 ) / 3 +INTEGER SCALE 100 PIC 'DURCHSCHNITT: 009.99 %' VAR 1 +.DE +.IP 3. +Es soll auf die 30. Zeile der Seite positioniert werden: +.DS L +SET LINE = 30 +.DE +.LP +Tritt w\o'a"'hrend der Bearbeitung eines arithmetischen Ausdrucks ein +Fehler auf, wenn z. B. ein Zeichenkettenwert beteiligt ist, wird +die Berechnung abgebrochen. Der Variablen wird kein Wert +zugewiesen, sie bleibt unver\o'a"'ndert. +.NH 3 +.ft B +Boolesche Variablen und Ausdr\o'u"'cke +.ft R +.LP +F\o'u"'r die wertabh\o'a"'ngige Programmabarbeitung stehen +M\o'o"'glichkeiten zur Formulierung Boolescher +Ausdr\o'u"'cke sowie 101 logische Variable +zur Verf\o'u"'gung. +.LP +Die Schalter +.DS L + SWITCH 0 bis SWITCH 125 +.DE +k\o'o"'nnen die zwei Zust\o'a"'nde "ein" und "aus" bzw. +.ft B +TRUE +.ft R +und +.ft B +FALSE +.ft R +annehmen. +.LP +Initialisiert sind die Variablen bei Programmbeginn mit FALSE. +F\o'u"'r ihre \o'A"'nderung stehen vier M\o'o"'glichkeiten zur Auswahl. +.LP +.ft B +Syntax +.ft R +.DS L + + _ _ + | CLEAR | + | COMPLEMENT | SWITCH number + | SET | + ~ ~ + SET SWITCH number = boolean +.DE +.LP +Mit +.ft B +CLEAR, +.ft R +.ft B +COMPLEMENT +.ft R +und +.ft B +SET +.ft R +kann ein bestimmter Schalter +gel\o'o"'scht (FALSE), umgekehrt \%(TRUE-->FALSE, \%FALSE-->TRUE) bzw. +gesetzt (TRUE) werden. Die Wertzuweisung erlaubt das Eintragen +des Ergebnisses eines Booleschen Ausdrucks. Dieser wird durch die +Verkn\o'u"'pfung von Boole-Werten (TRUE/FALSE) gebildet. +Verkn\o'u"'pfungsoperatoren sind +.DS L + OR || bzw. | logisches "oder" (Disjunktion) + AND && bzw. & logisches "und" (Konjunktion). +.DE +.LP +Die Negation erfolgt mit einem vorgestellten +.ft B +NOT +.ft R +oder +.ft B +!. +.ft R +Eine Klammerung von Teilausdr\o'u"'cken ist m\o'o"'glich. +.LP +Boole-Werte k\o'o"'nnen logische Variablen (SWITCH number) +mit den Werten TRUE +oder FALSE sowie die Ergebnisse von Vergleichs\%operatoren sein. Als +Vergleichsoperanden sind alle nume\%rischen und Zeichenkettenwerte, +arithmetische Ausdr\o'u"'cke sowie NULL (Vergleich auf NULL-Wert) +zugelassen. +.LP +Die Operanden k\o'o"'nnen miteinander verglichen werden durch: +.DS L + + < kleiner + > gr\o'o"'sser + != ungleich + <> ungleich + <= kleiner gleich + >= gr\o'o"'sser gleich + = gleich. + == gleich +.DE +.LP +Zeichenkettenwerte k\o'o"'nnen nicht mit numerischen Werten verglichen +werden. Ein NULL-Wert ist grunds\o'a"'tzlich kleiner als ein beliebiger +anderer Wert. Zwei NULL-Werte sind gleich. +.LP +Die Abarbeitungsfolge eines Booleschen Ausdrucks wird durch die +Priorit\o'a"'t der Operatoren bestimmt. +Die h\o'o"'chste Priorit\o'a"'t hat +die numerische Negation, die kleinste OR: +.DS L + + ^ ! (Negationszeichen) + | * / : % + | + - + Priorit\o'a"'t < > <> != <= >= = == + | NOT ! + | AND && & + | OR || | + ^ +.DE +.LP +Bei gleicher Priorit\o'a"'t erfolgt die Bearbeitung von links nach +rechts. +.LP +.ft B +Beispiele +.ft R +.DS L +SET SWITCH 10 +COMPLEMENT SWITCH 10 +.DE +Mit SET wird die logische Variable 10 TRUE gesetzt und +durch COMPLEMENT umgekehrt, d.h. FALSE +.DS L +SET SWITCH 5 = VALUE 3 + 5 < VAR 7 AND + (SWITCH 5 OR SWITCH 10) AND + (VALUE 2 <> NULL OR + NOT VALUE 3 + 100 = VAR 8) +.DE +Der logischen Variablen 5 wird das Ergebnis des Booleschen Ausdrucks +zugewiesen. +.LP +Tritt w\o'a"'hrend der Bearbeitung eines Booleschen Ausdrucks ein +Fehler auf, wird diese abgebrochen und das Ergebnis FALSE +gesetzt. +.NH 3 +.ft B +Steuerung der Programmabarbeitung +.ft R +.NH 4 +.ft B +Verzweigung +.ft R +.LP +Die Verzweigung erm\o'o"'glicht die Abarbeitung von Anweisungen in +Abh\o'a"'ngigkeit von einer Bedingung (Boolescher Ausdruck). + +.ft B +Syntax +.ft R +.br + +IF boolean THEN laufsteuerung [ELSE laufsteuerung] ENDIF / ENDI +.LP +Hat der Boolesche Ausdruck den Wert TRUE, wird der THEN-Zweig +abgearbeitet, bei FALSE, wenn angegeben, der ELSE-Zweig. +Abgeschlossen wird die Anweisung durch ENDI. +Anstelle ENDI kann auch END IF stehen. +Die Verschachtelung +von IF-Anweisungen ist m\o'o"'glich. + +.ft B +Beispiel +.ft R + +Es soll das Quartal ermittelt und ausgegeben werden: +.DS L +IF MONTH < 6 + THEN IF MONTH < 3 + THEN 'I' + ELSE 'II' + ENDI + ELSE IF MONTH < 9 + THEN 'III' + ELSE 'IV' + ENDI +ENDI + '. QUARTAL' +.DE + +Im Dezember wird zum Beispiel +IV. QUARTAL ausgegeben. +.LP +.ft B +Hinweis: +.ft R +Die Werte der Systemvariablen MONTH haben den Bereich 0...11 ! +.NH 4 +.ft B +Zyklus +.ft B +.LP +F\o'u"'r die Programmierung von Zyklen stehen zwei Anweisungen +bereit. + +.ft B +Syntax +.ft R +.DS L + + REPEAT number laufsteuerung ENDREPEAT/ENDR + WHILE boolean DO laufsteuerung ENDWHILE/ENDW +.DE +.LP +Bei REPEAT wird der Zyklus in einer vorher festgelegten Anzahl +(number), jedoch mindestens einmal, durchlaufen. Ist number ein +reeller Wert, wird er durch Abrunden zu einem ganzzahligen +umgewandelt. +Der WHILE-Zyklus wird ausgef\o'u"'hrt, solange der Boolesche Ausdruck +den Wert TRUE liefert. + +.ft B +Beispiel +.ft R + +In VALUE 1 bis VALUE 10 stehen Werte zwischen 0 und 100. Die +Werte sollen, wenn sie kleiner als 50 sind, als r\o'o"'mische Zahlen +ausgegeben werden: +.DS L + +SET VAR 1 = 1 +REPEAT 10 + IF VALUE VAR 1 < 50 + THEN + SET VAR 2 = VALUE VAR 1 + WHILE VAR 2 >= 10 + DO 'X' SET VAR 2 -= 10 + ENDW + IF VAR 2 >= 5 + THEN 'V' SET VAR 2 -= 5 + ENDI + IF VAR 2 > 0 + THEN REPEAT VAR 2 'I' ENDR + ENDI + SPACE 3 + ENDI + SET VAR 1 += 1 +ENDR +.DE +.LP +Sind im Tupel die ersten 10 Werte +.br + 1, 30, 60, 12, 77, 3, 90, 17, 22, 33 +.br +wird in die Liste eingetragen: +.br + I XXX XII III XVII XXII XXXIII +.NH 4 +.ft B +Fallauswahl +.ft R +.LP +Die Fallauswahl ist eine Mehrfachverzweigung, die durch eine +Variable gesteuert wird. + +.ft B +Syntax +.ft R +.DS L + CASE VAR number [IN] [DO laufsteuerung] + [OUT laufsteuerung]ENDCASE/ENDC +.DE +.LP +VAR number enth\o'a"'lt einen ganzzahligen Wert. Ist er 0, werden die +Anweisungen nach dem 1. DO abgearbeitet, ist er 2, die nach dem +2. DO usw. Ist f\o'u"'r den Wert keine DO-Konstruktion mehr da, oder +ist der Wert kleiner als 1, werden die Anweisungen von OUT +abgearbeitet, vorausgesetzt, OUT ist definiert. Ist VAR number reell, +wird durch Abrunden ein ganzzahliger Wert erzeugt. Die +CASE-Klausel wird mit ENDC abgeschlossen. +Die Angabe von IN kann entfallen. +.LP +.ft B +Achtung +.ft R +.LP +Die direkte Verschachtelung von CASE-Klauseln ist nicht m\o'o"'glich! +Wird eine CASE-Klausel jedoch in einer Prozedur vereinbart, ist +deren Aufruf innerhalb einer anderen CASE-Klausel realisierbar. +.LP +.ft B +Beispiel +.ft R +.LP +Im Kopf einer Monatsabrechnung soll der Name des Monats +ausgegeben werden: +.DS L + 'ABRECHNUNG FUER DEN MONAT ' + SET VAR 1 = MONTH + CASE VAR 1 + DO 'JANUAR' + DO 'FEBRUAR' + DO 'MAERZ' + DO 'APRIL' + DO 'MAI' + DO 'JUNI' + DO 'JULI' + DO 'AUGUST' + DO 'SEPTEMBER' + DO 'OKTOBER' + DO 'NOVEMBER' + DO 'DEZEMBER' + OUT '(DER MONAT MUSS ERST ERFUNDEN WERDEN)' + ENDC +.DE +Im September wird in den Report eingetragen: +.br + ABRECHNUNG FUER DEN MONAT SEPTEMBER +.NH 4 +.ft B +Prozeduren +.ft R +.LP +Oft verwendete gleichartige Programmteile k\o'o"'nnen in Prozeduren +vereinbart werden. + +.ft B +Syntax +.ft R +.DS L + PROC int laufsteuerung RETURN +.DE +.LP +Der Wert f\o'u"'r int beginnt mit 1. Es sind maximal +50 Werte vorgesehen. Als Identifikator der Prozedur +wird eine Nummer int festgelegt. Die Definition der +Prozeduren muss im Teil +.ft B +definitionen, +.ft R +die Notierung der Prozedur selbst im Teil +.ft B +prozeduren +.ft R +unmittelbar hinter AS erfolgen. +.LP +Beim Aufruf einer Prozedur werden alle Anweisungen bis RETURN +abgearbeitet. + +.ft B +Syntax +.ft R +.DS L + CALL [PROC] int +.DE +.LP +Der Parameter PROC kann ohne Bedeutungsverlust weggelassen +werden. int bestimmt die Nummer der gerufenen Prozedur. Es gilt der +Grundsatz, dass eine Prozedur vor dem ersten Aufruf definiert +sein muss. Das ist insbesondere bei der Definition mehrerer +Prozeduren zu beachten. Nicht erlaubt ist z.B. folgende +Konstruktion: +.DS L + PROC 1 CALL 5 RETURN + PROC 5 .... RETURN +.DE +.ft B +Beispiel +.ft R +.LP +Es soll eine Prozedur f\o'u"'r die Potenz X^Y +definiert werden +.br +(Y = nat\o'u"'rliche Zahl). +X wird in VAR 1, Y in VAR 2 erwartet, das +Ergebnis steht in VAR 0. +.DS L +PROC 1 + SET VAR 0 = 1 + REPEAT VAR 2 + SET VAR 0 = VAR 0 * VAR 1 + ENDR +RETURN +.DE +.LP +Die Berechnung von 13^11 wird realisiert mit: +.DS L +SET VAR 1 = 13 +SET VAR 2 = 11 +CALL 1 +REAL VAR 0 +.DE +.NH 4 +.ft B +Seitengestaltung +.ft R +.LP +Eine Seite hat im Reportgenerator f\o'u"'r \*(yy\ folgende +Gestalt: +.DS L + + COLUMNS + |<----------------->| + ________|___________________|______________ + /|\e | | PAGEBEGIN | | /|\e | + | | L |___________________| L | A | | + | | I | | I | L | | + | | N | Informationsteil | N | L | | + L| | E | | E | | | + I| | B | | E | L | | + N| | E | | N | I | | + E| | G | | D | N | | + S| | I | | | E | | + \e|/ | N | | | S | | + ________|___________________| | | | + | | PAGEEND | | | | + | |___________________|___| | | + |________________________________\e /__| +.DE +.LP +Die Gr\o'o"'sse einer Seite wird durch die Parameter COLUMNS, LINES +und ALL LINES bestimmt. Der Seitenrahmen mit +Seitenkopf (PAGEBEGIN), Seitenfuss (PAGEEND), linkem Seitenrand +(LINEBEGIN) und rechtem Seitenrand (LINEEND) wird, wenn die Teile +vom Nutzer definiert wurden, vom Reportgenerator automatisch f\o'u"'r +jede Seite aufgebaut. + +.ft B +Syntax +.ft R +.DS L + _ _ + | LINEBEGIN | + | LINEEND | + ON | PAGEBEGIN | [DO] [laufsteuerung] END/ENDO + | PAGEEND | + ~ ~ +.DE +.LP +Ist die Laufsteuerung nicht angegeben, gilt der Rahmenteil als +nicht definiert, d. h. eine existierende Definition wird +gel\o'o"'scht. Sind im Programm mehrere Definitionen f\o'u"'r einen +Rahmenteil angegeben, gilt immer die aktuellste. +.LP +In PAGEBEGIN und PAGEEND werden Informationen vereinbart, die auf +jeder Seite erscheinen sollen. Das k\o'o"'nnen die aktuelle +Seitennummer, \o'U"'berschriften, Fussnoten und Tupelwerte sein. Aber auch +Berechnungen k\o'o"'nnen ausgef\o'u"'hrt werden. Soll zum Beispiel die +Seitennummerierung in 10er Schritten erfolgen, muss in PAGEBEGIN +die Wertzuweisung SET PAGE = PAGE + 9 enthalten sein, +da bei Seitenwechsel automatisch um 1 erh\o'o"'ht wird. Mit +LINEBEGIN und LINEEND k\o'o"'nnen "Begrenzungen", +Zeilennummerierungen u.a. vereinbart werden. +.LP +Der Aufbau eines Rahmenteils wird vorzeitig abgebrochen, wenn bei +PAGEBEGIN und PAGEEND ein unerlaubter Seitenwechsel veranlasst +wird bzw. bei LINEBEGIN und LINEEND ein Zeilenvorschub. +.LP +Der Informationsteil nimmt den eigentlichen Inhalt der Seite auf. +Ist eine Zeile l\o'a"'nger als mit COLUMNS festgelegt, werden +\o'u"'berstehende Zeichen auf eine neue Zeile \o'u"'bertragen. +Ist eine Seite +voll, wird automatisch ein Seitenwechsel ausgel\o'o"'st. +.LP +Die L\o'a"'nge von PAGEBEGIN und PAGEEND ist beliebig und kann auch +von Seite zu Seite unterschiedlich sein. Reicht die physische +Seite nicht aus, wird eine zweite hinzugezogen. +.LP +Auch bei LINEBEGIN und LINEEND ist die L\o'a"'nge zun\o'a"'chst +unerheblich. Allerdings sollte darauf geachtet werden, dass diese +zusammen mit COLUMNS nicht gr\o'o"'sser als die maximale Druckbreite wird. +Werden die Seitenr\o'a"'nder bis zum physischen Blattende gew\o'u"'nscht, +muss PAGEEND um die entsprechende Anzahl Leerzeilen erweitert +werden. +.LP +Die Variable LINE bezieht sich in PAGEBEGIN und PAGEEND auf die +physische Seite, ebenso COLUMN in LINEBEGIN und LINEEND. +.LP +Ansonsten geben diese Variablen die Position bez\o'u"'glich des +Informationsteils an. + +.ft B +Beispiel +.ft R +.LP +Die Funktionsweise der Seitendefinition soll im folgenden an +einer "Mini"-Seite mit 12 Spalten und 7 Zeilen gezeigt werden. +Die physische Seite habe eine L\o'a"'nge von 12 Zeilen: +.nf +report kompl1_r +with + columns 12 + lines 7 + all lines 12 + big + + /* switches */ + define last_page = 1 + + /* domains */ + define d_name = 1 + define d_qual = 2 + define d_pkz = 3 + define d_lohn = 4 + define d_abt = 5 + define d_gruppe = 6 + + define #d_name = char 20 + define #d_qual = char 8 + define #d_pkz = char 12 + define #d_lohn = integer 2 + define #d_abt = integer 2 + define #d_gruppe = integer 2 + +as + +on pagebegin do + '-' 12 + \en + ' Seite: ' + integer @2 page + \en + \e2 date + \en +end + +on pageend do + if ! ^last_page then + \e6 'b.w.' + \en + end if + '-' 12 + \en +end + +on linebegin do 'I' end +on lineend do 'I' end + +\en2 +' Deckblatt' +\ef + +for all do + for one do + if #5 = 26 then + \e2 + char #1 batch 10 @20 + \en3 + end if + end one +end all + +set ^last_page +\e5 'Ende' ; +.fi +.LP +Als Tupelfile wird die Datenmenge des Beispiels +.ft B +kompl_p +.ft R +verwendet. Mit +dem Programm wird folgende Liste generiert: +.DS L + Erl\o'a"'uterung: + +I------------I Seitenkopf +I SEITE: 1 I mit Seitennummer +I 20-MAY-88 I und Datum +I I +I I +I DECKBLATT I Listenkopf +I I +I I +I I +I I +I B.W. I Seitenfuss +I------------I +I------------I +I SEITE: 2 I +I 20-MAY-88 I +I SCHMIDT, I automatischer Zeichenketten- +I HERMANN I umbruch (batch) +I I Zeilenvorschub +I I +I NEUMANN, I +I INGE I +I I Seitenvorschub, da Seite 2 +I B.W. I gef\o'u"'llt ist +I------------I +I------------I +I SEITE: 3 I +I 20-MAY-88 I +I I +I WARNKE, I +I PETER I +I I +I I +I ENDE I Listenende +I I kein Seitenfuss +I------------I + +.DE +.LP +Bei kurzen Programmen steht der Aufwand zur +Dom\o'a"'nendefinition in einem ung\o'u"'nstigen +Verh\o'a"'ltnis zur Gesamtbeschreibung. Auch wenn +diese Definition im Programm nicht komplett gebraucht wird, +muss sie vollst\o'a"'ndig sein (Identit\o'a"'t zum +Deskription-File). +.NH 4 +.ft B +Gruppenwechselprogrammierung +.ft R +.LP +In diesem Abschnitt sollen Hinweise zur +Gruppenwechselprogrammierung gegeben werden. +Diese erfolgt innerhalb der Anweisung +.DS L + FOR ONE DO ... ENDONE +.DE +w\o'a"'hrend der Bearbeitung eines Tupels. Unterschieden wird in +Gruppenbeginn und -ende. Ein Gruppenbeginn liegt vor, wenn das +Gruppenattribut im aktuellen Tupel verschieden ist von dem im +vorhergehenden Tupel. +Das bedeutet nat\o'u"'rlich, dass ein zum Gruppenattribut +sortiertes Tupelfile vorliegen muss. +In einem Booleschen Ausdruck l\o'a"'sst sich +das durch den Vergleich VALUE x <> LAST x f\o'u"'r das Tupelattribut +x abtesten. Verk\o'u"'rzend kann daf\o'u"'r auch geschrieben werden +.DS L + GROUPBEGIN x. +.DE +.LP +Diese Anweisung liefert einen Boole-Wert. Liegt ein Gruppenbeginn +vor, ist er TRUE. +.LP +Das Gruppenende l\o'a"'sst sich durch einen Vergleich mit dem +n\o'a"'chsten Tupel feststellen. +\o'A"'ndert sich das Gruppenattribut, +bedeutet das das Ende der Gruppe. +Abtesten l\o'a"'sst sich das mit der +Konstruktion VALUE x <> NEXT x oder verk\o'u"'rzend +.DS L + GROUPEND x. +.DE +.LP +Liegt das Gruppenende f\o'u"'r das Gruppenattribut x vor, liefert die +Anweisung den Wert TRUE. +.LP +Im einf\o'u"'hrenden Beispiel +.ft B +(pers_p) +.ft R +ist ein sehr einfacher Fall +der Gruppenwechselprogrammierung angef\o'u"'hrt. Der Gruppenname +.ft B +p_abt +.ft R +wird jeweils nur einmal am Beginn einer Gruppe +ausgegeben. Realisiert wurde das durch die Anweisungen +.DS L +IF GROUPBEGIN p_abt THEN + INTEGER @4 #p_abt +END IF +.DE +.LP +Ein komplizierteres Beispiel +ist im Programm +.ft B +kompl_p +.ft R +angef\o'u"'hrt. +Um eventuell mehr Klarheit zu schaffen, +soll nun noch ein relativ \o'u"'bersichtliches +Beispiel folgen. F\o'u"'r die +Relation +.ft B +perskomp +.ft R +ist f\o'u"'r jede Abteilung und jede Gruppe sowie f\o'u"'r alle +Mitarbeiter die Summe der L\o'o"'hne zu berechnen und auszugeben: +.nf +report kompl2_r +with + columns 35 + lines 20 + all lines 24 + big + + /* variables */ + define grp_lohn = 1 + define abt_lohn = 2 + define all_lohn = 3 + + /* domains */ + define d_name = 1 + define d_qual = 2 + define d_pkz = 3 + define d_lohn = 4 + define d_abt = 5 + define d_gruppe = 6 + + define #d_name = char 20 + define #d_qual = char 8 + define #d_pkz = char 12 + define #d_lohn = integer 2 + define #d_abt = integer 2 + define #d_gruppe = integer 2 + +as + +on pagebegin do + '-' 35 + \en + ' Seite: ' + integer @2 page + \e\e15 + date + \en + '-' 35 + \en +end + +on pageend do + '-' 35 + \en +end + +on linebegin do 'I' end +on lineend do 'I' end + +\en2 +' Deckblatt' \en +' Lohn nach Abteilungen und Gruppen' +\ef +set $1 = 0 +set $2 = 0 +set $3 = 0 + +for all do + for one do + set $1 += #4 + set $2 += #4 + set $3 += #4 + if groupend d_gruppe then + \e5 'Gruppe' + \e15 + integer @4 #d_gruppe + \e20 integer @8 $1 ',- M' + \en + set $1 = 0 + end if + if groupend d_abt then + \e5 'Abteilung' + \e15 + integer @4 #d_abt + \e20 integer @8 $2 ',- M ' + \en2 + set $2 = 0 + '-' 35 \en + end if + end one +end all + +'-' 35 \en +\e5 'Gesamt' +\e20 integer @8 $3 ',- M' +\en +'=' 35 \en3 +\e5 'Listenende' ; +.fi +.LP +Bei Abarbeitung wird folgende Liste +generiert: +.DS L +I-----------------------------------I +I SEITE: 1 20-MAY-88 I +I-----------------------------------I +I I +I I +I DECKBLATT I +I LOHN NACH ABTEILUNGEN UND GRUPPEN I +I I +I I +I I +I I +I I +I I +I I +I I +I I +I I +I I +I I +I I +I I +I I +I I +I-----------------------------------I +.DE +.DS L +I-----------------------------------I +I SEITE: 2 20-MAY-88 I +I-----------------------------------I +I GRUPPE 1 2906,- M I +I ABTEILUNG 0 2906,- M I +I I +I-----------------------------------I +I GRUPPE 12 700,- M I +I ABTEILUNG 10 700,- M I +I I +I-----------------------------------I +I GRUPPE 23 877,- M I +I ABTEILUNG 13 877,- M I +I I +I-----------------------------------I +I GRUPPE 10 1120,- M I +I GRUPPE 23 1986,- M I +I ABTEILUNG 26 3106,- M I +I I +I-----------------------------------I +I GRUPPE 10 1337,- M I +I ABTEILUNG 32 1337,- M I +I I +I-----------------------------------I +.DE +.DS L +I-----------------------------------I +I SEITE: 3 20-MAY-88 I +I-----------------------------------I +I-----------------------------------I +I GRUPPE 2 1337,- M I +I GRUPPE 11 600,- M I +I ABTEILUNG 33 1937,- M I +I I +I-----------------------------------I +I GRUPPE 2 1116,- M I +I GRUPPE 3 1362,- M I +I ABTEILUNG 55 2478,- M I +I I +I-----------------------------------I +I GRUPPE 1 3250,- M I +I GRUPPE 3 1567,- M I +I ABTEILUNG 129 4817,- M I +I I +I-----------------------------------I +I GRUPPE 4 900,- M I +I GRUPPE 5 2790,- M I +I GRUPPE 6 4115,- M I +I GRUPPE 7 2200,- M I +I-----------------------------------I +.DE +.DS L +I-----------------------------------I +I SEITE: 4 20-MAY-88 I +I-----------------------------------I +I ABTEILUNG 199 10005,- M I +I I +I-----------------------------------I +I-----------------------------------I +I GESAMT 28163,- M I +I===================================I +I I +I I +I LISTENENDE I +I I +I I +I I +I I +I I +I I +I I +I I +I I +I I +I I +I-----------------------------------I +.DE +.LP +Gruppen k\o'o"'nnen auf verschiedenen Ebenen gebildet werden. Im +Beispiel-Tupelfile kann nach der Abteilung gruppiert werden +und innerhalb dieser nach den Gruppen. Die Liste +wurde so definiert, dass eine seitenweise Ausgabe +auf dem Bildschirm erfolgt (HOLD-MODUS). +.bp +.NH 3 +.ft B +Schl\o'u"'sselworte +.ft R +.LP +.DS L + all end linebegin repeat + and enda lineend report + as endc lines return + batch endi m_day scale + batchline endo minut second + before endr mod set + big endw month space + bit exp new switch + byte false next terminal + call for norm then + case from not time + char graphic null to + clear groupbegin oct true + col groupend on tuple + column hex one value + columns hour or var + complement if out w_day + date ignore page while + day in pagebegin with + dec integer pageend word + default is_dst pic y_day + define last point year + do length proc + else line real +.DE