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

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

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

Способ 1. Использование иерархических группировок с отключением итогов

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

Рассмотрим по шагам:

  1. В настройках варианта отчета добавим группировку Номенклатура.
  2. Внутри неё добавим подчиненную группировку Лот.
  3. Для родительской группировки Номенклатура на вкладке «Дополнительные настройки» установим параметр «Расположение итогов» в значение «Нет» (или «Начало», в зависимости от требований к оформлению).
  4. Выберем ресурс Количество для вывода только на уровне номенклатуры.

Этот метод позволяет «схлопнуть» данные на верхнем уровне, однако он не всегда решает задачу «объединения ячеек» по вертикали в том виде, в котором это делает Excel. Для достижения идеального визуального соответствия нам потребуются более тонкие инструменты.

Способ 2. Использование функции ВычислитьВыражение

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

Чтобы получить общую сумму по всей номенклатуре внутри строки с конкретным лотом, мы можем использовать специальный синтаксис в выражении поля ресурса или в вычисляемом поле. Проанализируем структуру функции:

ВычислитьВыражение("Сумма(Количество)", "Номенклатура", "Общая")

Разберем параметры этой функции:

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

Способ 3. Визуальное объединение через Условное оформление

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

Алгоритм настройки:

  1. Добавим в настройки отчета «Условное оформление».
  2. Создадим новое правило оформления. В качестве оформляемого поля выберем наш ресурс Количество.
  3. В условии укажем системное поле НомерВГруппе. Условие должно выглядеть так: НомерВГруппе > 1.
  4. В параметрах оформления установим «Текст» как пустую строку или «Цвет текста» равным цвету фона.

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

Способ 4. Работа с макетами оформления для полного контроля

Если заказчик настаивает на жестком соответствии макету (например, реальное объединение ячеек Merge в табличном документе), нам придется использовать «Макеты» в СКД. Рассмотрим, как это работает.

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

Важные моменты при работе с макетами:

Способ 5. Настройка ролей полей и игнорирование значений группировок

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

Вкладка «Ресурсы» также позволяет задать разные выражения для разных уровней группировки. Проанализируем следующий пример настройки:

Для поля Количество в колонке «Рассчитывать по...» укажем:

  1. Для группировки Номенклатура выражение: Сумма(Количество).
  2. Для группировки Лот выражение: 0 (или вообще оставим пустым).

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

Итоги и рекомендации

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

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

← На главную