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