При разработке интерфейсов для записи клиентов, бронирования помещений или планирования задач программисты часто сталкиваются с необходимостью детализации временной сетки. Элемент управления Планировщик в 1С:Предприятии 8.3 обладает гибкими настройками, но его поведение не всегда очевидно. Рассмотрим подробно, как настроить вывод 30-минутных интервалов и избежать типичных ошибок при работе со шкалой времени.
Часто разработчики пытаются настроить дискретность сетки через общие свойства планировщика, такие как ЕдиницаПериодическогоВарианта и КратностьПериодическогоВарианта. Проанализируем, почему этот подход может не сработать для отображения мелких интервалов внутри дня.
Свойства периодического варианта определяют общую структуру «шага» планировщика. Если мы установим ЕдиницаПериодическогоВарианта в значение ТипЕдиницыШкалыВремени.Минута с кратностью 30, планировщик может попытаться отрисовать весь блок планирования как один 30-минутный отрезок. В случае отображения недели это приведет к тому, что визуальная структура документа будет нарушена, а колонки или строки станут нечитаемыми.
Для того чтобы получить именно детальную сетку (вертикальную или горизонтальную линейку с подписями 08:00, 08:30, 09:00), нам необходимо работать с коллекцией ШкалаВремени.
Разберем по шагам правильный алгоритм настройки. Ключевым объектом здесь является коллекция Планировщик.ШкалаВремени.Элементы. Каждый элемент этой коллекции отвечает за определенный уровень детализации шкалы.
Посмотрим на пример кода, который позволяет добиться нужного результата:
// Настраиваем общие параметры отображения (например, на неделю)
Планировщик.ЕдиницаПериодическогоВарианта = ТипЕдиницыШкалыВремени.Час;
Планировщик.КратностьПериодическогоВарианта = 24;
// Обращаемся к первому элементу шкалы времени (индексы начинаются с 0)
// Именно этот объект отвечает за визуальные деления сетки
ШкалаВремени = Планировщик.ШкалаВремени.Элементы[0];
// Устанавливаем единицу измерения - минуты
ШкалаВремени.Единица = ТипЕдиницыШкалыВремени.Минута;
// Устанавливаем кратность - 30 минут
ШкалаВремени.Кратность = 30;
Проанализируем этот код: установив кратность 30 для единицы «Минута» в элементах шкалы, мы заставляем Планировщик отрисовывать маркеры времени через каждые полчаса. При этом общая структура (день или неделя) сохраняется благодаря настройкам ЕдиницаПериодическогоВарианта.
При использовании 30-минутной детализации шкала времени становится очень длинной. Если выводить полные сутки (24 часа), пользователю придется постоянно прокручивать экран. Чтобы сделать интерфейс удобнее, выясним, как ограничить отображаемое время только рабочими часами.
Для этого в 1С предусмотрены свойства НачалоРабочегоДня и КонецРабочегоДня. Рассмотрим пример настройки рабочего времени с 08:00 до 20:00:
// Указываем границы рабочего дня
Планировщик.НачалоРабочегоДня = '00010101080000';
Планировщик.КонецРабочегоДня = '00010101200000';
// Включаем режим отображения только рабочего времени
Планировщик.ОтображатьТолькоРабочееВремя = Истина;
Использование этого метода значительно повышает юзабилити, так как на экране остаются только значимые 30-минутные интервалы, а «ночные» пустые блоки скрываются.
Иногда 30-минутные интервалы без указания часа могут сбивать пользователя с толку. Планировщик позволяет добавлять несколько уровней шкалы времени. Мы можем создать верхний уровень для часов и нижний — для минут.
Разберем, как это реализовать:
Планировщик.ШкалаВремени.Элементы.Очистить();
НовыйЭлементЧас = Планировщик.ШкалаВремени.Элементы.Добавить();
НовыйЭлементЧас.Единица = ТипЕдиницыШкалыВремени.Час;
НовыйЭлементЧас.Кратность = 1;
НовыйЭлементЧас.Формат = "ДФ=ЧЧ:мм";
НовыйЭлементМинута = Планировщик.ШкалаВремени.Элементы.Добавить();
НовыйЭлементМинута.Единица = ТипЕдиницыШкалыВремени.Минута;
НовыйЭлементМинута.Кратность = 30;
В таком случае над каждыми двумя 30-минутными делениями будет красоваться заголовок с часом, что существенно упрощает навигацию по расписанию.
Важным моментом является то, как именно подписываются интервалы. Свойство Формат у элемента шкалы времени позволяет управлять строкой представления. Например, если мы хотим видеть только минуты, можно использовать формат "ДФ=мм", а если время начала — "ДФ=ЧЧ:мм".
Если же стоит задача вывести интервал строкой вида «08:00 - 08:30», стандартного свойства Формат может быть недостаточно. В таких случаях программисты используют событие ПриВыводеТекстаШкалыВремени. В этом обработчике можно программно сформировать любую строку текста, исходя из значения текущего интервала.
Настройка ШкалаВремени влияет не только на визуальную сетку, но и на поведение пользователя при интерактивной работе. Когда мы задаем кратность 30 минут, планировщик автоматически включает «примагничивание» (snapping). При создании нового элемента мышкой или перетаскивании существующего, время начала и окончания будет автоматически округляться до 30 минут, что предотвращает появление «кривых» записей (например, с 08:01 до 08:34).
Важный совет: Если вы хотите разрешить пользователю более точное позиционирование при сохранении 30-минутной сетки, рассмотрите возможность программной обработки события ПередНачаломИзменения или ПриИзменении, где можно вручную контролировать границы периодов.
Таким образом, для реализации 30-минутной сетки в планировщике 1С необходимо четко разделять настройки периодичности (как группируются данные) и настройки шкалы времени (как они отображаются визуально). Работа через коллекцию Планировщик.ШкалаВремени.Элементы является наиболее правильным и гибким способом решения этой задачи.