Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Werkzeuge (https://www.delphipraxis.net/63-sonstige-werkzeuge/)
-   -   Fastreport und Seitenauswahl (https://www.delphipraxis.net/201335-fastreport-und-seitenauswahl.html)

SearchBot 13. Jul 2019 02:29

Fastreport und Seitenauswahl
 
Hallo,

ich habe vor, Etiketten zu drucken (Endlospapierrolle, daher unterschiedliche Formate innerhalb eines Reports möglich). Die Etiketten sind dann jeweils eine Seite, mal horizontal oder vertikal ausgerichtet. Der Drucker kann das.
Dazu habe ich einen Report mit 3 Seiten/Layouts definiert.

Jetzt möchte ich nur je Datensatz die Etiketten 1+2 drucken, weil ich das Etikett 3 zB nicht benötige.
Ich verwende keine Bänder, sondern weise die Inhalte über OnGetValue direkt zu (per Value oder mit c:=frxReport.FindObject('sn'); if c<>nil then TfrxMemoView(c).Text:='bla';).

Problem: es generiert mir die Vorschau eben immer mit allen 3 Seiten.
Durch die Forensuche habe ich die Möglichkeit gefunden, mit PrintOptions.PageNumbers eine Auswahl für den Ausdruck zu definieren zB '1,2,4,5'. Aber das reduziert ja die Vorschau nicht.

Dann habe ich die Methode probiert, die immer wieder im Forum empfohlen wird, in der jede Seite in einer separaten Datei ist:
Code:
       
 frxReport.LoadFromFile('eti1.fr3');
 frxReport.PrepareReport(true);
 frxMainReport.PreviewPages.AddFrom(frxReport); //oder AddPage(...) oder AddSourcePage(...) - was ist der Unterschied??
 frxMainReport.ShowPreparedReport;
Hierbei bekomme ich aber ständig Zugriffsverletzungen - offenbar, weil ich durch die OnGetValue auf Elemente zugreife, die in dem jeweils geladenen Report nicht drin sind. Also habe ich die mit if c<>nil then behandelt, aber die Exceptions treten auch innerhalb der frxXML auf (frxXML.TfrxXLMItem.GetItems(-1)).

Bei meinen ungezählten Versuchen hatte ich es auch schon ohne Exceptions, dann waren die Seiten aber leer.

Was tun?

SearchBot 13. Jul 2019 16:34

AW: Fastreport und Seitenauswahl
 
Naja, ich hab jetzt eine Lösung gefunden:

Ich nehme doch mein Multipage-Report.
In den Report.EngineOptions setze ich DoublePass auf true.
Dann bereite ich in vor.
Danach habe ich die Anzahl der vorberiteten Seiten und lösche diese raus, die ich nicht brauche, bevor ich die Vorschau anzeige...
Delphi-Quellcode:
 
  frxReport.PrintOptions.ShowDialog:=false;
  frxEtiData.RangeEndCount:=Grid1.RowCount-2;
  frxReport.PrepareReport;

  i:=frxReport.PreviewPages.Count;
  repeat
   dec(i);
   if frxReport.PreviewPages.Page[i].Name='pAdresse' then
     if not chk_doAdress.Checked then frxReport.PreviewPages.DeletePage(i) else
   else
   if frxReport.PreviewPages.Page[i].Name='pLabel' then
     if not chk_doLabel.Checked then frxReport.PreviewPages.DeletePage(i) else
   else
   if frxReport.PreviewPages.Page[i].Name='pSN' then
     if not chk_doSN.Checked then frxReport.PreviewPages.DeletePage(i);
  until i=0;
  frxReport.ShowPreparedReport;
Bestimmt geht das auch eleganter...


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:15 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