Разработка и внедрение расширений в экосистеме «1С:Предприятие 8» — это удобный способ доработки типовых конфигураций без снятия их с поддержки. Однако программисты часто сталкиваются с ситуацией, когда расширение успешно загружено в базу, галочка активности стоит, но внесенные изменения упорно не применяются при запуске сеанса. Другая популярная проблема — невозможность опубликовать расширение в облачном сервисе «1С:Фреш» из-за ошибок контроля совместимости.
В этой статье мы подробно разберем причины, по которым платформа блокирует работу кода в расширениях, выясним роль безопасного режима и научимся правильно сопоставлять режимы совместимости для беспрепятственной публикации программных доработок.
Самая распространенная причина, по которой конфигурация игнорирует добавленный в расширение код, заключается в установленном свойстве «Использовать безопасный режим». Разберем по шагам, как этот механизм влияет на логику выполнения программы.
Когда для расширения включен безопасный режим (в Конфигураторе или в режиме «1С:Предприятие» в справочнике расширений), платформа накладывает жесткие ограничения на исполняемый код:
&Перед, &После или &Вместо, выполняться не будут. Система просто проигнорирует их вызов, не сообщая об ошибках в пользовательском режиме.Рассмотрим пример перехвата процедуры, который гарантированно не сработает в безопасном режиме, если код выполняется на сервере:
&Вместо("ЗаписатьДокумент")
Процедура Расш1_ЗаписатьДокумент(ДокументСсылка)
// Данный код в общем модуле будет проигнорирован платформой,
// если для расширения включен безопасный режим!
ЗаписьЖурналаРегистрации("МоеРасширение", УровеньЖурналаРегистрации.Информация,,, "Запись выполнена.");
ПродолжитьВызов(ДокументСсылка);
КонецПроцедуры
Решение проблемы:
Важное замечание по безопасности: Простое отключение безопасного режима — самый быстрый путь, но небезопасный для корпоративных систем. В серверных базах правильным решением является настройка профилей безопасности в консоли кластера серверов 1С. Это позволит точечно разрешить расширению выполнять строго определенные операции (например, обращаться к конкретному веб-сервису), сохраняя общую безопасность системы.
Вторая по частоте проблема возникает при попытке загрузить расширение в облачный сервис «1С:Фреш». Пользователи часто видят критическую ошибку следующего вида:
Возможность подключения: Критичная: Режим совместимости расширения конфигурации больше режима совместимости основной конфигурации.
Выясним причину этого поведения. Сервис «1С:Фреш» устроен так, что одно и то же расширение может проверяться на совместимость сразу с несколькими релизами конфигурации (например, при постепенном обновлении инфраструктуры или когда разные абоненты работают на разных версиях приложения).
Основное правило платформы гласит: режим совместимости расширения не может быть выше, чем режим совместимости расширяемой конфигурации. Если расширение компилировалось на платформе с режимом совместимости 8.3.18, а в облаке развернута база с режимом совместимости 8.3.15, подключить такое расширение система не позволит.
Проанализируем варианты решения этой проблемы:
Платформа предоставляет штатный инструмент для выравнивания свойств совместимости. Выполним следующие действия по шагам:
РежимСовместимости, нажмем кнопку «Исправить» и выберем вариант «Установить значение из объекта конфигурации».Если нам требуется поддерживать работоспособность расширения на разных релизах конфигурации (как в случае с версиями УНФ 1.6.15 и 1.6.18), необходимо вручную установить режим совместимости в расширении по наименьшему значению среди целевых конфигураций.
Например, если старая конфигурация работает в режиме совместимости Версия 8.3.12, а новая — в режиме Версия 8.3.15, мы обязаны указать в свойствах расширения значение Версия 8.3.12.
Обратите внимание! Понижение режима совместимости накладывает ограничения на использование новых объектов метаданных внутри расширения. Собственные регистры сведений, накопления или документы требуют определенных минимальных версий платформы. Если расширение использует новые типы данных, понизить режим совместимости без удаления этих объектов не удастся. В таком случае в Менеджере сервиса «1С:Фреш» необходимо опубликовать две разные версии расширения, привязав каждую к соответствующему релизу конфигурации.
Если в основной конфигурации (особенно в актуальных версиях ERP, КА, БП) режим совместимости установлен в значение «Не использовать», то и в расширении обязательно должно стоять значение «Не использовать». Установка любой конкретной версии платформы (например, 8.3.16) в свойствах расширения приведет к ошибке проверки применимости.
Начиная с версии платформы 8.3.15, разработчикам доступно управление контролем совместимости. В свойствах расширения можно настроить свойство проверки совместимости при подключении:
Проверить значение — жесткий контроль, вызывающий ошибку при несовпадении.Предупреждать о расхождении — расширение подключится, но выдаст предупреждение в журнал регистрации.Не проверять — отключение контроля совместимости свойств (используйте с осторожностью!).Если режим совместимости настроен верно, безопасный режим отключен, но изменения все равно не отображаются в режиме предприятия, рассмотрим еще две скрытые проблемы:
%userprofile%\AppData\Local\1C\1Cv8.&ИзменениеИКонтроль. Если вы заимствовали процедуру из основной конфигурации с помощью метода &ИзменениеИКонтроль, а после этого обновили основную конфигурацию, исходный текст метода мог измениться. Платформа обнаружит расхождение структуры кода и полностью отключит выполнение данного метода расширения. Для восстановления работоспособности необходимо зайти в Конфигуратор, открыть модуль расширения и вызвать контекстную проверку применимости метода, обновив контролируемые участки кода.Мы подробно разобрали ключевые аспекты работы с расширениями 1С. Соблюдение правил настройки безопасного режима, контроль версий совместимости и своевременная проверка применимости кода гарантируют стабильную работу ваших доработок как на локальных серверах, так и в облачной инфраструктуре.