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