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

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

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

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

Метод 1. Настройка состава полей для конкретной группировки (Отключение автополя)

Это самый простой и естественный способ, не требующий написания кода или сложных формул. По умолчанию все группировки отчета используют глобальные настройки выбранных полей (так называемое «Автополе»). Мы можем переопределить это поведение для конкретной группировки.

Выполним настройку по шагам:

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

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

Метод 2. Ограничение расчета ресурса на вкладке «Ресурсы» («Рассчитывать по...»)

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

Рассмотрим этот процесс подробнее:

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

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

Метод 3. Использование Условного оформления (Установка пустого текста)

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

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

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

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

Метод 4. Метод «Пустого вычисляемого поля» для детальных записей

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

Проанализируем шаги реализации этого метода:

  1. Перейдем на вкладку Вычисляемые поля в СКД.
  2. Создадим новое вычисляемое поле. Зададим ему путь к данным, например, КоличествоДляИтогов. Поле Выражение оставим абсолютно пустым.
  3. Перейдем на вкладку Ресурсы.
  4. Добавим наше новое вычисляемое поле КоличествоДляИтогов в список ресурсов. В колонке выражения для него напишем формулу расчета: Сумма(Количество).
  5. В настройках отчета в выбранных полях будем использовать именно созданное поле КоличествоДляИтогов вместо стандартного поля Количество.

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

Метод 5. Расчет правильного общего итога через массив группировок

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

Посмотрим на пример формулы:


Сумма(ВычислитьВыражениеСГруппировкойМассив("Сумма(Количество)", "Номенклатура"))

Разберем, как работает эта конструкция:

Метод 6. Вывод итогов конкретной группировки в отдельную колонку

Иногда пользователям требуется видеть значение итога по определенной группировке (например, по Складу или Магазину) прямо в строках детальных записей или в соседних колонках других группировок.

Для решения этой задачи в выражении ресурса мы можем задействовать функцию ВычислитьВыражение с явным указанием контекста группировки:

ВычислитьВыражение("Сумма(ОбъемПродаж)", "Магазин")

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

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

← На главную