Тип: РежимВыделенияДаты. Определяет режим выделения дат в календаре.
Полное описание, параметры и ограничения
ПолеКалендаря.РежимВыделения (CalendarBox.SelectionMode)
ПолеКалендаря (CalendarBox)
РежимВыделения (SelectionMode)
Доступен, начиная с версии 8.0.
Использование:
Чтение и запись.
Описание:
Тип: РежимВыделенияДаты.
Определяет режим выделения дат в календаре.
Доступность:
Толстый клиент.
Использование в версии:
Доступен, начиная с версии 8.0.
Методическая информация
Практические примеры
Ограничить календарь собственным октябрём
У календаря разрешены даты октября 2026. Текущая выбранная дата 4 октября не равна системной дате компьютера.
Где и как запускать
Полный модуль собственной обычной формы внешней обработки. Только толстый клиент с обычными формами.
Подготовка
Создайте отдельную внешнюю обработку с обычной формой в учебной базе. Только толстый клиент с обычными формами: не управляемая форма и не веб-клиент.
Создайте реквизит УчебныйСтатус (Строка 20) и элемент ПолеСтатуса именно вида ПолеВыбора, свяжите его Данные с этим реквизитом. Добавьте самостоятельное ПолеКалендаря с именем УчебныйКалендарь и обычную кнопку УчебнаяКоманда.
Свяжите ПриОткрытии формы и действие кнопки с одноимёнными процедурами из полного модуля. Каждый урок заменяет модуль только своей копии формы.
Поля относятся только к этой учебной форме. Нет чтения рабочих справочников, записи документов, изменения производственного календаря или передачи данных.
Процедура ПриОткрытии()
УчебныйСтатус = "draft";
Поле = ЭтаФорма.ЭлементыФормы.ПолеСтатуса;
Варианты = Новый СписокЗначений;
Варианты.Добавить("draft", "Черновик");
Варианты.Добавить("published", "Опубликован");
Поле.СписокВыбора = Варианты;
Календарь = ЭтаФорма.ЭлементыФормы.УчебныйКалендарь;
Календарь.НачалоПериодаОтображения = Дата(2026, 10, 1);
Календарь.КонецПериодаОтображения = Дата(2026, 10, 31);
Календарь.ТекущаяДата = Дата(2026, 10, 4);
Календарь.РежимВыделения = РежимВыделенияДаты.Одиночный;
Календарь.ПеремещениеПоКалендарю = Истина;
Календарь.ОтображатьТекущуюДату = Истина;
Календарь.Доступность = Истина;
Календарь.РазрешитьНачалоПеретаскивания = Ложь;
Календарь.РазрешитьПеретаскивание = Ложь;
Календарь.Подсказка = "Собственный календарь: только октябрь 2026";
КонецПроцедуры
Процедура УчебнаяКоманда(Кнопка)
Календарь = ЭтаФорма.ЭлементыФормы.УчебныйКалендарь;
Сообщить(Календарь.НачалоПериодаОтображения = Дата(2026, 10, 1));
Сообщить(Календарь.КонецПериодаОтображения = Дата(2026, 10, 31));
Сообщить(Календарь.РежимВыделения = РежимВыделенияДаты.Одиночный);
Сообщить(Календарь.ПеремещениеПоКалендарю);
Сообщить(Календарь.ОтображатьТекущуюДату);
Сообщить(Календарь.Доступность);
Сообщить(Не Календарь.РазрешитьНачалоПеретаскивания И Не Календарь.РазрешитьПеретаскивание);
Сообщить("Текущая выбранная дата: " + Строка(Календарь.ТекущаяДата));
КонецПроцедуры
Разбор по шагам
НачалоПериодаОтображения и КонецПериодаОтображения — нижняя и верхняя границы доступного перемещения.
ПеремещениеПоКалендарю разрешает перемещение вне сейчас видимых дат, но не снимает границы октября.
ТекущаяДата — текущая выбранная дата календаря. ОтображатьТекущуюДату включает строку с текущей датой.
Два запрета перетаскивания относятся к источнику и приёмнику операции; файлового импорта здесь нет.
Команда только читает свою настройку. Выбранную дату можно изменить интерактивно в пределах октября.
Как проверить результат
Семь сообщений Истина и диагностика выбранной даты.
До ручного выбора дата 04.10.2026; после выбора другого дня меняется только диагностика.
Перемещение за 01–31.10.2026 недоступно.
Ожидаемый результат
Разделены границы, разрешение перемещения и текущая выбранная дата.
На что обратить внимание
Для снятия границ используется Неопределено, а не произвольная дата 0001 года.
Ограничение UI не является серверной проверкой даты рабочего документа.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.
Управлять выделением двух собственных дат
Показываем изменяемую коллекцию ВыделенныеДаты: добавление, проверку наличия, получение и два варианта удаления.
Где и как запускать
Полный модуль собственной обычной формы внешней обработки. Только толстый клиент с обычными формами.
Подготовка
Создайте отдельную внешнюю обработку с обычной формой в учебной базе. Только толстый клиент с обычными формами: не управляемая форма и не веб-клиент.
Создайте реквизит УчебныйСтатус (Строка 20) и элемент ПолеСтатуса именно вида ПолеВыбора, свяжите его Данные с этим реквизитом. Добавьте самостоятельное ПолеКалендаря с именем УчебныйКалендарь и обычную кнопку УчебнаяКоманда.
Свяжите ПриОткрытии формы и действие кнопки с одноимёнными процедурами из полного модуля. Каждый урок заменяет модуль только своей копии формы.
Поля относятся только к этой учебной форме. Нет чтения рабочих справочников, записи документов, изменения производственного календаря или передачи данных.
Процедура ПриОткрытии()
УчебныйСтатус = "draft";
Поле = ЭтаФорма.ЭлементыФормы.ПолеСтатуса;
Варианты = Новый СписокЗначений;
Варианты.Добавить("draft", "Черновик");
Варианты.Добавить("published", "Опубликован");
Поле.СписокВыбора = Варианты;
Календарь = ЭтаФорма.ЭлементыФормы.УчебныйКалендарь;
Календарь.НачалоПериодаОтображения = Дата(2026, 10, 1);
Календарь.КонецПериодаОтображения = Дата(2026, 10, 31);
Календарь.ТекущаяДата = Дата(2026, 10, 4);
Календарь.РежимВыделения = РежимВыделенияДаты.Множественный;
КонецПроцедуры
Процедура УчебнаяКоманда(Кнопка)
Календарь = ЭтаФорма.ЭлементыФормы.УчебныйКалендарь;
Даты = Календарь.ВыделенныеДаты;
Даты.Очистить();
Даты.Добавить(Дата(2026, 10, 5));
Даты.Добавить(Дата(2026, 10, 6));
Сообщить(Даты.Количество() = 2);
Сообщить(Даты.Содержит(Дата(2026, 10, 5)));
Сообщить(Даты.Содержит(Дата(2026, 10, 6)));
Если Даты.Количество() <> 2 Тогда
ВызватьИсключение "Не выделены собственные 5 и 6 октября";
КонецЕсли;
ПерваяДата = Даты.Получить(0);
Сообщить(ПерваяДата = Дата(2026, 10, 5) Или ПерваяДата = Дата(2026, 10, 6));
Даты.Удалить(Дата(2026, 10, 5));
Сообщить(Не Даты.Содержит(Дата(2026, 10, 5)) И Даты.Содержит(Дата(2026, 10, 6)));
Если Даты.Количество() <> 1 Тогда
ВызватьИсключение "Перед удалением по индексу ожидалась одна дата";
КонецЕсли;
Даты.Удалить(0);
Сообщить(Даты.Количество() = 0);
Даты.Добавить(Дата(2026, 10, 6));
Сообщить(Даты.Количество() = 1 И Даты.Содержит(Дата(2026, 10, 6)));
КонецПроцедуры
Разбор по шагам
Режим выделения Множественный разрешает несколько дат.
Само свойство ВыделенныеДаты readonly: ссылка на коллекцию читается, вся коллекция не присваивается обратно.
Очистить удаляет выделение только этого собственного календаря, не документы с такими датами.
Получить(0) вызывается после проверки количества; порядок добавления не объявлен бизнес-порядком.
Удалить(Дата) и Удалить(Число) — разные перегрузки: сначала удаляем 5 октября по значению, затем единственный оставшийся элемент по индексу 0.
В конце выделяется только 6 октября, повторный запуск воспроизводит тот же цикл.
Как проверить результат
Семь сообщений Истина.
Количество выделенных дат 0→2→1→0→1; в конце выделено только 06.10.2026.
Ожидаемый результат
Все методы коллекции выделенных дат показаны на двух реальных учебных датах.
На что обратить внимание
Не используйте номер дня месяца вместо индекса коллекции.
Удаление выделения не удаляет данные базы и не меняет производственный календарь.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.