Представляет собой планировщик.
Доступность
Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.
Возможен обмен с сервером. Сериализуется. Может использоваться в реквизитах управляемой формы. Данный объект может быть сериализован в/из XDTO. Тип XDTO, соответствующий данному объекту, определяется в пространстве имен {http://v8.1c.ru/8.3/data/planner}. Имя типа XDTO: Planner.
Полное описание, параметры и ограничения
Представляет собой планировщик.
Практические примеры
Создать планировщик дня с двумя событиями и часовой шкалой
Полный модуль новой формы: собственный реквизит Планировщик, визуальное поле и проверка событий по устойчивым учебным ключам.
Где и как запускать
Модуль новой управляемой формы учебной внешней обработки. Код содержит готовые процедуры с директивами; вставляйте на уровне модуля, не внутрь другого обработчика. Каждую задачу запускайте в отдельной копии формы.
Подготовка
Создайте новую внешнюю обработку УчебныйПланировщик с пустой управляемой основной формой в учебной базе 8.5.1.1343. Каждый урок — отдельная копия модуля.
Не создавайте вручную реквизит УчебныйПлан и поле ПолеПлана: они создаются программно.
В свойствах формы → События назначьте ПриСозданииНаСервере одноимённой процедуре. Весь приведённый код вставьте на уровне модуля.
Сохраните собственную EPF и откройте через Файл → Открыть в тонком клиенте Windows. События относятся к фиксированной дате 15.09.2026, не к сегодняшнему дню.
Данные существуют только в памяти формы. Записи календарей, документов, пользователей, оборудования и печать не используются.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Новые = Новый Массив;
Новые.Добавить(Новый РеквизитФормы("УчебныйПлан", Новый ОписаниеТипов("Планировщик")));
ЭтаФорма.ИзменитьРеквизиты(Новые);
План = Новый Планировщик;
План.НачалоПериодаОтображения = Дата(2026, 9, 15, 9, 0, 0);
План.КонецПериодаОтображения = Дата(2026, 9, 15, 17, 0, 0);
План.ТекущиеПериодыОтображения.Очистить();
План.ТекущиеПериодыОтображения.Добавить(
План.НачалоПериодаОтображения, План.КонецПериодаОтображения);
План.ОтображатьТекущуюДату = Ложь;
План.ФиксироватьЗаголовокШкалыВремени = Истина;
План.ФиксироватьЗаголовокИзмерений = Истина;
План.ВыравниватьГраницыЭлементовПоШкалеВремени = Истина;
План.ЦветФона = Новый Цвет(255, 255, 255);
План.ЦветТекста = Новый Цвет(35, 45, 55);
План.ЦветЛиний = Новый Цвет(220, 225, 230);
План.Шрифт = Новый Шрифт("Arial", 10);
Шкала = План.ШкалаВремени;
Шкала.Положение = ПоложениеШкалыВремени.Верх;
Шкала.ПрозрачныйФон = Ложь;
Шкала.ЦветФона = Новый Цвет(240, 245, 250);
Шкала.ЦветТекста = Новый Цвет(35, 45, 55);
Пока Шкала.Элементы.Количество() > 0 Цикл
Шкала.Элементы.Удалить(Шкала.Элементы.Получить(0));
КонецЦикла;
Часы = Шкала.Элементы.Добавить();
Часы.Единица = ТипЕдиницыШкалыВремени.Час;
Часы.Кратность = 1;
Часы.Формат = "ДФ=HH:mm";
Часы.Видимость = Истина;
Часы.ОтображатьПериодическиеМетки = Истина;
Часы.ЦветЛиний = Новый Цвет(220, 225, 230);
Часы.ЦветТекста = Новый Цвет(35, 45, 55);
Часы.ЦветФона = Новый Цвет(240, 245, 250);
Прием = План.Элементы.Добавить(Дата(2026, 9, 15, 9, 0, 0), Дата(2026, 9, 15, 10, 0, 0));
Прием.Значение = "training-receipt";
Прием.Текст = "Учебный приём — 09:00–10:00";
Прием.Подсказка = "Вымышленное событие. Только память формы.";
Прием.ЦветФона = Новый Цвет(210, 235, 255);
Прием.ЦветТекста = Новый Цвет(25, 70, 115);
Прием.ЦветРамки = Новый Цвет(80, 140, 195);
Прием.Шрифт = Новый Шрифт("Arial", 10);
Прием.РежимРазрешенияРедактирования = РежимРазрешенияРедактированияЭлементаПланировщика.ЗапретитьРедактирование;
Разбор = План.Элементы.Добавить(Дата(2026, 9, 15, 11, 0, 0), Дата(2026, 9, 15, 12, 0, 0));
Разбор.Значение = "training-review";
Разбор.Текст = "Учебный разбор — 11:00–12:00";
Разбор.ЦветФона = Новый Цвет(225, 245, 220);
Разбор.РежимРазрешенияРедактирования = РежимРазрешенияРедактированияЭлементаПланировщика.ЗапретитьРедактирование;
ЭтаФорма.УчебныйПлан = План;
Поле = Элементы.Добавить("ПолеПлана", Тип("ПолеФормы"));
Поле.Вид = ВидПоляФормы.ПолеПланировщика;
Поле.ПутьКДанным = "УчебныйПлан";
Поле.Заголовок = "Учебный день 15.09.2026";
Поле.РазрешитьНачалоПеретаскивания = Ложь;
Поле.РазрешитьПеретаскивание = Ложь;
Поле.РастягиватьПоГоризонтали = Истина;
Поле.РастягиватьПоВертикали = Истина;
КомандаДействия = ЭтаФорма.Команды.Добавить("УчебноеДействие");
КомандаДействия.Действие = "УчебноеДействие";
КомандаДействия.Заголовок = "Проверить учебные события";
КомандаДействия.Подсказка = "Действие только над данными учебной формы";
КомандаДействия.ИзменяетСохраняемыеДанные = Ложь;
Кнопка = Элементы.Добавить("КнопкаУчебноеДействие", Тип("КнопкаФормы"));
Кнопка.ИмяКоманды = КомандаДействия.Имя;
Кнопка.Заголовок = КомандаДействия.Заголовок;
КонецПроцедуры
&НаКлиенте
Процедура УчебноеДействие(Команда)
События = УчебныйПлан.Элементы;
Прием = События.Найти("training-receipt");
Если Прием = Неопределено Тогда
ВызватьИсключение "Учебное событие не найдено";
КонецЕсли;
Сообщить(События.Количество() = 2);
Сообщить(Прием.Начало = Дата(2026, 9, 15, 9, 0, 0));
Сообщить(Прием.Конец - Прием.Начало = 3600);
Сообщить(События.Найти("unknown") = Неопределено);
Сообщить(Прием.Родитель = Неопределено);
Сообщить(Прием.ДатаЗамещения = Неопределено);
Сообщить(Элементы.ПолеПлана.ВыделенныеЭлементы.Количество());
КонецПроцедуры
Разбор по шагам
Данные УчебныйПлан и ПолеПлана — разные объекты: реквизит хранит план, поле показывает его по ПутьКДанным.
Верхняя и нижняя границы запрещают навигацию вне дня. ТекущиеПериодыОтображения задают именно видимый диапазон, поэтому их тоже устанавливаем явно.
Удаляем только исходные деления новой шкалы и создаём часы с кратностью 1. Формат HH:mm относится к времени, не к коду события.
Значение хранит устойчивый учебный ключ, Текст — подпись. Найти ищет ключ, не время начала и не подпись.
Разность дат измеряется в секундах: одночасовое событие даёт 3600.
Родитель и ДатаЗамещения здесь Неопределено: расписание и замещающие события не создавались. ВыделенныеЭлементы — текущее состояние выделения поля.
Как проверить результат
При открытии видны приём 09:00–10:00 и разбор 11:00–12:00, часовые деления.
По кнопке шесть булевых проверок Истина; последнее число зависит от выделения пользователем.
Нельзя перетаскивать события. Дата урока остаётся 15.09.2026 независимо от сегодняшней даты.
Ожидаемый результат
Есть самостоятельный учебный календарь с реальными данными, подписью, подсказкой, оформлением и проверкой поиска.
На что обратить внимание
ЗапретРедактирования элемента не запрещает все виды копирования/внешнего drag-and-drop; дополнительно выключены оба свойства перетаскивания поля.
Это не календарь рабочего пользователя и не запись встречи в базе.
API свойства элемента не делает учебный ключ уникальным автоматически: уникальность выбранных строк обеспечена самим примером.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.
Вставить пробное событие, переместить и убрать его без потери двух исходных
Индекс в коллекции и дата события — разные вещи. Перемещение коллекции не сдвигает встречу по времени.
Где и как запускать
Модуль новой управляемой формы учебной внешней обработки. Код содержит готовые процедуры с директивами; вставляйте на уровне модуля, не внутрь другого обработчика. Каждую задачу запускайте в отдельной копии формы.
Подготовка
Создайте новую внешнюю обработку УчебныйПланировщик с пустой управляемой основной формой в учебной базе 8.5.1.1343. Каждый урок — отдельная копия модуля.
Не создавайте вручную реквизит УчебныйПлан и поле ПолеПлана: они создаются программно.
В свойствах формы → События назначьте ПриСозданииНаСервере одноимённой процедуре. Весь приведённый код вставьте на уровне модуля.
Сохраните собственную EPF и откройте через Файл → Открыть в тонком клиенте Windows. События относятся к фиксированной дате 15.09.2026, не к сегодняшнему дню.
Данные существуют только в памяти формы. Записи календарей, документов, пользователей, оборудования и печать не используются.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Новые = Новый Массив;
Новые.Добавить(Новый РеквизитФормы("УчебныйПлан", Новый ОписаниеТипов("Планировщик")));
ЭтаФорма.ИзменитьРеквизиты(Новые);
План = Новый Планировщик;
План.НачалоПериодаОтображения = Дата(2026, 9, 15, 9, 0, 0);
План.КонецПериодаОтображения = Дата(2026, 9, 15, 17, 0, 0);
План.ТекущиеПериодыОтображения.Очистить();
План.ТекущиеПериодыОтображения.Добавить(
План.НачалоПериодаОтображения, План.КонецПериодаОтображения);
План.ОтображатьТекущуюДату = Ложь;
План.ФиксироватьЗаголовокШкалыВремени = Истина;
План.ФиксироватьЗаголовокИзмерений = Истина;
План.ВыравниватьГраницыЭлементовПоШкалеВремени = Истина;
План.ЦветФона = Новый Цвет(255, 255, 255);
План.ЦветТекста = Новый Цвет(35, 45, 55);
План.ЦветЛиний = Новый Цвет(220, 225, 230);
План.Шрифт = Новый Шрифт("Arial", 10);
Шкала = План.ШкалаВремени;
Шкала.Положение = ПоложениеШкалыВремени.Верх;
Шкала.ПрозрачныйФон = Ложь;
Шкала.ЦветФона = Новый Цвет(240, 245, 250);
Шкала.ЦветТекста = Новый Цвет(35, 45, 55);
Пока Шкала.Элементы.Количество() > 0 Цикл
Шкала.Элементы.Удалить(Шкала.Элементы.Получить(0));
КонецЦикла;
Часы = Шкала.Элементы.Добавить();
Часы.Единица = ТипЕдиницыШкалыВремени.Час;
Часы.Кратность = 1;
Часы.Формат = "ДФ=HH:mm";
Часы.Видимость = Истина;
Часы.ОтображатьПериодическиеМетки = Истина;
Часы.ЦветЛиний = Новый Цвет(220, 225, 230);
Часы.ЦветТекста = Новый Цвет(35, 45, 55);
Часы.ЦветФона = Новый Цвет(240, 245, 250);
Прием = План.Элементы.Добавить(Дата(2026, 9, 15, 9, 0, 0), Дата(2026, 9, 15, 10, 0, 0));
Прием.Значение = "training-receipt";
Прием.Текст = "Учебный приём — 09:00–10:00";
Прием.Подсказка = "Вымышленное событие. Только память формы.";
Прием.ЦветФона = Новый Цвет(210, 235, 255);
Прием.ЦветТекста = Новый Цвет(25, 70, 115);
Прием.ЦветРамки = Новый Цвет(80, 140, 195);
Прием.Шрифт = Новый Шрифт("Arial", 10);
Прием.РежимРазрешенияРедактирования = РежимРазрешенияРедактированияЭлементаПланировщика.ЗапретитьРедактирование;
Разбор = План.Элементы.Добавить(Дата(2026, 9, 15, 11, 0, 0), Дата(2026, 9, 15, 12, 0, 0));
Разбор.Значение = "training-review";
Разбор.Текст = "Учебный разбор — 11:00–12:00";
Разбор.ЦветФона = Новый Цвет(225, 245, 220);
Разбор.РежимРазрешенияРедактирования = РежимРазрешенияРедактированияЭлементаПланировщика.ЗапретитьРедактирование;
ЭтаФорма.УчебныйПлан = План;
Поле = Элементы.Добавить("ПолеПлана", Тип("ПолеФормы"));
Поле.Вид = ВидПоляФормы.ПолеПланировщика;
Поле.ПутьКДанным = "УчебныйПлан";
Поле.Заголовок = "Учебный день 15.09.2026";
Поле.РазрешитьНачалоПеретаскивания = Ложь;
Поле.РазрешитьПеретаскивание = Ложь;
Поле.РастягиватьПоГоризонтали = Истина;
Поле.РастягиватьПоВертикали = Истина;
КомандаДействия = ЭтаФорма.Команды.Добавить("УчебноеДействие");
КомандаДействия.Действие = "УчебноеДействие";
КомандаДействия.Заголовок = "Операции с событиями";
КомандаДействия.Подсказка = "Действие только над данными учебной формы";
КомандаДействия.ИзменяетСохраняемыеДанные = Ложь;
Кнопка = Элементы.Добавить("КнопкаУчебноеДействие", Тип("КнопкаФормы"));
Кнопка.ИмяКоманды = КомандаДействия.Имя;
Кнопка.Заголовок = КомандаДействия.Заголовок;
КонецПроцедуры
&НаКлиенте
Процедура УчебноеДействие(Команда)
События = УчебныйПлан.Элементы;
Прием = События.Найти("training-receipt");
Разбор = События.Найти("training-review");
НачалоПриема = Прием.Начало;
Проба = События.Вставить(1, Дата(2026, 9, 15, 10, 0, 0), Дата(2026, 9, 15, 10, 30, 0));
Проба.Значение = "training-temp";
Сообщить(События.Индекс(Проба) = 1);
События.Сдвинуть(Проба, 1);
Сообщить(События.Индекс(Проба) = 2);
Сообщить(События.Получить(2).Значение = "training-temp");
События.Удалить(2);
Сообщить(События.Найти("training-temp") = Неопределено);
СнимокПриема = Прием.Выгрузить();
СнимокРазбора = Разбор.Выгрузить();
// Очищается только новый план этой учебной формы.
События.Очистить();
Прием = События.Добавить(СнимокПриема.Начало, СнимокПриема.Конец);
Прием.Загрузить(СнимокПриема);
Разбор = События.Добавить(СнимокРазбора.Начало, СнимокРазбора.Конец);
Разбор.Загрузить(СнимокРазбора);
Сообщить(События.Количество() = 2);
Сообщить(События.Найти("training-receipt").Начало = НачалоПриема);
КонецПроцедуры
Разбор по шагам
Вставить создаёт полчаса в позиции 1. Начало/Конец задаются отдельно от этой позиции.
Сдвинуть(Проба, 1) меняет индекс с 1 на 2, но не время 10:00–10:30.
Удалить(2) удаляет только пробу. Поиск её ключа теперь возвращает Неопределено.
Выгрузить создаёт структуры исходных двух событий. Только затем очищаем собственную коллекцию.
Создаём новые элементы и Загрузить возвращает их свойства. Старые ссылки после очистки не используем.
Проверяем сохранение времени и количества. Повторный запуск не добавляет лишние события.
Как проверить результат
Все шесть булевых проверок Истина.
После кнопки остаются те же два исходных события в прежнее время.
Нажмите второй раз: по-прежнему два события, нет training-temp.
Ожидаемый результат
Девять основных операций коллекции разобраны на своих событиях с контролируемым восстановлением состояния.
На что обратить внимание
Очистить не следует переносить на загруженный рабочий календарь: он удалит все элементы его коллекции.
Выгрузить — структура свойств в памяти, не резервная копия всей информационной базы.
УдалитьНеиспользуемые — отдельный метод с зависимостью от видимого периода, здесь не используется.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.