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