Буланова Юлия | Руководитель продуктов | ООО "Серебряная Пуля"

«Мне сверху видно всё, ты так и знай» или автоматизация процесса управления портфелем проектов ИТ компании»

Во время доклада Вы узнаете о: • проблемах автоматизации управления портфелем проектов SCRUM команды; • возможностях управления внешними и внутренними разработками с помощью GitLab, об имплементации для GitLab глоссария PMO/ALM процессов; • возможностях типовых конфигураций 1С для верхнеуровневого управления процессами, целями и работой с бюджетами; • реально работающем архитектурном решении – интеграции 1С и GitLab.

Android service перехвата сообщений Broadcast со сканера штрих-кодов в 1С

Программирование - Мобильные приложения

Service перехвата сообщений Broadcast со сканера штрих-кодов в мобильную платформу 1С (эмуляция внешнего события). Позволяет получать и обрабатывать Штрих-коды не в разрыв клавиатуры (определенное активное окно), а "под капотом". Имеет некоторые настройки.

Более новая версия (продолжение) тут

Предыстория аналогична как //infostart.ru/public/579674/ Спасибо за идеи Meteorage

Закупили КПК Caribe PL-40. Не плохой такой девайс. Написали на него мобильное приложение для складского учета. Вот только сканировал он в разрыв клавиатуры и в 1С постоянно приходилось тапать в окно для ввода штрих-кода. Было перепробовано много способов победить данный недуг. В частности и  //infostart.ru/public/547851/ (спасибо автору dewersia ). Смотрели ACode tools. Он не работает (на сколько мне известно) со сторонними КПК и тем более со встроенными сканерами. Конечно, был получен неоценимый опыт изучая его код (за что огромное спасибо автору DitriX).

Возможности сервиса:

  1. Автостарт после загрузки КПК (OnBootReceiver);
  2. Старт/Стоп сервиса в интерфейсе приложения;
  3. Назначение "имени сообщения" от сканера. У разных КПК они различаются. К примеру, у нашего это "scan.rcv.message", у Urovo - "urovo.rcv.message". Нужно конкретно знать какое сообщение от сканера выдается бродкастом на конкретном аппарате.
  4. Назначение "1C Event ID". Это как раз тот эвент, по которому 1С будет определять что это прилетел к ней Штрих-код. По-умолчанию это 1.
  5. Назначение "1C Base ID". Используется если в списке выбора баз более одной базы. Если только одна - оставить поле пустым. Идентификатор брать с файла ibases.v8i.

В мобильном приложении обязательно должна быть инициализация приема внешних сообщений (Пример из ACode tools):

В модуле управляемого приложения:

Процедура ПриНачалеРаботыСистемы()
	ОбщегоНазначенияКлиент.ПодключитьГлобальноеСобытиеОповещения();
КонецПроцедуры

В модуле ОбщегоНазначенияКлиент


Процедура ПодключитьГлобальноеСобытиеОповещения() Экспорт
	#Если МобильноеПриложениеКлиент Тогда
		Оп = Новый ОписаниеОповещения("ОбработчикЛокальныхУведомлений", ЭтотОбъект);
		ДоставляемыеУведомления.ПодключитьОбработчикУведомлений(Оп);  
	#КонецЕсли
КонецПроцедуры

Процедура ГлобальноеСобытиеОповещения(Сообщение, ЧтоТоЕще = "") Экспорт

	Попытка
		Отправитель = Число(Сообщение.Отправитель);
	Исключение
		Возврат
	КонецПопытки;
	Если Отправитель = 1 Тогда //тут 1C Event ID из сервиса
		Оповестить(Формат(Отправитель,"ЧГ="),Сообщение.Текст, "Сканирование ШК");
	Иначе 
		Возврат
	КонецЕсли;
КонецПроцедуры

Процедура ОбработчикЛокальныхУведомлений(Уведомление,Локальное,Показано, ЧтоТоЕще) Экспорт
	ГлобальноеСобытиеОповещения(Новый Структура("Отправитель,Текст",Уведомление.Текст,Уведомление.Данные));
КонецПроцедуры

Таким образом у нас получают Штрих-код все формы, у которых описана ОбработкаОповещения. Для получения ШК только в активную форму используем метод управляемой формы ВводДоступен()

&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
	Если ИмяСобытия = "1" И ВводДоступен() Тогда
		ПолученШтрихКод(Параметр);
	КонецЕсли;
КонецПроцедуры

Кому интересно, процесс передачи со стороны Android описан так:

public void onReceive(Context context, Intent intent) {
        byte[] barcode = intent.getByteArrayExtra("barocode");
        int lng = intent.getIntExtra("length", 0);
        this.barcodeStr = new String(barcode, 0, lng);
        if (lng > 0) {
            Intent intentFor1C = new Intent("com.google.android.c2dm.intent.RECEIVE");
            intentFor1C.putExtra("text", BCService.EventID);
            intentFor1C.putExtra("title", "1C");
            intentFor1C.putExtra("data", this.barcodeStr);
            if (BCService.BaseName != null || BCService.BaseName != "")  {
                intentFor1C.putExtra("base", BCService.BaseName);
            }
            context.sendBroadcast(intentFor1C);
        }
    }

 

Ну, в принципе, и всё. Сервис писался "для себя" и распространяется "как есть". Буду рад, если кому пригодится!

Скачать файлы

Наименование Файл Версия Размер
BarCodeTo1C.apk
.apk 645,65Kb
09.02.17
42
.apk 1.0 645,65Kb 42 Скачать

См. также

Комментарии
Сортировка: Древо
1. Tahallus 421 09.02.17 12:57 Сейчас в теме
Исходники на GitHub будете выкладывать ?
2. DMon 69 09.02.17 13:16 Сейчас в теме
(1) Скорее всего нет. Делалось не для широкой публики.
3. DrinkMaster 7 21.03.17 11:46 Сейчас в теме
Установил APK на urovo v5100, но кроме сообщения "Hello World!" и кнопок Start\Stop service на экране ничего нет. Как в этом случае выставить параметры "имени сообщения" от сканера, "1C Event ID" и "1C Base ID"?
4. DMon 69 22.03.17 00:53 Сейчас в теме
(3) Специально с сайта переустановил apk. Там нет никакого "Hello world!" и всё работает.
И как Вы могли её установить, если даже не скачивали?
А вообще актуальная APK - http://infostart.ru/public/587908/
5. DrinkMaster 7 22.03.17 10:29 Сейчас в теме
(4) Вот
Прикрепленные файлы:
6. DMon 69 22.03.17 15:04 Сейчас в теме
(5) Очень странно. А версия андроид случайно не ниже 4.4?
Если да - то минимальная в СДК установлена 4.4 и на версиях ниже не тестировалась (поведение неизвестно).
7. DrinkMaster 7 23.03.17 09:16 Сейчас в теме
8. Bru_10 24.04.17 16:20 Сейчас в теме
Подскажите как можно определить это имя сообщения "scan.rcv.message"?
9. DMon 69 25.04.17 08:12 Сейчас в теме
(8)можно через logcat. Можно разобрать сервисную апк по настройке сканера и просмотреть там IntentFilter.
10. d_sdr 4 05.06.17 15:34 Сейчас в теме
подскажите, в процедуре "ПодключитьГлобальноеСобытиеОповещения" вызывается такая интересная вещь, как
ДоставляемыеУведомления.ПодключитьОбработчикУведомлений(...)

Что это за модуль - "ДоставляемыеУведомления" и где его достать? В типовых конфигурациях его не нашёл, в ACode Tools тоже нету.
11. DMon 69 05.06.17 19:09 Сейчас в теме
12. demONx7 29.06.17 03:10 Сейчас в теме
(0) Подскажите, как можно перехватить нажатие кнопок на тсд? Интересуют стрелки, цифры и клавиши F..
На данный момент при тестировании на компьютере все работает, а на ТСД нет. Полагаю что нужно где-то эти самые нажатия "поймать"
13. DMon 69 30.06.17 07:18 Сейчас в теме
(12) Подключаем устройство к Adroid студии, открываем вкладку событий и жмем по клавишам. В списке видим что был такой-то keyPressed, keyReleased. Далее что с этим делать - Ваша фантазия
14. Tiger77 66 08.07.17 20:50 Сейчас в теме
(13) Доработаете пожалуйста сервис - чтобы можно было менять название поля в котором находится штриход. В нашем случаем служба "вылетает"
Стандартно штрихкод содержится в поле "barcode", но наш сканер присылает штрихкод в поле "SCAN_BARCODE1".
15. DMon 69 09.07.17 00:19 Сейчас в теме
(14) Не плохая идея. Как только разгребусь с текущей загрузкой - сделаю!
16. mxs89 3 31.08.17 20:23 Сейчас в теме
ошибка при синтаксическом анализе! чувствую себя обманутым!
17. DMon 69 31.08.17 21:10 Сейчас в теме
(16) очень информативно, сейчас попробую угадать...
18. mxs89 3 01.09.17 09:18 Сейчас в теме
я новую версию скачал, буду пробовать ее, но спасибо за отзыв
19. Dimitrij 25.09.17 14:54 Сейчас в теме
День добрый.

У нас ТСД работает через веб клиент на андроиде. Браузер хром.

Данное преспосабление будет работать через веб клиент?

Заранее спасибо!
20. DMon 69 25.09.17 20:37 Сейчас в теме
21. Dimitrij 26.09.17 11:08 Сейчас в теме
(20) У Вас случаем нет решений по моей проблеме?
22. DMon 69 26.09.17 12:21 Сейчас в теме
(21) Мобильный клиент слушает бродкаст от утилиты. Я не знаю как браузер Хром научить слушать бродкаст.
Возможно это как-то и делается, но я с таким не сталкивался.
23. evgeny43 5 18.12.17 14:06 Сейчас в теме
А только утилита может отправить в бродкаст?У меня тсд honeywell , в меню сканирования есть раздел scan to intent, я прописал согласно маунала имя интента в хмл платформы , и ничего .... платформа ( 8.3.9.91 мобильная)
24. Широкий 682 30.01.18 15:31 Сейчас в теме
ИдБазыДанных=Прав(ПолучитьНавигационнуюСсылкуИнформационнойБазы(),36);
Danil.Potapov; +1 Ответить
25. IgorKissil 121 05.02.18 10:36 Сейчас в теме
Не пытались ли Вы использовать: https://infostart.ru/public/595292/ ? Чип сканера у устройств общий и я знаю об одном успешном применении компоненты на Caribe
26. Lupeykin 29.06.18 02:27 Сейчас в теме
8.3.10.51 работает Intent intentFor1C = new Intent("com.google.android.c2dm.intent.RECEIVE");
8.3.12.67 в этом релизе такой номер уже не прокатывает.
27. DMon 69 30.06.18 10:24 Сейчас в теме
(26) Вскоре у нас планируется переход на платформу 12-ю, задача станет более актуальной и возможно получится переделать под особенности новые. Результат выложу на форум. Но пока "как есть"
28. menen 12.07.18 12:41 Сейчас в теме
Дмитрий, добрый день!

Для публикации https://infostart.ru/public/704582/ Вы, как я понял, немного изменили драйвер перехвата.

На основании той же публикации я сделал мобильное приложение, но столкнулся с такой проблемой (цитирую):

=========
На базе Вашей обработки сделали конфигурацию под мобильное приложение (ТСД MobileBase DSIC 5 - обновили до Андроид 6) .

Конфигурация работала через мобильную платформу 1С на ТСД.

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

После сборки конфигурации в самостоятельное мобильное приложение начались проблемы: 1С перестала получать от драйвера перехвата значения.
Сообщения отладчика драйвера показывают, что он нормально получает (get valid intent data ...) сканированное значение ШК, но в мобильном приложении не срабатывают Оповещения.

Снова запускаю конфигурацию 1С через мобильное приложение 1С - Оповещения срабатывают.

Пробовали варианты - сносили с ТСД Мобильную платформу 1С, устанавливали только собранное мобильное приложение - результат тот же.

Такое подозрение, что в драйвере перехвата где-то есть жесткая привязка ...
=====

Вы можете чем-то помочь?
29. DMon 69 12.07.18 15:39 Сейчас в теме
(28) С такой ситуацией не сталкивался. "Внутри" всё просто: слушать одно, если подходит по данным - передать дальше. Там кода на 20 строчек. К сожалению, без устройства ничем помочь не смогу.
Оставьте свое сообщение