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