6. April 2020 10:33
Hi,
ich habe ein seltsames Verhalten bei der Verwendung von RecRef.DUPLICATE beobachtet. Ich möchte gerne mehrere Datensätze verändern und durchlaufe diese per RecRef. Da sich auch Felder ändern können, auf die gefiltert wurde oder ein Datensatz sogar gelöscht werden kann, verwende ich DUPLICATE, statt einer einfachen Zuweisung (ReplaceRecRef := RecRef) um nicht auf die selbe Referenz zu zeigen, wenn Änderungen/Löschungen gemacht werden.
Bei manchen Feldänderungen passiert es aber, dass die Schleife 2x durchläuft. Im Debugger schaut es so aus, als ob die gemachte Feldänderungen beim RecRef.NEXT "plötzlch" erkannt werden und der Zeiger dann wieder an den Anfang springt. Die Schleife wird dann 2x ausgeführt. Verwende ich statt dem DUPLICATE eine Zuweisung, funktioniert es so wie ich es will. Aber normalerweise wäre doch DUPLICATE die richtige Variante, oder? Zumindest wenn man sich die Hilfe dazu anschaut. Aufgefallen ist es mir bei der Massenänderung des Kreditoren Feldes am Artikel. Es passiert nicht immer. Anfangs habe ich vermutet, es passiert nur, wenn durch eine Feldänderung auch andere Felder geändert werden (durch Validate). Das konnte ich aber ausschließen idem ich keine Validierung gemacht habe.
- Code:
IF RecRef.FINDSET THEN
RecRef2 := RecRef.DUPLICATE;
// --- Tu irgendwas. Bsp. Feldänderungen oder auch Datensatz löschen ---
FldRef2 := RecRef2.FIELD(FieldNoInt);
FldRef2.VALDATE(NewValueText);
RecRef2.MODIFY(ValidateRecordBool);
// ---------------------------------------------------------------------
UNTIL RecRef.NEXT = 0;
VG