Seite 1 von 1

[gelöst] Objekt Tabelle ändern

Verfasst: 18. September 2014 12:37
von NaCoder
Hallo,

ich erhalten unter NAV2.6 wenn ich Objekte in der Tabelle 2000000001 Objekt ändern möchte folgende Fehlermeldung:

FM-Objekt-Tabelle-Ändern.png

Mache es in einer Form.

Mein Code - Bei Modify wirft es auf.
Code:
SETRANGE(ID, 1050000, 1060000);
FIND('-');
REPEAT
  Objekte.SetRange(ID, ID);
  Objekte.SetRange(Typ, Type);
  IF Objekte.Find('-') THEN BEGIN
    Objekte.Typ := Type;
    Objekte.ID := ID;
    Objekte.Geändert := Geändert;
    Objekte.Datum := Datum;
    Objekte.Zeit := Zeit;
    Objekte.Name := Name;
    Objekte.MODIFY;
  END;
UNTIL NEXT = 0;

Re: Objekt Tabelle ändern

Verfasst: 18. September 2014 14:32
von Timo Lässer
In der Objekttabelle sind einige Objekttypen virtuell, somit sind deren Datensätze schreibgeschützt.
Darunter fallen die Typen "TableData" (nicht zu verwechseln mit dem Typ "Table"), "Field" und "System".

Du musst also darauf achten, dass du nur die Objekttypen Table,Form,Report,Dataport und Codeunit erwischt.

Felder lassen sich jedoch über die Tabelle "Fields" in gewissem Umfang ändern.

Re: Objekt Tabelle ändern

Verfasst: 18. September 2014 15:16
von NaCoder
Hallo,

ahhh, jetzt kommen wir mit der Sache schon näher. Es gibt bei Type die Auswahl Table, Reports, Forms, ... usw...
Nur leider hat er anscheinend nur TableData in der Tabelle, wenn ich es so in eine andere Tabelle zwischenspeichere.

Objekte - Record - 20000001

Code:
Objekte.SETRANGE(ID, 1030000, 104000);
Objekte.SETRANGE(Mandantenname, COMPANYNAME);
Objekte.SetRange(Typ, 1, 5);
Objekte.FIND('-');
REPEAT
  Type := Objekte.Typ;
  ID := Objekte.ID;
  Geändert := Objekte.Geändert;
  Datum := Objekte.Datum;
  Zeit := Objekte.Zeit;
  Name := Objekte.Name;
  INSERT;
UNTIL Objekte.NEXT = 0;

Re: Objekt Tabelle ändern

Verfasst: 19. September 2014 09:29
von Timo Lässer
Drei Punkte zu deinem letzten Programmcode:

Nur Objekte der Art::TableData enthalten einen Mandantennamen (sofern in der dazugehörigen Tabelle DataPerCompany=Yes ist).
In allen anderen Fällen ist das Feld Mandantenname leer.

Variablen vom Typ Record sollten so heißen, wie die Tabelle.
Und da Tabellennamen immer im Singular geschrieben werden sollen, muss es Objekt und nicht Objekte heißen. ;-)

Der besseren Lesbarkeit sollte man Optionswerte nicht als Integer schreiben:
Schlecht: Objekt.SetRange(Typ, 1, 5);
Besser: Objekt.SetRange(Typ, Objekt::Table, Objekt::Codeunit);

Re: Objekt Tabelle ändern

Verfasst: 19. September 2014 09:48
von NaCoder
Aj, jetzt hab ich gesehen. Danke Timo Lässer :)