FastReport Tipps und Tricks: Fehler: Unterschied zwischen den Versionen

Aus GEVITAS
Wechseln zu: Navigation, Suche
(Die Seite wurde neu angelegt: „== Fehler == Wie bei jedem umfangreichen Software-System gibt es auch bei der Report-Erstellung mit FastReport© jede Menge Fehler-Möglichkeiten. Unsere…“)
 
Zeile 9: Zeile 9:
 
* [[FastReport Fehler, Ursachen, Behebung]]
 
* [[FastReport Fehler, Ursachen, Behebung]]
  
 +
 +
== Etwas tut nicht das erwartete ==
  
  
Zeile 76: Zeile 78:
  
  
 +
 +
 +
=== 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]].
 +
 +
 +
== Fehlermeldungen ==
  
 
=== Fehlermeldung "Alternativ nicht gefunden" in Rechnung ===
 
=== Fehlermeldung "Alternativ nicht gefunden" in Rechnung ===
Zeile 162: Zeile 217:
  
 
:Die beiden Memo's  stehen direkt hintereinander in der Zeile.
 
: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.
+
=== Fehlermeldung unter mySQL: "Variante des Typs (UnicodeString) konnte nicht in Typ (Double) konvertiert werden ===
  
Die '''[[FastReport Etikettenformular: Es wird nur Ein Etikett gedruckt|Ursache und die Lösung werden hier beschrieben]]'''.
+
Unter mySQL wird diese Fehlermeldung beim Ausführen des Reports angezeigt:
  
 +
Variante des Typs (UnicodeString) konnte nicht in Typ (Double) konvertiert werden
  
 +
;Ursache
  
=== Ich kann die Sortierung beim Drucken einer Ladeliste nicht ändern! ===
+
Ursache ist dieser Code:
  
;Problem:
+
:Wenn man im Druckfenster die Option "Sortierung" ändern will, reagiert das Programm darauf nicht, die Auswahl ist nicht möglich!
+
  '''<nowiki>if <Positionen."TextPosition"> = '' then</nowiki>'''
 
+
    <nowiki>ChildGroupHeader1.Visible := False</nowiki>
;Lösung
+
  <nowiki>else</nowiki>
:It's not an Bug, it's a feature!
+
    <nowiki>ChildGroupHeader1.Visible := True;</nowiki>
 
+
   
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]].
 
  
  

Version vom 14. Februar 2018, 22:48 Uhr

1 Fehler

Wie bei jedem umfangreichen Software-System gibt es auch bei der Report-Erstellung mit FastReport© jede Menge Fehler-Möglichkeiten.

Unserer Erfahrung nach die allermeisten Anwender-Fehler, nur selten ist FastReport schuld.

Einzelheiten werden hier beschrieben:


2 Etwas tut nicht das erwartete

2.1 Tabelle wird im Report nicht angezeigt

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.

Wenn eine Tabelle nicht ausgewählt wird, kann es auch zu einer Fehlermeldung kommen:

Fehler im Ausdruck ´Tabellenname."Feld": Identifier expected

In diesem Fall wird der Report nicht ausgeführt. Anstelle der Daten kommen die Feldnamen des Reports oder auch gar nichts!


2.2 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.


2.3 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!


2.4 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!
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.
Lösung
Auf das Feld doppelklicken. Das Register "Highlight" öffnen und das "Highlight" löschen.

2.5 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:

Stand: [Date]    Seite [Page] von [TotalPages]

Beispiel:

FastReport Bsp Zweipass 01.png

Warum zeigt [TotalPages] immer 0 statt der Anzahl der Seiten?

Grund
Damit [TotalPages] 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⇒Optionen klicken. Dann schaltet man die Option Zweipass ein:

FastReport Bsp Zweipass 02.png

Das Ergebnis:

FastReport Bsp Zweipass 03.png



2.6 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 Ursache und die Lösung werden hier beschrieben.


2.7 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 hier beschrieben.


2.8 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.


2.9 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

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.


3 Fehlermeldungen

3.1 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:

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!


3.2 Fehlermeldung "Fehler im Ausdruck';' expected"

Wenn ein ähnliche Meldung wie diese auftritt...

FastReport Fehler Ausdruck erwartet 01.png

...so kann die Ursache sein, dass in der Artikelbezeichnung die Zeichen

[ oder ]

enthalten sind:

FastReport Fehler Ausdruck erwartet 02.png


Diese Zeichen werden in der Programmiersprache von FastReport© 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:


// ExpressionDelimiters legt die Zeichen fest, die für Ausdrücke benutzt werden. Standard: [,]
// Wenn in der Artikel-Bezeichnung eckige Klammern vorkommen können, kommt es zu einer Fehlermeldung.
// Deshalb:                           
MemoPositionenBezeichnung.ExpressionDelimiters := '{,}';

MemoPositionenBezeichnung.Lines.Add( <Positionen."Bezeichnung"> );

, z.B.

 ‹ ›

(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!

3.3 Fehlermeldung "Memo XX: Fehler im Ausdruck xxxx"

Beim Ausführen eines Reports wird folgende Fehlermeldung angezeigt:

Folgende(r) Fehler trat(en) auf:
Memo21: Fehler im Ausdruck "...L'Acoustics...": ';' expected
Problem
In der Bezeichnung ist ein einfaches Anführungszeichen ' enthalten.
Im Report steht in diesem Memo der Inhalt:
[@Summe] [KapitelBezeichnung]
Lösung 1
In der Bezeichnung das einfache Anführungszeichen ' durch ´ ("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.


3.4 Fehlermeldung unter mySQL: "Variante des Typs (UnicodeString) konnte nicht in Typ (Double) konvertiert werden

Unter mySQL wird diese Fehlermeldung beim Ausführen des Reports angezeigt:

Variante des Typs (UnicodeString) konnte nicht in Typ (Double) konvertiert werden
Ursache

Ursache ist dieser Code:


 if <Positionen."TextPosition"> = '' then
   ChildGroupHeader1.Visible := False
 else
   ChildGroupHeader1.Visible := True;


4 Links