Filter führt zu Validate

13. Juni 2014 11:26

Hallo Zusammen,

kann mir jemand erklären, warum ich bei einem "Leer" Filter (also ' ') in der Tabelle Bin Content (auf Item. No.) folgenden Fehler bekomme?

---------------------------
Microsoft Dynamics NAV Classic
---------------------------
Sie können diesen Artikelnr. nicht bearbeiten, da dieser Lagerplatzinhalt Artikel enthält.
---------------------------
OK
---------------------------

Wenn ich das mit dem Debugger mitgehe will NAV tatsächlich durch den OnValidate des Feldes Item No. - ABER WARUM?
Ich setze doch lediglich einen Filter?

Bin verwirrt!

Vielen Dank für jede Art von Tipp!

Grüße

Oliver

Re: Filter führt zu Validate

13. Juni 2014 11:31

Herzlich Willkommen bei uns!

moag hat geschrieben:Wenn ich das mit dem Debugger mitgehe will NAV tatsächlich durch den OnValidate des Feldes Item No.

Was hat der Debugger vorher aufgerufen? Eventuell Code im OnAfterGetRecord (welcher bei Filtersetzung erneut durchlaufen wird)?

Re: Filter führt zu Validate

13. Juni 2014 11:45

Hi Natalie und vielen Dank!

ich bin direkt auf der Tabelle 7302 - hier finde ich keine OnAfterGetRecord (oder? Neee da is keiner..)

Gruß

Oliver

Nachtrag: Da die Tabelle "Orginal" ist müsste diese Verhalten eigentlich auch in anderen NAV Versionen nachzustellen sein.

Re: Filter führt zu Validate

13. Juni 2014 11:50

Wird ein eindeutiger Filter auf ein Feld des Primärschlüssels gesetzt, so füllt NAV das Feld mit dem Filterwert, welches dann den OnValidate des Feldes ausführt.
Das gleiche macht NAV auch bei Nicht-Primärschlüsselfeldern, wenn das Property "PopulateAllFields" auf Ja gesetzt ist.

Dies gilt nicht, wenn die Filterbedingung einen Bereich definiert ('>xyz' bzw. 'abc..def')

Re: Filter führt zu Validate

13. Juni 2014 12:11

Hallo Timo und Danke!

Das ist also die Erklärung, auch wenn mir die Logik dahinter irgendwie nicht klar wird (wieso wird ein Feld gefüllt beim Filtern..) aber seis drum, lässt sich ja wahrscheinlich nicht ändern.
Nur - wie bekomme ich meine SubForm auf die Bin Content in meiner Umbuchungsform nun zum laufen die über

SubFormLink = "Item No.=FIELD(Item No.)"

verknüpft ist und bei jeder "neuen Zeile in dem Buchungsblatt" eben diesen Fehler wirft.
In der Bin Content wird bei durchlaufen des Item No. Validates ja folgende Funktion gezündet die dann den Fehler wirft

CheckManualChange(FIELDCAPTION("Item No."))

xRec.CALCFIELDS(
Quantity,"Pos. Adjmt. Qty.","Put-away Qty.",
"Neg. Adjmt. Qty.","Pick Qty.");
IF (xRec.Quantity <> 0) THEN
ERROR(Text007,CaptionField,TABLECAPTION);
IF (xRec."Pos. Adjmt. Qty." <> 0) OR (xRec."Put-away Qty." <> 0) OR
(xRec."Neg. Adjmt. Qty." <> 0) OR (xRec."Pick Qty." <> 0)
THEN
ERROR(Text008,CaptionField,TABLECAPTION);


Kann ich denn erkennen ob das aktuelle Validate ein "eindeutiger Filter '' ist und dementsprechend nicht geprüft werden soll?

Nochmal Danke!

Gruß

Oliver

Re: Filter führt zu Validate

13. Juni 2014 13:14

moag hat geschrieben:Das ist also die Erklärung, auch wenn mir die Logik dahinter irgendwie nicht klar wird (wieso wird ein Feld gefüllt beim Filtern..) aber seis drum, lässt sich ja wahrscheinlich nicht ändern.

Sorry, das gilt natürlich nur, wenn der Filter ein leeres Ergebnis zurückliefert (und man somit auf einem "neuen" Datensatz steht), oder in dem gefilterten Ergebnis mit F3 einen neuen Datensatz anlegen will.
Sofern der Filter Ergebnisse zurückgibt, wird natürlich kein OnValidate ausgeführt.

Re: Filter führt zu Validate

13. Juni 2014 14:03

OK - mit meinen Worten:

Wenn eine Filterung eine "leere Tabellenansicht" erzeugt denkt NAV, dass die leere Zeile auf der der Cursor nun steht eine neue Zeile sein soll und durchläuft den Validatetrigger mit "Item No." = ' '
RIght? Und das wirft mir dann den Fehler in der Funktion CheckManualChange(FIELDCAPTION("Item No."))

Ich versuche mal das:


..............
IF (xRec.Quantity <> 0) AND ("Item No." <> '') THEN
ERROR(Text007,CaptionField,TABLECAPTION);
.............

oder meint ihr das haut mir woanders in den Nacken?