AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Fastreport: Optimierung

Ein Thema von haentschman · begonnen am 30. Nov 2021 · letzter Beitrag vom 2. Dez 2021
Antwort Antwort
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#1

Fastreport: Optimierung

  Alt 30. Nov 2021, 15:01
Hallöle...

Durch eine Anforderung des Kunden habe ich statt 1x Drucken jetzt 2x Drucken pro Rechnung. 1x Original + 1x mit "Kopie" im Text.

Das Ganze kostet mich doppelte Zeit, weil der Report nun 2x Prepared + Export nach PDF + Verkleinern ist. Bei einer RE ist das noch verschmerzbar. Aber der Stapeldruck mit ~1000 Rechnungen braucht fast eine Stunde.

Aktuell Test: 800 Rechnungen(Ordner) mit 2.9GB Anhängen -> ca. 1 Stunde
Delphi-Quellcode:
function ExportPDF(FilePath, FileName: string): Boolean;
begin
  Result := dmReport.frxReport1.Export(dmReport.frxPDFExport1);

  if Result then
  begin
    try
      if not FGhostscript.PDFShrink(FilePath + FileName) then // Fehler über Event
      begin
        Result := False;
      end;
    except
      Result := False;
    end;
  end;
end;
...
if AllowPrint and dmReport.frxReport.PrepareReport(True) then
begin
  FillReportPDF; // Vorgaben PDF
  ExportPDF(Print.PDF.FilePath, Print.PDF.FileName); // Archiv

  Print.IsReceiptCopy := True; // + "Kopie" -> das 2. Mal :-(
  dmReport.FillReportVariable('IsReceiptCopy', Print.IsReceiptCopy); // im Report wird das Feld eingeblendet/ausgeblendet
  if dmReport.frxReport.PrepareReport(True) then
  begin
    FillReportTransus; // Vorgaben Dienstleister
    if ExportPDF(Print.Transus.FilePath, Print.Transus.FileName) then // Transus
    begin
      if Transus.ExportXML(Print.Receipt, Print.Transus.FilePath) then // schreiben XML
      begin
        if Print.Transus.WithAttachments then
        begin
          if CopyAttachments(Print.Transus.FilePath) then // Kopie der Anhänge PDF 2-5 Anhänge 120KB je PDF Seite, Schnitt = 3 Seiten je Anhang
          begin
            WriteMiscToDB(Print.ID); // DB Einträge setzen
            WriteSendToDB(dmReport.frxReport1.ReportOptions.Name, sdtFolder); // DB Einträge setzen
          end;
        end;
      end;

      if Assigned(FOnPrintConfirmation) then
      begin
        FOnPrintConfirmation(Self, ReportType, Print, FFileList); // nur wenn benötigt, in diesem Falle nicht eingehängt
      end;
    end;
  end;
end;
Frage:
1. Wo kann ich noch was rausholen?
2. Alternative?

Geändert von haentschman (30. Nov 2021 um 15:12 Uhr)
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.157 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Fastreport: Optimierung

  Alt 30. Nov 2021, 19:01
Miss doch erst mal wo die Zeit hauptsächlich hingeht - Der PDF-Export, das PrepareReport() , ...?
  Mit Zitat antworten Zitat
Amanda

Registriert seit: 31. Mär 2019
20 Beiträge
 
#3

AW: Fastreport: Optimierung

  Alt 30. Nov 2021, 19:05
Ich drucke mit Fastreport in einen Thread. Falls eine Exception
im Thread auftritt wird dieser über einen TimeOut beendet. Der Thread
läuft in einen Windows Dienst.
  Mit Zitat antworten Zitat
BerndS
Online

Registriert seit: 8. Mär 2006
Ort: Jüterbog
491 Beiträge
 
Delphi 12 Athens
 
#4

AW: Fastreport: Optimierung

  Alt 30. Nov 2021, 19:06
Wäre es denkbar mehrere Threads mit eigenem Datenmodul zu starten, falls sich die anderen Kerne langweilen?
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#5

AW: Fastreport: Optimierung

  Alt 1. Dez 2021, 06:52
Moin...

...Threads. Was ist das? Auf das einfachste kommt man nicht. Der einzige Knackpunkt ist, daß der 2. Duchlauf von dem 1. abhänging sein sollte...und die Kopie dann auch. Da schlaf ich mal drüber...

Danke...
  Mit Zitat antworten Zitat
Frickler

Registriert seit: 6. Mär 2007
Ort: Osnabrück
589 Beiträge
 
Delphi XE6 Enterprise
 
#6

AW: Fastreport: Optimierung

  Alt 1. Dez 2021, 12:38
Du kannst doch im Report selbst die Anzahl der Kopien einstellen. Und dann gibt es eine eingebaute Reportvariable "CopyName#", die Du im Report-Script folgendermaßen setzt:
Code:
begin
  frxGlobalVariables['CopyName0'] := '';            // copy viewed in the preview
  frxGlobalVariables['CopyName1'] := '';            // 1st printed/exported copy
  frxGlobalVariables['CopyName2'] := 'Kopie 1';     // 2nd printed copy
  frxGlobalVariables['CopyName3'] := 'Kopie 2';     // 3rd printed copy                                
  frxGlobalVariables['CopyName4'] := 'Kopie 3';     // 4th printed copy                                
  frxGlobalVariables['CopyName5'] := 'Kopie 4';     // 5th printed copy                                
  frxGlobalVariables['CopyName6'] := 'Kopie 5';     // 6th printed copy
end.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.447 Beiträge
 
Delphi 12 Athens
 
#7

AW: Fastreport: Optimierung

  Alt 1. Dez 2021, 13:10
Ich fürchte das funktioniert hier nicht, da ja sowohl das Original als auch die Kopie als PDF exportiert werden soll.

Man könnte das aber auf einem PDF-Drucker ausdrucken. Womöglich bietet Ghostscript da was, womit man das Shrink gleich mit machen kann.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#8

AW: Fastreport: Optimierung

  Alt 1. Dez 2021, 13:59
Zitat:
Womöglich bietet Ghostscript da was, womit man das Shrink gleich mit machen kann.
...das Shrink ist ne eigene function mit Ghostcript drin.

PS: Noch zur Erklärung: Die Rechnungen werden nur als PDF elektronisch verschickt. Die erste Rechnung kommt als Original in unser eigenes Archiv, der Kunde bekommt eine XML Rechnung mit der Rechnungskopie als Base64 im Anhang.

Geändert von haentschman ( 1. Dez 2021 um 14:04 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.447 Beiträge
 
Delphi 12 Athens
 
#9

AW: Fastreport: Optimierung

  Alt 1. Dez 2021, 14:17
Ich würde nochmal auf den eingangs erwähnten Punkt hinweisen:
Miss doch erst mal wo die Zeit hauptsächlich hingeht - Der PDF-Export, das PrepareReport() , ...?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#10

AW: Fastreport: Optimierung

  Alt 2. Dez 2021, 07:10
Zitat:
Ich würde nochmal auf den eingangs erwähnten Punkt hinweisen
...ist heute im Plan.


Nachtrag (Werte in Milisekunden):

Zitat:
gleiche Rechnung, gleiche Anhänge

1. Versuch

1. dmReport.frxReport1.PrepareReport(True) 765
FillReportPDF 0
1. ExportPDF 1079
dmReport.FillReportVariable('IsReceiptCopy', Print.IsReceiptCopy) 0
2. dmReport.frxReport1.PrepareReport(True) 421
FillReportTransus; 0
2. ExportPDF 1000
Copy 6063
DB1 47
DB2 1984

2.Versuch

1. dmReport.frxReport1.PrepareReport(True) 843
FillReportPDF 0
1. ExportPDF 1094
dmReport.FillReportVariable('IsReceiptCopy', Print.IsReceiptCopy) 0
2. dmReport.frxReport1.PrepareReport(True) 422
FillReportTransus; 0
2. ExportPDF 953
Copy 6140
DB1 47
DB2 2063
Wow... Das das Kopieren die meiste Zeit braucht, hatte ich nicht erwartet. (3 PDF Anhänge: hier lokal nach lokal)

DB2: 1 Update auf ein Feld! Alle where Felder im Index...Warum braucht er solange. Verstehe ich nicht.
Code:
update Documents set SendTypeUSB = :GES where ReceiptNumber = :PAT
Zitat:
[IDX_ReceiptNumber] vorhanden

Entscheidung:

Das Auflösen des Datamodules (dmReport) mache ich später. Ich werde die Kopien in einen TTask auslagern. Die DB2 schaue ich mir an...

Danke an Alle...

Geändert von haentschman ( 2. Dez 2021 um 09:24 Uhr)
  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 08:25 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