Просветите по ограничениям на НачатьТранзакцию() - ЗафиксироватьТранзакцию()
☑
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
Да, нужно ещё и начинать, торопился
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс