Администрирование · 10 мин
1С: как отключить обработчики обновления
Как отключить отложенные и монопольные обработчики обновления в 1С: способы через консоль кода, параметры и типовые механизмы. Риски, проверка результата, FAQ.
Обработчики обновления — это процедуры, которые запускаются при переходе информационной базы на новую версию конфигурации: они переносят данные, заполняют новые реквизиты, пересчитывают итоги. Иногда их требуется отключить: обработчик зависает и блокирует вход пользователей, выполняется с ошибкой, а данные уже исправлены вручную, либо обновление нужно провести в тестовом режиме без длительной обработки.
Способ отключения зависит от типа обработчика. Монопольные (оперативные) выполняются сразу при обновлении конфигурации базы данных, отложенные — после него, в фоновом задании или при первом запуске. Отложенные отключаются проще всего: через регистрацию в подсистеме обновления или принудительное изменение статуса. Монопольные требуют вмешательства в код или пропуска через параметры запуска.
Все действия нужно выполнять на копии базы или после создания резервной копии. Отключение обработчика означает, что часть данных не будет приведена к новому формату, и ответственность за последствия ложится на администратора или разработчика, принявшего решение.
Какие бывают обработчики обновления и почему это важно
В конфигурациях на базе Библиотеки стандартных подсистем (БСП) обработчики делятся на три группы. Монопольные выполняются в момент обновления конфигурации базы данных и требуют исключительного доступа. Оперативные тоже идут сразу, но в рамках общего сеанса обновления. Отложенные запускаются после завершения обновления — фоновым заданием, пока пользователи уже работают.
Отличить их можно по описанию в модуле обновления конфигурации (процедура «ПриДобавленииОбработчиковОбновления»): у отложенных установлено свойство «РежимВыполнения = Отложенно», у монопольных — «Монопольно». Именно отложенные чаще всего становятся проблемой: они могут обрабатывать миллионы записей, зависать на часах и блокировать прикладные механизмы, пока не завершатся.
Подготовка: резервная копия и анализ ситуации
Перед отключением любого обработчика создайте полную резервную копию базы: выгрузку в dt через конфигуратор или средствами СУБД для клиент-серверного варианта. Без копии откатить результат невозможно — обработчик мог уже частично изменить данные.
Затем выясните, какой именно обработчик мешает. Откройте раздел «Администрирование — Поддержка и обслуживание — Результаты обновления программы» (в типовых конфигурациях на БСП). Там виден список обработчиков со статусами: выполнен, выполняется, ошибка, не выполнялся. Зафиксируйте имя проблемной процедуры — оно понадобится для точечного отключения.
Способ 1: пропустить отложенные обработчики через консоль кода
Самый безопасный путь — пометить очередь отложенных обработчиков как завершённую средствами БСП. Для этого используется внешняя обработка «Консоль кода» (или «Инструменты разработчика»), запущенная под пользователем с полными правами в монопольном режиме.
Логика такая: очередь обработчиков хранится в служебных данных информационной базы (константа с данными о ходе обновления и план обмена «ОбновлениеИнформационнойБазы»). Программно можно получить очередь и отметить проблемные обработчики как выполненные либо удалить их из очереди. Точный код зависит от версии БСП, поэтому ориентируйтесь на программный интерфейс модуля «ОбновлениеИнформационнойБазы» вашей конфигурации.
// Пример логики (адаптируйте под версию БСП):
Очереди = ОбновлениеИнформационнойБазы.ОчередьОбновления();
// Найти нужный обработчик по имени процедуры
// и удалить его из очереди либо проставить статус выполнения,
// затем записать изменённые данные очереди обратно.После выполнения перезапустите фоновое задание обновления или сеанс пользователя и проверьте, что в «Результатах обновления» проблемный обработчик больше не числится в работе. Если задание запускается снова и берёт обработчик в работу повторно — очередь была сохранена некорректно, повторите операцию в монопольном режиме.
Способ 2: отключить обработчик через расширение конфигурации
Если обработчик монопольный или нужно гарантированно запретить его выполнение при каждом обновлении, используйте расширение конфигурации. Создайте расширение, заимствуйте модуль, где регистрируются обработчики обновления (обычно «ОбновлениеИнформационнойБазы<ИмяКонфигурации>» или общий модуль обновления подсистемы), и в аннотации «ИзменениеИКонтроль» закомментируйте или удалите строки добавления нужных обработчиков.
Метод «ИзменениеИКонтроль» важен: он сохраняет контроль соответствия с типовым кодом и не ломает обновление расширения при следующих релизах. Прямое изменение конфигурации (снятие с поддержки) делать не рекомендуется — это усложнит все последующие обновления.
Учтите ограничение: расширение должно быть подключено до начала обновления. Если база уже обновлена и обработчик выполнился, расширение задним числом ничего не отменит — понадобится восстановление из копии или ручная корректировка данных.
- 1Создайте резервную копию базы
- 2Создайте новое расширение в конфигураторе
- 3Заимствуйте модуль регистрации обработчиков обновления
- 4Закомментируйте строки добавления ненужных обработчиков (режим ИзменениеИКонтроль)
- 5Сохраните расширение и перезапустите базу
- 6Выполните обновление и проверьте результаты обновления
Способ 3: обновить конфигурацию без запуска обработчиков
В некоторых сценариях нужно просто обновить структуру базы, не запуская обновление данных — например, при переносе между тестовыми средами. В конфигураторе при обновлении конфигурации базы данных обработчики БСП запускаются автоматически при первом входе в режим предприятия, поэтому достаточно не запускать предприятие до момента, пока не будет принято решение.
Если обновление уже запущено и монопольный обработчик выполняется, прервать его штатно нельзя — остаётся дождаться завершения либо завершить сеанс принудительно, что чревато незавершёнными транзакциями и требует последующей проверки целостности данных. Именно поэтому большие обновления на объёмных базах сначала прогоняют на копии: там видно, какие обработчики идут долго, и их можно отключить заранее.
Сравнение способов отключения
Подходит для отложенных обработчиков в работающей базе. Быстро, но требует точного кода под версию БСП.
Надёжный постоянный запрет, включая монопольные обработчики. Действует только при установке до обновления.
Работает всегда, но снимает модули с поддержки и усложняет будущие обновления. Использовать в крайнем случае.
Проверка результата и типичные ошибки
После отключения обязательно проверьте три вещи. Первое: в «Результатах обновления программы» не осталось обработчиков в статусе «Выполняется» или «Ошибка». Второе: фоновое задание отложенного обновления завершено и не перезапускается. Третье: прикладные режимы, которые были заблокированы сообщением «Выполняется обновление данных», стали доступны.
Дополнительно откройте журнал регистрации за период обновления и убедитесь, что нет повторяющихся ошибок по отключённому обработчику. Если ошибки продолжают появляться — значит, обработчик вызывается из другого места (например, из обработчика ожидания или регламентного задания), и отключать нужно там.
Когда отключать обработчики нельзя
Не отключайте обработчики, которые переносят данные между хранилищами при смене структуры: например, перенос остатков на новые регистры, заполнение новых обязательных реквизитов, конвертацию форматов. Без них программа формально обновится, но рабочие данные окажутся недоступны или некорректны.
Относительно безопасны для пропуска обработчики, пересчитывающие служебные итоги, обновляющие кэши, предопределённые элементы справочников и данные, которые можно восстановить повторным запуском. Если сомневаетесь — найдите описание процедуры в коде: комментарии разработчиков в шапке обработчика обычно указывают, что именно он делает.
Как выбрать действие
FAQ
Можно ли отключить все обработчики обновления сразу?
Технически — да, очистив всю очередь отложенных обработчиков или закомментировав регистрацию монопольных. Практически это почти всегда вредно: среди обработчиков есть критичные, переносящие данные на новую структуру. Отключайте точечно, по имени конкретной процедуры.
Обработчик отключён, но сообщение «Выполняется обновление» не исчезло. Что делать?
Проверьте, что изменения очереди записаны в монопольном режиме, и перезапустите сеанс. Также убедитесь, что не осталось других незавершённых обработчиков — сообщение показывается, пока не выполнена вся очередь, а не один конкретный обработчик.
Как повторно запустить обработчик, который был отключён по ошибке?
Верните его в очередь программно (добавлением записи о невыполненном обработчике) или восстановите регистрацию в расширении и выполните обновление данных повторно. В некоторых конфигурациях доступна кнопка повторного запуска в «Результатах обновления программы».
Отличается ли отключение в клиент-серверной базе от файловой?
Логика та же, но в клиент-серверном варианте важнее монопольный доступ: фоновые задания выполняются на сервере, и параллельная запись очереди более вероятна. Также резервную копию удобнее делать средствами СУБД.
Влияет ли отключение обработчиков на последующие обновления конфигурации?
Само по себе — нет, если речь об очистке очереди. Но если обработчик не выполнил свою работу, обработчики следующих версий могут рассчитывать на его результат и завершиться ошибкой. Перед следующим обновлением проверьте целостность данных.
Можно ли отключить обработчики без прав разработчика?
Нет. Для работы с консолью кода, расширениями и служебными данными требуются полные права и, как правило, доступ к конфигуратору. Обычному пользователю доступен только просмотр результатов обновления.
Что важно запомнить
Отключайте обработчики обновления точечно и только после резервной копии. Отложенные — через очистку очереди в монопольном режиме, постоянный запрет — через расширение. Обработчики, переносящие данные, отключать нельзя: сначала решайте проблему с данными, потом принимайте решение о пропуске.