Report mit zwei Datenebenen (master-detail)

Navigation:  Bericht im FR-Designer > Reporterstellung >

Report mit zwei Datenebenen (master-detail)

Previous pageReturn to chapter overviewNext page

Bisher haben wir nur Reporte betrachtet, die nur ein Band "MasterData" (Daten 1. Ebene) enthielten. Dies erlaubte die Daten einer DB-Tabelle darzustellen. FastReport erlaubt jedoch die Darstellung von bis zu 6. Ebenen der Daten (es geht auch mehr indem man das Objekt "Unterreport", dazu jedoch später mehr). In der Regel sind Reporte auf 1-3 Ebenen beschränkt, selten mehr.

 

Betrachten wir die Erstellung eines  2. Ebenen Reports. Dieser soll die Daten der Tabellen Kunden und Aufträge enthalten. Die erste Tabelle enthält die Kundenliste, die zweite die Bestellungen der Kunden. Die Tabellen sehen wie folgt aus:

 

Kunden:

 

Kund.-Nr.Company

1221Kauai Dive Shoppe

1231Unisco

1351Sight Diver

 

 

Bestellungen:

 

Bestellnr.Kund.-Nr.Verkaufsdatum

1003135112.04.1988

1023122101.07.1988

1052135106.01.1989

1055135104.02.1989

1060123128.02.1989

1123122124.08.1993

 

 

Wie man sieht, enthält die zweite Tabelle die gesamte Liste aller Bestellungen, von allen Unternehmen. Um eine Liste mit Bestellungen zu erhalten, die nur ein Unternehmen gemacht hat, muss man aus der  ersten Tabelle die gewünschte Kund.-Nr. auswählen. Der Report sieht nun wie folgt aus:

 

1221Kauai Dive Shoppe

 1023  01.07.1988

 1123  24.08.1993

 

1231Unisco

 1060  28.02.1989

 

1351Sight Diver

 1003  12.04.1988

 1052  06.01.1989

 1055  04.02.1989

 

 

 

Im Designer des Reports verknüpfen wir die Datenquellen im Fenster "Report|Daten..." und legen zwei Bänder auf die Seite "MasteData" ("Daten 1. Ebenen") und "DetailData" "Daten 2. Ebene":

clip0168

 

Beachten Sie das Band "MasterData" dieser muss oben liegen! Wenn man ihn unter das Band "Daten 2. Ebene" setzt, wird FastReport dies beim Start des Reports melden.

 

Wenn wir den Report nun starten, sehen wir das die Bestellliste für jeden Kunden gleich ist und alle Einträge der Liste Bestellungen enthalten. Dies geschieht, weil wir den Listenfilter in der Tabelle Bestellungen eingestellt haben. Bei der Komponente Table2 stellen wir die Eigenschaft MasterSource = DataSource1 ein, dadurch stellen wir die Verbindung "master-detail" her. Jetzt muss man die Bedingung des Filters festlegen. Hierfür rufen Sie den Editor der Eigenschaft MasterFields der Komponente Table2 auf:

 

_img119

 

Wir müssen die beiden Felder CustNo der beiden Quellen verknüpfen. Wählen Sie die beiden(?) in der Liste oben aus und klicken Sie auf "Add". Die verknüpften Felder erscheinen im unteren Fenster. Sie können das Fenster jetzt schließen indem Sie auf OK klicken.

 

Beim Start des Reports macht FastReport folgendes. Nach Auswahl eines Datensatzes aus der Master-Tabelle (Kunde), filtert es die Detail-Tabelle (Orders). Danach werden nur Datensätze angezeigt, die die Bedingung Orders.CustNo = Customer.CustNo erfüllen (sprich für jeden Kunden werden nur seine Bestellungen angezeigt):

 

_img120

 

Auf diese Weise kann man Reporte mit bis zu 6. Datenebenen anlegen.