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