Erweitern einer Form / Verknüpfung zu einer weiteren Tabelle

Zuerst einmal “Hallo”.

Wie ihr seht, bin ich neu hier im Forum.
Genauso wie im Umgang mit Navision. [:)]

Ich bin nun seit 2 Wochen bei einer Firma beschäftigt, die NAV 2009 im Einsatz hat. Und schon soll ich Änderungen in NAV machen.

Da diese Änderung “recht zügig” von statten gehen soll und ich keine Ahnung von dem ganzen habe, hoffe ich, hier etwas Hilfe zu finden.

Es geht um folgendes:
Auf der bestehenden Artikelkarte sollen zusätzlich noch Hersteller und Hersteller-Artikel-Nr. angegeben werden können. Der “Hersteller” soll dabei ein Kontakt aus der “Kontakt”-Tabelle sein.

Was ich bisher “geschafft” habe:
Neue Felder auf der Artikelkarte anzulegen, war kein Thema. Des weiteren habe ich es geschafft, das Feld “Hersteller” mit der Kontakt-Tabelle zu verknüpfen. Soll heissen, ich kann nun zu jedem Artikel einen Kontakt per Menü auswählen.

Und nun kommt das Problem:
Ich kann mir aus der Auswahl einen Kontakt aussuchen, bekomme aber in dem Feld anschliessend nur die Kontakt-Nr. angezeigt. Ich benöige aber auch noch den Namen dazu. Wie kann ich das erreichen? Ich habe noch ein weiteres Feld mit dem Namen “Herstellername” angelegt, bekomme aber hier nicht die Verknüpfung zu dem “Contact Name” in Beziehung zu der “Contact No.”.

Da ich, wie gesagt, ein absoluter Neuling bin, was NAV angeht, habe ich mir einfach mal die Forms, Tabellen, den C/AL-Code und all das angesehen, und mich an anderen Feldern orientiert.
Die Tabelle “Item” habe ich um das Feld “Hersteller” erweitert und unter den “Properties” eine “TableRelation” zu der Tabelle “Contact” erstellt.
Unter der Form 30 “Artikelkarte” habe ich eine Variable mit Namen “Hersteller” erstellt, als Datentyp “Record” und als “Subtype” die Tabelle “Contact” ausgewählt.
Somit bin ich in der Lage, den zu jedem Artikel einen Hersteller (“Contact No.”) auswählen zu können. Nun fehlt, wie gesagt, noch der Name.

Ich habe keine Ahnung, ob ich mich wenigstend halbwegs verständlich ausgedrückt habe.

Es wäre schön, wenn mir jemand dabei helfen könnte.

Vielen Dank schon einmal im voraus.

Hallo hpierce,

ich würde folgenden Weg vorschlagen:

  1. Anlagen neues Feld “Hersteller Nr.” (hast du ja bereits erledigt) in der Tabelle 27 Item (Artikel).

  2. Auf der Artikelkarte eine Variable “HerstellerName” (Text 50) anlegen)

  3. Auf der Artikelkarte eine neue Textbox einfügen und in der Sourceexpression entsprchend die unter 2 angelegte Variable hinterlegen.

  4. Eine Globale Variable “Hersteller” vom Typ Record Subtype Contact anlegen (hast du ja schon gemacht)

  5. Im OnAfterGetRecord-Trigger der Artikelkarte (erreichst du in dem du die Form im Designer öffnest und F9 drückst ohne ein Control ausgewählt zu haben) hinterlegst du folgenden Code:

// Begin Codeblock

If not hersteller.get(“hersteller nr.”) then

hersteller.init;

HerstellerName := hersteller.name;

// Ende Codeblock

Das sollte es gewesen sein.

Gruß Jan

Hallo, Jan.

Vielen Dank schon einmal für die Antwort.

So etwas ähnliches habe ich im OnAfterGetRecord gefunden. Dabei geht es allerdings um Kreditor und Kreditorname. Da es eigentlich das gleiche ist, was ich erreíchen möchte, habe ich mich daran auch orientiert.

Allerdings hier und auch bei deiner Lösung, bekomme ich immer folgende Meldung:

"Die Variable ist kein Datensatz. “Variable.Feld” ist ungültig.

Ich habe schon versucht, mit Hilfe von Google und div. Foren eine Antwort zu finden, bisher aber erfolglos.

Könntest du mir vielleicht weiterhelfen?

Vielen Dank noch einmal für deine Hilfe.

Thomas

Das muss eigentlich eine Kleinigkeit sein. Kannst du mal deine Variablen und den Code hier posten?

Gruß Jan

OnAfterGetRecord:

Kreditorenname:=’’;
IF Kreditor.GET(“Vendor No.”) THEN
Kreditorenname:=Kreditor.Name
ELSE
Kreditorenname:=’’;

If not Hersteller.get(“Hersteller nr.”) then
Hersteller.init;
Herstellername := Hersteller.Name;

Name DataType Subtype Length
Kreditor - Record - Vendor
Kreditorenname - Text - 50
Hersteller - Record - Contact
Herstellername - Text - 50

Der obere Teil (Kreditor/-name) war schon im Trigger. Daran hatte ich mich zuerst orientiert und dem entsprechend die Variablen angelegt. Allerdings meldet NAV bei Hersteller.GET immer die o.g. Fehlermeldung.

Das Problem wird sein, dass deine Record-Variable “Hersteller” genauso heisst wie der Feldname in der Artikeltabelle oder dass du noch eine lokale Variable mit dem selben Namen hast. Versuche mal die Record-Variable in irgendetwas anderes umzubennen zum Beispiel gHersteller oder ähnliches.

Gruß Jan

Hallo, Jan.

Vielen, vielen Dank. Genau das war die Lösung. Ich habe mir die Variablen noch einmal angesehen und verglichen und du hattest vollkommen recht.

Nach dem Ändern der Variable funktioniert nun alles wie gewünscht.

Wie gesagt, vielen Dank noch einmal für deine Mühe und Hilfe.

Viele Grüße,

Thomas

Immer gern :-).