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