Статей по работе с этим объектом маловато, непонятно почему. Немного подправим ситуацию.
В пример я попытался рассказать возможности и методы построения диаграммы Ганта в 1С, создание, сохранение изображения, "экспорт импорт в XML", различные украшательства. Делается все это добро следующим образом:
Сначала создаются серии, метод «Добавить()» свойства «Серии» у объекта «ДиаграммаГанта».
СерияПлан = Диаграмма.Серии.Добавить();
СерияПлан.Текст = "План";
СерияПлан.Цвет = WebЦвета.СинеФиолетовый;
СерияФакт = Диаграмма.Серии.Добавить();
СерияФакт.Текст = "Факт";
СерияФакт.Цвет = WebЦвета.КрасноФиолетовый;
Их может быть несколько или одна. Далее начинам строить диаграмму - добавляется точка методом «УстановитьТочку()» объекта «ДиаграммаГанта».
Точка = Диаграмма.УстановитьТочку(СтрокаТЧЗадачи.Этап, "Демо"); // Родитель = "Демо"
Точка.Текст = СтрокаТЧЗадачи.Этап;
Точка.Картинка = БиблиотекаКартинок.Реквизит;
Точка это некий список задач, например – «Разработка».
С помощью метода «ПолучитьЗначение(Точка, Серия)» объекта «ДиаграммаГанта» получаем значение, это, если так можно выразиться, некоторое значение на пересечении серии и точки (Задачи).
Значение = Диаграмма.ПолучитьЗначение(Точка, СерияПлан);
Значение.Редактирование = Истина;
Значение представляет собой коллекцию интервалов. Добавляем интервал «Добавить()».
Интервал = Значение.Добавить();
Интервал.Начало = СтрокаТЧЗадачи.ДатаНачалаПлан;
Интервал.Конец = СтрокаТЧЗадачи.ДатаОкончанияПлан;
Интервал.Текст = "Интервал план";
У него есть свойства «Начало» и «Конец», тип «Дата», а так же метод «Добавить(<Конец>)» с параметром ИнтервалДиаграммыГанта, который создаст связь и вернет значение с типом «СвязьДиаграммыГанта».
Если СтрокаТЧЗадачи.Предшественник <> 0 Тогда
Отбор = Новый Структура("ПредшественникНомер", СтрокаТЧЗадачи.НомерСтроки);
НайденныеСтроки = Связи.НайтиСтроки(Отбор);
Для Каждого НайденненнаяСвязь Из НайденныеСтроки Цикл
НайденненнаяСвязь.Интервал.Добавить(Интервал);
КонецЦикла;
КонецЕсли;
Для построения связей используется Таблица значений. Сейчас попытаюсь объяснить, почему так. Когда создается связь от А до В, нужно уже иметь два созданных интервала, как некие объекты с типом «ИнтервалДиаграммыГанта» на диаграмме Ганта, поэтому строить связь можно только в момент появления интервала В, а для этого нужно куда то временно сохранить значение с типом «ИнтервалДиаграммыГанта», ссылку на интервал А. Поэтому и используется таблица значений, она хранит связи, что бы их построить, когда появятся все нужные объекты в диаграмме.
В публикацию добавлена обработка, демонстрирующая пример работы. Работает в любой конфигурации даже пустой на платформе 8.3. Тестировалась на версии 8.3.16.1359 и 8.3.18.1334
Добавляйте в комментарий, если я, что то упустил.
Всем добра.
&НаСервере
Процедура ПостроитьДиаграммуГанта()
// ТЗ для связей
Связи = Новый ТаблицаЗначений;
Связи.Колонки.Добавить("ПредшественникНомер");
Связи.Колонки.Добавить("Интервал");
Диаграмма.Очистить();
// Будет 2 серии - план, факт
СерияПлан = Диаграмма.Серии.Добавить();
СерияПлан.Текст = "План";
СерияПлан.Цвет = WebЦвета.СинеФиолетовый;
СерияФакт = Диаграмма.Серии.Добавить();
СерияФакт.Текст = "Факт";
СерияФакт.Цвет = WebЦвета.КрасноФиолетовый;
// Пример иерархии, создаем верхний уровень "Демо"
ДобавитьДемоИнтервалы(СерияПлан);
Для Каждого СтрокаТЧЗадачи Из ТЗЗадачи Цикл
Точка = Диаграмма.УстановитьТочку(СтрокаТЧЗадачи.Этап, "Демо"); // Родитель = "Демо"
Точка.Текст = СтрокаТЧЗадачи.Этап;
Точка.Картинка = БиблиотекаКартинок.Реквизит;
// *****************************
// Добавляем интервал серии план
Значение = Диаграмма.ПолучитьЗначение(Точка, СерияПлан);
Значение.Редактирование = Истина;
Интервал = Значение.Добавить();
Интервал.Начало = СтрокаТЧЗадачи.ДатаНачалаПлан;
Интервал.Конец = СтрокаТЧЗадачи.ДатаОкончанияПлан;
Интервал.Текст = "Интервал план";
УстановитьТекстЗначения(Значение.Текст, СтрокаТЧЗадачи.ДатаНачалаПлан, СтрокаТЧЗадачи.ДатаОкончанияПлан);
// Строить связи будем только по серии план
// Создаем заранее сохраненную связь в ТЗ связи (ищем интервал предшесвенник в ТЗ)
Если СтрокаТЧЗадачи.Предшественник <> 0 Тогда
Отбор = Новый Структура("ПредшественникНомер", СтрокаТЧЗадачи.НомерСтроки);
НайденныеСтроки = Связи.НайтиСтроки(Отбор);
Для Каждого НайденненнаяСвязь Из НайденныеСтроки Цикл
НайденненнаяСвязь.Интервал.Добавить(Интервал);
КонецЦикла;
КонецЕсли;
// Если текущий интервал является предшественником для добавленных в будущем в цикле интервалов
// тогда сохраняем связь в ТЗ связи
Отбор = Новый Структура("Предшественник", СтрокаТЧЗадачи.НомерСтроки);
НайденныеСтроки = ТЗЗадачи.НайтиСтроки(Отбор);
Если НайденныеСтроки <> 0 Тогда
Для Каждого НайденненнаяСвязь Из НайденныеСтроки Цикл
НоваяСвязь = Связи.Добавить();
НоваяСвязь.ПредшественникНомер = НайденненнаяСвязь.НомерСтроки;
НоваяСвязь.Интервал = Интервал;
КонецЦикла;
КонецЕсли;
// *****************************
// Добавляем интервал серии факт
Значение = Диаграмма.ПолучитьЗначение(Точка, СерияФакт);
Интервал = Значение.Добавить();
Интервал.Начало = СтрокаТЧЗадачи.ДатаНачалаФакт;
Интервал.Конец = СтрокаТЧЗадачи.ДатаОкончанияФакт;
Интервал.Текст = "Интервал факт";
КонецЦикла;
// Метки времени. Добавляем метку времени их можно добавлять несколько на разные шкалы времени
Шкала = Диаграмма.ОбластьПостроения.ШкалаВремени.Элементы[1];
МеткаВремени = Шкала.Метки.Добавить(НачалоДня(ТекущаяДата()));
МеткаВремени.Текст = "Текущая дата " + Формат(ТекущаяДата(), "ДФ=dd.MM.yyyy");
МеткаВремени.ЦветТекста = WebЦвета.Красный;
МеткаВремени.ЦветЛинии = WebЦвета.Красный;
// Фон, выделяем выходные
ТекущийПериод = НачалоМесяца(Диаграмма.НачалоПолногоИнтервала - 1);
КонечныйПериода = Диаграмма.КонецПолногоИнтервала;
Пока ТекущийПериод < КонечныйПериода Цикл
Если КонецНедели(ТекущийПериод) = КонецДня(ТекущийПериод) Тогда
ИнтервалФона = Диаграмма.ИнтервалыФона.Добавить(НачалоДня(ТекущийПериод - 86400), КонецДня(ТекущийПериод));
ИнтервалФона.Цвет = WebЦвета.БледноЛиловый;
КонецЕсли;
ТекущийПериод = КонецДня(ТекущийПериод) + 1;
КонецЦикла;
// Получаем верхнюю точку "Демо" и разворачиваем иерархию
Точка = Диаграмма.УстановитьТочку("Демо");
Диаграмма.РазвернутьТочку(Точка, Истина);
КонецПроцедуры
&НаСервере
Процедура ДобавитьДемоИнтервалы(Серия)
Точка = Диаграмма.Точки.Добавить();
Точка.Текст = "Демо";
Точка.Значение = "Демо";
Точка.Картинка = БиблиотекаКартинок.СводнаяДиаграмма;
Значение = Диаграмма.ПолучитьЗначение(Точка, Серия);
ТекущийПериод = НачалоГода(ТекущаяДата());
Для Итерация = 1 По 25 Цикл
ЦветИнтервала = Новый Цвет(Итерация * 10, Итерация * 10, Итерация * 10);
Интервал = Значение.Добавить();
Интервал.Цвет = ЦветИнтервала;
Интервал.Начало = НачалоДня(ТекущийПериод);
Интервал.Конец = КонецДня(ТекущийПериод);
ТекущийПериод = КонецДня(ТекущийПериод) + 1;
КонецЦикла;
Палира = Новый Массив;
Палира.Добавить(WebЦвета.Красный);
Палира.Добавить(WebЦвета.Оранжевый);
Палира.Добавить(WebЦвета.Желтый);
Палира.Добавить(WebЦвета.Зеленый);
Палира.Добавить(WebЦвета.Голубой);
Палира.Добавить(WebЦвета.Синий);
Палира.Добавить(WebЦвета.Фиолетовый);
Для Итерация = 0 По 6 Цикл
Интервал = Значение.Добавить();
Интервал.Цвет = Палира[Итерация];
Интервал.Начало = НачалоДня(ТекущийПериод);
Интервал.Конец = КонецДня(ТекущийПериод);
ТекущийПериод = КонецДня(ТекущийПериод) + 1;
КонецЦикла;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьТекстЗначения(Текст, ДатаНачала, ДатаОкончания)
Текст = Формат(ДатаНачала, "ДЛФ=DDT") + " - " + Формат(ДатаОкончания, "ДЛФ=DDT");
КонецПроцедуры