Планировщик

Типы · Planner

Представляет собой планировщик.

Доступность

Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.
Возможен обмен с сервером. Сериализуется. Может использоваться в реквизитах управляемой формы. Данный объект может быть сериализован в/из XDTO. Тип XDTO, соответствующий данному объекту, определяется в пространстве имен {http://v8.1c.ru/8.3/data/planner}. Имя типа XDTO: Planner.

Полное описание, параметры и ограничения

Представляет собой планировщик.

Практические примеры

Создать планировщик дня с двумя событиями и часовой шкалой

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

Где и как запускать

Модуль новой управляемой формы учебной внешней обработки. Код содержит готовые процедуры с директивами; вставляйте на уровне модуля, не внутрь другого обработчика. Каждую задачу запускайте в отдельной копии формы.

Подготовка

  1. Создайте новую внешнюю обработку УчебныйПланировщик с пустой управляемой основной формой в учебной базе 8.5.1.1343. Каждый урок — отдельная копия модуля.

  2. Не создавайте вручную реквизит УчебныйПлан и поле ПолеПлана: они создаются программно.

  3. В свойствах формы → События назначьте ПриСозданииНаСервере одноимённой процедуре. Весь приведённый код вставьте на уровне модуля.

  4. Сохраните собственную EPF и откройте через Файл → Открыть в тонком клиенте Windows. События относятся к фиксированной дате 15.09.2026, не к сегодняшнему дню.

  5. Данные существуют только в памяти формы. Записи календарей, документов, пользователей, оборудования и печать не используются.

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Новые = Новый Массив;
    Новые.Добавить(Новый РеквизитФормы("УчебныйПлан", Новый ОписаниеТипов("Планировщик")));
    ЭтаФорма.ИзменитьРеквизиты(Новые);
    План = Новый Планировщик;
    План.НачалоПериодаОтображения = Дата(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. Данные УчебныйПлан и ПолеПлана — разные объекты: реквизит хранит план, поле показывает его по ПутьКДанным.

  2. Верхняя и нижняя границы запрещают навигацию вне дня. ТекущиеПериодыОтображения задают именно видимый диапазон, поэтому их тоже устанавливаем явно.

  3. Удаляем только исходные деления новой шкалы и создаём часы с кратностью 1. Формат HH:mm относится к времени, не к коду события.

  4. Значение хранит устойчивый учебный ключ, Текст — подпись. Найти ищет ключ, не время начала и не подпись.

  5. Разность дат измеряется в секундах: одночасовое событие даёт 3600.

  6. Родитель и ДатаЗамещения здесь Неопределено: расписание и замещающие события не создавались. ВыделенныеЭлементы — текущее состояние выделения поля.

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

  1. При открытии видны приём 09:00–10:00 и разбор 11:00–12:00, часовые деления.

  2. По кнопке шесть булевых проверок Истина; последнее число зависит от выделения пользователем.

  3. Нельзя перетаскивать события. Дата урока остаётся 15.09.2026 независимо от сегодняшней даты.

Ожидаемый результат

Есть самостоятельный учебный календарь с реальными данными, подписью, подсказкой, оформлением и проверкой поиска.

На что обратить внимание

  1. ЗапретРедактирования элемента не запрещает все виды копирования/внешнего drag-and-drop; дополнительно выключены оба свойства перетаскивания поля.

  2. Это не календарь рабочего пользователя и не запись встречи в базе.

  3. API свойства элемента не делает учебный ключ уникальным автоматически: уникальность выбранных строк обеспечена самим примером.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Вставить пробное событие, переместить и убрать его без потери двух исходных

Индекс в коллекции и дата события — разные вещи. Перемещение коллекции не сдвигает встречу по времени.

Где и как запускать

Модуль новой управляемой формы учебной внешней обработки. Код содержит готовые процедуры с директивами; вставляйте на уровне модуля, не внутрь другого обработчика. Каждую задачу запускайте в отдельной копии формы.

Подготовка

  1. Создайте новую внешнюю обработку УчебныйПланировщик с пустой управляемой основной формой в учебной базе 8.5.1.1343. Каждый урок — отдельная копия модуля.

  2. Не создавайте вручную реквизит УчебныйПлан и поле ПолеПлана: они создаются программно.

  3. В свойствах формы → События назначьте ПриСозданииНаСервере одноимённой процедуре. Весь приведённый код вставьте на уровне модуля.

  4. Сохраните собственную EPF и откройте через Файл → Открыть в тонком клиенте Windows. События относятся к фиксированной дате 15.09.2026, не к сегодняшнему дню.

  5. Данные существуют только в памяти формы. Записи календарей, документов, пользователей, оборудования и печать не используются.

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Новые = Новый Массив;
    Новые.Добавить(Новый РеквизитФормы("УчебныйПлан", Новый ОписаниеТипов("Планировщик")));
    ЭтаФорма.ИзменитьРеквизиты(Новые);
    План = Новый Планировщик;
    План.НачалоПериодаОтображения = Дата(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. Начало/Конец задаются отдельно от этой позиции.

  2. Сдвинуть(Проба, 1) меняет индекс с 1 на 2, но не время 10:00–10:30.

  3. Удалить(2) удаляет только пробу. Поиск её ключа теперь возвращает Неопределено.

  4. Выгрузить создаёт структуры исходных двух событий. Только затем очищаем собственную коллекцию.

  5. Создаём новые элементы и Загрузить возвращает их свойства. Старые ссылки после очистки не используем.

  6. Проверяем сохранение времени и количества. Повторный запуск не добавляет лишние события.

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

  1. Все шесть булевых проверок Истина.

  2. После кнопки остаются те же два исходных события в прежнее время.

  3. Нажмите второй раз: по-прежнему два события, нет training-temp.

Ожидаемый результат

Девять основных операций коллекции разобраны на своих событиях с контролируемым восстановлением состояния.

На что обратить внимание

  1. Очистить не следует переносить на загруженный рабочий календарь: он удалит все элементы его коллекции.

  2. Выгрузить — структура свойств в памяти, не резервная копия всей информационной базы.

  3. УдалитьНеиспользуемые — отдельный метод с зависимостью от видимого периода, здесь не используется.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.