Пользователь выделяет несколько дат календаря. Кнопка читает readonly-свойство, проверяет тип и диапазон каждого значения.
Где и как запускать
Модуль новой управляемой формы учебной внешней обработки. Код содержит готовые процедуры с директивами; вставляйте на уровне модуля, не внутрь другого обработчика. Каждую задачу запускайте в отдельной копии формы.
Подготовка
Создайте отдельную внешнюю обработку с пустой управляемой основной формой. Каждый урок — полный модуль отдельной копии.
В событиях формы свяжите ПриСозданииНаСервере с процедурой из кода. Не создавайте УчебнаяДата, УчебныйКалендарь и проверочную кнопку вручную.
Код создаёт свой календарь и реквизит Дата с начальным значением 04.10.2026. Нет документов, регистров, файлов или календарей рабочего времени базы.
Для размеров в месяцах нужен режим совместимости выше Версия8_3_2. Здесь предполагается учебная база на 8.5.1.1343 без старого режима совместимости.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Новые = Новый Массив;
Новые.Добавить(Новый РеквизитФормы("УчебнаяДата", Новый ОписаниеТипов("Дата")));
ЭтаФорма.ИзменитьРеквизиты(Новые);
ЭтаФорма.УчебнаяДата = Дата(2026, 10, 4);
Календарь = Элементы.Добавить("УчебныйКалендарь", Тип("ПолеФормы"));
Календарь.Вид = ВидПоляФормы.ПолеКалендаря;
Календарь.ПутьКДанным = "УчебнаяДата";
Календарь.Заголовок = "Собственная учебная дата";
Календарь.НачалоПериодаОтображения = Дата(2026, 10, 1);
Календарь.КонецПериодаОтображения = Дата(2026, 11, 30);
Календарь.РежимВыделения = РежимВыделенияДаты.Одиночный;
Календарь.РежимВыделения = РежимВыделенияДаты.Множественный;
КомандаДействия = ЭтаФорма.Команды.Добавить("УчебноеДействие");
КомандаДействия.Действие = "УчебноеДействие";
КомандаДействия.Заголовок = "Проверить учебный календарь";
КомандаДействия.Подсказка = "Действие только над данными учебной формы";
КомандаДействия.ИзменяетСохраняемыеДанные = Ложь;
Кнопка = Элементы.Добавить("КнопкаУчебноеДействие", Тип("КнопкаФормы"));
Кнопка.ИмяКоманды = КомандаДействия.Имя;
Кнопка.Заголовок = КомандаДействия.Заголовок;
КонецПроцедуры
&НаКлиенте
Процедура УчебноеДействие(Команда)
Даты = Элементы.УчебныйКалендарь.ВыделенныеДаты;
Сообщить(Даты.Количество());
Для Каждого ВыделеннаяДата Из Даты Цикл
Если ТипЗнч(ВыделеннаяДата) <> Тип("Дата") Тогда
ВызватьИсключение "В выделении получен не тип Дата";
КонецЕсли;
Сообщить(Формат(ВыделеннаяДата, "ДФ=dd.MM.yyyy"));
Сообщить(ВыделеннаяДата >= Дата(2026, 10, 1) И ВыделеннаяДата <= Дата(2026, 11, 30));
КонецЦикла;
Сообщить("Связанный реквизит отдельно: " + Формат(ЭтаФорма.УчебнаяДата, "ДФ=dd.MM.yyyy"));
КонецПроцедуры
Разбор по шагам
Множественный режим задаётся при создании своего поля календаря.
ВыделенныеДаты имеет тип Массив и доступно только для чтения; код не присваивает новый массив и не очищает полученный.
Каждая выделенная дата проверяется на тип, затем на диапазон. Порядок массива не считается хронологическим без сортировки.
Скалярный реквизит УчебнаяДата показывается отдельно. Он не выдаётся за весь набор выделения.
Как проверить результат
Выделите 05.10 и 06.10 средствами своего клиента, затем нажмите кнопку: количество 2, обе даты и два Истина границ.
Измените выделение и повторите: код показывает фактический набор, не заранее сгенерированные даты.
Ожидаемый результат
Реальное выделение проверяется отдельно от одного связанного реквизита.
На что обратить внимание
Не присваивайте Элементы.УчебныйКалендарь.ВыделенныеДаты.
Жесты множественного выделения зависят от клиента; проверьте их вручную.
Не предполагайте, что выделение автоматически создаёт график работы в базе.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.