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