Как отобразить дни недели при выборе даты в мобильном приложении 1С?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При разработке мобильных решений на платформе 1С:Предприятие 8.3 многие разработчики сталкиваются с ситуацией, когда стандартный выбор даты в мобильном клиенте или мобильном приложении открывается в виде системного барабанного переключателя (колес прокрутки с днем, месяцем и годом). При этом в самом окне выбора день недели отсутствует, что вынуждает пользователей ориентироваться наугад или сверяться со сторонними приложениями календаря. Разберем причины такого поведения платформы и рассмотрим рабочие способы вывода дней недели.

Почему нельзя настроить стандартный барабанный селектор

Выясним причину такого ограничения. При активации поля ввода даты на мобильном устройстве платформа 1С не формирует собственный графический интерфейс выбора, а вызывает нативный системный диалог операционной системы Android или iOS. Состав барабанов (день, месяц, год) жестко зашит в системном компоненте мобильной ОС.

Задание формата в свойствах реквизита или элемента формы (например, установка строки формата ДФ='дд.ММ.гггг (ддд)' в свойствах Формат или ФорматРедактирования) влияет исключительно на текстовое представление уже выбранной даты непосредственно в поле на форме. На структуру самого системного выпадающего барабана эти настройки влияния не оказывают.

Способ 1. Вывод информационного поля с днем недели рядом с датой

Рассмотрим самый простой и наименее трудозатратный способ. Если пользователю достаточно сразу после выбора даты видеть, на какой день недели она пришлась, можно разместить рядом со штатным полем даты элемент вида Поле надписи и обновлять его программно.

Разберем по шагам реализацию данного варианта:

  1. Добавим на форму реквизит ДеньНеделиСтрокой (тип Строка) или разместим декорацию/поле надписи НадписьДеньНедели рядом с полем даты в одной горизонтальной группе.
  2. В обработчик события ПриИзменении поля даты добавим вычисление строкового представления дня недели.

Посмотрим на пример клиентского кода:


&НаКлиенте
Процедура ДатаДокументаПриИзменении(Элемент)
	
	ОбновитьОтображениеДняНедели();
	
КонецПроцедуры

&НаКлиенте
Процедура ОбновитьОтображениеДняНедели()
	
	Если ЗначениеЗаполнено(Объект.Дата) Тогда
		// Формируем сокращенное наименование дня недели: Пн, Вт, Ср и т.д.
		Элементы.НадписьДеньНедели.Заголовок = Формат(Объект.Дата, "ДФ=ддд");
	Иначе
		Элементы.НадписьДеньНедели.Заголовок = "";
	КонецЕсли;
	
КонецПроцедуры

Способ 2. Создание собственной формы календаря на базе Табличного документа

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

Проанализируем структуру решения:

  1. Создаем общую форму (например, ФормаВыбораДаты) и размещаем на ней элемент Поле табличного документа.
  2. При открытии формы процедурно формируем макет сетки месяца: в шапке выводим названия колонок (Пн, Вт, Ср, Чт, Пт, Сб, Вс), а в строки выводим числа текущего выбранного месяца.
  3. Для ячеек с числами устанавливаем значение расшифровки, содержащее точную дату типа Дата.
  4. В событии Выбор табличного документа перехватываем значение расшифровки и закрываем форму с возвратом выбранного значения.

Посмотрим на пример обработки выбора даты из таблицы:


&НаКлиенте
Процедура ПолеКалендаряВыбор(Элемент, Область, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	
	Если ТипЗнч(Область.Расшифровка) = Тип("Дата") Тогда
		Закрыть(Область.Расшифровка);
	КонецЕсли;
	
КонецПроцедуры

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

Способ 3. Использование Поля HTML документа

Рассмотрим вариант реализации интерактивного календаря с помощью веб-технологий. Данный подход позволяет получить современный и отзывчивый интерфейс выбора.

  1. Размещаем на форме элемент вида ПолеHTMLДокумента.
  2. Загружаем в него компактный HTML/JavaScript-календарь с поддержкой сенсорного управления и локализацией дней недели.
  3. Передачу выбранной даты из JavaScript в контекст 1С реализуем через перехват навигации по специальной схеме URL или через предопределенные механизмы взаимодействия платформы с веб-содержимым.

Способ 4. Разработка мобильной внешней компоненты

Когда требуется сохранить именно барабанный тип выбора (колеса прокрутки), но добавить четвертую колонку с днем недели, стандартных средств платформы 1С недостаточно. В таком случае разрабатывается мобильная внешняя компонента на Java/Kotlin (для Android) или Swift/Objective-C (для iOS).

Компонента вызывает кастомный нативный диалог операционной системы, содержащий синхронизированные барабаны даты и дня недели, после чего возвращает выбранную дату обратно в клиентский код 1С.

← На главную