LazReport Tutorial/de

From Lazarus wiki
Jump to navigationJump to search

Einleitung

Dieses Tutorial soll die Verwendung des LazReport Packages anhand einiger Beispiele demonstrieren. Für die Beispiele verwende ich die Einstellungen aus dem Tutorial zu SQLdb (SQLdb Komponenten und Firebird Datenbank). Grundsätzlich läßt sich jede von Lazarus unterstützte Datenbank verwenden.

Beispiel 1

Öffnen sie zunächst das im SQLdb Tutorial erstellte Projekt. Alternativ erstellen sie ein neues Projekt mit einem Datenbankzugriff (Lesezugriff reicht aus). Von der Seite 'LazReport' in der Komponentenpalette legen sie eine TfrReport und eine TfrDBDataSet Komponente auf ihrem Formular ab. Die erste Komponente ist die eigentliche Reporting-Komponente. Die zweite Komponente wird für die Verbindung zur Datenbank benötigt. Grundsätzlich kann man die Verbindung auch ohne diese Komponente herstellen. Das Entwerfen des Reports wird damit aber erleichtert. Setzen sie die 'DataSet' Eigenschaft von frDBDataSet1 auf SQLQuery1 und die 'DataSet' Eigenschaft von frReport1 auf frDBDataSet1.

Einen Report entwerfen

Bevor man einen Report anzeigen oder ausdrucken kann, muß man zunächst festlegen, welche Daten der Report beeinhalten soll. Da wir für das Einbinden von Datenbankfeldern eine bestehende Verbindung zur Datenbank benötigen, geben sie eine einfache Abfrage in die 'SQL' Eigenschaft von SQLQuery1 ein, z.B. 'select * from CUSTOMER'. Setzen sie anschließend die 'Active' Eigenschaft auf True. Bei Erfolg werden jetzt im verbundenen DBGrid1 die gewünschten Daten angezeigt.

Zur Entwicklungszeit erreicht man den Designmodus von Laz Report am einfachsten über das Kontextmenü der Reportkomponente. Klicken sie mit der rechten Maustaste auf die frReport1 Komponente. In dem erscheinenden Kontextmenü wählen sie den obersten Eintrag - Report entwerfen. Daraufhin öffnet sich ein Fenster mit dem Designer von LazReport.

Die Startseite des LazReport Designers

Wenn man in einem Report mehrere Spalten nebeneinander darstellen möchte, dann ist eine Umstellung auf das Querformat zu empfehlen, da man so mehr Platz in der Breite zur Verfügung hat. Im Menü des Designers geht man dazu auf Datei -> Seitenoptionen. An dieser Stelle kann man auch das Papierformat ändern (in der Regel ist A4 voreingestellt). Nach einem Klick auf OK wird unser Arbeitsblatt jetzt im Querformat angezeigt.

LazReport basiert auf FreeReport (Version 2.32). Damit übernimmt LazReport auch Art und Weise der Reporterstellung mittels Bändern. Ein Band kann verschiedene Funktionen erfüllen. Die zur Verfügung stehenden Funktionen erhält man, wenn man ein neues Band einfügen will. Klicken sie dazu in der Symbolleiste am linken Rand auf das zweite Symbol von oben ('Band einfügen'). Wenn sie jetzt die Maus auf unser Arbeitsblatt bewegen erscheint ein Rechteck, welches von gestrichelten Linien begrenzt ist. Dieses stellt das einzufügende Band dar. Mit der Maus läßt sich die Position des Bandes ändern. Wenn die gewünschte Position erreicht ist, kann das Band mit einem Mausklick fixiert werden. Dabei ist nur die vertikale Ausrichtung von Bedeutung. Da sich ein Band immer über die gesamte Seitenbreite erstreckt, ist die horizontale Ausrichtung belanglos. Für unser Beispiel platzieren wird das Band am oberen Seitenrand. Jetzt erscheint ein Auswahldialog, in dem der Bandtyp gewählt werden kann.

Die zur Verfügung stehenden Bandtypen

Wir entscheiden uns für 'Report title'. Dieses Band wird einmal am Beginn des Reports gedruckt. Da es nur einmal pro Report zur Verfügung steht, kann es beim Hinzufügen eines weiteren Bandes nicht mehr als Bandtyp gewählt werden. Ohne Inhalte macht ein Band natürlich wenig Sinn. Also fügen wir ein Textfeld hinzu. Dazu wählen wir in der Symbolleiste am linken Rand das oberste Symbol ('Rechteckobjekt einfügen') und platzieren das Feld irgendwo in der Mitte des Bandes. Daraufhin öffnet sich ein Texteditor.

Der Texteditor im Designer

Im Editor tragen wir jetzt 'Kundenübersicht' ein und bestätigen mit OK. Wie man jetzt sieht, ist der Text etwas zu lang für das Feld. Kein Problem, denn die Größe des Feldes läßt sich einfach ändern. Bewegen sie die Maus an den rechten Rand des Feldes bis sich der Cursor verändert und ziehen sie dann den Rand nach rechts, bis der komplette Inhalt angezeigt wird. Ein Feld kann ruhig etwas größer sein als unbedingt erforderlich. Solange man für das Feld keine andere Hintergrundfarbe wählt, wird es im fertigen Report nicht weiter auffallen. Ist das Feld dagegen zu klein, wird der Inhalt abgschnitten.

Den meisten Menschen fällt es schwer, mit dem Augenmaß ein Element genau nach Wunsch zu platzieren. LazReport enthält daher in der Symbolleiste am rechten Rand einige Befehle, um das gewählte Element genau auszurichten. Mit dem dritten Symbol von oben ('Waagerecht im Fenster zentrieren') erreicht man etwa eine waagerechte Zentrierung des Elements. Mit den Symbolleisten am oberen Rand läßt sich der Text noch formatieren (Schriftart, Schriftgöße, Schriftfarbe etc.) Wenn nach der Wahl einer größeren Schriftart (was für einen Reporttitel nicht ganz unüblich ist) ein Teil des Textes abgeschnitten wird, dann muß man das Textfeld entsprechend vergrößern. Eventuell muß man dann auch das Band etwas vergrößern.

In einem Textfeld kann man aber mehr als nur einfachen Text eingeben. Legen sie dazu ein weiteres Textfeld auf dem Band ab (z.B. am rechten Rand). Geben sie jetzt den Text 'Stand: ' ein. Klicken sie dann auf die Schaltfläche 'Variable'. Es erscheint ein Auswahldialog mit den zur Verfügung stehenden Variablen. Wählen sie hier 'Date'. Mit einem Doppelklick wird die Variable an der aktuellen Position im Texteditor eingefügt. Bei ihnen sollte jetzt 'Stand: [Date]' stehen. Klicken sie auf 'OK'. Im Designer wird jetzt die Variable angezeigt. Wird der Report ausgeführt, dann wird die Variable durch das aktuelle Datum ersetzt. Für die Gestaltung kann sich jetzt noch ein kleines Problem ergeben, wenn der Inhalt einer Variablen länger ist als der Name der Variablen. Wenn das Textfeld zu klein ist, wird ein Teil des Inhalts abgeschnitten. Um dies zu kontrollieren (und das Textfeld ggf. anzupassen) verwenden wir die Vorschau (Datei -> Vorschau).

Das Vorschau-Fenster mit dem bisher eingegebenden Inhalt

Da wir bislang nur ein Band mit dem Reporttitel eingegeben haben, ist in der Vorschau jetzt noch nicht allzu viel zu sehen. Die Vorschau läßt sich wie ein normales Fenster mit einem Mausklick rechts oben schließen.

Hauptzweck eines Reports ist natürlich die Anzeige von Informationen aus einer Datenbank. Wenn man möchte, kann man jetzt weitere Bänder in den Report einfügen und darin die entsprechenden Felder platzieren. LazReport bietet jedoch auch eine komfortablere Möglichkeit. Gehen sie im Menü des Designers auf Werkzeuge -> Werkzeuge -> Datenbankfelder einfügen.

Die zur Verfügung stehenden Datenbankfelder

Jetzt wird auch klar, warum wir vorhin zur Entwicklungszeit eine Verbindung mit der Datenbank hergestellt haben. Die von SQLQuery1 zurückgegebenen Felder stehen uns jetzt zur Auswahl. Mit dem Aktivieren von 'Header einschließen' werden zusätzlich auch Felder mit den Feldbezeichnungen eingefügt (im fertigen Report sozusagen die Spaltenüberschriften). Mit 'Bänder einfügen' werden automatisch die benötigten Bänder erstellt, so daß man diese nicht manuell erzeugen muß. Für unser Beispiel aktivieren wir beide Einstellungen und wählen einige der Datenbankfelder aus (ggf. mit gedrückter STRG Taste). Mit einem Klick auf 'OK' werden die gewählten Felder in den Report eingefügt. Falls sich die Bänder jetzt etwas überlagern sollten, dann können sie diese einfach mit der Maus verschieben. Wie wir sehen wurden zwei neue Bänder eingefügt. 'Page header' wird einmal auf jeder Seite angezeigt und enthält die Feldbezeichnungen. Wenn man in der Datenbank mit Abkürzungen arbeitet (und diese werden von LazReport als Vorgabe verwendet), dann kann man die Feldbezeichnungen noch verändern. Das Band 'Master data' enthält die Verlinkungen zu den Datenbankfeldern und wird einmal je Datensatz gedruckt. Mittels Vorschau kann man schon mal das Ergebnis betrachten. Jetzt kann man auch noch Anpassungen an der Optik vornehmen.

Prinzipiell könnte man den Report jetzt schon verwenden. Um das Thema noch ein wenig abzurunden, werden wir ein weiteres Band in den Report einfügen, um auch die Seitenzahlen anzeigen zu können. Platzieren sie ein neues Band im Report und wählen bei Bandtyp 'Page footer'. Das Band muß nicht am unteren Ende der Seite platziert werden. Die Anordnung im Report (am Ende einer jeden Seite) übernimmt der Reportgenerator. Auf dem Band wird jetzt ein neues Rechteckobjekt abgelegt. Im sich öffnenden Texteditor geben sie 'Seite ' ein. Dann klicken sie auf die Schaltfläche 'Variable' und wählen 'Page#'. Dann geht es weiter mit ' von ' gefolgt von einer weiteren Variablen 'TotalPages'. Zum Schluß fügen sie noch ' Seiten' hinzu und schließen den Texteditor. Wahrscheinlich muß das Textfeld noch etwas verbreitert werden, um den ganzen Inhalt anzeigen zu können. Ein Blick auf die Vorschau bringt ein etwas überraschendes Ergebnis. Am Ende der ersten Seite findet man 'Seite 1 von 0 Seiten'. Kann LazReport etwa nicht richtig rechnen? Keine Sorge, kann sehr wohl richtig rechnen. Damit die Gesamtzahl der Seiten richtig ermittelt werden kann, muß der Report ein zweites Mal durchlaufen werden (da die Seitenzahl von der Anzahl der Datensätze abhängt, die dem Report erst nach dem Einlesen des letzten Datensatzes bekannt ist). Dies läßt sich einstellen über Datei -> Reportoptionen... und Aktivieren der Option 'Report in zwei Durchläufen'. Die Vorschau sollte jetzt in etwa dieses Bild liefern: