FastReport Tipps und Tricks: Fehler: Unterschied zwischen den Versionen
(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. | ||
− | |||
− | |||
− | + | === 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: | |
− | + | ||
− | + | '''<nowiki>if <Positionen."TextPosition"> = '' then</nowiki>''' | |
− | + | <nowiki>ChildGroupHeader1.Visible := False</nowiki> | |
− | + | <nowiki>else</nowiki> | |
− | + | <nowiki>ChildGroupHeader1.Visible := True;</nowiki> | |
− | + | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
Version vom 14. Februar 2018, 22:48 Uhr
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 Ich kann die Sortierung beim Drucken einer Ladeliste nicht ändern!
- 2.8 Lieferschein wird übereinander gedruckt
- 2.9 Prüfprotokoll wird nicht gedruckt
- 3 Fehlermeldungen
- 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 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
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
- 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;