![]() |
Fastreport: Optimierung
Hallöle...:wink:
Durch eine Anforderung des Kunden habe ich statt 1x Drucken jetzt 2x Drucken pro Rechnung. 1x Original + 1x mit "Kopie" im Text. :roll: 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. :cry: Aktuell Test: 800 Rechnungen(Ordner) mit 2.9GB Anhängen -> ca. 1 Stunde
Delphi-Quellcode:
Frage:
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; 1. Wo kann ich noch was rausholen? 2. Alternative? |
AW: Fastreport: Optimierung
Miss doch erst mal wo die Zeit hauptsächlich hingeht - Der PDF-Export, das
Delphi-Quellcode:
, ...?
PrepareReport()
|
AW: Fastreport: Optimierung
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. |
AW: Fastreport: Optimierung
Wäre es denkbar mehrere Threads mit eigenem Datenmodul zu starten, falls sich die anderen Kerne langweilen?
|
AW: Fastreport: Optimierung
Moin...8-)
...Threads. Was ist das? :stupid: 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...:wink: |
AW: Fastreport: Optimierung
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. |
AW: Fastreport: Optimierung
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. |
AW: Fastreport: Optimierung
Zitat:
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. |
AW: Fastreport: Optimierung
Ich würde nochmal auf den eingangs erwähnten Punkt hinweisen:
Zitat:
|
AW: Fastreport: Optimierung
Zitat:
Nachtrag (Werte in Milisekunden): Zitat:
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:
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...:wink: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:24 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