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

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

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

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

Шаг 1. Переход к структуре кросс-таблицы

Для начала давайте разберемся с типом отчета. Когда нам требуется вывести периоды в колонках, обычный отчет типа «Список» не подойдет. Нам необходима полноценная кросс-таблица. Давайте настроим структуру нашего отчета:

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

Наша задача — правильно распределить поля по этим зонам. В «Строки» мы добавляем информацию о сотруднике (например, Сотрудник, а также сопутствующие реквизиты: Норма, Затрачено). В «Колонки» мы добавляем поле периода (например, ПериодОтчета).

Шаг 2. Как сделать нечисловое поле (Дату или Строку) ресурсом

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

Чтобы решить эту задачу, нам необходимо искусственно превратить нечисловое поле в ресурс. Выясним, как это сделать правильно:

  1. Перейдем на вкладку «Ресурсы» схемы компоновки данных.
  2. Перетащим наше нечисловое поле (например, ДатаСоздания) в список ресурсов.
  3. В поле «Выражение» мы не можем написать стандартную сумму Сумма(ДатаСоздания), так как сложение дат или строк не имеет математического смысла и вызовет ошибку СУБД. Вместо этого мы должны использовать функции выбора крайних значений: Максимум(ДатаСоздания) или Минимум(ДатаСоздания) Эти функции прекрасно работают как с датами, так и со строковыми значениями или ссылочными типами данных.
  4. В колонке «Рассчитывать по...» мы можем оставить значение пустым (тогда ресурс будет рассчитываться по всем группировкам) или явно указать только те группировки, для которых это поле имеет смысл.

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

Шаг 3. Выравниваем поля строк на одном уровне (убираем «лесенку»)

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

Рассмотрим два эффективных способа решения этой проблемы.

Способ А. Вывод реквизитов в одной группировке (рекомендуемый)

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

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

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

Способ Б. Вариант использования группировки

Если вам все же необходимо иметь полноценные подчиненные группировки в структуре строк, вы можете изменить их поведение:

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

Шаг 4. Устраняем лишнюю пустую колонку в шапке и итогах

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

Причина 1. Автоматический вывод общих итогов по горизонтали

По умолчанию СКД считает, что для любого ресурса нужно вывести общие итоги как по вертикали (снизу), так и по горизонтали (справа). Но какой может быть общий итог (сумма) для даты? Сложение дат не имеет смысла, поэтому СКД выводит пустую колонку «Итого» в самом конце таблицы, которая только портит внешний вид отчета.

Решение:

  1. В настройках отчета перейдем на вкладку «Другие настройки» (на уровне всего отчета или конкретной таблицы).
  2. Найдем параметр «Расположение общих итогов по горизонтали».
  3. Установим его в значение «Нет» или «Не выводить».

Причина 2. Заголовки полей ресурсов в шапке колонок

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

Решение через скрытие заголовков:

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

Это самый простой и быстрый способ сделать так, чтобы название ресурса визуально исчезло из шапки отчета, освободив место.

Продвинутое решение через макет группировки (для идеального результата):

Если вам нужно полностью избавиться от второго яруса шапки, чтобы осталась только одна чистая строка с датами периодов, воспользуемся механизмом макетов:

  1. Перейдем на вкладку «Макеты» схемы компоновки данных.
  2. Нажмем кнопку «Добавить макет группировки».
  3. В открывшемся окне выберем имя группировки наших колонок (например, ПериодОтчета) и укажем тип макета — «Заголовок».
  4. В макете (табличном документе) выделим одну ячейку, настроим ее оформление (границы, шрифт, выравнивание).
  5. В свойствах этой ячейки укажем тип заполнения — «Параметр» и впишем имя параметра: ПериодОтчета.

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

Причина 3. Наличие пустых значений (NULL) во временных периодах

Если в базе данных есть записи, у которых период не заполнен, либо при левом соединении таблиц образовались пустые значения, СКД автоматически выделит для значения NULL отдельную колонку с пустой шапкой в начале или в конце отчета. Для автоматического исключения таких колонок из результирующего отчета можно применить метод скрытия пустых столбцов в СКД.

Решение:

  1. Перейдем на вкладку «Настройки».
  2. Выберем группировку колонок (ПериодОтчета).
  3. Перейдем на локальную вкладку «Отбор» и добавим условие: ПериодОтчета Заполнено.
  4. Чтобы сам этот отбор не выводился огромной надписью над отчетом, зайдем в локальные «Другие настройки» этой группировки и для параметра «Выводить отбор» установим значение «Не выводить».

Итог проделанной работы

Мы полностью настроили сложный кросс-отчет. Давайте резюмируем, какие важные приемы СКД мы сегодня применили совместно:

Эти базовые принципы проектирования кросс-таблиц позволят вам создавать чистые, красивые и профессиональные отчеты в системе 1С:Предприятие 8.

← На главную