![]() |
Fastreport 4 Welchen Bandtyp zum wahlweise einblenden?
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo Zusammen,
ich habe ein GROSSES Problem und komme einfach nicht weiter. Das Problem vorab: Wie schaffe ich es in Abhängigkeit von dem aktuelle Datensatz des MasterDataBand ein ChildBand OBERHALB von MasterDataBand zu aktivieren? Den Report habe ich angehängt. Ich möchte Mahnungen drucken. Abhängig von der Mahnstufe soll oberhalb des MasterDataBand ein Text stehen und nach dem MasterDataBand eine Auflistung. Das ganze habe ich Organisiert in Child Bänder. Ich hatte es auch versucht mit Header und Footer Bänder, bekam jedoch die Fehlermeldung Master und Child sind nicht verbunden. Das Problem ist nun, die Child Bänder unterhalb des MasterDataBand werden richtig aktiviert jedoch nicht die oberhalb des MasterDataBand. Warum das so ist, ist eigentlich klar. Die Child Bänder müssen immer einem Übergeordneten Band als Child angegeben werden. In meinem Fall ist das das PageHeaderBand. Das PageHeaderBand ist natürlich längst gedruckt bevor es das MastaDataBand zu drucken beginnt. Natürlich habe ich versucht das aktivieren der Bänder nicht beim MasterDataBand.OnBeforePrint sondern bei PageHeaderBand.OnAfterPrint zu setzten. Das geht leider auch nicht die Bänder werden einfach nicht aktiviert in der richtigen Reihenfolge. Hat jemand eine Idee was ich tun kann? Gruß Kostas |
Re: Fastreport 4 Welchen Bandtyp zum wahlweise einblenden?
Hast du schon mal davon gehört das man die Inhalte der Bänder auch zu Laufzeit ändern kann ?
Und ein Band kannst du ja in OnBeforePrint auf Visible:=False setzten dann ist es nicht mehr sichtbar. |
Re: Fastreport 4 Welchen Bandtyp zum wahlweise einblenden?
Zitat:
den Inhalt würde ich nicht so gerne zur Laufzeit ändern. Der Hintergrund ist, der Kunde soll die Möglichkeit haben die Texte nach Bedarf anpassen zu können. Die Sache mit der Sichtbarkeit ist genau mein Problem. Ich finde nicht den richtigen Zeitpunkt die Bänder zu aktivieren. Möglicherweise verwende ich auch die den falschen BandTyp? Denn wenn der MasterDataBand gedruckt wird, ist der PageHeaderBand schon längst gedruckt und ich kann das ChildBand nicht mehr dem PageHeader als Child angeben. Ich meine ich kann es schon, aber es wirkt sich natürlich erst beim nächsten Record aus. Gruß Kostas |
Re: Fastreport 4 Welchen Bandtyp zum wahlweise einblenden?
Aktiviere doch das Child abhängig von der Bedingung vorher. Dazu musst Du nur ein TFrxDataSet verwenden, welches die Bedingung des Master "vorwegnimmt". Beispiel in PascalScript:
Delphi-Quellcode:
var
MahnStufe : integer; begin Ch1.Visible := False; Ch2.Visible := False; Ch3.Visible := False; MahnStufe := TfrxDBDataset(Report.GetDataset('rechnungen')).FieldByName('MahnStufe').AsInteger; if MahnStufe = 1 then Ch1.Visible := True else if MahnStufe = 2 then Ch2.Visible := True else if MahnStufe = 3 then Ch3.Visible := True; |
Re: Fastreport 4 Welchen Bandtyp zum wahlweise einblenden?
Liste der Anhänge anzeigen (Anzahl: 4)
Zitat:
TfrxIBODataset nicht. Ich arbeite mit TfrxIBODataset wegen den IBO Komponenten. Unter Delphi gibt es natürlich die Komponenten TfrxIBODataset. Möglicherweise habe ich bei der Installation etwas falsch gemacht. Ich kann mich auch schwach erinnern das bei früheren Versionen im Designer die Dataset Komponenten verfügbar wahren. In der aktuellen Installation fr4_6_28_d5p eben nicht. Ich werde versuchen ob ich das nachinstallieren kann. Bitte noch zwei Punkte: -welches Event soll Dein Script ausführen? PageHeader.OnBeforePrint oder MasterData.OnBeforePrint oder an einer anderen Stelle? -Du verwendest z.B.: Ch2.Visible := True was ist das bitte für ein Bandtyp? Bei mir reagiert ein TfrxChild erst dann auf visible wenn ich vorher einem übergeordneten Band das Child eingetragen habe z.B.: PageHeader.Child := Ch2; Solange die Childs nicht einem Band untergeordnet werden, werden sie nicht angezeigt. Gruß Kostas [EDIT] hab die aktuelle Version installiert. Wie war das bitte nochmal, welche Unit müsste ich einbinden um TfrxDBDataset in Designer verwenden zu können? [EDIT2] Jetzt bin ich ein Stück weiter gekommen :-) Auf der IBO Website habe ich eine Komponenten gefunden für FastReport. jetzt habe ich auch ein TfrxIBODataset. Jetzt bleibt nur noch die Frage, an welcher Stelle müssen die Childs zugeordnet werden.
Delphi-Quellcode:
procedure PageHeader1OnBeforePrint(Sender: TfrxComponent);
begin MahnStufe := TfrxIBODataset(Report.GetDataset('Mahnvorschlagsliste')).FieldByName('MAHNSTUFE').AsInteger; case MahnStufe of 0:begin H1.child := Ch0; end; 1:begin H1.child := Ch1; end; 2:begin H1.child := Ch2; end; 3:begin H1.child := Ch3; end; end;{case} end; Nachdem das auch nicht funktioniert hat, habe ich den Report komplett gelöscht und neu Schritt für Schritt aufbauen wollen. Dabei ist das eigentliche Problem ist in Erscheinung getreten. Das HeaderBand greift auf die Daten des letzen Records zu, obwohl ich definitiv vor den ReportStart den Datensatzzeiger an den Anfang stelle. Wenn ich den Report starte wobei das Property StartNewPage=false bei MasterDataBand steht, sehe ich die richtige Reihenfolge der Daten im MasterDataBand. Das HeaderBand hat jedoch den ArtikelNr vom letzten Datensatz! Ich würde erwarten das der header die ArtikelNr vom ersten Datensatz anzeigt. Schalte ich nun das Property StartNewPage=true bei MasterDataBand ist die erste Seite wieder falsch mit dem letzen Datensatz, und die anderen drei Seiten stimmen. Hat da jemand eine Idee? Gruß Kostas |
Re: Fastreport 4 Welchen Bandtyp zum wahlweise einblenden?
Vielleicht solltest Du dann die Struktur Deiner Daten anders gestalten. In dem ersten Report sehe ich nur ein Dataset. Verwende doch zwei (oder mehr) Abfragen, die mit Master-Detail verbunden sind. Dann könntest Du das mit Gruppen erledigen. Und um die Mahntexte flexibel zu gestalten, würde ich sie in einer Konfigurationstabelle speichern. Dann brauchst Du sie nicht durch 3 verschiedene hardcodierte Reportbänder darzustellen.
|
Re: Fastreport 4 Welchen Bandtyp zum wahlweise einblenden?
Ich habe ja eigentlich festgestellt dass ich ein völlig anderes Problem habe als ursprünglich.
(Vielleicht sollte ich deshalb einen neuen Thread eröffnen) Das Problem ist ja jetzt das ich ein DataSet mit vier Records habe und das MasterDataBand zeigt die Daten in der richten Reihenfolge an. Der Header NUR beim ersten Datensatz ist falsch. Er zeigt die Daten vom letzten Record. In den Screen Shots von meinem letzen posting ist das zu sehen. Nochmals zusammengefasst: vier Datensätze, jeder Datensatz soll eine neue Seite beginnen. Beim drucken ist auf der Seite1 der Header von Seite4. Seite2 bis Seite4 werden richtig gedruckt. Die Frage ist also, warum holt sich der Report den Header vom letzten Record jedoch in MasterData hat er den ersten Record? Wenn ich das gelöst habe, wird mein Report für die Mahnungen vermutlich einwandfrei funktionieren. Damit der Report nach jedem Record eine neue Seite beginnt, habe ich das Property masterData.StartNewPage=true gesetzt. Gruß Kostas [EDIT] hab soeben die Lösung gefunden. :-) Ich darf die Mahntexte oberhalb vom DataBand NICHT auf das PageHeaderBand ablegen sonder muss ein GroupHeader anlegen und dort die Mahntexte ablegen. Der GroupHeader ist groupiert nach RechnungID und GroupHeader.StartNewPage=true. MasterData.StartNewPage habe ich auf false gesetzt. Jetzt funkt es einwandfrei. Zumindest der testreport. Ich werde sogleich den kompletten Report umsetzen. Gruß Kostas |
Re: Fastreport 4 Welchen Bandtyp zum wahlweise einblenden?
Zitat:
|
Re: Fastreport 4 Welchen Bandtyp zum wahlweise einblenden?
Zitat:
auch noch wo anders eingebaut habe. Bei den Rechnungen habe ich ja das gleiche Problem. Nur da ist es nicht aufgefallen weil die Datenmenge selectiert wird auf die zu druckende Rechnung. Somit habe ich nur ein Record in der MasterData. Würde ich jedoch eine Paket an Rechnungen drucken wollen, hätte ich das gleiche Problem. Das heißt also ein PageHeader ist nicht geeignet dafür Datengetriebene Felder zu benutzen wenn das PageHeaderBand mehr wie ein Datensatz beinhaltet. Gruß Kostas |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:00 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