При разработке расширений для экосистемы 1С:Предприятие часто возникает задача создать один и тот же функционал (например, сервисную обработку или отчет), который должен одинаково работать в разных типовых конфигурациях: Бухгалтерия предприятия (БП), Зарплата и управление персоналом (ЗУП) или Управление торговлей (УТ). Основная сложность заключается в том, что при попытке добавить свою обработку в типовую подсистему Администрирование, расширение отказывается подключаться в другой конфигурации из-за несовпадения внутренних идентификаторов (GUID) объектов.
В данной статье мы подробно разберем, как обойти это ограничение и создать по-настоящему универсальный файл .cfe, который примется любой конфигурацией, где есть объект с аналогичным именем.
Проанализируем ситуацию: почему расширение, созданное в Бухгалтерии предприятия, выдает ошибку при попытке установки в ЗУП, даже если в обеих базах есть подсистема Администрирование? Ответ кроется в механизме сопоставления объектов. По умолчанию платформа 1С связывает заимствованные объекты расширения с объектами основной конфигурации по их внутренним GUID.
Несмотря на то что названия подсистем идентичны, их внутренние идентификаторы в разных ветках программных продуктов (БП и ЗУП) различаются. Исключение составляют конфигурации, созданные на одной базе, например, разные редакции БП или связка УТ-КА-ERP. Для того чтобы наше расширение стало универсальным, нам необходимо заставить платформу игнорировать GUID и ориентироваться только на строковое имя объекта.
Первым делом нам необходимо изменить глобальную настройку самого расширения. Выполним следующие действия:
По идентификатору. Нам необходимо изменить его на По имени.Этот шаг является критически важным. После этого изменения платформа при подключении расширения в режиме «Предприятие» будет искать подсистему Администрирование не по скрытому коду, а по ее названию в метаданных.
Даже если мы настроили связь по имени, расширение может «ругаться» на несоответствие состава или других характеристик подсистемы. В разных конфигурациях состав подсистемы Администрирование неизбежно отличается. Разберем, как отключить строгую проверку:
Администрирование.Состав, Картинка, Пояснение.Особенно важно отключить контроль свойства Состав. В этом случае платформе будет неважно, какие именно объекты входят в подсистему в конкретной базе — она просто добавит ваш объект из расширения в существующую структуру интерфейса.
Еще одна неочевидная причина, по которой универсальное расширение может не «взлететь» — это Режим совместимости. Если вы разрабатывали расширение в БП 3.0 с режимом совместимости 8.3.24, а пытаетесь загрузить его в старую версию ЗУП с режимом 8.3.17, платформа заблокирует подключение.
Рассмотрим рекомендации по настройке:
Если работа с заимствованием подсистем кажется вам слишком громоздкой или нестабильной, рассмотрим более «продвинутый» способ. Можно вообще не заимствовать подсистемы в метаданных, а внедрить команду вызова вашей обработки программно.
Например, мы можем заимствовать основную форму рабочего стола или использовать механизмы БСП (Библиотеки стандартных подсистем) для регистрации дополнительных обработок. Выясним, как это работает в типовых: они используют справочник ДополнительныеОтчетыИОбработки. Если ваше расширение регистрирует обработку программно, оно вообще перестает зависеть от структуры подсистем в метаданных.
Пример кода для программного вызова формы вашей обработки из любого места:
&НаКлиенте
Процедура ВызватьНастройкуИзРасширения(Команда)
ПараметрыФормы = Новый Структура;
ОткрытьФорму("Обработка.МояНастройкаИзРасширения.Форма.ФормаНастроек", ПараметрыФормы);
КонецПроцедуры
Проанализируем ситуацию, когда расширений много, и нужно массово менять их GUID для разных баз. Как предлагалось в обсуждении, можно использовать выгрузку расширения в файлы. Рассмотрим этот процесс:
ConfigDumpInfo.xml или файлы метаданных подсистем.Однако, как показала практика (сообщение 16), правильная настройка Способа связи и отключение Контроля свойств делают этот сложный путь избыточным.
Для создания стабильного универсального расширения придерживайтесь следующего алгоритма:
Используя эти правила, вы сможете поддерживать один-единственный файл расширения для всей линейки решений 1С, что существенно сократит время на разработку и обновление ваших инструментов.