Hello everyone
I am writing a script that is supposed to copy Item data from one company to another.
I have a problem with Items that already exist - I want to modify them but I don't want to write all fields in the table. I decided to create loops and use RecordRef and FieldRef. Unfortunately, this approach takes a long time (over 24 hours).
sourceTable.OPEN(objectId, FALSE, fromCompany);
sourceFieldFilter := sourceTable.FIELD(54);
sourceFieldFilter.SETFILTER('FALSE');
IF sourceTable.FINDSET THEN BEGIN
targetTable.OPEN(objectId, FALSE, toCompany);
REPEAT
targetTable.INIT;
FOR intCounter := 1 TO sourceTable.FIELDCOUNT() DO BEGIN
sourceField := sourceTable.FIELDINDEX(intCounter);
targetField := targetTable.FIELD(sourceField.NUMBER);
targetField.VALUE(sourceField.VALUE);
IF FORMAT(sourceField.CLASS) <> 'FlowField' THEN BEGIN
targetTable.MODIFY(FALSE);
COMMIT;
END;
END;
UNTIL sourceTable.NEXT = 0;
END;
targetTable.CLOSE();
sourceTable.CLOSE();
I am looking for another solution. I wrote something like that (but it doesn't work):
fromItem.INIT;
fromItem.CHANGECOMPANY(companyName);
fromItem.SETFILTER(fromItem.Blocked, 'FALSE');
IF fromItem.FINDSET THEN BEGIN
REPEAT
IF toItem.GET(fromItem."No.") THEN BEGIN
toItem := fromItem
toItem.MODIFY;
END;
COMMIT;
UNTIL fromItem.NEXT = 0;
END;
System has a problem with MODIFY function, if the record already exists - as if it would also like to modify the key (??).
I get the following message:
There are over 200 fields in my table and I don't want to write each field in the style:
toItem.Fields1: = fromItem.Fields1;
toItem.Fields2: = fromItem.Fields2;
toItem.Fields3: = fromItem.Fields3;
....
....
toItem.Fields200: = fromItem.Fields200;toItem.MODIFY
it will work but I am looking for another solution.
Do you have any suggestions?
Problem solved
toItem.TRANSFERFIELDS(fromItem, FALSE);
instead of
toItem := fromItem;
Sohail Ahmed
815
YUN ZHU
773
Super User 2025 Season 1
Mansi Soni
559