Показать сообщение отдельно
Старый 29.10.2008, 21:40   #18  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,275 / 3476 (122) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Цитата:
Сообщение от 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* будут некорректными. Тот же эффект будет наблюдаться и при использовании временных таблиц.
__________________
Возможно сделать все. Вопрос времени

Последний раз редактировалось sukhanchik; 29.10.2008 в 21:53.
За это сообщение автора поблагодарили: ZVV (1), Logger (5), mayk (1), AP-1055D (1).