Перехват клавиш, штрихкода и других событий для Аndroid в 1С

13.11.24

Разработка - Разработка внешних компонент

Статья рассказывает о программе созданной мной для перехвата событий в системе Android и опытом ее применения. В частности, эту программу можно применить для перехвата кодов нажатых клавиш и сканирования штрихкода в ТСД.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Программа для перехвата событий для Аndroid в 1С:
.apk 5,47Mb
1
1 Скачать (1 SM) Купить за 1 850 руб.

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

Одно из понятий и терминологий Android - это Intent - "намерение", которое генерирует приложение Android. Позволю переименовать этот термин в понятный для программиста 1С - "Оповещение" и буду использовать его дальше. Для программистов 1С укажу еще: каждое такое оповещение имеет имя данных и сами данные. Причем для каждого оповещения мы можем указать несколько данных и придать им имена.

На свой работе я как-то столкнулся с проблемой передачи данных о коде нажатой клавиши в приложение для Android "Мобильный клиент" и сканируемый штрихкод. Очень хорошую идею о том, как это сделать, я посмотрел в статье "Обработка нажатия аппаратных кнопок на ТСД в мобильной платформе." На обзор было выставлено приложение, которое отлавливает код  клавиши и генерирует оповещение с определенным именем и в данных которого, передается код клавиши.  Если есть внешняя компонента, которая может отловить это оповещение, то с ее помощью мы можем прочитать код клавиши уже непосредственно в клиентском приложении 1С. Так я и поступил. Поставил на ТСД программу из вышеуказанной статьи и поставил очень замечательную внешнюю компоненту Игоря Кисиля из его статьи "Многофункциональная компонента для мобильной платформы: широковещательные сообщения (broadcasts), буфер обмена (clipboard), Bluetooth", которая может перехватить оповещение с любым именем и прочитать его данные. И все бы было хорошо, но почему то некоторые терминалы в одной и той же программе для одного и того же сервера выдавали ошибку "код ошибки "0", а другие работали.  Хотя в комментариях автор давал некоторые общие рекомендации, но все же проблема оставалась (причем для одних моделей сканеров все работало, для других нет). Тогда я попробовал установить другую внешнюю компоненту для сканера: "Использование встроенного сканера ТСД на Android в мобильном клиенте и мобильном приложении (драйвер сканера Android для 1С)". Она у меня запускалась и работала очень стабильно. Беда заключалась в том, что эта компонента может перехватить только одно оповещение и только данные, именованные одним именем. Допустим, что я настрою сканер штрихкода так, чтобы имя оповещения и имя данных при сканировании штрихкода совпадали с именем оповещения и данных, передаваемые от компоненты "Обработка нажатия аппаратных кнопок на ТСД в мобильной платформе." Но тогда, как мне понять, была ли нажата клавиша с кодом, например "123" или отсканирован штрихкод "123"?

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

Всё это побудило меня написать свой аналог приложения "Обработка нажатия аппаратных кнопок на ТСД в мобильной платформе", которое называется "Intents Catcher", которое может делать следующее.

1) Перехватывает код нажатой клавиши, кроме тех, которые добавлены в исключении

2) Перехватывает практически любое событие в Android

3) Перенаправляет данные, взятые из пп. 1) и 2) в новое событие с новым именем данных

4) Позволяет перенаправляемым данным добавить префикс и суффикс (окончание), чтобы потом по префиксу можно было понять, какое событие передано

5) Имеет изменяемые настройки для осуществления всего вышеперечисленного.

6) Позволяет посмотреть код клавиши, штрихкод в самом приложении.

 

Прилагаю инструкцию, как это все должно работать на примере компоненты из статьи  "Использование встроенного сканера ТСД на Android в мобильном клиенте и мобильном приложении (драйвер сканера Android для 1С)".

 Допустим нас есть ТСД, на котором при чтении штрих-кода генерируется оповещение c именем, например "android.intent.barcode" и данными с именем "barcode" и поменять это никак нельзя. При этом нам надо  еще умудриться в приложение передать код нажатой клавиши и что-то еще другое...

1. Ставим приложение "Intents Catcher". В нем включаем возможность перехватывать клавиши и задаем имя единого оповещения, выходящего из приложения "android.intent.catcher", чтобы внешняя компонента получила ответ из этого приложения. В компоненте устанавливаем параметр "ActionName" с таким же значением:

ОбъектДрайвера.УстановитьПараметр("ActionName", "android.intent.catcher");

 

Выбираем "Output Intent"

 

 

Экран основного окна и меню.

  Настройка имени выходящего оповещения

 

 

2. Включаем возможность перехватывать коды клавиш из пункта меню "Keys trap". Присваиваем имя данных о коде, совпадающим с именем данные, которые способна обработать внешняя компонента - "data". Добавляем префикс, например: "key=<", и суффикс ">". Тогда внешняя компонента будет получать при нажатии клавиши и кодом "8" такие данные "key=<8>"

 

Настройки перехвата клавиш. "Exclude keys" означает, что не надо обрабатывать клавиши с указанными кодами

 

3. Добавляем в приложении возможность отловить событие от сканера штрихкода, а именно событие с именем "android.intent.barcode" и именем данных "barcode" и тоже пересылаем эти данные, но уже с другим именем "data" и добавляем префикс "barcode=<" и суффикс ">". В результате внешняя компонента будет получать штриход "1234567890" как "barcode=<1234567890>".

 

   
Список перехватчиков оповещений.
Сейчас он пуст. Нажимаем "ADD INTENT"
  Настройка перехвата оповещения от сканера   Список перехватчиков после добавления перехвата оповещения от сканера

 

Далее в программе 1С по префиксу мы уже понимаем, с чем мы имеем дело с клавишей или штрихкодом. Аналогичным способом можно будет добавить практически любое событие.

4. Возвращаемся в основное окно приложения. Теперь на надо запустить сервис, который будет отлавливать нажатие клавиш и настроенные оповещения, а затем пересылать их как новое оповещение. Переходим к сервису через пункт меню "Go to service".

Соглашаемся запустить сервис(нажимаем Allow)

 

   
Список сервисов.
Наш называется "Intents catcher service".
Переходим в него.
  Переводим ползунок "Use Intents catcher service" во включенное положение.   Сервис запущен.

 

Если мы вновь захотим изменить настройки, тогда после изменения настроек программы будет необходимо перезапустить сервис, т.к. он считывает настройки при старте сервиса. Для этого надо перейти к сервису, выключить ползунок "Use Intents catcher service", а затем снова его включить.

 

5. Теперь мы сможем проверить результаты своих настроек не только в 1С, но и в самом приложении в главном окне. При нажатии клавиши или при сканировании штрихкода в окне будет отображаться данные.

 

Данные при нажатии клавиш

 

 

6. Теперь необходимо указать имя принимаемых данных компоненте:

ОбъектДрайвера.УстановитьПараметр("ExtraName", "data");

 

6. Теперь необходимо внести изменения в обработчик внешнего события от драйвера в 1С, например, так:
 

Процедура ОбработатьСобытие(Источник, Событие, Данные) Экспорт
	Если Лев(Данные,5)="key=<" И Прав(Данные,1)=">" Тогда
		КодКлавиши = Сред(Данные,6,стрДлина(Данные)-7);
		//Обрабатываем нажатие клавиши
	ИначеЕсли Лев(Данные,9) = "barcode=<" И Прав(Данные,1)=">" Тогда
		Штрихкод = Сред(Данные,10,стрДлина(Данные)-10);
		//Обрабатываем штрихкод
	КонецЕсли;
КонецПроцедуры

 

И напоследок хочу поблагодарить всех авторов указанных мною выше статей за их огромный вклад в наше общее дело!

Android "Мобильный клиент" ТСД Штрихкод "Код клавиши"

См. также

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

Медиадисплей покупателя может отображать текущую покупку на кассовом месте, показывать видеорекламу, баннеры, во время простоя разворачивать рекламу на весь экран. Экран можно использовать в качестве графического меню-борда в кафе и видеовывески. В качестве устройства отображения можно использовать Android-планшеты, смарт-телевизоры с Android, мониторы или проекторы под управлением Windows или Linux-компьютера. Linux-версия успешно запускается на одноплатных компьютерах Raspberri Pi и Orange Pi. Настраивается ЛЮБОЙ ДИЗАЙН экрана при помощи встроенного графического редактора! Решение можно масштабировать от одного экрана до тысяч экранов с централизованным управлением.

18000 руб.

30.05.2017    53748    9    69    

46

Разработка внешних компонент Телефония, SIP Программист Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Внешняя компонента выполнена по технологии Native API для 1С 8.х, обеспечивает доступ к программным АТС Asterisk (FreePBX, Elastix) через AMI интерфейс. Через него можно управлять многими функциями Asterisk (определение номеров, перевод звонков, набор телефона и т. д.)

2400 руб.

04.05.2018    46867    122    66    

66

Разработка внешних компонент Программист Платформа 1С v8.3 Конфигурации 1cv8 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 Платные (руб)

Внешняя компонента позволяет работать c TWAIN-совместимым оборудованием (сканерами, камерами) . Полностью совместима со стандартной TWAIN-компонентой из БСП и может применяться как ее замена без изменения вызовов, при этом может работать с 64-разрядной платформой, а так же имеет расширенную функциональность, например, сохранение результата непосредственно в PDF без использования сторонних утилит. Прекрасно работает на сервере, тонком клиенте и веб-клиенте (проверена работа в браузерах Google Chrome, Mozilla Firefox и Microsoft Internet Explorer).

3000 руб.

12.05.2020    28304    138    100    

90

Разработка внешних компонент Программист Платформа 1С v8.3 Платформа 1C v8.2 Платные (руб)

Внешняя компонента, позволяющая посылать команды и получать ответы по GraphQL протоколу из 1С.Может быть использована при интеграции. В 1С работает на стороне "клиента".

4600 руб.

27.06.2023    3430    2    0    

4

Разработка внешних компонент Программист Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Внешняя компонента в виде библиотеки (.dll файл), позволяющая посылать команды и получать ответы по протоколу WebSocket из 1С. Компонента работает только на стороне "клиента".

4440 руб.

22.06.2020    18181    18    33    

22

Разработка внешних компонент Программист Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Внешняя компонента позволяет печатать PDF файлы непосредственно из 1С, не используя при этом сторонних программ. Прекрасно работает на сервере, тонком клиенте и веб-клиенте. Основана на проекте PDFium из состава проекта Chromium/Chrome

1500 руб.

17.09.2018    36520    113    127    

114

Разработка внешних компонент Программист Платформа 1С v8.3 Конфигурации 1cv8 1С:Управление торговлей 11 Платные (руб)

Внешняя компонента для конвертации PDF файлов в картинки без использования дополнительных программ. Работает на сервере и в тонком клиенте.

2400 руб.

25.06.2024    910    0    2    

1
Оставьте свое сообщение