Wie oben beschrieben ist der ComputeWithForm ein kleines "Zieselchen" wie wir hier bei uns sagen: Er reagiert extrem empfindlich auf falsche Feldwerte / Datentypen und bricht ab, wo ein manuelles "F9" im Dokument einfach die Werte korrigiert.
Leider sagt uns der ComputeWithForm auch bei RaiseError = True nur, dass ein Fehler aufgetreten ist, nicht aber, wo genau dieser Fehler aufgetreten ist.
Um das herauszufinden, muss man sich eines kleinen Tricks bedienen:
Bricht ein ComputeWithForm ab, dann werden alle Felder, die sich UNTERHALB des Fehler- verursachenden Feldes befinden, nicht mehr berechnet.
Man tut also folgendes: Man erstellt in der Maske ein Feld, Typ Text, berechnet, Formel "Bis hier OK" (o.ä.) und stellt dieses ganz nach oben (als Referenz, dass die Formel korrekt ist).
Nach dem Script- Lauf prüft man, ob tatsächlich "Bis hier OK" im Feld steht.
Ist das der Fall, dann verschiebt man das Feld in der Maske schrittweise nach unten. irgendwann wird das Feld plötzlich leer sein nach dem Script- Lauf. Dann weiss man, dass direkt überhalb des Feldes das Feld ist, was den ComputewithForm abbrechen lässt. In dieses Feld baut man jetzt einfach eine entsprechende Fehler- Routine ein, und VOILA: Der ComputeWithForm läuft durch...
Mögliche Fehlerursachen sind:
- Ein Feld, dass als Datum definiert ist, aber nur den TEXT eines Datums enthält (F9 wandelt das automatisch um, ComputeWithForm bricht ab).
Lösung: Einfach in die Formel (bei berechnet) oder in die Eingabeumsetzung( bei Bearbeitet) ne Formel ala:
x := @Date( FeldName );
@If( @IsError( x ) ; "" ; x )
- Das selbe gilt für Zahlenfelder: Steht dort z.B. ein Text drin, der als Zahl interpretiert werden KÖNNTE, dann tut das F9 auch... ComputeWithForm bricht mit Fehler ab. Das passiert z.B. dann, wenn man Felder per Script füllt, und nicht bemerkt, dass man einen Textwert in ein Zahlenfeld schreibt...
Auch hier hilft wieder eine ähnliche Formel:
x := @TextToNumber( FeldName );
@If( @IsNumber( FeldName ) ; FeldName ; @IsError( x ) ; "" ; x )
So kriegt man den ComputeWithForm dazu, alles korrekt durchzuführen.
HTH
Tode