Как программно получить значение дополнительного реквизита в 1С?

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

При разработке отчетов или внешних обработок в типовых конфигурациях 1С часто возникает необходимость программного обращения к значениям дополнительных реквизитов. Разберем детально, как устроена эта система и как правильно извлекать данные, чтобы ваш код оставался надежным и соответствовал стандартам разработки.

Понимание структуры хранения дополнительных реквизитов

В конфигурациях, использующих Библиотеку стандартных подсистем (БСП), дополнительные свойства объектов делятся на две категории:

  1. Дополнительные реквизиты: Они хранятся непосредственно в табличной части объекта (например, в Справочник.Номенклатура.ДополнительныеРеквизиты). Это позволяет быстро обращаться к ним в запросах.
  2. Дополнительные сведения: Они хранятся в отдельном независимом РегистрСведений.ДополнительныеСведения.

Важно помнить, что определения свойств (их названия, типы данных и настройки) содержатся в ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения. Именно через этот план видов характеристик мы обычно находим ссылку на нужное свойство.

Способ 1: Использование типовой функции БСП

Самый правильный и рекомендуемый подход — использовать встроенную функцию УправлениеСвойствами.ЗначенияСвойств. Этот метод универсален: он самостоятельно учитывает права доступа, корректно объединяет данные из разных таблиц и обрабатывает как реквизиты, так и сведения.

Рассмотрим, как реализовать вызов этой функции в вашем коде:


// Пример вызова для получения значений
МассивОбъектов = Новый Массив;
МассивОбъектов.Добавить(СсылкаНаОбъект);

Результат = УправлениеСвойствами.ЗначенияСвойств(МассивОбъектов);

Для каждого СтрокаРезультата Из Результат Цикл
    Сообщить("Свойство: " + СтрокаРезультата.ИмяСвойства + ", Значение: " + СтрокаРезультата.Представление);
КонецЦикла;

Этот подход избавляет вас от необходимости вручную прописывать сложные соединения таблиц в запросах и защищает код от возможных изменений в структуре метаданных при обновлении конфигурации.

Способ 2: Прямой запрос к табличной части

Если вам требуется высокая производительность в специфических отчетах или вы строите сложный отбор, можно обратиться к табличной части напрямую. Рассмотрим, как составить такой запрос:


ВЫБРАТЬ
    НоменклатураДополнительныеРеквизиты.Значение КАК Значение
ИЗ
    Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты
ГДЕ
    НоменклатураДополнительныеРеквизиты.Свойство.Наименование = "НеДляПрайса"

Если же свойство имеет ссылочный тип данных (например, выбор значения из списка цветов), то значение реквизита будет ссылкой на элемент справочника Справочник.ЗначенияСвойствОбъектов. Чтобы отобрать элементы, имеющие конкретный тип данных, можно использовать оператор ССЫЛКА:


ВЫБРАТЬ
    НоменклатураДополнительныеРеквизиты.Значение КАК Значение
ИЗ
    Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты
ГДЕ
    НоменклатураДополнительныеРеквизиты.Значение ССЫЛКА Справочник.ЗначенияСвойствОбъектов
    И НоменклатураДополнительныеРеквизиты.Значение.Наименование = "Красный"

Практические рекомендации

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

Разбирая задачу, мы выяснили, что ключ к решению лежит в правильном выборе между прямым запросом к табличной части (для простых задач) и использованием типовых механизмов БСП (для комплексных задач). Это позволит вашим разработкам работать корректно в любой типовой конфигурации 1С.

← На главную