Возникла необходимость выбирать несколько десятков дат в список.
Существует такая возможность: добавить реквизит формы с типом Дата, добавить его на форму (к элементам) и там, для него, указать вид "Поле календаря".
Выделенные даты будут храниться в Элементы.Календарь.ВыделенныеДаты.
Неудобство в том, что для выделения нескольких дат необходимо удерживать нажатым Ctrl, а ещё влечёт за собой риск потерять результат.
Решил обойти это неудобство путём добавления выделенных дат в список значений и, сразу, добавления в ВыделенныеДаты всех значений списка.
Ключевой код:
&НаКлиенте
Процедура КалендарьПриИзменении(Элемент)
// в данный момент Элементы.Календарь.ВыделенныеДаты содержит только ту дату, по которой был последний клик
ВыбраннаяДата = Календарь;
НайденныйЭлемент = СписокВыбранныхДат.НайтиПоЗначению(ВыбраннаяДата);
Если НайденныйЭлемент = Неопределено Тогда // ещё нет в списке
СписокВыбранныхДат.Добавить(ВыбраннаяДата);
Иначе
СписокВыбранныхДат.Удалить(НайденныйЭлемент);
Элементы.Календарь.ВыделенныеДаты.Очистить();
КонецЕсли;
Для Каждого ЭлементСЗ Из СписокВыбранныхДат Цикл
Элементы.Календарь.ВыделенныеДаты.Добавить(ЭлементСЗ.Значение);
КонецЦикла;
КонецПроцедуры
Дополнительно навесил всякие, необходимые мне для первоначальной моей задачи, удобства:
- запрет работы с прошлыми датами (они сохраняются, но не редактируются); к текущей дате, в некоторых случаях, может быть отношение как к прошлой дате.
- возможность не только выбирать даты в календаре, но и редактировать непосредственно сам список выбранных дат
Открыть форму выбора можно так:
...
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("Даты", СписокДат.ВыгрузитьЗначения());
ПараметрыФормы.Вставить("ЗапретитьВыбиратьРедактироватьПрошлыйПериод", Ложь);
ПараметрыФормы.Вставить("ЗапретитьВыбиратьРедактироватьТекущуюДату", Ложь);
ПараметрыФормы.Вставить("ОтображатьСписокВыбранныхДат", Истина);
ПараметрыФормы.Вставить("РазрешитьРедактироватьСписокВыбранныхДат", Истина);
ОО = Новый ОписаниеОповещения("ПослеРедактированияСпискаДат", ЭтотОбъект);
ОткрытьФорму("ОбщаяФорма.ит_КалендарьДляМножественногоВыбора", ПараметрыФормы, ЭтаФорма, УникальныйИдентификатор, , , ОО, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
...
Все указанные параметры формы можно опустить - в форме есть установка их значениями по умолчанию.
В выкладываемом здесь расширении есть описываемая форма и модифицированная копия формы, в которой нет механизма контроля прошлых даты - для упрощения доработок.
Платформа 8.3.14.
Проверено на следующих конфигурациях и релизах:
- Управление торговлей, редакция 11, релизы 11.5.17.151