FastReport Tipps und Tricks: Fehler
Inhaltsverzeichnis
- 1 Fehler
- 2 Etwas tut nicht das erwartete
- 2.1 Tabelle wird im Report nicht angezeigt
- 2.2 Band wird nicht gedruckt, obwohl Daten vorhanden sind
- 2.3 Detail-Band mit Auftragspositionen wird mehrfach gedruckt, obwohl nur ein Datensatz vorhanden ist
- 2.4 Schrift-Farbe eines Feldes wird im Editor angezeigt, in der Vorschau/im Druck nicht
- 2.5 Anzahl Seitennummern ist 0
- 2.6 Etikettenformular: Es wird immer nur ein Etikett gedruckt
- 2.7 Etikettenformular: Drucker druckt auch Text als Barcode
- 2.8 Ich kann die Sortierung beim Drucken einer Ladeliste nicht ändern!
- 2.9 Lieferschein wird übereinander gedruckt
- 2.10 Prüfprotokoll wird nicht gedruckt
- 3 Fehlermeldungen
- 3.1 Fehlermeldung "Alternativ nicht gefunden" in Rechnung
- 3.2 Fehlermeldung "Fehler im Ausdruck';' expected"
- 3.3 Fehlermeldung "Memo XX: Fehler im Ausdruck xxxx"
- 3.4 Fehlermeldung: "Variante des Typs (UnicodeString) konnte nicht in Typ (Double) konvertiert werden
- 3.5 Bei der Vorschau hängt sich das Programm an manchen Rechner auf
- 3.6 Diverse Fehlermeldungen beim Ausführen des Reports
- 4 Links
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:
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:
- Das Ergebnis:
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
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:
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...
...so kann die Ursache sein, dass in der Artikelbezeichnung die Zeichen
[ oder ]
enthalten sind:
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.