[Gelöst]Aktualisierung des ItemPanel

28. Juli 2009 11:00

Hallo!

Ich bin noch relativ neu im Thema NAV und habe eine Frage:
In der Auftragskarte versuche ich herauszufinden welcher Mechanismus die Artikelinformationen aktualisiert sobald ich auf die Artikelnummer validiere. Ich habe schon den Code in OnValidate der Form und der Tabelle herausgenommen und aktualisiert immer noch das ItemPanel.

Also wo wird die Aktualisierung der Artikelinformation angestossen?

Vielen Dank schonmal

Matt Kirby
Zuletzt geändert von Matt Kirby am 29. Juli 2009 16:33, insgesamt 1-mal geändert.

Re: Aktualisierung des ItemPanel

28. Juli 2009 11:08

Willkommen im Forum!

Mit ItemPanel meinst du doch den Kasten rechts neben Zeilen namens "Artikelinformationen", oder?
Dieses Control ist in der Subform eingebunden und muss auch dort "untersucht" werden.

Die Sichtbarkeit des Controls an sich (es wird ausgeblendet, sobald du auf einer Zeile <> Artikels stehst) wird in Form - OnAfterGetCurrRecord gesteuert:
Code:
CurrForm.ItemPanel.VISIBLE := Type = Type::Item;
CurrForm.UPDATECONTROLS;

Dieser Trigger wird aufgerufen, sobald von von einem Zeilen-Datensatz zum nächsten springst. Daher auch jedes Mal eine Aktualisierung.

Um den Inhalt des Controls nachzuvollziehen, musst du an die Stelle gucken, wo nachher die berechneten Werte stehen.
Schau mal z.B. neben Verfügbarkeit: Dort steht
Code:
STRSUBSTNO('(%1)',SalesInfoPaneMgt.CalcAvailability(Rec))


Das heißt, ich übergebe der Codeunit "Sales Info-Pane Management" mit Rec die aktuelle Sales Line und erhalte über die Funktion CalcAvailability die Verfügbarkeit zurück.

Fertig :-)

Matt Kirby hat geschrieben:welcher Mechanismus die Artikelinformationen aktualisiert sobald ich auf die Artikelnummer validiere

Genau genommen hat das mit der Validierung nichts zu tun ... Es hängt am OnAfterGetCurrRecord und der implizierten Neu-Übergabe von Rec.

Re: Aktualisierung des ItemPanel

28. Juli 2009 15:02

Hallo Natalie!

Vielen Dank für die superschnelle Antwort :-)

Ja, die Funktion OnAfterGetCurrRecord ist mir gleich aufgefallen. Zum Testen ob es auch der verantwortliche Code ist, habe ich ihn auskommentiert. Die Artikelinformationen werden dann aber trotzdem aktualisiert!

Hab nämlich das Problem, dass in einer Datenbank die Artikelinformationen erst aktualisiert werden, wenn man die Zeile wechselt, nicht jedoch nach Eingabe der Artikelnummer. Um überhaupt nachzuvollziehen wie das funktioniert, habe ich den Cronus Mandanten genommen und wollte mir erstmal dort anschauen, wie es denn richtig funktioniert. Dann könnte ich vielleicht sehen, warum es in der anderen Datenbank Probleme gibt.

Was kann ich denn jetzt tun?

Re: Aktualisierung des ItemPanel

28. Juli 2009 16:03

Matt Kirby hat geschrieben:Ja, die Funktion OnAfterGetCurrRecord ist mir gleich aufgefallen. Zum Testen ob es auch der verantwortliche Code ist, habe ich ihn auskommentiert. Die Artikelinformationen werden dann aber trotzdem aktualisiert!

Ja, da hatte ich mich missverständlich ausgedrückt ...
Also: Das Control befindet sich auf der Subform, gehörig zu einem Datensatz der Tabelle Sales Line. Jedes Mal, ganz ohne Programmierung deinerseits, wenn du von Zeile zu Zeile springst, versucht das Control sich zu wertemäßig aktualisieren. Nur für die Sichtbarkeit des Controls wird der OnAfterGetCurrRecord-Trigger verwendet.
Nach dem gleichen Prinzip werden in NAV z.B. FlowFields aktualisiert , nur wenn du blätterst (Beispiel: Artikelkarte, Feld Lagerbestand).

Hab nämlich das Problem, dass in einer Datenbank die Artikelinformationen erst aktualisiert werden, wenn man die Zeile wechselt, nicht jedoch nach Eingabe der Artikelnummer.

Versuch mal im Form-Trigger "No." - OnAfterValidate ein
Code:
CurrForm.SAVERECORD;
ganz am Ende nach dem Standardquelltext (kanns grad selbst nicht testen).

Re: Aktualisierung des ItemPanel

28. Juli 2009 16:24

Habs probiert, funktioniert jedoch noch immer nicht.

Natalie hat geschrieben:
Matt Kirby hat geschrieben:Ja, die Funktion OnAfterGetCurrRecord ist mir gleich aufgefallen. Zum Testen ob es auch der verantwortliche Code ist, habe ich ihn auskommentiert. Die Artikelinformationen werden dann aber trotzdem aktualisiert!

Ja, da hatte ich mich missverständlich ausgedrückt ...
Also: Das Control befindet sich auf der Subform, gehörig zu einem Datensatz der Tabelle Sales Line. Jedes Mal, ganz ohne Programmierung deinerseits, wenn du von Zeile zu Zeile springst, versucht das Control sich zu wertemäßig aktualisieren. Nur für die Sichtbarkeit des Controls wird der OnAfterGetCurrRecord-Trigger verwendet.
Nach dem gleichen Prinzip werden in NAV z.B. FlowFields aktualisiert , nur wenn du blätterst (Beispiel: Artikelkarte, Feld Lagerbestand).

Ich bin eigentlich davon ausgegangen, dass der Trigger "OnAfterGetCurrRecord" mit
Code:
CurrForm.UPDATECONTROLS

alle Controls auf der Form aktualisiert, so dass die Textfelder bei Artikelinformationen die Eigenschaft z.B.
Code:
SourceExpr = STRSUBSTNO('(%1)',SalesPriceCalcMgt.func_NoOfSalesPrices(Rec))

neu ausführen.

Ist das nicht so?

Re: Aktualisierung des ItemPanel

28. Juli 2009 16:30

Matt Kirby hat geschrieben:Habs probiert, funktioniert jedoch noch immer nicht.

Hm und was ist mit
Code:
...
CurrForm.SAVERECORD;
CurrForm.UPDATE;


Ich bin eigentlich davon ausgegangen, dass der Trigger "OnAfterGetCurrRecord" mit
Code:
CurrForm.UPDATECONTROLS

alle Controls auf der Form aktualisiert, so dass die Textfelder bei Artikelinformationen die Eigenschaft z.B.
Code:
SourceExpr = STRSUBSTNO('(%1)',SalesPriceCalcMgt.func_NoOfSalesPrices(Rec))

neu ausführen.

Ist das nicht so?

Hatte ich auch zuerst geglaubt. Dann habe ich die Onlinehilfe gelesen. Die besagt, dass lediglich Captions aktualisiert werden - keine Werte.

Re: Aktualisierung des ItemPanel

28. Juli 2009 16:46

Natalie hat geschrieben:
Matt Kirby hat geschrieben:Habs probiert, funktioniert jedoch noch immer nicht.

Hm und was ist mit
Code:
...
CurrForm.SAVERECORD;
CurrForm.UPDATE;


Cool, das geht! Vielen Dank :-D

Aber warum funktioniert das im Cronus Mandanten ohne ein Update? Komisch, komisch...

Re: Aktualisierung des ItemPanel

28. Juli 2009 16:48

Matt Kirby hat geschrieben:Aber warum funktioniert das im Cronus Mandanten ohne ein Update?

Wie meinst du das?

Re: Aktualisierung des ItemPanel

28. Juli 2009 17:04

Natalie hat geschrieben:
Matt Kirby hat geschrieben:Aber warum funktioniert das im Cronus Mandanten ohne ein Update?

Wie meinst du das?


Dort steht bei No. - OnAfterValidate
Code:
InsertExtendedText(FALSE);
IF (Type = Type::"Charge (Item)") AND ("No." <> xRec."No.") AND
   (xRec."No." <> '')
THEN
  CurrForm.SAVERECORD;


Jedoch kein Update. Trotzdem geht es dort und in der anderen Datenbank, die ich bekommen habe, funktioniert die Aktualisierung der Artikelinformationen nur mit
Code:
CurrForm.UPDATE

Re: Aktualisierung des ItemPanel

28. Juli 2009 17:42

Matt Kirby hat geschrieben:Dort steht bei No. - OnAfterValidate [...] Jedoch kein Update. Trotzdem geht es dort

Geht dort was genau?

und in der anderen Datenbank, die ich bekommen habe, funktioniert die Aktualisierung der Artikelinformationen nur mit
Code:
CurrForm.UPDATE


Könnte es sein, dass in der Datenbank "wo es ging", die (Sub-)Formeigenschaft DelayedInsert = False war?

Re: Aktualisierung des ItemPanel

28. Juli 2009 21:46

Natalie hat geschrieben:Könnte es sein, dass in der Datenbank "wo es ging", die (Sub-)Formeigenschaft DelayedInsert = False war?

Das würde es doch eher besser machen, oder? :-?

So weit ich das einschätzen kann, hat es weder damit noch dem CurrForm.Update etwas zu tun. Sobald in einem Rec mit Art=Artikel eine Nummer eingetragen wird, werden die Werte in den Artikelinformationen neu berechnet. Egal, ob das rec schon inserted wurde oder nicht (zumindest bei mir. Hab nicht im Cronus geschaut, aber das müsste noch Standard sein). Vielleicht hilft es, die Codeunits 7171 (Sales Info-Pane Management) zu vergleichen. Evtl. wurde die eine der beiden derart angepasst, dass sie keine Werte heraus rückt, wenn sie die übergebene Zeile nicht findet oder die Zeilennr. Null ist.

Re: Aktualisierung des ItemPanel

28. Juli 2009 21:50

McClane hat geschrieben:Sobald in einem Rec mit Art=Artikel eine Nummer eingetragen wird, werden die Werte in den Artikelinformationen neu berechnet.

In meiner Cronus-DB nicht ... erst wenn der Datensatz wirklich eingefügt ist bzw. ich blättere. Bin von daher auch nicht auf deinen Ansatz gekommen *grübel*

Edit - mal eine Idee:
Das Control weiß ja nicht, dass die entscheidene Information zur Neuberechnung die Artikelnr. sein soll. Wenn deine Theorie also stimmt, dann hieße das, dass die Berechnung nach JEDER Feldänderung, egal wo, durchgeführt wird.
Wenn das so wäre, dann wäre das ein Kanonenschuss auf Artikelinfospatzen.
Aber hey, ist doch einfach zu prüfen: Einfach mal einen Breakpoint in die Codeunit-Funktion setzen und schauen, wie oft diese wirklich aufgerufen wird - woher, wird uns der Debugger vermutlich nicht direkt verraten.

Re: Aktualisierung des ItemPanel

29. Juli 2009 09:37

Natalie hat geschrieben:In meiner Cronus-DB nicht ... erst wenn der Datensatz wirklich eingefügt ist bzw. ich blättere. Bin von daher auch nicht auf deinen Ansatz gekommen *grübel*

in meiner Cronus klappt das :roll:

Re: Aktualisierung des ItemPanel

29. Juli 2009 09:42

Natalie hat geschrieben:Wenn deine Theorie also stimmt, dann hieße das, dass die Berechnung nach JEDER Feldänderung, egal wo, durchgeführt wird.

Stimmt genau :)

Re: Aktualisierung des ItemPanel

29. Juli 2009 11:40

Habs auch gerade getestet. Wird bei jeder Änderung aktualisiert. Hmm, vielleicht hat es in meiner DB nicht funktioniert, weil in der SourceExp der Felder in den Artikelinformationen Variablen ausgegeben werden statt eine Funktion aufzurufen. Wenn ich ein Feld hinzufüge, was bei einem Update eine Messagebox ausgibt funktioniert es. Vielleicht werden die Variableninhalte nicht aktualisiert....

Re: Aktualisierung des ItemPanel

29. Juli 2009 11:45

Matt Kirby hat geschrieben:Habs auch gerade getestet. Wird bei jeder Änderung aktualisiert. Hmm, vielleicht hat es in meiner DB nicht funktioniert, weil in der SourceExp der Felder in den Artikelinformationen Variablen ausgegeben werden statt eine Funktion aufzurufen. Wenn ich ein Feld hinzufüge, was bei einem Update eine Messagebox ausgibt funktioniert es. Vielleicht werden die Variableninhalte nicht aktualisiert....

Die Codeunits 7171 sind aber bei beiden DB gleich?¿

Re: Aktualisierung des ItemPanel

29. Juli 2009 16:30

Nein, die 7171 ist nicht gleich. In der Nicht-Cronus-Datenbank sind einige Änderungen enthalten. Ich wüßte aber nicht, was die Funktionalität dort zu den Artikelinformationen beeinflussen könnte (Code ist nicht von mir). Aber ich belasse es jetzt einfach mal dabei. Wollte nur wissen, ob es prinzipiell Problem mit der Ausgabe von Variableninhalten gibt, die nicht aktualisiert werden. Aber das kann ich ja auch selbst bei Gelegenheit testen.

Vielen Dank euch allen

Re: [Gelöst]Aktualisierung des ItemPanel

3. Oktober 2009 15:03

Hallo zusammen,

hat hier jemand inzwischen neuen Erkenntnisse zu diesem Fall. Ich habe selbiges Problem, dass sich das Panel auf Artikelebene in der Form Sales Order Subform nicht aktualisiert bzw. nur, wenn man einen Datensatz hin und her springt.

Die CU 7171 und die beiden betroffenen Forms sind in den wesentlichen Teilen deckungsgleich, habe nur noch eine zusätzliche Funktion für die Anzahl der Kommissionierbelege in 7171 und ein paar Felder in den Forms. Ansonsten deckungsgleich zu CRONUS. Dennoch funktioniert die Aktualisierung in CRONUS, im Live bzw. Entwicklungssystem nicht.

Re: [Gelöst]Aktualisierung des ItemPanel

6. Oktober 2009 01:19

Du müsstest doch nur die Änderungen Stück für Stück im Cronus einbauen oder im Echtsystem ausbauen, und dann hast du's :?: