Как создать универсальное расширение 1С для разных типовых конфигураций (БП, ЗУП, УТ)

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

При разработке расширений для экосистемы 1С:Предприятие часто возникает задача создать один и тот же функционал (например, сервисную обработку или отчет), который должен одинаково работать в разных типовых конфигурациях: Бухгалтерия предприятия (БП), Зарплата и управление персоналом (ЗУП) или Управление торговлей (УТ). Основная сложность заключается в том, что при попытке добавить свою обработку в типовую подсистему Администрирование, расширение отказывается подключаться в другой конфигурации из-за несовпадения внутренних идентификаторов (GUID) объектов.

В данной статье мы подробно разберем, как обойти это ограничение и создать по-настоящему универсальный файл .cfe, который примется любой конфигурацией, где есть объект с аналогичным именем.

Причина возникновения проблемы: Идентификаторы против Имен

Проанализируем ситуацию: почему расширение, созданное в Бухгалтерии предприятия, выдает ошибку при попытке установки в ЗУП, даже если в обеих базах есть подсистема Администрирование? Ответ кроется в механизме сопоставления объектов. По умолчанию платформа 1С связывает заимствованные объекты расширения с объектами основной конфигурации по их внутренним GUID.

Несмотря на то что названия подсистем идентичны, их внутренние идентификаторы в разных ветках программных продуктов (БП и ЗУП) различаются. Исключение составляют конфигурации, созданные на одной базе, например, разные редакции БП или связка УТ-КА-ERP. Для того чтобы наше расширение стало универсальным, нам необходимо заставить платформу игнорировать GUID и ориентироваться только на строковое имя объекта.

Шаг 1. Настройка способа связи расширения

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

  1. Откроем конфигуратор и перейдем в дерево метаданных нашего расширения.
  2. Нажмем правой кнопкой мыши на корневой элемент (название расширения) и выберем пункт Свойства.
  3. В палитре свойств найдем параметр Способ связи (Link Mode).
  4. По умолчанию там установлено значение По идентификатору. Нам необходимо изменить его на По имени.

Этот шаг является критически важным. После этого изменения платформа при подключении расширения в режиме «Предприятие» будет искать подсистему Администрирование не по скрытому коду, а по ее названию в метаданных.

Шаг 2. Отключение контроля свойств заимствованных объектов

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

  1. Найдем в дереве объектов расширения заимствованную подсистему Администрирование.
  2. Щелкнем по ней правой кнопкой мыши и выберем Свойства.
  3. Обратим внимание на колонку Контроль (в списке свойств это маленькие флажки рядом со значениями).
  4. Снимем флажки контроля для всех значимых свойств: Состав, Картинка, Пояснение.

Особенно важно отключить контроль свойства Состав. В этом случае платформе будет неважно, какие именно объекты входят в подсистему в конкретной базе — она просто добавит ваш объект из расширения в существующую структуру интерфейса.

Шаг 3. Установка корректного режима совместимости

Еще одна неочевидная причина, по которой универсальное расширение может не «взлететь» — это Режим совместимости. Если вы разрабатывали расширение в БП 3.0 с режимом совместимости 8.3.24, а пытаетесь загрузить его в старую версию ЗУП с режимом 8.3.17, платформа заблокирует подключение.

Рассмотрим рекомендации по настройке:

Шаг 4. Альтернативный метод — программное добавление в интерфейс

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

Например, мы можем заимствовать основную форму рабочего стола или использовать механизмы БСП (Библиотеки стандартных подсистем) для регистрации дополнительных обработок. Выясним, как это работает в типовых: они используют справочник ДополнительныеОтчетыИОбработки. Если ваше расширение регистрирует обработку программно, оно вообще перестает зависеть от структуры подсистем в метаданных.

Пример кода для программного вызова формы вашей обработки из любого места:


&НаКлиенте
Процедура ВызватьНастройкуИзРасширения(Команда)
    ПараметрыФормы = Новый Структура;
    ОткрытьФорму("Обработка.МояНастройкаИзРасширения.Форма.ФормаНастроек", ПараметрыФормы);
КонецПроцедуры

Шаг 5. Работа с файлами через XML (для автоматизации)

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

  1. Выгрузим расширение в файлы (команда Конфигурация - Выгрузить конфигурацию в файлы).
  2. Найдем файл ConfigDumpInfo.xml или файлы метаданных подсистем.
  3. Используя скрипты на OneScript или обычный текстовый редактор с функцией замены, заменим идентификаторы типов или объектов на нужные.
  4. Загрузим расширение обратно из файлов.

Однако, как показала практика (сообщение 16), правильная настройка Способа связи и отключение Контроля свойств делают этот сложный путь избыточным.

Резюме и рекомендации

Для создания стабильного универсального расширения придерживайтесь следующего алгоритма:

  1. Всегда устанавливайте Способ связи = По имени в свойствах корня расширения.
  2. Заимствуйте только те объекты, которые действительно необходимы для работы (например, только саму подсистему без ее содержимого).
  3. В заимствованных объектах всегда отключайте Проверку значения (контроль) для всех свойств, кроме имени.
  4. Тщательно проверяйте Режим совместимости: он должен быть «наименьшим общим кратным» для всех ваших информационных баз.
  5. Если пользователь устанавливает расширение самостоятельно, убедитесь, что в расширении снят флаг Безопасный режим, если ваш код требует повышенных привилегий (например, для записи файлов на диск или работы с COM-объектами).

Используя эти правила, вы сможете поддерживать один-единственный файл расширения для всей линейки решений 1С, что существенно сократит время на разработку и обновление ваших инструментов.

← На главную