При внедрении мобильных решений на базе 1С:ERP для терминалов сбора данных (ТСД) специалисты часто сталкиваются с аппаратными ограничениями и программными блокировками. Типичная ситуация: вы запускаете мобильный клиент на устройстве под управлением Android, открываете документ "Заказ клиента", но при попытке сканирования или открытия формы программа выдает критическую ошибку. В сообщении говорится, что функциональность "Камера, Микрофон, Библиотека музыки, Библиотека картинок и видео, Воспроизведение аудио и вибрация" отключена в мобильном приложении. При этом в настройках самой операционной системы Android все разрешения для приложения выданы корректно.
В данной статье мы подробно разберем, как устранить эту ошибку, правильно настроить программную часть в конфигураторе и подружить аппаратный сканер ТСД (на примере популярной модели Urovo i6300) с типовой конфигурацией 1С:ERP Управление предприятием.
Проанализируем ситуацию: почему 1С блокирует доступ к "железу", если Android его разрешает? Дело в том, что в платформе 1С:Предприятие существует собственный механизм контроля безопасности для мобильных решений. Если в свойствах конфигурации явно не указано, что приложение будет использовать камеру или мультимедиа, мобильный клиент блокирует эти вызовы на уровне ядра, даже не пытаясь обратиться к ресурсам ОС.
Для решения этой проблемы выполним следующие действия:
Использование мультимедиа и Сканирование штрихкодов.Важный момент: Если вы используете типовое решение, для внесения этих изменений потребуется включить возможность редактирования конфигурации. После сохранения настроек и обновления базы данных (клавиша F7), мобильный клиент автоматически подтянет новые разрешения при следующем подключении. Пересобирать apk-файл в большинстве случаев не требуется, если вы используете стандартный мобильный клиент из магазина приложений.
Если на вашем устройстве нет аппаратного лазерного сканера (например, используется обычный смартфон), или вы хотите использовать камеру ТСД как резервный вариант, рассмотрим код для вызова стандартного сканера 1С. Проанализируем пример использования объекта СредстваМультимедиа:
#Если МобильноеПриложениеКлиент Тогда
Если НЕ СредстваМультимедиа.ПоддерживаетсяСканированиеШтрихКодов() Тогда
ВызватьИсключение НСтр("ru='Сканирование штрихкодов не поддерживается'");
Возврат;
КонецЕсли;
ОбработчикСканирования = Новый ОписаниеОповещения("ОбработкаСканирования", ЭтаФорма);
СредстваМультимедиа.ПоказатьСканированиеШтрихКодов(
НСтр("ru='Наведите камеру на штрихкод'"),
ОбработчикСканирования, ,
ТипШтрихКода.Все
);
#КонецЕсли
В этом фрагменте кода мы сначала проверяем техническую возможность устройства, а затем вызываем встроенный интерфейс камеры. Метод ПоказатьСканированиеШтрихКодов принимает описание оповещения, которое сработает сразу после успешного распознавания кода камерой.
Для профессиональной работы на ТСД (например, Urovo i6300) использование камеры неудобно. Нам нужно, чтобы 1С реагировала на нажатие физических кнопок сканирования по бокам устройства. Для этого рассмотрим настройку механизма Intent в Android и его перехват в 1С.
На ТСД Urovo необходимо зайти в системное приложение Scanner (Настройки сканирования) и установить следующие параметры:
urovo.rcv.messagebarcodeПосле этого в коде 1С необходимо инициализировать работу с оборудованием. Разберем пример подключения через МенеджерОборудованияКлиент, который входит в состав БПО (Библиотеки подключаемого оборудования):
&НаКлиенте
Процедура ПриОткрытии(Отказ)
ОписаниеОшибки = "";
// УникальныйИдентификатор - идентификатор формы
// ОборудованиеУстройствоВвода - ссылка на настроенный экземпляр сканера
Если НЕ МенеджерОборудованияКлиент.ПодключитьОборудованиеПоИдентификатору(
УникальныйИдентификатор,
ОборудованиеУстройствоВвода,
ОписаниеОшибки) Тогда
Сообщить("Ошибка подключения сканера: " + ОписаниеОшибки);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
// Система БПО транслирует Intent-сообщение в стандартное событие
Если ИмяСобытия = "Штрихкод" Или ИмяСобытия = "Barcode" Тогда
ОбработатьПолученныйКод(Параметр); // Параметр содержит строку ШК
Иначе
// Обработка прочих системных сообщений
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка)
МенеджерОборудованияКлиент.ОтключитьВсеОборудование();
КонецПроцедуры
Для устройств Urovo часто применяется специализированная внешняя компонента RS Core (от RightScan). Она обеспечивает наиболее стабильную связь между аппаратной кнопкой сканера и платформой 1С. Рассмотрим состав такой компоненты:
KBEmu — позволяет эмулировать ввод с клавиатуры (используется редко).IO — операции ввода/вывода.При использовании внешней компоненты работа со сканером происходит через процедуру ВнешнееСобытие. Это позволяет приложению получать данные даже тогда, когда поле ввода на форме не находится в фокусе. Это критически важно для высоконагруженных складских операций, где кладовщик не должен постоянно кликать пальцем в экран ТСД.
Если после всех настроек сканер не работает, проанализируем следующие моменты:
Мобильный клиент — это по сути "тонкий клиент" для мобилки, он требует постоянной связи с сервером. Все доработки логики (кроме интерфейсных вещей) делаются в основной базе ERP или через расширение конфигурации.Таким образом, правильная комбинация настроек в Конфигураторе (разрешения мультимедиа), корректная настройка Intent-сообщений на самом ТСД и использование методов БПО позволяют создать надежное рабочее место на базе 1С:ERP.