При разработке учетных систем часто возникает задача наглядного отображения занятости ресурсов — будь то сотрудники, оборудование или автотранспорт. Если данные хранятся в регистре сведений в виде интервалов (дата начала и дата окончания), нам необходимо выбрать инструмент, который позволит вывести эти данные на ось времени, обеспечив при этом интерактивность: вывод текста внутри графических блоков и открытие детальной информации по клику. Разберем основные способы реализации такой задачи в системе 1С:Предприятие.
Этот инструмент является классическим решением для отображения временных шкал. Диаграмма Ганта позволяет сопоставить объекты (точки) с их состояниями во времени (интервалы).
Проанализируем структуру данных, которая потребуется для построения. Вам не нужно «переворачивать» или транспонировать исходную таблицу из регистра. Система сама распределит данные, если вы правильно определите три ключевые составляющие:
Рассмотрим пример программного заполнения диаграммы Ганта:
// Создаем объект Диаграмма Ганта на форме
НовыйИнтервал = Диаграмма.УстановитьЗначение(ТекущаяТочка, ТекущаяСерия);
НовыйИнтервал.Начало = Выборка.ДатаНачала;
НовыйИнтервал.Конец = Выборка.ДатаОкончания;
НовыйИнтервал.Текст = "Загрузка: " + Выборка.НомерДокумента;
НовыйИнтервал.Расшифровка = Выборка.Регистратор;
Для реализации расшифровки по щелчку мыши используйте событие Выбор. В параметрах события система передает выбранный интервал, из которого можно извлечь значение Расшифровка и открыть форму соответствующего документа.
Если вы работаете на современной платформе 1С 8.3, рекомендуем обратить внимание на объект ДиаграммаПланирования. Она во многом схожа с диаграммой Ганта, но обладает рядом преимуществ для решения прикладных задач планирования ресурсов.
Выясним основные отличия:
Иногда стандартные диаграммы кажутся слишком жесткими в плане оформления или не позволяют вывести сложную текстовую информацию внутри прямоугольника. В этом случае мы можем применить творческий подход и использовать обычный ТабличныйДокумент.
Разберем этот метод по шагам:
ЦветФона.Для реализации расшифровки в ячейку или область записывается параметр Расшифровка. Посмотрите на пример кода:
Область = Макет.ПолучитьОбласть("Строка|Интервал");
Область.Параметры.ТекстИнтервала = "Сотрудник А: Загружен";
Область.Параметры.Расшифровка = СсылкаНаРегистратор;
// Устанавливаем цвет и границы для имитации прямоугольника
Область.ТекущаяОбласть.ЦветФона = ЦветаСтиля.ОсобоеБронирование;
ТабДок.Вывести(Область);
Этот способ дает максимальный контроль над внешним видом, но требует более сложного алгоритма расчета координат (колонок) для попадания в нужные временные рамки.
Самый быстрый способ без написания кода — использование встроенных возможностей СКД. В настройках структуры отчета вы можете выбрать тип Диаграмма, а в типе диаграммы указать Диаграмма Ганта.
Проанализируем настройку в СКД:
Если требования к дизайну выходят за рамки возможностей платформы (например, нужны градиенты, анимация или специфические шрифты), можно использовать ПолеHTMLДокумента. В этом случае данные из 1С передаются в формате JSON внутрь HTML-контейнера, а отрисовка выполняется с помощью JavaScript-библиотек (например, Google Charts или D3.js).
Это наиболее трудоемкий путь, однако он позволяет создать интерфейс уровня современных веб-приложений. Взаимодействие с 1С (расшифровка) при этом реализуется через процедуру ПриНажатии в поле HTML, которая может вызвать экспортную процедуру модуля формы 1С.
Подводя итог, можно сказать следующее: для быстрого результата и стандартных задач планирования лучше всего подходит Диаграмма Ганта через СКД или программно. Если важна высокая степень кастомизации текста внутри блоков — используйте Табличный документ. Если требуется современный интерфейс с возможностью ручного управления интервалами — выбирайте Диаграмму планирования.
Во всех случаях структура данных остается линейной: Объект — ДатаНачала — ДатаОкончания. Платформа 1С берет на себя всю сложность построения осей и размещения элементов на временной шкале.