Перехват клавиш, штрихкода и других событий в ТСД (на базе Аndroid) в 1С

19.05.25

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

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

Скачать файл

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

Наименование По подписке [?] Купить один файл
Программа для перехвата событий для Аndroid в 1С:
.apk 5,47Mb
12
12 Скачать (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);
		//Обрабатываем штрихкод
	КонецЕсли;
КонецПроцедуры

 

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

P.S. В настоящее время по неизвестной мне причине удалена статья "Использование встроенного сканера ТСД на Android в мобильном клиенте и мобильном приложении (драйвер сканера Android для 1С)".

Тем не менее, данное приложение не потеряло актуальность, т.к. вместо внешней компоненты из указанной статьи можно использовать любую другую. Надо только правильно связать имя выходящего события и данных из приложения "Intent Catcher" с параметрами внешней компоненты, отвечающие за имя события и именем "приемника" данных.

 

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

См. также

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

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

3000 руб.

03.12.2018    62500    213    103    

181

Сканер штрих-кода Терминал сбора данных Мобильная разработка Монитор заказов Оптовая торговля Розничная торговля Ценообразование, анализ цен Программист Пользователь Платформа 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    103167    633    191    

337

Учет ОС и НМА Сканер штрих-кода Терминал сбора данных Логистика, склад и ТМЦ Платформа 1С v8.3 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Приложение Инвентаризация ОС и ТМЦ предназначено для инвентаризации основных средств и товарно-материальных ценностей, закреплённых за конкретным материально ответственным лицом или складом. В конфигурации 1С:Бухгалтерии 3.0 отсутствуют возможности генерации и работы со штрих-кодами для основных средств. Приложение позволяет генерировать и обрабатывать штрих-коды как для основных средств, так и для товарно-материальных ценностей (материалы, товары). В новом релизе появилась возможность работы с фотографиями объектов учета.

07.07.2023    4204    2    alfanika    0    

6

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

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

3000 руб.

12.05.2020    29643    140    100    

93

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

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

1500 руб.

17.09.2018    37585    117    128    

117

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

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

2400 руб.

04.05.2018    48191    125    66    

68

Разработка внешних компонент Системный администратор Программист Стажер Бесплатно (free)

Библиотека для работы с базами SQLite из 1С на основе внешней компоненты. Для Linux и Windows, бесплатно и с открытым исходным кодом!

14.01.2025    3210    bayselonarrend    14    

51
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. vik070777 275 07.03.25 13:50 Сейчас в теме
А Ваша программа работает для Мобильного клиента?
3. chekonst 78 19.03.25 12:51 Сейчас в теме
(1) Она для Amdroid. Ее цель - пересылать собщения в том числе и клиенту.
2. vik070777 275 09.03.25 21:54 Сейчас в теме
я так понимаю что оно должно работать на 100% с компонентой "Использование встроенного сканера ТСД на Android в мобильном клиенте и мобильном приложении (драйвер сканера Android для 1С)". которая была удалена?
4. chekonst 78 19.03.25 12:52 Сейчас в теме
(2) Да и с другими компонентами тоже, которые могут получать сообщения из Андроид.
5. vik070777 275 01.04.25 16:43 Сейчас в теме
Сколько не бъюсь так и не получается запустить данную программу, сама по себе она отлавливает кнопки и сообщает о них но взаимодействие с 1С нет ни какого. Пишу в личку разработчик не отвечает
6. chekonst 78 02.04.25 16:32 Сейчас в теме
(5) Зачем говорить неправду? Вы, вероятно, желали немедленного ответа и полагали, что я должен весь день следить за вашими сообщениями. К сожалению времени на это нет. Я захожу на этот сайт эпизодически или по извещениям на email о новых сообщениях, которые тоже приходят не сразу.
7. vik070777 275 02.04.25 17:37 Сейчас в теме
8. vik070777 275 03.04.25 12:11 Сейчас в теме
С помощью разработчика удалось победить данную проблему большое спасибо все получилось, все заработало, я был не прав(((
9. bulldog 29.04.25 19:28 Сейчас в теме
Доброго времени суток. Подскажите как отловить произвольный интент, имени я его к сожалению не знаю, внятной документации нет. есть планшет со встроенным в него сканером штрихкодов XTIOT XT802D
10. dbachinsky 356 14.05.25 08:26 Сейчас в теме
(3) Доброго времени. Подскажите, а куда именно должна быть вставлена строка "ОбъектДрайвера.УстановитьПараметр("ActionName", "android.intent.catcher");"? По описанию статьи не понятно должна ли быть как-то подключена компонента, а если это было в статье на которой основывается пример, то та статья удалена
Скачал компоненту, но никак не получается отловить событие в мобильной платформе
11. chekonst 78 14.05.25 09:42 Сейчас в теме
(10) В этой статье выложена программа для перехвата событий в андроид, а не компонента для 1С!
Компонента, для которой я использовал эту программу написана в статье другого автора "Использование встроенного сканера ТСД на Android в мобильном клиенте и мобильном приложении (драйвер сканера Android для 1С)". Ссылка на эту статью и компоненту указана в моей статье. "ОбъектДрайвера.УстановитьПараметр("ActionName", "android.intent.catcher");" относится не к моей програме, а к компоненте из указанной мной статьи.
12. dbachinsky 356 14.05.25 10:13 Сейчас в теме
(10) Статья "Использование встроенного сканера ТСД на Android в мобильном клиенте и мобильном приложении (драйвер сканера Android для 1С)" удалена. Укажите пожалуйста в шапке, что данная статья более не актуальна, так как отсутствует компонента и описание по установке. Чтобы пользователи не скачивали впустую
13. chekonst 78 19.05.25 21:59 Сейчас в теме
(12) Действительно статья удалена. Но это не значит, что это приложение нельзя использовать для других внешних компонент, которые настроены на перехват всего лишь одного события. Отличие лишь в том что функция связывания имени события вместо "ОбъектДрайвера.УстановитьПараметр("ActionName", "android.intent.catcher")" может быть другой. Это надо посмотреть в документации по компоненте.
14. dbachinsky 356 20.05.25 08:53 Сейчас в теме
(13) Без наличия внешней компоненты это решение бесполезно. Обычно такие вещи покупают люди для решения частной задачи. Я купил это и у меня нет внешней компоненты. Я не могу использовать это. Деньги потрачены впустую
15. chekonst 78 20.05.25 10:13 Сейчас в теме
Попробуйте использовать штатную компоненту от 1С для сканера. Перехватывать клавиши она не может, но в состыковке с этой вполне справиться.
(14)
16. chekonst 78 20.05.25 10:20 Сейчас в теме
Вот здесь выложен удаленная компонента https://github.com/ltfriend/AndroidScannerDriverFor1C/releases/tag/v1.0.1.2
Но, повторяю.Можно использовать любую компоненту.
Оставьте свое сообщение