logo
small logo
  • Produkte
  • Shop
  • Support
  • Articles
  • Customer panel Support
    • en
    • pt
    • es
    • de
    • pl
    • JP
    • ZH
  • Home
  • /
  • Articles
  • /
  • Bericht mit zwei Datenebenen (master-detail) in Delphi/Lazarus am Beispiel von FastReport VCL / FMX
  • Verwendung interaktiver Karten in FastReport VCL 2021

    30. April 2021

    Wir präsentieren Ihnen den letzten Artikel über die Kurse des Bildungsprogramms “Akademiker”. In den

    read more
  • Berichterstellung mit Dialogformularen

    26. April 2021

    In den vorherigen Artikeln zum Bildungsprogramm „Akademiker“ haben wir gelernt, wie man FastReport in Lazarus

    read more
  • Die FastReport Familie der Reportgeneratoren - kurze Overview

    23. März 2020

    Reporting – ein wichtiges Bereich, ohne es Aktivitäten im Alltagsleben richtig schwer vorzustellen. Bürokratie ist

    read more
  • Die Arbeit und die Feinabstimmung des ITF-14-Barcodes in Delphi / Lazarus

    7. September 2021

    In der Version FastReport VCL 2021.2 wurde ein neuer Barcode ITF-14 hinzugefuegt. Es kommt eine

    read more
  • Verwendung von FastReport-Speicherressourcen

    1. Dezember 2021

    Es gibt Situationen, in denen das Ändern bzw. Kopieren von Berichten durch die Programmbenutzern eingeschränkt

    read more

Bericht mit zwei Datenebenen (master-detail) in Delphi/Lazarus am Beispiel von FastReport VCL / FMX

15. Oktober 2021

In diesem Artikel möchte ich Ihnen eine leistungsstarke FastReport-Funktion wie „Berichte mit mehreren Ebenen“ vorstellen. Sie können ihre Struktur mit einem Baum vergleichen: “Stamm, dickere Äste, dünnere Äste, und so weiter bis zu den Blättern” oder mit der Struktur eines Unternehmens “Abteilungen, Unterabteilungen, Mitarbeiter”. Sie werden oft “Master-Detail” oder “Master-Slave” genannt und solche Berichte werden aus mehreren Tabellen erstellt. Eine Tabelle enthält eine Liste der Hauptentitäten, eine andere, die mit der ersten Tabelle verknüpft ist, enthält eine Liste der untergeordneten Entitäten mit einer Verknüpfung zur ersten Tabelle. Eine bestimmte Entität aus der ersten Tabelle ist einer bestimmten Entität aus der untergeordneten Tabelle untergeordnet usw.

FastReport unterstützt die Einschachtelung von bis zu 6 Ebenen (mehr kann mit dem "Unterbericht"-Objekt gemacht werden, aber dazu später mehr). In der Praxis ist es nur selten notwendig, Berichte mit umfangreichen Datenschachtelungen zu drucken; in der Regel ist dies auf eine bis drei Ebenen beschränkt.

Beispiel für die Entwicklung eines Berichts mit mehreren Ebenen

Betrachten wir als Beispiel die Erstellung eines Berichtes mit zwei Ebenen. Er enthält Daten aus den Tabellen „Customer“ und „Orders“. Die erste Tabelle ist eine Liste der Kunden und die zweite ist eine Liste der Bestellungen von Kunden. Die Tabellen enthalten Daten der folgenden Art:

Customer:

CustNo       Company
1221          Kauai Dive Shoppe
1231          Unisco
1351          Sight Diver

Orders:

OrderNo       CustNo       SaleDate
1003            1351          12.04.1988
1023            1221          01.07.1988
1052            1351          06.01.1989
1055            1351          04.02.1989
1060            1231          28.02.1989
1123            1221          24.08.1993

Wie Sie sehen können, enthält die zweite Tabelle eine Liste aller Bestellungen aller Kunden. Um eine Liste der Bestellungen eines bestimmten Kunden zu erstellen, wählen Sie aus der Tabelle die Datensätze aus, deren Feld CustNo = Nummer des ausgewählten Kunden ist. Der auf diesen Daten basierende Bericht wird wie folgt aussehen:

1221       Kauai Dive Shoppe
    1023       01.07.1988
    1123       24.08.1993
1231       Unisco
    1060       28.02.1989
1351       Sight Diver
    1003       12.04.1988
    1052       06.01.1989
    1055       04.02.1989

Beginnen wir mit der Berichterstellung. Erstellen Sie ein neues Projekt in Delphi, fügen Sie in das Formular zwei TTable-Komponenten, eine TDataSource-Komponente, zwei TfrxDBDataSet-Komponenten und eine TfrxReport- Komponente ein. 

Formular mit Komponenten

Verbinden Sie Daten aus der Datenbank mit Berichtsobjekten 

Konfigurieren Sie die Komponente wie folgt:

Table1:
DatabaseName = 'DBDEMOS'
TableName = 'Customer.db'
Table2:
DatabaseName = 'DBDEMOS'
TableName = 'Orders.db'
 
DataSource1:
DataSet = Table1
 
frxDBDataSet1:
DataSet = Table1
UserName = 'Customers'
 
frxDBDataSet2:
DataSet = Table2
UserName = 'Orders'
 

Verknüpfen Sie im Berichtsdesigner unsere Datenquellen im Fenster "Bericht|Daten…". 

Verknüpfen mit Datenquellen

Fügen Sie der Seite die Bänder "Daten der Ebene 1" (master) und " Daten der Ebene 2" (detail) hinzu. Und aus dem Daten-Panel (rechts) ziehen Sie die Felder der Tabellen (Master und Slave) zu den entsprechenden Bändern. Es wird etwa so aussehen:

Berichtsvorlage

Bitte beachten Sie, dass das Band "Daten der Ebene1" oben platziert werden sollte! Wenn Sie unter das Band "Daten der Ebene2" platzieren, meldet FastReport beim Starten des Berichtes einen Fehler.

Beim Starten sehen wir jetzt, dass die Bestellliste für jeden Kunden gleich ist und alle Einträge aus der Tabelle „Orders“ enthält. Dies geschah, weil wir die Filterung der Einträge in der Tabelle „Orders“ nicht aktiviert hatten.

Zurück zu unseren Datenquellen. Für die Komponente Table2 setzen Sie die Eigenschaft MasterSource = DataSource1. Somit haben wir eine Master-Slave-Beziehung aufgebaut. Nun müssen Sie die Bedingung zum Filtern von Datensätzen in der Slave-Quelle festlegen. Rufen Sie dazu den Editor der MasterFields-Eigenschaft der Table2-Komponente auf:

MasterFields-Eigenschaftseditor

Wir müssen die beiden CustNo-Felder in beiden Quellen verknüpfen. Wählen Sie dazu den Index CustNo aus der oberen Liste aus, markieren Sie die Felder und klicken Sie auf "Add". Die verknüpften Felder werden in das untere Fenster verschoben. Schließen Sie dann den Editor mit ОК.

Beim Starten des Berichtes führt FastReport folgende Schritte aus. Nach der Auswahl des nächsten Datensatzes in der Haupttabelle (Customer) wird der Filter für die die Untertabelle (Orders) gesetzt. Nur die Datensätze, die die Bedingung Orders.CustNo = Customer.CustNo erfüllen, bleiben in der Tabelle, d.h. für jeden Kunden werden nur seine Bestellungen angezeigt:

Endbericht

Ebenso können Berichte mit bis zu 6 Datenebenen erstellt werden.

about product download buy
avatar
Michael Philippenko
VP
Fast Reports Team: Michae Philippenko - VP at Fast Reports
VCL FMX Lazarus FastReport Delphi

Add comment
logo
  • 800-985-8986 (English, US)
  • +4930568373928 (German)
  • +55 19 98147-8148 (Portuguese)
  • info@fast-report.com
  • 901 N Pitt Str #325 Alexandria VA 22314
  • Shop
  • Download
  • Dokumentation
  • Referenzen
  • Informationen zur Deinstallation unserer Produkte
  • Ticket system
  • FAQ
  • Tutorial Video
  • Forum
  • Articles
  • Unsere Nachrichten
  • Presse über uns
  • Partner
  • Kontakte

© 1998-2022 by Fast Reports Inc.

  • Datenschutz