Base

Kapitel 6
Berichte

Dokumentationen zu LibreOffice unter de.libreoffice.org

Copyright
Dieses Dokument unterliegt dem Copyright © 2012. Die Beitragenden sind unten aufgeführt. Sie
dürfen dieses Dokument unter den Bedingungen der GNU General Public License (http://www.gnu.org/licenses/gpl.html), Version 3 oder höher, oder der Creative Commons Attribution License(http://creativecommons.org/licenses/by/3.0/), Version 3.0 oder höher, verändern und/oder weitergeben.
Warennamen werden ohne Gewährleistung der freien Verwendbarkeit benutzt.
Fast alle Hardware- und Softwarebezeichnungen und weitere Stichworte und sonstige Angaben,
die in diesem Buch verwendet werden, sind als eingetragene Marken geschützt.
Da es nicht möglich ist, in allen Fällen zeitnah zu ermitteln, ob ein Markenschutz besteht, wird das
Symbol (R) in diesem Buch nicht verwendet.

Mitwirkende/Autoren
Robert Großkopf

Jost Lange

Jochen Schiffers

Michael Niedermair

Rückmeldung (Feedback)Kommentare oder Vorschläge zu diesem Dokument können Sie in deutscher Sprache an die
Adresse discuss@de.libreoffice.org senden.

Vorsicht

Alles, was an eine Mailingliste geschickt wird, inklusive der E-Mail-Adresse undanderer persönlicher Daten, die die E-Mail enthält, wird öffentlich archiviert und kannnicht gelöscht werden. Also, schreiben Sie mit Bedacht!

Datum der Veröffentlichung und Softwareversion
Veröffentlicht am 1.2.2014. Basierend auf der LibreOffice Version 4.2.

Anmerkung für Macintosh Nutzer
Einige Tastenbelegungen (Tastenkürzel) und Menüeinträge unterscheiden sich zwischen derMacintosh Version und denen für Windows- und Linux-Rechnern. Die unten stehende Tabelle gibt
Ihnen einige grundlegende Hinweise dazu. Eine ausführlichere Aufstellung dazu finden Sie in der
Hilfedatei des jeweiligen Moduls.
Windows/Linux

entspricht am Mac

EffektMenü-Auswahl Extras →Optionen

LibreOffice → EinstellungenZugriff auf die Programmoptionen

Rechts-Klick

Control+Klick
ControlÖffnen eines Kontextmenüs

Ctrl (Control)oder Strg (Steuerung)⌘ (Command)

Tastenkürzel in Verbindung mit anderen
TastenF5Shift+⌘
F5
Shift ⌘+F5

Öffnen des Dokumentnavigator-Dialogs

F11

⌘+T
T

Öffnen des Formatvorlagen-Dialogs

Berichte

2Inhalt
Berichte mit dem Report-Designer ................................................................................................. 4
Die Benutzeroberfläche des Report-Designers .............................................................................. 4
Allgemeine Eigenschaften von Feldern .................................................................................... 12
Besondere Eigenschaften des grafischen Kontrollfeldes ..................................................... 14
Diagramme im Bericht einbinden ........................................................................................ 15
Dateneigenschaften von Feldern ............................................................................................. 18
Funktionen im Report-Designer .................................................................................................... 19
Formeleingaben ....................................................................................................................... 19
Benutzerdefinierte Funktionen ................................................................................................. 26
Formeleingabe für ein Feld ...................................................................................................... 28
Bedingte Anzeige ..................................................................................................................... 28
Bedingte Formatierung ............................................................................................................ 28
Beispiele für Berichte mit dem Report-Designer ........................................................................... 29
Rechnungserstellung ............................................................................................................... 29
Ausdruck von Berichten zum aktuellen Datensatz des Formulars ........................................... 36
Aufbau der Filtertabelle ....................................................................................................... 37
Aufbau des Makros zum Start des gefilterten Berichtes ...................................................... 373

Berichte mit dem Report-Designer
Mit Hilfe von Berichten werden Daten so dargestellt, dass sie auch für Personen ohne Datenbankkenntnisse gut lesbar sind. Berichte können

•
•
•
•

Daten tabellarisch gut lesbar darstellen,
zu Daten Diagramme erstellen,
mit Hilfe von Daten Etikettendruck ermöglichen,
Serienbriefe wie z. B. Rechnungen, Mahnungen oder auch nur Bestätigungen über einen
Vereinsbeitritt oder -austritt erstellen

Um einen Bericht zu erstellen muss die Datenbankgrundlage des Berichtes gut vorbereitet sein.
Ein Bericht kann nicht, wie ein Formular, Unterberichte und damit zusätzliche Datenquellen aufnehmen. Ein Bericht kann auch nicht, wie im Formular, über Listenfelder andere Daten darstellen
als in der zugrundeliegenden Datenquelle vorhanden sind.
Am besten werden Berichte mit Abfragen vorbereitet. Dort sollten alle variablen Inhalte festgeschrieben werden. Es sollte aber, wenn in dem Bericht noch sortiert werden soll, auf jeden Falleine Abfrage erstellt werden, die das Sortieren zulässt. Dies bedeutet, dass Abfragen im direkten
SQL-Modus unter diesen Bedingungen vermieden werden müssen. Muss der Datenbestand überso eine Abfrage zur Verfügung gestellt werden, so lässt sich eine Sortierung erreichen, indem ausder Abfrage eine Ansicht erstellt wird. Diese Ansicht ist in der grafischen Benutzeroberfläche vonBase immer sortierbar und filterbar.

Vorsicht

Der Report-Designer ist beim Editieren eines Berichtes mit laufendem Abspeichernzu begleiten. Dazu zählt nicht nur das Abspeichern im Report-Designer selbst nachjedem wichtigen Arbeitsschritt, sondern auch das Abspeichern der gesamten Datenbank.
Je nach Version von LibreOffice kann es beim Editieren auch zu plötzlichen Abstürzen des Report-Designers kommen.
Die Funktionsweise fertiger Berichte ist davon nicht betroffen – auch wenn diese
Berichte unter einer anderen Version erstellt wurden, wo eben z. B. das oben
genannte Verhalten nicht auftaucht.
Der Report-Designer ist seit LO 4.1 bereits so in LO integriert, dass er nicht mehr
sichtbar in den Erweiterungen («Extensions») erscheint. Es sollte auf jeden Fall vermieden werden, neben dem integrierten Report-Designer noch eine nicht zu der LOVersion passende Report-Designer-Erweiterung zu installieren.

HinweisNeben dem Report-Designer existiert auch in LibreOffice Base weiterhin ein Assistent zur Berichtserstellung mittels eines Serienbriefverfahrens. Dieser Assistent ist
allerdings nicht zugänglich, sobald der Report-Designer installiert wurde.
Der Assistent ist weitgehend selbsterklärend. Er produziert schnell übersichtliche
Berichte in vorgefertigten Designs. Seine Berichte sind rein tabellarisch angelegt.
Da mit dem Report-Designer Berichte weiter ausgestaltet werden können behandelt
dieses Kapitel nur diese Berichtsvariante.

Die Benutzeroberfläche des Report-DesignersÜber Berichte → Bericht in der Entwurfsansicht erstellen … wird der Report-Designer aufgerufen.

Die Benutzeroberfläche des Report-Designers

4Der Report-Designer startet in einer dreiteiligen Ansicht. Links ist die vorläufige Einteilung desBerichts in Seitenkopf, Detail und Seitenfuß zu sehen, in der Mitte befinden sich die entsprechenden Bereiche, die Inhalte des Berichtes aufnehmen und rechts werden die Eigenschaften desBerichtes angezeigt.
Gleichzeitig wird bereits der Dialog «Feld hinzufügen» angezeigt. Dieser Dialog entspricht dem
Dialog aus der Formularerstellung. Er erzeugt Felder mit der entsprechenden dazugehörigen Feldbezeichnung.
Ohne einen Inhalt aus der Datenbank lässt sich ein Bericht nicht sinnvoll nutzen. Deshalb wird zu
Beginn direkt der Reiter «Daten» angezeigt. Hier kann der Inhalt des Berichtes eingestellt werden,
im obigen Beispiel also die Tabelle «Ansicht_Bericht_Mahnung». Solange SQL-Befehl analysieren auf «Ja» steht kann der Bericht auch Sortierungen, Gruppierungen und Filterungen vornehmen. Da bereits als Grundlage ein View gewählt wurde, kommt eine Filterung nicht zum Einsatz.
Sie wurde bereits in der der Ansicht zugrundeliegenden Abfrage vorgenommen.
Als Art des Inhaltes kann eine Tabelle, eine Ansicht, eine Abfrage oder direkt SQLCode angegeben werden. Am besten zu handhaben ist der Report-Designer, wenn
er die Daten so weit wie möglich aufbereitet erhält. So können z.B. in Abfragen
Berechnungen vorher durchgeführt werden und auch der Bereich der Daten, die im
Bericht erscheinen sollen, begrenzt werde.

HinweisVor allem bei früheren LO-Versionen (ebenso bei AOO oder OpenOffice) kommt esmanchmal zu Problemen, wenn Abfragen aus mehreren Tabellen später gruppiertwerden sollen. Solche Probleme können vermieden werden, indem auf einen View
zugegriffen wird. Ein View erscheint für Programmteile wie den Report-Designer wie
eine Tabelle der Datenbank. Feldnamen sind dann unverrückbar vorgegeben. Der
anschließende Zugriff mit Sortier- und Gruppierbefehlen ist fehlerfrei möglich.

Die Benutzeroberfläche des Report-Designers

5

Zwei Ausgabeformate für Berichte sind wählbar: «ODF Textdokument», also ein Writer-Dokumentoder «ODF Tabellendokument», also ein Calc-Dokument. Soll einfach nur eine tabellarische Übersicht ausgegeben werden, so ist das Calc-Dokument für die Berichtserstellung eindeutig vorzuziehen. Es ist wesentlich schneller erstellt und kann anschließend auch besser nachformatiert werden, da weniger Formatvorgaben berücksichtigt werden und Spalten einfach nach der erforderlichen der Breite anschließend entsprechend gezogen werden können.
Standardmäßig sucht der Report-Designer als Datenquelle die erste Tabelle der Datenbank aus.
So ist auf jeden Fall gewährleistet, dass zumindest ein Ausprobieren der Funktionen möglich ist.
Erst nach Auswahl der Datenquelle kann der Bericht mit Feldern beschickt werden.
Schaltflächen inhaltliche Bearbeitung

Schaltflächen Elementausrichtung

Der Report-Designer stellt einige zusätzliche Schaltflächen zur Verfügung, so dass in der vorstehenden Tabelle noch einmal die Schaltflächen mit einer entsprechenden Beschriftung abgebildet
sind. Die Schaltflächen zur Elementausrichtung werden in diesem Kapitel nicht weiter beschrieben.
Die Benutzeroberfläche des Report-Designers

6Sie sind hilfreich beim schnellen Anpassen von Feldern in einem Bereich des Report-Designers.
Prinzipiell geht dies alles aber auch über die direkte Bearbeitung der Eigenschaften des jeweiligen
Feldes.
Wie schon bei den Formularen ist es hilfreich, den entsprechenden Navigator bei Problemen aufzurufen. So kann es zum Beispiel sein, dass durch einen unvorsichtigen Klick beim Start desReport-Designers die Eigenschaften zu den Daten des Berichts verzweifelt gesucht werden.
Diese Daten können nur über den Bericht-Navigator erreicht werden:

Ein Klick mit der linken Maustaste auf «Bericht» und die Eigenschaften des Berichtes sind wieder
erreichbar.
Der Navigator zeigt zu Beginn neben den sichtbaren Unterteilungen des Dokumentes (Seitenkopf,
Gruppen, Detail und Seitenfuß) noch die möglichen Inhalte von Funktionen an. Gruppen ordnenz. B. alle anzumahnenden Medien einer Person zu, so dass nicht viele Einzelmahnungen erstellt
werden müssen. Detailbereiche zeigen die zu den Gruppen passenden Datensätze an. Funktionen
dienen z. B. zur Berechnung einer Summe einer Rechnung.
Um bei dem oben geöffneten Beispiel sinnvolle Ausgaben zu erhalten, muss der Inhalt der Ansicht
gruppiert wiedergegeben werden. Ein Leser soll gebündelt die Anmahnungen für alle seine entliehenen und überzogenen Medien erhalten.
Über Ansicht → Sortierung und Gruppierung bzw. den entsprechenden Button startet die Gruppierungsfunktion.

Die Benutzeroberfläche des Report-Designers

7

Abbildung 1: Sortierung und Gruppierung
Hier wurde nach dem Feld "Leser_Name" gruppiert und sortiert. In die obere Tabelle können untereinander mehrere Felder eingetragen werden. Soll z. B. zusätzlich nach dem "Leih_Datum" gruppiert und sortiert werden, so ist dies als zweite Zeile anzuwählen.
Direkt unter der Tabelle erscheinen verschiedene Gruppenaktionen zur Auswahl: Eine Verschiebung der Gruppe nach oben, eine Verschiebung nach unten oder die komplette Löschung derGruppe. Da für den geplanten Bericht nur eine Gruppierung notwendig ist, steht in Abbildung 1 nur
mit dem Symbol ganz rechts die Gruppenaktion «Löschung» zur Verfügung.
Die Eigenschaft «Sortierung» ist selbsterklärend. Bei der Erstellung des Eintrags hat sich im
Report-Designer auf der linken Seite sofort eine neue Einteilung gebildet. Neben der Feldbezeichnung "Leser_Name" steht dort noch «Kopf». Diese Einteilung nimmt also die Kopfzeile des Berichtes auf. In der Kopfzeile steht nachher z. B. der Name der Person, die eine Mahnung erhalten soll.
Ein Gruppenfuß ist hingegen bisher nicht vorhanden. Er könnte z. B. den zu zahlenden Betragoder den Ort und das aktuelle Datum sowie einen Bereich für die Unterschrift der anmahnenden
Person enthalten.
Standardmäßig wird nach jedem Wert gruppiert. Ändert sich also "Leser_Name", so entsteht eineneue Gruppe. Alternativ kann hier nach dem Anfangsbuchstaben gruppiert werden. Das würdeaber bei einem Mahnverfahren alle Leser-Nachnamen mit gleichem Anfangsbuchstaben zusammenfassen in einer Gruppe. 'Schmidt', 'Schulze' und 'Schulte' erhielten so eine gemeinschaftliche
Mahnung. Eine wohl recht sinnlose Aktion an dieser Stelle für dieses Beispiel.

Die Benutzeroberfläche des Report-Designers

8

Nur wenn nach Anfangsbuchstaben gruppiert wird, kann noch zusätzlich eingegeben werden, nachwie vielen Werten die nächste Gruppe beginnen soll. Denkbar wäre hier z. B. eine Gruppierung für
ein kleines Telefonbüchlein. Je nach Bekanntenkreis reicht da vielleicht eine Gruppierung nachjedem 2. Wert, also A und B in einer Gruppe, dann C und D usw.
Je nach Einstellung kann eine Gruppe entweder mit dem ersten Detail zusammen gehalten werden, oder, sofern möglich, als ganze Gruppe. Standardmäßig ist das Zusammenhalten auf «Nein»eingestellt. Für ein Mahnverfahren wird vermutlich sowieso die Gruppe so angeordnet, dass fürjede Person, die eine Mahnung erhalten soll, eine Seite ausgedruckt wird. Daher ist stattdessen ananderer Stelle zu wählen, dass nach der Gruppe jeweils ein Seitenumbruch erfolgt, bevor dernächste Wert abzuarbeiten ist.
Sind Gruppenkopf und gegebenenfalls Gruppenfuß ausgewählt, so erscheinen diese Elemente als
Teile des Berichtnavigators unter dem entsprechenden Feldnamen "Leser_Name". Zusätzlich wird
auch da wieder die Möglichkeit für Funktionen geboten, die sich nur auf diese Gruppe beschränken.

Das Hinzufügen der Felder läuft über die Funktion «Feld hinzufügen» wie im Formular. Allerdings
sind hier die Beschreibungen und die Inhaltsfelder nicht miteinander gruppiert. Beide können alsounabhängig voneinander verschoben, in der Größe beeinflusst und auf unterschiedliche Einteilungsebenen gezogen werden.
Das obige Bild zeigt den Berichtsentwurf für die Mahnung an. Im Seitenkopf ist fest die Überschrift
Libre-Office Bibliothek als Beschriftungsfeld eingesetzt. Hier könnte auch ein Briefkopf mit Logo
stehen, da auch die Einbindung von Grafiken möglich ist. Wenn die Ebene «Seitenkopf» heißt, so

Die Benutzeroberfläche des Report-Designers

9

bedeutet das nicht, dass darüber kein Rand existiert. Dieser wurde in den Seiteneinstellungenbereits festgelegt und liegt oberhalb des Seitenkopfes.
«Leser_Name Kopf» ist die Gruppierung und Sortierung, nach der die Daten zusammengefasst
werden sollen. In den Feldern, die später Daten aufnehmen, steht hellgrau die Bezeichnung derDatenfelder, die hier ausgelesen werden. So hat die dem Bericht zugrundeliegende Ansicht z. B.
ein Feld mit der Bezeichnung Adresse, in dem die komplette Adresse mit Straße und Ort für die
anzumahnende Person steht. Um dies in ein Feld zu setzen, sind Absatzumbrüchen in der Abfrage
notwendig. Mittels CHAR(13)||CHAR(10) wird in einer Abfrage ein Absatz erzeugt. Beispiel:
SELECET "Anrede"||CHAR(13)||CHAR(10)||"Vorname"||' '||"Nachame"||CHAR(13)||CHAR(10)||"Strasse"||' '||"Nr"||CHAR(13)||
CHAR(10)||"Postleitzahl"||' '||"Ort" AS "Adresse" FROM "Leser"
Bei dem Feld «=TODAY()» handelt es sich um eine eingebaute Funktion, die das aktuelle Datum
an dieser Stelle einliest.
In «Leser_Name Kopf» sind außer der Anrede und weiteren Informationen auch die Spaltenköpfe
für die anschließende Tabellenansicht untergebracht. Sie sollen ja nur einmal auftauchen, auchwenn mehrere Medien aufgelistet werden.
In den Hintergrund dieser Spaltenköpfe wurde je ein graues Rechteck gelegt. Dieses Rechteck
sorgt gleichzeitig für eine entsprechende Umrandung.
Der Detailbereich wird so oft wiederholt, wie unterschiedliche Datensätze mit den gleichen Daten
existieren, die in "Leser_Name" stehen. Hier werden also alle Medien aufgelistet, die nicht rechtzeitig zurückgegeben wurden. Auch hier liegt im Hintergrund ein Rechteck, um die Inhalte zu
umranden. Das Rechteck selbst hat die Füllfarbe «weiß».
Grundsätzlich gibt es in LO auch die Möglichkeit, horizontale und vertikale Linien
hinzu zu fügen. Im Design-Modus werden diese auch angezeigt. Beim Ausführen
des Berichtes erscheinen sie erst ab der Version LO 4.0.5 bzw. LO 4.1.1.

HinweisDiese Linien haben den Nachteil, dass sie nur als Haarlinien ausgelegt sind. Sie lassen sich besser nachbilden, indem Rechtecke benutzt werden. Der Hintergrund der
Rechtecke wird auf die Farbe Schwarz eingestellt, die Größe wird z. B. mit einer
Breite von 17 cm und einer Höhe von 0,03 cm festgelegt. Dann erscheint eine horizontale Linie mit einer Dicke von 0,03 cm mit einer Länge von 17 cm.
Leider hat auch diese Variante einen Nachteil: grafische Elemente lassen sich nicht
richtig positionieren, wenn der Bereich über eine Seite hinweg geht.

Die Benutzeroberfläche des Report-Designers

10Der «Leser_Name Fuß» schließt schließlich das Briefformat mit einer Grußformel und einem
Unterschriftsbereich ab. Der Fuß ist so definiert, dass anschließend ein Seitenumbruch nach dem
Bereich erfolgt. Außerdem ist gegenüber den Standardeinstellungen verändert so eingestellt, dass
der Bereich auf jeden Fall zusammen gehalten werden soll. Schließlich würde es reichlich merkwürdig aussehen, wenn bei vielen Mahnungen allein z. B. das Unterschriftsfeld auf die nächste
Seite verschoben würde.
Zusammenhalten bezieht sich hier immer auf den Seitenumbruch. Soll der Inhalt eines Datensatzes unabhängig vom Seitenumbruch zusammengehalten werden, so ist dies zur Zeit nur möglich,
indem der Datensatz nicht als «Detail» eingelesen wird, sondern als Grundlage für eine Gruppierung genommen wird. Der Bereich «Detail» wird leider auch dann aufgetrennt, wenn «Zusammenhalten – Ja» ausgewählt wird.
Für die Aufsummierung der Gebühren wurde eine interne Funktion benutzt.

Die Benutzeroberfläche des Report-Designers

11

So könnte dann eine entsprechende Mahnung aussehen. Im Detailbereich sind hier 5 Medien
angegeben, die der Leser entliehen hat. Im Gruppenfuß wird noch einmal die Summe für die
Anmahnung ausgegeben.

Hinweis

Berichte können auch für einzelne Datensätze über mehrere Seiten gehen. Die
Bereichsgröße sagt nichts über die Seitengröße aus. Allerdings kann die Ausdehnung des Bereiches Detail über mehr als eine Seite dazu führen, dass die Umbrüche nicht einwandfrei sind. Hier ist der Report-Designer in der Abstandsberechnung
noch fehlerhaft. Kommen Gruppierungsbereiche und grafische Elemente hinzu, so
entstehen teilweise nicht mehr durchschaubare Bereichsgrößen.
Einzelne Elemente lassen sich bisher nur mit Maus und Cursortasten an Positionen
verschieben, die außerhalb einer Seitengröße liegen. Die Eigenschaften des Elementes geben hingegen immer die gleiche maximale Entfernung von der Oberkante
des Bereiches an, die gerade noch auf der ersten Seite liegt.

Allgemeine Eigenschaften von Feldern
Zur Darstellung von Daten gibt es lediglich drei unterschiedliche Felder. Neben dem Textfeld, das
im Gegensatz zu seiner Namensgebung auch Zahlen und Formatierungen beherbergen kann, gibt
es noch ein Feld, das Bilder aus der Datenbank aufnehmen kann. Das Diagrammfeld stellt eine
Zusammenfassung von Daten dar.

Felder werden wie bei den Formularen mit Namen bezeichnet. Standardmäßig ist hier der Namegleich der Feldbezeichnung der zugrundeliegenden Datenbank.
Ein Feld kann unsichtbar geschaltet werden. Bei Feldern macht dies vielleicht wenig Sinn, bei
Gruppenkopf oder Gruppenfuß hingegen schon eher, da hier auch andere Funktionen der Gruppie-

Die Benutzeroberfläche des Report-Designers

12rung erfüllt sein sollen, der Gruppenkopf oder Gruppenfuß aber nicht unbedingt mit Inhalt versehen
ist.
Wenn «Wiederholende Werte anzeigen» deaktiviert wird, so wird die Anzeige ausgesetzt, wenndirekt davor das Feld mit einem gleichen Dateninhalt bestückt wurde. Dies funktioniert einwandfrei
nur bei Datenfeldern, die einen Text beinhalten. Zahlenfelder oder Datumsfelder ignorieren die
Deaktivierung, Beschriftungsfelder werden bei einer Deaktivierung komplett ausgeblendet, auchwenn sie nur einmal vorkommen.
In dem Report-Designer kann die Ansicht bestimmter Inhalte durch einen «Ausdruck für bedingte
Anzeige» unterdrückt werden oder der Wert des Feldes als Grundlage für eine Formatierung vonSchrift und Hintergrund genommen werden. Mehr zu diesen Ausdrücken unter «Bedingte
Anzeige».
Die Einstellung zum Mausradverhalten spielt keine Rolle, da ja die Felder in dem Bericht nicht editierbar sind. Sie scheint ein Überbleibsel aus dem Bereich der Formulare zu sein.
Die Funktion «Bei Gruppenwechsel anzeigen» konnte im Bericht ebenfalls nicht nachvollzogen
werden.
Ist der Hintergrund nicht als transparent definiert, so kann für das jeweilige Feld eine Hintergrundfarbe definiert werden.
Die weiteren Einträge beziehen sich auf den Inhalt innerhalb der gezogenen Felder. Dies sind im
Einzelnen die Schriftart (mit Schriftfarbe, Schriftdicke etc., siehe Abbildung 2), die Ausrichtung desSchriftzugs in dem Feld und die Formatierung mit dem entsprechenden Dialog «Zahlenformat»(siehe Abbildung 3).

Abbildung 2: Schrift - Zeicheneinstellungen

Die Benutzeroberfläche des Report-Designers

13

Abbildung 3: Formatierung von Zellen

Besondere Eigenschaften des grafischen Kontrollfeldes

Das grafische Kontrollfeld kann sowohl Grafiken von außerhalb der Datenbank darstellen als auch
Grafiken aus der Datenbank auslesen. Leider ist es zur Zeit nicht möglich, eine Grafik dauerhaft in
Base zu speichern, um z. B. ein Brieflogo einzulesen. Hierzu muss zwingend die Grafik in dem
Die Benutzeroberfläche des Report-Designers

14

gesuchten Pfad vorhanden sein, auch wenn die Auswahl anbietet, Bilder ohne Verknüpfung aufzunehmen und das erste Feld mit «Als Verknüpfung vorbereiten» auf eine entsprechende geplante
Funktionalität schließen lässt.
Alternativ dazu kann natürlich eine Grafik innerhalb der Datenbank selbst gespeichert werden und
so auch intern verfügbar belieben. Sie muss dann aber über die dem Bericht zugrundeliegende
Abfrage in einem der Felder zugänglich sein.
Um eine «externe Grafik» aufzunehmen, ist über den Auswahlbutton neben dem Feld «Grafik» die
Grafik zu laden. Um ein Datenbankfeld auszulesen muss im Register «Daten» das Feld angegeben werden. Dieses Feld kann auch den Pfad zu einer externen Grafik beinhalten. Ist also in derTabelle ein relativer Pfad zu einer Grafik angegeben, so wird diese Grafik entsprechend auch dargestellt.
Die Einstellung der Vertikalen Ausrichtung scheint im Entwurf nichts zu bewirken. Wird allerdings
der Bericht aufgerufen, so erscheint die Grafik entsprechend positioniert.
Beim Skalieren kann «Nein», «Seitenverhältnis beibehalten» und «Autom. Größe» gewählt werden. Dies entspricht den Einstellungen im Formular:• 'Nein': Das Bild wird nicht an das Kontrollfeld angepasst. Ist das Bild zu groß, so wird ein
Ausschnitt des Bildes gezeigt. Das Bild wird nicht verzerrt.
• 'Seitenverhältnis beibehalten': Das Bild wird in das Kontrollfeld eingepasst, aber nicht verzerrt dargestellt.
– 'Automatische Größe': Das Bild wird der Größe des Kontrollfeldes angepasst und gegebenenfalls verzerrt dargestellt.

Diagramme im Bericht einbindenÜber das entsprechende Kontrollfeld oder Einfügen → Bericht-Steuerelemente → Diagramm
lässt sich ein Diagramm dem Bericht hinzufügen. Ein Diagramm wäre hier die einzige Möglichkeit,
in einem Bericht Daten wiederzugeben, die nicht aus der Quelle stammen, die im Bericht als
Datenquelle angegeben ist. Ein Diagramm ist in sofern ein Unterbericht des Berichtes, kann aberauch als eigenständiger Berichtsteil gesehen werden.

Das Diagramm wird aufgezogen. Bei den allgemeinen Eigenschaften zeigt sich neben bekannten
Feldern die Möglichkeit, einen Diagrammtypen auszuwählen (siehe entsprechende Typen in Calc).
Außerdem wird eine maximal für die Vorschau benutzte Anzahl an Datensätzen (Vorschau fürZeile(n)) eingestellt, die schon einmal eine Vorstellung davon geben kann, wie das Diagramm letztlich aussieht.
Diagramme können, ebenfalls wie in Calc, entsprechend formatiert werden (Doppelklick auf das
Diagramm. Hierzu siehe die Beschreibungen im Handbuch Calc.

Die Benutzeroberfläche des Report-Designers

15Das Diagramm wird im Bereich «Daten» mit den erforderlichen Datenfeldern verbunden. Hier, im
Beispielbericht «Medien-Hitliste», soll das Diagramm die Häufigkeit deutlich machen, mit derbestimmte Medien entliehen wurden. Dazu wurde ein SQL-Befehl über den Abfrageeditor wie bei
Listenfeldern erstellt und eingebunden. Die erste Spalte wird als die angesehen, mit der die Säulen
beschriftet werden sollen, die zweite Spalte liefert dann die Anzahl der Entleihvorgänge, die sich inden Höhen der Säulen widerspiegelt.
In dem obigen Beispiel zeigt das Diagramm erst einmal nur sehr wenig an, da die Test-Entleihvorgänge sich zum Zeitpunkt der SQL-Eingabe in Grenzen hielten.

In den Dateneigenschaften des Diagramms ist hier eine Abfrage eingebunden. Dieses Diagramm
aus der Mitgliederverwaltung einer Vereinsdatenbank wird über eine Abfrage erstellt, die im direkten SQL-Modus durchgeführt werden muss, da die grafische Benutzeroberfläche sie nicht versteht.
Deshalb ist auch unter «SQL-Befehl analysieren» «Nein» gewählt. Durch diese Vorwahl ist eine
Filterung und Sortierung mit den internen Werkzeugen des Report-Designers ausgeschlossen. Die
Felder sind also ausgegraut.
Wie bei Hauptformularen und Unterformularen werden jetzt Felder verknüpft. Im eigentlichen
Bericht werden tabellarisch die Altersverläufe für männliche und weibliche Mitglieder gelistet. Dabei
Die Benutzeroberfläche des Report-Designers

16ist nach den Geschlechtern gruppiert worden. In jeder Gruppe erscheint jetzt ein gesondertes Diagramm. Damit das Diagramm nur die zu dem Geschlecht gehörigen Daten übermittelt, sind die
Felder «Geschlecht» aus dem Bericht und «Geschlecht» aus dem Diagramm miteinander verbunden.
Die x-Achse des Diagramms wird automatisch mit der ersten Tabellenspalte der Datenquelle verbunden. Weitere Einstellungen zu dem Diagramm sind zu erreichen, wenn das gesamte Diagramm
mit einem Doppelklick markiert wird. Mit einem Klick der rechten Maustaste öffnet sich über dem
Diagramm, je nach markiertem Element, ein Kontextmenü. Hierin enthalten ist immer die Einstellmöglichkeit für die Datenbereiche:"Datenreihen in Spalten" ist ausgegraut, also nicht änderbar. Auch eine Änderung des Markierfeldes «Erste Spalte als Beschriftung» ist nicht möglich.
Der Reiter «Datenreihen» hingegen verbirgt ein paar Einstellungsmöglichkeiten, die die Standarddarstellung deutlich verändern können. Es werden dort alle Datenreihen angeboten, die neben derersten Spalte der Abfrage noch verfügbar sind. Datenreihen, die nicht angezeigt werden sollen,können hier entfernt werden.
Alle weiteren Einstellungen sind ähnlich den Möglichkeiten, die LO-Calc für die Einstellung vonDiagrammen bietet.

Die Benutzeroberfläche des Report-Designers

17

Hinweis

Die Darstellung von Diagrammen gelingt in LibreOffice zur Zeit nur den Versionen
3.3.* und 3.4.* . Ab Version 3.5.* ist LO nicht in der Lage, diese Berichte zu öffnen.
Eine Erstellung ist aber sehr wohl möglich. Mit den Versionen LO 4.0.5 und LO 4.1.*
ist dieser Bug gehoben.
Nicht nur LibreOffice hat hiermit Probleme. Auch in den Versionen ab 3.3 von OpenOffice klappt die Darstellung nicht. OpenOffice öffnet zwar die Berichte – aber eben
einfach ohne die Diagramme.

Dateneigenschaften von Feldern

In den Eigenschaften zeigt sich hinter dem Reiter Daten standardmäßig nur das Feld der Datenbank, aus dem die Daten für die Felder des Berichtes ausgelesen werden. Allerdings stehen neben
dem Datenfeld-Typ «Feld» oder «Formel» noch die Typen «Funktion», «Zähler» und «Benutzerdefinierte Funktion» zur Verfügung.
Vorwählbar sind die Funktionen «Summe», «Minimum» und «Maximum». Ihr Geltungsbereich
bezieht sich entweder auf die aktuelle Gruppe oder auf den gesamten Bericht. Bereits diese Funktionen können zu Problemen führen, wenn ein Feld leer, also NULL, ist. In solchen Feldern, sofern
sie als Zahl formatiert sind, erscheint «N,aN», was wohl so viel wie «kein Zahlenwert» bedeuten
soll. Mit leeren Feldern wird keine Rechnung durchgeführt; das Ergebnis ist 0.
Solche Felder können zwar in der Ansicht durch die folgende Formel im Bereich «Daten» zur
Anzeige von 0-Werten umformatiert werden.
IF([Zahlenfeld];[Zahlenfeld];0)

Die Benutzeroberfläche des Report-Designers

18Die Funktion rechnet aber mit dem tatsächlichen Wert, also mit dem Feld, das eben keinen Wert
besitzt. Da erscheint es dann einfacher, wenn gewünscht, die dem Bericht zugrundeliegende
Abfrage so zu formulieren, dass statt NULL in Zahlenfeldern '0' wiedergegeben wird.
Der «Zähler» zählt einfach nur die Datensätze, die entweder in einer Gruppe oder im ganzen
Bericht enthalten sind. Wird der Zähler in den Bereich Detail eingesetzt, so wird durch ihn jeder
Datensatz mit einer fortlaufenden Nummer versehen. Dabei kann die Nummerierung auch hier nur
die Gruppe oder sämtliche Datensätze des Berichts fortlaufend nummerieren.

Schließlich steht noch die detaillierte «Benutzerdefinierte Funktion» zur Verfügung. Es kann passieren, dass der Report-Designer diese Variante selbst wählt, wenn er zwar den Rechenschritt vorgegeben bekommt, aber die Datenquelle aus irgendeinem Grunde nicht richtig interpretieren kann.

Funktionen im Report-Designer
Der Report-Designer bietet sowohl bei den Daten als auch bei den Bedingungen für eine Anzeige
die Nutzung verschiedenen Funktionen an. Reichen die Funktionen nicht, so lassen sich mit einfachen Rechenschritten auch benutzerdefinierte Funktionen erstellen, die vor allem in Gruppenfüßen
als Zusammenfassungen Sinn machen.

Formeleingaben
Dem Report-Designer liegt der «Pentaho Report Designer» zugrunde. Ein kleiner Teil der Dokumentation ist unter
http://wiki.pentaho.com/display/Reporting/9.+Report+Designer+Formula+Expressions
zu finden.
Eine weitere Quelle sind die Spezifikationen nach «OpenFormular-Standard»:
http://www.oasis-open.org/committees/download.php/16826/openformula-spec-20060221.html
Teilweise ist auch ein einfacher Blick in Richtung Calc sinnvoll, da dort eine deutsche Beschreibung zumindest einiger Formeln aus dem Report-Designer enthalten ist.

Funktionen im Report-Designer

19

Grundlegend gilt:
Formeleingaben starten mit einem Gleichheitszeichen=

Bezüge zu Datenfeldern werden in eckige
Klammer gesetzt[Feldbezeichnung]Enthalten die Datenfelder Sonderzeichen, zu
denen auch Leertasten gehören, so ist die Feldbezeichnung außerdem noch in Anführungsstriche zu setzen["Diese Feldbezeichnung wäre in
Anführungsstriche zu setzen"]

Texteingaben haben immer in doppelten Anführungszeichen zu stehen"Texteingabe"

Folgende Operatoren sind möglich+, -,* (Multiplikation),/ (Division),% (dividiert vorherstehende Zahl durch 100),^ (Potenzierung mit der nachfolgenden Zahl),& (verbindet Texte miteinander),Folgende Beziehungsdefinitionen sind möglich= , <> , < , <= , > , >=Runde Klammerungen sind ebenfalls möglich( )Standardfehlermeldung

NA (vermutlich not available, in Calc in NV übersetzt – nicht verfügbar)

Fehlermeldung beim Bericht, wenn ein leeres
Feld auftaucht und als Zahl definiert ist.

N,aN (erscheint, wenn kein Wert enthalten ist –vielleicht not a number?)

Sämtliche Formeleingaben wirken sich nur auf den aktuell eingelesenen Datensatz aus. Beziehungen zu vorhergehenden oder nachfolgenden Datensätzen sind also nicht möglich.

Neben dem Datenfeld erscheint ein Button mit 3 Punkten, sofern eine Formeleingabe möglich ist.
Dieser Button startet den Funktionsassistenten.

Funktionen im Report-Designer

20

Im Gegensatz zu den Funktionen in Calc sind hier die Funktionen nicht ins Deutsche übertragen.
Die Funktionen sind allerdings längst nicht so umfangreich wie die, die in Calc üblich sind. Viele
Funktionen haben allerdings ihre Entsprechung in Calc. Dort gibt der Assistent dann auch direkt
das Ergebnis der Funktion wieder.
Der Funktions-Assistent funktioniert nicht immer einwandfrei. So werden z. B. Texteingaben nicht
mit doppelten Anführungsstrichen übernommen. Nur Eingaben mit doppelten Anführungsstrichen
werden allerdings verarbeitet.
Die folgenden Funktionen stehen zur Verfügung: [ Funktion im Report-Designer / (Funktion
in Calc) ]Funktion

Beschreibung

Datums – und Zeitfunktionen
DATE(DATUM)

Erzeugt aus einer Zahlenangabe für das Jahr, den Monat und den
Tag ein gültiges Datum.

DATEDIF(TAGE | MONATE |JAHRE)

Gibt die Anzahl an Jahren, Monaten oder Tagen zwischen zwei
Datumswerten wieder.

DATEVALUE(DATWERT)

Wandelt eine amerikanische Datumseingabe in Textform (Anführungsstriche) in eine Datumsbeschreibung um. Die erzeugte amerikanische Variante kann durch Formatierungseinstellung umgewandelt werden.

DAY
(TAG)

Gibt den Tag des Monats eines angegebenen Datums wieder.
DAY([Datumsfeld])

Funktionen im Report-Designer

21

DAYS
(TAGE)

Gibt die Zahl der Tage zwischen zwei Datumseingaben wieder.

HOUR(STUNDE)

Gibt die Stunde einer angegebenen Zeit im Rahmen von 0 bis 23
wieder.
HOUR([DatumZeitFeld]) gibt die Stunde des Feldes wieder.

MINUTE(MINUTE)

Gibt die Minuten einer internen Zahl wieder.
MINUTE([Zeitfeld]) gibt den Minutenanteil der Zeit wieder.

MONTH(MONAT)

Gibt den Monat einer Datumseingabe als Zahl wieder.
MONTH([Datumsfeld])NOW(JETZT)

Gibt das aktuelle Datum und die aktuelle Zeit wieder.

SECOND(SEKUNDE)

Gibt die Sekunden einer internen Zahl wieder.
SECOND(NOW()) gibt den Sekundenanteil der Zeit beim Ausführen
des Berichts wieder.

TIME(ZEIT)

Zeigt die aktuelle Zeit an.

TIMEVALUE(ZEITWERT)

Wandelt die Texteingabe einer Zeit in eine Zeit für Berechnungen
um

TODAY
(HEUTE)

Gibt das aktuelle Datum wieder

WEEKDAY(WOCHENTAG)

Gibt den Wochentag einer Datumseingabe als Zahl wieder. Der Tag
mit der Nummer 1 ist der Sonntag.

YEAR(JAHR)

Gibt das Jahr einer Datumseingabe wieder.

Logische Funktionen
AND
(UND)

Gibt TRUE wieder, wenn alle Argumente TRUE sind

FALSE
(FALSCH)

Definiert den logischen Wert als FALSEIF(WENN)

Wenn eine Bedingung TRUE, dann diesen Wert, ansonsten einen
anderen Wert.

IFNA(ab LO 3.5)

NOT
(NICHT)

Kehrt den logischen Wert eines Argumentes um

OR(ODER)

Gibt TRUE zurück, wenn eine der Bedingungen TRUE ist.

TRUE
(WAHR)

Definiert den logischen Wert als TRUE

XOR

Nur wenn ein einziger Wert der Verknüpfung TRUE ist ist auch derlogische Wert TRUE.

Rundungsfunktionen
INT

Funktionen im Report-Designer

Rundet zum nächsten Ganzzahlwert ab22

Mathematische Funktionen
ABS
(ABS)

Gibt den absoluten, nicht negativen Wert einer Zahl wieder.

ACOS(ARCCOS)

Berechnet den Arcuscosinus einer Zahl. - Werteingabe zwischen -1
und 1(ab LO 3.5)

ACOSH
(ARCCOSHYP)

Berechnet den Areacosinus (inverser hyperbolischer Cosinus) –Werteingabe >= 1
(ab LO 3.5)

ASIN
(ARCSIN)

Berechnet den Arcussinus einer Zahl. - Werteingabe zwischen -1
und 1(ab LO 3.5)

ATAN
(ARCTAN)

Berechnet den Arcustangens einer Zahl.
(ab LO 3.5)

ATAN2
(ARCTAN2)

Berechnet den Arcustangens einer x-Koordinaten und einer y-Koordinaten.
(ab LO 3.5)

AVERAGE(MITTELWERT)

Ermittelt den Mittelwert der angegebenen Werte. (taucht im Formularassistenten LO 3.3.4 doppelt auf)

AVERAGEA(MITTELWERTA)

Ermittelt den Mittelwert der angegebenen Werte. Text wird als 0
gewertet.
(ab LO 3.5)

COS
(COS)

Winkel im Bogenmaß, dessen Cosinus berechnet werden soll.
(ab LO 3.5)

EVEN
(GERADE)

Rundet eine positive Zahl zum nächsten geraden Integer auf, eine
negative Zahl zum nächsten geraden Integer ab.

EXP
(EXP)

Berechnet die Exponentialfunktion zur Basis 'e'(ab LO 3.5)

LN
(LN)

Berechnet den natürlichen Logarithmus einer Zahl.
(ab LO 3.5)

LOG10
(LOG10)

Berechnet den Logarithmus einer Zahl zur Basis '10'.
(ab LO 3.5)

MAX
(MAX)

Gibt den Maximalwert aus einer Reihe von Werten wieder.

MAXA(MAXA)

Gibt den Maximalwert aus einer Reihe wieder. Eventuell vorhandener Text wird als '0' gesetzt.

MIN
(MIN)

Gibt den Minimalwert aus einer Reihe von Werten wieder.

MINA(MINA)

Gibt den Minimalwert aus einer Reihe wieder. Eventuell vorhandener Text wird als '0' gesetzt.

MOD(REST)

Gibt den Rest einer Division nach Eingabe von Dividend und Divisor
wiederODD(UNGERADE)

Rundet eine positive Zahl zum nächsten ungeraden Integer auf,eine negative Zahl zum nächsten ungeraden Integer ab.

Funktionen im Report-Designer

23

PI
(PI)

Liefert den Wert der Zahl 'π'(ab LO 3.5)

POWER
(POTENZ)

Liefert aus Basis und Exponent die Potenz.
(ab LO 3.5)

SIN
(SIN)

Berechnet den Sinus einer Zahl.
(ab LO 3.5)

SQRT
(WURZEL)

Berechnet die Quadratwurzel einer Zahl.
(ab LO 3.5)

SUM
(SUMME)

Summiert eine Liste von Zahlenwerten

SUMA

Summiert eine Liste von Zahlenwerten. Text und Ja/Nein-Felder sinderlaubt. Leider endet diese Funktion (noch) mit Fehlermeldung.
(ab LO 3.5)

VAR
(VARIANZ)

Berechnet die Varianz, ausgehend von einer Stichprobe.
(ab LO 3.5)

Textfunktionen
EXACT(IDENTISCH)

Zeigt an, ob zwei Texte völlig gleich sind.

FIND(FINDEN)

Gibt die Position eines zu suchenden Textes in einem anderen Text
an.

LEFT
(LINKS)

Der Text wird von links aus in der angegebenen Zeichenzahl wiedergegeben.

LEN(LÄNGE)

Gibt die Anzahl an Zeichen wieder, die ein Text hat.

LOWER
(KLEIN)

Gibt den Text in Kleinbuchstaben wieder.

MESSAGE

Formatiert die Werte in dem angegebenen Ausgabeformat.
(ab LO 3.5)

MID
(TEIL)

Gibt Text ab einer Anfangsposition mit einer gegebenen Zeichenlänge wider.

REPLACE(ERSETZEN)In dem Text wird ein Teil durch einen anderen Text ersetzt. Die Startposition und die Länge des zu ersetzenden Textes wird eingegeben.

REPT(WIEDERHOLEN)

Wiederholt einen Text die angegebenen Male.

RIGHT(RECHTS)

Der Text wird von rechts aus in der angegebenen Zeichenzahl
widergegeben.

SUBSTITUTE(WECHSELN)

Ersetzt in einem vorgegebenen Text bestimmte Textteile durchandere Textteile. Zusätzlich kann angegeben werden, der wievielte
Textteil ersetzt werden soll.

T(T)

Gibt den Text wieder oder einen leeren Textwert, wenn es sich z. B.
um eine Zahl handelt.

TEXT(TEXT)

Konvertierung von Zahlen oder Uhrzeiten in Text.

Funktionen im Report-Designer

24

TRIM
(GLÄTTEN)

Entfernt führende Leerzeichen, Leerzeichen am Textende und reduziert mehrere Leerzeichen hintereinander im Text auf ein Leerzeichen.

UNICHAR(UNIZEICHEN)

Wandelt eine Unicode-Nummer in Dezimalschreibweise in ein Unicode-Zeichen um
196 wird zu 'Ä' ('Ä' hat den Hexadezimalwert 00C4, daraus wird bei
der Deziamlschreibweise 196 ohne führende Nullen)

UNICODE(UNICODE)

Wandelt eine Unicode-Zeichen in eine Unicode-Nummer in Dezimalschreibweise um'Ä' wird zu 196

UPPER(GROSS)

Gibt den Text in Großbuchstaben wieder.

URLENCODE

Wandelt einen vorgegebenen Text in einen Text um, der URLKonform ist. Wenn keine besonderer Code vorgegeben wurde, passiert dies nach ISO-8859-1.

Informationsfunktionen
CHOOSE(Wahl)

Zuerst wird ein Index angegeben, danach eine Liste von Werten,
aus der über den Index der entsprechende Wert ausgesucht wird.
CHOOSE(2;"Apfel";"Birne";"Banane") gibt Birne wieder.
CHOOSE([Altersstufenfeld];"Milch";"Cola";"Bier")
gibt je nach «Altersstufenfeld» wieder, welches Getränk möglich ist.

COUNT
(Anzahl)Nur die Felder werden gezählt, die eine Zahl oder einen Datumsbzw. Zeitwert enthalten.
COUNT([Zeit];[Nummer]) gibt 2 aus, wenn beide Felder
einen Wert enthalten, also nicht NULL sind, ansonsten 1 oderschließlich 0.

COUNTA(Anzahl2)

Berücksichtigt auch die Felder, die einen Text beinhalten. AuchNULL wird gezählt, ebenso boolsche Felder.

COUNTBLANK(ANZAHLLEEREZELLEN)

Zählt die leeren Felder in einem Bereich.

HASCHANGEDÜberprüft, ob mit ihrem Namen angegebene Spalte sich geändert
hat. Allerdings werden keine Spaltenangaben übernommen.

INDEX(INDEX)

Arbeitet mit Bereichen(ab LO 3.5)

ISBLANK(ISTLEER)

Prüft, ob das Feld NULL (leer) ist.

ISERR
(ISTFEHL)

Gibt TRUE zurück, wenn die Eingabe fehlerhaft ist, aber nicht vom
Typ NAISERR(1/0) ergibt TRUEISERROR(ISTFEHLER)

Wie ISERR, nur dass auch NA als Meldung TRUE ergibt.

ISEVEN(ISTGERADE)

Prüft, ob es sich um einen gerade Zahl handelt.

ISLOGICAL(ISTLOG)

Prüft, ob es sich um einen Ja/Nein-Wert handelt.
ISLOGICAL(TRUE()) oder ISLOGICAL(FALSE()) ergeben
TRUE, Textwerte wie ISLOGICAL("TRUE") ergeben FALSE.

Funktionen im Report-Designer

25

ISNA
(ISTNV)

Prüft, ob der Ausdruck vom Fehlertyp NA ist.

ISNONTEXT(ISTKTEXT)

Prüft, ob es sich bei dem Wert nicht um einen Text handelt.

ISNUMBER(ISTZAHL)

Prüft, ob es sich um eine Zahl handelt.
ISNUMBER(1) ergibt TRUE, ISNUMBER("1") ergibt FALSEISODD(ISTUNGERADE)

Prüft, ob es sich um eine ungerade Zahl handelt.

ISREF(ISTBEZUG)

Prüft, ob es sich um einen Bezug handelt.
ISREF([Feldname]) ergibt TRUE, ISREF(1) ergibt FALSE.

ISTEXT(ISTTEXT)

Prüft, ob es sich bei dem Wert um einen Text handelt.

NA
(NV)

Gibt den Fehlercode NA wieder.

VALUE(ab LO 3.5)

Benutzerdefiniert
CSVARRAY

Wandelt einen CSV-Text in ein Array um. (ab LO 3.5)

CSVTEXT

Wandelt ein Array in einen CSV-Text um. (ab LO 3.5)

NORMALIZEARRAY(ab LO 3.5)

NULL

Gibt NULL wieder

PARSEDATE

Wandelt Text in ein Datum um. Nutzt das SimpleDateFormat. Benötigt ein Datum als Text sowie die Beschreibung des Datumformates.
Beispiel: PARSEDATE("9.10.2012";"dd.MM.yyyy") ergibt die internverwertbare Zahl für das Datum. (ab LO 3.5)

Dokumentsinformationen
AUTHOR

Autor, wird ausgelesen aus Extras → Optionen → LibreOffice →Benutzerdaten. Der eigentliche Autor wird hier also nicht wiedergegeben, sondern der aktuelle Nutzer der Datenbank.

TITLE

Gibt den Titel des Berichts wieder.

Benutzerdefinierte Funktionen
Benutzerdefinierte Funktionen können z. B. dazu dienen, bestimmte Zwischenergebnisse nacheiner Gruppe von Datensätzen wieder zu geben. Im obigen Beispiel ist so etwas bei der Berechnung der Gebühr im Bereich «Leser_Name_Fuß» erstellt worden.

Funktionen im Report-Designer

26

Im Bericht-Navigator ist für die Gruppe «Leser_Name» eine Funktion verzeichnet. Durch
Rechtsklick auf Funktionen können zusätzliche Funktionen hier mit Namen definiert werden.
Die Funktion «SummeGebuehrLeser_Name» wird in den Eigenschaften angezeigt. Die Formel
führt eine Addition des Feldes «Gebuehr» mit dem in der Funktion selbst bereits gespeicherten
Wert durch. Der Anfangswert ergibt sich aus dem Wert des Feldes «Gebuehr» beim ersten Durchgang durch die Gruppe. Dieser Wert wird in der Funktion unter dem Funktionsnamen zwischengespeichert und in der Formel wieder benutzt, bis die Schleife beendet ist und der Gruppenfußgeschrieben wird.
«Unterberichte einbinden» scheint momentan keine Funktion zu haben, es sei denn, dass Diagramme als Unterberichte verstanden werden.
Ist für die Funktion «Vorausberechnung» aktiviert, so kann das Ergebnis auch im Gruppenkopf stehen. Ohne die Aktivierung steht im Gruppenkopf nur der entsprechende Wert des abgefragten ersten Feldes der Gruppe.
Selbstdefinierte Funktionen können auch auf selbstdefinierte Funktionen zurückgreifen. Dabei ist
dann aber zu beachten, dass die genutzten Funktionen vorher ausgeführt sein müssen. Die Vorausberechnung in dieser Funktion, die auf andere Funktionen zurückgreift, muss ausgeschaltet
sein.
[SummeZensurKlasse] / ([ZählerKlasse]+1)
bezieht sich auf die Gruppe «Klasse». Der Inhalt des Feldes «Zensur» wird aufaddiert, die Anzahl
der Datensätze wird ermittelt. Die Summe aus Zensur wird durch die Anzahl der Datensätze dividiert. Damit die richtige Anzahl berücksichtigt wird muss, ebenso wie bei [ZählerKlasse], 1 addiert
werden. Damit wird dann der Durchschnitt berechnet.

Funktionen im Report-Designer27Formeleingabe für ein FeldÜber den Weg Daten → Datenfeld können Formeln eingegeben werden, die nur ein einziges Feld
im Bereich «Detail» betreffen.
IF([boolschesFeld];"ja";"nein")schreibt, dort eingegeben, statt WAHR und FALSCH einfach "ja" und "nein".
Es kann passieren, dass in einem Feld mit einer Formeleingabe grundsätzlich eine Zahl erscheint.
Bei Text ist das dann eine «0». Hier muss nachgebessert werden, indem für das Textfeld vom
Standardformat «Zahl» zum Format «Text» gewechselt wird.

Bedingte Anzeige

Gruppenköpfe, Gruppenfüße, Felder – in sämtlichen Untergliederungen befindet sich unter den allgemeinen Eigenschaften das Feld «Ausdruck für bedingte Anzeige». Formeln, die in dieses Feldgeschrieben werden, beeinflussen den Inhalt eines Feldes oder gleich die Anzeige eines ganzen
Bereiches. Auch hier steht der Funktions-Assistent zur Verfügung.
[Feldbezeichnung]="true"
sorgt dafür, dass der Inhalt nur dann angezeigt wird, wenn der Inhalt des Feldes «Feldbezeichnung» wahr ist.
Grafische Formen reagieren zur Zeit nicht auf Einträge in der bedingten Anzeige. Soll z. B. eine
farbige Trennlinie nach dem 10. Platz einer Wettkampfliste eingezogen werden, so geht dies nicht,
indem der Grafik über die bedingte Anzeige mitgegeben wird
[Platz]=10
Dieser Befehl wirkt nicht auf die Grafik. Sie erscheint in dem Abschnitt Detail dann weiter nachjedem Datensatz.
Dieser Bug ist als Bug 73707 gemeldet.
Sicherer ist es, die bedingte Anzeige an einen Gruppenfuß statt an die Grafik zu binden, sofern
dieser nicht anderweitig benötigt wird. Die Linie wird im Gruppenfuß positioniert. Der Gruppenfuß
wird mit der Bedingung versehen. Dann erscheint die Linie auch tatsächlich nach dem 10. Platz,
wenn sie wie oben formuliert wird.
Hier lassen sich dann auch neben den Formen aus Einfügen → Formen → Standardformenz. B. die horizontalen Linien mit dem Gruppenfuß ausblenden.

Bedingte Formatierung
Bei der bedingten Formatierung kann z. B. ein Kalender so formatiert werden, dass die Wochenenden besonders gekennzeichnet werden. Unter Format → bedingte Formatierung ist dann einzutragen
WEEKDAY([Datumsfeld])=1
sowie die entsprechende Formatierung für den Sonntag.

Funktionen im Report-Designer

28

Wird in der bedingten Formatierung «Ausdruck ist» gewählt, so kann eine Formel eingegeben werden. Wie auch in Calc üblich können mehrere Bedingungen formuliert werden, die nacheinander
abgearbeitet werden. Im obigen Beispiel wird so zuerst der Sonntag abgefragt und dann derSamstag. Zum Schluss könnte dann noch eine Abfrage nach dem Inhalt des Feldes kommen. So
könnte z. B. der Inhalt 'Urlaub' mit einer entsprechend anderen Formatierung angezeigt werden.

HinweisDer Report-Designer ist ein Addon. Tauchen anscheinend nicht behebbare Fehlerauf (Formel wird nicht umgesetzt, zu langer Text wird in als ein leeres Feld angezeigt...), so empfiehlt es sich manchmal, Teile des Berichts zu löschen oder einfach den
Bericht neu zu erstellen.

Beispiele für Berichte mit dem Report-Designer
Der Report-Designer birgt einige Tücken in der Anwendung, da bestimmte Funktionen zwar grundsätzlich vorgesehen sind, aber zur Zeit nicht richtig funktionieren. Deshalb hier einige Beispiele,
wie der Report-Designer für verschiedene Berichtstypen genutzt werden kann.

Rechnungserstellung
Folgende Vorgaben sollen für die Erstellung der Rechnung erfüllt werden:• Die einzelnen Rechnungspositionen sollen durchnummeriert werden.
• Rechnungen, die mehr als eine Seite umfassen, sollen mit einer Seitennummerierung versehen werden.
Beispiele für Berichte mit dem Report-Designer29• Rechnungen, die mehr als eine Seite umfassen, sollen auf jeder Seite eine Zwischensumme bilden und auf der darauffolgenden Seite diese Zwischensumme als Übertrag darstellen.
Mehrere aktuelle existierende Bugs scheinen das Verfahren unmöglich zu machen:• Bug 51452: Wird eine Gruppierung auf «Bereich wiederholen» eingestellt, so wird automatisch vor und hinter der Gruppierung ein Seitenumbruch eingefügt.
• Bug 51453: Gruppierungen mit neu startender Seitenzählung sind zwar eigentlich vorgesehen, funktionieren aber nicht.
• Bug 51959: Ein Gruppenfuß lässt sich nicht wiederholen. Er kann nur am Ende einer
Gruppe auftauchen, nicht z. B. am Ende einer jeden Seite. Wird er auf «Bereich wiederholen» gesetzt, so verschwindet er komplett.
Außerdem gibt es noch Schwierigkeiten, Linien in den Bericht einzufügen. Die vorgesehenen horizontalen und vertikalen Linien werden erst ab den Versionen LO 4.0.5 bzw. 4.1.1 angezeigt. Als
Ersatz dafür können Rechtecke genutzt werden. Die lassen sich aber nicht richtig positionieren,wenn in einem Bereich ein Seitenumbruch stattfindet.
Der Bericht in einer einfachen Form sollte also so aussehen:

Um trotz der oben genannten Einschränkungen eine den Anforderungen entsprechende Rechnungserstellung durchführen zu können muss genau mit den Seitenmaßen des auszudruckenden
Dokumentes gearbeitet werden. In diesem Beispiel wird von einem DIN-A4-Ausgabeformat ausgegangen. Die Gesamthöhe eines Blattes beträgt also 29,7 cm.

Beispiele für Berichte mit dem Report-Designer30

Der Bericht muss dazu in mehrere Gruppen unterteilt werden. Zwei Gruppen beziehen sich auf das
gleiche Tabellenfeld und enthalten jeweils nur einen entsprechenden Tabellenwert.

Die folgende Tabelle zeigt die Einteilung der Seite in unterschiedliche Bereich des Berichtes:
A

Seitenrand oben

2,00 cm

B

Seitenkopf (erscheint auf jeder Seite, enthält keine Eingaben der Datenbank, sondern z. B. nur das Firmenlogo sowie die Adresse des Absenders)

3,00 cmC

Gruppenkopf für die Rechnungsnummer (Nur die Beträge, die zu einer Rechnungsnummer gehören, sollen später auch addiert werden. Der Gruppenkopf
erscheint nur zum Beginn der Rechnung.)

2,50 cmD

Gruppenkopf für die Rechnungsposten (Der Bereich «Detail» wird für andere
Inhalte benötigt. Deshalb erfolgt hier eine Gruppierung, die gleichzeitig die Sortierung der Rechnungsinhalte z. B. nach der Eingabe vornimmt. Diese Gruppe
besteht immer nur aus einem Wert.)

0,70 cmE

Gruppenkopf, ebenfalls an Rechnungsposten gebunden (Dieser Bereich wird nur
dann angezeigt, wenn so viele Rechnungsposten vorkommen, dass auf jeden Falleine weitere Rechnungsseite erforderlich ist. Er enthält die Zwischensumme und
die Seitennummerierung unten auf der Seite. Nach diesem Bereich erfolgt ein Seitenumbruch.)

2,00 cmF

Detail-Bereich (Dieser Bereich wird nur dann angezeigt, wenn so viele Rechnungsposten vorkommen, dass auf jeden Fall eine weitere Rechnungsseite erforderlich
ist. Er enthält den Übertrag, die Seitennummerierung oben auf der Seite)

2,50 cmG

Gruppenfuß für die Rechnungsnummer (Hier erfolgt die Ausgabe des Rechnungsbetrages, ggf. auch mit Angabe der Mehrwertsteuer. Der Gruppenfuß erscheint nur
zum Schluss der Rechnung.)

1,60 cm

Beispiele für Berichte mit dem Report-Designer

31

H

Seitenfuß (z. B. Angabe der Kontoverbindung)

1,00 cm

I

Seitenrand

1,00 cm

Ein Seitenumbruch soll nur dann erfolgen, wenn zu viele Rechnungsposten vorhanden sind. Fürdie Rechnungsposten ergibt sich der folgende freie Platz:
29,70 cm

(DIN A 4)-

2,00 cm(Pos. A)-

3,00 cm(Pos. B)-

2,50 cm(Pos. C)-

1,60 cm(Pos. G)-

1,00 cm(Pos. H)-

1,00 cm(Pos. I)=

18,60 cm

Der verbleibende freie Platz kann also maximal 18,60 cm / 0,70 cm = 26,57..., abgerundet also 26
Rechnungspositionen erfassen.
Sobald die 27. Rechnungsposition vorkommt muss auf jeden Fall ein Seitenumbruch erfolgen. Das
bedeutet, dass dann auf jeden Fall Gruppenkopf E und der Detail-Bereich angezeigt werden müssen. Es muss also ein Zähler für die Rechnungsnummer (Bereich C) eingerichtet werden. Erreicht
dieser Zähler die Nummer 27, so wird der Detail-Bereich (F) angezeigt.
Der Zähler der Rechnungsnummer wird wie folgt definiert:Über den Berichtsnavigator wird die Gruppe «Rechnung_ID» aufgesucht. Die neu zu gründende
Funktion heißt einfach «ZählerRechnungsnummer». Die Formel ist «[ZählerRechnungsnummer] +1». Der Startwert ist 1. Es werden keine Unterberichte eingebunden (die Funktion gibt es gar nicht…). Es wird auch nicht vorausberechnet. Für die Vorausberechnung wird ein gesonderter Zähler
«ZählerKomplett» erstellt.
Der Gruppenkopf E und der Detailbereich F werden angezeigt, wenn insgesamt mehr als 26 Positionen in der Rechnung stehen und die momentane Rechnungsposition 26 erreicht hat. Der Ausdruck für die bedingte Anzeige ist also in beiden Bereichen
Beispiele für Berichte mit dem Report-Designer32

AND([ZählerRechnungsnummer]=26;[ZählerKomplett]>26)
Der Inhalt dieser Bereiche erscheint also nur, wenn mindestens ein 27. Rechnungsposten zu
erwarten ist. Gruppenkopf E erscheint auf der ersten Seite. Er ist mit einem Seitenumbruch nachdem Bereich versehen. Der Inhalt des Bereiches «Detail» wird auf der folgenden Seite angezeigt.
Jetzt ist zu berechnen, wie groß der Anteil des Bereiches ist, der noch auf der ersten Seite angezeigt wird:
29,70 cm

(DIN A 4)-

2,00 cm(Pos. A)-

3,00 cm(Pos. B)-

2,50 cm(Pos. C)-

18,20 cm

(Pos. D * 26)-

1,00 cm(Pos. H)-

1,00 cm(Pos. I)=

2,00 cm

Der Gruppenfuß fällt aus der ersten Seite raus, insgesamt 26 Rechnungsposten sind enthalten.
Der Gruppenkopf E kann also maximal 2 cm auf der ersten Seite anzeigen. In diesem 2 cm muss
auf jeden Fall die Zwischensumme und die Seitenzahl untergebracht werden. Um auf jeden Falleinen korrekten Seitenumbruch zu erzeugen, sollte der Bereich also etwas kleiner sein. In dem
Beispiel wurde er auf 1,90 cm eingestellt.
Der Bereich «Detail» wird auf der Folgeseite oben angezeigt. Da auf der Folgeseite der Gruppenkopf der Rechnungsnummer (C) nicht mehr erscheint, kann hier der Bereich «Detail» so viel Platz
einnehmen wie der Gruppenkopf, nämlich 2,50 cm. Dann starten die darauffolgenden Rechnungsposten wieder mit der gleichen Einstellung wie auf der Vorseite.
Der Übertrag wird jeweils als einfache Summierung der vorhergehenden Posten erreicht.
Über den Berichtsnavigator wird die Gruppe «Rechnungsnummer» aufgesucht. Die neu zu gründende Funktion heißt einfach «SummePreis». Die Formel ist «[Preis] + [SummePreis]». Der Startwert ist [Preis]. Es werden keine Unterberichte eingebunden. Es wird auch nicht vorausberechnet.
Der Übertrag wird in dem Gruppenkopf E und der Detailbereich F angezeigt. Im Gruppenkopf E ist
der Übertrag ganz oben positioniert. Er erscheint auf der ersten Seite unten. Im Detailbereich F ist
der Übertrag ganz unten positioniert. Er erscheint auf der zweiten Seite direkt unterhalb der Tabellenköpfe.
Die Seitennummerierung wird ähnlich abgefragt wie die Anzeige des Gruppenkopfes E des Bereiches «Detail».
IF([ZählerRechnungsnummer]=26;"Seite 1";"")
Hiermit wird die Seitennummer auf der ersten Seite erstellt. Weitere IF-Abfragen können dann für
die weiteren Seitennummern eingebunden werden.
Die Seitennummer für die Folgeseite wird bei der gleichen Bedingung einfach auf "Seite 2" gesetzt.
Werden die Formeln entsprechend weitgehender formuliert, so können beliebig viele Seiten desBerichtes abgedeckt werden.
Der Ausdruck für die bedingte Anzeige wechselt also vonAND([ZählerRechnungsnummer]=26;[ZählerKomplett]>26)
zu
AND(MOD([ZählerRechnungsnummer];26)=0;[ZählerKomplett]>[ZählerRechnungsnummer])
Beispiele für Berichte mit dem Report-Designer

33

Der Gruppenkopf E und der Detailbereich F erscheinen also nur, wenn sich aus der Division desZählers der Rechnungsnummer mit 26 kein Rest ergibt und die Komplettzahl der Rechnungsposten größer ist als der Zähler der Rechnungsnummer.
Der Ausdruck für die Seitenzahl wechselt vonIF([ZählerRechnungsnummer]=26;"Seite 1";"")
zu"Seite "&[ZählerRechnungsnummer]/26
für die aktuelle Seite bzw.
"Seite "&([ZählerRechnungsnummer]/26)+1
als Anzeige für die Folgeseite.
Der folgende Berichtsausdruck ist mit diesen Einstellungen noch nicht zu bewerkstelligen:

Durch das Adressfeld sind auf der ersten Seite der Rechnung weniger Rechnungsposten enthalten
als auf der zweiten Seite. Der Bereich «Detail», der auf der zweiten Seite ganz oben abgebildet ist,
ist also deutlich kleiner als der Gruppenkopf für die Rechnungsnummer (C).
Um unterschiedliche Mengen an Rechnungsposten auf der ersten Seite und den Folgeseiten zuzulassen müssen also die Formeln noch einmal angepasst werden.
Die folgende Berechnung sichert ab, dass die entsprechenden Bereiche korrekt angezeigt werden.
AND(MOD([ZählerRechnungsnummer]-20;24)=0;[ZählerRechnungKomplett]>[ZählerRechnungsnummer])

Beispiele für Berichte mit dem Report-Designer

34Vom Zähler für die Rechnungsnummer wird die Anzahl der Rechnungsposten auf der ersten Seite
subtrahiert. Diese Differenz wird durch die mögliche Anzahl der Rechnungsposten auf der zweiten
Seite dividiert. Wenn die Division glatt auf geht (kein Rest, MOD = 0), dann ist die erste Bedingung
für die Anzeige von Gruppenkopf E und der Detailbereich F gegeben. Außerdem muss, wie bereits
vorher definiert, der Zähler für die Rechnungsnummer kleiner sein als die insgesamt zu erwartenden Rechnungsposten. Sonst würde ja die Rechnungssumme noch genug Platz auf der entsprechenden Seite haben.
Die mögliche Anzahl der Rechnungsposten auf der zweiten Seite wurde dadurch geringer, dassjetzt auf der zweiten Seite zusätzlich die Rechnungsnummer und das Datum enthalten sind.
Die Seitenzahl wird jetzt etwas einfacher berechnet:"Seite "&INT([ZählerRechnungsnummer]/24)+1
INT rundet auf die nächste Ganzzahl ab. Die erste Seite enthält maximal 20 Rechnungsposten.
Die Division ergibt für die erste Seite also ein Ergebnis < 1. Abgerundet wird das zu 0. Also musszu der ermittelten Seitenzahl 1 addiert werden, damit auf der ersten Seite auch 1 erscheint. Entsprechend muss für die zweite Seite 2 addiert werden.
Der Bericht weist in der obigen Form noch einen Schönheitsfehler auf. Ein genauer Blick auf die
Rechnungsposten zeigt, dass sich die unteren drei Rechnungsposten gleichen. Dies wurde hierdurch einfaches Kopieren der Datensätze erzeugt. Es handelt sich also nicht um die gleichen
Datensätze, sondern unterschiedliche Rechnungspositionen, die nacheinander über die Software
abgearbeitet wurden. Besser wäre hier, die Waren entsprechend gruppiert anzuzeigen, damit die
gleiche Ware nicht mehrmals, sondern nur einmal mit entsprechender Anzahl aufgelistet wird.
Grundsätzlich sollten möglichst viele Berechnungen, Gruppierungen usw. aus dem Report-Designer ausgelagert werden. Deshalb wird für eine entsprechende Gruppierung nicht mit den Gruppen des Report-Designers gearbeitet sondern mit den Gruppierungsfunktionen des Abfrageeditors.
Damit der Report-Designer die Abfrage einwandfrei verarbeiten kann wird schließlich daraus eine
Ansicht gemacht. Der Report-Designer versucht ansonsten, die Abfrage weiter durch seine Gruppierungsvorgaben und Sortierungsvorgaben zu ergänzen, was sehr schnell zu unbrauchbarem
Code führt.
Dann ergibt sich die folgende Rechnungsübersicht:

Beispiele für Berichte mit dem Report-Designer

35Alle Rechnungsposten sind nur einmal enthalten. Aus den ursprünglich auf Seite 1 unten stehenden 12 Hängemappen wurden in der Rechnung jetzt 24 Hängemappen. "Anzahl*Preis" wurde entsprechend angepasst.

Ausdruck von Berichten zum aktuellen Datensatz des Formulars
Gerade bei der Rechnungserstellung kann es sinnvoll sein, nach jeder Eingabe der Rechnungsposten einen entsprechenden Ausdruck anzufertigen. In einem Formular soll der Inhalt für die
Rechnung bestimmt werden und schließlich der Ausdruck des Einzeldokumentes erfolgen.
Berichte lassen sich nicht über Makros mit einem Filter starten. Allerdings kann die Abfrage, die als
Grundlage für den Bericht genutzt wird, vorher gefiltert werden. Dies geht entweder über die Formeiner Parameterabfrage
SELECT * FROM "Rechnung" WHERE "ID" = :IDoder über eine Abfrage, die über eine einzeilige Filtertabelle mit Daten versorgt wird:
SELECT * FROM "Rechnung" WHERE "ID" = (SELECT "Integer" FROM "Filter" WHERE "ID" =TRUE")
Bei der Parameterabfrage muss der Inhalt in ein entsprechendes Dialogfeld nach dem Start desBerichtes eingegeben werden.
Bei der Steuerung über eine Filtertabelle wird der Inhalt der Filtertabelle per Makro geschrieben.
Eine separate Eingabe ist also nicht mehr nötig. Diese Möglichkeit ist also für den Nutzer einfacher
zu handhaben und soll deshalb im Folgenden beschrieben werden.

Beispiele für Berichte mit dem Report-Designer

36

Aufbau der Filtertabelle
Die Filtertabelle soll lediglich einen Datensatz enthalten. Deshalb kann das Primärschlüsselfeld ein«Ja/Nein»-Feld sein. Andere Felder der Tabelle werden von der Benennung so gewählt, dassbereits eindeutig ist, was für einen Inhalt sie speichern können. In diesem Beispiel heißt das Feld,das den Primärschlüssel der Tabelle "Rechnung" filtern soll, "Integer", da der Primärschlüssel derTabelle "Rechnung" eben vom Feldtyp «Integer» ist. Für andere Filterungen können andere Felder
zusätzlich eingebaut werden. Der Filter "Integer" kann auch für mehrere Tabellen genutzt werden,
da ja vor dem Druck der alte Wert einfach mit dem aktuellen Wert überschrieben wird. Diese Doppelnutzung funktioniert so allerdings nur in einer Einzeldatenbank (Base zusammen mit der internen HSQLDB). In einer Mehrbenutzerdatenbank könnte in dem Moment, in dem die Abfrage desFilters erfolgt, von einem anderen Nutzer der Filterwert schon wieder geändert werden.
Feldname

FeldtypID

Ja/Nein [BOOLEAN]

Integer

Integer [INTEGER]

Diese Tabelle wird zum Start mit einem Datensatz gefüllt. Hierzu muss lediglich das Feld "ID" einmal markiert werden, so dass es den Wert «Ja» (oder in SQL «TRUE») hat.

Aufbau des Makros zum Start des gefilterten Berichtes
Das Formular muss für das Aufrufen eines einzelnen Berichtes an irgendeiner Stelle den Primärschlüssel der Tabelle "Rechnung" enthalten. Dieser Primärschlüsselwert wird ausgelesen und überein Makro in die Tabelle "Filter" übertragen. Anschließend wird in dem Makro noch der gewünschte
Bericht gestartet.
SUB Filtern_und_Drucken
DIM oDoc AS OBJECTDIM oDrawpage AS OBJECTDIM oForm AS OBJECTDIM oFeld AS OBJECTDIM oDatenquelle AS OBJECTDIM oVerbindung AS OBJECTDIM oSQL_Anweisung AS OBJECT
DIM stSQL AS STRING
oDoc = thisComponent
oDrawpage = oDoc.Drawpage
oForm = oDrawpage.Forms.getByName("MainForm")oFeld = oForm.getByName("fmtID")
oDatenquelle = ThisComponent.Parent.CurrentController
If NOT (oDatenquelle.isConnected()) THEN
oDatenquelle.connect()
END IFoVerbindung = oDatenquelle.ActiveConnection()oSQL_Anweisung = oVerbindung.createStatement()
stSql = "UPDATE ""Filter"" SET ""Integer"" = '"+oFeld.GetCurrentValue()+"' WHERE""ID"" = TRUE"oSQL_Anweisung.executeUpdate(stSql)
ThisDatabaseDocument.ReportDocuments.getByName("Rechnung_gleiche_Ware_zusammengefasst_Kundenadressfeld").open
END SUB

Das Formular hat in diesem Beispiel den Namen "MainForm". Das Primärschlüsselfeld heißt"fmtID". Dieses Schlüsselfeld muss nicht sichtbar sein, um darauf mit dem Makro zugreifen zu können. Der Wert dieses Feldes wird ausgelesen und mit dem UPDATE-Befehl in die Tabelle "Filter"geschrieben. Anschließend wird der Bericht gestartet. Die Ansicht, auf der der Bericht beruht,
wurde entsprechend um eine Bedingung erweitert:… WHERE "Rechnung_ID" = IFNULL((SELECT "Integer" FROM "Filter" WHERE "ID" =TRUE),"Rechnung_ID") …

Beispiele für Berichte mit dem Report-Designer37

Es wird das Feld "Integer" ausgelesen. Falls dieses Feld keinen Wert enthält wird stattdessen"Rechnung_ID" = "Rechnung_ID" gesetzt. Das bedeutet, dass alle Datensätze angezeigt werden –nicht nur der Filterdatensatz.

Beispiele für Berichte mit dem Report-Designer38