При разработке новой функциональности в типовых конфигурациях (таких как 1С:Управление торговлей, 1С:ERP, 1С:Комплексная автоматизация) разработчики часто сталкиваются с задачей интеграции созданных объектов с типовыми подсистемами Библиотеки Стандартных Подсистем (БСП). Одной из самых востребованных является подсистема «Свойства», предоставляющая возможность работы с дополнительными реквизитами и сведениями.
Нередко возникает ситуация: разработчик создает новый документ, открывает редактор командного интерфейса формы и обнаруживает, что типовая команда ОбщаяКоманда.ДополнительныеСведенияКоманднаяПанель отсутствует в командной панели формы, тогда как у типовых документов (например, РеализацияТоваровУслуг) она присутствует. Разберем детально, как платформа формирует командный интерфейс, что требуется для подключения нового объекта к механизму дополнительных сведений и почему изменения могут не сразу отображаться в Конфигураторе.
Давайте разберем, каким образом общие команды платформы попадают в командную панель или панель навигации конкретной управляемой формы. В платформе 1С:Предприятие 8 этот процесс автоматизирован:
CommandParameterType). В этом свойстве указывается список типов метаданных, для которых данная команда имеет смысл.ОпределяемыйТип.ВладелецДополнительныхСведений или ОпределяемыйТип.ВладелецПрисоединенныхФайлов).Объект с типом ДокументОбъект.ИмяДокумента или СправочникОбъект.ИмяСправочника).Таким образом, если новый документ отсутствует в составе определяемого типа, платформа физически не может предоставить доступ к команде в контексте формы этого документа.
Рассмотрим по шагам все действия, которые необходимо выполнить разработчику, чтобы подключить новый документ к подсистеме дополнительных сведений БСП:
Расширение определяемого типа
Перейдем в ветку метаданных Общие -> Определяемые типы -> ВладелецДополнительныхСведений. Откроем список типов и установим флаг напротив ссылки на наш новый документ — ДокументСсылка.ИмяНовогоДокумента.
Если в конфигурации используется разделение прав на уровне записей (RLS), также необходимо проверить и при необходимости включить объект в определяемые типы:
ОпределяемыйТип.ВладелецЗначенийКлючейДоступаОпределяемыйТип.ВладелецЗначенийКлючейДоступаДополнительныхРеквизитовИСведенийСоздание предопределенного набора свойств
Подсистема БСП хранит состав свойств для каждого типа объекта в справочнике НаборыДополнительныхРеквизитовИСведений. Перейдем в данный справочник в дереве метаданных и добавим новый предопределенный элемент:
Документ_ИмяНовогоДокумента (для справочников используется шаблон Справочник_ИмяСправочника).Документ "Заявка на расходование ДС".Регистрация объекта в переопределяемом модуле
Проанализируем процедуру ПриОпределенииНаборовСвойствОбъектов в общем модуле УправлениеСвойствамиПереопределяемый. В зависимости от версии БСП, требуется зарегистрировать новый объект, чтобы подсистема корректно обрабатывала его при обновлении информационной базы:
Процедура ПриОпределенииНаборовСвойствОбъектов(НаборыСвойств) Экспорт
Набор = НаборыСвойств.Добавить();
Набор.Имя = "Документ_ИмяНовогоДокумента";
Набор.Синоним = НСтр("ru = 'Документ ""Имя нового документа""'");
Набор.ИмяПредопределенногоНабора = "Документ_ИмяНовогоДокумента";
КонецПроцедуры
Проверка прав доступа (ролей)
Убедимся, что роли пользователей, которые будут работать с документом, имеют права на чтение и изменение регистра сведений ДополнительныеСведения, а также право на использование общей команды ОбщаяКоманда.ДополнительныеСведенияКоманднаяПанель (обычно это типовые роли ЧтениеДополнительныхСведений и ИзменениеДополнительныхСведений).
Частая проблема, с которой сталкиваются разработчики: тип в ОпределяемыйТип.ВладелецДополнительныхСведений уже добавлен, но в редакторе командного интерфейса открытой формы команда ДополнительныеСведенияКоманднаяПанель так и не появляется, либо удаление типа не приводит к ее исчезновению у старых документов.
Выясним причину такого поведения. Редактор форм в Конфигураторе активно кэширует схему типов и метаданных для ускорения работы интерфейса. Изменение состава определяемого типа не всегда форсирует мгновенную перерисовку дерева команд открытых ранее окон.
Для гарантированного обновления структуры интерфейса выполним следующие действия:
%LOCALAPPDATA%\1C\1cv8 и %APPDATA%\1C\1cv8).Важно различать механизмы работы со свойствами объектов в БСП, так как их архитектура и способ интеграции существенно отличаются:
Дополнительные сведения:
Хранятся в независимом регистре сведений ДополнительныеСведения. Редактируются в отдельном модальном или блокирующем диалоговом окне, вызываемом по общей команде ДополнительныеСведенияКоманднаяПанель. Изменение сведений не приводит к перезаписи самого документа и не меняет версию его данных. Для их подключения достаточно описанных выше действий в метаданных.
Дополнительные реквизиты:
Хранятся непосредственно внутри объекта — в табличной части ДополнительныеРеквизиты. Отображаются прямо на форме объекта в виде динамически создаваемых полей ввода. Для их интеграции требуется не только добавить табличную часть в метаданные документа, но и внедрить вызовы процедур БСП в модуль формы:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Инициализация механизма дополнительных реквизитов на форме
УправлениеСвойствами.ПриСозданииНаСервере(ЭтотОбъект, Объект);
КонецПроцедуры
&НаСервере
Процедура ПриЧтенииСозданииНаСервере(ТекущийОбъект)
// Заполнение значений дополнительных реквизитов
УправлениеСвойствами.ПриЧтенииСозданииНаСервере(ЭтотОбъект, ТекущийОбъект);
КонецПроцедуры
Следуя представленным инструкциям и учитывая особенности кэширования платформы 1С:Предприятие, вы сможете быстро и корректно интегрировать любые новые объекты с подсистемой свойств БСП.