Как программно работать с выделенными точками на диаграмме в табличном документе 1С

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

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

Зачем нужно выделение точек на диаграмме?

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

  1. Детализация данных (Drill-down): пользователь выделяет интересующий его интервал на графике (например, несколько месяцев) и получает расшифровку по дням именно для этого периода.
  2. Групповые операции: выделив несколько "аномальных" пиков на графике продаж, пользователь может нажать кнопку и открыть список документов-оснований, сформировавших эти показатели.
  3. Мгновенные расчеты: автоматический расчет суммы, среднего значения или отклонения только по выбранным точкам, без необходимости переформирования всего отчета.
  4. Визуальное управление: программное изменение оформления (цвета, маркеров) именно тех элементов, которые выбрал пользователь для презентации или печати.

Проанализируем ситуацию: как же получить доступ к этим выделенным элементам из кода 1С?

Программный доступ к выделенным элементам

Для того чтобы узнать, какие именно элементы диаграммы выделил пользователь в данный момент, необходимо обратиться к объекту рисунка табличного документа. Если наша диаграмма имеет имя D1, то ключевым методом будет ПолучитьВыделенныеЭлементы().

Разберем пример кода, который позволяет получить список всех выбранных элементов:


// Предположим, ТабДок — это наш табличный документ с диаграммой
ДиаграммаОбъект = ТабДок.Рисунки.D1.Объект;
ВыделенныеЭлементы = ТабДок.Рисунки.D1.ПолучитьВыделенныеЭлементы();

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

Важно понимать, что метод ПолучитьВыделенныеЭлементы() возвращает массив объектов. В зависимости от действий пользователя в этом массиве могут оказаться элементы разных типов:

Анализ состава выделения

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


ВыделенныеЭлементы = ТабДок.Рисунки.D1.ПолучитьВыделенныеЭлементы();

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

Обработка событий выделения

Чтобы программа реагировала на действия пользователя "на лету", нам нужно использовать события. Если диаграмма размещена непосредственно в табличном документе на форме, мы можем использовать событие ПриАктивизацииОбласти этого документа.

Выясним причину, по которой это удобно: при каждом клике или выделении области (включая рисунки) срабатывает это событие, и мы можем мгновенно обновлять вспомогательные данные на форме.

Пример реализации интерактивного суммирования:


&НаКлиенте
Процедура ТабличныйДокументПриАктивизацииОбласти(Элемент)
    
    // Получаем рисунок диаграммы
    РисунокДиаграммы = Элемент.Рисунки.Найти("ПродажиГрафик");
    Если РисунокДиаграммы = Неопределено Тогда
        Возврат;
    КонецЕсли;
    
    ВыделенныеЭлементы = РисунокДиаграммы.ПолучитьВыделенныеЭлементы();
    СуммаВыделенных = 0;
    
    Для Каждого ТекущийЭлемент Из ВыделенныеЭлементы Цикл
        // Нас интересуют только конкретные значения на графике
        Если ТекущийЭлемент.Значение <> Неопределено Тогда
            СуммаВыделенных = СуммаВыделенных + ТекущийЭлемент.Значение;
        КонецЕсли;
    КонецЦикла;
    
    // Выводим результат в реквизит формы для пользователя
    ОбщийИтогПоВыделению = СуммаВыделенных;
    
КонецПроцедуры

Особенности интерфейса для пользователя

Для эффективной работы с выделением стоит проинструктировать пользователей о стандартных возможностях платформы 1С:

Ограничения и важные нюансы

При разработке функционала на основе выделенных точек следует учитывать несколько моментов:

  1. Тип диаграммы: функционал стабильно работает на "современных" типах диаграмм (линейная, гистограмма, график). На экзотических типах (например, круговая или воронка) состав возвращаемых данных может отличаться.
  2. Режим редактирования: если диаграмма открыта в режиме редактирования (двойной клик), выделение может работать иначе, предоставляя доступ к свойствам оформления элементов через палитру свойств платформы.
  3. Производительность: если в диаграмме тысячи точек, частый вызов метода ПолучитьВыделенныеЭлементы() в событии активации может привести к небольшим задержкам интерфейса. В таких случаях рекомендуется оптимизировать алгоритм обработки.

Таким образом, мы проанализировали механизм работы с выделенными элементами диаграмм в табличном документе. Использование метода ПолучитьВыделенныеЭлементы() открывает широкие возможности для создания по-настоящему интерактивных и удобных аналитических инструментов в среде 1С.

← На главную