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

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

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

Понимание архитектуры хранения данных

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

Решение через использование параметров запроса

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

Рассмотрим пример кода для получения значения:


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

Запрос.УстановитьПараметр("СсылкаДолжность", СсылкаДолжность);
Запрос.УстановитьПараметр("ИмяДопРек", "ИмяВашегоДополнительногоРеквизита");

РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();

Если Выборка.Следующий() Тогда
    Значение = Выборка.ЗначениеКатегорияРаботника;
КонецЕсли;

Разбор ключевых этапов

  1. Фильтрация по владельцу: Мы используем параметр &СсылкаДолжность, чтобы выбрать дополнительные реквизиты только для конкретного элемента справочника. Без этого условия запрос вернет данные по всей базе, что приведет к ошибкам логики.
  2. Фильтрация по свойству: Так как у одной должности может быть несколько разных доп. реквизитов, мы обращаемся к Свойство.Имя. Это уникальное имя, которое задается в режиме 1С:Предприятие. Использование этого метода делает ваш код универсальным.
  3. Обработка результата: Всегда проверяйте результат через Выборка.Следующий(). Если реквизит не был заполнен пользователем, выборка будет пустой, и попытка обращения к данным приведет к ошибке.

Советы по отладке в Консоли запросов

При работе в Консоли запросов часто возникает ситуация «пустого результата». Чтобы этого избежать, следуйте этим шагам:

Во-первых, убедитесь, что вы заполнили таблицу параметров. Найдите в интерфейсе консоли вкладку или ссылку «Параметры запроса». Именно там вы должны указать тип значения для СсылкаДолжность — он должен соответствовать типу СправочникСсылка.Должности.

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

Альтернативные методы

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

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

← На главную