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