FastReport Tipps und Tricks: Fehler

Aus GEVITAS
Wechseln zu: Navigation, Suche

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 Etikettenformular: Drucker druckt auch Text als Barcode

Wenn der Etiketten-Drucker druckt auch den Text als Barcode druckt, sollte man in den Drucker-Einstellungen (am lokalen Rechner) prüfen, ob "jemand" eine Font-Ersetzung im Druckertreiber eingestellt hat. Manche Drucker erlauben es, eine beliebige Schriftart (z.B. "Arial") auf eine eingebaute Schriftart "umzubiegen". Das ermöglich den Barcode-Druck, auch wenn man keinen Barcode-Font hat (was man unter FastReport auch nicht mehr benötigt!).

2.8 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.9 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.10 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 (empfohlen)
Im Designer das Feld doppelklicken und den Inhalt ändern
von
[@Summe] [KapitelBezeichnung]
nach
[@Summe] [Positionen."KapitelBezeichnung"]
Warum?
Im Design auf der Seite "Page1", auf der die Bänder und Felder platziert sind, ist dem zugehörigen Memo-Feld das Dataset "Positionen" zugeordnet worden.
Wahrscheinlich wurde es früher mal auf die Seite gezogen, ohne die Variable "@Summe".
Da funktioniert auch alles!
Wenn man jetzt aber nachträglich in das Memo ein neues Feld (die Variable "@Summe") hinzufügt, stimmt die Syntax in dem Memo-Feld nicht mehr.
Wenn man "KapitelBezeichnung" entfernt und neu einfügt, wird die richtige Syntax verwendet!



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.
Lösung 3 - nicht unbedingt empfehlenswert
In der Bezeichnung das einfache Anführungszeichen ' durch ´ ("Akut-Akzent", "Accent aigu") ersetzen.

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

Unter bestimmten Bedingungen 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;

Um festzustellen, dass ein Textfeld leer ist, muss dann dieser Code verwendet werden:

 if Length( <Positionen."TextPosition"> ) = 0 then
   ChildGroupHeader1.Visible := False
 else
   ChildGroupHeader1.Visible := True;

Es wird also auf die Länge = 0 des Textes geprüft.

Damit ein Report universell verwendet werden kann, empfiehlt sich diese Methode auch unter anderen Datenbank-Maschinen!


ACHTUNG!
Diese Fehlermeldung erscheint auch, wenn Sie die Klammern falsch setzen, z.B. so:
  • Falsch:
if Length( <AuftragsKopf."Kopftext"> = 0 ) then
  • Richtig:
if Length( <AuftragsKopf."Kopftext"> ) = 0 then


3.5 Bei der Vorschau hängt sich das Programm an manchen Rechner auf

Dieser Effekt trat auf, weil eine Formular-Report kopiert und abgeändert wurde:

  • Der Original-Report wurde nach Kapiteln sortiert und gruppiert.
  • In der Kopie wurde nach Lagerort sortiert und gruppiert.

In Code der der Gruppen-Überschrift befand sich dieser Code-Abschnitt:


procedure GroupHeaderKapitelOnBeforePrint(Sender: TfrxComponent);
begin
  // Wenn die Option "Jedes Kapitel auf neue Seite" im Druckfenster eingeschaltet ist.
  // Aber - Nicht bei dem 1. Kapitel!
  //      - Nicht wenn der Bereich unsichtbar ist! 

  if ( <KapitelNeueSeite> = 1 )   and ( <Positionen."Kapitel">  >  1 )   and ( GroupHeaderKapitel.Visible ) then
    Engine.NewPage;                       // Neue Seite, Seitenkopf usw. drucken

end;


Weil die Positionen nun nach Lagerort sortiert wurden, kam irgendein Kapitel als erstes, entsprechend den Lagerorten.

<Positionen."Kapitel"> war also > 1 , also wurde ein Seitenwechsel ausgelöst. Bei den folgenden Positionen wiederholt sich dieser Vorgang, so dass der Report aus tausenden von Seiten bestand.

Der Code, der für die Kapitel-Sortierung gemacht war, muss gelöscht werden!


3.6 Diverse Fehlermeldungen beim Ausführen des Reports

Diverse Fehlermeldungen beim Ausführen des Reports, wenn man im Designer den Report öffnen, fehlt die Page1-Seite!

Mögliche Ursache
Im Report ist u.U. die Angabe „BasisReport“ falsch. Auszug aus der report-Datei (fr3):
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<inherited ParentReport="..\BasisReport_01a.fr3"
Richtig ist
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<inherited ParentReport="..\BasisReport_01.fr3"
Wie kommt man da drauf?
Wenn man im Designer den Report öffnen, fehlt die Page1-Seite.
Das ist ein Zeichen dafür, dass der (vorher eingelesene) BasisReport nicht geladen werden konnte.
Den Report kann man über den Designer nicht editieren!
Also muss man die Reportdatei über einen Editor öffnen.
Wie kommt man da hin?
Wir verwenden den Editor Notepad++©, man aber mit jedem Texteditor (Nicht Word© !!!) die Reportdateien öffnen.
FR3-Dateien sind im XML-Format.

4 Links