При разработке отчетов в Системе компоновки данных (СКД) программисты часто сталкиваются с необходимостью создать сложную шапку таблицы (кросс-таблицы). Одной из типичных задач является вывод периода (например, месяца) в качестве главного заголовка, под которым располагаются другие аналитические разрезы, такие как виды услуг или договоров. Однако при попытке реализовать такую структуру стандартными средствами часто возникает критическая ошибка: «совместная группировка по периодам с другими выражениями запрещена». Разберем подробно, почему это происходит и какими способами можно добиться нужного визуального результата.
Прежде чем переходить к решению, выясним причину поведения системы. В 1С:Предприятие для полей типа «Дата», полученных из виртуальных таблиц оборотов регистров накопления или сведений, автоматически назначается Роль с типом Период. Система компоновки данных жестко контролирует иерархию таких периодов (ПериодСекунда, ПериодДень, ПериодМесяц и т.д.).
Когда мы пытаемся добавить в одну группировку колонку с ролью периода и обычное справочное поле (например, ВидУслуги), СКД блокирует это действие. Система считает, что периоды должны следовать строгому порядку и не могут «смешиваться» в одной логической записи с другими измерениями без четкой иерархии.
Рассмотрим самый простой и эффективный метод обхода данной ошибки. Если нам не требуется стандартное поведение периодов (например, автоматическое дополнение периодов), мы можем «обмануть» систему, лишив поле даты его специального статуса.
Месяц или Период).После этого СКД будет воспринимать данную дату как обычное значение, которое можно свободно группировать с любыми другими полями. Проанализируем ситуацию: теперь при настройке колонок таблицы мы сможем добавить Период и ВидУслуги в одну группировку или сделать их вложенными друг в друга без конфликтов.
Для того чтобы получить вид, где период находится «сверху», а виды услуг «снизу», необходимо правильно настроить структуру на закладке Настройки. Рассмотрим пошагово, как организовать вложенность группировок колонок.
Период. В выбранных полях этой группировки оставим только Период.ВидУслуги.Важный момент: если мы используем Автополе в выбранных полях, система может дублировать информацию. Разберем ситуацию: чтобы шапка выглядела корректно, рекомендуется на уровне верхней группировки (периода) в «Выбранных полях» оставить только сам период, а на уровне вложенной группировки — только ВидУслуги и ресурсы (суммы).
Зачастую пользователю недостаточно видеть дату в формате «01.01.2024 00:00:00». Нам нужно вывести название месяца. Посмотрим, как это сделать через Вычисляемые поля, чтобы избежать проблем с группировками.
Перейдем на закладку «Вычисляемые поля» и добавим новое поле, например, МесяцПредставление. В выражении напишем следующий код:
Формат(Период, "ДФ='ММММ гггг'")
Теперь в настройках группировки колонок будем использовать именно это поле. Поскольку оно является строковым представлением даты, СКД вообще не будет применять к нему правила для периодов, что полностью исключает ошибку совместной группировки. Проанализируем преимущество: мы получаем полный контроль над заголовком и при этом сохраняем сортировку (если в поле «Выражение упорядочивания» укажем исходную дату Период).
Если нам нужно визуально объединить несколько ресурсов под одним заголовком периода, но при этом оставить их на одном уровне иерархии, мы можем воспользоваться механизмом папок в выбранных полях.
Этот метод позволяет «нарисовать» сложную многоуровневую шапку без изменения логической структуры группировок самого отчета. Рассмотрим пример: внутри одной колонки периода мы можем вывести «Количество» и «Сумму» друг под другом или рядом, объединив их общим заголовком периода сверху.
Часто ошибка группировки возникает из-за того, что в настройках стоит Автополе. Оно пытается вывести все доступные поля во всех группировках сразу. Выясним, как это исправить:
На уровне конкретной группировки (например, «Колонки») зайдем в «Выбранные поля», снимем флажок с «Использовать родительские настройки» и удалим Автополе. После этого вручную добавим только те поля, которые действительно должны быть в этой колонке. Это позволит избежать избыточности данных и конфликтов типов полей.
Чтобы отчет выглядел профессионально, проанализируем настройки на закладке Другие настройки:
В некоторых случаях, когда стандартных настроек компоновки недостаточно (например, требуется объединение ячеек по сложным правилам), можно прибегнуть к созданию собственного Макета оформления. В макете на закладке «Макеты» мы можем вручную нарисовать область заголовка, объединить нужные ячейки и назначить их параметрам макета соответствующие поля СКД. Это наиболее трудозатратный, но максимально гибкий метод получения идеального визуального результата.