[gelöst] Objekt Tabelle ändern

18. September 2014 12:37

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;
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Zuletzt geändert von NaCoder am 19. September 2014 09:49, insgesamt 1-mal geändert.

Re: Objekt Tabelle ändern

18. September 2014 14:32

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

18. September 2014 15:16

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

19. September 2014 09:29

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

19. September 2014 09:48

Aj, jetzt hab ich gesehen. Danke Timo Lässer :)