Как в СКД обратиться к дополнительным реквизитам справочника

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

При разработке отчетов на базе Системы компоновки данных (СКД) программисты часто сталкиваются с необходимостью вывести данные, которые не являются основными реквизитами справочника, а добавлены пользователями в режиме «1С:Предприятие» как дополнительные реквизиты. В типовых конфигурациях (ЗУП 3.1, ERP 2.5, БП 3.0) эти данные хранятся не в основной таблице справочника, а в специальной табличной части или регистре сведений. Рассмотрим подробнее, как правильно извлечь эти данные, чтобы отчет работал быстро и корректно.

Способ 1: Соединение с табличной частью в запросе

Самый прямой и очевидный путь — это обращение к табличной части справочника ДополнительныеРеквизиты. Разберем ситуацию на примере справочника Сотрудники. Допустим, нам нужно получить значение конкретного доп. реквизита.

Проанализируем структуру запроса. Нам необходимо выполнить ЛЕВОЕ СОЕДИНЕНИЕ основной таблицы справочника с его табличной частью. Крайне важно накладывать фильтр по конкретному свойству непосредственно в условии связи ПО, а не в блоке ГДЕ. Это предотвратит «размножение» строк в результате, если у объекта заполнено несколько дополнительных реквизитов.

Посмотрим на пример кода:


ВЫБРАТЬ
    Сотрудники.Ссылка КАК Сотрудник,
    Сотрудники.Наименование КАК ФИО,
    СотрудникиДополнительныеРеквизиты.Значение КАК ЗначениеРеквизита
ИЗ
    Справочник.Сотрудники КАК Сотрудники
        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Сотрудники.ДополнительныеРеквизиты КАК СотрудникиДополнительныеРеквизиты
        ПО Сотрудники.Ссылка = СотрудникиДополнительныеРеквизиты.Ссылка
            И СотрудникиДополнительныеРеквизиты.Свойство = &НужноеСвойство

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

Способ 2: Использование механизма «Характеристики» в СКД

Профессиональный подход к разработке в СКД подразумевает использование встроенного механизма характеристик. Этот метод позволяет пользователю работать с дополнительными реквизитами так же легко, как и с основными: они появляются в списке доступных полей через «плюсик».

Разберем по шагам, как настроить характеристики в схеме компоновки данных:

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

После такой настройки нам не нужно вручную соединять таблицы в тексте запроса. СКД сама подставит необходимые соединения, если пользователь выберет доп. реквизит в настройках отчета. Это значительно повышает производительность, так как лишние таблицы не будут задействованы, если поле не используется.

Способ 3: Дополнительные сведения (внешние данные)

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

Если нужные вам данные являются сведениями, запрос в СКД будет выглядеть следующим образом:


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

Обратите внимание, что в регистре сведений поле связи называется Объект, а не Ссылка. Это ключевое отличие при написании условий соединения.

Оптимизация и типы данных

Выясним причину возможных ошибок при работе с типами. Поле Значение в таблице дополнительных реквизитов имеет составной тип данных. Если вы точно знаете, что в вашем реквизите хранится число или дата, и хотите выполнять над ними математические операции в СКД, обязательно используйте функцию ВЫРАЗИТЬ.

Проанализируем ситуацию: без явного приведения типа СКД может некорректно суммировать значения или выдавать ошибку при попытке форматирования. Рассмотрим пример:


ВЫБРАТЬ
    Сотрудники.Ссылка КАК Сотрудник,
    ВЫРАЗИТЬ(ДопРеквизиты.Значение КАК Число(15, 2)) КАК ЧисловойПоказатель
ИЗ
    Справочник.Сотрудники КАК Сотрудники
    ...

Важные советы для разработчика:

Таким образом, мы рассмотрели основные методы работы с дополнительными данными. Для простых отчетов подойдет прямое соединение в запросе, но для тиражируемых решений и сложных систем лучшим выбором будет использование механизма характеристик СКД.

← На главную