Ok, Stefan hat angefangen, dann will ich mich auch noch in die Grundsatzdiskussion einklinken.
Was Du derzeit machst, nenne ich die "BaFöG-Amt-Validierung". Warum?
Zu meinen Studienzeiten verhielt es sich mit BaFöG-Anträgen so:
Man füllt einen mega-langen Antrag aus und schickt den ein (damals kam der Postbote noch zu Pferd).
Nach einer nicht länger zu bezeichnenden Wartezeit kommt der Antrag mit dem Vermerk zurück:
"Angabe zum Einkommen des Vaters von Oktober fehlt".
Also nimmt man den Antrag und reicht ihn nun mit den gewünschten Angaben nochmals ein. Nach erneuter Wartezeit kommt der Antrag wieder zurück:
"Angabe zum Einkommen des Vaters von November fehlt".
Dieses Spiel konnte sich dann lange hinziehen, manchmal meinte ich, dass das BaFöG, was dann irgendwann tatsächlich ausgezahlt wurde, gerade mal die Portokosten für die dauernde Nachsenderei irgendwelcher Belege ausgeglichen hat.
Was will ich damit sagen? Hätten die damals den Antrag komplett durchgesehen und eine Liste aller fehlenden Unterlagen zurückgeschickt, hätte man den Prozess (möglicherweise unnötig) beschleunigen können.
Genauso verhält es sich mit einer Validierung im Stil
@If (Feld1 = ""; @Return (@Prompt ([OK]; "Fehler"; "Feld 1 ist leer"); "");
@If (Feld2 = ""; @Return (@Prompt ([OK]; "Fehler"; "Feld 2 ist leer"); "");
usw.
Der Benutzer erstellt ein Dokument und will es speichern. Es erscheint die Meldung, Feld 1 sei leer. Ok, schnell ausgefüllt und erneut gespeichert. Nun fehlt Feld 2, usw.. Wenn er dann irgendwann an eine Fehlermeldung kommt, zu der er andere Informationen benötigt, schlimmstenfalls welche, die er den gleichen Tag nicht beschaffen kann, wird vermutlich der Bildschirm das Gebäude durch das Fenster verlassen. Falls Du in der Nähe bist, wirst Du ggf. dem Schirm folgen.
Viel besser finde ich, wenn beim Speichern eine Liste sämtlicher Fehler aufgelistet wird, denn dann weiß der Benutzer, was er insgesamt benötigt. Natürlich kann es geschachtelte Fehlermeldungen geben, die abhängig von anderen Eingaben sind, das darf und muss natürlich berücksichtigt werden.
Die Standardvalidierung in den Notesfeldern arbeitet genau nach diesem Prinzip, erste Fehlermeldung, gleich Mittelfinger hoch, Ende des Prozesses. Deshalb habe ich die in diesem Jahrtausend noch nicht benutzt und werde es wohl auch nie wieder tun.
Am besten geht das natürlich mit Script, aber in Formel wäre es auch möglich. Wobei ich mir nicht sicher bin, ob ein @Return im Querysave das Speichern tatsächlich verhindert. Du hast das zwar geschrieben, wirklich glauben will ich das aber nicht. Im Script setzt man Continue auf False, dann wird nicht gespeichert.
Eine Formel könnte so aussehen (nicht probiert, nur so hingeschrieben)
_msg := ""
@If (Feld1 = ""; @Set (_msg; _msg : "Feld 1 ist leer"); "");
@If (Feld2 = ""; @Set (_msg; _msg : "Feld 2 ist leer"); "");
@If (_msg != ""; @Return (@Prompt ([OK]; "Folgende Fehler sind aufgetreten"; @Implode (@Trim (_msg); @Newline))); "")
Aber unbedingt prüfen, ob @Return das Speichern verhindert (oder besser, gleich in Script schreiben, auch wenn Du es noch nicht kannst, dann ist das der ideale Zeitpunkt, damit anzufangen).