Как в СКД вывести данные из двух наборов данных в виде кросс-таблицы и скрыть лишние заголовки ресурсов?

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

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

Настройка наборов данных и их связей

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

Существует два подхода к организации данных в СКД:

  1. Один запрос: Мы объединяем таблицу документов и таблицу их частей через ЛЕВОЕ СОЕДИНЕНИЕ непосредственно в тексте запроса. Это наиболее производительный метод, так как база данных строит единый план выполнения.
  2. Два набора данных: Мы создаем отдельные наборы и связываем их на закладке "Связи наборов данных". Этот метод удобен, когда данные поступают из разных источников (например, запрос и объект), но он может замедлять отчет при больших объемах.

Если мы используем два набора, крайне важно правильно настроить связь. В поле "Источник связи" указываем первый набор, в поле "Приемник" — второй. В колонках "Выражение источник" и "Выражение приемник" выбираем поле Ссылка. Чтобы избежать проблемы производительности (известной как запрос в цикле N+1), обязательно используем параметры связи. Выясним, как это выглядит в коде запроса второго набора:


ВЫБРАТЬ
    ТЧ.Ссылка КАК Ссылка,
    ТЧ.Номенклатура КАК Номенклатура,
    ТЧ.Количество КАК Количество
ИЗ
    Документ.РеализацияТоваровУслуг.Товары КАК ТЧ
ГДЕ
    ТЧ.Ссылка В (&СписокСсылок)

В настройках связи СКД, в колонке Параметры, необходимо указать имя параметра СписокСсылок. В этом случае СКД передаст массив ссылок из первого набора во второй одним пакетом, что значительно ускорит формирование отчета.

Формирование структуры кросс-таблицы

Для того чтобы получить вид "Документ | Контрагент | Номенклатура 1 | Номенклатура 2", нам необходимо использовать объект Таблица в настройках компоновки. Посмотрим, как настроить иерархию группировок:

  1. Перейдем на закладку Настройки.
  2. Добавим новый элемент Таблица.
  3. В Строки таблицы добавим группировки по полям Ссылка (Документ) и Контрагент.
  4. В Колонки таблицы добавим группировку по полю Номенклатура.
  5. На закладке Выбранные поля для всей таблицы укажем ресурс Количество.

После таких настроек СКД развернет всю имеющуюся номенклатуру по горизонтали, а на пересечении строк и колонок выведет количество.

Удаление лишнего заголовка ресурса («Количество»)

Часто пользователи жалуются, что над каждой колонкой номенклатуры выводится заголовок "Количество". Это загромождает отчет, особенно если ресурс всего один и его название очевидно из контекста. Разберем, как убрать это название, сохранив только наименование номенклатуры.

Способ 1: Другие настройки

Это самый простой и быстрый способ. Рассмотрим его выполнение:

  1. Выделим в структуре отчета нашу Таблицу или группировку колонок Номенклатура.
  2. В нижней части экрана перейдем на закладку Другие настройки.
  3. Найдем параметр Расположение названий ресурсов.
  4. Установим значение Нет.

Этот параметр отвечает за вывод строки с названиями ресурсов. При значении Нет СКД скроет ячейку с текстом "Количество", оставив только значения группировки в шапке.

Способ 2: Использование макетов

Если стандартная настройка не помогает или требуется сложная визуализация шапки, воспользуемся вкладкой Макеты. Проанализируем алгоритм создания пользовательского макета:

  1. На закладке Настройки зададим имя для группировки колонок, например, ГруппировкаНоменклатура.
  2. Перейдем на закладку Макеты и нажмем "Добавить макет заголовка группировки".
  3. Выберем нашу группировку ГруппировкаНоменклатура.
  4. В области макета нарисуем ячейку, в которой укажем только параметр Номенклатура.

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

Оптимизация отображения данных

Чтобы отчет выглядел профессионально, проанализируем еще несколько полезных настроек. Во-первых, работа с пустыми ячейками. Когда по документу нет движения конкретной номенклатуры, ячейка остается пустой. Мы можем воспользоваться Условным оформлением:

Во-вторых, обратим внимание на иерархию. Если номенклатура распределена по папкам, установите тип группировки Иерархия для колонок. Это позволит пользователю сворачивать целые группы товаров в заголовке отчета, что значительно повышает удобство анализа при большом ассортименте.

Таким образом, комбинируя правильную структуру Таблица, настройки расположения ресурсов и механизмы макетирования, мы получаем мощный инструмент для кросс-анализа данных в 1С.

← На главную