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