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

24.12.18

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

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

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

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

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

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

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


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

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

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

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

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

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

См. также

"Штрихкод-информер" - мобильный ТСД и прайс-чекер в смартфоне

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

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

2880 руб.

03.12.2018    54613    137    102    

161

SALE! 25%

Что нам стоит бота построить? Нарисуем - будет жить! Графический конструктор телеграм-ботов/Telegram

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

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

13200 9900 руб.

27.12.2021    33278    80    157    

174

"Мобильный ТСД" - инвентаризация и сбор штрихкодов для iOS и Android

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

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

2000 руб.

22.04.2019    91944    511    186    

293

Магазин 15 - приемка товара по штрихкодам или инвентаризация в торговом зале

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

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

12950 руб.

30.05.2023    3388    2    0    

4

Работа с графикой в браузере (SimpleWEB). Векторный редактор

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

В SimpleWEB добавились средства для работы с графикой и отслеживание событий мыши, в онлайн редактор https://seditor.ru:1555/ добавился «Векторный редактор» на этом API. Теперь можно нарисовать схемы складов на ПК, сделать карты (*.sug-файлы) для мобильной платформы SimpleUI, выводить данные из 1С в графическом виде. Таким образом, API для работы с векторными файлами теперь есть и в веб- и в мобильной платформе, а также средства для создания и редактирования векторных файлов есть тоже в обеих платформах.

1 стартмани

20.03.2024    1471    0    informa1555    1    

39

Зачем нам 1С:Элемент

Мобильная разработка Языки и среды Бесплатно (free)

Flutter может быть использован с 1С:Предприятием для разработки кроссплатформенных мобильных приложений, обеспечивая единый интерфейс и функциональность на устройствах под управлением iOS и Android. Это позволяет создавать приложения с высокой производительностью благодаря использованию собственного движка рендеринга Flutter. Интеграция Flutter с 1С:Предприятием позволяет создавать мобильные приложения любого уровня сложности, интегрировать их в корпоративные информационные системы, а также реализовывать бизнес-логику

19.03.2024    6856    ROk_dev    56    

37

JavaScript в Simple

Мобильная разработка Бесплатно (free)

В SimpleUI и SimpleWEB, наряду с обработчиками на python и онлайн (1С и т.д.) добавляется интерпретатор JavaScript. В андроид платформе он скорее играет на поле python, т.к. является оффлайновым решением для самостоятельной обработки и расширяет аудиторию разработчиков для разработки самостоятельных решений. Дополнение к основной статье https://infostart.ru/1c/tools/1153616/

12.02.2024    1628    informa1555    0    

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


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

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

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


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

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

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

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

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


А для поля таблицы будет работать данный код?
32. markers 274 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 37 15.04.20 19:50 Сейчас в теме
(22) о как знакомо, у меня получилось победить
24. geolone 16.04.20 03:16 Сейчас в теме
25. AneJIbcuH 37 16.04.20 05:44 Сейчас в теме
34. user785225 17 24.12.23 19:51 Сейчас в теме
(21) 👋удалось победить?
в итоге ТекущийЭлемент = ТаблицаФормы. А по инструкции надо чтобы ТекущийЭлемент = ПолеФормы
26. AndrewVik 1 12.08.20 09:46 Сейчас в теме
Добрый день! Подскажите, как победить открытие экранной клавиатуры при НачалеРедактирования на поле ввода?
Нужно, что-бы экран оставался виден, а не вылазила клавиатура на половину.
Благодарю
27. Crazy_Max 82 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.
Оставьте свое сообщение