Wert aus Form in Tabelle übernehmen (CC)

5. September 2013 15:50

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.

Re: Wert aus Form in Tabelle übernehmen (CC)

5. September 2013 16:24

Hallo,

verwendest wahrscheinlich den falschen Trigger.
Müsstest es in dem OnValidate Trigger des Feldes machen.
Am besten dann direkt in dem Tabellen Trigger nicht Form Trigger, falls du mal eine andere Form aufsetzt, dann ist es in der Tabelle global.

Vielleicht hier erst in Erfahrung bringen, wann die einzelnen Trigger ausgeführt werden.

Und die Tabelle in der du die Werte übernehmen willst, ist als SourceTable der Form hinterlegt?

Gruß
Aydin

Re: Wert aus Form in Tabelle übernehmen (CC)

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;

Re: Wert aus Form in Tabelle übernehmen (CC)

6. September 2013 08:25

Vorab schonmal vielen Dank für die Ideen und den Tip.
Ich probiere auch nochmal etwas herum. Falls du noch die 100%-Lösung findest, bin ich sehr dankbar. Ich werde bescheid geben falls ich selbst drauf komme. :)