В процессе разработки на платформе 1С:Предприятие 8.3 часто возникает задача расширения функционала существующей типовой конфигурации. Одним из типовых сценариев является добавление новой константы в расширение с последующим её отображением в интерфейсе конкретной подсистемы, которая уже существует в основной базе. Ситуация усложняется, если таких расширений несколько, и каждое из них должно внести свой объект в одну и ту же ветку интерфейса. Рассмотрим подробно, как реализовать эту задачу правильно и профессионально.
Разберем основной страх разработчиков: «Что будет, если я добавлю одну и ту же подсистему основной конфигурации в несколько разных расширений?». Проанализируем поведение платформы. Когда мы заимствуем подсистему в Расширение1 и Расширение2, 1С не заменяет одну подсистему другой. Напротив, происходит автоматическое слияние (мерж) их состава.
Посмотрим на алгоритм действий:
Расширение1 добавляем (заимствуем) нужную подсистему и включаем в её состав Константа1.Расширение2 выполняем аналогичное действие: заимствуем ту же подсистему и включаем в неё Константа2.Выясним причину, по которой это решение считается надежным: расширения дополняют метаданные основной конфигурации. Если объекты не конфликтуют по именам, платформа корректно выстраивает результирующее дерево интерфейса. Это стандартное поведение, предусмотренное архитектурой расширений 1С, а для контроля структуры метаданных полезно проводить анализ состава расширений.
Простого включения объекта в состав подсистемы в расширении часто бывает недостаточно. Рассмотрим ситуацию: вы добавили константу в состав подсистемы, но она не появилась в меню. Проанализируем настройки командного интерфейса.
Внутри расширения для заимствованной подсистемы необходимо вызвать контекстное меню и выбрать пункт «Открыть командный интерфейс». Здесь важно проверить следующее:
Критически важный момент, который часто упускают программисты: константа (или любой другой объект) никогда не появится в интерфейсе пользователя, если на неё не назначены права. Даже если вы добавили её в подсистему и включили видимость команды.
Поскольку константа создана в расширении, права на неё нельзя назначить в основной конфигурации. Разберем по шагам правильный подход:
ДополнительныеПраваРасширения).Чтение и Просмотр.Просмотр), если это требуется контекстом безопасности. В ряде случаев после изменения состава ролей может потребоваться точечный пересчет прав доступа для пользователя.Без этих действий пункт меню останется невидимым для всех, кроме пользователя с полными правами в режиме технического специалиста. Проанализировать текущие назначения поможет отчет Профили пользователей.
Иногда бизнес-требования диктуют необходимость отображения константы не в общем списке подсистемы, а на специализированной форме настроек. В современных конфигурациях на базе БСП (Библиотека стандартных подсистем) константы редко открываются как самостоятельные объекты. Рассмотрим, как программно связать поле формы с константой из расширения.
Для чтения и записи значения мы будем использовать стандартные методы. Посмотрим на пример кода в модуле формы:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Читаем значение константы при открытии формы
ЗначениеПоляНаФорме = Константы.ИмяВашейКонстантыИзРасширения.Получить();
КонецПроцедуры
&НаСервере
Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи)
// Сохраняем значение после записи формы настроек
Константы.ИмяВашейКонстантыИзРасширения.Установить(ЗначениеПоляНаФорме);
КонецПроцедуры
Такой подход позволяет интегрировать новые настройки в уже существующие интерфейсы (например, в общую форму «Настройки параметров системы»), что выглядит гораздо более эстетично с точки зрения пользователя.
Если вы хотите подойти к задаче профессионально, разберем использование функциональных опций. Если константа управляет видимостью каких-то блоков в интерфейсе, простого добавления в подсистему мало.
Выясним, как это работает в расширении:
ФункциональнаяОпция.Это позволит платформе автоматически скрывать или показывать разделы интерфейса в зависимости от того, включена ли соответствующая опция в настройках.
Проанализируем ситуацию, когда несколько расширений пытаются изменить порядок расположения элементов в одной и той же подсистеме. В 1С существует строгий порядок применения расширений. Если возникают конфликты визуального отображения, приоритет будет у того расширения, которое находится ниже в списке установленных (имеет более высокий порядковый номер или больший приоритет).
Также стоит помнить об ограничении типов: тип данных константы в расширении может быть примитивным (Число, Строка, Дата, Булево) или ссылочным. Однако нельзя использовать в качестве типа объект, созданный в другом расширении, если между ними не настроена связь «дополнение». Старайтесь использовать типы из основной конфигурации для обеспечения максимальной стабильности системы.
Таким образом, мы выяснили, что добавление констант в подсистему основной конфигурации через несколько расширений — это штатная и безопасная процедура, если соблюдать правила настройки прав, командного интерфейса и учитывать механизмы слияния метаданных платформой 1С.