Почему возникает ошибка переопределения свойств заимствованных объектов при добавлении общего модуля в расширение?

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей IT и автоматизация бизнеса
← На главную

При попытке заимствовать общий модуль из типовой конфигурации в расширение разработчики нередко сталкиваются с ошибкой проверки метаданных: «Переопределение свойств заимствованных объектов в расширениях недопустимо в режиме совместимости 8.3.8 и ниже». Даже если запуск выполняется на современной версии технологической платформы, применение изменений в информационной базе блокируется. Разберем детально, с чем связано данное ограничение, как устроена иерархия совместимости и какие практические способы решения существуют.

Анализ причин возникновения ошибки

Проанализируем техническую сторону работы механизма расширений конфигурации. В платформе 1С:Предприятие возможность перехватывать и изменять исполняемый программный код модулей (с помощью директив &Вместо, &Перед, &После), а также заимствовать и переопределять свойства общих модулей появилась только начиная с версии 8.3.9.

В режиме совместимости 8.3.8 и ниже расширения предоставляют существенно урезанный функционал: они поддерживают модификацию форм, изменение командного интерфейса и добавление ограниченного числа собственных объектов. Попытка перенести модуль в расширение в таком режиме расценивается платформой как недопустимая модификация свойств заимствованного объекта.

Выясним причину, почему простая смена версии в самом расширении приводит к ошибке: «Режим совместимости расширения конфигурации больше режима совместимости основной конфигурации». В платформе действует строгое архитектурное правило:

  1. Режим совместимости расширения жестко привязан к режиму совместимости основной конфигурации.
  2. Расширение ни при каких обстоятельствах не может иметь режим совместимости выше, чем у расширяемой конфигурации (или быть отключенным, если в конфигурации режим задан).
  3. Даже если сервер или клиент 1С физически работают на платформе версии 8.3.9 или выше, решающее значение имеет свойство РежимСовместимости в свойствах корня конфигурации. Пока там установлено значение Версия 8.3.8, среда полностью имитирует ограничения старой версии.

Способ 1. Включение редактирования только для корня конфигурации

Рассмотрим основной способ решения проблемы, когда необходимо использовать возможности перехвата кода общих модулей, не теряя преимуществ поддержки типового решения.

Распространенным заблуждением является мнение, что для изменения режима совместимости конфигурацию необходимо полностью снять с поддержки. Это не так. Разберем по шагам, как правильно настроить поддержку:

  1. Откроем конфигуратор и перейдем в меню Конфигурация — Поддержка — Настройка поддержки.
  2. Включим возможность изменения конфигурации, нажав кнопку Включить возможность изменения.
  3. В появившемся окне установим правило изменения «Редактируется с сохранением поддержки» только для самого верхнего узла (корня конфигурации).
  4. Для всех остальных объектов типовой конфигурации (включая общий модуль ОбработкаТабличнойЧастиКлиент и другие метаданные) сохраняем статус «Не редактируется» (на замке).
  5. В палитре свойств корневого элемента конфигурации изменим свойство РежимСовместимости на Версия 8.3.9 (или выше) либо установим значение Не использовать.
  6. Аналогичный режим совместимости задаем в свойствах самого расширения.

Посмотрим на результат: типовые модули и справочники остаются защищенными от случайного изменения, обновление конфигурации через стандартные файлы обновлений (CFU) проходит в полуавтоматическом режиме без конфликтов в модулях, а механизм расширения получает доступ ко всему функционалу платформы 8.3.9.

Обратим внимание на важный параметр: при использовании переопределения кода через расширения в режиме «1С:Предприятие» в списке установленных расширений необходимо снять флаг Безопасный режим, иначе платформа заблокирует выполнение доработанного кода.

Способ 2. Перехват алгоритмов через формы (без изменения конфигурации)

Рассмотрим альтернативную ситуацию: регламент предприятия строго запрещает включать возможность изменения даже для корня конфигурации, и информационная база должна оставаться на полной поддержке поставщика.

Проанализируем модуль ОбработкаТабличнойЧастиКлиент. Он содержит клиентские процедуры и функции, которые вызываются при возникновении событий в формах документов или справочников (например, при изменении количества, цены или пересчете суммы строк табличной части). Платформа в режиме 8.3.8 позволяет полноценно заимствовать управляемые формы.

Разберем реализацию обхода ограничения:

  1. Заимствуем в расширение не сам общий модуль, а конечную управляемую форму документа, поведение которой требуется скорректировать.
  2. Создаем в расширении собственный новый общий модуль с признаком Клиент (управляемое приложение), например, Расш1_ОбработкаТабличнойЧастиКлиент. Добавление новых модулей в расширение поддерживается платформой 8.3.8.
  3. Помещаем необходимый переопределенный алгоритм в наш новый модуль.
  4. В заимствованной форме перехватываем обработчик изменения поля табличной части и перенаправляем вызов на наш кастомный модуль расширения вместо вызова типового модуля.

Способ 3. Перенос логики во внешние обработки (БСП)

Если задача заключается в заполнении данных табличной части по определенным формулам или правилам, проанализируем возможности Библиотеки Стандартных Подсистем (БСП), встроенной в типовую конфигурацию.

Используем механизм Дополнительные отчеты и обработки. Реализация алгоритма в виде внешней обработки заполнения табличных частей позволяет:

  1. Модифицировать строковую часть документов без снятия с поддержки и без изменения режима совместимости конфигурации.
  2. Избежать любых ограничений механизма расширений версий 8.3.8 и ниже.
  3. Обновлять логику заполнения без остановки работы пользователей и монопольного доступа к базе данных.

Риски принудительного изменения режима совместимости

Выясним возможные последствия повышения версии совместимости конфигурации. Любой тиражный релиз от разработчиков тестируется исключительно под тот режим совместимости, который зашит в поставку. Принудительное переключение конфигурации с 8.3.8 на 8.3.9 может вызвать нежелательные платформенные эффекты:

  1. Изменение поведения элементов интерфейса и отрисовки динамических списков на управляемых формах.
  2. Ужесточение платформенных проверок соответствия типов данных и блокировок в транзакциях.

Если конфигурация находится в активной фазе выпуска обновлений разработчиком, наиболее надежным решением часто является ожидание официального релиза конфигурации, в котором режим совместимости будет поднят разработчиками типового решения.

← На главную