Как в диаграмме Ганта 1С отобразить несколько событий для одной задачи на одну дату?

Программист 1С v8.3 (Управляемые формы)
← На главную

При работе с визуализацией данных в 1С, особенно при построении графиков и планов проектов, часто используется объект ДиаграммаГанта. Это мощный инструмент для отображения задач и их длительности на временной шкале. Однако разработчики сталкиваются с ограничением: по умолчанию для одной точки (задачи) и одной серии можно отобразить только один временной интервал. Попытка добавить новое событие на ту же дату для той же точки просто затирает предыдущее.

Проанализируем ситуацию, с которой столкнулся автор вопроса: необходимо для одной задачи (например, «Подготовить решение ЦЗК о единственном поставщике») в один и тот же день (например, 08.09) отобразить несколько событий (например, создание нескольких документов «Закупочная процедура»). Как это сделать, если диаграмма Ганта заменяет одно событие другим?

Рассмотрим основные подходы к решению этой задачи, их преимущества и недостатки.

Решение 1: Создание нескольких серий для одной точки (Основной метод)

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

Логика ограничения: Диаграмма Ганта идентифицирует уникальный интервал по комбинации Точка + Серия. Если для существующей комбинации добавить новый интервал, старый будет перезаписан.

Как обойти: Чтобы показать несколько интервалов, относящихся к одной точке, нужно сделать так, чтобы для каждого интервала комбинация «Точка + Серия» была уникальной. Поскольку точка у нас одна и та же, уникальность достигается за счет создания новой серии для каждого нового события.

Разберем по шагам, как это реализовать:

  1. Определяем точку. У нас есть одна основная задача, например, «Опубликовать извещение». Это будет наша Точка в диаграмме Ганта.
  2. Создаем серии для каждого события. Вместо того чтобы использовать одну общую серию «События», мы в цикле при обходе данных (например, результата запроса по документам) создаем новую серию для каждого документа. Наименование серии может быть неважным, если вы не планируете выводить легенду, или может содержать уникальный идентификатор события.
  3. Добавляем интервалы. Каждый новый интервал (событие-документ) добавляется в диаграмму с привязкой к нашей единственной Точке, но к своей, только что созданной, уникальной Серии.

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

Улучшение визуального представления:

Чтобы такое представление не выглядело как набор разрозненных задач, а четко ассоциировалось с одной родительской точкой, можно применить небольшой визуальный трюк. Если ваша диаграмма отображает наименования точек в левой колонке, можно программно объединить ячейки с названием точки по вертикали. Таким образом, одно название задачи будет охватывать все строки с ее событиями, делая вид диаграммы логичным и аккуратным.

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

Решение 2: Использование Табличного документа

Если интерактивность диаграммы (перетаскивание интервалов, всплывающие подсказки и т.д.) не является критическим требованием для заказчика, отличной альтернативой может стать формирование отчета в виде ТабличногоДокумента.

Преимущества:

Недостатки:

Этот вариант идеально подходит для печатных форм отчетов или для вывода информации, которая не требует дальнейшего оперативного редактирования пользователем.

Альтернативные подходы и почему они могут не подойти

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

Выводы

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

Если же интерактивность не важна, а в приоритете стоит гибкость отображения, то лучшим выбором будет самостоятельное формирование графика в ТабличномДокументе.

← На главную