Цитата:
Сообщение от
Logger
Такой код я бы лучше заменил вызовом
X++:
tmpLedgerTable.data(ledgerTable);
tmpLedgerTable.insert();
Результат будет тот же, но сэкономит процессорное время.
В отличии от метода buf2buf - метод data имеет две особенности, о которых нужно помнить при его использовании:
1. При необходимости программно скопировать запись в постоянной таблице - данный метод просто спозиционирует переменную таблицы на ту же запись - т.е следующая конструкция только "откопирует" курсор, при этом RecId не будет равен нулю (что логично, но не всегда удобно):
X++:
LedgerTable fromLedgerTable, toLedgerTable;
;
select fromLedgerTable;
toLedgerTable.data(fromLedgerTable);
2. Метод data (в отличии от buf2buf) копирует все системные поля. Но если поля modified* и RecId все равно перезапишутся при вызове метода insert(), то остальные поля к примеру create* и dataAreaId не перезапишутся. Таким образом следующий код приведет к созданию записи не в той компании:
X++:
LedgerTable fromLedgerTable, toLedgerTable;
;
changecompany ('dax')
{
select fromLedgerTable;
changecompany ('nav')
{
toLedgerTable.data(fromLedgerTable);
toLedgerTable.insert(); // Будет создана запись в компании dax
}
}
не говоря уже о том, что данные в полях create* будут некорректными. Тот же эффект будет наблюдаться и при использовании временных таблиц.