Содержание:
Диаграмма Ганта в 1С представлена в виде объекта встроенного языка. Используется для отражения длительности и последовательности процессов, представленных в виде горизонтальных линий расположенных на оси времени.

Более подробно про «диаграмму Ганта» можно почитать на ИТС. Там же доступна для скачивания демонстрационная конфигурация «Диаграммы», в которой можно посмотреть примеры и по другим диаграммам.
Файлы материала
Постановка задачи
Рассмотрим основные возможности «Диаграммы Ганта» на примере построения «Графика отпусков по сотрудникам».
Предположим нам нужно получить «Диаграмму» такого вида:

Для этого создадим обработку, добавим реквизит с типом «Диаграмма Ганта» и перенесем его на форму.

Видим, что по умолчанию поле диаграммы состоит из Таблицы с «Точками» и графической областью с интервалами. Таблица поддерживает «Иерархию» и при необходимости ее можно скрыть, установив свойство ПоложениеТаблицы = Нет для элемента формы ДиаграммаГанта. С версии платформы 3.1.21 кроме Точек и Текста в таблицу можно добавлять свои реквизиты.
Заполнение диаграммы данными
По условию задачи Точками будут Сотрудники, для демонстрации иерархии сделаем их вложенными в Организацию, Серия — это «Отпуск», Интервалы — продолжительность отпуска.
Получим исходные данные запросом:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
Функция ОтпускаСотрудников() Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ""ООО """"Рассвет"""""" КАК Организация, | ""Иванов И.И."" КАК Сотрудник, | ДАТАВРЕМЯ(2025, 5, 5) КАК ДатаНачала, | ДАТАВРЕМЯ(2025, 5, 11) КАК ДатаОкончания | |ОБЪЕДИНИТЬ ВСЕ | |ВЫБРАТЬ | ""ООО """"Рассвет"""""", | ""Иванов И.И."", | ДАТАВРЕМЯ(2025, 5, 19), | ДАТАВРЕМЯ(2025, 5, 23) | |ОБЪЕДИНИТЬ ВСЕ | |ВЫБРАТЬ | ""ООО """"Рассвет"""""", | ""Петров П.П."", | ДАТАВРЕМЯ(2025, 5, 12), | ДАТАВРЕМЯ(2025, 5, 23) | |ОБЪЕДИНИТЬ ВСЕ | |ВЫБРАТЬ | ""АО """"Звезда"""""", | ""Сидоров П.П."", | ДАТАВРЕМЯ(2025, 5, 9), | ДАТАВРЕМЯ(2025, 5, 18) |ИТОГИ ПО | Организация, | Сотрудник"; РезультатЗапроса = Запрос.Выполнить(); ВыборкаОрганизация = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Возврат ВыборкаОрганизация; КонецФункции |

Обойдем полученную выборку по группировкам и установим данные в Диаграмму Ганта:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
&НаСервереБезКонтекста Процедура ЗаполнитьДиаграммуГанта(ДиаграммаГанта, Период) // Получение данных по отпускам ВыборкаОрганизация = ОтпускаСотрудников(); // Заполнение диаграммы Ганта данными ДиаграммаГанта.Обновление = Ложь; ДиаграммаГанта.Очистить(); // Создание Серии СерияОтпуск = ДиаграммаГанта.Серии.Добавить(); СерияОтпуск.Текст = "Отпуск"; // Обход Выборки по группировкам: Организации -> Сотрудники -> Детальные записи Пока ВыборкаОрганизация.Следующий() Цикл // Создание Точки верхнего уровня "Организации" ТочкаОрганизация = ДиаграммаГанта.Точки.Добавить(); ТочкаОрганизация.Текст = ВыборкаОрганизация.Организация; ВыборкаСотрудник = ВыборкаОрганизация.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаСотрудник.Следующий() Цикл // Создание Точки нижнего уровня "Сотрудники" ТочкаСотрудник = ТочкаОрганизация.Точки.Добавить(); ТочкаСотрудник.Текст = ВыборкаСотрудник.Сотрудник; // Получение значения на пересечении Точек и Серий ЗначениеОрганизация = ДиаграммаГанта.ПолучитьЗначение(ТочкаОрганизация, СерияОтпуск); ЗначениеСотрудник = ДиаграммаГанта.ПолучитьЗначение(ТочкаСотрудник, СерияОтпуск); ВыборкаДетальныеЗаписи = ВыборкаСотрудник.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл // Создание Интервалов полученого Значения ИнтервалОрганизация = ЗначениеОрганизация.Добавить(); ИнтервалОрганизация.Начало = ВыборкаДетальныеЗаписи.ДатаНачала; ИнтервалОрганизация.Конец = КонецДня(ВыборкаДетальныеЗаписи.ДатаОкончания); ИнтервалСотрудник = ЗначениеСотрудник.Добавить(); ИнтервалСотрудник.Начало = ВыборкаДетальныеЗаписи.ДатаНачала; ИнтервалСотрудник.Конец = КонецДня(ВыборкаДетальныеЗаписи.ДатаОкончания); КонецЦикла; КонецЦикла; КонецЦикла; ДиаграммаГанта.Обновление = Истина; КонецПроцедуры |
Печать и сохранение в файл «Диаграммы Ганта»
Для объекта с типом «Диаграмма Ганта» по умолчанию возможность сохранения в файл и печать не доступна. Для того что бы реализовать эту задачу необходимо перенести ее в «Табличный документ», например таким образом:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
&НаСервере Функция СформироватьТабличныйДокумент() ТабличныйДокумент = Новый ТабличныйДокумент; ТабличныйДокумент.АвтоМасштаб = Истина; ТабличныйДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт; РисунокДиаграммы = ТабличныйДокумент.Рисунки.Добавить(ТипРисункаТабличногоДокумента.ДиаграммаГанта); РисунокДиаграммы.Ширина = 300; РисунокДиаграммы.Высота = 100; ДиаграммаГанта = РисунокДиаграммы.Объект; // Работа с областями ДиаграммаГанта.ОбластьЛегенды.Расположение = РасположениеЛегендыДиаграммы.Нет; ДиаграммаГанта.ОбластьПостроения.Заголовок = "Сотрудники"; ДиаграммаГанта.ОбластьЗаголовка.Текст = "Пример от myblog-1c.ru"; // Добавление "Месяца" в шкалу времени ЭлементыШкалыВремениДиаграммы = ДиаграммаГанта.ОбластьПостроения.ШкалаВремени.Элементы; ЭлементШкалыВремениДиаграммыМесяц = ЭлементыШкалыВремениДиаграммы.Добавить(); ЭлементШкалыВремениДиаграммыМесяц.Единица = ТипЕдиницыШкалыВремени.Месяц; ЗаполнитьДиаграммуГанта(ДиаграммаГанта, Период); // Развернутое отображение "Точек" Для Каждого ТекущаяТочка Из ДиаграммаГанта.Точки Цикл ДиаграммаГанта.РазвернутьТочку(ТекущаяТочка, Истина); КонецЦикла; Возврат ТабличныйДокумент; КонецФункции |
Так же пример «Печати» реализован в демонстрационной конфигурации 1С доступной для скачивания с ИТС по ссылке в начале статьи.
Тут нужно учесть, что при сохранении в Excel или выводе на печать «диаграмма Ганта» представляет из себя «Рисунок», как показала практика, для пользователей может быть неожиданным, что у нее нельзя поменять ширину колонки или вписать информацию в ячейку привычным образом.
Где находятся настройки области построения?
Для того, что бы перейти в настройки области построения и в частности шкалы времени, необходимо перейти в «Свойство» диаграммы -> Настройки -> перейти в «Свойства» области построения


Работа с фоном диаграммы Ганта
В настройках области построения, есть возможность выделить фон другим цветом, указав нужные интервалы, например выделим майские праздники и выходные:

Тоже самое можно сделать программно:
|
1 2 |
ИнтервалФона = ДиаграммаГанта.ИнтервалыФона.Добавить('20250501', КонецДня('20250504')); ИнтервалФона.Цвет = WebЦвета.БледноМиндальный; |
В диаграмме выводиться лишний день / месяц / год
По умолчанию полный интервал времени определяется автоматически, иногда он захватывает лишние пустые периоды, избежать этого можно таким образом:
|
1 2 |
ДиаграммаГанта.АвтоОпределениеПолногоИнтервала = Ложь; ДиаграммаГанта.УстановитьПолныйИнтервал(Период.ДатаНачала, КонецДня(Период.ДатаОкончания)); |
Задваиваются «Точки» при нескольких «Сериях»
На стандартных настройках при построении диаграммы по нескольким «Сериям» мы получаем задвоение «Точек», избежать этого можно установив ПоложениеТаблицы = Нет для элемента формы ДиаграммаГанта

Или программным путем:
|
1 |
Элементы.ДиаграммаГанта.ПоложениеТаблицы = ПоложениеТаблицыДиаграммыГанта.Нет; |
