3. März 2016 12:39
3. März 2016 12:52
// IF MyRecRef2.ISEMPTY THEN .... // ist aufgrund der vorherigen Codezeile immer true ...
IF MyRecRef.FIND('-') THEN BEGIN
REPEAT
MyRecRef2 := MyRecRef;
MyRecRef2.INSERT;
UNTIL MyRecRef.NEXT = 0;
END;
3. März 2016 13:55
3. März 2016 14:10
3. März 2016 14:16
Natalie hat geschrieben:Hat es einen bestimmten Grund, dass du hier mit RecordRefs arbeitest? Verwendest du die Funktion in Wirklichkeit globaler?
3. März 2016 14:34
3. März 2016 14:48
Hatte ich schon verstanden.navCH hat geschrieben:Der sagt mir die Warengruppe existiert bereits, obwohl die Zieltabelle leer ist
3. März 2016 15:23
Natalie hat geschrieben:Muss der Ansatz mit RecordRef bleiben, so scheint es mir, als wäre - wie gesagt - MyRecRef2 := MyRecRef zu "hart" und muss durch eine FieldRef-Schleife ersetzt werden.
Company.Name:='Ziel_Mandant';
MyRecRef2.OPEN(50014,FALSE,Company.Name);
MyRecRef2.DELETEALL;
Company.Name:='Mandant';
MyRecRef.OPEN(50014,FALSE,Company.Name);
IF MyRecRef.FINDFIRST THEN
REPEAT
MyFieldRef3:=MyRecRef.FIELDINDEX(3);
MyFieldRef2:=MyRecRef.FIELDINDEX(2);
MyFieldRef1:=MyRecRef.FIELDINDEX(1);
IF MyRecRef2.ISEMPTY THEN
REPEAT
MyFieldRef6:=MyRecRef2.FIELDINDEX(3);
MyFieldRef5:=MyRecRef2.FIELDINDEX(2);
MyFieldRef4:=MyRecRef2.FIELDINDEX(1);
MyFieldRef6:=MyFieldRef3;
MyFieldRef5:=MyFieldRef2;
MyFieldRef4:=MyFieldRef1;
MyRecRef2.INSERT;
UNTIL MyRecRef2.NEXT = MyRecRef.COUNT;
UNTIL MyRecRef.NEXT(+1)=0;
MyRecRef.CLOSE;
MyRecRef2.CLOSE;
Company.Name:='Ziel_Mandant';
MyRecRef2.OPEN(50014,FALSE,Company.Name);
MyRecRef2.DELETEALL;
Company.Name:='Mandant';
MyRecRef.OPEN(50014,FALSE,Company.Name);
IF MyRecRef.FIND('-') THEN BEGIN
REPEAT
MyFieldRef3:=MyRecRef.FIELDINDEX(3);
MyFieldRef2:=MyRecRef.FIELDINDEX(2);
MyFieldRef1:=MyRecRef.FIELDINDEX(1);
MyFieldRef6:=MyRecRef2.FIELDINDEX(3);
MyFieldRef5:=MyRecRef2.FIELDINDEX(2);
MyFieldRef4:=MyRecRef2.FIELDINDEX(1);
MyFieldRef6:=MyFieldRef3;
MyFieldRef5:=MyFieldRef2;
MyFieldRef4:=MyFieldRef1;
MyRecRef2.INSERT;
UNTIL MyRecRef.NEXT = 0;
END;
MyRecRef.CLOSE;
MyRecRef2.CLOSE;
3. März 2016 16:37
IF SourceRecRef.FIND('-') THEN BEGIN
REPEAT
FOR I := 1 TO SourceRecRef.FIELDCOUNT DO BEGIN
SourceFieldRef := SourceRecRef.FIELDINDEX(I);
TargetFieldRef := TargetRecRef.FIELDINDEX(I);
TargetFieldRef.VALUE := SourceFieldRef.VALUE;
END;
TargetRecRef.INSERT;
UNTIL SourceRecRef.NEXT = 0;
END;
3. März 2016 16:40
Company.Name:='Ziel_Mandant';
MyRecRef2.OPEN(50014,FALSE,Company.Name);
MyRecRef2.DELETEALL;
COMMIT;
Company.Name:='Mandant';
MyRecRef.OPEN(50014,FALSE,Company.Name);
IF MyRecRef.FINDFIRST THEN
REPEAT
MyFieldRef3:=MyRecRef.FIELDINDEX(3);
MyFieldRef2:=MyRecRef.FIELDINDEX(2);
MyFieldRef1:=MyRecRef.FIELDINDEX(1);
MyFieldRef6:=MyRecRef2.FIELDINDEX(3);
MyFieldRef5:=MyRecRef2.FIELDINDEX(2);
MyFieldRef4:=MyRecRef2.FIELDINDEX(1);
MyFieldRef6.VALUE:=MyFieldRef3.VALUE;
MyFieldRef5.VALUE:=MyFieldRef2.VALUE;
MyFieldRef4.VALUE:=MyFieldRef1.VALUE;
MyRecRef2.INSERT;
UNTIL MyRecRef.NEXT(+1)=0;
MyRecRef2.CLOSE;
MyRecRef.CLOSE;
3. März 2016 16:48
IF NOT (FORMAT(SourceFieldRef.TYPE) IN['Binary','BLOB']) AND (FORMAT(SourceFieldRef.CLASS) = 'Normal') THEN
TargetFieldRef.VALUE := SourceFieldRef.VALUE;
3. März 2016 17:07
3. März 2016 17:27
fiddi hat geschrieben:wer das mal in NAV 2009 in Real- Life sehen möchte, und nicht immer alles neu programmieren möchte, sollte sich mal die Einrichtungsscheckliste anschauen, die macht so
[...]
Gruß Fiddi
3. März 2016 17:43
In der Einrichtungscheckliste gehen aber nur bestimmte Tabellen
4. März 2016 12:45
Timo Lässer hat geschrieben:Durch die direkte Zuweisung wird die gesamte Referenz übertragen, inklusive dem Verweis auf den Mandanten.
Daher muss der FieldRef-Value übergeben werden, anstatt den FieldRef zuzuweisen:
- Code:
IF SourceRecRef.FIND('-') THEN BEGIN
REPEAT
FOR I := 1 TO SourceRecRef.FIELDCOUNT DO BEGIN
SourceFieldRef := SourceRecRef.FIELDINDEX(I);
TargetFieldRef := TargetRecRef.FIELDINDEX(I);
TargetFieldRef.VALUE := SourceFieldRef.VALUE;
END;
TargetRecRef.INSERT;
UNTIL SourceRecRef.NEXT = 0;
END;
4. März 2016 14:18
fiddi hat geschrieben:Und ganz so einfach ist das kopieren auch nicht, denn wenn man abhängige Tabellen kopiert, muss man schon sehr genau aufpassen, in welcher Reihenfolge man kopiert
4. März 2016 23:00
navCH hat geschrieben:Die Schleife von Timo Lässer ist für mehrere Tabellen, mit unterschiedlichen Fieldcount sehr gut geeignet!
SourceRecRef.OPEN(DATABASE::Customer,FALSE,'Company A');
TargetRecRef.OPEN(DATABASE::Customer,FALSE,'Company B');
IF SourceRecRef.FIND('-') THEN BEGIN
REPEAT
FOR I := 1 TO SourceRecRef.FIELDCOUNT DO BEGIN
SourceFieldRef := SourceRecRef.FIELDINDEX(I);
IF NOT (FORMAT(SourceFieldRef.TYPE) IN['Binary','BLOB']) AND (FORMAT(SourceFieldRef.CLASS) = 'Normal') THEN BEGIN
TargetFieldRef := TargetRecRef.FIELDINDEX(I);
TargetFieldRef.VALUE := SourceFieldRef.VALUE;
END;
END;
TargetRecRef.INSERT;
UNTIL SourceRecRef.NEXT = 0;
END;