Eingabe in einem Tabellen-Formular ignorieren

8. Oktober 2011 19:44

Hallo!

Ich habe das Problem, daß in einer Form bestimmte Eingaben in eine TextBox, die mit <Enter> abgeschlossen werden, ignoriert werden sollen. Schön wäre es, wenn ich abhängig von der Eingabe Daten an anderer Stelle ändern könnte. Auf gar keinen Fall soll sich der Cursor aus dem Feld bewegen oder eine Fehlermeldung erscheinen. Dies müsste doch im OnAfterInput-Trigger machbar sein, oder? Vielleicht mit der Validate-Funktion, deren Benutzung und tiefere Bedeutung mir auch nach 15-maliger Lektüre der Hilfe noch verschlossen ist.

Vielen Dank für jegliche Antworten.

Re: Eingabe in einem Tabellen-Formular ignorieren

8. Oktober 2011 20:15

Vielleicht wäre ein anschauliches Beispiel praktischer.

So, wie ich das interpretiere:

navisionf hat geschrieben:Dies müsste doch im OnAfterInput-Trigger machbar sein, oder?

Kann funktionieren; habe ich ehrlich gesagt für so etwas noch nie verwendet. Ich habe da eher den OnValidate oder OnFormat-Trigger im "Verdacht".

Vielleicht mit der Validate-Funktion, deren Benutzung und tiefere Bedeutung mir auch nach 15-maliger Lektüre der Hilfe noch verschlossen ist.
Den gleichen Trigger gibt es auch auf Tabellenebene. Validierung = Auswertung, d.h. die Trigger werden ausgelöst, wenn die Änderung eines Feldwertes abgeschlossen ist, sodass diese Änderung nun geprüft und ggf. rückgängig gemacht werden kann.
Beispiel: Wenn du in einer Auftragszeile eine Artikelnr. eingibst, steht danach im Feld Beschreibung die Artikelbeschreibung. Dies passiert, weil im Nr.-Feld der Tabelle im OnValidate-Trigger entsprechend ausprogrammiert ist.

Aber zurück zur Anforderung: Wenn du in in dieses Feld Nr. etwas eingibst und diese Eingabe soll einfach verschwinden, dann schreib in den OnValidate-Trigger:
Code:
CLEAR(Nr.);


Verwende auf keinen Fall den OnAfterValidate-Trigger der Form. Der wird nämlich aufgerufen, nachdem der OnValidate-Trigger der Tabelle durchlaufen worden ist - und zwar mit vollständigen Feldinhalt, den du ja eigentlich zurücknehmen möchtest.

Re: Eingabe in einem Tabellen-Formular ignorieren

8. Oktober 2011 21:02

Im OnAfterInput-Trigger
Code:
Text := '';

löscht alle Eingaben sofort. "Text" ist in diesem Fall ja der Funktionsparameter der als "Call by reference" an den Trigger übergeben wird.

Beliebig ändern und ersetzen kann man die Eingaben hier natürlich auch :mrgreen:.
Code:
Text := 'Du kommst hier nicht rein ;-)';

Re: Eingabe in einem Tabellen-Formular ignorieren

8. Oktober 2011 21:34

Hi Natalie,

immer im Dienst, auch am Samstag abend noch? :-)

Der konkrete Einsatz ist das Erfassen von Packlisten. Die einzelnen Artikel werden mit EAN-Code eingescannt. Im OnAfterInput-Trigger wird dann der EAN-Code in die eigentliche Artikelnummer verwandelt. Nun ist es aber natürlich so, daß eine Sendung aus mehreren Paketen bestehen kann. Ich habe mir überlegt, daß es praktisch wäre, daß man einfach als Artikelnummer z.B. ein P eingibt und Navision die Paketnummer ändert. Die Form muß nach der Verarbeitung dieses P 'verschlucken' und wieder bereit sein für die nächste Artikelnummer. Mit der Stückzahl soll es ähnlich gehandhabt werden. Auf diese Weise erreicht man, daß es nur ein einziges Feld in der Form gibt, das focusable ist, nämlich die Artikelnummer, mit der man aber alles nötige erfassen kann.

Das funktioniert natürlich nur, wenn die Prüfung auf eine gültige Artikelnummer in der Tabelle noch nicht greift, da ja P keine gültige Artikelnummer ist. Die Datenmanipulation muss also geschehen, bevor der Record in der Tabelle steht und wohl auch, bevor der OnValidate-Trigger abgearbeitet wird.

Grüße
Uwe

Re: Eingabe in einem Tabellen-Formular ignorieren

8. Oktober 2011 21:45

navisionf hat geschrieben:Hi Natalie,

immer im Dienst, auch am Samstag abend noch? :-)

Dienst? Hm, wenn es mir so vorkommen würde, müsste ich wohl Geld dafür nehmen ;-)

Das funktioniert natürlich nur, wenn die Prüfung auf eine gültige Artikelnummer in der Tabelle noch nicht greift, da ja P keine gültige Artikelnummer ist. Die Datenmanipulation muss also geschehen, bevor der Record in der Tabelle steht und wohl auch, bevor der OnValidate-Trigger abgearbeitet wird

Wenn ich mich nicht irre, wird der Form-OnValidate-Trigger vorher ausgeführt (anders als wie gesagt, der OnAfterValidate). Du kannst diesen also nutzen, genau wie OnAfterInput.

Probiers doch einfach mal aus ;-)

Re: Eingabe in einem Tabellen-Formular ignorieren

8. Oktober 2011 21:54

Kowa hat geschrieben:Im OnAfterInput-Trigger
Code:
Text := '';

löscht alle Eingaben sofort. "Text" ist in diesem Fall ja der Funktionsparameter der als "Call by reference" an den Trigger übergeben wird.

Beliebig ändern und ersetzen kann man die Eingaben hier natürlich auch :mrgreen:.
Code:
Text := 'Du kommst hier nicht rein ;-)';


Ja, das funktioniert auch wunderbar, nur bin ich dann anschließend in der nächsten Zeie und der unvollständige Datensatz ist in der Tabelle. Oder es kommt gar eine Fehlermeldung.