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
Erich Wanker - for life:=1971 to lebensende do begin ..
O
/H\
/ \