Просветите по ограничениям на НачатьТранзакцию() - ЗафиксироватьТранзакцию()
☑
0
Dzenn
гуру
21.08.15
✎
15:07
Допустим, стоит задача обработки всех элементов справочника
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| нсиМТР.ПометкаУдаления = ЛОЖЬ"
Выборка = Запрос.Выполнить().Выбрать();
НачатьТранзакцию();
ИИ = 0;
Пока Выборка.Следующий() Цикл
МтрОб = Выборка.Ссылка.ПолучитьОбъект();
МтрОб.Удалить(Истина);
ИИ = ИИ + 1;
Если ИИ = 500 Тогда
ЗафиксироватьТранзакцию();
ИИ = 0;
КонецЕсли;
КонецЦикла;
Если ТранзакцияАктивна()
ЗафиксироватьТранзакцию();
КонецЕсли;
Как платформа ограничивает количество элементов в транзакции и есть ли вообще такие ограничения?
1
ДенисЧ
21.08.15
✎
15:08
Сколько памяти хватит
2
vde69
21.08.15
✎
15:12
у тебя ошибка.... фиксация в цикле...
по факту у тебя на второй итерации будет ошибка всегда...
3
Гёдза
21.08.15
✎
15:12
Если ИИ = 500 Тогда
ЗафиксироватьТранзакцию();
НачатьТранзакцию();
ИИ = 0;
КонецЕсли;
4
vde69
21.08.15
✎
15:13
или надо сделать так
НачатьТранзакцию();
ИИ = 0;
Пока Выборка.Следующий() Цикл
МтрОб = Выборка.Ссылка.ПолучитьОбъект();
МтрОб.Удалить(Истина);
ИИ = ИИ + 1;
Если ИИ = 500 Тогда
ЗафиксироватьТранзакцию();
НачатьТранзакцию();
ИИ = 0;
КонецЕсли;
КонецЦикла;
Если ТранзакцияАктивна()
ЗафиксироватьТранзакцию();
КонецЕсли;
5
Dzenn
гуру
21.08.15
✎
15:13
Да, нужно ещё и начинать, торопился
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший