[Gelöst] Mit RecordRef Tabellen kopieren

25. Juli 2018 09:14

Hallo zusammen,

seit vielen Jahren lese ich in dem Forum mit und habe schon viele wertvolle Tipps erhalten. Dafür schonmal rückwirkend 1000 Dank. Nun stehe ich vor einem Problem und bin mir nicht sicher, ob ich da zu 'einfach' denke oder einen grundsätzlichen Fehler mache.

Ich möchte Datensätze von Mandant Q zu Mandant Z kopieren. Da es sich um 100 Tabellen handelt, möchte ich mit Referenzen arbeiten. Dies war meine Idee:

Code:
Rref_Q.OPEN(3,FALSE,'Mandant_Quelle');
Rref_Z.OPEN(3,FALSE,'Mandant_Ziel');

MESSAGE(Rref_Q.CURRENTCOMPANY);
MESSAGE(Rref_Z.CURRENTCOMPANY);

IF Rref_Q.FINDFIRST THEN
REPEAT
  Rref_Z:=Rref_Q;
  Rref_Z.INSERT(FALSE);
UNTIL Rref_Q.NEXT=0;


Im Mandant Ziel ist die Tabelle leer. Trotzdem bekomme ich die Fehlermeldung 'Datensatz existiert schon'.
Hat jemand eine Idee?

Wir setzen Build 16177 ein.

Viele Grüße
Flash
Zuletzt geändert von flashgord77 am 27. Juli 2018 11:40, insgesamt 1-mal geändert.

Re: Mit RecordRef Tabellen kopieren

25. Juli 2018 11:29

Durch deine Zuweisung Rref_Z:=Rref_Q; zeigt Rref_Z auf denselben Datensatz in demselben Mandanten wie Rref_Q.
Verwende stattdessen Rref_Z := Rref_Q.DUPLICATE;

Re: Mit RecordRef Tabellen kopieren

25. Juli 2018 14:33

Hallo Timo,

erst einmal vielen Dank für die schnelle Antwort. Leider bekomme ich noch immer den gleichen Fehler. Habe auch noch etwas über die DUPLICATE Funktion gesucht (die kannte ich vorher nicht). Auch die scheint den Datensatz in den gleichen Mandanten zu kopieren. Alle 'Lösungen' die im Internet danach kommen sind eine weiterer Schleife mit einem Transfer für jedes einzelne Feld.

Gibt es wirklich keinen anderen Trick?

Gruß
Flash

Re: Mit RecordRef Tabellen kopieren

25. Juli 2018 14:40

https://dynamicsuser.net/nav/f/developers/25130/recordref-to-recordref

schau mal da, der macht genau das was du machen moechtest

Re: Mit RecordRef Tabellen kopieren

26. Juli 2018 08:41

Hi, du musst mit dem Ziel RecRef PingPong spielen.
CLEAR oder ähnliches klappt nicht, daher wieder ein CHANGECOMPANY nach dem INSERT, da hier der RecRef noch geöffnet ist.

Habe das mit einigen Datensätzen ausprobiert. Von Quelle an Ziel und umgekehrt. Ebenfalls habe ich den Code in einem dritten Mandaten ausgeführt und so die Datensätze von Quelle nach Ziel übertragen können.


Code:
RecRefQ.OPEN(3,FALSE,'Mandant_Quelle');
IF RecRefQ.FINDSET THEN BEGIN
  REPEAT
    RecRefZ := RecRefQ;
    RecRefZ.CHANGECOMPANY('Mandant_Ziel');
    RecRefZ.INSERT;
    RecRefZ.CHANGECOMPANY('Mandant_Quelle');
  UNTIL RecRefQ.NEXT = 0;
END;

Re: [Gelöst] Mit RecordRef Tabellen kopieren

27. Juli 2018 11:41

Super,

vielen Dank für die Tipps, damit hat es geklappt.

1000 Dank!

Gruß
Flash