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

Программист 1С v8.3 (Обычные формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

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

Понимание концепции «Колонки» в СКД

Основная ошибка при решении подобных задач — попытка «зашить» логику разделения по колонкам непосредственно в Запрос. Хотя такой подход имеет право на жизнь (например, через Временные таблицы и Левые соединения), он делает отчет трудноподдерживаемым и менее гибким. Более правильный путь — использование встроенных механизмов СКД для настройки структуры отчета.

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

Шаг 1: Подготовка данных

Убедитесь, что ваш запрос возвращает все необходимые данные в плоском виде. Не нужно пытаться заранее распределять данные по колонкам в запросе. Достаточно того, чтобы у вас было поле, определяющее принадлежность товара к группе (например, НоменклатурнаяГруппа или какой-либо реквизит Справочника).

Шаг 2: Использование группировок для создания колонок

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

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

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

Шаг 3: Работа с произвольными условиями через пользовательские поля

Бывают ситуации, когда логика распределения по группам сложнее, чем простое значение реквизита. Например, вам нужно отнести товары к «Группе А», если они входят в один список, и к «Группе Б», если они входят в другой. В таких случаях используйте Пользовательские поля в СКД:

  1. Перейдите на вкладку Наборы данных, нажмите кнопку Добавить пользовательское поле.
  2. Выберите тип Выражение.
  3. Используйте функцию ВЫБОР для классификации данных:

ВЫБОР
    КОГДА Товар В (&СписокА) ТОГДА "Группа А"
    КОГДА Товар В (&СписокБ) ТОГДА "Группа Б"
    ИНАЧЕ "Прочее"
КОНЕЦ

После создания такого поля вы можете использовать его в группировке Колонки точно так же, как обычное поле справочника. Это позволит динамически управлять составом колонок через параметры СписокА и СписокБ без изменения самого запроса.

Шаг 4: Альтернативный подход — ресурсы с условиями

Если вам нужно получить жестко заданную структуру колонок, где для каждой группы выводится специфический расчет, можно воспользоваться настройкой ресурсов с условием в выражении. Вместо использования группировок по колонкам, мы можем создать несколько вычисляемых полей для каждого ресурса.

Пример настройки выражения для ресурса «Количество Группа А»:


Сумма(ВЫБОР 
    КОГДА Номенклатура В (&СписокА) 
    ТОГДА Количество 
    ИНАЧЕ 0 
КОНЕЦ)

Такой подход удобен, если количество колонок строго фиксировано и вы хотите контролировать заголовок каждой колонки вручную через Макеты или Выбранные поля на вкладке Настройки.

Советы по оптимизации

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

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

← На главную