Как программно реализовать и настроить диаграмму Ганта в отчете 1С 8.3?

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

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

Проблема обращения к реквизиту в модуле формы

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

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


// Неправильно:
Элементы.ДиаграммаГанта... // Это обращение к визуальному элементу (полю формы)
ДиаграммаГанта... // Переменная не определена в контексте формы

// Правильно:
Отчет.ДиаграммаГанта... // Обращение к данным реквизита отчета

После того как мы получили доступ к объекту, можно приступать к его заполнению. Важно помнить, что программное формирование диаграммы Ганта требует четкого понимания её структуры.

Структурные элементы диаграммы Ганта

Для корректного отображения данных нам необходимо заполнить три основные коллекции. Разберем их по шагам:

  1. Точки (Points): Это объекты, которые мы анализируем по вертикали. В случае отеля это будут Номера или Категории номеров.
  2. Серии (Series): Это классификация данных. Например, серии могут называться «Бронирование», «Проживание» или «Ремонт». Каждой серии можно назначить свой цвет.
  3. Значения (Values): Это сами временные интервалы. Значение всегда привязывается к конкретной точке и конкретной серии.

Рассмотрим пример кода для добавления интервала на диаграмму:


// Получаем или создаем точку (номер комнаты)
ТекущаяТочка = Отчет.ДиаграммаГанта.УстановитьТочку(Выборка.Номер);

// Получаем или создаем серию (статус брони)
ТекущаяСерия = Отчет.ДиаграммаГанта.УстановитьСерию("Проживание");

// Создаем интервал (значение)
Интервал = Отчет.ДиаграммаГанта.ПолучитьЗначение(ТекущаяТочка, ТекущаяСерия);
НовыйПериод = Интервал.Добавить();
НовыйПериод.Начало = Выборка.ДатаЗаезда;
НовыйПериод.Конец = Выборка.ДатаВыезда;
НовыйПериод.Текст = Выборка.Клиент;

Настройка временных шкал и периода отображения

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

Для автоматической подстройки диаграммы под имеющиеся в ней данные используйте свойство АвтоопределениеПолногоИнтервала. Если же вам нужно задать жесткие рамки (например, текущий месяц), используйте свойства начала и конца интервала:


Отчет.ДиаграммаГанта.АвтоопределениеПолногоИнтервала = Ложь;
Отчет.ДиаграммаГанта.НачалоПолногоИнтервала = НачалоМесяца(ТекущаяДата());
Отчет.ДиаграммаГанта.КонецПолногоИнтервала = КонецМесяца(ТекущаяДата());

Также проанализируем настройку самой шкалы. В 1С диаграмма Ганта поддерживает многоуровневые шкалы (например, верхний уровень — месяцы, нижний — дни). Это настраивается через коллекцию Шкала:


// Очистим текущие шкалы и создадим свои
Отчет.ДиаграммаГанта.ОбластьПостроения.ШкалаВремени.Элементы.Очистить();

// Добавим шкалу дней
НоваяШкала = Отчет.ДиаграммаГанта.ОбластьПостроения.ШкалаВремени.Элементы.Добавить();
НоваяШкала.Единица = ТипЕдиницыШкалыВремени.День;
НоваяШкала.Кратность = 1;
НоваяШкала.Формат = "ДФ=дд";

Использование в Системе компоновки данных (СКД)

Хотя программное заполнение дает максимальную гибкость, не стоит забывать, что в 1С 8.3 диаграмму Ганта можно настроить и через конструктор СКД. Это значительно упрощает поддержку кода. Разберем, как это сделать:

В схеме компоновки данных на вкладке «Настройки» выберите тип отчета «Диаграмма». В структуре отчета появятся специфические разделы:

Визуальное оформление и интерактивность

Чтобы отчет был «живым», необходимо настроить реакцию на действия пользователя. Рассмотрим возможность расшифровки. У элемента формы Поле диаграммы Ганта есть событие Выбор. Проанализируем ситуацию: пользователь дважды кликает по полоске бронирования, и система должна открыть документ-основание.

В обработчике события Выбор вы можете получить текущее значение. Если при заполнении диаграммы в свойство Расшифровка интервала вы записали ссылку на документ, то открыть его можно следующим образом:


Процедура ДиаграммаГантаВыбор(Элемент, Точка, Серия, Значение, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;
    Если Значение <> Неопределено Тогда
        ОткрытьЗначение(Значение.Расшифровка);
    КонецЕсли;
КонецПроцедуры

Важный момент: Для улучшения визуального восприятия рекомендуется раскрашивать интервалы. Для этого у объекта ИнтервалДиаграммыГанта используйте свойство Цвет. Например, свободные номера можно помечать зеленым цветом, а забронированные — красным или желтым. Это делает отчет интуитивно понятным для администратора отеля или менеджера.

Подводя итог, можно сказать, что работа с диаграммой Ганта в 1С требует аккуратного обращения с контекстами Отчет и Форма, а также понимания иерархии «Точка -> Серия -> Значение». Использование этих знаний позволит вам создавать мощные и наглядные инструменты для бизнес-аналитики. При необходимости автоматизации более сложных сценариев проектного планирования можно применить решение для расчета расписания и выравнивания ресурсов в 1С.

← На главную