Debitorenkarte erweitern

22. November 2010 11:52

Hallo ins Forum,

ich erweitere die Debitorenkarte um ein neues Feld. Dazu habe ich als erstes eine Erweiterungstabelle angelegt die bestimmte Felder enthält die über die Debitorenkarte angezeigt und editierbar sein sollen.

In der Debitorenkarte habe ich ein neues Control eingetragen und eine Funktion angelegt die nen SETFILTER und FINDFIRST auf die Extensiontabelle macht. Als Source habe ich dann den gefundenen Record referenziert. So weit so gut. Nun möchte ich das Feld nach einer Änderung in die Erweiterungstabelle schreiben. Dazu hab ich mir den Trigger OnAfterValidate genommen, dachte der wäre genau das was ich suche.

Da der Record ja schon "offen" ist genügt ja eigentlich ein:
Code:
CountToAmount.VALIDATE("Count Invoice to Amount of",CountToAmountField);
CountToAmount.MODIFY(TRUE);

So war zumindest mein Gedanke aber meine Änderung wird nicht gespeichert. CountToAmountField ist der Name meines Control, aber der Name passt wohl nicht, wenn ich ne feste Zahl reinpacke dann landet die auch in der neuen Tabelle. Also ich bin schon richtig, der Trigger stimmt und die Speicherung an sich auch schon aber mir fehlt der Name/ Wert des aktuellen feldes.

Kann mir jemand sagen wie der Name lautet? Irgendwas wie this->Text oder so aber ich komm einfach nicht drauf.

VG
Rene
Zuletzt geändert von kockiren am 22. November 2010 12:26, insgesamt 2-mal geändert.

Re: Debitorenkarte erweitern

22. November 2010 12:06

kockiren hat geschrieben:CountToAmountField ist der Name meines Control, aber der Name passt wohl nicht, wenn ich ne feste Zahl reinpacke dann landet die auch in der neuen Tabelle.

In NAV sprichst du Feldwerte nie über den Controlnamen an, sondern über den Tabellenfeldnamen.

Da deine Erweiterungstabelle editierbar angezeigt wird und du dadurch , versuchs mal so auf deiner Form:
OnAfterValidate
Code:
CountToAmount.VALIDATE("Count Invoice to Amount of"); // validieren ja, neuen Wert schreiben: nein, hast du ja schon manuell gemacht. Eventuell kann die Zeile ganz entfallen.
CountToAmount.MODIFY(TRUE);

Voraussetzung: Das Control hat als SourceExpr = CountToAmount."Count Invoice to Amount of"

Re: Debitorenkarte erweitern

22. November 2010 12:12

Hallo Natalie,

joa einfach den zweiten Parameter weglassen das wars. Hm und ich such die ganze Zeit nach der Variablen :-)

Danke dir.

VG
Rene

Re: Debitorenkarte erweitern

22. November 2010 12:28

Doch noch nicht ganz fertig. Hab jetzt mal folgendes in den Trigger OnAfterValidate eingegeben:


Code:
CountToAmount.SETRANGE("Customer No.", "No.");
IF CountToAmount.FINDFIRST() THEN BEGIN
  CountToAmount.VALIDATE("Count Invoice to Amount of");
  CountToAmount.MODIFY(TRUE);
END ELSE BEGIN
  CountToAmount.INIT();
  CountToAmount.VALIDATE("Customer No.","No.");
  CountToAmount.VALIDATE("Count Invoice to Amount of");
  CountToAmount.INSERT(true);
END;


Nun sollte er mir ja den Wert ändern wenn er bereits existiert und ein neuen Datensatz anlegen wenn er noch nicht exisitiert. Es wird auch ein neuer Datensatz angelegt aber der Wert ist dann 0.

Hat noch jemand ne Idee?

VG
Rene

Re: Debitorenkarte erweitern

22. November 2010 12:37

Ist CountToAmount dieselbe Variable, dessen Wert im Control angezeigt wird?

Re: Debitorenkarte erweitern

22. November 2010 12:39

Warum jetzt der neue Quelltext?
Du lädst dir extra den "externen" Record in deine Form. Das, was du in dieses externe Feld eingibst, wird erst mal in das Feld geschrieben - aber noch kein MODIFY abgesetzt.
Nun gehst du hin, und lässt den externen Record neu auslesen. Dass dabei deine Änderung verschwindet, ist doch logisch :-)

Verwende daher für deinen neuen Quelltext eine neue Recordvariable, damit sich das Programm deinen geänderten Wert überhaupt merken kann - siehe McClane :-)

Re: Debitorenkarte erweitern

22. November 2010 12:47

Hallo ihr zwei,

ja also ich wollte das eigentlich so machen das ich per Funktion den Record aufrufe und dann ändern kann wenn er existiert und inserten wenn er nicht existiert. Deswegen hab ich so angefangen wie in meinem ersten Beitrag. Dann als das mit dem MODIFY geklappt hat wollte ich ein Schritt weiter gehen und sagen wenn der Record nicht existiert soll er ihn anlagen. Wenn er noch nicht existiert dann ist das Feld ja mit 0 vorausgefüllt und wenn ich dann was in das Feld schreibe soll dann der Wert des Feldes mit neu reingeschrieben werden. Da er ja aber noch nicht existiert muss ich ihn ja irgendwie initialisieren aber weiß nicht wie.

Ohje ich hoffe ihr versteht wie ich das meine.

@mclane: Ja das ist die selbe Variable ist als Record deklariert.

VG
Rene
Zuletzt geändert von kockiren am 22. November 2010 12:50, insgesamt 1-mal geändert.

Re: Debitorenkarte erweitern

22. November 2010 12:50

Natalie hat geschrieben:Verwende daher für deinen neuen Quelltext eine neue Recordvariable,
.. ist die Antwort auf deine Frage :)

Re: Debitorenkarte erweitern

22. November 2010 12:51

Okay also zwei verschiedene Variablen für den gleichen Zweck? Hm klingt ja nicht so optimal. Na ich probier es mal.

VG
Rene

Re: Debitorenkarte erweitern

22. November 2010 12:54

kockiren hat geschrieben:Okay also zwei verschiedene Variablen für den gleichen Zweck?

Nee :-)
Eine Variable dient der Anzeige und der Zwischenspeicherung des Feldes, um das es dir geht.
Die andere Variable dient zum gleichzeitigen Durchsuchen und Aktualisieren der dazu gehörigen Tabelle.

Re: Debitorenkarte erweitern

22. November 2010 12:56

Ja, müsste nicht sein. Da du hier
kockiren hat geschrieben:In der Debitorenkarte habe ich ein neues Control eingetragen und eine Funktion angelegt die nen SETFILTER und FINDFIRST auf die Extensiontabelle macht.
die Variable füllst, weißt du doch eigentlich schon, ob es den Datensatz gibt und bei einer Änderung ein modify oder insert nötig sein wird.