Ускоряем удаление объектов штатной обработки комментарием 1 строчки кода
У меня достаточно часто бывают случаи, когда нужно удалить более 1000 объектов, при этом в программе работают пользователи. Я пользуюсь типовой обработкой «Удаление помеченных объектов». Немного поразбирвашись в коде, нашел очень простое решение, как ускорить удаление объектов.
- Описание
- Подробнее
Описание
В типовой обработке Удаление помеченных объектов используются 2 механизма работы
1. в монопольном режиме выполняется процедура УдалитьОбъекты
2. в конкурентном режиме объекты удаляются в транзакции с проверкой ссылочной связи
Режим 2 подходит для повседневных задач, однако время удаления возрастает за счет того, что передается информация на клиент об удаляемых объектах

В модуле менеджера обработки я нашел такой код
// Регистрация сообщения для чтения из клиентского сеанса.
ДлительныеОперации.СообщитьПрогресс(Процент, Текст);
Который как раз отвечает за передачу информации в пользовательский сеанс
Код находится в процедуре ОтметитьПрогрессОбходаКоллекции(ПараметрыВыполнения, ИмяКоллекции), в начале которой есть строчки
Если Не ПараметрыВыполнения.Интерактивное Тогда
Возврат;
КонецЕсли;
То есть для того, чтобы передача на клиент не осуществлялась, нужно установить ПараметрыВыполнения.Интерактивное = Ложь
Данный параметр устанавливается в процедуре ИнициализироватьПараметры(ПараметрыВыполнения)
ПараметрыВыполнения.Вставить("Интерактивное", ПараметрыВыполнения.Свойство("ПериодЗаписи"));Получается, что значение параметра определяется наличием ключа ПериодЗаписи в передаваемых параметрах в экспортную процедуру модуля УдалитьПомеченныеОбъектыИнтерактивно(ПараметрыВыполнения, АдресХранилища)
Поиск места, где этот параметр устанавливается, привели меня в модуль формы ОсновнаяФорма в функцию ЗапуститьФоновоеЗадание(Знач ПараметрыМетода) к строчке
ПараметрыМетода.Вставить("ПериодЗаписи", 3); // СекундКоторую я просто закомментировал
// ПараметрыМетода.Вставить("ПериодЗаписи", 3); // Секунд
Теперь обработка стала удалять объекты быстрее
P.S. Если хотите, чтобы во время выполнения крутился бублик, как на скриншоте ниже

Нужно исправить строчку
ПоказыватьБублик = ПараметрыМетода.УдалятьПомеченные И Монопольно;На
ПоказыватьБублик = ПараметрыМетода.УдалятьПомеченные;В той же функции ЗапуститьФоновоеЗадание(Знач ПараметрыМетода)

