FastReport Tipps und Tricks: Unterschied zwischen den Versionen

Aus GEVITAS
Wechseln zu: Navigation, Suche
(Fehler)
(Formatierung)
 
(48 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
== Allgemeines ==
+
Hier gibt es Tipps und Tricks für das Erstellen von Reports mit '''FastReport©''', die im Alltag hilfreich sein können. Sie sind aus der Praxis entstanden. Im Laufe der Erfahrung mit '''FastReport©''' haben sich einige Themen angesammelt, so dass die Tipps und Tricks auf mehrere Seiten aufgeteilt wurden:
 
 
Dieser Artikel beschreibt kleine Tipps und Tricks für das Erstellen von Reports mit '''FastReport''', die im Alltag hilfreich sein können.
 
 
 
  
  
 
== Eingebaute Funktionen und Variablen ==
 
== Eingebaute Funktionen und Variablen ==
  
=== Anzahl der Datensätze ===
+
* [[FastReport Tipps und Tricks: Eingebaute Funktionen und Variablen#Anzahl der Datensätze|Anzahl der Datensätze]]
 
+
* [[FastReport Tipps und Tricks: Eingebaute Funktionen und Variablen#Anzahl Datensätze vergleichen mit aktuellem Datensatz Anzahl|Datensätze vergleichen mit aktuellem Datensatz]]
Manchmal hat man das Problem, dass bestimmte Bereiche unterdrückt werden sollen, wenn es nur einen einzigen Datensatz gibt. Beispielsweise hat man ein Mahnungsformular mit der Tabelle der fälligen Rechnungen und darunter die Gesamtsumme. Die Gesamtsumme soll aber unterdrückt werden, wenn es nur '''eine''' angemahnte Rechnung in der Tabelle gibt. Dann kann im Objektinspektor des Bereich auf das Ereignis
+
* [[FastReport Tipps und Tricks: Eingebaute Funktionen und Variablen#Interne Variablen|Interne Variablen]]
 
+
* [[FastReport Tipps und Tricks: Eingebaute Funktionen und Variablen#Kopie des Ausdrucks|Kopie des Ausdrucks]]
OnBeforePrint
+
* [[FastReport Tipps und Tricks: Eingebaute Funktionen und Variablen#Report-Name|Report-Name]]
 
+
* [[FastReport_Tipps_und_Tricks:_Eingebaute_Funktionen_und_Variablen#Positionstext_ohne_RFT-Formatierung|Positionstext ohne RFT-Formatierung]]
doppelklicken und diesen Code schreiben:
+
* [[FastReport_Tipps_und_Tricks:_Eingebaute_Funktionen_und_Variablen#Text-Teile_l.C3.B6schen_am_Beispiel_Pfadname_entfernen|Text-Teile löschen am Beispiel "Pfadname entfernen"]]
 
 
procedure Child2OnBeforePrint(Sender: TfrxComponent);
 
begin
 
    // Band mit der Gesamtsumme unterdrücken, wenn es nur EINE Rechnung gibt:
 
    if <Line#> = 1 then
 
        Child2.Visible := False
 
    else
 
        Child2.Visible := True;             
 
end;
 
 
 
Die System-Variable <Line#> beihaltet die Anzahl der Zeilen (Datensätze) des Detail-Bandes.
 
 
 
 
 
=== Anzahl Datensätze vergleichen mit aktuellem Datensatz ===
 
 
 
Manchmal will man nur den '''letzten''' Datensatz ausdrucken, beispielsweise in einem Rechnungsformular nur den '''letzten''' Lieferschein.
 
 
 
'''[[FastReport auf Rechnung nur letzten Lieferschein|Einzelheiten dazu...]]'''
 
 
 
 
 
 
 
=== Interne Variablen ===
 
 
 
Das Druckprogramm für Formulare '''[[GevitasFormPrint]]''' stellt einige Variablen zur Verfügung, die man im Formular-Report verwenden kann.
 
Diese müssen über '''Report &rArr; Variablen''' angelegt werden.
 
 
 
Siehe [[Interne Variablen von GevitasFormPrint]].
 
 
 
 
 
 
 
 
 
=== Kopie des Ausdrucks ===
 
 
 
Die Variable '''Copy''' enthält die Kopie-Nummer des Ausdrucks, wenn man die Auswahl "Kopien" verwendet.
 
 
 
* Diese Variable wird nur beim '''Drucken''' des Reports gefüllt! Bei der Vorschau oder dem Export enthält die Variable immer 0!
 
 
 
:0 = Original
 
:1 = Erste Kopie
 
:2 = Zweite Kopie
 
 
 
usw.
 
 
 
Man kann die Variable z.B. dazu benutzen, auf der Kopie ein '''Logo zu unterdrücken''' oder das Wort "Kopie" auf den Kopien auszudrucken.
 
 
 
Weitere Informationen dazu zeigt '''[[FastReport Variable Copy|dieser Artikel]]'''.
 
 
 
 
 
=== Report-Name ===
 
  
Die Variable '''ReportName''' enthält den Dateinamen des verwendeten Reports.
+
* '''<big>[[FastReport Tipps und Tricks: Eingebaute Funktionen und Variablen|Zum kompletten Beitrag]]</big>'''
 
 
 
 
=== Unterdrücken von Bändern ===
 
 
 
==== Kapitel unterdrücken wenn alle Positionen ausgegeben sind ====
 
 
 
Manchmal gibt es in der Auftragsverwaltung Aufträge, die den verschiedenen Teilmengen entsprechen, die gefertigt und ausgeliefert werden. Die Positionen, die vollständig ausgeliefert wurden, werden unterdrückt. Allerdings kommen die Kapitel-Überschriften noch, obwohl alle folgenden Positionen des Kapitels vollständig ausgegeben sind. Mit Hilfe eine berechneten Feldes kann man die Kapitel-Überschrift in diesem Fall unterdrücken.
 
 
 
Einzelheiten werden in [[FastReport: Kapitel unterdrücken wenn alle Positionen ausgegeben sind]] beschrieben.
 
  
 
== Seiten-Ansteuerung ==
 
== Seiten-Ansteuerung ==
  
=== Manueller Seitenwechsel im Code ===
+
* [[FastReport Tipps und Tricks: Seiten-Ansteuerung#Manueller Seitenwechsel im Code|Manueller Seitenwechsel im Code]]
 
+
* [[FastReport Tipps und Tricks: Seiten-Ansteuerung#Manueller Seitenwechsel "Nachher" im Code|Manueller Seitenwechsel "Nachher" im Code]]
Wenn man im Report einen manuellen Seitenwechsel anhand eines Kennzeichens erzeugen will, muss man im Ereignis '''OnBeforePrint''' des gewünschten Bandes diesen Code einfügen:
+
* [[FastReport Tipps und Tricks: Seiten-Ansteuerung#Report-Zusammenfassung am Ende der Seite|Report-Zusammenfassung am Ende der Seite]]
 
+
* [[FastReport Tipps und Tricks: Seiten-Ansteuerung#Leerzeilen verhindern bei unterdrücktem Feld|Leerzeilen verhindern bei unterdrücktem Feld]]
procedure GroupHeader1OnBeforePrint(Sender: TfrxComponent);
+
* [[FastReport Tipps und Tricks: Seiten-Ansteuerung#Aufteilung erlauben|Aufteilung erlauben]]
begin
 
  // Dieser Code wird ausgeführt, BEVOR das Positionen-Gruppenkopf-Band (die Kapitel-Überschrift) ausgegeben wird.
 
  // Wenn das Kennzeichen "Seitenwechsel Vorher" gesetzt ist:
 
  if <Positionen."Seitenwechsel_0Nein_1Vorher_2Nachher"> = 1 then
 
    '''Engine.NewPage;                                  // Neue Seite, Seitenkopf usw. drucken'''
 
end;
 
 
procedure DetailPositionenOnBeforePrint(Sender: TfrxComponent);
 
begin
 
  // Dieser Code wird ausgeführt, BEVOR das Positionen-Detail-Band ausgegeben wird.
 
 
  // Kapitel-Position ausblenden:
 
  if <Positionen."PosNr"> = 0 then
 
  begin
 
    DetailPositionen.Visible := False;
 
  end
 
  else
 
    DetailPositionen.Visible := True;
 
 
  // Wenn das Kennzeichen "Seitenwechsel Vorher" gesetzt ist:
 
  if <Positionen."PosNr"> > 0 then                                  // NICHT bei Kapitel-Position, das wird da schon gemacht!
 
    if <Positionen."Seitenwechsel_0Nein_1Vorher_2Nachher"> = 1 then
 
      '''Engine.NewPage;'''                                                // Neue Seite, Seitenkopf usw. drucken
 
end;
 
 
 
Das Feld, mit dem die Seitenwechsel-Option gespeichert wird, heißt übrigens wirklich '''Seitenwechsel_0Nein_1Vorher_2Nachher'''. Das ist zwar ungewöhnlich, zeigt aber schon im Feldnamen, welche Optionen es gibt. Ungewöhnlich aber praktisch!
 
 
 
 
 
=== Manueller Seitenwechsel "Nachher" im Code ===
 
 
 
Wenn man im Report einen manuellen Seitenwechsel anhand des Kennzeichens "Neue Seite - Nachher" erzeugen will, könnte man im Ereignis '''OnAfterPrint''' des Detail-Bandes diesen Code einfügen:
 
 
 
procedure DetailPositionenOnAfterPrint(Sender: TfrxComponent);
 
begin
 
  if <Positionen."PosNr"> > 0 then                                    // NICHT bei Kapitel-Position, das wird da schon gemacht!
 
    if <Positionen."Seitenwechsel_0Nein_1Vorher_2Nachher"> = 2 then
 
        Engine.NewPage;                                                // Neue Seite, Seitenkopf usw. drucken
 
end;
 
 
 
Theoretisch ist das eine einfache Lösung, praktisch funktioniert sie aber nicht! Aus irgendeinem Grund erzeugt FastReport den Seitenwechsel immer vorher. Deshalb muss man zu einem Trick greifen, um das Problem zu lösen:
 
 
 
* Man fügt eine Variable in den Report ein (Menü '''Report &rArr; Variablen''') und nennt sie z.B. "Seitenwechsel". Als Standardwert legt man '''0''' fest.
 
 
 
* Im Ereignis '''OnAfterPrint''' setzt man diese Variable auf 1, wenn in einer Position das Kennzeichen "Neue Seite- Nachher" gesetzt wurde:
 
 
 
procedure DetailPositionenOnAfterPrint(Sender: TfrxComponent);
 
begin
 
  // Wenn das Kennzeichen "Seitenwechsel Nachher" gesetzt ist:
 
  (* Es wird eine Variable benutzt, um den Seitenwechsel anzusteuern:
 
    - Im OnAfterPrint wird die Variable auf 1 gesetzt, wenn ein Seitenwechsel-Nachher angegeben ist.
 
    - Bei der NÄCHSTEN Position im OnBeforePrint wird ein Seitenwechsel gemacht, wenn die Variable auf 1 steht.
 
      Danach wird die Variable wieder auf 0 gestellt.
 
    - Das muss auch im Kapitel gemacht werden, falls die nächste Position ein Kapitel ist!!!!
 
  *)
 
  '''if <Positionen."PosNr"> > 0 then'''                                // NICHT bei Kapitel-Position, das wird da schon gemacht!
 
    '''if <Positionen."Seitenwechsel_0Nein_1Vorher_2Nachher"> = 2 then'''
 
      '''Set( 'Seitenwechsel', 1);'''                                    // Neue Seite, Seitenkopf usw. drucken soll bei der NÄCHSTEN Position ausgeführt werden!
 
end;
 
 
 
* Im Ereignis '''OnBeforePrint''' wird die Variable auf 1 geprüft und ein Seitenwechsel '''vor dem Druck''' der Position ausgeführt:
 
 
 
procedure DetailPositionenOnBeforePrint(Sender: TfrxComponent);
 
begin
 
  // Dieser Code wird ausgeführt, BEVOR das Positionen-Detail-Band
 
  // ausgegeben wird.
 
  '''if <Seitenwechsel> = 1 then'''
 
      '''Engine.NewPage;'''              // Neue Seite, Seitenkopf usw. drucken
 
 
  '''Set( 'Seitenwechsel', 0);'''        // Variable zurückstellen!
 
  ...weitere Zeilen Code...
 
end;
 
 
 
=== Report-Zusammenfassung am Ende der Seite ===
 
 
 
Wenn man die Report-Zusammenfassung (Report Summary) am '''Ende der Seite''' drucken will, muss man im Ereignis '''ReportSummary1OnBeforePrint''' diesen Code einfügen:
 
 
 
 
 
procedure ReportSummary1OnBeforePrint(Sender: TfrxComponent);
 
begin
 
  Engine.CurY := Engine.CurY + Engine.FreeSpace - ReportSummary1.Height - 1; 
 
end;
 
 
 
Einzelheiten zu '''FastReport-Engine''' werden unter [[FastReport Engine: Der Report-Erzeuger]] beschrieben.
 
 
 
 
 
=== Leerzeilen verhindern bei unterdrücktem Feld ===
 
  
Wenn man in einem Report mehrere Felder untereinander hat, von denen das '''unterste''' unterdrückt werden soll, hat man das Problem, dass das Feld zwar ausgeblendet wird ('''Visible := False'''), der Platz unten aber leider nicht, es bleibt also eine Leerzeile:
+
* '''<big>[[FastReport Tipps und Tricks: Seiten-Ansteuerung|Zum kompletten Beitrag]]</big>'''
  
Beispiel:
 
 
In diesem Bereich...
 
 
 
[[Datei:FastReport_TippsUndTrick_Positionen_TextPosition.png]]
 
 
...wird das TextPositionen-Feld '''<code>RichTextArtikelText</code>''' mit diesem Code ausgeblendet:
 
 
  procedure '''RichTextArtikelText'''OnBeforePrint(Sender: TfrxComponent);
 
  begin
 
    // Kennzeichen 6 = Artikel-Texte sichtbar Ja/Nein:  //JC//160111//
 
    // (oder wenn leer)
 
    RichTextArtikelText.Visible:= True;  //JC//160111//
 
    <nowiki>if ( <AuftragsKopf."KENNZ6"> = 'Nein' )</nowiki>
 
    <nowiki>or ( <Positionen."TextPosition"> = '' ) then</nowiki>
 
    <nowiki>begin</nowiki>
 
    <nowiki>  RichTextArtikelText.Visible    := False;</nowiki>
 
    end;
 
  end;
 
 
Das Ergebnis:
 
 
[[Datei:FastReport_TippsUndTrick_Positionen_TextPosition_Vorher.png]]
 
 
An den markierten Stellen gibt es Leerzeilen. FastReport kann zwar Felder nach unten schieben und auch das Band vergrößern, wenn ein darüberliegendes Feld größer wird, aber das Band wird leider nicht verkleinert, wenn das letzte Feld ausgeschaltet wird.
 
 
Um das zu verhindern, kann man folgenden Code einfügen:
 
 
  procedure '''RichTextArtikelText'''OnAfterPrint(Sender: TfrxComponent);
 
  begin
 
    // Druckposition um die Höhe des Feldes nach oben verschieben:
 
    if  RichTextArtikelText.Visible = False then
 
        Engine.CurY := Engine.CurY - RichTextArtikelText.Height;
 
  end;
 
 
Die Zeilen verschieben die Druckposition um die Höhe des Feldes nach oben, wenn das Feld unsichtbar ist.
 
 
* Einzelheiten zu '''FastReport-Engine''' werden unter [[FastReport Engine: Der Report-Erzeuger]] beschrieben.
 
 
Das Ergebnis nun:
 
 
[[Datei:FastReport_TippsUndTrick_Positionen_TextPosition_Nachher.png]]
 
 
 
=== Aufteilung erlauben ===
 
 
Wenn man z.B. im Fuss umfangreichen Text hat, können unerwünschte Seitenumbrüche entstehen. Um das zu vermeiden, können Sie die Option "Aufteilung erlaben" für das Band einschalten.
 
  
 
== Bänder ==
 
== Bänder ==
  
=== Kapitel-Positionen zusammenhalten ===
+
* [[FastReport Tipps und Tricks: Bänder#Kapitel-Positionen zusammenhalten|Kapitel-Positionen zusammenhalten]]
 
+
* [[FastReport Tipps und Tricks: Bänder#Band per Code unterdrücken|Band per Code unterdrücken]]
Es kann vorkommen, dass auf die Seite nur noch die Kapitel-Überschrift passt und keine Position mehr. Beispiel:
+
* [[FastReport Tipps und Tricks: Bänder#Kapitel unterdrücken wenn alle Positionen ausgegeben sind|Kapitel unterdrücken wenn alle Positionen ausgegeben sind]]
 
+
* [[FastReport Tipps und Tricks: Bänder#Positionen_unterdr.C3.BCcken_wenn_Kapitel_auf_.22Nicht_drucken.22_steht|Positionen unterdrücken wenn Kapitel auf "Nicht drucken" steht]]
[[Datei:FastReport_TippsUndTrick_KapitelPositionen_Zusammenhalten_Vorher.png]]
+
* [[FastReport Tipps und Tricks: Bänder#Band dehnen|Band dehnen]]
 
+
* [[FastReport Tipps und Tricks: Child-Band wird nicht gedruckt|Child-Band wird nicht gedruckt]]
Um das zu verhinden, setzt man die Option:
+
* [[FastReport_Tipps_und_Tricks:_B%C3%A4nder#Saubere_Linien_um_B.C3.A4nder.2C_auch_wenn_Child-Band_unterdr.C3.BCckt_wird|Saubere Linien trotz unterdrücktem Child-Band]]
 
+
* [[FastReport_Tipps_und_Tricks: B%C3%A4nder#Details-Band_wird_nicht_gedruckt_wenn_SubdetailData_leer|Detail-Band wird nicht gedruckt wenn Subdetail-Band leer]]
[[Datei:FastReport_TippsUndTrick_KapitelPositionen_Zusammenhalten_Option.png]]
+
* [[FastReport_Tipps_und_Tricks:_B%C3%A4nder#Warum_die_Sub-Details_ganz_unten_stehen|Warum die Sub-Details ganz unten stehen]]
 
+
* [[FastReport_Tipps_und_Tricks:_B%C3%A4nder#Band_unterdr.C3.BCcken_wenn_nicht_Anfrage.2FAngebot|Band unterdrücken, wenn nicht Anfrage oder Angebot]]
Nachher:
+
* [[FastReport_Tipps_und_Tricks:_B%C3%A4nder#Kapitel-Zwischensumme_nicht_drucken.2C_wenn_es_nur_EIN_Kapitel_im_Auftrag_gibt|Kapitel-Zwischensumme unterdrücken, wenn es nur EIN Kapitel im Auftrag gibt]]
 
 
 
 
[[Datei:FastReport_TippsUndTrick_KapitelPositionen_Zusammenhalten_Nachher.png]]
 
 
 
 
 
=== Band per Code unterdrücken ===
 
 
 
Im Prinzip kann man ein Band ganz einfach im Code unterdrücken, indem man eine Formel schreibt, die unter bestimmten Umständen die Eigenschaft '''Visible''' (=sichtbar) auf '''False''' (falsch, nein) stellt. Beispiel:
 
 
 
  // Kapitel-Position ausblenden:
 
  if <Positionen."PosNr"> = 0 then    // Wenn es eine Kapitel-Position ist!
 
  begin
 
    DetailPositionen.Visible := False;
 
  end;
 
 
 
oder kürzer:
 
 
 
  if <Positionen."PosNr"> = 0 then    // Wenn es eine Kapitel-Position ist!
 
    DetailPositionen.Visible := False;
 
 
 
 
 
Im Detail-Bereich (z.B. bei Auftrags-Positionen), der ja mehrfach '''wiederholt''' wird, würde sich dieses Unsichtbar schalten aber auf '''alle folgenden''' Detail-Daten auswirken! '''Ab dem Moment''' würden die restlichen Position '''nicht mehr erscheinen'''! Also muss man im Code festlegen, was sonst ("'''else'''") passieren soll, wenn die Bedingung '''nicht''' erfüllt ist. Das könnte dann so aussehen:
 
 
 
  // Kapitel-Position ausblenden:
 
  if <Positionen."PosNr"> = 0 then    // Wenn es eine Kapitel-Position ist!
 
  begin
 
    DetailPositionen.Visible := False;
 
  end
 
  else                                // Wenn es KEINE Kapitel-Position ist!
 
    DetailPositionen.Visible := True;
 
 
 
 
 
Etwas schwieriger wird es, wenn es '''mehrere Abfragen''' im Code gibt, die das Visible für das Band ein- oder ausschalten. '''[[FastReport Band unterdrücken mit mehreren Bedingungen|Dieser Artikel]]''' beschreibt, wie man da am Besten vorgeht.
 
 
 
 
 
=== Band dehnen ===
 
 
 
Eine wichtige und tolle Eigenschaft eines Bands in FastReport ist es, dass es sich optional '''dehnen''' kann, also an die Größe (genauer gesagt '''Höhe''') der auszugebenden Daten anpassen kann.
 
 
 
'''[[FastReport Band dehnen|Dieser Artikel]]''' beschreibt das.
 
 
 
  
 +
* '''<big>[[FastReport Tipps und Tricks: Bänder|Zum kompletten Beitrag]]</big>'''
  
 
== Formatierung ==
 
== Formatierung ==
  
=== Schrift-Farbe von Felder abhängig von der Fremdmenge ===
+
* [[FastReport Tipps und Tricks: Formatierung#Schrift-Farbe von Felder abhängig von der Fremdmenge|Schrift-Farbe von Felder abhängig von der Fremdmenge]]
 
+
* [[FastReport Tipps und Tricks: Formatierung#Schrift-Farbe_abh.C3.A4ngig_vom_Alternativ-Kennzeichen|Schrift-Farbe abhängig vom Alternativ-Kennzeichen]]
Wenn man die Schrift-Farbe von Felder abhängig von der Fremdmenge setzen will, kann man das im Ereignis
+
* [[FastReport Tipps und Tricks: Formatierung#Farbe eines Bandes abwechselnd grau/weiß|Farbe eines Bandes abwechselnd grau/weiß]]
 
+
* [[FastReport Tipps und Tricks: Formatierung#Gruppenkopf auf letzter Seite unterdrücken, wenn keine Daten mehr kommen|Gruppenkopf auf letzter Seite unterdrücken, wenn keine Daten mehr kommen]]
 
+
* [[FastReport Tipps und Tricks: Formatierung#Report mit Sub-Detail-Band wird abgebrochen, wenn es keine Sub-Daten gibt|Report mit Sub-Detail-Band wird abgebrochen, wenn es keine Sub-Daten gibt]]
  procedure DetailPositionenOnBeforePrint(Sender: TfrxComponent);
+
* [[FastReport Tipps und Tricks: Formatierung#Unterschiedliche Schriftarten in Auftrags-/Rechnungspositions-Texten|Unterschiedliche Schriftarten in Auftrags-/Rechnungspositions-Texten]]
 
+
* [[FastReport Tipps und Tricks: Formatierung#Rahmen per Code setzen|Rahmen per Code setzen]]
z.B. so machen:
+
* [[FastReport Tipps und Tricks: Formatierung#Positionsangaben im Code|Positionsangaben im Code]]
 
+
* [[FastReport Tipps und Tricks: Formatierung#Top-Position im Code ändern|Top-Position im Code ändern]]
Am Anfang die Farbe auf den Standard setzen:
+
* [[FastReport Tipps und Tricks: Formatierung#Zahlen und Datum formatieren|Zahlen und Datum formatieren]]
 
+
* [[FastReport Tipps und Tricks: Formatierung#Monats-Namen aus Monats-Zahl|Monats-Namen aus Monats-Zahl]]
  memoPosMengeAuftrag.Font.Color := clBlack;
+
* [[FastReport Tipps und Tricks: Formatierung#Text in Großbuchstaben|Text in Großbuchstaben]]
  MemoPositionenBezeichnung.Font.Color := clBlack;         
+
* [[FastReport_Tipps_und_Tricks:_Formatierung#Schriftattribute_.28Fett.2C_unterstreichen_.29_in_Feldern|Schriftattribute in Feldern]]
 
 
Dann unten die gewünschte Farbe setzen, z.B. so:
 
 
 
  // Fremdmengen rot: 
 
  if <nowiki> <Positionen."MengeFremd"> > 0  </nowiki> then
 
  begin
 
    memoPosMengeAuftrag.Font.Color := clRed;
 
    MemoPositionenBezeichnung.Font.Color := clRed;         
 
  end;
 
 
 
=== Farbe eines Bandes abwechselnd grau/weiß ===
 
 
 
Wenn man die Farbe eines Bandes (z.B. den Detail-Bereich, also die Positionen eines Auftrags) abwechselnd grau/weiß hinterlegen will, muss man ein bisschen in die Trickkiste greifen. Im '''OnBeforePrint-Ereignis''' des Bandes schreibt man diesen Code:
 
 
 
 
procedure DetailPositionenOnBeforePrint(Sender: TfrxComponent);
 
begin
 
  // Dieser Code wird ausgeführt, BEVOR das Positionen-Detail-Band ausgegeben wird.
 
 
  // Farbe abwechselnd weiß/grau:
 
  if <Line> mod 2 = 1 then  // Bei jeder GERAD-STELLIGEN Zeile!
 
  begin             
 
    TfrxBrushFill(DetailPositionen.Fill).BackColor := cl3dLight; 
 
    TfrxBrushFill(ChildDetailPositionen.Fill).BackColor := cl3dLight; 
 
  end               
 
  else
 
  begin             
 
    TfrxBrushFill(DetailPositionen.Fill).BackColor := clNone;
 
    TfrxBrushFill(ChildDetailPositionen.Fill).BackColor := clNone; 
 
  end;
 
end;
 
 
 
Der erste Trick ist die Zeile
 
 
 
  if <Line> mod 2 = 1 then  // Bei jeder GERAD-STELLIGEN Zeile!
 
 
 
'''<Line>''' ist eine System-Variable, die eine fortlaufende Zeilennummer (Datensatz-Nummer) zurückgibt, die FastReport einfach hochzählt. Der erste Datensatz hat einfach die Zeilennummer 1, der nächste 2 usw.
 
 
 
'''mod 2''' ist eine Division und bringt den Rest der Divison zurück.
 
 
 
 
 
 
 
=== Gruppenkopf auf letzter Seite unterdrücken, wenn keine Daten mehr kommen ===
 
 
 
Man kann den Gruppenkopf einer Gruppe ganz gut dazu benutzen, eine Überschrift über die Positionen zu drucken, die auch auf jeder Seite wiederholt wird. Es kann nun aber vorkommen, dass die Positionen gerade an Ende einer Seite aufhören und auf der nächsten Seite trotzdem noch die Überschrift dazu gedruckt wird. Das sieht unschön aus. '''[[FastReport Gruppenkopf unterdrücken, wenn keine Daten mehr kommen|Dieser Artikel]]'''  beschreibt, wie man das verhindert.
 
 
 
 
 
 
 
=== Report mit Sub-Detail-Band wird abgebrochen, wenn es keine Sub-Daten gibt ===
 
 
 
Ein Report hat folgende Bänder:
 
 
 
* Master (Kopfdaten)
 
** Details (Positionen)
 
*** SubDetails (Unterpositionen zu jeder Position)
 
 
 
Der Report wird wird jedoch '''abgebrochen''', denn es keine Sub-Daten gibt!
 
 
 
Grund:
 
 
 
Man muss die Option '''"Drucken wenn Detail leer"''' auf dem Detail-Band einschalten!
 
 
 
 
 
 
 
 
 
 
 
=== Unterschiedliche Schriftarten in Auftrags-/Rechnungspositions-Texten ===
 
 
 
In den Textbausteinen eines Angebots, Auftrags oder einer Rechnung kommen die Texte in unterschiedlichen Schriftarten oder -Größen. Die Schriftart-Änderung im Report ist '''ohne Wirkung'''.
 
 
 
;Grund:
 
:Die Schriftarten kommen '''aus den Texten''' selbst, also aus der Datenbank, nicht aus dem Report!
 
:Es handelt sich hier ja um '''RTF-formatierte''' Texte. Die Schriftart/-Größe wird in den Stammdaten festgelegt. Das ermöglicht es, innerhalb des Textes Formatierungen vorzunehmen, z.B. Fettschrift.
 
:Beim Einfügen eines solchen Textes wird die Formatierung aus den Stammdaten in die Positionen 1:1 übernommen.
 
 
 
;Lösung
 
:Man muss also die Schriftart in den '''Artikelstammdaten&rArr;Texte''' ändern!
 
:Will man die Änderung testen, hat das zuerst keine Auswirkung! Grund: Änderungen in den Stammdaten werden nicht in die bestehenden Positionen übernommen, sonst würden dort eventuelle individuelle Änderungen unkontrolliert überschrieben. Man muss daher in den '''[[REFLEX_Auftragspositionen#Texte_in_der_Positions-Eingabemaske|Positonen im Textbereich]]''' rechts unten auf den Sternchen-Button klicken, damit der Text neu aus den Stammdaten in die Position geholt wird.
 
 
 
 
 
 
 
 
 
=== Rahmen per Code setzen ===
 
 
 
Manchmal möchte man den Rahmen eines Objektes nur unter bestimmten Bedingungen setzen. Beispiel: Im Fuss eines Auftrags wird ja die Mehrwertsteuer ausgewiesen. Hat man nun einen Auftrag ohne Mehrwertsteuer, so sollen die Brutto-Felder (mit doppeltem Rahem unten) ausgeblendet werden und das Netto-Feld als Summenfeld den doppelten Rahmen bekommen. Beispiel:
 
 
 
[[Datei:FastReport_Rahmen_Code_01.png]]
 
 
 
 
 
Dazu kann man folgenden Code verwenden:
 
 
 
procedure FussPositionenOnBeforePrint(Sender: TfrxComponent);
 
begin
 
  // Ohne Mwst.: Mwst-Felder unterdrücken:
 
  if <AuftragsFuss."MwstBetrag"> = 0 then
 
  begin
 
    memoFussGesamtBrutto.Visible:= False;
 
    AuftragsFussMwstBetrag.Visible:= False;
 
    AuftragsFussMwstSatzProzent.Visible:= False;
 
    AuftragsFussGesamtBetragBrutto.Visible:= False;
 
    memoFussGesamtNetto.Text := 'Endbetrag in €';      // Ohne Mwst gibt's kein brutto/netto!
 
    '''memoFussGesamtNetto.Frame.Typ := ftBottom;'''        // Rahmen unten
 
    '''memoFussGesamtNetto.Frame.BottomLine.Style := fsDouble;'''        // Rahmen-Style "Doppelt"
 
  end;
 
end;
 
 
 
 
 
;Hinweis
 
:Das Textfeld '''memoFussGesamtNetto''' reicht bis zum rechten Rand des Formulars! Es liegt also teilweise unter dem Feld "NettoBetrag". Durch diesen Trick wird die Linie unten bis zum Betragsfeld rechts gezogen.
 
 
 
 
 
 
 
=== Positionsangaben im Code ===
 
 
 
Manchmal möchte man im Code ein Objekt verschieben.
 
 
 
;Beispiele:
 
 
 
* Der Pauschal-Betrag in einem Angebot soll nach links eingerückt werden.
 
* Ein Feld soll nach oben verschoben werden, wenn andere darüber ausgeblendet werden.
 
 
 
Dann kann man im Code die Position des Objektes festlegen:
 
 
 
;Left
 
:Legt die '''horizontale''' Position des Objektes fest, bezogen auf den linken Rand des Bands.
 
 
 
;Top
 
:Legt die '''vertikale''' Position des Objektes fest, '''bezogen auf das Band'''.
 
 
 
Beispiel:
 
 
 
  if <BestellFuss."Nettobetrag1"> = 0 then //JC//160209//
 
  begin
 
      RichFussStandardText.Top := 0.5 * fr1cm;
 
  end;
 
 
 
Dieser Code verschiebt ein Feld nach oben, und zwar auf 0,5 cm, '''bezogen auf das Band''', auf dem es liegt.
 
 
 
"fr1cm" ist dabei eine Umrechnungs-Variable, die FastReport zur Verfügung stellt.
 
 
 
Der Grund: Alle Angaben von Positionen im Code wie '''Top''', '''Left''' usw. werden in '''Pixeln''' gemacht. Dadurch ist eine sehr genaue und Hardware-unabhängige Positionierung möglich. Damit man nun die Angaben von Pixeln z.B. in '''cm''' einfach angeben kann, muss man nur die gewünschte cm-Anzahl mit '''fr1cm''' multiplizieren.
 
 
 
Im Beispiel oben wird das Textfeld auf die Top-Position (=von oben auf dem Band) auf 0,5 cm gesetzt.
 
 
 
* Beachten Sie, dass das Kommata im Code der '''Punkt''' ist! Wenn man im Code also "0,5" schreibt, erhält man eine Fehlermeldung! Man muss "0.5" schreiben!
 
 
 
* ACHTUNG! Wenn Sie die Top-Position im Code verschieben, kann das den Gesamt-Seitenzähler durcheinander bringen! Angenommen, es gibt ein Feldobjekt im Detail-Band, das im Editor auf der Feldposition 3 cm liegt und Sie verschieben es im Code auf "Top=0", dann kann es passieren, dass der Gesamt-Seitenzähler eine Seite mehr angibt als es in Wirklichkeit sind!!!
 
 
 
=== Top-Position im Code ändern ===
 
 
 
Manchmal möchte man die Top-Position von Objekten (also die "Zeile") im Code unter bestimmten Umständen ändern, z.B. Felder nach oben schieben, wenn die "Zeile" darüber ausgeblendet wurde.
 
 
 
In '''[[FastReport Tipp Top-Position im Code|diesem Artikel]]''' wird ein Beispiel dazu beschrieben.
 
 
 
 
 
 
 
=== Feld reagiert nicht auf Änderung der Schriftgröße ===
 
 
 
Wenn man im Designer die Schriftgröße eines Feldes ändern und es wird trotzdem noch zu groß/zu klein/zu fett dargestellt, ist vermutlich ein sog. "Highlight" auf dem Feld gesetzt. Um das zu prüfen und zu entfernen, doppelklicken Sie auf das Feld und entfernen das Highlight.
 
 
 
 
 
 
 
=== Zahlen und Datum formatieren ===
 
 
 
==== Formatieren über die Objekt-Eigenschaften ====
 
 
 
Um Zahlen zu formatieren, klickt man mit der rechten Maustaste auf das Feld und wählt "Anzeigeformat". Neben den Standard-Formatierungen kann man dort auch individuelle Formate angeben:
 
 
 
 
 
{| class="wikitable" style="text-align: left;"
 
!Format-String
 
!Beschreibung, Beispiel
 
|- valign="top"
 
|00
 
|Formatiert die Zahl mit zwei Stellen. Wenn die Zahl einstellig ist, wird die leere Stelle mit "0" aufgefüllt. Anwendung z.B. für Tages- oder Monatszahlen. Beispiele "01", "02", "10", "12".
 
|- valign="top"
 
|%0.0n
 
|Formatiert die Zahl ohne Nachkommastellen. Beispiele "1", "2", "10", "12".
 
|- valign="top"
 
|%1.1f
 
|Formatiert die Zahl ohne Nachkommastellen. Beispiele "1,4", "2,5", "10,0", "12,0".
 
|- valign="top"
 
|ddd dd.mm.yyyy
 
|Formatiert ein Datumsfeld mit Wochentag und Datum. Beispiel: "Mo 29.02.2016".
 
|- valign="top"
 
|
 
|
 
|}
 
 
 
Diese Format-Strings können in das Eingabefeld "Formatstring" eingegeben werden.
 
 
 
==== Formatieren in einem Textfeld ====
 
 
 
Wenn man ein Datum in einem Textfeld (Memo) formatieren will, kann man dazu die eingebaute Funktion '''FormatDateTime(Format-String,[Feld])''' verwenden.
 
 
 
Im Format-String kann man die Formatierung festlegen.
 
 
 
Beispiel:
 
 
 
<nowiki><b>[AuftragsKopf."AuftrNr"]</b></nowiki>
 
<nowiki>[FormatDateTime(  'd-mmm-yyyy' ,  <AuftragsKopf."DruckDat">) ]</nowiki>
 
 
 
ergibt das Datum
 
 
 
6-Apr-2016
 
 
 
Das Ausschreiben des Monats verhindert Missverständnisse mit englisch- bzw. amerikanischen Ländern. Die Monats-Namen werden jedoch aus der Einstellung des '''Rechners''' geholt, d.h. ist der Rechner auf Deutsch eingestellt, werden auch die deutschen Monats-Namen verwendet!
 
 
 
* Siehe auch [[FastReport_Tipps_und_Tricks#Zahlenwert_in_Text_umwandeln]]
 
 
 
=== Monats-Namen aus Monats-Zahl ===
 
 
 
Da es keine eingebaute Funktion gibt, mit der man eine Monats-'''Nummer''' in einen Namen umwandelt, kann man sich eine eigene Funktion bauen:
 
 
 
procedure PageHeader1OnBeforePrint(Sender: TfrxComponent);
 
var
 
  <nowiki>Monatsnamen : Array[0..12] of String = ['FEHLT!','Januar','Februar','März','April','Mai','Juni','Juli',</nowiki>
 
<nowiki>                                          'August','September','Oktober','November','Dezember' ];</nowiki>
 
begin
 
<nowiki>    MemoTitel.Text := 'Statistik ' + Monatsnamen[<Monat>] + '  [Jahr]'</nowiki>
 
end;
 
 
 
Die Funktion geht davon aus, dass es eine Variable '''<Monat>''' gibt, in der die Zahl 1 bis 12 steht.
 
 
 
;Anderes Beispiel:
 
:Hier wurde unter "Report&rArr;Variablen" eine Variable "Monatsname" deklariert.
 
:Diese Variable wird für die Ausgabe des Monatsnamens verwendet.
 
:Im BeforePrint-Ereignis des PageHeaders (Seitenkopf) steht:
 
 
 
<nowiki>procedure PageHeader1OnBeforePrint(Sender: TfrxComponent);</nowiki>
 
var
 
  <nowiki>Monatsnamen : Array[0..12] of String = ['FEHLT!','Januar','Februar','März','April','Mai','Juni','Juli',</nowiki>
 
  <nowiki>                                          'August','September','Oktober','November','Dezember' ];</nowiki>
 
begin
 
<nowiki>  Set( 'Monatsname', '''' + Monatsnamen[ <Reisen."Monat"> ] + '''' );  // Setzt den Namen in die Variable. Zu beachten sind die einfachen Anführungszeichen '''' </nowiki>
 
end;
 
 
 
:Zu beachten sind die einfachen Anführungszeichen <nowiki>'</nowiki> am Anfang und am Ende der Zuweisung.
 
:Diese muss man angeben, damit FastReport weiß, dass es um einen Text geht.
 
:Da FastReport die einfachen Anführungszeichen <nowiki>'</nowiki> aber als Steuerzeichen benutzt, kann man die nicht einfach so in den Code schreiben!
 
:Man muss deshalb <nowiki>''''</nowiki> verwenden.
 
:Das erste <nowiki>'</nowiki> sagt aus, dass nun ein Text kommt.
 
:Die beiden nächsten <nowiki>'</nowiki> sagen, dass in dem Text ein <nowiki>'</nowiki> benutzt werden soll.
 
:Am Ende schließt das <nowiki>'</nowiki> den Text ab.
 
 
 
;Monatsnummer aus einem '''Datumsfeld'''
 
:Um die Monatsnummer aus einem '''Datumsfeld''' zu bekommen, kann man die eingebaute Funktion '''MonthOf(Date)''' verwenden.
 
:Wenn z.B. das Datum aus einem Datenbank-Feld kommt, sähe der Code so aus:
 
 
 
procedure PageHeader1OnBeforePrint(Sender: TfrxComponent);
 
var
 
  <nowiki>Monatsnamen : Array[0..12] of String = ['FEHLT!','Januar','Februar','März','April','Mai','Juni','Juli',</nowiki>
 
<nowiki>                                          'August','September','Oktober','November','Dezember' ];</nowiki>
 
  <nowiki> Monat : Integer;</nowiki>
 
begin
 
  Monat := MonthOf( <Statistik."Datum">  );
 
<nowiki>  MemoTitel.Text := 'Statistik ' + Monatsnamen[<Monat>] + '  [Jahr]'</nowiki>
 
end;
 
 
 
=== Text in Großbuchstaben ===
 
 
 
Manchmal möchte man, dass der Text eines Datenbank-Felder immer in GROSSBUCHSTABEN ausgegeben wird, auch wenn er in der Datenbank in Kleinbuchstaben gespeichert ist.
 
 
 
Beispiel:
 
 
 
Nach DIN 5008 muss der Ländername im Anschriften-Feld bei ausländischen Adressen in Großbuchstaben ausgegeben werden.
 
 
 
Um ein Feld in Großbuchstaben auszugeben, kann man Befehl
 
 
 
UpperCase( <Tabelle."Feldname"> ) )
 
 
 
verwenden.
 
 
 
Beispiel:
 
 
 
In einem Auftragsformular befindet sich ein Memo-Feld <code>memoAnschrift</code>, in das die Anschrift im Code eingefügt wird:
 
 
 
  // Anschriftenfeld zusammenstellen:
 
  memoAnschrift.Lines.Clear;
 
  memoAnschrift.Lines.Add( <AuftragsKopf."NameFirma"> );
 
  if <Ansprechpartner."Briefanrede"> > '' then
 
    memoAnschrift.Lines.Add( <Ansprechpartner."Briefanrede"> );
 
  memoAnschrift.Lines.Add( <AuftragsKopf."Str"> );
 
  memoAnschrift.Lines.Add( <AuftragsKopf."PLZ"> + ' ' + <AuftragsKopf."Ort"> );
 
  memoAnschrift.Lines.Add( '''UpperCase( <Adresse."Landname"> ) )''';
 
  
In der letzten Zeile des Codes wird der Land-Name in Großbuchstaben ausgegeben.
+
* '''<big>[[FastReport Tipps und Tricks: Formatierung|Zum kompletten Beitrag]]</big>'''
  
 
== Variablen ==
 
== Variablen ==
  
=== Fortlaufende Nummer ===
+
* [[FastReport Tipps und Tricks: Variablen#Fortlaufende Nummer|Fortlaufende Nummer]]
 
+
* [[FastReport Tipps und Tricks: Variablen#Zähler-Variable zum Unterdrücken von wiederholten Werten|Zähler-Variable zum Unterdrücken von wiederholten Werten]]
Wenn man eine fortlaufende Nummer im Report braucht, kann man dazu die System-Variable '''Line''' verwenden. '''Line''' gibt die Nummer des gerade abgerufenen Datensatzes an, von 1 beginnend.
+
* [[FastReport Tipps und Tricks: Eingebaute Funktionen und Variablen#Interne Variablen|Interne Variablen]]
 
+
* [[FastReport Tipps und Tricks: Variablen#Variablen_im_Code_mit_Inhalten_f.C3.BCllen|Variablen im Code mit Inhalten füllen]]
Wenn man jedoch z.B. eine Gruppierung im Report hat und nur die Daten aus dem Gruppenfuß drucken will, kann man '''Line''' nicht verwenden, weil in einer Gruppe ja viele Datensätze enthalten sind und '''Line''' die Datensätze zählt, nicht die Gruppenergebnisse.
 
 
 
Um die Aufgabe zu lösen, deklariert man eine eigene Variable im Report und setzt den Standardwert auf 0.
 
  
Im Code gibt man z.B. im Gruppenfuß folgenden Code ein:
 
  
procedure GroupFooter1OnBeforePrint(Sender: TfrxComponent);
+
* '''<big>[[FastReport Tipps und Tricks: Variablen|Zum kompletten Beitrag]]</big>'''
begin
 
  <nowiki>Set('LfdNr', <LfdNr> + 1);</nowiki>
 
end;
 
 
 
 
 
=== Zähler-Variable zum Unterdrücken von wiederholten Werten ===
 
 
 
Manchmal möchte man wiederholte Werte, die untereinander stehen, nicht drucken. Beispiel einer Auftragsposition:
 
 
 
1.1 Artikel A
 
 
''Alternativ:''
 
1.2 Artikel B
 
 
''Alternativ:''
 
1.3 Artikel C
 
 
 
 
Das Wort  ''Alternativ:'' soll hier nur bei der '''ersten Alternative''' stehen, die direkt danach folgenden sollen unterdrückt werden.
 
 
 
Eigentlich gibt es dazu in FastReport eine Option "wiederholte Werte unterdrücken" auf der rechten Maustaste eines Objektes. In einfachen Listen funktioniert das auch, in komplexen Formularen mit wechselseitigem Ausblenden von Bändern aber nicht (immer)!
 
 
 
'''[[FastReport: Zähler-Variable zum Unterdrücken von wiederholten Werten|Dieser Artikel]]''' beschreibt, wie man das Problem mit einer Variable lösen kann.
 
  
 
== Verwendung von Feldern ==
 
== Verwendung von Feldern ==
  
=== Zeilenumbruch innerhalb von Feldern ===
+
* [[FastReport Tipps und Tricks: Verwendung von Feldern#Zeilenumbruch innerhalb von Feldern|Zeilenumbruch innerhalb von Feldern]]
 
+
* [[FastReport Tipps und Tricks: Verwendung von Feldern#Zeilenabstand in Feldern|Zeilenabstand in Feldern]]
Wenn man ein Feld in den Report einfügt, ist die Eigenschaft "Zeilenumbruch" (leider) immer eingeschaltet. Da man diesen bei den meisten Feldern nicht benötigt, kann man ihn ausschalten: Mit der rechten Maustaste auf das Feld klicken und die Eigenschaft '''Zeilenumbruch''' ausschalten.
+
* [[FastReport Tipps und Tricks: Verwendung von Feldern#Berechnungen in einem Feld|Berechnungen in einem Feld]]
 
+
* [[FastReport Tipps und Tricks: Verwendung von Feldern#Zahlenwert in Text umwandeln|Zahlenwert in Text umwandeln]]
Der ungewollte Zeilenumbruch kann dazu führen, dass unterhalb der Felder "Geisterschatten" stehen. Beispiel:
+
* [[FastReport Tipps und Tricks: Verwendung von Feldern#Berechnungen in einem Feld mit Formatierung|Berechnungen in einem Feld mit Formatierung]]
 
+
* [[FastReport Tipps und Tricks: Verwendung von Feldern#Datumsfeld unterdrücken, wenn kein Datum drin steht|Datumsfeld unterdrücken, wenn kein Datum drin steht]]
[[Datei:FastReport_Tipps_Zeilenumbruch_GeisterSchatten_Bsp_01.png]]
+
* [[FastReport Tipps und Tricks: Bilder zur Laufzeit laden|Bilder zur Laufzeit laden]]
 
+
* [[FastReport_Tipps_und_Tricks:_Verwendung_von_Feldern#Hyperlinks_in_Feldern|Hyperlinks in Feldern]]
 
+
* [[FastReport_Tipps_und_Tricks:_Verwendung_von_Feldern#Nur_die_ersten_X_Stellen_eines_Feldes_verwenden|Nur die ersten X Stellen eines Feldes verwenden]]
 
 
=== Zeilenabstand in Feldern ===
 
 
 
Wenn man den Zeilenabstand innerhalb eines Memo-Felder ändern will, kann man die Eigenschaft '''LineSpacing''' vom Standardwert 2 z.B. auf 6 ändern.
 
 
 
 
 
 
 
=== Berechnungen in einem Feld ===
 
 
 
Wenn man in einem Feld etwas berechnen möchte, muss man dazu keine Formel oder Variable verwenden wie in CrystalReports&copy;! Man kann die Rechenformel einfach in das Feld schreiben.
 
 
 
Beispiel:
 
 
 
In einer Ladeliste möchte man eine Spalte haben mit der Auftragsmenge zzgl. der Reserve-Mengte, abzgl. der Fremdmenge, also die zu ladende eigene Menge. Dazu zieht man man einfach ein Textfeld in das entsprechende Detail-Band und stellt die Formel zusammen:
 
 
 
[<Positionen."Menge"> + <Positionen."MengeReserve"> - <Positionen."MengeFremd">]
 
 
 
Die Feldnamen kann man mit diesem Button holen:
 
 
 
[[Datei:FastReport_Memo_MitFormel.png]]
 
 
 
Die eckigen Klammern
 
 
 
[ ... ]
 
 
 
legen den Anfang und das Ende der Formel fest.
 
 
 
Normalerweise werden Datenbank-Felder in eckigen Klammern angegeben,
 
 
 
;<big>Wenn innerhalb der Formel Datenbank-Felder eingebunden werden, müssen diese jedoch in '''spitzen Klammern''' angegeben werden!</big>
 
 
 
;Falsch:
 
 
 
[[Positionen."Menge"] + [Positionen."MengeReserve"] - [Positionen."MengeFremd"] ]
 
 
 
;Richtig:
 
 
 
[<Positionen."Menge"> + <Positionen."MengeReserve"> - <Positionen."MengeFremd">]
 
 
 
 
 
 
 
=== Zahlenwert in Text umwandeln ===
 
 
 
Manchmal hat man die Aufgabe, einen Zahlenwert aus der Datenbank in einen Text umzuwandeln. Ein Beispiel dafür zeigt der '''[[Report für das Lagerprotokoll]]'''.
 
 
 
 
 
 
 
=== Berechnungen in einem Feld mit Formatierung ===
 
 
 
Wenn man in einem Feld etwas berechnet, wird das Ergebnis so ausgegeben, wie es die Berechnung ergibt. Wenn man z.B. mit zwei Fließkommazahlen rechnet, wird das Ergebnis auch mit allen resultierenden Nachkommstellen ausgegeben.
 
 
 
;Beispiel:
 
:Im Rechnungsfuß wird der Skonto-Betrag und Skonto-Zahlungsbetrag errechnet und ausgegeben. Der Text im Feld lautet:
 
 
 
<nowiki>Bei Zahlung bis zum <b>[RechnungsFuss."Skonto1BisDatum"]</b> gewähren wir [RechnungsFuss."Skonto1Prozent"] % Skonto = [RechnungsFuss."Skonto1Betrag"].
 
Zahlungsbetrag mit Skonto: <b>[<RechnungsFuss."GesamtBetragBrutto"> - <RechnungsFuss."Skonto1Betrag">]</b></nowiki>
 
 
 
:Das Ergebnis sieht so aus:
 
 
 
[[Datei:FastReport_Rechnung_Skonto_Unformatiert.png|border]]
 
 
 
:Damit die Ergebnisse formatiert werden, kann man die eingebaute Funktion <code>FormatFloat( 'Format',Zahl )</code> verwenden. Diese formatiert die Zahl anhand der Vorgaben im Text '''Format'''.
 
 
 
:Die Formel dazu sieht nun so aus:
 
<nowiki> Bei Zahlung bis zum <b>[RechnungsFuss."Skonto1BisDatum"]</b> gewähren wir [RechnungsFuss."Skonto1Prozent"] % Skonto = [FormatFloat('#,##0.00 €',<RechnungsFuss."Skonto1Betrag">)].
 
Zahlungsbetrag mit Skonto: <b>[FormatFloat('#,##0.00 €', <RechnungsFuss."GesamtBetragBrutto"> - <RechnungsFuss."Skonto1Betrag">    )]</b></nowiki>
 
 
 
:Das Ergebnis:
 
 
 
[[Datei:FastReport_Rechnung_Skonto_Formatiert.png|border]]
 
 
 
;Die Ausdrücke der Formel im Einzelnen:
 
 
 
<nowiki>Bei Zahlung bis zum <b>[RechnungsFuss."Skonto1BisDatum"]</b> gewähren wir [RechnungsFuss."Skonto1Prozent"] % Skonto</nowiki>
 
  
:Es sind Verweise auf Datenbankfelder in der Formel enthalten, die mit eckigen Klammern eingefügt werden. Eigentlich müsste es nach den Regeln von oben so heißen:
+
* '''<big>[[FastReport Tipps und Tricks: Verwendung von Feldern|Zum kompletten Beitrag]]</big>'''
 
 
<nowiki>Bei Zahlung bis zum <b>[<RechnungsFuss."Skonto1BisDatum">]</b> gewähren wir [<RechnungsFuss."Skonto1Prozent">] % Skonto</nowiki>
 
 
 
Das ist auch zulässig. FastReport erlaubt es jedoch, die spitzen Klammern wegzulassen, wenn der Ausdruck nur '''eine''' Variable oder nur '''ein''' Datenbank-Feld beinhaltet!
 
 
 
;Die Formatierung:
 
 
 
<nowiki>% Skonto = [FormatFloat('#,##0.00 €',<RechnungsFuss."Skonto1Betrag">)].</nowiki>
 
 
 
Mit
 
 
 
[...]
 
 
 
wird der "Ausdruck" (also die Formel in der Formel) begrenzt. Innerhalb des Ausdrucks befindet sich die Funktion <code>FormatFloat</code>. Dieser wird zuerst die gewünschte Formatierung übergeben <code>'#,##0.00 €'</code> und nach dem Komma der Wert, der zu formatieren ist:
 
 
 
<nowiki><RechnungsFuss."Skonto1Betrag"></nowiki>
 
 
 
Bei der Berechnung...
 
 
 
<nowiki>Zahlungsbetrag mit Skonto: <b>[FormatFloat('#,##0.00 €', <RechnungsFuss."GesamtBetragBrutto"> - <RechnungsFuss."Skonto1Betrag">    )]</b></nowiki>
 
 
 
ist das genau das Gleiche, nur dass halt zwei Datenbankfelder verrechnet werden!
 
 
 
;Hinweis
 
:Leider unterstützt <code>FormatFloat</code> die universelle Währungsangaben <code>%2.2m</code> '''nicht'''. Man muss das Währungssymbol also fest angeben. Wenn die Währung in Ihrem Land nicht der EURO ist, müssten Sie den Report an dieser Stelle entsprechend anpassen.
 
 
 
 
 
;Unterdrücken, wenn kein Skonto:
 
:Mit diesem, Code kann man das Feld unterdrücken, wenn kein Skonto angegeben wurde:
 
 
 
procedure RechnungsFussSkonto1BisDatumOnBeforePrint(Sender: TfrxComponent);
 
begin
 
  if <RechnungsFuss."Skonto1Betrag"> = 0 then
 
    RechnungsFussSkonto1BisDatum.Visible := False;
 
end;
 
 
 
 
 
 
 
 
 
=== Datumsfeld unterdrücken, wenn kein Datum drin steht ===
 
 
 
Wenn man ein Datumsfeld im Report hat, steht dort je nach Formatierung "0" oder "30.12.1899" drin, wenn es gar kein Datum gibt. Behelfen könnte man sich, indem man das Feld im Code '''OnBeforePrint''' unterdrückt, wenn kein Datum drin steht. Einfacher ist es aber, auf dem Feld mit der '''rechten Maustaste''' zu klicken und die Option '''Nullen verbergen''' einzuschalten!
 
 
 
Wenn man einen Rahmen um das Feld angegeben hat, weil man die Daten tabellarisch anzeigen möchte, so fehlt in diesem Fall das Feld und auch der Rahmen. Um diese "Zahnlücke" zu füllen, kann man ein leeres Textfeld über oder unter das Datumsfeld setzen, das genauso groß ist und die Lücke füllt, falls das Datumsfeld ausgeblendet wird.
 
  
 
== Dialoge im Report ==
 
== Dialoge im Report ==
  
=== Ausführen des Reports per Kennzeichen verhindern ===
+
* [[FastReport Tipps und Tricks: Dialoge im Report#Ausführen des Reports per Kennzeichen verhindern|Ausführen des Reports per Kennzeichen verhindern]]
 
 
Wenn man das Ausführen (Vorschau, Drucken usw.) eines Reports über ein Kennzeichen verhindern will, kann man dazu in den Report ein Dialog-Fenster einbauen, das unter bestimmten Bedingungen angezeigt wird und die Ausführung des verhindert.
 
 
 
;Beispiel:
 
:Man verwendet das '''Auftragskennzeichen 8''' ("Ladeliste freigegeben"), um das Drucken einer Ladeliste zu verhindern. Wenn dort "Nein" ausgewählt wird, darf die Ladeliste nicht gedruckt werden.
 
 
 
Dazu fügt man im Designer mit dem Menü '''Datei &rArr; einen neuen Dialog ein. In diesen Dialog fügt man ein Label (Text) und einen Button ein, wie in diesem Beispiel:
 
 
 
  
[[Datei:FastReport_TippsUndTrick_Dialog_01.png]]
+
* '''<big>[[FastReport Tipps und Tricks: Dialoge im Report|Zum kompletten Beitrag]]</big>'''
  
  
* Stellen Sie die Schriftart ("Font") und die Farbe ("Color") der Objekte nach Ihren Ansprüchen ein!
 
* Die Eigenschaft '''ModalResult" ("Ergebnis des Dialogs") des Buttons stellen Sie auf "mrCancel" (Abbruch).
 
  
Wenn Sie nun den Report ausführen, wird der Dialog angezeigt und der Report nicht ausgeführt!!!
+
== Sonstiges ==
 
 
So wollen wird das natürlich nicht haben! Der Dialog soll ja nur angezeigt werden, wenn das '''Kennzeichen 8''' nicht auf "Nein" steht.
 
 
 
Deshalb suchen Sie im '''Report-Baum''' den Report "Report" aus.
 
 
 
* Den '''Report-Baum''' können Sie über das Menü '''Ansicht &rArr; Symbolleisten''' einschalten.
 
 
 
 
 
Klicken Sie nun im '''Objektinspektor''' auf '''Ereignisse''' und dort doppelklicken Sie auf '''frxReport1OnRunDialogs'''.
 
 
 
* Den '''Objektinspektor''' können Sie über das Menü '''Ansicht &rArr; Symbolleisten''' einschalten.
 
 
 
Geben Sie nun diesen Code ein:
 
 
 
procedure frxReport1OnRunDialogs(var Result: Boolean);
 
begin
 
  if <AuftragsKopf."KENNZ8"> = 'Nein' then
 
    Result := DialogPage1.ShowModal = mrOK
 
  else
 
    Result := True;
 
end;
 
 
 
 
 
Die Variable '''Result''' ist das Ergebnis der Abfrage:
 
 
 
* Wird sie auf '''True''' gestellt, wird der Report ausgeführt.
 
* Wird sie auf '''False''' gestellt, wird der Report '''nicht''' ausgeführt.
 
 
 
Wenn das Kennzeichen auf "Nein" steht, wird dieser Dialog angezeigt:
 
 
 
[[Datei:FastReport_TippsUndTrick_Dialog_02.png]]
 
  
 +
* [[FastReport Unterberichte]]
  
 +
* [[If-Then-Else: Eine Einführung in die Programmierung]]
  
 
== Fehler ==
 
== Fehler ==
  
Wie bei jedem umfangreichen Software-System gibt es auch bei der Report-Erstellung mit FastReport&copy; jede Menge Fehler-Möglichkeiten.
+
* [[FastReport Tipps und Tricks: Fehler#Tabelle wird im Report nicht angezeigt|Tabelle wird im Report nicht angezeigt]]
 
+
* [[FastReport Tipps und Tricks: Fehler#Band wird nicht gedruckt, obwohl Daten vorhanden sind|Band wird nicht gedruckt, obwohl Daten vorhanden sind]]
Unserer Erfahrung nach die allermeisten Anwender-Fehler, nur selten ist FastReport schuld.
+
* [[FastReport Tipps und Tricks: Fehler#Detail-Band mit Auftragspositionen wird mehrfach gedruckt, obwohl nur ein Datensatz vorhanden ist|Detail-Band mit Auftragspositionen wird mehrfach gedruckt, obwohl nur ein Datensatz vorhanden ist]]
 
+
* [[FastReport Tipps und Tricks: Fehler#Schrift-Farbe eines Feldes wird im Editor angezeigt, in der Vorschau/im Druck nicht|Schrift-Farbe eines Feldes wird im Editor angezeigt, in der Vorschau/im Druck nicht]]
Einzelheiten werden hier beschrieben:
+
* [[FastReport Tipps und Tricks: Fehler#Anzahl Seitennummern ist 0|Anzahl Seitennummern ist 0]]
 
+
* [[FastReport Tipps und Tricks: Fehler#Etikettenformular: Es wird immer nur ein Etikett gedruckt|Etikettenformular: Es wird immer nur ein Etikett gedruckt]]
* [[FastReport Fehler, Ursachen, Behebung]]
+
* [[FastReport Tipps und Tricks: Fehler#Ich kann die Sortierung beim Drucken einer Ladeliste nicht ändern!|Ich kann die Sortierung beim Drucken einer Ladeliste nicht ändern!]]
 
+
* [[FastReport Tipps und Tricks: Fehler#Lieferschein wird übereinander gedruckt|Lieferschein wird übereinander gedruckt]]
 
+
* [[FastReport Tipps und Tricks: Fehler#Prüfprotokoll wird nicht gedruckt|Prüfprotokoll wird nicht gedruckt]]
 
+
* [[FastReport Tipps und Tricks: Fehler#Fehlermeldung "Alternativ nicht gefunden" in Rechnung|Fehlermeldung "Alternativ nicht gefunden" in Rechnung]]
=== Tabelle wird im Report nicht angezeigt ===
+
* [[FastReport Tipps und Tricks: Fehler#Fehlermeldung "Fehler im Ausdruck';' expected"|Fehlermeldung "Fehler im Ausdruck';' expected"]]
 
+
* [[FastReport Tipps und Tricks: Fehler#Fehlermeldung "Memo XX: Fehler im Ausdruck xxxx"|Fehlermeldung "Memo XX: Fehler im Ausdruck xxxx"]]
Wenn eine bestimmte Tabelle wird im Report nicht angezeigt wird, obwohl sie eigentlich vorhanden sein müsste, müssen Sie diese Tabelle u.U. erst im Report auswählen. Siehe '''[[FastReport Dataset (Tabelle) wird im Report nicht angezeigt]]'''.
+
* [[FastReport_Tipps_und_Tricks:_Fehler#Fehlermeldung_unter_mySQL:_.22Variante_des_Typs_.28UnicodeString.29_konnte_nicht_in_Typ_.28Double.29_konvertiert_werden|Fehlermeldung: "Variante des Typs (UnicodeString) konnte nicht in Typ (Double) konvertiert werden]]
 +
* [[FastReport_Tipps_und_Tricks:_Fehler#Bei_der_Vorschau_h.C3.A4ngt_sich_das_Programm_an_manchen_Rechner_auf|Bei der Vorschau hängst sich das Programm auf]]
  
Wenn eine Tabelle nicht ausgewählt wird, kann es auch zu einer Fehlermeldung kommen:
 
  
Fehler im Ausdruck ´Tabellenname."Feld": Identifier expected
+
* '''<big>[[FastReport Tipps und Tricks: Fehler|Zum kompletten Beitrag]]</big>'''
 
 
In diesem Fall wird der Report nicht ausgeführt. Anstelle der Daten kommen die Feldnamen des Reports oder auch gar nichts!
 
 
 
 
 
=== Band wird nicht gedruckt, obwohl Daten vorhanden sind ===
 
 
 
Ein bestehende Report wurde geändert, z.B. ein Detail-Band wurde entfernt. Das Master-Band wird nicht gedruckt, obwohl Daten vorhanden sind.
 
 
 
Grund:
 
 
 
Das Master-Datenband wurde im Original-Report nicht gebraucht und daher dauerhaft ausgeblendet. Stellen Sie die Eigenschaft '''Visible''' von '''False''' auf '''True'''.
 
 
 
 
 
=== Detail-Band mit Auftragspositionen wird mehrfach gedruckt, obwohl nur ein Datensatz vorhanden ist ===
 
 
 
In einem Formular werden Auftragspositionen gedruckt. Eine Position daraus wird drei mal gedruckt, die anderen richtigerweise nur ein mal.
 
 
 
Grund:
 
 
 
In den Artikel-Textbausteinen haben mehrere Textbausteine das Kennzeichen "Angebot" und das gleiche Sprackennzeichen. Das ist nicht zulässig! Nur jeweils ein Textbaustein darf das Kennzeichen "Angebot" (oder Auftrag usw.) mit einem Sprachkennzeichen haben!
 
 
 
 
 
=== Schrift-Farbe eines Feldes wird im Editor angezeigt, in der Vorschau/im Druck nicht ===
 
 
 
;Problem:
 
:Man ändert die Schrift-Farbe eines Feldes, diese wird im Editor angezeigt, aber in der Vorschau/im Druck nicht!
 
  
 +
* Programm hängt sich scheinbar auf:
 +
:Bei Drucken in ein PDF-Programm (also als Drucker ist z.B. PDF-Writer) über die Vorschau hängst sich das Programm scheinbar auf.
 
;Ursache:
 
;Ursache:
:Bei dem Feld ist ein sog. "Highlight" definiert. Dieses legt fest, dass beim einem bestimmten Ergebnis einer Formel die Font-Farbe und -Größe gesetzt wird. Dieses "Highlight" ist stärker als die angegebene Schrift-Farbe.
+
:Im PDF-Programm ist ein Dialog "Speichern unter" geöffnet. Dieses muss geschlossen werden!
 
 
;Lösung:
 
:Auf das Feld doppelklicken. Das Register "Highlight" öffnen und das "Highlight" löschen.
 
 
 
=== Anzahl Seitennummern ist 0 ===
 
 
 
In einem Report gibt es ein Feld, in dem die aktuelle Seite und die Gesamt-Seitenanzahl im Kopf gedruckt werden. Die Gesamt-Seitenanzahl ist jedoch immer 0!
 
 
 
Das Feld hat folgenden Inhalt:
 
 
 
<nowiki>Stand: [Date]    Seite [Page] von [TotalPages]</nowiki>
 
 
 
Beispiel:
 
 
 
[[Datei:FastReport_Bsp_Zweipass_01.png]]
 
 
 
'''Warum zeigt <nowiki>[TotalPages]</nowiki> immer 0 statt der Anzahl der Seiten?'''
 
 
 
;Grund:
 
:Damit <nowiki>[TotalPages]</nowiki> funktioniert, muss man dem Report "sagen", dass er zuerst den Report intern durchrechnen soll. Erst danach weiß der Report, wie viele Seiten erzeugt werden!
 
:Dazu muss man den Report im Designer öffnen und dann auf das Menü '''Report&rArr;Optionen''' klicken. Dann schaltet man die Option '''Zweipass''' ein:
 
 
 
[[Datei:FastReport_Bsp_Zweipass_02.png]]
 
 
 
:Das Ergebnis:
 
 
 
[[Datei:FastReport_Bsp_Zweipass_03.png]]
 
 
 
 
 
 
 
=== Fehlermeldung "Alternativ nicht gefunden" in Rechnung ===
 
 
 
Wenn Sie einen als Auftragsformular erstellten Report kopieren und als Rechungsformular (-Grundlage) verwenden wollen, erhalten Sie eine Fehlermeldung wie diese:
 
 
 
[[Datei:FastReport_Rechnung_Fehlermeldung_Alternativ.png]]
 
 
 
Grund:
 
 
 
In Rechnungen gibt es kein Alternativ.
 
 
 
Lösung:
 
 
 
Entfernen Sie mit dem Report-Designer alle Verweise auf das Alternativ-Feld!
 
 
 
 
 
=== Fehlermeldung "Fehler im Ausdruck';' expected" ===
 
 
 
Wenn ein ähnliche Meldung wie diese auftritt...
 
 
 
[[Datei:FastReport_Fehler_Ausdruck_erwartet_01.png]]
 
 
 
...so kann die Ursache sein, dass in der Artikelbezeichnung die Zeichen
 
 
 
<nowiki> [ oder ] </nowiki>
 
 
 
enthalten sind:
 
 
 
[[Datei:FastReport_Fehler_Ausdruck_erwartet_02.png]]
 
 
 
 
 
Diese Zeichen werden in der Programmiersprache von FastReport&copy; aber als Begrenzungszeichen für Ausdrücke (Felder, Variablen usw.) verwendet.
 
 
 
Um diesen Fehler zu vermeiden, kann man im Code die Ausdrucks-Begrenzungszeichen "umbiegen" auf andere Zeichen:
 
 
 
 
 
<nowiki>// ExpressionDelimiters legt die Zeichen fest, die für Ausdrücke benutzt werden. Standard: [,]</nowiki>
 
<nowiki>// Wenn in der Artikel-Bezeichnung eckige Klammern vorkommen können, kommt es zu einer Fehlermeldung.</nowiki>
 
<nowiki>// Deshalb:                          </nowiki>
 
<nowiki>MemoPositionenBezeichnung.ExpressionDelimiters := '{,}';</nowiki>
 
 
<nowiki>MemoPositionenBezeichnung.Lines.Add( <Positionen."Bezeichnung"> );</nowiki>
 
, z.B.
 
 
 
<nowiki> ‹ ›</nowiki>
 
(das sind spezielle spitze Klammern aus dem Unicode-Zeichensatz, nicht die normalen spitzen Klammern!).
 
 
 
oder:
 
╠ ╣
 
 
 
Hier werden die geschweiften Klammern als Begrenzer festgelegt. Wenn die auch in der Bezeichnung vorkommen können, muss man natürlich andere Zeichen verwenden
 
 
 
;Hinweis:
 
:Das ist nur notwendig, wenn man einem Memo-Feld '''im Programm-Code''' einen Feld-Inhalt zuweist!
 
:Wenn man '''direkt''' im Designer ein Datenbank-Feld festlegt, ist das '''nicht''' nötig! Ausnahme: Siehe unten!
 
 
 
=== Fehlermeldung "Memo XX: Fehler im Ausdruck xxxx" ===
 
 
 
Beim Ausführen eines Reports wird folgende Fehlermeldung angezeigt:
 
 
 
<nowiki>Folgende(r) Fehler trat(en) auf:</nowiki>
 
<nowiki>Memo21: Fehler im Ausdruck "...L'Acoustics...": ';' expected</nowiki>
 
 
 
;Problem:
 
:In der Bezeichnung ist ein einfaches Anführungszeichen '''<big><nowiki>'</nowiki></big>''' enthalten.
 
:Im Report steht in diesem Memo der Inhalt:
 
 
 
<nowiki>[@Summe] [KapitelBezeichnung]</nowiki>
 
 
 
;Lösung 1:
 
:In der Bezeichnung das einfache Anführungszeichen '''<big><nowiki>'</nowiki></big>''' durch '''<big><nowiki>´</nowiki></big>''' ("Akut-Akzent", "Accent aigu") ersetzen.
 
 
 
;Lösung 2:
 
:Im Report aus dem einen Memofeld mit dem Inhalt:
 
 
 
[@Summe] [KapitelBezeichnung]
 
 
 
:'''zwei''' Memofelder machen. Im ersten steht nur
 
 
 
[@Summe]
 
 
 
:und im zweiten nur
 
 
 
[KapitelBezeichnung]
 
 
 
:Die beiden Memo's  stehen direkt hintereinander in der Zeile.
 
 
 
=== Etikettenformular: Es wird immer nur ein Etikett gedruckt ===
 
 
 
 
 
Es wurde ein Etikettenformular erstellt. Druckt man ein einzelnes Etikett, ist alles ok. Will man aber mehrere Etiketten z.B. über den Serien-Druck drucken, kommt immer nur '''ein''' Etikett heraus.
 
 
 
Die '''[[FastReport Etikettenformular: Es wird nur Ein Etikett gedruckt|Ursache und die Lösung werden hier beschrieben]]'''.
 
 
 
 
 
 
 
=== Ich kann die Sortierung beim Drucken einer Ladeliste nicht ändern! ===
 
 
 
;Problem:
 
:Wenn man im Druckfenster die Option "Sortierung" ändern will, reagiert das Programm darauf nicht, die Auswahl ist nicht möglich!
 
 
 
;Lösung
 
:It's not an Bug, it's a feature!
 
 
 
Das ist unter bestimmten Umständen gewollt so und wird '''[[GevitasFormPrint Sortieren geht nicht|hier]]''' beschrieben.
 
 
 
 
 
=== Lieferschein wird übereinander gedruckt ===
 
 
 
Bei einem Lieferschein wird die 2. Seite über die die erste Seite gedruckt. In diesem speziellen Fall wurde die vorhandene Verbindung zum Basis-Report entfernt. Die Adresse stand in einem Child-Band des Seitenkopfes und sollte per Code ab der 2. Seite unterdrückt werden:
 
 
 
procedure BasisSeitenkopfChildOnBeforePrint(Sender: TfrxComponent);
 
begin
 
  if <Page> > 1 then
 
    BasisSeitenkopfChild.Visible := False
 
  else
 
    BasisSeitenkopfChild.Visible := True;
 
end;
 
 
 
Das Problem wurde gelöst, indem die Adresse in einem "normalen" MasterData-Band untergebracht wurde, das Child-Band gelöscht wurde und der Code entsprechend geändert wurde.
 
 
 
 
 
=== Prüfprotokoll wird nicht gedruckt ===
 
 
 
Wenn ein Report für die Prüfsoftware Prüfsoftware "PMKD-2500" oder "SafetyTest" erstellt wurde, enthält er eine Master-Detail-Beziehung. Das bedeutet, es gibt ein Band ("Master") für die allgemeinen Testdaten (Tabelle "Test") und ein Band mit den Details (Tabelle "TestDetails").
 
 
 
Damit der Kopf (Master) angezeigt wird, obwohl es '''keine Details-Daten''' gibt, muss man im Report im Master-Band die Option
 
 
 
[[Datei:FastReport_TPS_Pruefprotokoll_MasterBand_Option.png]]
 
 
 
einschalten.
 
 
 
Ohne diese Option kommt auf dem Report nur die Überschrift, sonst nix!
 
 
 
Siehe auch [[Erstellen eines Prüfprotokolls für TPS]].
 
  
 
== Export ==
 
== Export ==
  
=== Export PDF ===
+
* [[FastReport Tipps und Tricks: Export#Export PDF|Export PDF]]
 
+
* [[FastReport Tipps und Tricks: Export#Exportierte PDF-Dateien sind sehr gross|Exportierte PDF-Dateien sind sehr gross]]
Reports können auch im Format '''PDF/A''' exportiert werden.
+
* [[FastReport Tipps und Tricks: Export#Windows-Explorer mit dem Formular-Ordner öffnen|Windows-Explorer mit dem Formular-Ordner öffnen]] im Druck-Fenster
 
 
[//de.wikipedia.org/wiki/PDF/A Einzelheiten]
 
 
 
 
 
=== Exportierte PDF-Dateien sind sehr gross ===
 
 
 
Wenn exportierte PDF-Dateien sehr gross werden (ca. 2 MB, obwohl nicht viel Text drin steht), kann das daran liegen, dass im Report formatierter Text enthalten ist, z.B. mehrere Seite AGB's.
 
 
 
Formatierter Text kann sein:
 
 
 
* RFT-Felder (Rich Text Format)
 
* Normale Memo-Felder (Textfelder), bei denen die Eigenschaft "AllowHTMLTags" eingeschaltet ist (True)
 
 
 
Formatierter Text wird beim Export von FastReport in '''Grafiken''' umgewandelt! Ein Text über mehrere Seiten kann so mehrere hochauflösende Grafik-Element beinhalten.
 
 
 
;Lösung:
 
:Die Eigenschaft "AllowHTMLTags" ausschalten (False)
 
:Formatierungen (z.B. Fettschrift bei Überschriften) über die Schriftart-Eigenschaft von normalen Textfeldern festlegen. Also für die Überschrift ein eigenes Memofeld verwenden, den eigentlichen langen Text in ein weiteres, normales Memofeld schreiben.
 
 
 
Im konkreten Fall ging die Dateigröße von ca. 2,2 MB auf ca. 600 KB zurück.
 
 
 
== Im Druck-Fenster ==
 
  
=== Windows-Explorer mit dem Formular-Ordner öffnen ===
+
* '''<big>[[FastReport Tipps und Tricks: Export|Zum kompletten Beitrag]]</big>'''
  
Wenn man schnell den Windows-Explorer mit dem eingestellten Formular-Ordner öffnen will, doppelklickt man einfach auf das Auswahlfeld im Druck-Fenster.
 
  
Wenn man dort z.B. eine Report-Datei umbenennt, muss man auf den kleinen Refresh-Button neben dem Auswahlfeld klicken. Damit wird die Auswahlliste des Feldes aktualisiert.
 
  
  
Zeile 1.090: Zeile 174:
  
 
* [//youtu.be/5krqu5oSuGU Video FastReport Teil 10: Vererbung, Erstellen und Verwenden eines Basis-Reports]
 
* [//youtu.be/5krqu5oSuGU Video FastReport Teil 10: Vererbung, Erstellen und Verwenden eines Basis-Reports]
 +
 +
* [//youtu.be/KwOBk12rTNg Video FastReport Teil 16: Ladeliste nach Lagerort und Artikeln]
 +
 +
* [//youtu.be/tf2W3cML7Xg Video FastReport: Artikel-Report mit Bildern]
  
 
* [//www.fast-report.com/de/ Homepage von FastReport]
 
* [//www.fast-report.com/de/ Homepage von FastReport]

Aktuelle Version vom 5. Mai 2021, 12:23 Uhr

Hier gibt es Tipps und Tricks für das Erstellen von Reports mit FastReport©, die im Alltag hilfreich sein können. Sie sind aus der Praxis entstanden. Im Laufe der Erfahrung mit FastReport© haben sich einige Themen angesammelt, so dass die Tipps und Tricks auf mehrere Seiten aufgeteilt wurden:


1 Eingebaute Funktionen und Variablen

2 Seiten-Ansteuerung


3 Bänder

4 Formatierung

5 Variablen


6 Verwendung von Feldern

7 Dialoge im Report


8 Sonstiges

9 Fehler


  • Programm hängt sich scheinbar auf:
Bei Drucken in ein PDF-Programm (also als Drucker ist z.B. PDF-Writer) über die Vorschau hängst sich das Programm scheinbar auf.
Ursache
Im PDF-Programm ist ein Dialog "Speichern unter" geöffnet. Dieses muss geschlossen werden!

10 Export




11 Links