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