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

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

Как отключить процедуру в 1С

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

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

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

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

Где находится процедура и почему это важно

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

Чтобы найти процедуру, откройте конфигуратор и используйте глобальный поиск (Ctrl+Shift+F) по имени процедуры. В результатах будет видно, в каких модулях она определена и откуда вызывается. Обязательно проверьте все места вызова — если процедура возвращает значение через параметры или используется в выражениях, её отключение может нарушить логику вызывающего кода.

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

Процедура в общем модулеВызывается из разных мест

Проверьте все вызовы через глобальный поиск перед отключением

Обработчик события объектаВызывается платформой

Отключается изменением кода в модуле объекта или через расширение

Подписка на событиеСрабатывает на записи и проведении

Отключается снятием флага в свойствах подписки

Типовая конфигурация на поддержкеИзменения затрудняют обновление

Используйте расширение вместо правки типового кода

Способ 1. Комментирование тела процедуры

Самый прямой способ — закомментировать код внутри процедуры, оставив её объявление. Для этого выделите строки тела и нажмите Ctrl+/ или добавьте двойной слэш «//» в начало каждой строки. Заголовок процедуры («Процедура ИмяПроцедуры(Параметры)») и завершение («КонецПроцедуры») оставьте без изменений.

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

Ограничение способа: если процедура должна что-то возвращать через параметры или заполнять структуру, вызывающий код может получить неинициализированные значения. Проверьте, что вызывающий модуль корректно обрабатывает пустой результат.

bsl
Процедура ОтправитьУведомление(Документ) Экспорт
	// Отключено: уведомления временно не отправляются
	// ТекстПисьма = СформироватьТекст(Документ);
	// ОтправитьПочту(ТекстПисьма);
КонецПроцедуры

Способ 2. Возврат в начале процедуры

Альтернатива комментированию — добавить оператор «Возврат;» первой строкой тела процедуры. Код после него становится недостижимым и не выполняется, а сама процедура остаётся синтаксически корректной. Отключение и включение выполняется одной строкой, что удобно при экспериментах.

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

Для функций этот способ требует осторожности: «Возврат;» без значения вернёт Неопределено. Если вызывающий код ожидает конкретный тип (число, булево, структуру), лучше вернуть осмысленное значение по умолчанию, например «Возврат Ложь;» или «Возврат 0;».

Способ 3. Отключение подписки на событие

Если процедура выполняется как обработчик подписки на событие (например, «ПриЗаписи» документа или «ОбработкаПроведения»), отключать её код не обязательно — достаточно отключить саму подписку. Это самый чистый способ, потому что код процедуры вообще не трогается.

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

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

Способ 4. Отключение через расширение конфигурации

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

Чтобы отключить процедуру через расширение, создайте расширение (Конфигурация → Расширения конфигурации → Создать), добавьте в него нужный общий модуль или модуль объекта и заимствуйте процедуру с аннотацией «Вместо». В теле переопределённой процедуры либо оставьте пустой код, либо добавьте свою логику. Типовая процедура при этом вызываться не будет.

bsl
&Вместо("ОтправитьУведомление")
Процедура Расш1_ОтправитьУведомление(Документ)
	// Типовая отправка отключена,
	// тело можно оставить пустым
КонецПроцедуры

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

Сравнение вариантов

Комментирование тела

Подходит для своей конфигурации и отладки. Минус: на типовой снимает объекты с поддержки

«Возврат;» в начале

Быстрое временное отключение одной строкой. Минус: предупреждения о недостижимом коде, для функций нужно возвращать значение

Отключение подписки

Чистый способ для обработчиков событий, код не меняется. Минус: работает только для подписок

Расширение

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

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

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

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

Также проверьте смежные сценарии. Если отключённая процедура заполняла реквизиты, убедитесь, что документы записываются без ошибок и отчёты по ним строятся корректно. Ошибки часто всплывают не в момент отключения, а при следующем обращении к данным.

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

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

Точка останова в процедуре
Норма

Не срабатывает при выполнении действия

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

Срабатывает — процедура всё ещё вызывается

Действие, которое выполняла процедура
Норма

Больше не происходит (нет записи, отправки, изменения)

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

Действие выполняется — отключён не тот обработчик или есть дублирующий код

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

Проходит без ошибок

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

Ошибки о незаполненных реквизитах — процедура заполняла обязательные данные

Синтаксическая проверка модуля
Норма

Нет ошибок компиляции

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

Ошибки — нарушена структура процедуры при комментировании

Типичные ошибки и риски

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

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

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

Особые сценарии

Отключение процедуры в модуле формы

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

Отключение регламентного задания, вызывающего процедуру

Если процедура выполняется по расписанию как регламентное задание, отключать её код не нужно — достаточно снять флаг «Использование» в свойствах регламентного задания в конфигураторе или отключить задание через консоль заданий в пользовательском режиме. Код процедуры при этом не меняется вообще.

Маршрут решения

Как выбрать действие

Конфигурация собственная, отключение временноеЗакомментируйте тело процедуры или добавьте «Возврат;»
Процедура — обработчик подписки на событиеСнимите флаг «Использование» в свойствах подписки
Конфигурация типовая на поддержкеСоздайте расширение и переопределите процедуру с аннотацией «Вместо»
Процедура запускается по расписаниюОтключите регламентное задание, код не трогайте
Отключение постоянное и процедура нигде не вызываетсяПроцедуру можно удалить, предварительно проверив вызовы глобальным поиском

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

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

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

Чем отличается отключение от удаления процедуры?

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

Отключил процедуру, но она всё равно выполняется. Почему?

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

Сломаются ли обновления типовой конфигурации после отключения процедуры?

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

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

Полного отключения по условию нет, но в начало процедуры добавляют проверку: например, по роли пользователя, виду документа или значению функциональной опции. Если условие выполняется — процедура завершается через «Возврат;». Функциональные опции — штатный механизм для такого рода переключателей.

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

Отмените сделанное изменение: раскомментируйте код, удалите строку «Возврат;», верните флаг «Использование» подписке или отключите расширение. После этого обновите конфигурацию базы данных и повторно проверьте работу сценария. Именно поэтому в комментариях к отключению стоит указывать дату и причину — так проще понять, что и зачем меняли.

Итог

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

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