Каталог решений - Мобильное приложение, управление фокусом ввода. Тем, кто не смог победить с помощью "НачатьРедактированиеЭлемента"

Мобильное приложение, управление фокусом ввода. Тем, кто не смог победить с помощью "НачатьРедактированиеЭлемента"

Мобильное приложение, управление фокусом ввода. Тем, кто не смог победить с помощью "НачатьРедактированиеЭлемента"

В наличии

Для того, чтобы пользователю не приходилось тапать по полю ввода, чтобы ввести в него значение с клавиатуры (или сканера штрихкода, что весьма актуально), разработчики 1С реализовали функцию «НачатьРедактированиеЭлемента», которая, по-хорошему, должна это делать программно.
Однако, отрабатывает эта функция некорректно…

Категория:

Описание

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

Однако, отрабатывает эта функция некорректно: достаточно изменить любой другой элемент управления на форме(изменить надпись, переключить текущую страницу или что-либо другое), и фокус ввода теряется без возможности вернуть его на место свойством "ТекущийЭлемент" формы и вызовом функции "НачатьРедактированиеЭлемента". Фокус просто ничего не слушается.

Три дня ломая голову над этой проблемой, нащупал быстрое и действенное решение, позволяющее вернуть фокус в то поле, которое нам нужно, и корректно вызвать функцию "НачатьРедактированиеЭлемента": для того, чтобы это сделать, нужно ПОСЛЕ всех изменений на форме отключить видимость необходимого нам поля ввода, затем снова включить, выставить это поле в качестве текущего, и уж только после этого вызвать функцию "НачатьРедактированиеЭлемента". Выполнять эти действия достаточно прямо &НаКлиенте. 

Я достаточно жестко "веду" пользователя своего приложения, постоянно указывая следующее действие (такая специфика приложения), и написал следующую процедуру, которую вызываю каждый раз по окончании всех действий на форме:

&НаКлиенте
Процедура ПодготовитьПолеВвода()
	ОчиститьПолеВводаНаСервере();
	Элементы.ПолеВвода.ОбновитьТекстРедактирования();
	Элементы.ПолеВвода.Видимость = Ложь;
	Элементы.ПолеВвода.Видимость = Истина;
	ЭтаФорма.ТекущийЭлемент = Элементы.ПолеВвода;
#Если МобильноеПриложениеКлиент Тогда	
	НачатьРедактированиеЭлемента();
#КонецЕсли
КонецПроцедуры


&НаСервере
Процедура ОчиститьПолеВводаНаСервере()
	ПолеВвода = "";
КонецПроцедуры

У меня поиск этого решения занял долгие два дня ломания головы о монитор.

Кстати, чур не смеяться над тем, зачем я хожу на сервер, чтобы очистить поле ввода. Это ухищрение нужно для того, чтобы можно было корректно очистить поле ввода на форме при отключенном автообновлении этого элемента. А это в свою очередь необходимо, чтобы поле ввода не "дурило" при изменении других элементов формы. В общем — всё непросто в мобильном приложении. Сырой продукт еще. Но нужный! Так что, мыши плакали и кололись…

Буду очень рад, если кому-то этот опыт пригодится!

PS: столкнулся с данной проблемой на последней на данный момент версией мобильной платформы: 8.3.13.45.

has been added to your cart:
Оформление заказа