Каков аналог регистра «Значения свойств объектов» в управляемых формах 1С 8.3 и как с ним работать?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При переходе со старых конфигураций 1С на обычных формах (например, УПП 1.3 или УТ 10.3) на современные решения под управлением платформы «1С:Предприятие 8.3» разработчики часто сталкиваются с вопросом: куда исчез привычный регистр сведений ЗначенияСвойствОбъектов? В управляемом приложении механизмы работы со свойствами объектов претерпели значительные изменения.

В этой статье мы подробно разберем, как устроен современный аналог механизма свойств в Библиотеке стандартных подсистем (БСП), как его правильно настраивать в пользовательском режиме и как взаимодействовать с ним программно.

Архитектурная революция: разделение на реквизиты и сведения

В старых конфигурациях все дополнительные характеристики объектов (будь то цвет номенклатуры или признак согласования документа) хранились в одной «куче» — в регистре сведений ЗначенияСвойствОбъектов. Это было просто, но не всегда оптимально с точки зрения производительности и разграничения прав доступа.

В современной БСП этот механизм разделили на две принципиально разные сущности:

  1. Дополнительные реквизиты. Они создаются динамически, но физически хранятся внутри самого объекта метаданных — в его специальной табличной части с именем ДополнительныеРеквизиты. Такие реквизиты являются неотъемлемой частью объекта. Они выводятся непосредственно на форму элемента и записываются в одной транзакции с ним. Если у пользователя нет прав на изменение справочника, он не сможет изменить и его дополнительный реквизит.
  2. Дополнительные сведения. Это и есть прямой технический аналог старого регистра ЗначенияСвойствОбъектов. Данные хранятся в отдельном регистре сведений ДополнительныеСведения. Они не привязаны к транзакции записи самого объекта и могут редактироваться отдельно (например, когда сам документ закрыт для редактирования или у пользователя есть права только на чтение этого документа).

Для управления этой структурой используются сопутствующие объекты метаданных:

Как включить и настроить свойства в пользовательском режиме

Выясним, как активировать этот функционал без программирования. Для этого выполним несколько простых шагов:

  1. Перейдем в раздел Администрирование, далее выберем пункт Общие настройки.
  2. Найдем группу параметров Дополнительные реквизиты и сведения и установим соответствующий флаг для включения подсистемы.
  3. После активации нам станут доступны две гиперссылки: Дополнительные реквизиты и Дополнительные сведения. Перейдем по любой из них.
  4. В открывшемся окне мы увидим дерево объектов нашей конфигурации. Выберем интересующий нас объект (например, справочник «Контрагенты» или «Номенклатура»).
  5. Нажмем кнопку Добавить и выберем Новый. Заполним наименование свойства, укажем тип значения (например, «Дополнительное значение» для создания списков) и настроим параметры видимости или обязательности заполнения.

После этого настроенные Дополнительные реквизиты автоматически отобразятся на форме элемента справочника или документа в специально отведенной области. Чтобы заполнить Дополнительные сведения, пользователю нужно нажать на кнопку с синей иконкой информации («i») на командной панели формы — откроется отдельное всплывающее диалоговое окно.

Что делать, если у объекта конфигурации нет поддержки дополнительных свойств?

Иногда возникает ситуация, когда для определенного справочника или документа в конфигурации изначально не предусмотрена возможность добавления свойств (в дереве настройки подсистемы этот объект просто отсутствует). Разберем, как поступить в таком случае.

Способ 1. Использование механизма дополнительных сведений (без изменения конфигурации)

Для подключения дополнительных сведений нам не требуется менять структуру самого объекта базы данных. Достаточно лишь зарегистрировать наш объект в качестве источника для регистра ДополнительныеСведения. Сделать это можно, добавив объект в определяемый тип ОбъектСДополнительнымиСведениями и настроив для него набор в справочнике НаборыДополнительныхРеквизитовИСведений.

Способ 2. Использование расширения конфигурации (для дополнительных реквизитов)

Если нам критически важно иметь свойства именно на форме элемента (как реквизиты), а конфигурация находится на поддержке, мы можем использовать механизм расширений:

  1. Создадим новое расширение конфигурации и добавим в него целевой справочник.
  2. В расширении добавим к этому справочнику табличную часть с именем ДополнительныеРеквизиты.
  3. Добавим в табличную часть реквизиты: Свойство (тип ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения) и Значение (тип Характеристика.ДополнительныеРеквизитыИСведения).
  4. Внедрить вызовы программного интерфейса БСП в модуль формы объекта для автоматического вывода реквизитов на форму.

Программная работа со свойствами в БСП

В управляемом приложении крайне не рекомендуется писать прямые запросы к табличным частям или регистру сведений ДополнительныеСведения, как мы делали это раньше. Для этого в БСП предусмотрен готовый и удобный программный интерфейс API в общем модуле УправлениеСвойствами.

Рассмотрим пример того, как программно получить значение дополнительного реквизита или сведения для конкретного объекта:


// Определим объект, значение свойства которого нам нужно получить
СсылкаНаОбъект = Справочники.Номенклатура.НайтиПоРеквизиту("Артикул", "12345");

// Найдем само свойство (характеристику) по его наименованию или уникальному идентификатору
СвойствоОбъекта = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Цвет (Номенклатура)");

Если ЗначениеЗаполнено(СвойствоОбъекта) Тогда
    // Используем стандартный метод БСП для получения значения
    ЗначениеСвойства = УправлениеСвойствами.ЗначениеСвойства(СсылкаНаОбъект, СвойствоОбъекта);
    ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Значение свойства: " + ЗначениеСвойства);КонецЕсли;

А теперь разберем ситуацию, когда нам необходимо программно записать значение в Дополнительные сведения для объекта. Поскольку это независимый регистр сведений, запись выполняется следующим образом:


// Зададим параметры для записи
АдресатСведений = Справочники.Контрагенты.НайтиПоРеквизиту("ИНН", "7700000000");
СвойствоДопСведения = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Надежность контрагента");
НовоеЗначение = Справочники.ЗначенияСвойствОбъектов.НайтиПоНаименованию("Высокая", , СвойствоДопСведения);

Если ЗначениеЗаполнено(АдресатСведений) И ЗначениеЗаполнено(СвойствоДопСведения) Тогда
    // Записываем данные напрямую через программный интерфейс общего модуля БСП
    УправлениеСвойствами.ЗаписатьЗаписьВРегистрСведенийДополнительныеСведения(АдресатСведений, СвойствоДопСведения, НовоеЗначение);
    ПоказатьОповещениеПользователя("Успешно!", , "Сведения о надежности обновлены.");
КонецЕсли;

Использование этого унифицированного API гарантирует стабильную работу ваших доработок при обновлении конфигураций и версий Библиотеки стандартных подсистем.

← На главную