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

24.12.18

Разработка - Мобильная разработка

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

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

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

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

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

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


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

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

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

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

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

Мобильная платформа НачатьРедактированиеЭлемента фокус ввода ТекущийЭлемент фокус

См. также

Мобильная разработка Мессенджеры и боты Платформа 1С v8.3 1С:Конвертация данных Платные (руб)

Теперь создать telegram-бота - элементарно. Достаточно просто нарисовать блок-схему телеграм-бота, и он сразу заработает. Это возможно при использовании Графического конструктора телеграм-ботов. Это единственный конструктор ботов для telegram, чье качество и функционал подтверждены фирмой 1С, есть сертификат 1С:Совместимо. Расширение в интерактивном режиме, с помощью блок-схем, позволяет с минимальными трудозатратами создать телеграм-ботов в любой конфигурации, работающей на платформе «1С:Предприятие 8.3».

13200 руб.

27.12.2021    38196    108    161    

201

Мобильная разработка Сканер штрих-кода Терминал сбора данных Управляемые формы Мобильная платформа 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Управленческий учет Платные (руб)

Сбор заказов, инвентаризация, проверка ценников, просмотр полной информации об остатках и ценах со смартфона Онлайн - все это содержит в себе решение 1С "Штрихкод-информер" (штрих-код чекер). Отправка данных со смартфона выполняется либо напрямую в открытую форму документа, отсканировав QR-код, либо в общую корзину учетной системы, не подходя к компьютеру. Кассир или оператор сможет просмотреть список присланных данных и загрузить в любую форму, поддерживающую работу с ТСД. Для работы с мобильным приложением требуется опубликовать HTTP-сервис из поставляемого расширения.

3000 руб.

03.12.2018    59291    192    103    

172

Сканер штрих-кода Терминал сбора данных Мобильная разработка Монитор заказов Оптовая торговля Розничная торговля Ценообразование, анализ цен Программист Пользователь Платформа 1С v8.3 Мобильная платформа 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Розничная и сетевая торговля (FMCG) Оптовая торговля, дистрибуция, логистика Управленческий учет Платные (руб)

Простой мобильный ТСД (терминал сбора данных) сканер для 1С для смартфонов на iOS и Android, не требующий сложных настроек и установки дополнительных программ. Обмен между Вашей 1С и мобильным приложением осуществляется через облачный сервис и расширение конфигурации. Работает с конфигурациями УТ 11, ERP, КА2, Розница 2, Розница 3, УНФ 1.6, УНФ 3.0. Полнофункциональный демо-доступ для своей конфигурации можно запросить в настройках мобильного приложения - все необходимое придет на почту автоматически.

2000 руб.

22.04.2019    97225    586    189    

321

Логистика, склад и ТМЦ Сканер штрих-кода Терминал сбора данных Мобильная разработка Платформа 1С v8.3 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Россия Бухгалтерский учет Управленческий учет Платные (руб)

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

3450 руб.

28.04.2023    9469    15    0    

9

Мобильная разработка Платформа 1С v8.3 Конфигурации 1cv8 Финансовые услуги, инвестиции Управленческий учет Платные (руб)

Мобильное приложение и конфигурация 1С для автоматической торговли на бирже через API Тинькофф банка. Достаточно задать настройки, нажать «Пуск», и робот сам торгует ежедневно.

7000 руб.

25.05.2022    4643    1    0    

6

Мобильная разработка WEB-интеграция Программист Мобильная платформа Абонемент ($m)

Экспериментальный релиз и простенький скрипт к нему закрывает потребности в любых видах синхронизации между устройствами Simple и между Simple и бек-системами (например 1С). По сути – это очень простой python-скрипт, который можно запустить на доступной машине, сервере или VPS и он будет связывать клиентские устройства между собой и с 1С или другими бек-системами. В самой платформе появилось для этого множество доработок для поддержки стабильного постоянного соединения, докачки больших файлов и работе в фоне. Дополнение к основной статье https://infostart.ru/1c/tools/1153616/

1 стартмани

23.08.2024    1215    6    informa1555    1    

13

Мобильная разработка Мобильная платформа Абонемент ($m)

В этом релизе собрано много нового из области интерфейса, связи, хранения и важные новые способы управления. Дополнение к основной статье https://infostart.ru/1c/tools/1153616/

1 стартмани

25.06.2024    2607    29    informa1555    0    

33
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. user623969_dusa 24.12.18 13:23 Сейчас в теме
желательно указывать версии платформ, на которых такая особенность проявляется - мобильный версий 10 11 и 12 ведут себя очень по-разному
2. Crazy_Max 83 24.12.18 13:30 Сейчас в теме
(1) Да, Вы правы, наверное.
Я столкнулся с этой проблемой на последней на данный момент моб. платформе: 8_3_13_45.
3. peterxx 23 24.12.18 15:11 Сейчас в теме
Спасибо! Тоже бился целый день с этим, а все оказалось проще, чем думается.
4. acanta 24.12.18 15:57 Сейчас в теме
Cпасибо, хорошая вещь. Интересно, вот в старых версиях во многих программах был режим "Помощника" или "Мастера". Например сначала открывается окно, в которое вводим наименование. Затем оно закрывается, открывается окно ввода адреса и номера телефона. И.т.п.
Вы считаете это удобным, или все-таки народ предпочитает заполнять данные по тем сведениям что есть в каком-то хаотичном порядке?
12. Crazy_Max 83 25.12.18 04:48 Сейчас в теме
(4)
ете это удобным, или


Считаю это уместным на моибльной платформе. Но, разумеется, всё зависит от задачи. В моем случае - ПО для ТСД, сам бог велел работать в режиме мастера.
5. CyberCerber 872 24.12.18 16:37 Сейчас в теме
Спасибо за подсказку, но для меня еще одна проблема с этим осталась...
В какой момент выполнять вашу функцию ПодготовитьПолеВвода()?
В сканерах для 1С сделано, что при считывании штрихкода передается F7 + ШК + Enter.
Вот как отловить это событие, если в МП нельзя вешать сочетания клавиш на кнопки?
18. markers 277 17.01.19 05:11 Сейчас в теме
(5)
ПодготовитьПолеВвода

Так-как в мобильном приложении F7 ни как не обрабатывается. вам проще сделать сразу активным поле ввода штрихкода (обсуждаемыми тут методами) и просто отрезать первый символ клавиши F7, либо проще вообще сканер перенастроить чтобы у него не было префикса
6. CyberCerber 872 24.12.18 17:11 Сейчас в теме
Ну и еще одна вечная проблема - это как убрать экранную клаву при сканировании
11. Crazy_Max 83 25.12.18 04:45 Сейчас в теме
(6)У меня в ТСД есть возможность отключить экранную клавиатуру. Настраивается в момент ввода в настройках самой экранной клавиатуры.
13. dewersia 400 25.12.18 09:04 Сейчас в теме
(6)Была подобная беда на smart droid. Для аппаратной клавиатуры сделал сервис перехватывающий нажатие клавиш и передающий событие в мобильное приложение. Собственно на форме отключил редактирование полей и обрабатываю только событие нажатия кнопки. Таким образом клавиатура не появляется, а ввод данных производится только с аппаратной клавиатуры. Костыль, но без них пока никак )
7. w.r. 650 24.12.18 18:13 Сейчас в теме
Извиняюсь за оффтоп, но почему многие программисты, примеры кода которых я здесь видел, любят обращаться к элементам текущей формы через ЭтаФорма, если работаешь с одной формой. Можно же написать вместо ЭтаФорма.ТекущийЭлемент просто ТекущийЭлемент
10. Crazy_Max 83 25.12.18 04:44 Сейчас в теме
(7)Отношу такие темы к холиварным.
29. Brawler 458 05.03.21 10:26 Сейчас в теме
(7) Код становится более не пробиваемый и более понятный, используя ЭтаФорма разработчик точно знает, что обращается к элементу внутри ЭтаФорма, а не к какому либо еще локально объявленному или глобально объявленному.
8. MuI_I_Ika 1121 24.12.18 18:35 Сейчас в теме
>У меня поиск этого решения занял долгие два дня ломания головы о монитор.

Улыбнуло, многие над этим месяцы убивают. Не удалось найти решение как сделать активным поле поиска для табличного поля?
toliman; sleemp; +2 Ответить
9. Crazy_Max 83 25.12.18 04:43 Сейчас в теме
(8)Не стояло такой задачи, если честно. Но можно "повешать котелок на гвоздик": сделать своё поле поиска. Не?
16. MuI_I_Ika 1121 25.12.18 10:33 Сейчас в теме
(9)
е стояло такой задачи, если честно. Но можно "повешать котелок на гвоздик": сделать своё поле поиска.


Не то что они сделали реально удобное, и свой костыль будет явно хуже.
14. dewersia 400 25.12.18 09:07 Сейчас в теме
Маленькое дополнение, метод рабочий, но при сложной форме если метод использовать при открытии формы, элемент не активируется, видимо из-за того, что еще не успевает отрисоваться. Получалось побеждать с помощью подключения обработчика ожидания.
matashin; Iscarimet; tricolor; sleemp; Crazy_Max; +5 Ответить
15. Crazy_Max 83 25.12.18 09:27 Сейчас в теме
(14) Хм... Спасибо! Если столкнусь с такой проблемой, буду иметь ввиду!
17. markers 277 17.01.19 05:03 Сейчас в теме
Можно ещё проще:
	ПодключитьОбработчикОжидания("ЗапуститьАктивациюПоляШтрихкода", 0.00000001, Истина);

&НаКлиенте
Процедура ЗапуститьАктивациюПоляШтрихкода()

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

КонецПроцедуры // ЗапуститьАктивациюПоляШтрихкода()
Показать

Данная проблема возникает из-за того, что когда мы устанавливаем текущий элемент, форма так скажем ещё не активна и обработка установки текущего элемента просто не происходит. Данный же код выполняется когда уже форма готова и при этом не вносит каких-то заметных задержек. Мне кажется установка видимости медленней работает чем этот код.
PS: Сори, не заметил что в (14) уже посоветовали это
matashin; Iscarimet; tricolor; shitskov.a.a; sleemp; user1021675; kabanoff; user1058933; Dilovar9; +9 Ответить
31. andrey314 14 14.02.22 22:55 Сейчас в теме
(17)
НачатьРедактированиеЭлемента


А для поля таблицы будет работать данный код?
32. markers 277 15.02.22 02:55 Сейчас в теме
(31) По логике - должно. Но не проверял.
19. alexovik 18 22.01.19 23:24 Сейчас в теме
Это топик наверное все обсуждали именно мобильное приложение, так как я прочитал и попробывал сделать это на мобильном клиенте и через обработчик ожидание и без него, через видимости, как автор топика написал, все равно не работает установка курсора на штриход после считывания...
20. ioan9117 09.04.19 17:07 Сейчас в теме
(19) Не правда. Работает в мобильном клиенте. Только что сделал
вот код:

&НаКлиенте
Процедура ШКПриИзменении(Элемент)
	ШКПриИзмененииНаСервере();

	ЭтаФорма.ОбновитьОтображениеДанных();
	ЭтаФорма.Элементы.ШК.АктивизироватьПоУмолчанию = Истина; //*- не факт что надо
	ПодготовитьПолеВвода();
КонецПроцедуры

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	ЭтаФорма.Элементы.ШК.РедактированиеТекста = Истина;
	ПодготовитьПолеВвода();
КонецПроцедуры

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


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


работает 8.3.12
21. nezhensky 19.03.20 14:25 Сейчас в теме
Подскажите а как НачатьРедактированиеЭлемента(); если у меня поле ввода из табличной части?

ЭтаФорма.ТекущийЭлемент = Элементы.ТабличнаяЧасть1.ТекущийЭлемент;
в итоге ТекущийЭлемент = ТаблицаФормы. А по инструкции надо чтобы ТекущийЭлемент = ПолеФормы. Но вот как для таблиц....?

ЭтаФорма.ТекущийЭлемент = Элементы.ТабличнаяЧасть1ШтрихКод;
тоже ТекущийЭлемент = ТаблицаФормы.
22. geolone 14.04.20 09:56 Сейчас в теме
(21) Тоже столкнулся с такой проблемой, сканирую штрих коды в табличную часть и хотел чтобы таблица автоматически прокручивалась при добавлении новых строк, но никак не могу победить.
23. AneJIbcuH 40 15.04.20 19:50 Сейчас в теме
(22) о как знакомо, у меня получилось победить
24. geolone 16.04.20 03:16 Сейчас в теме
25. AneJIbcuH 40 16.04.20 05:44 Сейчас в теме
34. user785225 26 24.12.23 19:51 Сейчас в теме
(21) 👋удалось победить?
в итоге ТекущийЭлемент = ТаблицаФормы. А по инструкции надо чтобы ТекущийЭлемент = ПолеФормы
26. AndrewVik 1 12.08.20 09:46 Сейчас в теме
Добрый день! Подскажите, как победить открытие экранной клавиатуры при НачалеРедактирования на поле ввода?
Нужно, что-бы экран оставался виден, а не вылазила клавиатура на половину.
Благодарю
27. Crazy_Max 83 13.08.20 08:56 Сейчас в теме
(26) У нас на ТСД стояло приложение экранной клавиатуры, в котором можно было настроить его скрытие. На обычных смартфонах не пробовал подобрать подходящее приложение, и не боролся с этой проблемой.
28. Rif_md 6 06.09.20 20:08 Сейчас в теме
Отличное решение! Спасибо! Я тестировал на мобильной платформе 8.3.17.67, и сработал код чуть проще
&НаКлиенте
Процедура АктивироватьШтрихкод()
	Штрихкод = "";
	Элементы.Штрихкод.Видимость = Ложь;
	Элементы.Штрихкод.Видимость = Истина;
	ЭтаФорма.ТекущийЭлемент = Элементы.Штрихкод;
	ЭтаФорма.НачатьРедактированиеЭлемента();
КонецПроцедуры


Этот код вызывается из процедуры ПриОткрытии() и из ШтрихкодПриИзменении()
Хотя всё это похоже на недоработку мобильной платформы со стороны 1С, ведь на ПК достаточно лишь
Штрихкод = "";
ЭтаФорма.ТекущийЭлемент = Элементы.Штрихкод;
FaithNoMore; +1 Ответить
30. yurarud37 21.03.21 11:09 Сейчас в теме
Большое человеческое спасибо!
33. user1150141 29.11.22 07:55 Сейчас в теме
Может кому пригодится. Используем способ из этой статьи, но на ТСД с эмуляцией клавиатуры можно сделать так.
В настройках ТСД в качестве префикса и суффикса установить "enter". В коде на форме установить

 ЭтаФорма.ТекущийЭлемент = Элементы.Штрихкод;


При сканировании будет эмулироваться "enter" (активироваться и начинаться редактирование нашего элемента), вводиться код и применяться (обработка ПриИзменении). После сканирования можно допустим установить другое поле в качестве текущего элемента, тогда поле снова станет не активным. (Если нужно не забыть вернуть необходимое нам поле в качестве текущего)

Пока не используем, но как идея. Из плюсов не надо бороться с экранной клавиатурой, она закрывается, когда смещаем фокус на другой элемент. Тестировал на версии 8.3.22.38.
Оставьте свое сообщение