Первый формат своей диаграммы Генри Л. Гант разработал аж в 1910 году — на бумаге. Сейчас ленточные диаграммы строят в специальных приложениях, сервисах для управления проектами, типа Trello или Jira, конечно же, в Excel, и в том числе в нашем любимом 1C. Об этом и поговорим.

Привет, Хабр! Меня зовут Мирослава Косенко. Я  разработчик 1C в IBS. В этой статье расскажу, как диаграмма Ганта помогает визуально планировать, контролировать и анализировать процессы, будь то производство, проектные задачи или цепочки этапов в учетных подсистемах. Разберемся, что из себя представляет диаграмма и какие проблемы она помогает решать. Посмотрим на реальные примеры использования и обсудим нетиповые кейсы, а также шаг за шагом разберем, как создать и настроить диаграмму Ганта в 1С. Особое внимание уделим нюансам разработки: каки�� элементы доступны, как они взаимодействуют, какие подводные камни возникают и как их обходить.

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

Примеры использования диаграммы Ганта в 1С

График смежных этапов производства

Первый пример использования диаграммы можно найти в «1С: ERP Управление предприятием».

Для согласования выполнения производственных процессов на межцеховом уровне используют График производства, представляющий собой календарное расписание выполнения этапов производства. Формирование графика производства выполняется в рамках рабочего места Производство — Межцеховое управление — Управление очередью заказов.

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

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

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

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

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

График работы и отпусков

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

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

Пример создания в 1С

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

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

У диаграммы Ганта достаточно гибкие настройки по внешнему виду — можно настроить цвета, формат отображения дат, шри��ты и многое другое. Настройки находятся в Свойства реквизита — Объект — Настройка.

Формирование диаграммы вынесем на кнопку «Сформировать». Данные, которыми будет заполняться диаграмма Ганта, назначаются программно, поэтому по этой кнопке будем очищать саму диаграмму, а после этого получим данные для заполнения и выведем их. У диаграммы советую ставить признак «Обновление» Ложь для того, чтобы не было лишних пересчетов.

ДиаграммаГанта.Обновление = Ложь;

ДиаграммаГанта.Очистить();

Шкала времени — ось, на которой отображаются периоды времени: часы, дни, недели, месяцы. Она показывает, когда начинается и заканчивается задача. Шкалу времени можно редактировать не только в режиме конфигуратора, но и в пользовательском режиме, поэтому лучше предварительно очищать ее от возможных пользовательских настроек и заполнять так, как необходимо нам.

Чаще всего пользователь хочет видеть данные за разные интервалы времени, за день или месяц, может, год. Можно дать ему эту возможность — вынести нужные периоды в отдельные команды.

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

Процедуры установки периодичности следующие:

  1. Записываю устанавливаю Тип единицы интервала в реквизит Периодичность. 

  2. Устанавливаю пометку у кнопки периода, который мы выбрали (чтобы визуально понимать, какой период выбран).

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

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

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

Визуально это выглядит так.

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

Для указания серий используется метод Диаграммы Ганта — УстановитьСерию(<Значение>)Значение тип произвольный.

В моем случае у меня одна серия: Ремонты

Серия = ДиаграммаГанта.УстановитьСерию(«Ремонты»);

Результатом моего запроса будет иерархия, верхний уровень — Оборудование, над которым производятся работы, общий интервал работы над оборудованием.

Второй уровень — работы, которые проводили над оборудованием, время каждой работы

Третий уровень — уточнение о том, какая бригада, какой вид работы выполняла в какой период времени.

Теперь поговорим о точках.

Алгоритм работы с точками:

  1. Точка устанавливается методом УстановитьТочку(<Значение>) — тип произвольный. В моем примере это структура, в которую записаны данные, указывающие на объект работ и даты работ над объектом. 

  2. Необходимо получить значение на пересечении точки и серии для установки интервала. Для этого используем метод ПолучитьЗначение(<Точка>, <Серия>).

  3. Выводим интервал на диаграмму. Используем метод Добавить() Значения диаграммы Ганта. У интервала есть свойства Начало и Конец, заполняем их. Также можно указать Расшифровку, Цвет.

Можно создавать вложенные точки, все зависит от метода получения данных.

Свойства точек интервалов: расшифровка, цвет, текст.

Для примера покажу вывод точек и интервалов верхнего уровня:

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

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

Код: 

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

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

Для разворачивания используют метод точки РазвернутьТочку.

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

Пример:

У диаграммы Ганта как у элемента есть свои События. Вот их список:

  • ПриИзменении

  • Выбор

  • ОбработкаРасшифровки

  • ПриОкончанииРедактирования

  • ПриАктивизацииЗначения

  • ПриАктивизацииИнтервала

  • ПередСворачиванием

  • ПередРазворачиванием

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

На одном проекте диаграмма Ганта отображала работы из документа План-график ТОиР. В ПГ есть табличная часть с работами, указано оборудование, Заказ-наряд, даты, вид работ. Так как в значение можно записать структуру, то в структуре записывались значения, по которым можно определить строку.

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


Можно реализовать изменение документа из диаграммы Ганта, если иметь на него ссылку, также можно менять записи в регистрах.

Ограничения диаграммы Ганта в 1С

Диаграмма Ганта в 1C — очень удобный инструмент, но не без недостатков.

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

Еще в диаграмме Ганта нельзя создавать новые интервалы или как-то манипулировать данными, такими как серии, точки и другие, интерактивно, все зависит от разработки и от того алгоритма вывода и получения данных, который задал разработчик.

В общем, диаграмма Ганта хорошо помогает визуально увидеть последовательность и длительность работ, но внешне все же может показаться неудобной, особенно при большом объеме работ.