Как в СКД скрыть итоги по определенным ресурсам, оставив их в детальных записях?

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

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

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

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

Способ 1. Настройка колонки «Рассчитывать по...» на вкладке «Ресурсы» (Рекомендуемый)

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

Выполним следующие шаги для настройки:

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

Проанализируем результат этой настройки. Теперь СКД будет выводить детальные данные по нашему ресурсу на всех уровнях указанных группировок, однако в строке «Общие итоги» ячейка для этого ресурса останется абсолютно пустой. Система даже не станет тратить вычислительные ресурсы на расчет этого показателя для итоговой строки.

Способ 2. Условное оформление с ограничением области применения

Бывают ситуации, когда отчет уже находится на поддержке или у нас нет возможности менять саму схему компоновки в конфигураторе. Либо эту настройку хочет сделать продвинутый пользователь непосредственно в режиме «1С:Предприятие». В таких случаях идеальным решением станет использование механизма условного оформления с ограничением области его действия.

Разберем этот быстрый способ по шагам:

  1. Перейдем в настройки отчета (в конфигураторе на вкладке Настройки или в режиме предприятия через команду Еще — Изменить вариант...).
  2. Перейдем на вкладку Условное оформление и добавим новый элемент оформления.
  3. На вкладке Оформление найдем свойство Текст, установим напротив него флаг и запишем туда пустую строку (просто откроем и закроем кавычки) или введем один символ пробела.
  4. На вкладке Оформляемые поля выберем именно то поле ресурса, итог по которому мы хотим визуально скрыть (например, РеализацияРуб).
  5. Вкладку Условие мы оставляем абсолютно пустой, так как нам нужно применить это оформление ко всем строкам итогов без дополнительных условий.
  6. Теперь выполним ключевое действие. В нижней части окна настройки условного оформления найдем раздел Область применения. По умолчанию там установлены все флажки.
  7. Снимем флажки со всех пунктов (В группировках, В детальных записях, В заголовках полей) и оставим флажок только на пункте В общих итогах (а также при необходимости на пункте В итогах, если требуется убрать и промежуточные группировочные итоги).

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

Способ 3. Ограничение вывода через детальные записи в группировке колонок

Если ваш отчет представляет собой кросс-таблицу (объект типа Таблица в структуре настроек СКД), где группировки выводятся и по строкам, и по колонкам, то стандартное отключение итогов может поломать структуру вывода колонок. В этом случае мы можем детально настроить состав ресурсов для конкретных ветвей нашей таблицы.

Давайте попробуем реализовать этот метод:

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

Этот способ позволяет получить стопроцентный контроль над выводом колонок в сложных кросс-таблицах, четко разделяя детальные данные и итоговые столбцы.

Способ 4. Условие в выражении расчета ресурса

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

Нам поможет использование системного поля СистемныеПоля.Уровень. На уровне общих итогов значение этого поля, как правило, равно нулю. Напишем выражение, которое будет проверять уровень текущей группировки:


Выбор 
    Когда СистемныеПоля.Уровень = 0 Тогда 
        Null 
    Иначе 
        Сумма(РеализацияРуб) 
Конец

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

Стоит заметить, что логика работы с уровнями группировок может незначительно меняться в зависимости от сложности иерархии вашего отчета, поэтому перед запуском в рабочую базу обязательно протестируйте этот метод на тестовом наборе данных.

Почему не стоит сразу использовать индивидуальные макеты оформления?

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

Подводя итог, можно с уверенностью сказать, что платформа 1С предоставляет разработчику богатый арсенал штатных средств для управления выводом итогов. Использование способов с ограничением расчета ресурса по группировкам или точечная настройка условного оформления позволяют решить задачу быстро, красиво и без написания лишнего кода. Желаем вам успешной разработки и красивых отчетов!

← На главную