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

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

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

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

Почему появляются лишние значения на детальных уровнях?

Проанализируем ситуацию. Когда мы определяем поле Количество(Различные ЗаказПокупателя) в качестве ресурса, СКД по умолчанию рассчитывает его для всех доступных группировок отчета. На уровне группировки Менеджер система считает все уникальные документы, закрепленные за этим сотрудником. Это корректное и ожидаемое поведение.

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

Ниже мы подробно рассмотрим четыре способа решения этой задачи — от простых настроек оформления до продвинутых функций вычисления выражений в СКД.

Способ 1. Отключение ресурса в выбранных полях группировки (самый чистый метод)

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

Разберем по шагам, как это сделать:

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

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

Способ 2. Настройка вычисления ресурса по конкретным группировкам

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

Рассмотрим порядок действий:

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

В результате СКД вернет значение NULL для всех неуказанных группировок (включая номенклатуру). По умолчанию пустые значения в отчетах 1С не отображаются, что мгновенно решит проблему с лишними единицами.

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

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

Настроим оформление по шагам:

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

Если структура отчета сложная (содержит много уровней вложенности), ручная настройка для каждой группировки может занять много времени. Для таких ситуаций можно использовать универсальное системное условие на уровне всего отчета:

Благодаря этому правилу СКД автоматически скроет детальные значения на всех вложенных уровнях иерархии, сохранив их вывод только для верхнего уровня менеджеров.

Способ 4. Использование функции ВычислитьВыражениеСГруппировкойМассив для точных итогов

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

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

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


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

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

  1. Функция ВычислитьВыражениеСГруппировкойМассив собирает массив значений количества уникальных сделок, предварительно сгруппированных по каждому конкретному Менеджеру.
  2. Внешняя функция Сумма складывает полученные элементы массива.

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

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

← На главную