При разработке интерфейсов для визуализации временных интервалов, таких как графики отгрузок, планы производства или расписания задач, программисты часто выбирают объект Диаграмма Ганта. Однако стандартное поведение этого объекта в платформе 1С:Предприятие 8 может преподнести сюрпризы: например, строки и точки данных начинают неоправданно растягиваться по вертикали, превращая компактный график в нечитаемое полотно. Рассмотрим подробнее, почему это происходит и как привести диаграмму в порядок.
Разберем ситуацию, когда при малом количестве данных диаграмма пытается «заполнить» собой всё свободное пространство. Одной из основных причин такого поведения является механизм обработки комбинаций точек и серий. Проанализируем ключевое свойство ОтображатьПустыеЗначения.
По умолчанию это свойство может быть установлено в значение Истина. В этом случае система 1С резервирует графическое пространство под абсолютно все возможные пересечения объектов ТочкаДиаграммыГанта и СерияДиаграммыГанта, даже если для конкретной пары не задан ни один ИнтервалДиаграммыГанта. В результате, если у вас создано много серий, но данные есть только в одной, диаграмма все равно будет пытаться отобразить пустые строки, что приводит к «сплющиванию» полезных данных или, наоборот, к их странному растягиванию.
Чтобы исправить это, установим свойство в значение Ложь. Сделать это можно как в конфигураторе, так и программно:
// Пример программной настройки диаграммы Ганта
Элементы.ДиаграммаГанта.ОтображатьПустыеЗначения = Ложь;
После отключения этого параметра система начнет пересчитывать масштаб и состав отображаемых строк динамически, основываясь только на фактически существующих интервалах. Это позволяет избавиться от лишнего «воздуха» на графике.
Выясним причину, по которой даже после настройки свойств самой диаграммы визуальный вид может оставаться неудовлетворительным. Часто проблема кроется не в объекте данных, а в свойствах элемента формы, который выступает контейнером для диаграммы.
Проанализируем свойство Растягивать по вертикали. Если для элемента формы установлено значение Авто или Да, а на форме диаграмма является единственным крупным элементом, 1С будет пытаться распределить доступную высоту формы между имеющимися строками (точками) диаграммы. Если строк всего две или три, они растянутся на весь экран, становясь огромными.
Для решения этой задачи рассмотрим следующие шаги:
Нет.Когда мы разобрались с вертикальным растягиванием, важно обеспечить корректное отображение по горизонтали, чтобы интервалы не превращались в узкие штрихи. Для этого проанализируем коллекцию ШкалаВремени. Диаграмма может содержать несколько уровней шкал (например, годы, месяцы и дни).
Если данные сильно растянуты во времени (например, один интервал в начале года, а другой в конце), диаграмма автоматически покажет весь период. Чтобы управлять этим процессом программно, используем метод УстановитьПериодОтображения(). Посмотрим на пример:
// Установка жестких границ отображения данных
НачалоПериода = НачалоМесяца(ТекущаяДата());
КонецПериода = КонецМесяца(ТекущаяДата());
Элементы.ДиаграммаГанта.УстановитьПериодОтображения(НачалоПериода, КонецПериода);
Также обратите внимание на свойство МинимальныйИнтервал у объекта ШкалаВремени. Если установить слишком мелкий минимальный интервал при большом общем периоде, полоски данных станут нечитаемыми. Рекомендуется подбирать тип единиц шкалы (день, час, минута) в зависимости от плотности ваших данных.
Интересной особенностью 1С является отсутствие прямого свойства типа ВысотаСтрокиВПикселях для точек диаграммы Ганта. Однако мы можем косвенно влиять на размер строк, используя следующие механизмы:
1. Использование иерархии: Если в диаграмме используется дерево (отображение точек в виде иерархического списка слева), высота строк будет подстраиваться под системную высоту строк дерева, которая зависит от шрифта. Изменяя шрифт элемента формы, мы можем влиять на компактность всей диаграммы.
2. Текст в точках: Если включено отображение текста непосредственно внутри интервалов или рядом с точками, платформа автоматически увеличит высоту строки, чтобы текст оставался разборчивым. Проанализируйте необходимость вывода длинных заголовков: иногда лучше вынести их в подсказки, чтобы сделать график более плотным.
Если в вашем графике есть большие «дыры» (например, нерабочие выходные или праздники), полоски данных могут выглядеть мелкими из-за того, что пустые дни занимают место. В платформе 1С предусмотрена возможность настройки шкалы так, чтобы исключать определенные периоды. Хотя прямой «галочки» для исключения выходных нет, мы можем программно сконфигурировать шкалу, добавляя только нужные рабочие интервалы в коллекцию элементов шкалы, что позволит сфокусировать внимание пользователя только на значимых данных.
Иногда визуальный хаос возникает из-за того, что пользователь случайно меняет масштаб, зажимая клавишу Ctrl и прокручивая колесо мыши. Если ваша задача требует жестко зафиксированного вида, стоит помнить, что в типовых свойствах объекта ДиаграммаГанта нет прямого запрета на это действие. Однако мы можем контролировать состояние диаграммы, обновляя её параметры при открытии или в обработчиках ожидания, если критически важно сохранить заданный масштаб.
Таким образом, комбинируя отключение ОтображатьПустыеЗначения, ограничение растягивания контейнера и программную установку периодов отображения, мы можем добиться профессионального и удобного вида диаграммы Ганта, который будет понятен конечному пользователю.