AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Fastreport 4 Welchen Bandtyp zum wahlweise einblenden?
Thema durchsuchen
Ansicht
Themen-Optionen

Fastreport 4 Welchen Bandtyp zum wahlweise einblenden?

Ein Thema von Kostas · begonnen am 4. Jun 2008 · letzter Beitrag vom 5. Jun 2008
Antwort Antwort
Kostas

Registriert seit: 14. Mai 2003
Ort: Gerstrhofen
1.060 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

Fastreport 4 Welchen Bandtyp zum wahlweise einblenden?

  Alt 4. Jun 2008, 10:29
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
Miniaturansicht angehängter Grafiken
mahnungen_480.jpg  
Angehängte Dateien
Dateityp: zip rfmahnungsave_157.zip (3,2 KB, 10x aufgerufen)
  Mit Zitat antworten Zitat
franktron

Registriert seit: 11. Nov 2003
Ort: Oldenburg
1.446 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#2

Re: Fastreport 4 Welchen Bandtyp zum wahlweise einblenden?

  Alt 4. Jun 2008, 10:35
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.
Frank
Tux sein Lieblingsquellcode
While anzfische<TuxSatt do begin
Fisch:=TFisch.Create; Tux.EssenFisch(Fisch); Fisch.Free;inc(anzfische); end;
  Mit Zitat antworten Zitat
Kostas

Registriert seit: 14. Mai 2003
Ort: Gerstrhofen
1.060 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

Re: Fastreport 4 Welchen Bandtyp zum wahlweise einblenden?

  Alt 4. Jun 2008, 11:03
Zitat von franktron:
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.
Hallo Frank,

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
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.487 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Fastreport 4 Welchen Bandtyp zum wahlweise einblenden?

  Alt 4. Jun 2008, 14:58
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;
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
Kostas

Registriert seit: 14. Mai 2003
Ort: Gerstrhofen
1.060 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

Re: Fastreport 4 Welchen Bandtyp zum wahlweise einblenden?

  Alt 4. Jun 2008, 16:23
Zitat von Union:
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;
oh, das hört sich sehr vielversprechend an. Leider kennt Fastreport TFrxDataSet und auch
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
Miniaturansicht angehängter Grafiken
seite2_184.jpg   seite1_108.jpg   ohnestartnewpage_197.jpg   mahnungen_713.jpg  
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.487 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Fastreport 4 Welchen Bandtyp zum wahlweise einblenden?

  Alt 5. Jun 2008, 07:33
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.
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
Kostas

Registriert seit: 14. Mai 2003
Ort: Gerstrhofen
1.060 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

Re: Fastreport 4 Welchen Bandtyp zum wahlweise einblenden?

  Alt 5. Jun 2008, 08:32
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
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.487 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: Fastreport 4 Welchen Bandtyp zum wahlweise einblenden?

  Alt 5. Jun 2008, 09:41
Zitat von Union:
Dann könntest Du das mit Gruppen erledigen
Schön dass Du es hinbekommen hast
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
Kostas

Registriert seit: 14. Mai 2003
Ort: Gerstrhofen
1.060 Beiträge
 
Delphi 10 Seattle Enterprise
 
#9

Re: Fastreport 4 Welchen Bandtyp zum wahlweise einblenden?

  Alt 5. Jun 2008, 09:56
Zitat von Union:
Zitat von Union:
Dann könntest Du das mit Gruppen erledigen
Schön dass Du es hinbekommen hast
Ja das war schon ein Kampf. Jetzt muss ich alle meine Reports überprüfen ob ich diesen "Fehler"
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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:29 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