При построении аналитических отчетов в системе компоновки данных (СКД) часто возникает задача визуализации данных в виде диаграммы накопления (стека). Типичный запрос пользователя: «Я хочу, чтобы в каждом столбце (точке) сегменты (серии) были отсортированы сверху вниз от большего значения к меньшему». Однако при попытке стандартной настройки сортировки разработчики часто сталкиваются с тем, что порядок серий либо не меняется, либо меняется хаотично. В рамках данной статьи мы разберем, как работает механизм диаграмм, какие существуют платформенные ограничения и как добиться нужного результата, в том числе программными методами.
Проанализируем сначала базовый принцип работы диаграмм в 1С. Важно понимать, что в СКД для диаграмм накопления существует жесткое логическое ограничение: порядок серий должен быть идентичен для всех точек диаграммы. Это обусловлено необходимостью построения единой легенды. Мы не можем сделать так, чтобы в одном столбце «Номенклатура А» находилась в самом низу, а в соседнем — в самом верху, если эти столбцы относятся к одной диаграмме с общей легендой.
Следовательно, когда мы говорим о «сортировке по ресурсу» в диаграмме накопления, мы имеем в виду глобальную сортировку серий на основе их агрегированных значений по всей оси точек. Рассмотрим подробнее, как настроить этот механизм правильно.
Выясним причину, по которой обычная сортировка в общих настройках отчета часто не дает эффекта. Для корректного упорядочивания сегментов внутри столбцов необходимо устанавливать настройки непосредственно в группировке, отвечающей за серии.
Количество или Сумма), и установим направление — «По убыванию».При такой настройке система просуммирует значения выбранного ресурса для каждой серии по всем точкам (месяцам, складам и т.д.) и выстроит их в едином порядке. Самые «тяжелые» серии окажутся в основании столбцов, а самые мелкие — ближе к вершине. Это обеспечит визуальную стройность диаграммы, хотя в отдельных точках порядок может казаться неоптимальным из-за специфики данных конкретного периода.
Если стандартная сумма по ресурсу не подходит для определения «важности» серии, проанализируем ситуацию с использованием технических полей. Мы можем создать вычисляемое поле, которое будет рассчитывать вес каждой серии по специальной формуле. Рассмотрим пример использования функции ВЫЧИСЛИТЬВЫРАЖЕНИЕ в настройках поля.
В выражении вычисляемого поля мы можем прописать логику, которая определит приоритет вывода. Например, нам нужно сортировать серии не по общей сумме, а по максимальному значению, которое серия достигала в любом из периодов. В этом случае в схеме компоновки данных добавим вычисляемое поле ВесСерии и настроим сортировку группировки серий именно по этому полю.
Иногда возникают задачи, когда определенные серии нужны в расчетах (например, для вычисления процентов или средних), но их не нужно отображать на самой диаграмме. Рассмотрим, как программно управлять составом серий и их оформлением.
Для того чтобы скрыть серию или изменить ее визуальное представление, мы можем обратиться к результату компоновки. Посмотрим на пример кода, который позволяет перебрать сформированные серии диаграммы и установить им прозрачный цвет или скрыть их:
// Пример обработки диаграммы после вывода
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
ПроцессорВывода.УстановитьОбъект(Диаграмма);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);
// Пройдемся по сериям для тонкой настройки
Для Каждого ТекущаяСерия Из Диаграмма.Серии Цикл
Если ТекущаяСерия.Значение = Справочники.Номенклатура.НайтиПоНаименованию("Служебная") Тогда
// Делаем серию невидимой, чтобы она не занимала место
ТекущаяСерия.Видимость = Ложь;
// Или отключаем отображение в легенде
ТекущаяСерия.ОтображатьВЛегенде = Ложь;
КонецЕсли;
КонецЦикла;
Альтернативным и более простым способом является использование Условного оформления в настройках СКД. Разберем по шагам:
Это позволит «спрятать» лишние сегменты, сохранив при этом целостность данных для расчетов других показателей внутри компоновки.
Важно помнить, что в старых версиях платформы 1С:Предприятие (до версии 8.3.14) существовала особенность: сортировка по ресурсу в диаграммах могла игнорироваться, если в точках использовались поля типа Дата с включенной настройкой «Дополнение периодов». Если вы столкнулись с тем, что настройки верны, но результат не меняется, проверьте версию платформы и попробуйте временно отключить дополнение периодов для проверки гипотезы.
Подводя итог, отметим: динамическая сортировка сегментов «внутри каждого столбца отдельно» противоречит логике построения диаграмм с единой легендой. Правильный подход заключается в грамотной настройке глобальной сортировки в группировке серий и использовании условного оформления для визуальной корректировки результата.