Разработка и Конфигурация · 11 мин
Как сделать планировщик в 1С своими руками
Как создать планировщик в 1С: настройка объекта «Планировщик», привязка данных, измерения и события. Практическая инструкция для разработчика.
Планировщик в 1С — это элемент управляемой формы, который отображает события на временной шкале: встречи, заявки на ремонт, загрузку оборудования, смены сотрудников. Он встроен в платформу, поэтому для базового сценария не нужны внешние компоненты и JavaScript-надстройки — достаточно конфигуратора и встроенного языка.
Типовая задача выглядит так: есть справочник или регистр сведений с датами начала и окончания событий, и нужно показать их пользователю в виде календаря с возможностью перетаскивания, создания и редактирования. Ниже разобран полный цикл: от подготовки данных до обработки действий пользователя и проверки результата.
Материал ориентирован на разработчика, работающего в конфигураторе 1С:Предприятие 8.3 с управляемыми формами. Примеры кода приведены для типового случая и легко адаптируются под конкретную структуру метаданных.
Что представляет собой объект «Планировщик» в платформе 1С
Планировщик — это элемент формы, связанный с объектом встроенного языка Планировщик. Он состоит из временной шкалы (день, неделя, месяц), шкалы измерений (например, сотрудники или переговорные комнаты) и элементов — событий с датой начала и окончания. Каждый элемент может иметь текст, картинку и произвольное значение, связанное с объектом базы данных.
Важно понимать: планировщик не хранит данные сам. Это только визуальный компонент. Источником данных служит ваш регистр сведений, документ или справочник, а синхронизацию между ними вы реализуете программно — при открытии формы, при создании и изменении событий.
Подготовка данных: регистр сведений для хранения событий
Прежде чем выводить планировщик, решите, где будут храниться события. Наиболее гибкий вариант — независимый регистр сведений с измерением «Ресурс» (сотрудник, комната) и реквизитами «ДатаНачала», «ДатаОкончания», «Описание». Если события уже существуют как документы (например, «Заявка на ремонт»), можно использовать их напрямую, но регистр удобнее для выборки по периоду.
Минимальный набор полей: дата начала, дата окончания, ссылка на ресурс (измерение планировщика) и текстовое представление. Дополнительно полезно хранить уникальный идентификатор события, чтобы при перетаскивании однозначно находить запись в базе.
Добавление планировщика на управляемую форму
Создайте новую общую форму или форму обработки. В дереве элементов формы добавьте реквизит формы с типом Планировщик (например, «ПланировщикДанные»), затем перетащите его в дерево элементов — платформа создаст элемент формы нужного типа автоматически.
В палитре свойств элемента задайте ключевые параметры: «ОтображатьТекущуюДату», «ЕдиницаПериодическогоВарианта» (день, неделя, месяц), «КоличествоПериодов». Для измерений укажите свойство «Измерения» — оно заполняется программно, но само свойство должно быть доступно.
После добавления элемента проверьте, что форма открывается без ошибок. Пустой планировщик отобразит сетку времени — это нормальное состояние до заполнения данными.
- 1Создайте регистр сведений с полями: Ресурс, ДатаНачала, ДатаОкончания, Описание
- 2Добавьте на форму реквизит типа «Планировщик» и соответствующий элемент формы
- 3В обработчике ПриСозданииНаСервере заполните измерения планировщика
- 4Напишите процедуру загрузки событий из регистра в элементы планировщика
- 5Подключите обработчики событий: ПриОкончанииРедактирования, ПередНачаломРедактирования, ПриСоздании
- 6Проверьте создание, перетаскивание и удаление событий в режиме предприятия
Программное заполнение: измерения и события
Измерения заполняются через коллекцию Измерения планировщика. Для каждого измерения создаются элементы — значения ресурсов. Затем в коллекцию Элементы добавляются события с датами и привязкой к значениям измерений через коллекцию ЗначенияИзмерений элемента.
Типовой код заполнения выглядит следующим образом:
// Заполнение измерений
Измерения = ПланировщикДанные.Измерения;
Измерения.Очистить();
ИзмСотрудники = Измерения.Добавить("Сотрудники");
Выборка = Справочники.Сотрудники.Выбрать();
Пока Выборка.Следующий() Цикл
ЭлементИзм = ИзмСотрудники.Элементы.Добавить(Выборка.Ссылка);
ЭлементИзм.Текст = Строка(Выборка.Наименование);
КонецЦикла;
// Заполнение событий
ПланировщикДанные.Элементы.Очистить();
Запрос = Новый Запрос("ВЫБРАТЬ Ресурс, ДатаНачала, ДатаОкончания, Описание
|ИЗ РегистрСведений.СобытияПланировщика
|ГДЕ ДатаНачала МЕЖДУ &Начало И &Конец");
// ... установка параметров и обход выборки:
НовоеСобытие = ПланировщикДанные.Элементы.Добавить(
СтрокаВыборки.ДатаНачала, СтрокаВыборки.ДатаОкончания);
НовоеСобытие.Текст = СтрокаВыборки.Описание;
НовоеСобытие.Значение = СтрокаВыборки.ИдентификаторСобытия;
НовоеСобытие.ЗначенияИзмерений.Установить(ИзмСотрудники, СтрокаВыборки.Ресурс);
Обращайте внимание на диапазон выборки: загружайте только события видимого периода, иначе при больших объёмах данных форма будет открываться медленно. Обновляйте данные при смене периода пользователем — для этого служит событие «ПриИзмененииТекущегоПериодаОтображения».
ПланировщикДанные.Элементы.Очистить();
НовоеСобытие = ПланировщикДанные.Элементы.Добавить(ДатаНачала, ДатаОкончания);
НовоеСобытие.Текст = ОписаниеСобытия;Обработка действий пользователя: создание и перетаскивание
Чтобы пользователь мог создавать события прямо в планировщике, включите у элемента формы свойства «ИзменениеЭлементов» и обработайте событие ПриОкончанииРедактирования. В нём проверьте, новый ли это элемент, и запишите данные в регистр сведений.
Перетаскивание и изменение длительности события также приходят в этот обработчик: у элемента уже новые даты начала и окончания. Ваша задача — найти запись по сохранённому идентификатору (свойство «Значение» элемента) и обновить её. Для удаления используйте событие ПередУдалением.
Полезно добавить двойной щелчок по событию для открытия полной формы редактирования — событие ПередНачаломРедактирования позволяет отменить стандартное поведение и открыть свою форму с дополнительными полями.
Настройка внешнего вида и удобства работы
Для читаемости настройте цветовое оформление событий: у элемента планировщика есть свойства «ЦветФона» и «ЦветТекста», которые можно назначать в зависимости от статуса события. Также полезны свойства всего планировщика: отображение нерабочего времени, шаг шкалы, формат времени.
Если измерений много, предусмотрите отбор: например, поле выбора подразделения, при изменении которого измерения перезаполняются только сотрудниками этого подразделения. Это заметно ускоряет работу и упрощает восприятие.
Проверка результата и типичные сценарии тестирования
После реализации пройдите базовый сценарий в режиме предприятия: откройте форму, убедитесь, что события отображаются в правильных строках измерений и на правильном времени. Создайте новое событие растягиванием мыши, закройте и заново откройте форму — событие должно сохраниться.
Затем проверьте перетаскивание между строками измерений (смена ресурса должна сохраняться), изменение длительности за край события и удаление. Отдельно протестируйте граничные случаи: событие на стыке дней, событие длительностью в несколько дней, одновременная работа двух пользователей с одним ресурсом.
Как проверить результат
Каждое событие в своей строке измерения, время совпадает с данными регистра
События смещены, попадают не в ту строку или не отображаются
После закрытия и повторного открытия формы событие на месте
Событие исчезает — запись в базу не выполняется
Даты и ресурс обновляются в регистре, пересечения блокируются
Изменения теряются или создаются накладные периоды
Альтернативы встроенному планировщику
Если требования выходят за рамки платформенного компонента (сложная диаграмма Ганта с зависимостями, drag-and-drop между несколькими планировщиками, нестандартная отрисовка), есть альтернативы: HTML-поле с JavaScript-библиотекой календаря, внешние компоненты или отчёт на СКД с диаграммой Ганта для сценариев «только просмотр».
Для большинства учётных задач — расписание сотрудников, бронирование переговорных, план загрузки оборудования — встроенного планировщика достаточно, и он выигрывает за счёт отсутствия зависимостей и простоты поддержки.
Сравнение вариантов
Подходит для большинства учётных задач; не требует внешних зависимостей, но ограничен стандартными возможностями платформы
Гибкий внешний вид и поведение; требует поддержки веб-кода и усложняет обмен данными с формой
Подходит для аналитики и просмотра загрузки; не поддерживает интерактивное редактирование событий
Что важно запомнить
Планировщик в 1С — это визуальный компонент управляемой формы, данные для которого вы храните и обновляете сами. Ключевые шаги: регистр для событий, реквизит типа «Планировщик» на форме, программное заполнение измерений и элементов, обработка событий редактирования с записью в базу и проверкой пересечений.
Часто задаваемые вопросы
Можно ли сделать планировщик без доработки конфигурации?
Частично. В некоторых типовых конфигурациях уже есть встроенные календари и планировщики (например, в решениях для CRM или управления задачами). Если типового объекта нет, потребуется доработка — добавление формы с планировщиком через расширение конфигурации, что не требует снятия конфигурации с поддержки.
Как раскрасить события по статусам?
При добавлении элемента в коллекцию «Элементы» планировщика установите его свойства «ЦветФона» и «ЦветТекста» в зависимости от статуса события, например через конструкцию Если/Иначе. Цвета задавайте из стиля или через объект Цвет, чтобы оформление оставалось единообразным.
Почему события не отображаются, хотя данные загружены?
Чаще всего причина в том, что даты события выходят за отображаемый период планировщика, либо элемент не привязан к значению измерения — тогда он может не попасть ни в одну строку. Проверьте свойство «ТекущийПериодОтображения» и заполнение «ЗначенияИзмерений» у каждого элемента.
Как ограничить редактирование для части пользователей?
Установите у элемента формы свойство «ТолькоПросмотр» в зависимости от роли пользователя (проверка через РольДоступна) или от функциональной опции. Дополнительно дублируйте проверку прав на сервере при записи — ограничение только на форме не защищает данные.
Работает ли планировщик в веб-клиенте и на мобильной платформе?
В веб-клиенте планировщик поддерживается и работает без дополнительных настроек. На мобильной платформе возможности элемента ограничены, поэтому для мобильного сценария тестируйте нужные функции отдельно и при необходимости упрощайте интерфейс.
Как обновлять планировщик при изменении данных другими пользователями?
Платформа не обновляет планировщик автоматически. Используйте подключение обработчика ожидания на форме с периодической перезагрузкой данных видимого периода, либо добавьте кнопку «Обновить». При перезагрузке сохраняйте текущий отображаемый период, чтобы пользователь не терял контекст.