К статье
Практический материал

Разработка и Конфигурация · 9 мин

Как отключить подписку на событие в 1С

Как отключить подписку на событие в 1С: через конфигуратор, расширение и кодом. Проверка результата, типичные ошибки и ответы на частые вопросы.

Подписка на событие в 1С — это механизм, который автоматически вызывает процедуру-обработчик при определённом действии с объектом: записи документа, проведении, удалении справочника. Отключить подписку требуется, когда обработчик мешает работе пользователей, вызывает ошибки, замедляет проведение документов или дублирует логику после доработки конфигурации.

Способ отключения зависит от того, где расположена подписка: в основной конфигурации, в расширении или в типовом функционале, который нельзя менять напрямую. Также имеет значение, стоит ли база на полной поддержке — от этого зависит, потребуется ли снятие с поддержки и что произойдёт при следующем обновлении.

Ниже разобраны все рабочие варианты: отключение через конфигуратор, через расширение, программный обход обработчика, а также проверка результата и типичные ошибки, из-за которых подписка «не отключается».

Где найти подписки на события в конфигураторе

Подписки на события находятся в дереве конфигурации: ветка «Общие» → «Подписки на события». Откройте конфигуратор, загрузите конфигурацию и разверните этот раздел — вы увидите список всех подписок базы. У каждой подписки есть ключевые свойства: источник (объекты, на которые она реагирует), событие (ПриЗаписи, ПередЗаписью, ОбработкаПроведения и другие) и обработчик — процедура из общего модуля.

Если вы не знаете точного имени подписки, но знаете обработчик, воспользуйтесь глобальным поиском (Ctrl+Shift+F) по имени процедуры. Другой способ — открыть свойства конкретного объекта (например, документа) и на закладке «Подписки на события» посмотреть, какие подписки на него назначены.

Как отключить подписку через конфигуратор

Стандартный способ — отключение непосредственно в конфигурации. Откройте свойства нужной подписки и очистите поле «Обработчик» либо снимите флажок использования, если он доступен в вашей версии платформы. После этого выполните обновление конфигурации базы данных (F7 или «Конфигурация → Обновить конфигурацию базы данных»).

Удалять саму подписку или общий модуль с обработчиком не обязательно и часто нежелательно: код может понадобиться позже, а удаление модуля сломает другие подписки, если они используют тот же модуль. Достаточно разорвать связь «событие → обработчик».

Порядок действий в конфигураторе
  1. 1
    Сделайте резервную копию базы или выгрузку конфигурации
  2. 2
    Откройте «Общие → Подписки на события» и найдите нужную подписку
  3. 3
    Очистите свойство «Обработчик» в палитре свойств
  4. 4
    Обновите конфигурацию базы данных (F7)
  5. 5
    Проверьте работу: выполните действие, которое раньше вызывало обработчик

Если база файловая и работает в монопольном режиме, обновление пройдёт сразу. В клиент-серверном варианте потребуется монопольный доступ — пользователей придётся попросить выйти или завершить сеансы принудительно через консоль кластера.

Как отключить подписку в типовой конфигурации без снятия с поддержки

Если конфигурация типовая и стоит на полной поддержке, прямое изменение подписки приведёт к снятию объекта с поддержки и усложнит будущие обновления. Правильный путь — механизм расширений. Создайте расширение (Конфигурация → Расширения конфигурации), добавьте в него заимствованную подписку и переопределите поведение: либо замените обработчик пустой процедурой, либо измените состав источников.

Альтернативный вариант без расширения — внести условие в начало обработчика типовой подписки, если конфигуратор всё же позволяет редактировать модуль. Однако это тоже изменение типового кода, поэтому при обновлении потребуется сравнение и объединение. Расширение в этом смысле безопаснее: оно хранится отдельно и не конфликтует с обновлением поставщика.

Способы отключения подписки

Очистка обработчика в конфигураторе

Подходит для собственных и снятых с поддержки конфигураций. Быстро, но изменение войдёт в конфигурацию и потребует объединения при обновлении.

Расширение конфигурации

Оптимально для типовых конфигураций на поддержке. Не мешает обновлениям, но требует проверки совместимости расширения после каждого обновления.

Условие в коде обработчика

Гибкий вариант, когда подписку нужно отключать выборочно — по пользователю, организации или настройке. Минус: обработчик всё равно вызывается, тратя ресурсы на проверку условия.

Как программно обойти выполнение обработчика

Иногда подписку нужно не отключить полностью, а пропускать в определённых ситуациях — например, при обмене данными или массовой загрузке. Для этого в начало обработчика добавляют проверку параметра объекта:

Процедура МояПодпискаПриЗаписи(Источник, Отказ) Экспорт

Если Источник.ОбменДанными.Загрузка Тогда

Возврат;

КонецЕсли;

// основная логика обработчика

КонецПроцедуры

Также можно управлять выполнением через функциональную опцию или константу: обработчик проверяет значение настройки и завершает работу, если механизм выключен. Это удобно, когда отключение должно быть обратимым и доступным администратору без конфигуратора.

bsl
Если Источник.ОбменДанными.Загрузка Тогда
	Возврат;
КонецЕсли;

Проверка результата после отключения

После обновления конфигурации убедитесь, что обработчик действительно не вызывается. Самый надёжный способ — поставить точку останова в обработчике и выполнить действие, которое раньше запускало подписку (например, провести документ). Если отладчик не останавливается — подписка отключена.

Дополнительно проверьте смежную функциональность: подписки часто выполняют скрытую работу — заполняют регистры, формируют номера, синхронизируют данные. После отключения убедитесь, что эти побочные результаты не требовались бизнес-процессу. Проведите несколько документов разных видов и сравните движения по регистрам с ожидаемыми.

Контрольные точки

Как проверить результат

Вызов обработчика
Норма

Точка останова в обработчике не срабатывает при записи объекта

Тревожный признак

Отладчик по-прежнему останавливается — отключена не та подписка или есть дублирующая

Запись и проведение документов
Норма

Документы записываются без ошибок и лишних сообщений

Тревожный признак

Появились ошибки о незаполненных данных, которые раньше заполняла подписка

Движения по регистрам
Норма

Наборы записей формируются как ожидается

Тревожный признак

Регистры остались пустыми — отключённая подписка выполняла нужную работу

Типичные ошибки и ограничения

Самая частая ошибка — отключение не той подписки. На одно событие одного объекта может быть назначено несколько подписок, и они выполняются все. Если после отключения поведение не изменилось, проверьте, нет ли второй подписки с похожим именем или обработчика в модуле самого объекта (процедуры ПередЗаписью, ПриЗаписи в модуле объекта работают независимо от подписок).

Вторая ловушка — обновление типовой конфигурации. Если подписка была отключена прямым изменением, при обновлении сравнение-объединение может вернуть обработчик обратно, если не снять соответствующую галочку в окне объединения. В расширении такого риска нет, но после обновления платформы или конфигурации стоит проверить, что расширение по-прежнему применяется и не отключено из-за несовместимости.

Типичные ошибки
01
Отключили подписку, но забыли обновить конфигурацию базы данных — изменения не вступили в силу
02
Удалили общий модуль обработчика, который использовали другие подписки — получили ошибки при записи объектов
03
Изменили типовую подписку без расширения — при обновлении конфигурации изменение было затёрто
04
Не заметили вторую подписку на то же событие — поведение не изменилось, и поиск ошибки затянулся

Частые вопросы

Можно ли отключить подписку на событие без конфигуратора?

Напрямую — нет: подписка является объектом метаданных и изменяется только в конфигураторе или через расширение. Обходной путь — предусмотренная разработчиком настройка (константа, функциональная опция), которую обработчик проверяет в начале работы. Если такой настройки нет, её можно добавить доработкой.

Отключится ли подписка, если удалить общий модуль с обработчиком?

Конфигуратор не даст удалить модуль, пока на него есть ссылки, либо выдаст ошибки при проверке конфигурации. Даже если удалить принудительно, подписка останется с битой ссылкой на обработчик, и при каждом событии будет возникать ошибка. Правильно сначала очистить обработчик в подписке, а потом уже решать судьбу модуля.

Почему подписка срабатывает, хотя обработчик очищен?

Чаще всего конфигурация базы данных не обновлена — изменение существует только в конфигурации поставщика/разработчика. Вторая причина — дублирующая подписка или аналогичный обработчик в модуле самого объекта. Третья — расширение конфигурации, которое добавляет свою подписку на то же событие.

Как отключить подписку только для одного пользователя или одной организации?

Штатного свойства «применимость» у подписок нет. Реализуйте проверку внутри обработчика: по параметрам сеанса (текущий пользователь), по реквизитам источника (организация) или по значению настройки в регистре сведений. При невыполнении условия обработчик сразу завершает работу через Возврат.

Что произойдёт с подпиской при обновлении типовой конфигурации?

Если подписка изменена в основной конфигурации, при обновлении появится окно сравнения-объединения, где нужно вручную сохранить своё изменение — иначе типовой обработчик вернётся. Подписки, переопределённые через расширение, обновление не затрагивает, но стоит проверить, что расширение осталось активным и совместимым.

Можно ли временно отключить все подписки разом?

Отдельной настройки «отключить все подписки» в платформе нет. Для массовых операций (загрузка данных, конвертация) используют параметр ОбменДанными.Загрузка = Истина у записываемых объектов — корректно написанные обработчики при этом пропускают свою логику. Полное отключение возможно только редактированием каждой подписки в конфигураторе.

Итог

Что важно запомнить

Подписка отключается очисткой обработчика в конфигураторе с последующим обновлением конфигурации базы данных. Для типовых конфигураций на поддержке используйте расширение — это сохранит возможность обновлений. Перед отключением сделайте копию базы и проверьте, не выполняла ли подписка скрытую работу по заполнению регистров и реквизитов.