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

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

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

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

Способ 1. Использование настройки «Расположение ресурсов»

Разберем самый быстрый способ, который позволяет изменить визуальное представление данных без переписывания запроса. Если ваши поля (Адрес, Название и т.д.) уже определены как ресурсы, СКД позволяет управлять их позиционированием.

Проанализируем шаги настройки:

  1. Откроем схему компоновки данных и перейдем на вкладку «Настройки».
  2. Выберем вариант отчета или конкретную таблицу.
  3. Перейдем на вкладку «Дополнительные настройки».
  4. Найдем параметр «Расположение ресурсов». По умолчанию он стоит в значении «Горизонтально», что заставляет систему рисовать ресурсы в ряд. Установим значение «Вертикально».

В этом случае, если у нас в колонках выбрана группировка по дате, все выбранные ресурсы (поля с данными) будут выводиться друг под другом внутри каждой даты. Это создает эффект «строк», хотя технически они остаются ресурсами.

Способ 2. Трансформация данных в запросе (метод UNION ALL)

Если первый способ не подходит из-за сложности структуры или необходимости выводить текстовые данные как элементы группировки, рассмотрим более гибкий метод — приведение данных к плоскому виду «Ключ — Значение» прямо в запросе.

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

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


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

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    Контрагенты.Ссылка,
    &ДатаНачала,
    "Телефон",
    Контрагенты.Телефон
ИЗ
    Справочник.Контрагенты КАК Контрагенты

Разберем, что мы сделали. Мы создали искусственное поле ИмяПараметра, в которое вручную вписали строки «Адрес», «Телефон» и т.д. Теперь в настройках СКД нам достаточно сделать следующее:

  1. Добавить поле ЗначениеПараметра в список Ресурсов. Важно использовать функцию Максимум(ЗначениеПараметра), чтобы система могла корректно обрабатывать строковые значения.
  2. В структуре отчета создать Таблицу.
  3. В Строки таблицы добавить группировку по полю ИмяПараметра.
  4. В Колонки таблицы добавить группировку по полю Период (с типом дополнения по дням, если нужно).

При таком подходе отчет будет выглядеть именно так, как просил автор темы: слева названия параметров (Адрес, Телефон), сверху даты, а на пересечении — данные.

Способ 3. Вертикальная группировка ресурсов через «Детальные записи»

Иногда требуется более тонкая настройка. Рассмотрим ситуацию, когда поля Адрес и Название — это просто реквизиты одной группировки. Чтобы они не «расползались» по горизонтали, можно воспользоваться особенностью работы СКД с выбранными полями внутри группировки.

Проанализируем этот алгоритм:

  1. В настройках СКД создаем группировку (например, по Контрагенту).
  2. Внутри этой группировки создаем вложенную группировку «Детальные записи».
  3. Переходим на вкладку «Выбранные поля» именно для этой вложенной группировки.
  4. Добавляем нужные поля (Адрес, Название) и объединяем их в Группу полей (правой кнопкой мыши — Сгруппировать поля).
  5. У созданной группы устанавливаем тип расположения «Вертикально».

Это позволит сохранить логическую целостность данных, при этом визуально расположив их друг под другом в одной ячейке или строке, что значительно улучшает читаемость «простыни» отчета.

Важные замечания по типам данных

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

Чтобы избежать проблем с отображением, рекомендуем в запросе всегда приводить значения к строковому представлению с помощью функции ПРЕДСТАВЛЕНИЕ() или ВЫРАЗИТЬ(), если это допустимо бизнес-логикой. Также убедитесь, что в поле «Роли» для периода указано Игнорировать значения NULL, иначе при отсутствии данных на конкретную дату в таблице могут появиться пустые «дыры», мешающие восприятию.

Резюме

Мы выяснили, что задача «транспонирования» полей в строки СКД решается несколькими путями. Если вам нужно быстро изменить вид — используйте вертикальное расположение ресурсов в дополнительных настройках. Если требуется жесткая структура, где названия строк — это элементы данных, используйте UNION ALL в запросе. Совместное использование этих техник позволит вам создавать отчеты любой сложности, сохраняя их информативность и удобство для конечного пользователя.

← На главную