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