AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Fastreport 4 Beispiel für eine Rechnung das Prinzip n. verst
Thema durchsuchen
Ansicht
Themen-Optionen

Fastreport 4 Beispiel für eine Rechnung das Prinzip n. verst

Ein Thema von Kostas · begonnen am 17. Jun 2008 · letzter Beitrag vom 19. Jun 2008
Antwort Antwort
Seite 2 von 3     12 3      
Kostas

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

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

  Alt 18. Jun 2008, 11:27
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
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

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

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

  Alt 18. Jun 2008, 11:33
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.
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.058 Beiträge
 
Delphi 10 Seattle Enterprise
 
#13

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

  Alt 18. Jun 2008, 13:13
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
  Mit Zitat antworten Zitat
Kostas

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

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

  Alt 18. Jun 2008, 16:44
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
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

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

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

  Alt 18. Jun 2008, 17:19
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
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.058 Beiträge
 
Delphi 10 Seattle Enterprise
 
#16

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

  Alt 18. Jun 2008, 17:31
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.”
Miniaturansicht angehängter Grafiken
falsch_125.jpg   richtig_189.jpg  
Angehängte Dateien
Dateityp: zip testprepare_464.zip (4,4 KB, 27x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

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

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

  Alt 18. Jun 2008, 17:50
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ß.
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.058 Beiträge
 
Delphi 10 Seattle Enterprise
 
#18

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

  Alt 19. Jun 2008, 08:45
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
Miniaturansicht angehängter Grafiken
opendatasource_212.jpg   fehlermeldung_167.jpg  
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

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

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

  Alt 19. Jun 2008, 09:05
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).
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.058 Beiträge
 
Delphi 10 Seattle Enterprise
 
#20

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

  Alt 19. Jun 2008, 10:11
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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 17:20 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