К статье
Практический материал

Разработка и Конфигурация · 11 мин

Как сделать планировщик в 1С своими руками

Как создать планировщик в 1С: настройка объекта «Планировщик», привязка данных, измерения и события. Практическая инструкция для разработчика.

Планировщик в 1С — это элемент управляемой формы, который отображает события на временной шкале: встречи, заявки на ремонт, загрузку оборудования, смены сотрудников. Он встроен в платформу, поэтому для базового сценария не нужны внешние компоненты и JavaScript-надстройки — достаточно конфигуратора и встроенного языка.

Типовая задача выглядит так: есть справочник или регистр сведений с датами начала и окончания событий, и нужно показать их пользователю в виде календаря с возможностью перетаскивания, создания и редактирования. Ниже разобран полный цикл: от подготовки данных до обработки действий пользователя и проверки результата.

Материал ориентирован на разработчика, работающего в конфигураторе 1С:Предприятие 8.3 с управляемыми формами. Примеры кода приведены для типового случая и легко адаптируются под конкретную структуру метаданных.

Что представляет собой объект «Планировщик» в платформе 1С

Планировщик — это элемент формы, связанный с объектом встроенного языка Планировщик. Он состоит из временной шкалы (день, неделя, месяц), шкалы измерений (например, сотрудники или переговорные комнаты) и элементов — событий с датой начала и окончания. Каждый элемент может иметь текст, картинку и произвольное значение, связанное с объектом базы данных.

Важно понимать: планировщик не хранит данные сам. Это только визуальный компонент. Источником данных служит ваш регистр сведений, документ или справочник, а синхронизацию между ними вы реализуете программно — при открытии формы, при создании и изменении событий.

Подготовка данных: регистр сведений для хранения событий

Прежде чем выводить планировщик, решите, где будут храниться события. Наиболее гибкий вариант — независимый регистр сведений с измерением «Ресурс» (сотрудник, комната) и реквизитами «ДатаНачала», «ДатаОкончания», «Описание». Если события уже существуют как документы (например, «Заявка на ремонт»), можно использовать их напрямую, но регистр удобнее для выборки по периоду.

Минимальный набор полей: дата начала, дата окончания, ссылка на ресурс (измерение планировщика) и текстовое представление. Дополнительно полезно хранить уникальный идентификатор события, чтобы при перетаскивании однозначно находить запись в базе.

Добавление планировщика на управляемую форму

Создайте новую общую форму или форму обработки. В дереве элементов формы добавьте реквизит формы с типом Планировщик (например, «ПланировщикДанные»), затем перетащите его в дерево элементов — платформа создаст элемент формы нужного типа автоматически.

В палитре свойств элемента задайте ключевые параметры: «ОтображатьТекущуюДату», «ЕдиницаПериодическогоВарианта» (день, неделя, месяц), «КоличествоПериодов». Для измерений укажите свойство «Измерения» — оно заполняется программно, но само свойство должно быть доступно.

После добавления элемента проверьте, что форма открывается без ошибок. Пустой планировщик отобразит сетку времени — это нормальное состояние до заполнения данными.

Порядок действий
  1. 1
    Создайте регистр сведений с полями: Ресурс, ДатаНачала, ДатаОкончания, Описание
  2. 2
    Добавьте на форму реквизит типа «Планировщик» и соответствующий элемент формы
  3. 3
    В обработчике ПриСозданииНаСервере заполните измерения планировщика
  4. 4
    Напишите процедуру загрузки событий из регистра в элементы планировщика
  5. 5
    Подключите обработчики событий: ПриОкончанииРедактирования, ПередНачаломРедактирования, ПриСоздании
  6. 6
    Проверьте создание, перетаскивание и удаление событий в режиме предприятия

Программное заполнение: измерения и события

Измерения заполняются через коллекцию Измерения планировщика. Для каждого измерения создаются элементы — значения ресурсов. Затем в коллекцию Элементы добавляются события с датами и привязкой к значениям измерений через коллекцию ЗначенияИзмерений элемента.

Типовой код заполнения выглядит следующим образом:

// Заполнение измерений

Измерения = ПланировщикДанные.Измерения;

Измерения.Очистить();

ИзмСотрудники = Измерения.Добавить("Сотрудники");

Выборка = Справочники.Сотрудники.Выбрать();

Пока Выборка.Следующий() Цикл

ЭлементИзм = ИзмСотрудники.Элементы.Добавить(Выборка.Ссылка);

ЭлементИзм.Текст = Строка(Выборка.Наименование);

КонецЦикла;

// Заполнение событий

ПланировщикДанные.Элементы.Очистить();

Запрос = Новый Запрос("ВЫБРАТЬ Ресурс, ДатаНачала, ДатаОкончания, Описание

|ИЗ РегистрСведений.СобытияПланировщика

|ГДЕ ДатаНачала МЕЖДУ &Начало И &Конец");

// ... установка параметров и обход выборки:

НовоеСобытие = ПланировщикДанные.Элементы.Добавить(

СтрокаВыборки.ДатаНачала, СтрокаВыборки.ДатаОкончания);

НовоеСобытие.Текст = СтрокаВыборки.Описание;

НовоеСобытие.Значение = СтрокаВыборки.ИдентификаторСобытия;

НовоеСобытие.ЗначенияИзмерений.Установить(ИзмСотрудники, СтрокаВыборки.Ресурс);

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

bsl
ПланировщикДанные.Элементы.Очистить();
НовоеСобытие = ПланировщикДанные.Элементы.Добавить(ДатаНачала, ДатаОкончания);
НовоеСобытие.Текст = ОписаниеСобытия;

Обработка действий пользователя: создание и перетаскивание

Чтобы пользователь мог создавать события прямо в планировщике, включите у элемента формы свойства «ИзменениеЭлементов» и обработайте событие ПриОкончанииРедактирования. В нём проверьте, новый ли это элемент, и запишите данные в регистр сведений.

Перетаскивание и изменение длительности события также приходят в этот обработчик: у элемента уже новые даты начала и окончания. Ваша задача — найти запись по сохранённому идентификатору (свойство «Значение» элемента) и обновить её. Для удаления используйте событие ПередУдалением.

Полезно добавить двойной щелчок по событию для открытия полной формы редактирования — событие ПередНачаломРедактирования позволяет отменить стандартное поведение и открыть свою форму с дополнительными полями.

Настройка внешнего вида и удобства работы

Для читаемости настройте цветовое оформление событий: у элемента планировщика есть свойства «ЦветФона» и «ЦветТекста», которые можно назначать в зависимости от статуса события. Также полезны свойства всего планировщика: отображение нерабочего времени, шаг шкалы, формат времени.

Если измерений много, предусмотрите отбор: например, поле выбора подразделения, при изменении которого измерения перезаполняются только сотрудниками этого подразделения. Это заметно ускоряет работу и упрощает восприятие.

Типичные ошибки
01
Загрузка всех событий без ограничения периода — форма открывается медленно и потребляет лишнюю память
02
Отсутствие связи элемента планировщика с записью базы — после перетаскивания невозможно понять, какую запись обновлять
03
Запись в базу без проверки пересечений — ресурс оказывается занят дважды в одно время
04
Перезаполнение измерений без очистки элементов — на форме появляются дубли событий
05
Игнорирование часовых поясов при работе филиалов в разных зонах — события смещаются на шкале

Проверка результата и типичные сценарии тестирования

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

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

Контрольные точки

Как проверить результат

Отображение событий
Норма

Каждое событие в своей строке измерения, время совпадает с данными регистра

Тревожный признак

События смещены, попадают не в ту строку или не отображаются

Создание события
Норма

После закрытия и повторного открытия формы событие на месте

Тревожный признак

Событие исчезает — запись в базу не выполняется

Перетаскивание
Норма

Даты и ресурс обновляются в регистре, пересечения блокируются

Тревожный признак

Изменения теряются или создаются накладные периоды

Альтернативы встроенному планировщику

Если требования выходят за рамки платформенного компонента (сложная диаграмма Ганта с зависимостями, drag-and-drop между несколькими планировщиками, нестандартная отрисовка), есть альтернативы: HTML-поле с JavaScript-библиотекой календаря, внешние компоненты или отчёт на СКД с диаграммой Ганта для сценариев «только просмотр».

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

Сравнение вариантов

Встроенный планировщик

Подходит для большинства учётных задач; не требует внешних зависимостей, но ограничен стандартными возможностями платформы

HTML-поле с JS-календарём

Гибкий внешний вид и поведение; требует поддержки веб-кода и усложняет обмен данными с формой

Диаграмма Ганта в отчёте

Подходит для аналитики и просмотра загрузки; не поддерживает интерактивное редактирование событий

Итог

Что важно запомнить

Планировщик в 1С — это визуальный компонент управляемой формы, данные для которого вы храните и обновляете сами. Ключевые шаги: регистр для событий, реквизит типа «Планировщик» на форме, программное заполнение измерений и элементов, обработка событий редактирования с записью в базу и проверкой пересечений.

Часто задаваемые вопросы

Можно ли сделать планировщик без доработки конфигурации?

Частично. В некоторых типовых конфигурациях уже есть встроенные календари и планировщики (например, в решениях для CRM или управления задачами). Если типового объекта нет, потребуется доработка — добавление формы с планировщиком через расширение конфигурации, что не требует снятия конфигурации с поддержки.

Как раскрасить события по статусам?

При добавлении элемента в коллекцию «Элементы» планировщика установите его свойства «ЦветФона» и «ЦветТекста» в зависимости от статуса события, например через конструкцию Если/Иначе. Цвета задавайте из стиля или через объект Цвет, чтобы оформление оставалось единообразным.

Почему события не отображаются, хотя данные загружены?

Чаще всего причина в том, что даты события выходят за отображаемый период планировщика, либо элемент не привязан к значению измерения — тогда он может не попасть ни в одну строку. Проверьте свойство «ТекущийПериодОтображения» и заполнение «ЗначенияИзмерений» у каждого элемента.

Как ограничить редактирование для части пользователей?

Установите у элемента формы свойство «ТолькоПросмотр» в зависимости от роли пользователя (проверка через РольДоступна) или от функциональной опции. Дополнительно дублируйте проверку прав на сервере при записи — ограничение только на форме не защищает данные.

Работает ли планировщик в веб-клиенте и на мобильной платформе?

В веб-клиенте планировщик поддерживается и работает без дополнительных настроек. На мобильной платформе возможности элемента ограничены, поэтому для мобильного сценария тестируйте нужные функции отдельно и при необходимости упрощайте интерфейс.

Как обновлять планировщик при изменении данных другими пользователями?

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