Как добавить вторую шкалу значений в диаграмму СКД для отображения разнородных данных?

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

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

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

Способ 1: Использование Условного оформления в СКД

Это наиболее предпочтительный и современный метод, который не требует написания программного кода. Он появился в платформе 1С:Предприятие 8.3 (начиная с версий 8.3.14/15) и позволяет гибко управлять визуализацией ресурсов.

Проанализируем шаги настройки в конструкторе схемы компоновки данных:

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

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

Способ 2: Программное управление объектом Диаграмма на форме

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

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


// Предположим, у нас есть ТаблицаЗначений (ТЗДиаграмма) с данными
Для Каждого СтрТЗ Из ТЗДиаграмма Цикл
    // Устанавливаем точку (горизонтальная ось, например, Период)
    Точка = Диаграмма.УстановитьТочку(СтрТЗ.ДатаПродажи);
    Точка.Текст = Формат(СтрТЗ.ДатаПродажи, "ДФ=MMMM.yyyy");
    
    // Работаем с первой серией (Основная шкала - Суммы)
    СерияСумма = Диаграмма.УстановитьСерию("СуммаОплат");
    Диаграмма.УстановитьЗначение(Точка, СерияСумма, СтрТЗ.СуммаОплат);
    
    // Работаем со второй серией (Дополнительная шкала - Рентабельность)
    СерияРентабельность = Диаграмма.УстановитьСерию("Рентабельность");
    // Ключевая строка: привязываем серию к правой оси
    СерияРентабельность.ИспользуемаяОсьЗначений = ИспользуемаяОсьЗначенийДиаграммы.Дополнительная;
    Диаграмма.УстановитьЗначение(Точка, СерияРентабельность, СтрТЗ.Рентабельность);
КонецЦикла;

Выясним причину, почему в конфигураторе иногда не видно настроек дополнительной оси. Для того чтобы они появились визуально в свойствах реквизита формы, необходимо в настройках диаграммы (в палитре свойств или через контекстное меню "Настройка диаграммы") убедиться, что включено отображение дополнительной оси значений. В программном коде же обращение к ИспользуемаяОсьЗначенийДиаграммы.Дополнительная активирует её автоматически.

Способ 3: Комбинированный метод через ПриКомпоновкеРезультата

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

В модуле объекта отчета используем процедуру ПриКомпоновкеРезультата. Выполним следующие действия:

  1. Программным кодом инициируем компоновку во временный табличный документ.
  2. В полученном документе найдем среди объектов рисунок с типом РисунокТабличногоДокументаТип.Диаграмма.
  3. Обратимся к сериям этой диаграммы и программно установим свойство ИспользуемаяОсьЗначений.

Это выглядит примерно так:


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

Рекомендации по визуализации и типам диаграмм

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

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

← На главную