Цитата:
Сообщение от
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";
В этом случае обновление всех записей произойдет одним запросом.