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