
Первый формат своей диаграммы Генри Л. Гант разработал аж в 1910 году — на бумаге. Сейчас ленточные диаграммы строят в специальных приложениях, сервисах для управления проектами, типа Trello или Jira, конечно же, в Excel, и в том числе в нашем любимом 1C. Об этом и поговорим.
Привет, Хабр! Меня зовут Мирослава Косенко. Я разработчик 1C в IBS. В этой статье расскажу, как диаграмма Ганта помогает визуально планировать, контролировать и анализировать процессы, будь то производство, проектные задачи или цепочки этапов в учетных подсистемах. Разберемся, что из себя представляет диаграмма и какие проблемы она помогает решать. Посмотрим на реальные примеры использования и обсудим нетиповые кейсы, а также шаг за шагом разберем, как создать и настроить диаграмму Ганта в 1С. Особое внимание уделим нюансам разработки: каки�� элементы доступны, как они взаимодействуют, какие подводные камни возникают и как их обходить.
Статья будет полезна аналитикам, консультантам и разработчикам, планирующим внедрять диаграмму Ганта в своих проектах или улучшать уже существующие решения.
Примеры использования диаграммы Ганта в 1С
График смежных этапов производства
Первый пример использования диаграммы можно найти в «1С: ERP Управление предприятием».
Для согласования выполнения производственных процессов на межцеховом уровне используют График производства, представляющий собой календарное расписание выполнения этапов производства. Формирование графика производства выполняется в рамках рабочего места Производство — Межцеховое управление — Управление очередью заказов.
Расчет графика можно выполнять как для списка заказов, так и для каждого заказа индивидуально — по ссылке «Планировать» в самом заказе.

При расчете графика одного заказа открывается форма «Планирование графика производства заказа».

Диаграмму сроков выполнения можно детализировать по графику и по модели.

В обоих случаях есть возможность выбрать вариант отображения: по продукции, по подразделениям или по ВРЦ.

На закладке «Этапы документа» по кнопке «Диаграмма Ганта» выводится диаграмма смежных этапов — непосредственных предшественников и последователей.

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

Пример создания в 1С
Для создания диаграммы Ганта в 1С необходимо задать новый реквизит на форме с типом данных «Диаграмма Ганта».

При выведении на форму в предварительном просмотре она выглядит так.

У диаграммы Ганта достаточно гибкие настройки по внешнему виду — можно настроить цвета, формат отображения дат, шри��ты и многое другое. Настройки находятся в Свойства реквизита — Объект — Настройка.
Формирование диаграммы вынесем на кнопку «Сформировать». Данные, которыми будет заполняться диаграмма Ганта, назначаются программно, поэтому по этой кнопке будем очищать саму диаграмму, а после этого получим данные для заполнения и выведем их. У диаграммы советую ставить признак «Обновление» Ложь для того, чтобы не было лишних пересчетов.
ДиаграммаГанта.Обновление = Ложь;
ДиаграммаГанта.Очистить();
Шкала времени — ось, на которой отображаются периоды времени: часы, дни, недели, месяцы. Она показывает, когда начинается и заканчивается задача. Шкалу времени можно редактировать не только в режиме конфигуратора, но и в пользовательском режиме, поэтому лучше предварительно очищать ее от возможных пользовательских настроек и заполнять так, как необходимо нам.
Чаще всего пользователь хочет видеть данные за разные интервалы времени, за день или месяц, может, год. Можно дать ему эту возможность — вынести нужные периоды в отдельные команды.

Я вынесла наиболее часто необходимые периоды на отдельные кнопки и описала несколько процедур. Затем создала реквизит с типом ТипЕдиницыИнтервалаВремениАнализаДанных. По умолчанию при открытии диаграммы я устанавливаю тип единицы интервала Неделя.
Процедуры установки периодичности следующие:
Записываю устанавливаю Тип единицы интервала в реквизит Периодичность.
Устанавливаю пометку у кнопки периода, который мы выбрали (чтобы визуально понимать, какой период выбран).

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

Добавляю новые шкалы времени. К примеру, при отображении Недели будет полезно показывать месяц, в котором находится Неделя, сами дни недели и разбивку дня по периодам. Итого получилось:

А также устанавливаю полный интервал диаграммы методом УстановитьПолныйИнтервал(<ДатаНачала>,<ДатаОкончания>)
Визуально это выглядит так.

В моем примере я работаю с данными регистра сведений График выполнения ремонта.

Для указания серий используется метод Диаграммы Ганта — УстановитьСерию(<Значение>) — Значение тип произвольный.
В моем случае у меня одна серия: Ремонты
Серия = ДиаграммаГанта.УстановитьСерию(«Ремонты»);
Результатом моего запроса будет иерархия, верхний уровень — Оборудование, над которым производятся работы, общий интервал работы над оборудованием.
Второй уровень — работы, которые проводили над оборудованием, время каждой работы
Третий уровень — уточнение о том, какая бригада, какой вид работы выполняла в какой период времени.
Теперь поговорим о точках.
Алгоритм работы с точками:
Точка устанавливается методом
УстановитьТочку(<Значение>)— тип произвольный. В моем примере это структура, в которую записаны данные, указывающие на объект работ и даты работ над объектом.Необходимо получить значение на пересечении точки и серии для установки интервала. Для этого используем метод
ПолучитьЗначение(<Точка>, <Серия>).Выводим интервал на диаграмму. Используем метод
Добавить()Значения диаграммы Ганта. У интервала есть свойства Начало и Конец, заполняем их. Также можно указать Расшифровку, Цвет.
Можно создавать вложенные точки, все зависит от метода получения данных.
Свойства точек интервалов: расшифровка, цвет, текст.
Для примера покажу вывод точек и интервалов верхнего уровня:

Между интервалами можно создавать связи. Связи показывают, какая работа должна выполнятся после какой. Связи не всегда могут быть нужны пользователю, поэтому отображение связи я тоже вынесла на отдельную кнопку.
Я храню информацию о том, какие работы взаимосвязаны, в регистре Связи работ. Информация о необходимости отображать связи хранится в реквизите ОтобразитьСвязиРабот — тип Булево. Если пользователь выбирает отображать связи, тогда получаем данные о том, какие работы взаимосвязаны из регистра, и в цикле проходим точки, в точках находим все интервалы и, если работы, указанные в этих интервалах те же, что и в регистре, устанавливаем связь между интервалами.
Код:

Как это выглядит:

Перейдем к полезным методам в диаграмме. С большой вероятностью точки диаграммы Ганта будут подчинены друг другу, будет вложенность. Но иногда необходимо видеть только верхний уровень. К примеру, верхний уровень — это объект, по которому идут работы, а нижние уровни — это р��боты. Иногда надо видеть интервал по объекту или, наоборот, все работы. В диаграмме есть методы по сворачиванию и разворачиванию строк.
Для разворачивания используют метод точки РазвернутьТочку.
Для сворачивания СвернутьТочку.
То есть, чтобы это подействовало на всю диаграмму, необходимо циклом пройтись по всем точкам и применить метод к каждой.
Пример:

У диаграммы Ганта как у элемента есть свои События. Вот их список:
ПриИзменении
Выбор
ОбработкаРасшифровки
ПриОкончанииРедактирования
ПриАктивизацииЗначения
ПриАктивизацииИнтервала
ПередСворачиванием
ПередРазворачиванием
Об этих методах можно подробнее почитать в синтакс-помощнике, но приведу пример своего использования событий.
На одном проекте диаграмма Ганта отображала работы из документа План-график ТОиР. В ПГ есть табличная часть с работами, указано оборудование, Заказ-наряд, даты, вид работ. Так как в значение можно записать структуру, то в структуре записывались значения, по которым можно определить строку.
При изменении интервала необходимо было менять запись и в План-графике. Для этого применялось событие ПриОкончанииРедактирования, в котором получали значение точки, в котором хранится структура ключевых полей, получали строку документа и меняли ее.


Можно реализовать изменение документа из диаграммы Ганта, если иметь на него ссылку, также можно менять записи в регистрах.
Ограничения диаграммы Ганта в 1С
Диаграмма Ганта в 1C — очень удобный инструмент, но не без недостатков.
Например, один заказчик сетовал, что по диаграмме очень сложно ориентироваться — было бы хорошо иметь возможность найти работу по поиску. Но, к сожалению, в диаграмме Ганта поиск не предусмотрен.
Еще в диаграмме Ганта нельзя создавать новые интервалы или как-то манипулировать данными, такими как серии, точки и другие, интерактивно, все зависит от разработки и от того алгоритма вывода и получения данных, который задал разработчик.
В общем, диаграмма Ганта хорошо помогает визуально увидеть последовательность и длительность работ, но внешне все же может показаться неудобной, особенно при большом объеме работ.
