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