Показать сообщение отдельно
Старый 11.12.2009, 08:06   #94  
PSerg is offline
PSerg
Участник
 
12 / 10 (1) +
Регистрация: 09.04.2007
Цитата:
Сообщение от Vezunchik Посмотреть сообщение
1. палка всегда с двумя концами. видел я обновления в "тестовой базе".. которая потом оказывалась продуктивом.. это естественно не минус, но одних плюсов из этого быть не может.
2. в 8.2 это появилось.
3. и какие же это большие возможности оптимизации и улучшения производительности алгоритмов? не устраивает работа стандартного 1с интерпретатора, используй прямые запросы к скулю..
2. Согласен. Но думаю еще долго будет доступно, только пользователям новых крупных проектах. Т.к. в старых или в мелких новых еще долго будет использоваться толстый клиент.
3. Был опыт построения отчетов в 1С с прямыми sql запросами. Редкостная садо-маза. На счет возможностей по оптимизиции объясню на примере. Допустим в базе 1С стоит задача обновить в справочнике "Номенклатура" поле "Наименование". Для простоты его нужно изменить на слово "Hello".
Нам нужно будет написать примерно такой код:

ВыборкаНоменклатура = СправочникиМенеджер.Номенклатура.Выбрать();
Пока ВыборкаНоменклатура.Следующий() Цикл
ОбъектНоменклатура = ВыборкаНоменклатура.ПолучитьОбъект();
ОбъектНоменклатура.Наименование = "Hello";
ОбъектНоменклатура.Записать();
КонецЦикла;

Причем других вариантов нет. (Ну разве что можно поизощраться и не использовать Выборку)

В аксапте эта задача может быть решена следующим образом
X++:
ttsbegin;
while select forupdate InventTable
{
        InventTable.ItemName = "Hello";             
        InventTable.update();
}
ttscommit;
Это вариант аналогичен приведенному выше в 1С
Но в аксапте есть возможности по его оптимизации
Я могу написать еще так
X++:
ttsbegin;
while select forupdate InventTable
{
        InventTable.ItemName = "Hello";             
        InventTable.doupdate();
}
ttscommit;
В этом случае, если в таблице InventTable в методе update есть какие-то дописки (например обновлять еще какое-нибудь поле при обновлении записи), то они не будут отрабатывать, а произойдет просто обновление записи.

А еще я могу написать так
X++:
update_recordset InvetnTable
setting ItemName = "Hello";
В этом случае обновление всех записей произойдет одним запросом.

Последний раз редактировалось PSerg; 11.12.2009 в 08:14.