Как добавить дополнительную строку под итогом таблицы в СКД

Программист 1С v8.3 (Управляемые формы) Управленческий учет
← На главную

При разработке сложных управленческих отчетов, таких как «Доходы и расходы», стандартных итогов Системы компоновки данных (СКД) часто оказывается недостаточно. Возникают задачи, когда под основной строкой Итого необходимо вывести еще одну или несколько строк с дополнительными расчетами, например: «Итог без учета переоценки», «Чистая прибыль за вычетом налогов» или специфические коэффициенты рентабельности. Рассмотрим подробно несколько профессиональных способов реализации этой задачи, начиная от простых настроек макетов и заканчивая программным выводом.

Способ 1. Использование макетов группировок (Общий итог)

Это наиболее распространенный и «чистый» способ с точки зрения архитектуры СКД. Он позволяет переопределить визуальное представление итоговой строки, не вмешиваясь в логику компоновки данных. Разберем этот процесс по шагам:

  1. Перейдем на закладку Макеты в схеме компоновки данных.
  2. Нажмем кнопку «Добавить макет группировки». В появившемся окне выберем тип макета. Нам потребуется Общий итог подвал или Общий итог заголовок (в зависимости от того, где именно должна располагаться строка).
  3. В табличном документе макета нарисуем нужную нам область. Мы можем добавить две строки вместо одной. Первая строка будет имитировать стандартный итог, а вторая — наш дополнительный расчет.
  4. Для ячеек, где должны выводиться суммы, установим тип Параметр. В качестве параметров укажем имена наших ресурсов, например, СуммаОборот.
  5. Для дополнительной строки создадим отдельный параметр, например, ДопИтог.

Чтобы рассчитать значение для параметра ДопИтог, мы можем использовать выражения в настройках макета. Если формула сложная, рекомендуется заранее подготовить расчетное поле в наборе данных или использовать вычисляемое поле.

Способ 2. Создание макета подвала таблицы

Если нам нужно добавить строку в самый низ всей таблицы, независимо от иерархии группировок, целесообразно использовать макет с типом Подвал таблицы. Проанализируем этот метод:

Макет подвала таблицы позволяет рисовать произвольную область, которая будет выведена один раз после завершения вывода всей основной части отчета. В отличие от макета группировки, подвал таблицы не привязан к конкретному уровню данных, что дает больше свободы в оформлении (объединение ячеек, использование специфических шрифтов и рамок).

Важно помнить: чтобы значения в таком подвале были актуальными, необходимо в параметрах макета прописать выражения, обращающиеся к общим итогам ресурсов. Например, если нам нужно вывести разницу между двумя ресурсами, в поле выражения макета можно написать СуммаДоходы - СуммаРасходы.

Способ 3. Метод пустой группировки

Рассмотрим «хитрый» прием, который позволяет избежать сложного рисования макетов, если требуется просто добавить еще одну строку с данными под итогами. Этот метод заключается в добавлении в структуру отчета фиктивной группировки.

  1. В настройках отчета (вкладка Настройки -> Структура) в самый низ, сразу после основной таблицы или группировки, добавим новую группировку без указания поля (детальные записи).
  2. Для этой группировки на вкладке Другие настройки установим параметр Выводить заголовок в значение «Не выводить», а также отключим вывод всех ненужных полей через Выбранные поля.
  3. Оставим в выбранных полях только те ресурсы или вычисляемые поля, которые должны сформировать нашу дополнительную строку.
  4. С помощью Условного оформления зададим для этой группировки стиль, идентичный стилю итогов (шрифт, цвет фона), чтобы визуально строка казалась частью общего подвала.

Способ 4. Вычисляемые поля и функция ВычислитьВыражение()

Иногда задача заключается не просто в добавлении строки, а в сложном расчете, который зависит от итогов других уровней. В СКД для этих целей предусмотрена мощная функция ВычислитьВыражение(). Рассмотрим пример её использования в вычисляемых полях:

Допустим, нам нужно поле, которое выводит процент прибыли относительно выручки только в строке общего итога. Мы создаем вычисляемое поле ПроцентРентабельности и в выражении ресурса для этого поля пишем следующее:


ВычислитьВыражение("Сумма(Прибыль) / Сумма(Выручка) * 100", "", "ОбщийИтог")

Здесь третий параметр "ОбщийИтог" указывает системе, что расчет должен производиться в контексте всей таблицы. Сочетая такие поля с макетами, можно выводить любые производные данные в дополнительных строках.

Способ 5. Программная доработка в модуле отчета

Выясним, как поступить, если типовых настроек компоновки не хватает для реализации сложной логики. В этом случае мы прибегаем к перехвату события ПриКомпоновкеРезультата в модуле отчета. Проанализируем примерный алгоритм действий:

  1. Устанавливаем свойство СтандартнаяОбработка = Ложь.
  2. Выполняем компоновку программно, используя объекты КомпоновщикМакетаКомпоновкиДанных и ПроцессорКомпоновкиДанных.
  3. Выводим результат в ТабличныйДокумент с помощью ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений или напрямую в документ.
  4. После того как метод Вывести() отработал, мы программно находим нужную область в полученном табличном документе (например, через поиск текста «Итого») и добавляем строку снизу.

Пример программного кода для добавления строки в конец документа:


// Получаем область из макета (заранее созданного в объекте Отчет)
ОбластьДопИтог = ПолучитьМакет("МакетДопСтроки").ПолучитьОбласть("Строка");
// Заполняем параметры
ОбластьДопИтог.Параметры.Значение = МойРасчетныйКоэффициент;
// Присоединяем к результату
Результат.Вывести(ОбластьДопИтог);

Способ 6. Использование объединения в запросе

Посмотрим на ситуацию со стороны данных. Мы можем подготовить «почву» для дополнительной строки еще на этапе выполнения запроса. Для этого используется конструкция ОБЪЕДИНИТЬ ВСЕ.

В первом запросе мы выбираем основные данные. Во втором запросе мы выбираем те же поля, но вместо детальных данных подставляем агрегаты или специфические расчеты, помечая эти записи специальным флагом (например, поле ТипСтроки = 2). В настройках СКД мы группируем данные так, чтобы записи с ТипСтроки = 2 выводились в самом конце. Далее, используя условное оформление по фильтру ТипСтроки = 2, мы красим эту строку в нужный цвет, имитируя итог.

Важный нюанс при работе с кросс-таблицами: Если ваш отчет является таблицей с группировкой по колонкам, использование фиксированных макетов может быть затруднено, так как количество колонок динамически меняется. В этом случае рекомендуется использовать макеты типа Заголовок группировки или Подвал группировки для горизонтальных группировок, чтобы дополнительные итоги корректно растягивались вместе с колонками.

Подводя итог, выбор метода зависит от сложности вашей формулы и требований к оформлению. Для простых случаев идеально подходит Макет группировки, а для сложных нестандартных расчетов лучше использовать Программный вывод или Вычисляемые поля с функциями агрегации по общему итогу.

← На главную