Кросс-таблица и группы полей в отчёте на СКД: как разложить данные по колонкам

· 9 мин

Содержание

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

Типичная ситуация: бухгалтер просит «продажи по номенклатуре, а месяцы — вправо». Разработчик делает обычный отчёт-список и получает месяцы строками. Ниже — оба механизма группировки колонок в схеме компоновки данных 1С, настройка в конструкторе, в пользовательском режиме и кодом.

Зачем группировать колонки в отчёте на СКД

Группировка колонок превращает длинный список в сводную таблицу. Одна ось — строки (что считаем), вторая — колонки (в каком разрезе). На пересечении — сумма, количество или другой ресурс.

Где это нужно чаще всего:

  • 📅 Динамика по периодам — выручка по месяцам, остатки на начало каждого квартала.
  • 🏬 Сравнение объектов — продажи по складам или подразделениям рядом друг с другом.
  • 👥 План-факт — две колонки «План» и «Факт» под каждым месяцем.
  • 🧾 Шапка из нескольких уровней — «Оплата» сверху, под ней «Наличные» и «Безналичные».

Первые три задачи решает кросс-таблица. Четвёртая — группа выбранных полей. Эти инструменты часто путают, хотя работают они по-разному.

Два способа сгруппировать колонки в СКД

СпособЧто получаетсяКогда братьОграничения
Таблица со строками и колонкамиКолонки создаются из значений поля: «Январь», «Февраль», «Склад 1»…Нужен разрез, число колонок заранее неизвестноВ ячейках только ресурсы; при большом числе значений таблица растягивается
Группа выбранных полейНесколько полей под общим заголовкомШапка фиксирована, нужна «двухэтажная» подписьНовых колонок по данным не создаёт
Пользовательское или вычисляемое поле + таблицаКолонки по собственному правилу: кварталы, категории, диапазоныНужного разреза нет в данныхНужно аккуратно писать выражение
Программная настройкаЛюбая из схем выше, собранная кодомСтруктура зависит от выбора пользователяНадо следить за выбором и порядком в каждой группировке

Если колонок должно быть ровно две-три и их состав не меняется («План», «Факт», «Отклонение»), кросс-таблица не нужна. Хватит трёх ресурсов и группы полей над ними.

Группировка колонок в конструкторе схемы компоновки

Пример: остатки и обороты номенклатуры, месяцы — колонками.

Шаг 1. Подготовьте набор данных и ресурсы

  1. Откройте схему в конструкторе и на закладке Наборы данных задайте запрос, например к виртуальной таблице оборотов регистра с периодичностью Месяц.
  2. Убедитесь, что поле периода выбрано в запросе как дата, а не как строка. Иначе месяцы отсортируются по алфавиту: «Август» окажется перед «Январём».
  3. Перейдите на закладку Ресурсы и добавьте поля, которые нужно суммировать (СуммаОборот, КоличествоОборот). Выражение по умолчанию — Сумма(...).

Без ресурсов кросс-таблица выводит шапку и пустые ячейки. Это самая частая причина «отчёт ничего не показывает».

Шаг 2. Создайте таблицу в структуре

  1. Перейдите на закладку Настройки.
  2. В дереве структуры щёлкните правой кнопкой по корню Отчет и выберите Новая таблица.
  3. Внутри таблицы появятся два узла: Строки и Колонки.

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

Шаг 3. Добавьте группировку строк

  1. Выделите узел Строки и добавьте Новая группировка.
  2. Выберите поле Номенклатура. Тип группировки — Элементы, Иерархия или Только иерархия.
  3. Для иерархии справочника получите вложенные строки по группам номенклатуры с промежуточными итогами.

Шаг 4. Добавьте группировку колонок

  1. Выделите узел Колонки, добавьте Новая группировка.
  2. Выберите поле Период (или ПериодМесяц, если оно доступно в наборе).
  3. Чтобы в шапке были все месяцы, даже без движений, откройте поле группировки и задайте Тип дополнения = Месяц, а также начало и конец периода. Их удобно связать с параметрами отчёта.

Шаг 5. Проверьте выбор и порядок

У новой группировки на закладках Выбранные поля и Порядок стоит элемент Авто. Он выводит поле группировки и сортирует по нему. Удалять его стоит только если вы осознанно задаёте свой состав полей.

Запустите отчёт: слева номенклатура, вправо месяцы, на пересечении обороты.

Группа выбранных полей: общая шапка над несколькими колонками

Этот способ отвечает на вопрос «как объединить колонки в СКД под одним заголовком».

  1. На закладке Настройки → Выбранные поля нажмите правой кнопкой и выберите добавление новой группы.
  2. Задайте группе заголовок, например «Оплата».
  3. Перетащите внутрь поля СуммаНаличными и СуммаБезналично.
  4. В свойстве Расположение группы выберите Горизонтально. Поля встанут рядом, заголовок «Оплата» — над ними.

Значение Вертикально поставит поля друг под другом в одной колонке. Это пригодится, когда в строке нужно показать, например, код и наименование компактно.

Группы можно вкладывать друг в друга. Три уровня шапки («Год» → «Оплата» → «Наличные») собираются за минуту, но читаются тяжело. На практике двух уровней хватает.

Группу полей можно создать и внутри конкретной группировки, а не только для отчёта целиком. Тогда шапка изменится только в этой части структуры.

Ручная группировка через поля схемы

Иногда нужного разреза в данных нет. Пример: колонки по кварталам, а регистр отдаёт месяцы. Или клиентов надо разбить на «Крупные», «Средние» и «Мелкие» по сумме.

Вычисляемое поле в схеме

На закладке Вычисляемые поля добавьте поле и задайте выражение. Для категорий клиентов:

ВЫБОР
    КОГДА СуммаОборот >= 1000000 ТОГДА "Крупные"
    КОГДА СуммаОборот >= 100000 ТОГДА "Средние"
    ИНАЧЕ "Мелкие"
КОНЕЦ

Учтите: выражение считается по записям набора, а не по итогу группировки. Если клиенту нужна категория по годовой сумме, посчитайте её в запросе вложенным запросом.

Новое поле в запросе

Кварталы надёжнее получить прямо в тексте запроса:

ВЫБРАТЬ
    Обороты.Номенклатура,
    НАЧАЛОПЕРИОДА(Обороты.Период, КВАРТАЛ) КАК Квартал,
    Обороты.СуммаОборот
ИЗ
    РегистрНакопления.Продажи.Обороты(&НачалоПериода, &КонецПериода, Месяц, ) КАК Обороты

Поле Квартал остаётся датой, поэтому сортируется верно. Формат вывода задайте в оформлении поля, например ДФ='q "кв." yyyy'.

Пользовательские поля

На закладке Пользовательские поля настроек доступны Новое поле-выбор и Новое поле-выражение. Их видит и меняет пользователь без конфигуратора. Это удобно, когда группировку под себя настраивает бухгалтер, а не программист.

Программная группировка колонок

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

Схема = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
Настройки = Схема.НастройкиПоУмолчанию;
Настройки.Структура.Очистить();

Таблица = Настройки.Структура.Добавить(Тип("ТаблицаКомпоновкиДанных"));

// Строки: номенклатура
Строки = Таблица.Строки.Добавить();
ПолеСтрок = Строки.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных"));
ПолеСтрок.Поле = Новый ПолеКомпоновкиДанных("Номенклатура");
ПолеСтрок.Использование = Истина;
Строки.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));
Строки.Порядок.Элементы.Добавить(Тип("АвтоЭлементПорядкаКомпоновкиДанных"));

// Колонки: период
Колонки = Таблица.Колонки.Добавить();
ПолеКолонок = Колонки.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных"));
ПолеКолонок.Поле = Новый ПолеКомпоновкиДанных("Период");
ПолеКолонок.Использование = Истина;
Колонки.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));
Колонки.Порядок.Элементы.Добавить(Тип("АвтоЭлементПорядкаКомпоновкиДанных"));

// Сборка и вывод
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
Макет = КомпоновщикМакета.Выполнить(Схема, Настройки, ДанныеРасшифровки);

Процессор = Новый ПроцессорКомпоновкиДанных;
Процессор.Инициализировать(Макет, , ДанныеРасшифровки, Истина);

ДокументРезультат.Очистить();
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(Процессор);

Что здесь легко пропустить:

  • ✅ Авто-элементы выбора и порядка. Без АвтоВыбранноеПолеКомпоновкиДанных группировка формально есть, но поле в шапке не выводится.
  • ✅ Флаг Использование. Поле группировки с выключенным использованием игнорируется.
  • ✅ Где выполнять. Код компоновки работает на сервере. В отчёте его обычно пишут в обработчике ПриКомпоновкеРезультата модуля объекта или в серверной процедуре формы.

Группу выбранных полей кодом добавляют через Настройки.Выбор.Элементы.Добавить(Тип("ГруппаВыбранныхПолейКомпоновкиДанных")). У группы заполняют Заголовок, а внутрь добавляют элементы типа ВыбранноеПолеКомпоновкиДанных.

Если отчёт открывают пользователи и сохраняют свои варианты, не правьте НастройкиПоУмолчанию при каждом формировании. Меняйте настройки компоновщика формы или вариант отчёта, иначе сохранённые пользователями настройки будут перетираться.

В пользовательском режиме без конфигуратора

В типовых конфигурациях на БСП (Бухгалтерия 3.0, ЗУП 3.1, УТ 11) колонки добавляют в настройках самого отчёта: кнопка Настройки, затем расширенный режим и закладка Структура. Там те же узлы, что в конструкторе: таблица, строки, колонки. Название переключателя вида настроек в разных релизах может отличаться, но закладка структуры есть везде, где включён расширенный режим.

Ошибки при группировке колонок и как их исправить

Диагностика: выберите симптом

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

Продвинутые приёмы для кросс-таблиц

Многоуровневая шапка колонок

Внутрь группировки колонок можно добавить вложенную: Год → Месяц. Получится двухэтажная шапка с итогом по каждому году. Так же складываются Склад → Ячейка или Подразделение → Сотрудник.

Несколько ресурсов в одной колонке

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

Общие итоги справа и снизу

В тех же других настройках задаются Расположение общих итогов по горизонтали и по вертикали. Значения: Авто, Нет, Начало, Конец, НачалоИКонец. Для отчёта по месяцам обычно ставят итог в конце: справа колонка «Итого».

Условное оформление по колонкам

На закладке Условное оформление можно подсветить отрицательные остатки или выделить колонку текущего месяца. Область оформления ограничивается конкретными полями, поэтому подсветка не «расползается» на всю таблицу.

Расшифровка из ячейки кросс-таблицы

Если отчёт выводится через ДанныеРасшифровкиКомпоновкиДанных, как в примере кода выше, двойной щелчок по ячейке открывает расшифровку. Компоновка знает оба значения пересечения: и номенклатуру из строки, и месяц из колонки. Поэтому расшифровка сразу отбирает записи по обоим полям, без доработок.

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

Отбор внутри группировки колонок

Отбор можно задать не только для всего отчёта, но и для конкретной группировки колонок. Пример: показать в колонках только три основных склада. Проверьте результат: в зависимости от настроек итоги по строкам могут считаться с учётом этого отбора. Отбор задаётся на закладке Отбор выделенной группировки и не влияет на строки.

Несколько таблиц в одном отчёте

В структуру можно добавить две таблицы подряд: одну с колонками по месяцам, вторую — по складам. Каждая таблица настраивается отдельно, со своими отборами и выбором полей.

Проверка кросс-таблицы перед сдачей отчёта
Выполнено: 0 / 6

Частые вопросы

Можно ли сделать группировку колонок в СКД без ресурсов?
Шапка выведется, но ячейки будут пустыми: на пересечении строк и колонок компоновка показывает только ресурсы.
Чем таблица отличается от группы выбранных полей?
Таблица создаёт колонки из значений поля, их число зависит от данных. Группа полей объединяет заранее известные поля под общим заголовком.
Как вывести колонки по неделям?
Задайте у поля периода тип дополнения «Неделя» или получите начало недели в запросе функцией НАЧАЛОПЕРИОДА(..., НЕДЕЛЯ).
Почему в колонках нет пустых месяцев?
Компоновка выводит только значения, которые есть в данных. Пустые периоды добавляет настройка «Тип дополнения» у поля группировки.
Можно ли выгрузить кросс-таблицу в Excel с объединённой шапкой?
Да, табличный документ сохраняется в формат xlsx вместе с объединёнными ячейками шапки и оформлением.