При построении отчетов в системе компоновки данных (СКД) разработчики часто сталкиваются с необходимостью вывести на одну диаграмму показатели с абсолютно разными порядками величин. Типичный пример: Сумма продаж (исчисляемая миллионами) и Рентабельность (исчисляемая в процентах от 0 до 100). Если вывести их на одну шкалу, линия рентабельности превратится в плоскую черту, лежащую на нулевой отметке, так как ее значения ничтожно малы по сравнению с суммами продаж.
Для решения этой проблемы необходимо использовать механизм дополнительной шкалы значений. Это позволяет отображать одну группу данных по левой вертикальной оси, а другую — по правой. Рассмотрим подробно несколько способов реализации этой задачи: от стандартных настроек СКД до программного управления объектами платформы.
Это наиболее предпочтительный и современный метод, который не требует написания программного кода. Он появился в платформе 1С:Предприятие 8.3 (начиная с версий 8.3.14/15) и позволяет гибко управлять визуализацией ресурсов.
Проанализируем шаги настройки в конструкторе схемы компоновки данных:
Используемая шкала значений (в некоторых версиях может называться просто Шкала значений) и установим значение Дополнительная.Рентабельность). Если оставить список полей пустым, настройка применится ко всем сериям, и мы снова получим одну шкалу.После такой настройки платформа автоматически создаст вторую шкалу справа, рассчитает для нее подходящий диапазон и привяжет к ней выбранную серию данных.
Иногда возникают ситуации, когда стандартных возможностей СКД недостаточно или требуется динамически изменять настройки диаграммы в зависимости от действий пользователя. В этом случае мы можем использовать программный способ заполнения данных.
Рассмотрим ситуацию, когда на форму добавлен реквизит с типом Диаграмма. Чтобы данные корректно распределились по двум осям, проанализируем следующий алгоритм работы в модуле формы:
// Предположим, у нас есть ТаблицаЗначений (ТЗДиаграмма) с данными
Для Каждого СтрТЗ Из ТЗДиаграмма Цикл
// Устанавливаем точку (горизонтальная ось, например, Период)
Точка = Диаграмма.УстановитьТочку(СтрТЗ.ДатаПродажи);
Точка.Текст = Формат(СтрТЗ.ДатаПродажи, "ДФ=MMMM.yyyy");
// Работаем с первой серией (Основная шкала - Суммы)
СерияСумма = Диаграмма.УстановитьСерию("СуммаОплат");
Диаграмма.УстановитьЗначение(Точка, СерияСумма, СтрТЗ.СуммаОплат);
// Работаем со второй серией (Дополнительная шкала - Рентабельность)
СерияРентабельность = Диаграмма.УстановитьСерию("Рентабельность");
// Ключевая строка: привязываем серию к правой оси
СерияРентабельность.ИспользуемаяОсьЗначений = ИспользуемаяОсьЗначенийДиаграммы.Дополнительная;
Диаграмма.УстановитьЗначение(Точка, СерияРентабельность, СтрТЗ.Рентабельность);
КонецЦикла;
Выясним причину, почему в конфигураторе иногда не видно настроек дополнительной оси. Для того чтобы они появились визуально в свойствах реквизита формы, необходимо в настройках диаграммы (в палитре свойств или через контекстное меню "Настройка диаграммы") убедиться, что включено отображение дополнительной оси значений. В программном коде же обращение к ИспользуемаяОсьЗначенийДиаграммы.Дополнительная активирует её автоматически.
Если мы хотим использовать мощь СКД для подготовки данных, но нам нужно тонкое управление объектом диаграммы, которого сложно добиться через визуальные настройки, мы можем перехватить процесс компоновки. Этот метод позволяет не "рисовать" диаграмму вручную, а лишь подправить свойства уже сформированного СКД результата.
В модуле объекта отчета используем процедуру ПриКомпоновкеРезультата. Выполним следующие действия:
РисунокТабличногоДокументаТип.Диаграмма.ИспользуемаяОсьЗначений.Это выглядит примерно так:
// Фрагмент кода в ПриКомпоновкеРезультата
Для Каждого Рисунок Из ТабличныйДокумент.Рисунки Цикл
Если Рисунок.ТипРисунка = РисунокТабличногоДокументаТип.Диаграмма Тогда
ТекущаяДиаграмма = Рисунок.Объект;
Для Каждого Серия Из ТекущаяДиаграмма.Серии Цикл
Если Серия.Имя = "Рентабельность" Тогда
Серия.ИспользуемаяОсьЗначений = ИспользуемаяОсьЗначенийДиаграммы.Дополнительная;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
При использовании двух шкал важно, чтобы пользователь визуально сразу понимал, какая линия или столбик к какой шкале относится. Проанализируем несколько советов по улучшению читаемости:
ТипДиаграммы.Гистограмма (столбики), а серию с рентабельностью как ТипДиаграммы.График (линия). Это классический стандарт бизнес-отчетности.ШкалыЗначений.ОтображатьЗначения для серии с рентабельностью, чтобы конкретные числа были видны над точками графика.Использование дополнительной шкалы — это мощный инструмент, который превращает нечитаемую кашу из данных в профессиональный аналитический инструмент. Выбор между СКД и программным кодом зависит от сложности вашей задачи, но в большинстве случаев возможностей Условного оформления в современных версиях 1С 8.3 более чем достаточно.