[Inhalt] [Zurück] [Weiter] [Thema] [Index]

RelToReport()


Syntax:

RelToReport (RL R, B quer, S contour, R lineheight, S hdrstr, R start, S hdrfunc, S tupfunc) : Report
R: eine Relation
quer: False=Hoch- True=Querformat
contour: mit Komma getrennter String von Feld-Enden in cm
lineheight: der Abstand zweier benachbarter Zeilen in cm
hdrstr: freier String, der an hdrfunc übergeben wird
start : erste Seitennummer, z.B. 1
hdrfunc: Zeichnet den statischen Anteil jeder Seite
tupfunc: stellt ein Tupel in gewünschter Form auf einer Seite dar

Beispiel:

RP := RelToReport (R, False, "", 0.4, "", 1, "MakeHeader", "DrawTup")

Beschreibung:

Erzeugt einen Report aus der Relation R.

Der Report enthält Seiten im Format 80, DINA4, PORTRAIT (quer=False), bzw. LANDSCAPE (quer=True) (siehe NewPage()). Es werden so viele Seiten erzeugt, wie zum Ausgeben aller Tupel aus R nötig sind. Die auf eine Seite passenden Zeilen werden durch SetPageNetto() definiert. Wenn die durch tupfunc zurückgelieferte Position diesen Nettobereich nach unten verlässt, wird eine neue Seite begonnen.

Die Rahmen der Seiten, also der Anteil von ihnen, der nicht von den Tupeln abhängt, wird über die Azur-Funktion hdrfunc erzeugt. Ist dieser Parameter leer, oder die Funktion nicht vorhanden, wird kein Header gezeichnet. hdrfunc muss die Parameter Page P, String hdrstr und Real seitenr haben. Der Seite kann mittels SetPageNetto() ein maximaler Zeichenbereich mitgegeben werden. An diesem beginnt die Ausgabe der Tupel. Ist hdrfunc leer, beginnt die Ausgabe oben, links, und endet unten jeweils um 1cm versetzt. Für jede erzeugte Seite wird diese Funktion einmal aufgerufen.

Die Tupel werden über die Funktion tupfunc auf einer Seite ausgegeben. Diese muss den Parameter Tupel tup haben. Pro Tupel von R wird diese Funktion einmal aufgerufen. Die Inhalte der Tupel werden mit TextOnReport() ausgegeben. Die Zeilen sind in Zellen eingeteilt, die durch contour definiert werden, im Beispiel ist die gesamte Zeile eine Zelle. Wenn die Ausgabe in die letzte Zelle einer Zeile erfolgt ist, wird automatisch die nächste Zeile begonnen. Sind die Zeilen einer Seite aufgebraucht, wird automatisch eine neue Seite angebrochen. Mit der Funktion Zeilenumbruch() wird explizit eine neue Zeile begonnen, mit Seitenumbruch() eine neue Seite.

Wenn das letzte Tupel einen Seitenumbruch veranlasst hat (durch Seitenumbruch(), Zeilenumbruch(), ZeilenumbruchAb() oder dadurch, dass die letzte Ausgabe mit TextOnReport() in die letzte Zelle der Seite erfolgt ist), würde eine (außer dem Header) leere Seite angehängt. Dies wird automatisch unterbunden.

Siehe auch Seitenumbruch(), Zeilenumbruch(), ZeilenumbruchAb(), TextOnReport(), AktRepPage(), PageCursorLU() und PrintReport().

Vollständiges Beispiel:

MachHeader (Page P, String hdrstr, Real seitenr)
   p1 := {1,1}
   p2 := P.PageMaxPos() - {1,1}
   P.FrameOnPage (p1, p2, 0.01)
   p3 := {p2.XKoo(), p1.YKoo()-1}
   P.DrawTextOnPage (p3, "Seite "+seitenr.GStr(), NORMAL, "RECHTS")
   p4 := {(p1.XKoo()+p2.XKoo())/2, p2.YKoo()+0.2}
   P.DrawTextOnPage (p4, hdrstr, NORMAL, "CENTER")
   netto := GeoRange ({1.5, 1.5}, p2 - {0.5,0.5})
   P.SetPageNetto (netto)
END

DrawTupel (Tupel tup)
   FORALL feld IN tup
      txt := tup.GetText (feld)
      IF (feld="ORT")
         typ := HALFSMALL+BOLD
      ELSE
         typ := HALFSMALL
      ENDIF
      TextOnReport (feld, typ, "Links")
      TextOnReport (txt,  typ, "Links")
   ENDFOR

   # Trennlinie zeichnen
   P := AktRepPage()
   y := YKoo(P.PageCursorLU()) - 0.2
   range := P.PageNetto()
   x1 := XKoo(range.RangeLU())
   x2 := XKoo(range.RangeRO())
   DrawLineOnPage (P, {x1,y}, {x2,y}, 0.01)
   Zeilenumbruch()
   Zeilenumbruch()
END

AZUR ()
   R := OpenRel("kerndaten")
   ueber := "Stammdaten aller Stationen"
   Rep := RelToReport (R, False, "3.5,19", 0.4, ueber, 1, "MachHeader", "DrawTupel")
   Rep.PrintReport ("derreport.pdf", "PDF")
END



toposoft 31.10.2025