Упаковка метода от "уставания" транзакции
Материалы данной разработки уже применялись в :
http://avprog.ru/profile/8196/projects/1367/
http://avprog.ru/profile/8196/projects/1340/
Ни для кого не секрет, что использование методов НачатьТранзакцию(); ЗафиксироватьТранзакцию();
позволяет не только записать / отменить в случае ошибки все проделанные программно изменения
с объектами ИБ, но и значительно ускорить выполнение модулей. Однако, при наращивании объемов
изменений скорость начинает падать, эффект ускорения сходит на нет. Способ борьбы с замедлением
давно известен: разбивать одну длинную транзакцию на несколько, фиксируя предыдущую и начиная новую
внутри первого из вложенных циклов, либо по достижении назначенного счетчика (например, количество
проведенных документов) определенных максимальных уровней, что-то вроде:
Вот еще вариант, завязанный на время выполнения транзакции - 1 минута
Этими строчками кода вполне можно обойтись. Если все таки необходимо задавать частоту прерывания
транзакции в диалоге, то эта скачиваемая обработка имеет в своем составе и элементы диалога и
несколько процедур для этой задачи. В обработке присутствует функционал прерывания или разбития
транзакции по счетчику, и по времени, а также пример работы.
Успехов!
http://avprog.ru/profile/8196/projects/1367/
http://avprog.ru/profile/8196/projects/1340/
Ни для кого не секрет, что использование методов НачатьТранзакцию(); ЗафиксироватьТранзакцию();
позволяет не только записать / отменить в случае ошибки все проделанные программно изменения
с объектами ИБ, но и значительно ускорить выполнение модулей. Однако, при наращивании объемов
изменений скорость начинает падать, эффект ускорения сходит на нет. Способ борьбы с замедлением
давно известен: разбивать одну длинную транзакцию на несколько, фиксируя предыдущую и начиная новую
внутри первого из вложенных циклов, либо по достижении назначенного счетчика (например, количество
проведенных документов) определенных максимальных уровней, что-то вроде:
НачатьТранзакцию(); Для ... По ... Цикл ... КолОбъектов = КолОбъектов + 1; Если КолОбъектов%МаксКолОбъектов = 0 Тогда ЗафиксироватьТранзакцию(); НачатьТранзакцию(); КонецЕсли; КонецЦикла; ЗафиксироватьТранзакцию();
Вот еще вариант, завязанный на время выполнения транзакции - 1 минута
НачатьТранзакцию(); НачВремя = _getperformancecounter(); Интервал = 60000; // милисекунд в минуте Для ... По ... Цикл ... Если _getperformancecounter() > НачВремя + Интервал Тогда ЗафиксироватьТранзакцию(); НачатьТранзакцию(); НачВремя = _getperformancecounter(); КонецЕсли; КонецЦикла; ЗафиксироватьТранзакцию();
Этими строчками кода вполне можно обойтись. Если все таки необходимо задавать частоту прерывания
транзакции в диалоге, то эта скачиваемая обработка имеет в своем составе и элементы диалога и
несколько процедур для этой задачи. В обработке присутствует функционал прерывания или разбития
транзакции по счетчику, и по времени, а также пример работы.
Успехов!
Файлы обработки:
- Tranzaktsiya_s_preryvaniem.rar Для скачивания нужна регистрация
-
В этой группе 1С
- Симплекс-метод
- Создание шаблона автоподстановки
- Сравнение проводок в 2-х информационных базах 1С: Предприятие 7.7
- Обновление строки состояния 2
- глПрогресс(). Индикатор прогресса с оценкой времени в виде: Обработано: 15%. Осталось: 00:01:15.
- Исправление ошибки 1С:Предприятие 7.7/8.0 - 100% загрузка процессора при ожидании блокировки
- V8Unpack
- Дерево зависимостей видов расчета для ЗУП