Как отключить вывод конкретного итога по полю в СКД?

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

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

Способ 1. Ограничение группировок на вкладке «Ресурсы»

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

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

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

Способ 2. Выражения с условием ВЫБОР КОГДА на вкладке «Ресурсы»

Проанализируем ситуацию, когда итог необходимо скрыть только при определенном значении группировки или при наличии нескольких разнородных аналитик (например, разных валют). Для этого в поле Выражение ресурса напишем конструкцию с оператором ВЫБОР.

Посмотрим на пример формулы, которая отключает расчет итога для определенного значения аналитики:

Сумма(ВЫБОР КОГДА Подразделение.Код = "100" ТОГДА NULL ИНАЧЕ СуммаКОплате КОНЕЦ)

Важный момент: если в ветке ТОГДА указать 0, платформа выведет число ноль. Чтобы ячейка оставалась полностью пустой, в выражении ресурса следует возвращать значение NULL.

Если требуется автоматически отключать итог при суммировании разных валют или единиц измерения, применим функцию проверки уникальности:


ВЫБОР КОГДА Количество(Различные Валюта) > 1 ТОГДА NULL ИНАЧЕ Сумма(СуммаВал) КОНЕЦ

В этом случае, пока в группировке присутствует одна валюта, сумма будет подсчитана, а на уровне общего итога с разными валютами ячейка останется пустой.

Способ 3. Пакетное скрытие через условное оформление и системные поля

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

  1. Перейдем на вкладку Настройки и откроем раздел Условное оформление.
  2. Добавим новый элемент оформления. В секции Оформляемые поля выделим все ресурсы, итоги по которым требуется скрыть.
  3. В секции Оформление установим флаг для параметра Текст со значением пустой строки "" (либо настроим параметр Формат с подавлением нулей ЧН=).
  4. В секции Условие настроим отбор по системным полям компоновки данных:
    1. Используем поле СистемныеПоля.ТипЗаписи (значение ИтогПоГруппировке или ОбщийИтог), чтобы оформить только строки итогов.
    2. Используем поле СистемныеПоля.УровеньВГруппировке или СистемныеПоля.Уровень, если скрыть значения нужно только на определенной глубине иерархического дерева.
    3. Или зададим условие на конкретное значение группировочного поля (например, Организация Равно Значение).

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

Способ 4. Переопределение состава выбранных полей в группировках

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

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

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

Если отчет формируется программно и требуется полностью очистить конкретные ячейки перед выводом пользователю, используем событие ПриКомпоновкеРезультата в модуле объекта отчета.

Посмотрим на пример обхода результирующего табличного документа:


Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
    
    СтандартнаяОбработка = Ложь;
    
    СкомпоноватьРезультат(ДокументРезультат, ДанныеРасшифровки);
    
    Для НомерСтроки = 1 По ДокументРезультат.ВысотаТаблицы Цикл
        Если ДокументРезультат.Область(НомерСтроки, 1).Текст = "Группа1" Тогда
            Для НомерКолонки = 2 По ДокументРезультат.ШиринаТаблицы Цикл
                ДокументРезультат.Область(НомерСтроки, НомерКолонки).Текст = "";
            КонецЦикла;
        КонецЕсли;
    КонецЦикла;

КонецПроцедуры

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

← На главную