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

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

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

Метод 1: Использование макетов ресурсов

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

  1. Откройте схему компоновки данных и перейдите на вкладку Макеты.
  2. Выберите пункт Добавить макет ресурса.
  3. В поле Группировка укажите ту группировку, в которой вы хотите изменить состав ресурсов (например, Номенклатура).
  4. В поле Параметр выберите тот ресурс, который нужно скрыть.
  5. В табличном документе (который открывается при создании макета) оставьте область пустой или закрасьте её, если это необходимо. Однако наиболее эффективный путь — создать макет, который принудительно ограничивает вывод нужного поля только там, где это разрешено настройками.

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

Метод 2: Разделение через вычисляемые поля

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

Рассмотрим алгоритм действий:

  1. Создайте вычисляемое поле, например, ВывестиРесурс, и задайте для него начальное значение.
  2. На вкладке Ресурсы добавьте два выражения для одного и того же поля, но с разными условиями или привязками к группировкам.
  3. Используйте функции типа Максимум() или Сумма() в сочетании с условиями, чтобы СКД понимала, какой именно показатель выводить в зависимости от контекста текущей группировки.

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


// Пример выражения для ресурса с условием
Выбор 
    Когда Группировка = "Контрагент" Тогда Сумма(Количество)
    Когда Группировка = "Номенклатура" Тогда 0
    Иначе Сумма(Количество)
Конец

Метод 3: Использование условного оформления

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

Для настройки условного оформления:

Почему программная очистка — это крайний метод?

В начале пути многие программисты пытаются использовать ПроцессорКомпоновкиДанных для удаления строк при выводе. Однако, проанализировав ситуацию, мы понимаем, что:

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

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

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

← На главную