[gelöst] Zeilennummer ändern per Programmierung?

4. November 2010 12:04

Hallo allerseits,

Ich habe in ein Buchblatt Daten importiert, doch leider aus Versehen Zeilennr. 1..n statt 1000...n genommen.
Wenn jetzt jemand einen einen Datensatz einfügt, beißt die Fehlermeldung "Autosplitkey blah..." zu. Ist ja auch logisch, da Autosplitkey nur funktioniert, wenn zwischen den Zeilen genügend "Spielraum" vorhanden ist.

Nun hab ich versucht mit folgendem Code die Zeilennummern zu ändern, leider ohne Erfolg (Fehlermeldung):

Code:
GenJnlLine.RESET;
GenJnlLine.SETRANGE("Journal Template Name",'ALLGEMEIN');
GenJnlLine.SETRANGE("Journal Batch Name",'BANK');
i := 0;
j := 0;


FOR i := 2157 DOWNTO 1 DO BEGIN
  GenJnlLine.GET('ALLGEMEIN','BANK',i);
  j := i;
  GenJnlLine."Line No." := j + 1000;
  GenJnlLine.MODIFY;
END;


Fehler: ---------------------------
Microsoft Dynamics NAV
---------------------------
Die Fibu Buch.-Blattzeile existiert nicht.
Identifizierende Felder und Werte:
Buch.-Blattvorlagenname='ALLGEMEIN',Buch.-Blattname='BANK',Zeilennr.='3157'

Es sind insgesamt 2157 Zeilen in diesem Buchblatt.
Ich verstehe nicht, warum ich die Zeilennummer nicht ändern kann?
Mein Code geht von 2157 bis 1 und ändert sukzessive die Nummer um +1000.
Warum beißt der Debugger beim MODIFY zu?
Zuletzt geändert von Freestyler am 4. November 2010 12:16, insgesamt 1-mal geändert.

Re: Buchblatt Zeilennummer ändern per Programmierung?

4. November 2010 12:09

Line No. gehört zum Primärschlüssel. Daher kannst du hier nicht mit MODIFY arbeiten, sondern mit RENAME.

Außerdem:
Angenommen du hast die (falschen) Zeilen
1
2
3

dann wären doch die richtigen gewesen
10.000
20.000
30.000

Also musst du die alte Zeilennr. mit 10.000 mulitiplizieren statt mit 1.000 zu addieren.

Re: Buchblatt Zeilennummer ändern per Programmierung?

4. November 2010 12:09

Eine Änderung auf dem PK erfordert rename, nicht modify.

Aber mit deinem Code verschiebst du Zeilen doch nur. Der Abstand zwischen den Zeilen bleibt gleich.

Re: Buchblatt Zeilennummer ändern per Programmierung?

4. November 2010 12:15

McClane hat geschrieben:Eine Änderung auf dem PK erfordert rename, nicht modify.

Aber mit deinem Code verschiebst du Zeilen doch nur. Der Abstand zwischen den Zeilen bleibt gleich.


Danke euch beiden! :)

Der richtige Code hat nun funktioniert:

Code:
GenJnlLine.RESET;
GenJnlLine.SETRANGE("Journal Template Name",'ALLGEMEIN');
GenJnlLine.SETRANGE("Journal Batch Name",'BANK');
i := 0;
j := 0;


FOR i := 2157 DOWNTO 1 DO BEGIN
  GenJnlLine.GET('ALLGEMEIN','BANK',i);
  j := i * 10000;
  GenJnlLine.RENAME('ALLGEMEIN','BANK',j);
END;