Как программно заполнить дополнительные колонки диаграммы Ганта в 1С 8.3

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

Начиная с версии платформы 8.3.15, в 1С появилась долгожданная возможность: теперь диаграмма Ганта — это не просто графическое поле, а полноценный инструмент с интерактивной таблицей данных. Мы можем добавлять на форму собственные колонки, чтобы отображать рядом с графиком важные показатели: ответственных, статусы, числовые значения или любые другие данные. Однако программная работа с этими колонками отличается от привычного заполнения таблиц. В этой статье мы подробно разберем, как именно записывать данные в эти ячейки.

Разберем механизм работы с таблицей данных

Прежде всего, важно понять, что дополнительные колонки диаграммы Ганта не являются частью какой-то внешней таблицы. Они жестко привязаны к объекту ДиаграммаГанта. Когда мы добавляем колонку в коллекцию Колонки диаграммы, платформа создает место для хранения данных в каждой точке диаграммы.

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

Шаг 1. Добавление колонок в диаграмму

Прежде чем что-то записывать, нам нужно создать структуру таблицы. Рассмотрим пример кода, который добавляет две колонки: одну для отображения ответственного сотрудника, вторую — для вывода процента выполнения задачи. Выполнять это действие следует при инициализации диаграммы, например, в процедуре ПриСозданииНаСервере или перед началом формирования отчета.


// Добавляем колонку "Исполнитель"
НоваяКолонка = ДиаграммаГанта.Колонки.Добавить();
НоваяКолонка.Имя = "Исполнитель";
НоваяКолонка.ТекстШапки = "Ответственный сотрудник";
НоваяКолонка.Ширина = 20;

// Добавляем колонку "Процент"
НоваяКолонкаПроцент = ДиаграммаГанта.Колонки.Добавить();
НоваяКолонкаПроцент.Имя = "ПроцентВыполнения";
НоваяКолонкаПроцент.ТекстШапки = "%";
НоваяКолонкаПроцент.Ширина = 5;

Важный нюанс: Чтобы эти колонки отобразились на форме, в свойствах элемента формы "Диаграмма Ганта" должен быть включен режим отображения таблицы. Если это не сделать, данные в объектной модели сохранятся, но пользователь их не увидит.

Шаг 2. Программное заполнение данных

Теперь выясним, как обратиться к этим колонкам при заполнении диаграммы данными. Процесс происходит в момент создания точек. Когда мы вызываем метод УстановитьТочку() или Точки.Добавить(), платформа возвращает нам объект типа ТочкаДиаграммыГанта. Именно через этот объект мы получаем доступ к коллекции ЗначенияКолонок.

Рассмотрим по шагам типичный алгоритм заполнения диаграммы из выборки запроса:

  1. Очищаем диаграмму перед заполнением.
  2. Обходим результат запроса в цикле.
  3. Создаем или получаем точку (строку диаграммы).
  4. Обращаемся к коллекции ЗначенияКолонок по имени колонки, которую мы задали на Шаге 1.
  5. Устанавливаем свойство Текст для отображения значения.

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

Шаг 3. Управление оформлением ячеек

Объект ЗначенияКолонок позволяет не только выводить текст, но и управлять визуализацией. Каждая ячейка в таблице данных диаграммы Ганта может иметь индивидуальное оформление. Это крайне полезно, если нам нужно выделить просроченные задачи или критические показатели.

Проанализируем возможности оформления:

Посмотрим на пример, где мы выделяем красным цветом текст в колонке, если процент выполнения задачи меньше 50%:


Если Выборка.Процент < 50 Тогда
    ЯчейкаПроцент = ТекущаяТочка.ЗначенияКолонок.ПроцентВыполнения;
    ЯчейкаПроцент.Текст = "Критично: " + Выборка.Процент;
    ЯчейкаПроцент.ЦветТекста = WebЦвета.Красный;
КонецЕсли;

Особенности и ограничения

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

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

Заключение

Мы рассмотрели современный способ работы с табличной частью диаграммы Ганта. Главное, что нужно запомнить: данные в колонках привязаны к Точкам, а доступ к ним осуществляется через коллекцию ЗначенияКолонок. Использование этого механизма позволяет создавать профессиональные и информативные интерфейсы для управления проектами и планирования задач в системе 1С:Предприятие. При необходимости построения сложных алгоритмов календарного планирования можно использовать инструмент расчета расписания и выравнивания загрузки ресурсов.

← На главную