Как в СКД вывести количество клиентов по группам и рассчитать их процентное соотношение

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

При разработке аналитических отчетов в системе компоновки данных (СКД) часто возникает задача классификации объектов. Например, нам нужно разбить клиентскую базу на категории (A, B, C, D) и показать, какую долю в количественном выражении занимает каждая группа. Несмотря на кажущуюся простоту, начинающие разработчики часто сталкиваются с тем, что данные в консоли запросов и в итоговом отчете СКД не совпадают. Разберем по шагам, как правильно настроить такой отчет, посчитать уникальных клиентов и вывести их процентное соотношение.

Проблема агрегации в запросе и СКД

Рассмотрим ситуацию: у нас есть временная таблица ВТ_ГОТОВО, в которой уже распределены контрагенты по категориям. Типичная ошибка на первом этапе — использование конструкции Сумма(1) в тексте запроса. Посмотрим на пример кода, который может приводить к некорректным итогам:


ВЫБРАТЬ
    Сумма(1) как Количество,
    ВТ_ГОТОВО.КатегорияABCD КАК Категория
ИЗ
    ВТ_ГОТОВО КАК ВТ_ГОТОВО
СГРУППИРОВАТЬ ПО 
    ВТ_ГОТОВО.КатегорияABCD

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

Корректный подсчет уникальных клиентов

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


ВЫБРАТЬ
    ВТ_ГОТОВО.Контрагент КАК Партнер,
    ВТ_ГОТОВО.КатегорияABCD КАК Категория
ИЗ
    ВТ_ГОТОВО КАК ВТ_ГОТОВО

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

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

Теперь, как бы мы ни группировали отчет, СКД всегда будет считать только уникальных клиентов в каждой категории. Это решение помогло автору темы в сообщении 18, где он заменил простую сумму на КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Контрагент).

Расчет процентного соотношения групп

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

Способ 1: Использование встроенных функций ресурсов

В современных версиях платформы 1С СКД поддерживает специальные функции для работы с процентами прямо в окне ресурсов. Для вывода доли группы от общего итога выполним следующие действия:

  1. Добавим в ресурсы новое поле (можно дважды добавить поле Партнер).
  2. В выражении для второго ресурса укажем: ПроцентВОбщемИтоге(Количество(Различные Партнер)).
  3. Зададим этому полю имя, например ПроцентОтОбщего.

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

Способ 2: Функция ВычислитьВыражение

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

Количество(Различные Партнер) * 100 / ВычислитьВыражение("Количество(Различные Партнер)", "ОбщийИтог")

Здесь параметр "ОбщийИтог" принудительно заставляет СКД взять значение знаменателя из итоговой строки всего отчета. Это гарантирует, что сумма процентов по всем категориям (A, B, C, D) всегда будет равна 100%.

Визуальное оформление результата

Чтобы отчет выглядел профессионально, число 0.15 должно превратиться в 15%. Посмотрим, как настроить форматирование без изменения кода запроса:

  1. На вкладке Наборы данных или в Вычисляемых полях найдем наше поле с процентом.
  2. В колонке Оформление нажмем кнопку выбора.
  3. В параметре Формат зададим строку: ЧЦ=5; ЧДЦ=2; ЧС=0 (это обеспечит 2 знака после запятой).
  4. Для добавления символа процента можно использовать параметр Форматная строка, добавив суффикс %, либо настроить это через условное оформление.

Обработка «пустых» категорий

Часто бизнес-заказчик хочет видеть в отчете все категории, даже если в группе B на данный момент нет ни одного клиента. Если мы просто выберем данные из ВТ_ГОТОВО, категория с нулевым количеством просто исчезнет из отчета. Разберем, как этого избежать.

Создадим внутри запроса статическую таблицу всех возможных категорий и соединим ее с нашими данными:


// Сначала создаем список всех категорий
ВЫБРАТЬ "A" КАК Категория ОБЪЕДИНИТЬ ВЫБРАТЬ "B" ОБЪЕДИНИТЬ ВЫБРАТЬ "C" ОБЪЕДИНИТЬ ВЫБРАТЬ "D"
ПОМЕСТИТЬ ВТ_ВсеКатегории;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТ_ВсеКатегории.Категория,
    ЕСТЬNULL(Данные.Партнер, "Нет клиентов") КАК Партнер
ИЗ
    ВТ_ВсеКатегории КАК ВТ_ВсеКатегории
ЛЕВОЕ СОЕДИНЕНИЕ 
    ВТ_ГОТОВО КАК Данные ПО ВТ_ВсеКатегории.Категория = Данные.КатегорияABCD

При такой структуре запроса в отчет попадут все буквы алфавита ABC-анализа. В ресурсах СКД при использовании Количество(Различные Партнер) для пустых категорий автоматически отобразится 0, что позволит корректно рассчитать процент (0%).

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

← На главную