Разработка и Конфигурация · 13 мин
Как отключить процедуру в 1С
Как отключить процедуру в 1С без удаления кода: комментирование, условия, подписки на события и расширения. Пошаговые инструкции, риски и проверка результата.
Отключить процедуру в 1С чаще всего требуется при доработке конфигурации: чтобы временно убрать выполнение кода, отладить обработчик, отказаться от типовой логики или проверить поведение системы без конкретного действия. Способов несколько — от простого комментирования тела процедуры до отключения подписок на события и переопределения через расширение. Выбор зависит от того, где находится процедура: в общем модуле, модуле объекта, модуле формы или в подписке на событие.
Важно понимать разницу между «отключить процедуру» и «удалить процедуру». Удаление — необратимое изменение кода, которое может сломать вызовы из других мест конфигурации. Отключение — это сохранение кода с прекращением его выполнения: процедура остаётся в метаданных, но либо не вызывается, либо сразу завершает работу. Второй подход безопаснее, особенно на типовых конфигурациях, где много перекрёстных вызовов.
Перед любыми изменениями убедитесь, что у вас есть резервная копия информационной базы или выгрузка конфигурации. Даже «безобидное» комментирование может привести к ошибкам компиляции, если внутри процедуры объявлялись переменные или выполнялись действия, от которых зависит другой код. Ниже разобраны основные способы отключения с указанием условий применения, рисков и способов проверки результата.
Где находится процедура и почему это важно
Способ отключения напрямую зависит от расположения процедуры. Процедуры в 1С могут находиться в общих модулях, модулях объектов (справочников, документов), модулях форм, модулях менеджеров и обработчиках подписок на события. Каждый вариант имеет свои особенности.
Чтобы найти процедуру, откройте конфигуратор и используйте глобальный поиск (Ctrl+Shift+F) по имени процедуры. В результатах будет видно, в каких модулях она определена и откуда вызывается. Обязательно проверьте все места вызова — если процедура возвращает значение через параметры или используется в выражениях, её отключение может нарушить логику вызывающего кода.
Отдельный случай — обработчики событий формы и объекта (например, «ПриЗаписи», «ПередЗаписью», «ПриОткрытии»). Они вызываются платформой автоматически, и отключить их «в точке вызова» нельзя — только изменить сам обработчик или убрать назначение в свойствах формы.
Проверьте все вызовы через глобальный поиск перед отключением
Отключается изменением кода в модуле объекта или через расширение
Отключается снятием флага в свойствах подписки
Используйте расширение вместо правки типового кода
Способ 1. Комментирование тела процедуры
Самый прямой способ — закомментировать код внутри процедуры, оставив её объявление. Для этого выделите строки тела и нажмите Ctrl+/ или добавьте двойной слэш «//» в начало каждой строки. Заголовок процедуры («Процедура ИмяПроцедуры(Параметры)») и завершение («КонецПроцедуры») оставьте без изменений.
Такой подход сохраняет совместимость: все вызовы продолжают работать, ошибок компиляции не возникает, но код не выполняется. Это удобно для временной отладки — например, когда нужно проверить, как система поведёт себя без конкретного действия.
Ограничение способа: если процедура должна что-то возвращать через параметры или заполнять структуру, вызывающий код может получить неинициализированные значения. Проверьте, что вызывающий модуль корректно обрабатывает пустой результат.
Процедура ОтправитьУведомление(Документ) Экспорт
// Отключено: уведомления временно не отправляются
// ТекстПисьма = СформироватьТекст(Документ);
// ОтправитьПочту(ТекстПисьма);
КонецПроцедурыСпособ 2. Возврат в начале процедуры
Альтернатива комментированию — добавить оператор «Возврат;» первой строкой тела процедуры. Код после него становится недостижимым и не выполняется, а сама процедура остаётся синтаксически корректной. Отключение и включение выполняется одной строкой, что удобно при экспериментах.
У способа есть нюанс: синтаксическая проверка модуля выдаст предупреждение о недостижимом коде. Это не ошибка, конфигурация обновится и будет работать, но при строгих требованиях к качеству кода (например, при автоматизированной проверке) предупреждения могут считаться нежелательными.
Для функций этот способ требует осторожности: «Возврат;» без значения вернёт Неопределено. Если вызывающий код ожидает конкретный тип (число, булево, структуру), лучше вернуть осмысленное значение по умолчанию, например «Возврат Ложь;» или «Возврат 0;».
Способ 3. Отключение подписки на событие
Если процедура выполняется как обработчик подписки на событие (например, «ПриЗаписи» документа или «ОбработкаПроведения»), отключать её код не обязательно — достаточно отключить саму подписку. Это самый чистый способ, потому что код процедуры вообще не трогается.
- 1Откройте конфигуратор и в дереве конфигурации найдите ветку «Общие» → «Подписки на события»
- 2Найдите нужную подписку по имени или по обработчику (имя процедуры указано в свойстве «Обработчик»)
- 3Откройте свойства подписки и снимите флаг «Использование» либо очистите свойство «Источник», если подписка нужна частично
- 4Обновите конфигурацию базы данных (F7)
- 5Проверьте: выполните действие, которое раньше вызывало процедуру (запись, проведение документа), и убедитесь, что обработчик больше не срабатывает
Перед отключением проверьте, не выполняет ли подписка критичные действия: установку номеров, заполнение служебных реквизитов, контроль остатков. Отключение такой подписки может привести к неконсистентным данным, которые проявятся позже и не сразу будут связаны с вашим изменением.
Способ 4. Отключение через расширение конфигурации
Для типовых конфигураций на поддержке правильный способ — расширение. Оно позволяет переопределить процедуру без изменения основной конфигурации: типовой код остаётся нетронутым, обновления устанавливаются штатно, а ваша логика работает поверх.
Чтобы отключить процедуру через расширение, создайте расширение (Конфигурация → Расширения конфигурации → Создать), добавьте в него нужный общий модуль или модуль объекта и заимствуйте процедуру с аннотацией «Вместо». В теле переопределённой процедуры либо оставьте пустой код, либо добавьте свою логику. Типовая процедура при этом вызываться не будет.
&Вместо("ОтправитьУведомление")
Процедура Расш1_ОтправитьУведомление(Документ)
// Типовая отправка отключена,
// тело можно оставить пустым
КонецПроцедурыОграничения расширений: не все модули и объекты можно заимствовать, аннотация «Вместо» поддерживается не во всех контекстах, а при обновлении типовой конфигурации расширение нужно проверять на совместимость — если в типовой изменилась сигнатура процедуры, расширение перестанет применяться. Также для работы расширений в некоторых случаях требуется отключение режима совместимости с устаревшими версиями платформы.
Сравнение вариантов
Подходит для своей конфигурации и отладки. Минус: на типовой снимает объекты с поддержки
Быстрое временное отключение одной строкой. Минус: предупреждения о недостижимом коде, для функций нужно возвращать значение
Чистый способ для обработчиков событий, код не меняется. Минус: работает только для подписок
Единственный безопасный вариант для типовой конфигурации на поддержке. Минус: ограничения платформы и необходимость контроля при обновлениях
Как проверить, что процедура действительно отключена
После обновления конфигурации базы данных обязательно проверьте результат. Самый надёжный способ — отладка: поставьте точку останова внутри отключённой процедуры и выполните действие, которое её раньше вызывало. Если точка останова не срабатывает (или срабатывает, но выполнение сразу выходит по «Возврат;») — отключение работает.
Если отладка недоступна (рабочая база, нет прав), используйте косвенные признаки: действие, которое выполняла процедура, больше не происходит — не создаётся документ, не отправляется сообщение, не меняется реквизит. Для подписок удобно временно добавить в начало обработчика запись в журнал регистрации, чтобы видеть факт вызова.
Также проверьте смежные сценарии. Если отключённая процедура заполняла реквизиты, убедитесь, что документы записываются без ошибок и отчёты по ним строятся корректно. Ошибки часто всплывают не в момент отключения, а при следующем обращении к данным.
Как проверить результат
Не срабатывает при выполнении действия
Срабатывает — процедура всё ещё вызывается
Больше не происходит (нет записи, отправки, изменения)
Действие выполняется — отключён не тот обработчик или есть дублирующий код
Проходит без ошибок
Ошибки о незаполненных реквизитах — процедура заполняла обязательные данные
Нет ошибок компиляции
Ошибки — нарушена структура процедуры при комментировании
Типичные ошибки и риски
Главный риск при отключении процедур — скрытые зависимости. Процедура может заполнять служебные реквизиты, вести дополнительные движения по регистрам или формировать данные для обмена. Внешне всё работает, но через время обнаруживаются расхождения в отчётах или ошибки при обмене. Поэтому перед отключением найдите все вызовы и изучите, что именно делает процедура.
Вторая частая ошибка — отключение «не того» обработчика. В типовых конфигурациях одно действие часто обрабатывается цепочкой: обработчик события объекта, подписка, вызов из общего модуля. Если после отключения поведение не изменилось, ищите дублирующие обработчики через глобальный поиск.
Особые сценарии
Отключение процедуры в модуле формы
Обработчики событий формы («ПриОткрытии», «ПриИзменении» и другие) назначаются в свойствах формы или элемента. Чтобы отключить такой обработчик, можно очистить имя процедуры в свойстве события в палитре свойств — тогда код останется в модуле, но вызываться не будет. Либо измените сам обработчик способами, описанными выше.
Отключение регламентного задания, вызывающего процедуру
Если процедура выполняется по расписанию как регламентное задание, отключать её код не нужно — достаточно снять флаг «Использование» в свойствах регламентного задания в конфигураторе или отключить задание через консоль заданий в пользовательском режиме. Код процедуры при этом не меняется вообще.
Как выбрать действие
Частые вопросы
Можно ли отключить процедуру без конфигуратора?
Да, но только в отдельных случаях. Регламентные задания отключаются в пользовательском режиме через консоль заданий или настройки. Подписки и код модулей без конфигуратора отключить нельзя — для этого нужны права на изменение конфигурации и сам конфигуратор.
Чем отличается отключение от удаления процедуры?
При отключении процедура остаётся в конфигурации, и все вызовы продолжают работать — просто код не выполняется. При удалении все места вызова нужно найти и исправить, иначе конфигурация не пройдёт проверку. Отключение обратимо одним действием, удаление — нет.
Отключил процедуру, но она всё равно выполняется. Почему?
Наиболее вероятные причины: не обновлена конфигурация базы данных (F7 после сохранения), существует дублирующий обработчик или подписка на то же событие, либо процедура заимствована в расширении, которое продолжает её вызывать. Проверьте глобальным поиском все вхождения имени процедуры.
Сломаются ли обновления типовой конфигурации после отключения процедуры?
Если вы изменили типовой модуль напрямую — обновления станут сложнее: изменённые объекты потребуют ручного сопоставления, а при автоматическом обновлении ваши правки могут быть потеряны. Если использовано расширение — обновление проходит штатно, но после него нужно проверить совместимость расширения.
Как отключить процедуру только для части пользователей или документов?
Полного отключения по условию нет, но в начало процедуры добавляют проверку: например, по роли пользователя, виду документа или значению функциональной опции. Если условие выполняется — процедура завершается через «Возврат;». Функциональные опции — штатный механизм для такого рода переключателей.
Как вернуть процедуру обратно после отключения?
Отмените сделанное изменение: раскомментируйте код, удалите строку «Возврат;», верните флаг «Использование» подписке или отключите расширение. После этого обновите конфигурацию базы данных и повторно проверьте работу сценария. Именно поэтому в комментариях к отключению стоит указывать дату и причину — так проще понять, что и зачем меняли.
Что важно запомнить
Для своей конфигурации процедуру отключают комментированием тела или «Возврат;» в начале, для подписок — снятием флага «Использование», для типовых конфигураций — расширением с аннотацией «Вместо». Перед изменением делайте резервную копию, после — проверяйте отладкой и смежные сценарии.