Как настроить сортировку серий по значению ресурса в диаграмме накопления СКД

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

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

Разбор ограничений механизма диаграмм накопления

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

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

Настройка глобальной сортировки серий в СКД

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

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

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

Использование вычисляемых полей для сложной логики весов

Если стандартная сумма по ресурсу не подходит для определения «важности» серии, проанализируем ситуацию с использованием технических полей. Мы можем создать вычисляемое поле, которое будет рассчитывать вес каждой серии по специальной формуле. Рассмотрим пример использования функции ВЫЧИСЛИТЬВЫРАЖЕНИЕ в настройках поля.

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

Программное управление сериями и их видимостью

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

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


// Пример обработки диаграммы после вывода
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
ПроцессорВывода.УстановитьОбъект(Диаграмма);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);

// Пройдемся по сериям для тонкой настройки
Для Каждого ТекущаяСерия Из Диаграмма.Серии Цикл
    Если ТекущаяСерия.Значение = Справочники.Номенклатура.НайтиПоНаименованию("Служебная") Тогда
        // Делаем серию невидимой, чтобы она не занимала место
        ТекущаяСерия.Видимость = Ложь;
        // Или отключаем отображение в легенде
        ТекущаяСерия.ОтображатьВЛегенде = Ложь;
    КонецЕсли;
КонецЦикла;

Альтернативным и более простым способом является использование Условного оформления в настройках СКД. Разберем по шагам:

  1. В настройках отчета перейдем на вкладку «Условное оформление».
  2. Добавим новое условие, где укажем поле серии и значение, которое хотим скрыть.
  3. В параметрах оформления выберем пункт «Цвет в диаграмме» и установим его равным прозрачному цвету или цвету фона диаграммы.

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

Влияние версии платформы

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

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

← На главную