![]() |
Datenbank: Firebird • Version: 2.5 • Zugriff über: ZeosLib
Filtern von 3 Tabellen für Report
Hallo, ich werd noch wahnsinnig ;-) ..
ich muss für einen Report 3 Tabellen filtern: Betroffene Personen -> die Verträge der Person - die Leistungen lt. Vertrag Wenn ich DBGrids auf die 3 Tabellen hänge funktioniert alles einwandfrei, WENN DER REPORT DIE DATEN DRUCKT kommen nach Seitenwechsel Datensätze doppelt oder mehrfach Drucken will ich: ************************************************** ***************** customer 1 ____________contract A _______________Produkt 1 from Contract A of customer 1 _______________Produkt 2 from Contract A of customer 1 ____________contract B _______________Produkt 1 from Contract B of customer 1 _______________Produkt 2 from Contract B of customer 1 customer 2 ____________contract A _______________Produkt 1 from Contract A of customer 2 _______________Produkt 2 from Contract A of customer 2 … ************************************************** ***************** die Personen Tabelle wird gefilter mit "Select * from Personen where INR in (-1,155,24,656,...) Person-TZquery "onDataChange" filtert Verträge "Select * from Vertrag where INR in (-1,155,24,656,...) Verträge-Tzquery "onDataChange" filtert Leistungen (weiter unten ist ein Auschnitt der Procedure) Wenn ich 3 DBGrids auf die 3 TDataSource verbinde und in den dbGrids rumklicke funktioniert alles einwandfrei Eigentlich total einfach .. ABER: Der eingesetzte Reportdesigner (Reportbuilder 19) zickt mächtig rum - und druckt Leistungen des Vertrags mehrfach bei Seitenwechsel (teilweise endlos-loop) -Infos vom Hersteller: ![]() Jetzt habe ich herausgefunden: Wenn ich die Leistungen wie folgt filtere FUNKTIONIERT DER REPORT NICHT RICHTIG
Delphi-Quellcode:
procedure TF_DRUCK.dxdruck_vertragDataChange(Sender: TObject; Field: TField);
... if UniMainModule.fakturierungs_umfang <> 'ENTSCHAEDIGUNG' then begin xdruck_entsch.SQL.Clear; xdruck_entsch.SQL.Append('SELECT * FROM ANTEILE WHERE ANTEILE.FAKTURIERUNG_MONAT = ' + #39 + kunden_fakturieren.fakturierungsmonat + #39 + ' AND ANTEILE.VERTRAG_NR = :INR AND ANTEILE.MANDANT_INR = ' + inttostr(UniMainModule.aktueller_mandant_nummer) + ' AND ANTEILE.GUNST_INR = ' + s + ' ORDER BY ANTEILE.VERTRAG_NR desc '); xdruck_entsch.Open; end; if UniMainModule.fakturierungs_umfang = 'ENTSCHAEDIGUNG' then begin xdruck_entsch.SQL.Clear; xdruck_entsch.SQL.Append(UniMainModule.markierte_anteile + ' AND ANTEILE.MANDANT_INR = ' + inttostr(UniMainModule.aktueller_mandant_nummer) + ' AND ANTEILE.VERTRAG_NR = :INR ORDER BY ANTEILE.VERTRAG_NR desc'); xdruck_entsch.Open; end; ... Zitat:
Zitat:
Wenn ich das "procedure TF_DRUCK.dxdruck_vertragDataChange" deaktiviere und ZUR DESIGZEIT folgendes unter Eigenschaften bei xdruck_entsch mache FUNKTIONIERT DER REPORT RICHTIG
Delphi-Quellcode:
xdruck_entsch.MasterSource = dxdruck_vertrag
xdruck_entsch.SQL = SELECT * FROM ANTEILE WHERE ANTEILE.VERTRAG_NR = :INR ABER: Eine einfache " where Nummer = Nummer aus Mastertabelle" hilft mir nicht.. Wie bitte soll ich die Funktionalität von procedure TF_DRUCK.dxdruck_vertragDataChange in Parameter verpacken ? Hat jemand eine Idee? Vielen Dank Erich |
AW: Filtern von 3 Tabellen für Report
Du solltest verstehen, wie im RB master-Detail Reports funktionieren. Dann klappt das.
Das Problem hier ist, dass der Report mit den DataSets mehr macht, als das Grid + offensichtlich spießt sich da was mit dem Filtern in den Events. Außerdem würde ich gscheite Master/Detail Realationen aufsetzen, der OnDataChangeEvent ist da nicht so super geeignet. Welches Grid verwendst du denn? Und welche DB/Query? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:19 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz