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

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

При разработке отчетов на системе компоновки данных (СКД) часто возникает задача вывести дополнительные реквизиты объектов (справочников или документов) в отдельные колонки. Типовая структура хранения таких данных в 1С — это табличная часть ДополнительныеРеквизиты, где в каждой строке указаны Свойство и его Значение. Если просто попытаться вывести эти данные, они отобразятся в виде списка строк под объектом, а не в виде удобной таблицы с колонками-свойствами. Разберем основные способы решения этой задачи: от настройки ресурсов до использования механизма характеристик.

Способ 1. Использование кросс-таблицы и агрегатных функций в ресурсах

Это наиболее быстрый способ, если вы уже построили запрос к табличной части. Проблема автора темы заключалась в том, что при создании кросс-таблицы значения свойств выводились в отдельной колонке слева, создавая иерархический сдвиг. Чтобы Значение попало строго на пересечение строки (объекта) и колонки (свойства), его необходимо сделать ресурсом.

Рассмотрим пошагово, как это реализовать:

  1. Подготовим запрос. Нам нужно выбрать ссылку на основной объект и данные из его табличной части. Пример запроса:
    
    ВЫБРАТЬ
        НоменклатурныеГруппы.Ссылка КАК Ссылка,
        НоменклатурныеГруппыДополнительныеРеквизиты.Свойство КАК Свойство,
        НоменклатурныеГруппыДополнительныеРеквизиты.Значение КАК Значение
    ИЗ
        Справочник.НоменклатурныеГруппы КАК НоменклатурныеГруппы
        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.НоменклатурныеГруппы.ДополнительныеРеквизиты КАК НоменклатурныеГруппыДополнительныеРеквизиты
        ПО НоменклатурныеГруппы.Ссылка = НоменклатурныеГруппыДополнительныеРеквизиты.Ссылка
    
  2. Настроим вкладку «Ресурсы». Перетащим поле Значение в список ресурсов. В качестве выражения выберем функцию Максимум(Значение). Поскольку для одного конкретного свойства у одного объекта значение обычно только одно, функция Максимум просто вернет это единственное значение, превратив его в ресурс.
  3. Настроим структуру отчета. В настройках выберем тип «Таблица».
    • В Строки добавим группировку по полю Ссылка.
    • В Колонки добавим группировку по полю Свойство.
    • В Выбранные поля таблицы (или всей схемы) добавим ресурс Значение.

Благодаря тому, что Значение теперь является ресурсом, СКД не будет создавать для него новые строки, а распределит данные по ячейкам на пересечении строк-объектов и колонок-свойств.

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

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

Разберем алгоритм настройки:

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

После этой настройки в дереве доступных полей напротив поля Ссылка (Номенклатурная группа) появится «плюсик». Развернув его, мы увидим все доступные дополнительные реквизиты как обычные поля. Теперь их можно просто перетащить в «Выбранные поля» без использования кросс-таблиц. Это позволяет пользователю в режиме «1С:Предприятие» самому выбирать, какие свойства он хочет видеть в отчете.

Способ 3. Агрегация данных функцией СоединитьСтроки

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

Чтобы вывести все значения через запятую в одной ячейке, на вкладке «Ресурсы» для поля Значение используем функцию: СоединитьСтроки(Значение, ", "). Это гарантирует корректное отображение всех данных без увеличения количества строк в отчете.

Технические нюансы и производительность

Выясним, на что стоит обратить внимание при больших объемах данных:

Таким образом, для простых отчетов лучше всего подходит использование ресурсов с функцией МАКСИМУМ, а для универсальных решений, которыми будут пользоваться конечные пользователи, — настройка механизма характеристик в СКД.

← На главную