|
Master-Detail Druckreport |
Hoch Zurück Vor |
|
Das Prinzip hinter Master-Detail-Beziehungen sowie deren grundlegende Verwendung wurden bereits im Artikel Interatkive Datenansichten per Master-Detail erklärt. Dort lag der Schwerpunkt auf „interaktiven“ Datenansichten. Die „statischen“ Varianten dieser Datenansichten sind Druckreports die Master-Detail-Beziehungen verwenden und hier spielen sie Ihre volle Stärke aus.
Aus einer einfachen (oder auch komplexen) Ergebnistabelle lassen sich bereits die verschiedensten Druckreporte erstellen. Für viele Anwendungen genügt dies allerdings noch lange nicht. Gerade in Verbindung mit dem Reportgenerator von DataNAUT CS sind Master-Detail-Beziehungen ein unerlässliches Werkzeug für komplexere Reports.
Das Drucken einer Rechnung ist hierfür ein gutes Beispiel. Vereinfacht sind dafür einmalige Rechnungsdaten notwendig, beispielsweise die Rechnungsnummer, der Empfänger und das Rechnungsdatum, und selbstverständlich die Rechnungspositionen. Einige dieser benötigten Informationen lassen sich in einer einzelnen Ergebnistabelle zusammenfassen, sollen aber auch die Positionen in die eine Tabelle integriert werden, dann wird die Sache schnell sehr kompliziert. Ohne ins Detail zu gehen: Die Verwendung mindestens einer Sub-Query zum Auslesen der Rechnungspositionen ist fast immer die wesentlich einfachere Lösung.
Im Folgenden werden Sie sehen, wie einfach Master-Detail-Beziehungen in Druckreporten verwendet werden können. Als Beispiel wird allerdings keine Rechnung dienen, sondern die relativ unspektakuläre Auflistung von Geburtstagen, sortiert nach Monaten: Für jeden Monat, in dem eine Person in der Adressdatenbank Geburtstag hat, soll eine Überschrift angelegt werden, unter der dann alle Personen mit Vor- und Nachnamen sowie Geburtsdatum aufgelistet werden, die in diesem Monat Geburtstag haben.
1 Starten Sie DataNAUT CS im Designer-Modus und erstellen Sie ein neues Template mit dem Namen Master-Detail: Druckreport.
2 Wählen Sie in den Basiseinstellungen als Ausführungsmodus die Option Druckformate.
3 Öffnen Sie die Hauptabfrage über Basiseinstellungen / SQL-Abfragen und Scripte / Main / DEFAULT und geben Sie folgenden SQL-Code ein: SELECT MONTH(GDATUM) "MONAT" FROM adr GROUP BY MONAT ORDER BY MONAT Diese Abfrage liefert eine Tabelle aller Monate (als Nummern) zurück, in denen eine Person aus der Adressdatenbank Geburtstag hat. Im Falle der Demo-Datenbank sind dies sämtliche Monate von 1 bis 12. 4 Legen Sie über SQL-Abfragen und Scripte / Neu ein neues Sub-Query an und geben Sie folgenden Code für die neue Abfrage ein: SELECT TOP 20 ANREDE, NAME, VORNAME, GDATUM FROM adr WHERE MONTH(GDATUM)=:MONAT ORDER BY DAYOFMONTH(GDATUM), GDATUM, NAME, VORNAME
Diese Abfrage liefert die Anrede, Vor- und Nachnamen sowie Geburtstag aller Personen aus der Datenbank zurück, die in dem über den Parameter MONAT definierten Monat Geburtstag haben. Zu diesem Parameter gleich mehr. Sortiert wird die Ergebnistabelle nach dem Tag im Monat, an dem der Geburtstag liegt sowie dem Geburtsdatum selbst. Würde nur nach dem Datum sortiert werden, dann wären die Ergebnisse nach Jahren und dann erst nach Tagen sortiert: Der 1.1.1990 käme nach dem 31.12.1940. Für den Druck sollen aber zuerst alle Personen gelistet werden, die am ersten eines Monats Geburtstag haben, dann die am zweiten, bis hin zum letzten Tag des Monats und erst zweitrangig soll nach dem Jahr sortiert werden. Das TOP 20 dient lediglich dazu, die Datenmenge der Demo-Datenbank unter Kontrolle zu halten, indem jeweils nur die ersten 20 Ergebnisse verwendet werden. 5 Wählen Sie jetzt in den Script-Einstellungen als Master/Detail Steuerungstyp die Option mdtAutoParameters aus. Und nun kommt der Parameter aus obigem Sub-Query ins Spiel: Über den Steuerungstyp mdtAutoParameters wird festgelegt, dass die Master-Detail-Beziehung über einen Parameter im Sub-Query definiert wird, dessen Wert über ein gleichnamiges Feld der Master-Tabelle bestimmt wird. Das Query muss also einen Parameter enthalten, der genauso heißt, wie ein Feld in der Ergebnistabelle der Hauptabfrage. In diesem Fall ist dies der Parameter MONAT. Tragen Sie also als nächstes MONAT in das Eingabefeld Detail Parametername ein.
6 Aktivieren Sie noch das Sub-Query über die Option Abfrage aktiviert und es kann mit dem Druckreport weitergehen. 7 Legen Sie einen neuen Druckreport über Druckreport / Erstellen an.
8 Alles, was im Druckreport im Detail-Bereich angelegt wird, wird für jeden Datensatz der Ergebnistabelle wiederholt. Zunächst sollen die Nummern aller Monate durchlaufen und gedruckt werden. Fügen Sie dazu ein Steuerelement vom Typ DBText in den Detailbereich ein. Zusätzlich können Sie noch ein reines Text-Element zur Beschriftung einfügen.
9 Jetzt muss das DBText-Element mit dem passenden Feld verknüpft werden: Markieren Sie das Element und wählen Sie im linken Teil des Editor-Fensters in den Eigenschaften unter Data zunächst als DataPipeline den Eintrag TEMPLATE und dann als DataField den Eintrag MONAT aus. Damit wird eine Verknüpfung zum Feld MONAT aus der Tabelle TEMPLATE (die Ergebnistabelle der Hauptabfrage) hergestellt.
10 Zu jedem Monat sollen nun alle Geburtstage gelistet werden. Dies geschieht über einen Unterbericht. Ein Unterbericht ist ein zweiter, eingebetteter Druckreport, der eine andere Tabelle durchlaufen kann. Fügen einen neuen Unterbericht ebenfalls in den Detailbereich, aber unterhalb des DBText-Elementes ein. Markieren Sie das Element und wählen Sie im linken Teil des Editor-Fensters in den Eigenschaften unter Data die entsprechende Eigenschaft dazu.
11 Öffnen Sie den Unterbericht, indem Sie auf den Reiter SubReport1:SUB_01 unterhalb des Editor-Fensters klicken. 12 Der Editor für den Unterbericht (Sub-Report) sieht fast aus, wie der normale Report-Editor selbst. Fügen Sie in den Detail-Bereich des Sub-Reports DBText-Elemente für Datum, Anrede, Vorname und Nachname ein, wie es in Schritt 9 für den Monat beschrieben wurde. Als DataPipeline müssen Sie jetzt allerdings SUB_01, also die Ergebnistabelle der Sub-Query einstellen, bevor Sie die passenden Felder (GDATUM, ANREDE, VORNAME, NAME) auswählen können.
13 Speichern Sie die Änderungen des Reports über Datei / Speichern und schließen Sie den Reporteditor über Datei / Schließen. Jetzt muss nur noch das Template selbst gespeichert werden und schon können Sie den neuen Master-Detail-Druckreport über Testen ausprobieren.
|