При разработке интерфейсов для систем записи, графиков работ или производственных календарей объект Планировщик является незаменимым инструментом. Однако стандартные настройки не всегда позволяют сразу получить желаемый вид, особенно когда требуется сгруппировать время по дням недели на вертикальной шкале. Рассмотрим, как решить задачу вывода структуры «День недели — Часы» в левой части планировщика.
Часто разработчики пытаются решить задачу простым изменением формата даты в первом элементе шкалы времени. Например, используя строку ДФ='dddd HH:mm'. Проанализируем, к чему это приводит: система начинает выводить название дня недели напротив каждой временной отсечки (8:00, 9:00 и т.д.). Это загромождает интерфейс и не создает визуальной группировки, которую мы ожидаем увидеть в качественном планировщике.
Основная сложность заключается в том, что шкала времени в 1С — это коллекция. По умолчанию она содержит только один уровень детализации. Чтобы добиться иерархии, нам необходимо программно добавить дополнительные уровни.
Для того чтобы получить вид, где день недели выступает заголовком для списка часов, нам нужно выполнить три основных действия: настроить положение шкалы, добавить элементы в коллекцию ЭлементыШкалыВремени и правильно сконфигурировать перенос заголовков.
Рассмотрим детально программную реализацию этой настройки:
// Устанавливаем положение шкалы слева (вертикально)
Планировщик.ШкалаВремени.Положение = ПоложениеШкалыВремени.Лево;
// Очищаем стандартные элементы, если они были настроены ранее
Планировщик.ШкалаВремени.Элементы.Очистить();
// Добавляем первый уровень — Дни недели
ЭлементДень = Планировщик.ШкалаВремени.Элементы.Добавить();
ЭлементДень.Единица = ТипЕдиницыШкалыВремени.День;
ЭлементДень.Кратность = 1;
ЭлементДень.Формат = "ДФ='dddd, d MMMM'";
ЭлементДень.ЦветТекста = Новый Цвет(0, 0, 0);
// Добавляем второй уровень — Часы
ЭлементЧас = Планировщик.ШкалаВремени.Элементы.Добавить();
ЭлементЧас.Единица = ТипЕдиницыШкалыВремени.Час;
ЭлементЧас.Кратность = 1;
ЭлементЧас.Формат = "ДФ='ЧЧ:мм'";
ЭлементЧас.ЦветТекста = Новый Цвет(52, 52, 52);
В данном примере мы создаем два уровня детализации. Объект Планировщик автоматически сгруппирует часы под соответствующими днями, если они входят в один и тот же временной интервал.
Чтобы планировщик не выглядел бесконечной простыней с ночными часами, важно правильно настроить отступы и перенос заголовков. Выясним, какие свойства за это отвечают:
ОтступСНачалаПереносаШкалыВремени и ОтступСКонцаПереносаШкалыВремени. Это позволит скрыть нерабочее время (например, с 00:00 до 08:00 и с 18:00 до 23:59).ОтображатьПеренесенныеЗаголовки = Истина. Это критически важное свойство — именно оно заставляет название дня недели «прилипать» к группе часов, создавая эффект объединенной ячейки.Пример настройки рабочего дня с 8:00 до 18:00:
НачалоДня = 8; // 8:00
КонецДня = 18; // 18:00
Планировщик.ОтступСНачалаПереносаШкалыВремени = НачалоДня;
Планировщик.ОтступСКонцаПереносаШкалыВремени = 24 - КонецДня;
Планировщик.ОтображатьПеренесенныеЗаголовки = Истина;
Планировщик.ОтображатьПеренесенныеЗаголовкиШкалыВремени = Ложь;
Разберем еще несколько приемов, которые сделают планировщик более профессиональным:
1. Выделение текущей даты: Параметр ОтображатьТекущуюДату позволяет пользователю мгновенно сориентироваться в текущем моменте времени. Если настройка включена, текущий день будет подсвечен в шкале.
2. Кратность и точность сетки: Если ваш бизнес-процесс подразумевает записи каждые 30 минут, установите для «часового» элемента шкалы параметр Кратность = 0.5 или переведите его в единицы ТипЕдиницыШкалыВремени.Минута с кратностью 30. Это создаст более дробную сетку внутри каждого часа.
3. Стилизация уровней: Вы можете задавать разные шрифты для дней недели и для часов. Например, сделаем дни недели жирным шрифтом:
ЭлементДень.Шрифт = Новый Шрифт(ЭлементДень.Шрифт, , , Истина);
После применения указанных настроек структура планировщика изменится. Вместо плоского списка времени вы получите древовидную структуру. Слева будет располагаться колонка с днями недели (например, «понедельник, 15 мая»), а справа от нее (в пределах того же левого блока) — вертикальный столбец с часами. Это значительно повышает юзабилити системы при работе с недельными периодами.
Проанализировав работу коллекции ШкалаВремени.Элементы, мы видим, что Планировщик — гибкий инструмент, поддерживающий практически неограниченную вложенность уровней времени, что позволяет адаптировать его под любые задачи бизнеса.