Поделитесь в соцсетях

Диаграмма Ганта в 1С

Содержание[Убрать]

Диаграмма Ганта

Диаграмма Ганта была разработана для визуализации временных отрезков графика работ и наиболее часто применяется в программах по управлению проектами.

Предполагаю, что объект Диаграмма Ганта в 1с был спроектирован для ЗУП(т.е. для задач визуализации расчетов), т.к. дает возможность для одной Точки(Сотрудника) увидеть несколько Серий(Начислений). Нельзя задать серию с детализацией несколькими колонками как это сделано в программах по управлению проектами.

Итак, основными элементами диаграммы являются Точка, Серия, Значение.

Точка диаграммы Ганта

это основной разрез данных, который можно отождествить с сотрудником, и визуально представлена колонкой слева от полоски, при этом одна точка объединяет несколько строк представленных сериями этой точки т.е. задает ограничения сверху и снизу. Ниже на рисунке для точки с названием "А" показаны границы отображаемых данных.

Серия диаграммы Ганта

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

Значение диаграммы Ганта

это объект который хранит коллекцию Интервалов(Полосок). По сути, визуально, Значение это значение серии и соответственно занимает всю площадь серии. Значение можно получить указав Точку и Серию.

Интервал диаграммы Ганта

это объект который устанавливает длину полоски. Имеет параметры ДатаНачала и ДатаОкончания.  Интервал можно отождествить с одним из периодов вида расчета.

Теперь давайте рассмотрим как это реализуется в коде.

Сначала нужно создать макет вида Табличный документ, на котором разместить Диаграмму Ганта

Создаем именованные области чтобы точно получать Диаграмму Ганта.

Также создаем реквизит с типом Табличный документ для вывода изображения - ТабДокРезультат.

Листинг получения Диаграммы Ганта:

ТабДокРезультат.Очистить();	
ТекОбъект = РеквизитФормыВЗначение("Объект");  
Макет = ТекОбъект.ПолучитьМакет("Макет");

ОбластьД=Макет.ПолучитьОбласть("ОбластьДиаграммы|ОбластьДиаграммыВерх");
Рисунок = ОбластьД.Рисунки[0];
ДГ = Рисунок.Объект;

Теперь нам нужно создать Точку, Серию, Значение.

Листинг создания Точки, Серии, значения:


Точка = ДГ.УстановитьТочку(ТекСтр.Точка);
Серия = ДГ.УстановитьСерию(ТекСтр.Серия);
Значение = ДГ.ПолучитьЗначение(Точка, Серия);

В методах УстановитьТочку и УстановитьСерию параметром указывается произвольный тип.

Когда у нас есть Значение тогда можно создать интервалы(полоски).

Листинг создания Интервала:


Интервал = Значение.Добавить();
Интервал.Цвет = WebЦвета.ЗеленаяЛужайка; // для интервала можно задать цвет
Интервал.Начало = Дата(2015,11,01);
Интервал.Конец = КонецДня(Дата(2015,11,05));

В итоге у нас получилась Диаграмма Ганта с минимальным заполнением, осталось только показать её. Для этого сначала нужно добавить заполненную диаграмму на Табличный документ формы.Но сначала увеличим размер диаграммы, иначе она будет размером как указана в макете конфигуратора. Для этого применим метод "Расположить", он применяется к рисункам, но как Вы видели на листинге "Листинг получения Диаграммы Ганта" Диаграмма фактически находится на объекте рисунок с индексом 0.


ВысотаДиаграммы = 15;
ШиринаДиаграммы = 15;
Рисунок.Расположить(ОбластьД.Область("R1C1:R"+ВысотаДиаграммы+"C"+ШиринаДиаграммы)); //ширина и высота выражается строках и столбцах
ТабДокРезультат.Вывести(ОбластьД);

Если использовать управляемые формы, то весь предыдущий код нужно написать на сервере.

Здесь Вы можете скачать небольшую обработку, на управляемых формах, в которой можно посмотреть принцип работы с Диаграммой Ганта. Ниже несколько скриншотов обработки.

Область ввода данных

Область настройки

Область диаграммы

Недостаточно прав для комментирования