5. September 2013 20:58
AUV_SM hat geschrieben:Hi,
ich bin noch relativ frich im Coden in Navision.
Jetzt habe ich eine Passage geschrieben, gar nicht schwer, dass wenn in einem Form ein Datumsfeld b efüllt wird, eine Checkbox automatisch auf TRUE gesetzt wird:
IF FORMAT("ISO9001 gültig bis") <> '' THEN
"Kreditor zertifiziert" := TRUE;
Das ganze habe ich im Bereich "ActivateFields()" geschrieben.
Das funktioniert auch so weit ganz gut. Das einzige problem das ich habe ist, dass wenn die Checkbox auf TRUE gesetzt wird, der Wert nicht auch in die Tabelle geschrieben wird, sondern lediglich im Form zu erkennen ist ob die Checkbox gefüllt wurde oder nicht.
Hat jemand eine Idee wie ich das löse?
Und vielleicht hat auch noch jemand eine Idee, wie ich das mache, dass die Checkbox sofort gefüllt wird, wenn ich in das Datumsfeld etwas eingebe. Aktuell ist es so, dass ich erst in der Karte blättern muss, bevor ich in der Form die Änderung sehe.
Vielen lieben Dank.
Ich empfehle dir
http://www.navision24.de anzuschauen und mal die Befehle und Beispiele dort durchzugehen.
Danach bist du in Sachen C/AL Grundlagen fit und kannst dann mit diesem Wissen auch fortgeschrittene Programmierungen durchführen.
Ansonsten hättest du das lösen können:
Auf der Tabelle 50034 (meine "Spielwiese" für Programmierung) habe ich die Felder ISO9001 vom Typ Date und VendorCertified hinzugefügt.
Dann habe ich die Trigger auf der Tabelle (nicht auf der Form) mit Code gefüllt:
- Code:
OnModify()
IF ISO9001 <> xRec.ISO9001 THEN
VALIDATE(ISO9001);
ISO9001 - OnValidate()
VendorCertified := TRUE;
Mein erster Test zeigt, dass alles gut klappt.
Die Werte werden in die Tabelle geschrieben, obwohl ich sie über die Form eintippe.
edit: leider hab ich gemerkt dass:
1) es ausreicht wenn man nur den OnValidate ausfüllt mit
ISO9001 - OnValidate()
VendorCertified := TRUE;
2) ich es nicht schaffe den Fall auszuprogrammieren falls ISO9001 <> xRec.ISO9001 AND ISO9001 <> 0D => trotz der Nebenbedingung im OnValidate Trigger wird das Häckchen gesetzt, auch für Nulldati. Ich muss eine Nacht schlafen und morgen wird mir die Lösung sicher einfallen. Du musst dich noch gedulden
edit 2: ok ich habs:
es ist nicht dasselbe, wenn man einen Record komplett ausfüllt wie wenn man auf einem bereits ausgefüllten Record mit ISO9001 <> leerem Datum und schon gesetztem Vendor = TRUE das Datum von ISO9001 mit der DEL-Taste löscht.
Damit klappt mein Code gem. deiner Anforderung: falls man einen kompletten Datensatz anlegt, wo ISO9001 Datum <> 0D ist, dann wird Vendor = TRUE gesetzt, sonst beim Verlassen des Datensatzes mit Tabulator Taste passiert nix, Vendor bleibt bei = FALSE falls Datum = 0D belassen wurde.
Warum es allerdings dazu kommt, dass wenn ich rückwärts vorgehe und zuerst VENDOR von TRUE auf FALSE mit der Maus anklicke und dann beim Löschen vom Datum (d.h. beim Setzen von Datum = 0D) der VENDOR dennoch auf TRUE gesetzt wird, dass werde ich mir erst morgen überlegen.
edit 3: mein OnValidate () sieht nun wie folgt aus, habs vorhin vergessen zu posten:
- Code:
IF (ISO9001 <> xRec.ISO9001) THEN
IF ISO9001 <> 0D THEN
VendorCertified := TRUE;