Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Filtern von 3 Tabellen für Report (https://www.delphipraxis.net/198959-filtern-von-3-tabellen-fuer-report.html)

erich.wanker 14. Dez 2018 12:29

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: http://rbwiki.digital-metaphors.com/...g-sql-queries/

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:

Erklärung: User hat manuell was ausgewählt:= UniMainModule.fakturierungs_umfang = 'ENTSCHAEDIGUNG'
ansonsten alle zum Vertrag gehörenden Leistungen drucken
Zitat:

Erklärung: der String "UniMainModule.markierte_anteile" wird verwendet, wenn der User nur markierte Leistungen drucken will - dann schaut der zusammengesetzte String so aus:
"SELECT * FROM ANTEILE WHERE INR IN (-1,331413,331186,331179,331174,331171,331176)"




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

TigerLilly 14. Dez 2018 15:02

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 09:13 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz