RecRef / RecordRef und Funktionen

15. Oktober 2009 11:38

Hallo zusammen,

ich bin dabei eine Funktion zu erstellen, die eine Puffertabelle in die Originaltabelle überführt, in meinem Fall die Tabelle Verkaufskopf.
Um nicht jeden Validate einzeln auszulösen, nutze ich die RecRef und FieldRef Funktionalität, d.h. ich setze mein Validate per FieldRef.VALIDATE(Wert).

Wenn ich das "zu Fuß" machen würde kann ich die Funktion SetHideValidationDialog mit Parameter TRUE der Tabelle Verkaufskopf aufrufen um Meldungen zu unterdrücken, wie z.B. "Möchten Sie Rech. an Deb.-Nr. ändern?".

Ich habe vor der Übergabe der Verkaufskopftabelle an den RecRef, diese Funktion aufgerufen, jedoch ohne Erfolg.

Wie kann ich das mit RecRefs / FieldRefs trotzdem steuern?
Hat jemand eine Idee?

Danke und Gruß Eva
Zuletzt geändert von ehölscher am 15. Oktober 2009 15:04, insgesamt 1-mal geändert.

Re: RecRef und Funktionen

15. Oktober 2009 11:48

Hallo Eva,

so einfach geht das leider nicht.
Du darfst nur solche Felder mit Validate auch tatsächlich zuweisen, die auch im VK-Auftrag eingegeben worden sind, sonst kann es dir passieren, das du Felder änderst, die sonst gar nicht geändert worden wären. Denn auch bei der Neuanlage eines Auftrags werden nicht alle Felder mit Validate sondern direkt zugewiesen.

Vielleicht hilft dir der Befehl TRANSFERFIELDS weiter, den benutzt NAV intern auch um Daten zwischen unterschiedlichen Tabellen zu kopieren (z.B. aus dem Auftrag in den Lieferschein o. Rechnung). Der Befehl kopiert alle Felder mit der gleichen Feld-ID aus der einen Tabelle in die andere Tabelle, allerdings ohne Validate.

Gruß, Fiddi

Re: RecRef und Funktionen

15. Oktober 2009 12:29

Hallo Fiddi,

danke für deine schnelle Antwort.
Ich mache zuvor ein TRANSFERFIELDS und nutze dann eine eigene Mappingtabelle um nur bestimmte Felder in einer bestimmten Reihenfolge zu validieren.

Ich bekomme aus einem externen Programm nur Verk. an Deb.-Nr. und Rech. an Deb.-Nr., nicht aber die zugehörigen Informationen wie Name und Adresse.
Somit habe ich in der Mappingtabelle hinterlegt, dass diese beiden Felder nach dem TRANSFERFIELDS validiert werden sollen, erst der Verk. an Debitor und dann der Rech. an Debitor.

Dabei bekomme ich dann bei einer abweichenden Rech. an Debitoradresse diese Meldung, die ich ja nicht haben möchte - NAV soll diese einfach ändern...

Ich hoffe du oder jemand anders hat hier noch eine Idee?!

Danke und Gruß Eva

Re: RecRef und Funktionen

15. Oktober 2009 12:41

Du könntest die Ausgabe der Messageboxen in den OnValidates mit CurrFieldNo (siehe Hilfe) verknüpfen. Damit kannst du unterscheiden, ob das Feld per Hand oder Code geändert worden ist.

Re: RecRef und Funktionen

15. Oktober 2009 13:18

Hallo Eva,

es gibt da die Variable HideValidationDialog bzw. die Funktion 'SetHideValidationDialog" im SalesHeader. Die musst du setzen, wenn die Meldung nicht kommen soll. Aber du solltest diesen Validate(Rechnung an Debitornr.") nur aufrufen, wenndas Feld abweichend vom "Verkauf an Debitornr." ist.

In manchen Fällen kommt es auch auf die Reihenfolge der Zuweisungen/Validates an (Preise/Rabatte in der VK-Zeile). Deshalb programmiere das bei so komplexen Tabellen lieber aus, das kann man so besser überblicken.

Gruß, Fiddi

Re: RecRef und Funktionen

15. Oktober 2009 13:21

CurrFieldNo ist zwar eine Möglichkeit, würde aber bedeuten, dass ich in jeden Trigger der Originaltabelle rein muss um diese Abfrage einzubinden.
Aktuell benötige ich diese Funktion für eine Schnittstelle min. 10 Tabellen, wie VK-Kopf, VK-Zeile, etc.
Zudem soll diese Funktion bei mehreren Kunden eingebunden werden und ich würde lieber in "meinen" Objekten bleiben, als jedes Standardobjekt ändern zu müssen.

Weitere Ideen?!
Danke.

Re: RecRef und Funktionen

15. Oktober 2009 13:24

Ich habe die Funktion SetHideValidationDialog vor der Übergabe an den RecRef gesetzt.
Dadurch das der RecRef eine neue Instanz öffnet geht diese Information scheinbar verloren.

Oder wie kann ich die beim RecRef setzen?
Danke.

Re: RecRef und Funktionen

15. Oktober 2009 14:44

Hallo Eva,

habe z.Zt. auch keine Ahnung, mal einen Breakpoint im Onvalidate-Trigger "Rechnung an DebNr." setzen, bzw. in der Funktion SetHideValidationDialog, und schauen, ob die Variablen korrekt initialisiert sind.

Du setzt "HidevalidationDialog" doch mit Funktion auf TRUE oder? :wink:

Gruß, Fiddi

Re: RecRef und Funktionen

15. Oktober 2009 15:03

Natürlich ... :-)
... zu schön wäre es gewesen, ich hätte nur nen Parameter falsch ...

Ich habe das noch mal weiter getestet, ich fülle zunächst die Primärschlüsselfelder meines VK-Kopfes, setze die Variable HideValidationDialog per Funktion auf TRUE, validiere mein Verk. an Deb.-Nr. und sehe das die Variable HideValidationDialog tatsächlich TRUE ist, nun übergebe ich den Record an die RecordRef Variable und per FieldRef.VALIDATE sehe ich dann im VK-Kopf die Variable auf FALSE - wegen der neuen Instanz... :-(

Re: RecRef / RecordRef und Funktionen

15. Oktober 2009 15:35

dann hast du das gleiche Problem auch in der "Sales Line", dort gibt es auch den 'HideValidationDialog'

Re: RecRef / RecordRef und Funktionen

15. Oktober 2009 15:42

Richtig, das habe ich bei allen Tabellen, in denen irgendwelche CONFIRMS und MESSAGES erscheinen ...