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