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