При активном использовании механизма расширений в 1С нередко возникает ситуация: разработчик расширяет процедуру или функцию типовой конфигурации поставщика, а в очередном обновлении релизов поставщик удаляет данный метод, переименовывает его или изменяет состав его параметров. Рассмотрим, как ведет себя платформа в таких случаях и какими инструментами можно своевременно обнаружить и устранить несовместимости.
Поведение платформы при изменении методов поставщика
Если в основной конфигурации удален метод или изменилась его сигнатура (количество и типы параметров), расширение с аннотациями &Перед, &После или &Вместо не сможет корректно подключиться к целевому объекту. В этом случае поведение системы будет следующим:
Отказ в подключении: При запуске информационной базы в режиме «1С:Предприятие» возникнет критическая ошибка применения расширения либо оно будет автоматически отключено платформой, и пользовательский сеанс запустится без доработок из расширения.
Запись в Журнал регистрации: Все ошибки валидации метаданных и программного кода расширений фиксируются платформой в Журнале регистрации в событиях группы применения расширений конфигурации.
Способы проверки расширений в режиме «Конфигуратор»
Разберем по шагам, как выявить проблемы совместимости непосредственно в среде разработки до передачи обновления пользователям:
Проверка возможности применения расширения: Откроем список расширений через меню Конфигурация — Расширения конфигурации. В контекстном меню нужного расширения выберем пункт Проверить возможность применения. Платформа выполнит сопоставление всех заимствованных объектов, методов и свойств расширения с обновленной конфигурацией и выведет список несовпадений в окно сообщений.
Комплексная проверка конфигурации: Выполним команду главного меню Конфигурация — Проверка конфигурации. В открывшемся окне параметров проверки обязательно отметим флаги проверки логической целостности, синтаксического контроля модулей и проверки расширений.
Синтаксический контроль модулей: Откроем модуль расширения и запустим синтаксическую проверку (клавиши Ctrl + F7), чтобы убедиться в отсутствии обращений к несуществующим процедурам, функциям или реквизитам.
Проверка применимости в режиме «1С:Предприятие»
Проанализируем возможность контроля расширений на стороне пользовательского режима без запуска Конфигуратора:
Перейдем в раздел Администрирование — Печатные формы, отчеты и обработки — Расширения (в типовых конфигурациях на базе БСП).
В командной панели формы списка расширений нажмем кнопку Проверить применимость.
Система выполнит фоновую валидацию всех установленных расширений относительно текущей версии конфигурации и выведет статус готовности к работе либо перечень возникших ошибок.
Автоматическая проверка в пакетном режиме (CI/CD)
Для автоматизации контроля обновлений и ночных сборок можно выполнять проверку расширений через командную строку. Рассмотрим пример пакетного запуска Конфигуратора:
Параметр -Extension задает имя конкретного расширения, а параметр -AllExtensions позволяет запустить проверку сразу для всех подключенных расширений базы данных с выгрузкой отчета в текстовый файл.
Важные нюансы и рекомендации при доработке конфигураций
Выясним, на что следует обращать внимание при написании кода в расширениях, чтобы минимизировать поломки при обновлениях:
Директива &ИзменениеИКонтроль: При использовании данной директивы платформа строго отслеживает неизменность тела исходного метода поставщика. Любая правка оригинальной строки кода поставщиком потребует актуализации зафиксированного фрагмента в расширении.
Режим совместимости: Если при обновлении основной конфигурации повышается режим совместимости, необходимо синхронно скорректировать режим совместимости в свойствах самого расширения.
Минимизация перехватов &Вместо: Рекомендуется отдавать предпочтение директивам &Перед или &После, а также использовать стандартные переопределяемые модули БСП (с суффиксом Переопределяемый) и подписки на события.
Изоляция логики: Прикладной код доработок следует выносить в отдельные процедуры и функции собственных общих модулей расширения, оставляя в методах-перехватчиках только минимальные вызовы.