Bericht mit zwei Datenebenen (Master-Detail)
Bericht mit zwei Datenebenen (Master-Detail)
Bisher haben unsere Beispielberichte nur eine Datenband ("Erste Ebene Daten" oder "MasterData") verwendet, um die Datenausgabe zu steuern. Dies war ausreichend für die Ausgabe von Daten aus einer Datenbank. Pantheon ermöglicht es auch, Berichte zu entwerfen, die bis zu sechs Datenebenen enthalten, alle auf einer Entwurfsseite. Darüber hinaus kann eine unbegrenzte Anzahl von Datenebenen in Berichten durch die Verwendung des Objekts "Unterbericht" erreicht werden - dieses Objekt wird später behandelt. Die meisten Berichte benötigen im Allgemeinen nur eine, zwei oder drei Datenebenen, größere Zahlen von Datenebenen sind selten.
Schauen wir uns an, wie man einen Bericht mit zwei Datenebenen entwirft. Der Bericht wird Daten aus den Tabellen ausgeben: "tHE_SetSubj" und "tHE_Order". Die erste Tabelle ist eine Liste von Fächern und die zweite ist eine Liste von Bestellungen, die von diesen Fächern (Kunden) aufgegeben wurden.
Die zweite Tabelle enthält die Liste aller Bestellungen, die von allen Kunden aufgegeben wurden. Um die Bestellungen aus der tHE_Order Tabelle zu sehen, die von einem Kunden in der Kunden-Tabelle aufgegeben wurden, sind die beiden Tabellen über das Feld "acSubject" von Kunden und das Feld "acConsignee" von der Bestelltabelle verknüpft.
Lasst uns den Bericht entwerfen. Erstellen Sie einen neuen Bericht und platzieren Sie zwei "TfrxDlDBTable"-Komponenten auf dem Formular. Setzen Sie die Komponenten-Eigenschaften wie hier gezeigt:
Tabelle1:
TabelleName = 'tHE_SetSubj'
Benutzername = 'Fächer'
Tabelle2:
TabelleName = 'tHE_Order'
Benutzername = 'Bestellungen'
Fügen Sie jetzt ein "MasterData" und ein "DetailData" Band zur Seite hinzu:

Beachten Sie, dass das "MasterData" Band über dem "DetailData" Band platziert werden muss! Ziehen Sie es bei Bedarf dorthin. Wenn das Master unter dem Detail platziert ist, wird Pantheon eine Fehlermeldung generieren, wenn Sie den Bericht in der Vorschau anzeigen.
Wenn Sie den Bericht jetzt in der Vorschau anzeigen, würden Sie sehen, dass die Liste der Bestellungen für jeden Kunden gleich bleibt und alle Datensätze aus der "Bestellungen" Tabelle enthält. Fügen Sie im Code des Berichts zwei Zeilen hinzu wie Sie auch auf dem Bild sehen können

Jetzt haben wir eine 'Master-Detail'-Beziehung und Verknüpfung zwischen Feldern in zwei Quellen festgelegt.
Beim Erstellen der Vorschau führt FastReport Folgendes aus. Nachdem ein Datensatz aus der Master-Tabelle (Kunde) ausgegeben wurde, setzt es den Filter auf der Detail-Tabelle (Bestellungen). Nur die Datensätze, die die Bedingung 'Orders.acConsignee = Subjects.acSubject' erfüllen, bleiben in der Tabelle. Das bedeutet, dass für jeden Kunden nur die Bestellungen angezeigt werden, die dem aktuellen Kunden gehören, im Detailband. Dies ist ein wichtiges Konzept, das man verstehen sollte. Auch wenn Datenbänder vom Master- oder Detailtyp sein können, steuern sie nur die Positionierung der Daten auf der Ausgabeseite (Reihenfolge und Anzahl der angezeigten Male). Die von den Objekten in den Bändern angezeigten Daten hängen davon ab, mit welchen Feldern die Objekte verknüpft sind und von der externen Verknüpfung der beiden Tabellen.
Dies ist die endgültige Ausgabe:

Berichte, die bis zu 6 Datenebenen enthalten, können auf ähnliche Weise erstellt werden.
In vielen Fällen wird die Master-Detail-Beziehung im Programmcode eingerichtet.
Schauen wir uns ein Beispiel des Berichts '3C0 - Reiseverwaltungsbericht' an, der im Programmmenu 'Personal | Reiseverwaltung | Berichte' zu finden ist.
Im Bericht ist die Master-Tabelle die 'Haupt'-Tabelle der Reisebestellungen, die Detailtabelle ist die Tabelle mit den Positionen der Reisebestellung. In diesem Fall haben wir auch eine weitere Ebene (Unterdetailtabelle), nämlich die Kosten auf der Position der Reisebestellung.

In diesem Bericht haben wir auch zwei Bänder mit der "RowCount"-Eigenschaft, die auf den Wert 1 gesetzt ist, und Unterberichte, die wir später kennenlernen werden.