Donnerstag, 23. August 2012

Fehlersuche in FastReport2-Reports: Ungültige Variant-Typumwandlung

Ungültige Variant-Typumwandlung

Weil ich soviel Zeit mit der Suche nach blöden Fehlern verbringe, komme ich einfach nicht mehr dazu, den Blog zu füllen. Als Warnung an Alle die sich noch mit den "alten" FR2-Reports in AvERP beschäftigen müssen und zur Info für die weite Welt, die Problemlösungen auch außerhalb des AvERP-Forums sucht auch hier mein letzter Beitrag im AvERP-Forum

Mein meistgehaßter Fehler in FR2-Formularen. Twisted Evil
Leider kann man keine lokalen Variablen mit festem Typ in der Memo-Feld Logik vereinbaren.
Und wenn der AvERP-Pascal Interpreter ein Feld erst als Integer betrachtet
und nach Berechnung ein Float braucht, dann knallt es irgendwann hinterrücks mitten im Ausdruck.
Andrer Fall - Feld ist Null - dann kann die automatische Typumwandlung nur schiefgehen.

Generelles Vorgehen:
Möglichst in kleinen Steps Änderungen in der Pascal-Logik vornehmen und auf Daten testen, die möglichst vollständig alle Konstellationen abdecken, dann ist die letzte Änderung die Verdächtige.
oder:
Gleich nach FastReport4 umformen und lokale Variablen mit dem richtigen Typ vereinbaren - ist meist effektiver als stundenlanges Fehlersuchen und vermeidet das Problem in der Zukunft.
Außerdem wird AvERP 5... wahrscheinlich keine FR2-Reports mehr unterstützen. Question

WorkAround in FR2:

Bei Berechnungen mit Werten die Leer sind, erst Integer und dann zu Float berechnet werden: Float über *1.0 erzwingen.

Null-Wert in Datumsfeld:
Druck in Abhängigkeit von globaler Variable.
Dem Pascal-Interpreter die Leerstring-Behandlung überlassen
und nur wenn nicht gewünscht, das Feld über Memo.Clear(); löschen: 





Rechnen mit LEERen Datenfeldern:

Über faufm := [LEER] + 0.0;    den Wert 0.0 erzwingen.
Dann klappt das +Plus+       in sl + faufm, 
sonst wird versucht den Operator "+" als String-Concat  1.000,000 ||'' interpretiert.

Ähnliches Problem, wenn faufm = '-2'