При разработке отчетов в системе компоновки данных (СКД) часто возникает задача визуального сравнения показателей за разные интервалы времени. Например, руководителю может потребоваться отчет по продажам или остаткам, где в одной строке отображаются данные за «Текущий месяц» и «Прошлый месяц». В этой статье мы подробно разберем несколько профессиональных способов реализации такой задачи, начиная от простых манипуляций в запросе и заканчивая гибкими настройками самой системы компоновки.
Это один из самых прямолинейных методов, который предложили участники форума. Его суть заключается в том, чтобы подготовить данные еще на уровне SQL-запроса. Мы выбираем данные дважды: первый раз за первый период, второй раз — за второй. Чтобы СКД могла их разделить, мы добавляем искусственное поле-маркер.
Рассмотрим пример запроса для регистра бухгалтерии:
ВЫБРАТЬ
"Период 1" КАК НазваниеПериода,
ХозрасчетныйОбороты.Счет КАК Счет,
ХозрасчетныйОбороты.СуммаОборотДт КАК Сумма
ИЗ
РегистрБухгалтерии.Хозрасчетный.Обороты(&Начало1, &Конец1, , , , , , ) КАК ХозрасчетныйОбороты
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
"Период 2",
ХозрасчетныйОбороты.Счет,
ХозрасчетныйОбороты.СуммаОборотДт
ИЗ
РегистрБухгалтерии.Хозрасчетный.Обороты(&Начало2, &Конец2, , , , , , ) КАК ХозрасчетныйОбороты
Разберем, что мы сделали. Мы создали поле НазваниеПериода, которое принимает строковое значение. Теперь в настройках СКД на вкладке «Настройки» нам достаточно добавить таблицу, где в Строки мы выберем Счет, а в Колонки — наше поле НазваниеПериода. Система автоматически создаст две колонки («Период 1» и «Период 2») и распределит суммы по ним.
Если данные в вашем запросе уже содержат поле Период (например, с периодичностью «Месяц»), вам не обязательно использовать объединение. Мы можем воспользоваться мощью встроенных инструментов группировки.
Выполним следующие шаги:
Контрагент или Номенклатура).Период.Чтобы колонки выглядели красиво, в поле Период можно настроить формат (например, «ДФ=MMMM yyyy»), тогда заголовки колонок будут содержать названия месяцев. Этот способ идеален, если периодов может быть больше двух (динамическое количество колонок).
Бывают ситуации, когда нам нужно вывести две совершенно разные группировки рядом друг с другом, и они не связаны единым полем периода. В этом случае проанализируем настройки расположения группировок.
Рассмотрим алгоритм настройки:
Важный момент: При таком подходе система выведет первую группу данных, а сразу справа от неё — вторую. Это позволяет визуально «склеить» две разные части отчета в одну строку.
Для продвинутых пользователей СКД существует метод получения данных за прошлый период с помощью языка выражений СКД. Это позволяет не дублировать данные в запросе и не использовать таблицы.
Выясним, как работает функция ВычислитьВыражение. Мы можем создать вычисляемое поле СуммаПрошлыйПериод с выражением:
ВычислитьВыражение("Сумма(СуммаОборот)", "Период", , "Предыдущая", "Предыдущая")
Это выражение говорит системе: «Возьми сумму из предыдущей записи группировки по периоду». Таким образом, находясь в колонке текущего месяца, мы можем в соседнем поле вывести значение предыдущего месяца. Это крайне удобно для расчета отклонений и процентов роста в одной строке.
Рассмотрим еще одну ситуацию: данные за разные периоды хранятся в разных регистрах или требуют разных условий отбора. В этом случае создадим два набора данных: НаборДанныхТекущий и НаборДанныхПрошлый.
Разберем по шагам:
&Начало1 и &Начало2).Номенклатуре.НаборДанныхТекущий как источник связи, а НаборДанныхПрошлый как приемник.В настройках отчета мы просто выбираем поля из обоих наборов. СКД сама выполнит соединение (аналог Left Join) и выведет данные в одну строку. Это самый надежный способ, если логика получения данных за разные периоды сильно отличается.
При выводе данных в две колонки за разные периоды легко запутаться в цифрах. Чтобы сделать отчет читаемым, рекомендуем использовать Условное оформление:
ЦветФона = Web.LightGray).Подводя итог, выбор метода зависит от сложности вашего запроса. Если вам нужно простое сравнение — используйте Объединение или Горизонтальные группировки. Если же вы строите сложный аналитический отчет с динамическим выбором периодов — лучше всего подойдет Кросс-таблица или работа с Вычисляемыми полями.