Представим сценарий: приобрели партию терминалов сбора данных на Android 13-15. Красивые, мощные аппараты и все отлично работает, но в какой-то момент прилетает обновление прошивки сканера и... мобильное приложение 1С просто перестает получать штрихкоды.
Причины и ошибки могут быть разные:
- внешние компоненты падают с ошибками совместимости.
- Broadcast не летит.
- В режиме эмуляции клавиатуры сканер бессовестно отрезает суффикс Enter.
Итог закономерен: склад стоит, менеджеры в панике, разработчик в мыле.
Почему стандартные методы пасуют на Android 13-15?
Проблемы проявляются из-за следующих факторов:
- Зоопарк ТСД огромен, и у каждого производителя свои нюансы работы с Intent и железом.
- Новые версии Android 🤖 (особенно SDK 33-35) жестко ограничивают работу фоновых сервисов и доступ к файловой системе.
- Ошибки или изменения в прошивках сканера приводят к тому, что аппаратное нажатие Enter просто перестает транслироваться через стандартные механизмы.
Решение 🚀
В такой ситуации нужно решение, которое вообще не зависит от капризов совместимости, версий компонент и прошивок. Предлагается организовать файловый обмен и перехват вызовов Intent, чтобы обойти ограничения на базовом уровне ОС Android. Порядок работы следующий:
- 1С дергает невесомое Android-приложение через стандартный Intent.
- Android-приложение открывается поверх всех окон и забирает фокус в скрытое поле ввода текста.
- Сканер "плюет" туда символы, и когда поток символов останавливается срабатывает таймаут (100 - 2000 мс) или ловится IME_ACTION_DONE, если сканер его вдруг передал.
- Штрихкод записывается в текстовый файл, и активность Android-приложения сама закрывается.
- 1С получает сообщение, что приложение закрыто, забирает файл из каталога, читает и удаляет его.
Внутри APK и Интеграция с 1С: Техническая часть
Главное препятствие на свежих Android - Scoped Storage. Начиная с Android 11+ нельзя просто так взять и записать файл в корень. Поэтому при первом старте приложение запрашивает доступ и в настройках Android следует выдать приложению права "Доступ ко всем файлам". Только тогда приложение может беспрепятственно писать данные по пути, который сможет прочитать 1С.
На стороне 1С всё сводится к вызову внешнего приложения и чтению результата. Путь к директории должен совпадать с тем, куда пишет APK.
//...
#Если МобильноеПриложениеКлиент Тогда
ЗапускПриложения = Новый ЗапускПриложенияМобильногоУстройства();
ЗапускПриложения.Приложение = "ИМЯ_ПРИЛОЖЕНИЯ";
ЗапускПриложения.ИмяКласса = "ИМЯ_ПРИЛОЖЕНИЯ.MainActivityKts";
ЗапускПриложения.Запустить(Истина);
#КонецЕсли
Для каждого Файл из НайтиФайлы("ПУТЬ_К_ДИРЕКТОРИИ","*.txt", Истина) Цикл
ОбработкаФайла(Файл.ПолноеИмя);
КонецЦикла;
//...
&НаКлиенте
Процедура ОбработкаФайла(ФайлПолноеИмя)
Текст = "";
ТекстФайл = Новый ЧтениеТекста(ФайлПолноеИмя);
Стр = ТекстФайл.ПрочитатьСтроку();
Пока Стр <> Неопределено Цикл // строки читаются до символа перевода строки
Текст = Текст + Стр;
Стр = ТекстФайл.ПрочитатьСтроку();
КонецЦикла;
ТекстФайл.Закрыть();
УдалитьФайлы(ФайлПолноеИмя);
Сообщить(Текст); // Штрихкод
КонецПроцедуры
Выводы и файлы для скачивания 🎯
Да, это файловый обмен, но он работает и не зависит от версии платформы 1С, капризов прошивок и т.п. А также всегда можно пересобрать приложение под любую новую версию Андроида.
Решение протестировано с мобильной платформой 1С версии 8.3.27.* для Андроид 13-15. А также работает на старых Андроид с мобильной платформой 8.3.15.105.
Файлы для скачивания:
- Готовый APK (EanReader.apk) + Пример Кода на 1С для вызова и парсинга. Решение для тех, кому нужно здесь и сейчас. Просто скачай, поставь на ТСД, пропиши путь в 1С и используй. Сборка поддерживает все версии SDK 26-35 включительно.
- Полный исходный код проекта на Kotlin (ZIP-архив). Для тех, кто хочет поменять логику, изменить иконку, добавить какие-то фишки на уровне исходного кода.
Возможно, Вас заинтересуют и другие публикации:
- Автоматическое распознавание PDF через ИИ
- SFTP для 1С
- CI/CD для 1С: как упростить себе жизнь
- Фоновые задания: быстро получить большие данные в 1С
- Создание пользователей системы взаимодействия
- Работа из 1С с API PayPal
- Гарантированный обмен 1С через Microsoft MSMQ
- Чтение файлов PDF из 1С
- Программное открытие отчета
- История реквизитов организаций
Вступайте в нашу телеграмм-группу Инфостарт