При переходе со старых конфигураций 1С на обычных формах (например, УПП 1.3 или УТ 10.3) на современные решения под управлением платформы «1С:Предприятие 8.3» разработчики часто сталкиваются с вопросом: куда исчез привычный регистр сведений ЗначенияСвойствОбъектов? В управляемом приложении механизмы работы со свойствами объектов претерпели значительные изменения.
В этой статье мы подробно разберем, как устроен современный аналог механизма свойств в Библиотеке стандартных подсистем (БСП), как его правильно настраивать в пользовательском режиме и как взаимодействовать с ним программно.
В старых конфигурациях все дополнительные характеристики объектов (будь то цвет номенклатуры или признак согласования документа) хранились в одной «куче» — в регистре сведений ЗначенияСвойствОбъектов. Это было просто, но не всегда оптимально с точки зрения производительности и разграничения прав доступа.
В современной БСП этот механизм разделили на две принципиально разные сущности:
ДополнительныеРеквизиты. Такие реквизиты являются неотъемлемой частью объекта. Они выводятся непосредственно на форму элемента и записываются в одной транзакции с ним. Если у пользователя нет прав на изменение справочника, он не сможет изменить и его дополнительный реквизит.ЗначенияСвойствОбъектов. Данные хранятся в отдельном регистре сведений ДополнительныеСведения. Они не привязаны к транзакции записи самого объекта и могут редактироваться отдельно (например, когда сам документ закрыт для редактирования или у пользователя есть права только на чтение этого документа).Для управления этой структурой используются сопутствующие объекты метаданных:
СвойстваОбъектов. Здесь хранятся сами типы свойств (ссылки на справочники, числа, строки, булево).Выясним, как активировать этот функционал без программирования. Для этого выполним несколько простых шагов:
После этого настроенные Дополнительные реквизиты автоматически отобразятся на форме элемента справочника или документа в специально отведенной области. Чтобы заполнить Дополнительные сведения, пользователю нужно нажать на кнопку с синей иконкой информации («i») на командной панели формы — откроется отдельное всплывающее диалоговое окно.
Иногда возникает ситуация, когда для определенного справочника или документа в конфигурации изначально не предусмотрена возможность добавления свойств (в дереве настройки подсистемы этот объект просто отсутствует). Разберем, как поступить в таком случае.
Способ 1. Использование механизма дополнительных сведений (без изменения конфигурации)
Для подключения дополнительных сведений нам не требуется менять структуру самого объекта базы данных. Достаточно лишь зарегистрировать наш объект в качестве источника для регистра ДополнительныеСведения. Сделать это можно, добавив объект в определяемый тип ОбъектСДополнительнымиСведениями и настроив для него набор в справочнике НаборыДополнительныхРеквизитовИСведений.
Способ 2. Использование расширения конфигурации (для дополнительных реквизитов)
Если нам критически важно иметь свойства именно на форме элемента (как реквизиты), а конфигурация находится на поддержке, мы можем использовать механизм расширений:
ДополнительныеРеквизиты.Свойство (тип ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения) и Значение (тип Характеристика.ДополнительныеРеквизитыИСведения).В управляемом приложении крайне не рекомендуется писать прямые запросы к табличным частям или регистру сведений ДополнительныеСведения, как мы делали это раньше. Для этого в БСП предусмотрен готовый и удобный программный интерфейс API в общем модуле УправлениеСвойствами.
Рассмотрим пример того, как программно получить значение дополнительного реквизита или сведения для конкретного объекта:
// Определим объект, значение свойства которого нам нужно получить
СсылкаНаОбъект = Справочники.Номенклатура.НайтиПоРеквизиту("Артикул", "12345");
// Найдем само свойство (характеристику) по его наименованию или уникальному идентификатору
СвойствоОбъекта = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Цвет (Номенклатура)");
Если ЗначениеЗаполнено(СвойствоОбъекта) Тогда
// Используем стандартный метод БСП для получения значения
ЗначениеСвойства = УправлениеСвойствами.ЗначениеСвойства(СсылкаНаОбъект, СвойствоОбъекта);
ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Значение свойства: " + ЗначениеСвойства);КонецЕсли;
А теперь разберем ситуацию, когда нам необходимо программно записать значение в Дополнительные сведения для объекта. Поскольку это независимый регистр сведений, запись выполняется следующим образом:
// Зададим параметры для записи
АдресатСведений = Справочники.Контрагенты.НайтиПоРеквизиту("ИНН", "7700000000");
СвойствоДопСведения = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Надежность контрагента");
НовоеЗначение = Справочники.ЗначенияСвойствОбъектов.НайтиПоНаименованию("Высокая", , СвойствоДопСведения);
Если ЗначениеЗаполнено(АдресатСведений) И ЗначениеЗаполнено(СвойствоДопСведения) Тогда
// Записываем данные напрямую через программный интерфейс общего модуля БСП
УправлениеСвойствами.ЗаписатьЗаписьВРегистрСведенийДополнительныеСведения(АдресатСведений, СвойствоДопСведения, НовоеЗначение);
ПоказатьОповещениеПользователя("Успешно!", , "Сведения о надежности обновлены.");
КонецЕсли;
Использование этого унифицированного API гарантирует стабильную работу ваших доработок при обновлении конфигураций и версий Библиотеки стандартных подсистем.