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