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