Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Fastreport 4 Beispiel für eine Rechnung das Prinzip n. verst (https://www.delphipraxis.net/115769-fastreport-4-beispiel-fuer-eine-rechnung-das-prinzip-n-verst.html)

Kostas 18. Jun 2008 11:27

Re: Fastreport 4 Beispiel für eine Rechnung das Prinzip n. v
 
Hallo Union,

um die Verwirrung noch etwas zu verschärfen ;-) habe ich eine Select erzeugt der in einem Record
die Adresse, ReNr, und Datum der Rechnung enthält, und zusätzlich NUR ein Artikel aus der Rechnung. Also eine Query, ein Artikel pro Record daraus eine Rechnung erzeugen.

Der Report sieht so aus:

-------------PageHeaderBand--------- <<< ist das Richtig zweifel zweifel!!!
Adresse, RechnungsNr, Datum.

-------------MasterDataBand---------
ArtikelNr, Bezeichnung, Preis

-------------ChildBand--------------
Rechnungssumme berechnen.

-------------PageFooterBand---------
Bankverbindungen bla bla bla

Das MasterDataBand verbunden mit der einzigen TfrxIBODataset
und MasterDataBand.StartNewPage:=true;
sonst nix.

Und schon wieder wird NUR bei der ersten Rechnung die Daten der letzen Rechnung für den PageHeader
verwendet. MasterData und ChildBand sind richtig. Das Problem ist immer nur bei PageHeaderBand!

Sobald die erste Rechnung gedruckt ist, werden alle folgenden Rechnungen richtig gedruckt.
Würdest Du mir bitte nochmal bestätigen das in diesem Testreport die Bänder richtig sind.
Ich vermute ich darf das PageHeaderBand nicht verwenden.

Gruß Kostas

Union 18. Jun 2008 11:33

Re: Fastreport 4 Beispiel für eine Rechnung das Prinzip n. v
 
Mal ne ganz dumme Frage: Nach dem Open der Query machst Du da ein First? Die Struktur laut Deiner Aufstellung ist ok - ich verwende auch ein PageHeaderband. Ich vermute wirklich einen Knall in den entsprechenden IB-Komponenten in Verbindung mit FR. Ansonsten könntest Du Dich auch mal in news://fasr-reports.public.fastreport.4 umschauen.

Kostas 18. Jun 2008 13:13

Re: Fastreport 4 Beispiel für eine Rechnung das Prinzip n. v
 
Zitat:

Zitat von Union
Mal ne ganz dumme Frage: Nach dem Open der Query machst Du da ein First? Die Struktur laut Deiner Aufstellung ist ok - ich verwende auch ein PageHeaderband. Ich vermute wirklich einen Knall in den entsprechenden IB-Komponenten in Verbindung mit FR. Ansonsten könntest Du Dich auch mal in news://fasr-reports.public.fastreport.4 umschauen.

Ja, das vermute ich auch mittlerweile das die IBO-Komponenten fehlerhaft sind, wenn es so bei Dir funktioniert.
Um das herauszufinden, werde ich den gleichen Report mit ADO versuchen.

Ein herzliches Dankeschün und eine schöne Zeit.
Gruß Kostas

Kostas 18. Jun 2008 16:44

Re: Fastreport 4 Beispiel für eine Rechnung das Prinzip n. v
 
Ich weis jetzt woran es liegt.
Es liegt anPrepareReport.

Delphi-Quellcode:
   
frxReport1.PrepareReport;
frxReport1.ShowReport;
Wenn PrepareReport vor ShowReport ausgeführt wird, dann verhält sich der Reporter so ich beschrieben habe.
PrepareReport geht also alle Datensätze durch und der Datensatzzeiger ist auf dem letzten Record.

Würde Du das bitte mal bei Dir testen. Dankeschön.

Gruß Kostas

Union 18. Jun 2008 17:19

Re: Fastreport 4 Beispiel für eine Rechnung das Prinzip n. v
 
Das hat damit nichts zu tun, denn ShowPreparedReport zeigt nur ein fertig erzeugtes WMF an. In meiner auf den BelegIDString umgestellten Funktion von oben wird ja genau dies gemacht und da kommen keine Kopfdaten durcheinander:
Delphi-Quellcode:
frxReport1.PrepareReport(False);
qryBKopf.Close;
frxReport1.ShowPreparedReport;
Und mit der FR Version kann es auch nichts zu tun haben. Das produktive Druckmodul mit dem ich hier teste wurde am 1.7.2005 mit FR 3.15 erstellt und läuft mittlerweile unter 4.5 - bisher hatte ich das noch nicht. Dann würden schon mal unsere Rechnungen nicht bei der richtigen Adresse ankommen ;)

Kostas 18. Jun 2008 17:31

Re: Fastreport 4 Beispiel für eine Rechnung das Prinzip n. v
 
Liste der Anhänge anzeigen (Anzahl: 3)
Hallo Union,

ich fürchte doch. Ich habe ein mini TestProgramm erstellt in Anhang.
Wenn Du es testen möchtest, musst Du nur den Path auf die Demo DB der Main-Demo
von Fastreport umstellen.

Beim ersten Button mache ich das:

Delphi-Quellcode:
if not ADOTable1.Active then ADOTable1.open;
ADOTable1.first;
frxReport1.ShowReport;
Der Report zeigt das richtige Ergebnis.
Danach das:

Delphi-Quellcode:
  if not ADOTable1.Active then ADOTable1.open;
  ADOTable1.first;
  frxReport1.PrepareReport;
  frxReport1.ShowReport;
Der Report ist falsch.


Gerade habe ich in der Docu gelesen das PrepareReport den Report komplett erzeugt. Das ist dan auch die Erklerung.

procedure ShowReport(ClearLastReport: Boolean = True);
Starts a report and displays the result in the preview window. If the “ClearLastReport”
parameter is equal to “False,” then the report will be added to the previously constructed
one, otherwise the previously constructed report will be cleared (by default).

function PrepareReport(ClearLastReport: Boolean = True): Boolean;
Starts a report, without opening the preview window. The parameter assignment is the
same as in the “ShowReport” method. If a report was constructed successfully, it returns
“True.”

Union 18. Jun 2008 17:50

Re: Fastreport 4 Beispiel für eine Rechnung das Prinzip n. v
 
Original:
Code:
object frxDBDataset1: TfrxDBDataset
  UserName = 'frxDBDataset1'
  CloseDataSource = False
  DataSet = ADOTable1
  Left = 72
  Top = 68
end
Und Fälschung:
Code:
object frxDBDataset1: TfrxDBDataset
  UserName = 'frxDBDataset1'
  CloseDataSource = True
  OpenDataSource = False
  DataSet = ADOTable1
  Left = 72
  Top = 68
end
So geht's dann, OpenDataSource = False -> DataSource NICHT selber öffnen (das hast Du ja schon gemacht). So tritt der reproduzierbare Fehler beim zeweiten Button nicht mehr auf. Interessant war auch, dass es beim ersten Mal "Preview" im Designer korrekt funktioniert, danach nicht mehr. Dadurch bin ich drauf gekommen das es etwas mit dem state des Datasets zu tun haben muß.

Kostas 19. Jun 2008 08:45

Re: Fastreport 4 Beispiel für eine Rechnung das Prinzip n. v
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hi Union,

sehr interessant, bei mir funkt es immer noch nicht siehe ScreenShot.
Wenn ich CloseDataSource aktiviere bekomme ich Ergen mit den ADO-Komponenten,
fehlermeldung und der Report ist leere, Stack-Überlauf u.s.w.
Könnte auch an den ADO-Komponenten liegen von Delphi5.

Eigentlich benötige ich ja frxReport1.PrepareReport nicht.
Ich würde es jetzt einfach weglassen. Als ich es einbaute, hatte ich die Doku nicht
gelesen und meinte das ist wie bei SQL einfach den Report vorbereiten für das Drucken.
Das ist nach Doku ja nicht so.

Oder siehst Du das anders?

Gruß Kostas

Union 19. Jun 2008 09:05

Re: Fastreport 4 Beispiel für eine Rechnung das Prinzip n. v
 
Zitat:

bei mir funkt es immer noch nicht siehe ScreenShot.
Das ist sehr interessant, ich habe wirklich bloss die beiden boolean in der frxDataSource in Deinem Testprojekt (und natürlcih den ConnectionString) geändert. Vorher waren die ersten beiden Zeilen auf der ersten Seite "durcheinander". Danach steht in beiden das selbe.

Mit dem PrepareReport hast Du natürlich Recht. Der ist allerdings sehr schön wenn man verschiedene Reports in einem Job zusammenfassen möchte oder muß. So kann man damit z.B. eine Mahnung erzeugen und die Rechnungen hinten dran hängen und das Ganze dann z.b. in ein PDF exportieren.

Aber schau Dir mal Folgendes an, da siehst Du dass FR auch intern immer mit PrepareReport arbeitet:
Delphi-Quellcode:
procedure TfrxReport.ShowReport(ClearLastReport: Boolean = True);
begin
  if ClearLastReport then
    PreviewPages.Clear;

  if FOldStyleProgress then
  begin

    if PrepareReport(False) then
      ShowPreparedReport;
  end
  else
  begin
    FTimer.Enabled := True;

    ShowPreparedReport;
  end;
end;

procedure TfrxReport.OnTimer(Sender: TObject);
begin
  FTimer.Enabled := False;
  PrepareReport(False);
end;
Es könnte tatsächlich an D5 ADO liegen. Verushcs doch mal mit BetterAdo (falls es das für D5 gibt).

Kostas 19. Jun 2008 10:11

Re: Fastreport 4 Beispiel für eine Rechnung das Prinzip n. v
 
Hi Union,

ich kannte BetterADO nicht, habs gefunden un nachinstalliert.
Die Felhermeldung und das Verhalten ist exakt gleich.

Wenn ich nach Prepare first mache, funkt der Report einwandfrei.
Im Grid ist mir aufgefallen das die Datenmenge wirklich zwei mal durchlaufen wird.


Delphi-Quellcode:
BetterADODataSet1.first;
frxReport1.PrepareReport;
BetterADODataSet1.first;
frxReport1.ShowReport;

Ich habe gerade Schrittweise ab ShowReport die Ausführung verfolgt und
bei mir ist FOldStyleProgress=false. Interessant ist, das der interne Timer1
PrepareReport nach 50ms ausführt.

Ich werde jetzt mal das PrepareReport herausnehmen. Ich habe auch den Support von FR
kontakiert mal sehen was Dir mir antworten werden.

Gruß Kostas


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:18 Uhr.
Seite 2 von 3     12 3      

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