Многофункциональная компонента для мобильной платформы: широковещательные сообщения (broadcasts), буфер обмена (clipboard), Bluetooth
Разработка - Разработка внешних компонент
Файлы
ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.
Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний
Оформите подписку на компанию для решения рабочих задач
Оформить подписку и скачать решение со скидкойВы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.
Новое в релизе 1.3.6
Добавлена поддержка API 35. При запуске компоненты на версиях андроид начиная с Tiramisu в API registerReceiver введен дополнительный параметр, а с Upside down cake он обязателен. Поэтому компонента старых релизов на новых версиях ОС не может работать.
Новое в релизе 1.3.4
С момента публикации прошло несколько лет. Чтобы поддержать новые выпуски ОС Андроид выпущен этот релиз компоненты. Никаких функциональных изменений он не содержит, код просто перекомпилирован новыми инструментами и сделаны косметические изменения для удовлетворения измененным стандартам API Андроида. Рекомендуется новым пользователям или у кого есть проблемы после перехода на новые версии Андроида.
Новое в релизе 1.3.3
Исправлена ошибка повторной генерации внешнего события при использовании XML формата.
Новое в релизе 1.3.2
В сообщение внешнего события о получении широковещательного сообщения добавлена возможность вывода данных в формате json (см. параметр OutputFormat). В более ранних релизах использовался xml, который иногда не читался (по отзывам отдельных пользователей) средствами 1С (ЧтениеXML) из-за представления некоторых символов в виде &...;.
Новое в релизе 1.3
- Теперь все компоненты сборки поддерживают стандарт 1С требований по разработке драйверов 3.3 поскольку фирма 1С выпустила библиотеку подключаемого оборудования для мобильных приложений, поддерживающую этот стандарт. Изменения коснулись, в основном, общих требований к разрабатываемым драйверам. Удален метод ПолучитьНомерВерсии. Вместо него необходимо использовать ПолучитьРевизиюИнтерфейса. Метод ПолучитьОписание содержит только один параметр, который возвращает структуру xml (см. здесь). Состав и параметры общих методов мобильных драйверов приведены к аналогичному составу и параметрам драйверов для стационарной платформы.
- Интерфейс компоненты буфера переработан с целью приближения к стандарту устройства ввода. Удалены свойство СодержимоеБуфера и метод УстановитьСодержимое. Вместо них следует использовать параметр Content и дополнительные действия GetClipboard и PutInClipboard.
- Добавлена компонента работы с bluetooth: поиск и подключение устройств, взаимодействие по протоколу последовательного доступа (com over bluetooth).
- Демострационная конфигурация сделана более наглядной. Теперь для показа работы каждой компоненты используется отдельная форма:

Замечание об архитектуре
Стандарт подключаемых драйверов 1С требует, чтобы поставка драйвера отдельным архивом содержала только один драйвер и, соответственно, один объект AddIn. Цитата из документации: "Внешняя компонента для работы с подключаемым оборудованием должна содержать только один объект, реализующий расширение встроенного языка". В моей практике создания мобильных приложений такой подход часто приводил к катастофическому разрастанию размера приложения. Добавление функциональности к существующей компоненте обычно увеличается ее суммарный размер (apk+so файлы) на 10-20%, в то время как следование правилам стандарта приводит к линейному росту от числа компонент. Исходя из этого, данная разработка нарушает стандарт для удобства применения и развертывания приложений с представленной компонентой.
Широковещательные оповещения
Продолжение статьи автора о внешних компонентах для мобильных приложений, в которой представлен развернутый пример компоненты получения широковещательных оповещений в андроиде (broadcasts). Идею ее создания подсказала работа //infostart.ru/public/587908/, в которой был предложен универсальный получатель сообщений от сканеров, но решение выполнено через сервис, хотя ничто не мешает оформить его в виде компоненты. Архитектурный выигрыш несомненный, но главные удобства получает пользователь, которому нужно будет установить только приложение 1С без дополнительного ПО.
Для подключения компоненты используем стандартный код:
// Component - имя макета, в котором находится компонента
ПодключитьВнешнююКомпоненту("ОбщийМакет.Component", "Broadcasts", ТипВнешнейКомпоненты.Native);
Компонента = Новый("AddIn.Broadcasts.UniversalBroadcast");
Так как решение полностью выполнена по стандарту 1С (устройство ввода), установка параметров выполняется методом "УстановитьПараметр", включение и выключение - "Подключить" и "Отключить" соответственно. Параметр, который обязательно нужно установить - "FilterName", это имя оповещения. Для сканеров его необходимо взять из документации. Также можно использовать любые системные броадкасты, например отсюда. В примере конфигурации к статье представлен способ получения информации о батарее устройства. Следующий важный параметр - "CaptureData". В него следует передать XML строку с описанием извлекаемых дополнительных данных оповещения. Для удобства ее можно получить, вызвав метод "ПолучитьШаблонОписанияДанных", который возвращает строку:
<?xml version="1.0" encoding="utf-8"?>
<dataExtra name="%1" arrayToString="%2" dataType="%3" />
Она содержит три параметра в формате %n, чтобы ее было удобно использовать в методе "ПодставитьПараметрыВСтроку" из БСП. Первый параметр - имя дополнительных данных. Второй должен иметь значения true или false и используется только для обработки массива байт или символов (см. ниже). Третий параметр - число, тип извлекаемых данных в соответствии с таблицей:
| Значение параметра | Тип данных |
|---|---|
| 0 | строка |
| 1 | массив строк |
| 2 | short |
| 3 | массив типов short |
| 4 | long |
| 5 | массив типов long |
| 6 | int |
| 7 | массив типов int |
| 8 | float |
| 9 | массив типов float |
| 10 | double |
| 11 | массив типов double |
| 12 | символ |
| 13 | массив символов |
| 14 | байт |
| 15 | массив байтов |
| 16 | булево |
| 17 |
массив типов булево |
|
|
|
|
|
(Типы последних двух строк могут возвращаться, если параметр CaptureData не задан, об этом режиме работы см. ниже).
Для массивов типов байт или символ параметр attayToString может быть установлен в true. В этом случает при получении дополнительных значений, они будут преобразовываться в строку. Это может пригодится для работы с некоторыми сканерами, которые возвращают результат в виде набора байтов. Покажем код установки параметров перед включением компоненты:
ШаблонДанных = Компонента.ПолучитьШаблонОписанияДанных();
health = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонДанных,"health",XMLСтрока(Ложь),XMLСтрока(6));
Компонента.УстановитьПараметр("CaptureData",health);
tech = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонДанных,"technology",XMLСтрока(Ложь),XMLСтрока(0));
Компонента.УстановитьПараметр("CaptureData",tech);
present = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонДанных,"present",XMLСтрока(Ложь),XMLСтрока(16));
Компонента.УстановитьПараметр("CaptureData",present);
level = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонДанных,"level",XMLСтрока(Ложь),XMLСтрока(6));
Компонента.УстановитьПараметр("CaptureData",level);
Какие данные необходимо получить мы определяем последовательными вызовами установки параметра CaptureData. Удалить или изменить этот набор после установки невозможно, для этого необходимо пересоздать объект компоненты.
Параметр "Category" позволяет добавить к намерению отбор по категориям. Его также можно устанавливать перед стартом отслеживания броадкастов несколько раз, если требуется отбор по нескольким категориям. Очистка набора категорий возможна только при пересоздании объекта компоненты.
Параметр "OutputFormat" управляет форматом вывода данных внешнего события, информирующего о приеме оповещения. Он числовой и может принимать значения: 0 - вывод в виде xml (значение по умолчанию) или 1 - json.
После включения компонента, как и любое устройство ввода, возвращает данные через внешнее событие 1С. Первый параметр события - серийный номер устройства, второй параметр имеет значение "UniversalBroadcastEvent", а третий - строка в выбранном формате. Вывод в XML имеет примерно такой вид:
<?xml version="1.0" encoding="utf-8"?>
<MessageData>
<FilterName>Имя оповещения, заданного параметром FilterName</FilterName>
<FilterData name="имя очередного параметра CaptureData">Значение дополнительных данных</FilterData>
<FilterData name="имя очередного параметра CaptureData">
<ArrayValue>элемент 1 массива данных</ArrayValue>
<ArrayValue>элемент 2 массива данных</ArrayValue>
</FilterData>
</MessageData>
Пример аналогичного вывода в формате JSON:
{
"FilterName":"Имя оповещения, заданного параметром FilterName",
"FilterData":
[{"имя очередного параметра CaptureData":"Значение дополнительных данных"},
{"имя очередного параметра CaptureData":["элемент 1 массива данных","элемент 2 массива данных"]}]
}
Как можно догадаться из примера, значения одиночных дополнительных данных возвращаются в тексте элемента <FilterData>, а массивов элементами <ArrayValue>.
Начиная с релиза 1.1.4 компонента поддерживает автоматическое определение всех возможных фильтров и возвращаемых типов данных. Чтобы включить такой режим, необходимо оставить параметр CaptureData пустым. В демонстрационном приложении перейдите на закладку "Фильтры событий" и оставьте категорию пустой. При возникновении события xml тэг MessageData не будет возвращать значений, но будет включать числовой атрибут datatype в соответствии с приведенной выше таблицей. Если событие будет иметь данные с пустым значением, тип которого невозможно определить, атрибут будет равен 19. Сложным типам, необрабатываемым компонентой, будет присвоен индекс 18.
<?xml version="1.0" encoding="utf-8"?>
<MessageData>
<FilterName>Имя оповещения, заданного параметром FilterName</FilterName>
<FilterData name="имя очередного параметра CaptureData" datatype="число - индекс типа из таблицы"/>
<!-- любое число тэгов FilterData -->
</MessageData>
{
"FilterName":"Имя оповещения, заданного параметром FilterName",
"FilterData":
[{"name":"имя очередного параметра CaptureData","datatype":число - индекс типа из таблицы},
...
]}
Приведем пример xml, возвращаемого батареей (android.intent.action.BATTERY_CHANGED) в режиме определения фильтров:

И в режиме определения заряда батареи:

Пользователи могут использовать конфигурацию из статьи для определения значений фильтров любых событий, если вручную отредактируют имя намерения и вызовут событие.
Буфер обмена
В версии 1.1 компоненты добавлена работа с буфером обмена Андроида (clipboard). Буфер позволяет выполнять операции вставки и извлечения (Copy/Paste) и может содержать данные типов текст, гиперссылка и намерение. Компонента содержит следующие параметры и дополнительные действия:

Для помещения текста в буфер обмена установите параметры Content и Label и вызовите дополнительный метод PutInClipboard. Компонента также в состоянии передать в 1С оповещение об изменении буфера любой программой или службой.
Подключение объекта буфера:
КомпонентаБуфер = Новый("AddIn.Broadcasts.Clipboard");
Объект Clipboard реализован по стандарту устройства ввода. Соответственно, имеет методы Подключить и Отключить. Получение содержимого буфера выполняется с помощью дополнительного действия GetClipboard. Сразу после его вызова компонента порождает внешнее событие ClipboardEvent. В третьем параметре оповещения находится текст из буфера обмена.
Работа с Bluetooth
Драйвер поддерживает следующие операции:
- программное включение bluetooth, получение списка подключенных устройств, обнаружение доступных неподключенных устройств и их подключение;
- работу с устройствами через последовательные чтение/запись (com over bluetooth). Чтение данных может выполняться синхронно, в этом случае приложение ожидает данные, пока они не появятся от устройства, а приложение останавливается. Либо асинхронно в двух режимах - по запросу и в фоне. В первом случае компонента проверяет наличие данных и если их нет, возвращает ошибку, во втором ответ от устройства проверяется постоянно в отдельном потоке и при появлении данных в 1С возникает внешнее событие. Последний режим удобен для работы со сканерами, например такими. Работа с блютуз добавлена в представленную компоненту, чтобы расширить область ее применения в отношение сканеров.
Рассмотрим сценарии использования bluetooth драйвера. Подключение объекта выполняется стандартно:
КомпонентаBluetooth = Новый("AddIn.Broadcasts.BluetoothCommunication");
Включение или выключение булевого параметра DiscoveryMode определяет в каком режиме мы будем подключать компоненту. Вначале рассмотрим режим поиска устройств (DiscoveryMode = Истина). В этом режиме после вызова метода Подключить компонента в фоновом процессе будет выполнять поиск всех доступных устройств и при их обнаружении передавать внешнее событие с именем DeviceDiscovered:

Данные об устройстве возвращаются в строке xml вида:
<BluetoothDevice Name="Any device" Address="01:01:01:01:01:01"/>
содержащей имя и mac-адрес устройства. О включении и завершении режима поиска дополнительно сигнализируют внешние события DiscoveringStarted и DiscoveringStopped. Когда DiscoveryMode установлен в Истина, прочие параметры не оказывают возвдействие на работу компоненты, кроме одного - AutoEnable. Он также содержит булево значение. Если его включить, а в настройках вашего устройства блютуз окажется выключенным, компонента попытается его включить, запросив разрешение у пользователя через стандартный диалог. Аналогичным образом блютуз может включатся и в режиме обмена данными.
Примечание: К сожалению, архитектура внешних компонент 1С для Андроид не позволяет оповещать мобильное приложение об ответах пользователя в стандартных диалогах. В данной работе это относится как к упомянутому диалогу активации блютуз, так и к выводимым компонентой запросам на дополнительное права администратора блютуз и диалогам на сопряжения устройств. В таких случаях компонента в методе Подключить возвращает ошибки с кодом 2001 или 1002. Разработчик мобильного приложения должен будет предложить пользователю подключиться повторно или реализовать какой-нибуть цикл с задержкой для повторной проверки результата подключения.
При работе драйвера в режиме коммуникации (DiscoveryMode=False) обязательна установка параметра Device (строка). Это может быть как mac-адрес, так и имя устройства. Несопряженные устройства при подключении будут вызывать стандартный системный диалог:

После подтверждения пользователя устройство будет добавлено в список сопряженных и подключено. Разрабочик мобильного приложения может также воспользоваться списком сопряженных устройств, который читается и возвращается в 1С при получении параметров (метод ПолучитьПараметры) в подчиненных элементах ChoiceList элемента Parameter с именем Device. Если устройство доступно и поддерживает коммуникацию по com-протоколу, после вызова метода Подключить, драйвер открывает потоки на запись и чтение.
Для записи (передачи данных) от мобильного приложения на устройство разработчик может воспользоваться
- подходом, соответствующим стандарту внешних компонент: данные записываются в параметр InputData в формате строки Base64; передача происходит при вызове дополнительного действия SendData
- более быстрым способом: вызвать метод ЗаписатьДанные (WriteData), который принимает два аргумента - номер устройства (возвращаемый при вызове Подключить, строка) и сами данные для записи с типом 1С ДвоичныеДанные. При частой коммуникации, понятно, что в этом случае скорость достигается за счет экономии в преобразованиях из base64 и обратно
Чтение данных, как было упомянуто выше, может выполняться в трех режимах, определяемых установкой параметра ReadMode. Если он равен 0, компонента будет ожидать данные от устройства бесконечно долго, и если их нет, блокировать основной поток. Если он равен 1, компонента проверяет наличие данных в потоке чтения. Если они есть, данные читаются, если нет - возвращается ошибка 2013 (в методе ReadData). Установка параметра в значение 2 включает асинхронный режим чтения, когда появление данных будет вызывать внешнее событие DataReceived, а сами данные возвращатся в третьем параметре события в виде строки base64. В асинхронном режиме последовательность чтения и записи не определена, то есть невозможно гарантировать, что данные, отправленные на устройство окажутся там раньше или позже прочитанных данных. Технически чтение инициализируется методом ПрочитатьДанные (ReadData). Первый параметр, как обычно, логический номер устройства, во второй возвращаются данные в виде двоичных данных 1С. Добавленные в платформу в последних релизах мощные средства работы с двоичными данными в виде потоков, позволят разработчику перекодировать их в строки с любыми кодировками при необходимости. Параметр DirectRead (булево) во включенном состоянии указывает драйверу порождать внешние события DataReceived при каждом получении данных. Понятно, что он имеет смысл для режимов 0 и 1. В асинхронном режиме внешнее событие возникает в любом случае. Его установка как и при чтении немного замедляет работу драйвера, если Вы работаете с синхронным устройством в режиме 0, внешние события будут лишними. Для режима 0 используется еще один параметр BufferSize. Это число - размер буфера чтения в байтах. Если размер данных превышает установленный размер буфера, чтение будет успешно выполнено несколько раз до исчерпания данных.
В режиме последовательной коммуникации (ReadMode=0), с помощью этой компоненты можно запрограммировать работу многих синхронных устройств, например, кассовых аппаратов. В моем багаже имееется несколько компонент для мобильной платформы 1С, предназначенных для ККМ, поддерживающих технологию блютуз. Командный протокол для них "зашит" в код самой компоненты, но я не вижу препятствий для реализации команд устройств, используя саму 1С платформу и эту внешнюю компоненту.
О примере
Макет компоненты из конфигурации, прилагаемой, к статье не содержит дополнительных разрешений (permissioms). Если они требуются для получения конкретных оповещений, их можно добавить в архив макета компоненты (включить файл android_manifest_permissions.xml) и собрать приложение.
Конфигурация и внешняя компонента предназначены для работы с релизом мобильной платформы не ниже 8.3.15.59. Допускается также работа с релизами, начиная с 13-го, но для этого необходимо вручную отредактировать манифест компоненты в архиве и удалить поддержку 64-битный платформ.
Вступайте в нашу телеграмм-группу Инфостарт
Оповещения Broadcasts Буфер обмена Clipboard Блютуз Bluetooth
См. также
Мобильная разработка Сканер штрих-кода Терминал сбора данных 1С:Предприятие 8 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Управленческий учет Платные (руб)
Сбор заказов, инвентаризация, проверка ценников, просмотр полной информации об остатках и ценах со смартфона Онлайн - все это содержит в себе решение 1С "Штрихкод-информер" (штрих-код чекер). Отправка данных со смартфона выполняется либо напрямую в открытую форму документа, отсканировав QR-код, либо в общую корзину учетной системы, не подходя к компьютеру. Кассир или оператор сможет просмотреть список присланных данных и загрузить в любую форму, поддерживающую работу с ТСД. Для работы с мобильным приложением требуется опубликовать HTTP-сервис из поставляемого расширения.
3050 руб.
03.12.2018 72927 250 108
Сканер штрих-кода Терминал сбора данных Мобильная разработка Монитор заказов Оптовая торговля Розничная торговля Ценообразование, анализ цен Разработчик Пользователь 1С:Предприятие 8 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. Полнофункциональный демо-доступ для своей конфигурации можно запросить в настройках мобильного приложения - все необходимое придет на почту автоматически. Решение предназначено для считывания штрихкодов, а не для их создания и печати.
3050 руб.
22.04.2019 124923 739 207
Сканер штрих-кода Оптовая торговля Розничная торговля Логистика, склад и ТМЦ Терминал сбора данных Мобильная разработка Разработчик Пользователь 1С:Предприятие 8 1С:Комплексная автоматизация 1.х 1С:Управление торговлей 10 1С:Розница 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Россия Управленческий учет Платные (руб)
Android смартфон как беспроводной сканер штрих-кодов, QR-кодов (2D), терминал сбора данных (ТСД), подписка на штрих-код Комбайн
2196 руб.
18.01.2017 152661 235 237
Разработка внешних компонент Телефония, SIP Разработчик 1С:Предприятие 8 1C:Бухгалтерия Россия Платные (руб)
Внешняя компонента выполнена по технологии Native API для 1С 8.х, обеспечивает доступ к программным АТС Asterisk (FreePBX, Elastix) через AMI интерфейс. Через него можно управлять многими функциями Asterisk (определение номеров, перевод звонков, набор телефона и т. д.)
5246 руб.
04.05.2018 52186 128 68
Разработка внешних компонент Разработчик 1С:Предприятие 8 1C:Бухгалтерия 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 Платные (руб)
Внешняя компонента позволяет работать c TWAIN-совместимым оборудованием (сканерами, камерами) . Полностью совместима со стандартной TWAIN-компонентой из БСП и может применяться как ее замена без изменения вызовов, при этом может работать с 64-разрядной платформой, а так же имеет расширенную функциональность, например, сохранение результата непосредственно в PDF без использования сторонних утилит. Прекрасно работает на сервере, тонком клиенте и веб-клиенте (проверена работа в браузерах Google Chrome, Mozilla Firefox и Microsoft Internet Explorer).
5084 руб.
12.05.2020 34941 147 100
Мобильная разработка 1С:Предприятие 8 1С:Управление торговлей 11 Оптовая торговля, дистрибуция, логистика Россия Платные (руб)
"МРМ:Маркировка" для работы с конфигурациями 1С - готовое решение, позволяющее быстро автоматизировать работу учетной системы 1С на ордерном и безордерном складе при работе как с товарами, подлежащими обязательной маркировке, так и с товарами, учет которых построен на базе линейных штрих-кодов. Решение поддерживает большинство распространенных складских документов, необходимых для работы кладовщику на терминале сбора данных. Для начинающих пользователей имеется подробная инструкция по работе с приложением в разрезе видов документов.
19000 руб.
24.06.2025 4088 26 0
Разработка внешних компонент Системный администратор Разработчик Стажер Бесплатно (free)
Библиотека для работы с базами SQLite из 1С на основе внешней компоненты. Для Linux и Windows, бесплатно и с открытым исходным кодом!
14.01.2025 8216 bayselonarrend 17
Разработка внешних компонент Разработчик 1С:Предприятие 8 Россия Бесплатно (free)
В статье описывается приложение-конструктор внешних компонент (native API). Конструктор упрощает процесс разработки за счет удобного добавления всех нужных функций и процедур в графическом режиме, с указанием их параметров и типов параметров. На выходе приложение генерирует готовый код на С++ и Rust и позволяет сразу приступить к реализации, без настройки API компоненты вручную.
04.12.2024 13793 kovalevdmv 29
в ТСД:
Настройки --> Scan Settings --> Internal Scanner --> Default profile --> Data Processing Settings -->
Поставить галку Scan to Intent. Ткнуть в поле Data Intent (Именно в строку, а не в галку), откроются настройки Data Intent. Там поставить галку Data Intent и в поле Action вбить произвольное уникальное имя действия. Я ввел: "scan.rcv.message" (без кавычек).
Дальше, в конфигурации-примере Игоря, надо немного код изменить с батарейки на ШК:
В конфигурации, в общей форме FormMain можно прям в ПриСозданииНаСервере() прописать ИмяСобытия = "scan.rcv.message"; (этот имя события, которое задал в настройках ТСД, у меня это "scan.rcv.message").
А в процедуре ПриОткрытии() вместо строк с получением состояния батареи прописать поле "data", из которого получать данные:
barcode = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонДанных,"data",XMLСтрока(Ложь),XMLСтрока(0));
Компонента.УстановитьПараметр("CaptureData",barcode);
ТСД Honeywell EDA51 работает благодаря компоненте и твоим доработкам. Спасибо огромное!
Спасибо.
В настройках datawedge стоит send Barcode data - clipboard (Есть еще keyboard )
пример с батарейкой работает превосходно.
Но совершенно не могу поймать Шк, Событие есть, а шк в XML нет. Прошу подсказки.
ИмяСобытия = "DATA_SCAN";
имя поля как написано выше "com.symbol.datawedge.data_string"
barcode = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонДанных,"com.symbol.datawedge.data_string",XMLСтрока(Ложь),XMLСтрока(8));
Компонента.УстановитьПараметр("CaptureData",barcode);
пожалуйста подскажите, что не так.
В настройках datawedge стоит send Barcode data - clipboard (Есть еще keyboard )
пример с батарейкой работает превосходно.
Но совершенно не могу поймать Шк, Событие есть, а шк в XML нет. Прошу подсказки.
ИмяСобытия = "DATA_SCAN";
имя поля как написано выше "com.symbol.datawedge.data_string"
barcode = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонДанных,"com.symbol.datawedge.data_string",XMLСтрока(Ложь),XMLСтрока(8));
Компонента.УстановитьПараметр("CaptureData",barcode);
пожалуйста подскажите, что не так.
Связь ТСД с компьютером через кабель (ADB.exe, Интернет тоже через кабель)
Сценарий 1:
Добавляю на мобильной платформе мобильное приложение, оно загружается на ТСД, сразу вхожу
пользовательский режим.
ПодключитьВнешнююКомпоненту("ОбщийМакет.Component", "Broadcasts", ТипВнешнейКомпоненты.Native)
отрабатывает успешно и впоследствии работает в этом приложении.
Сценарий 2:
После загрузки мобильного приложения на ТСД отключаю кабель, затем вхожу в пользовательский
режим.
ПодключитьВнешнююКомпоненту("ОбщийМакет.Component", "Broadcasts", ТипВнешнейКомпоненты.Native)
не отрабатывает ! И впоследствии не запускается.
Сценарии 1 и 2 запускал несколько раз, поведение не меняется, именно такое, как описано.
Такое ощущение, что при первом подключении компонента обращается к внешнему интернет-ресурсу
и начинает затем работать, только если этот ресурс был доступен.
Если доступ к сети интернет перекрыт службой безопасности, то использовать компоненту проблематично (
ИмяВнешнегоСобытия = "scan.rcv.message";
РезультатПодключенияВК = ПодключитьВнешнююКомпоненту("ОбщийМакет.ДрайверСканераUniversalBroadcast", "Broadcasts", ТипВнешнейКомпоненты.Native);
Если РезультатПодключенияВК = Истина Тогда
Попытка
глВнешняяКомпонентаUniversalBroadcast = Новый("AddIn.Broadcasts.UniversalBroadcast")
Исключение
СтруктураОтвета.Вставить("Ошибка", "Ошибка создания класса ""UniversalBroadcast""!");
Конецпопытки;
Если НЕ глВнешняяКомпонентаUniversalBroadcast = Неопределено Тогда
Попытка
глВнешняяКомпонентаUniversalBroadcast.УстановитьПараметр("FilterName", ИмяВнешнегоСобытия);
глВнешняяКомпонентаUniversalBroadcast.УстановитьПараметр("CaptureData", ОбщийМодульКлиентСервер.ПодставитьПараметрыВСтроку(глВнешняяКомпонентаUniversalBroadcast.ПолучитьШаблонОписанияДанных(), "barocode", XMLСтрока(Истина), XMLСтрока(15)));
Исключение
СтруктураОтвета.Вставить("Ошибка", "Ошибка при установке параметра ""CaptureData""!");
Конецпопытки;
КонецЕсли;
Иначе
СтруктураОтвета.Вставить("Ошибка", "Ошибка подключения компоненты ""UniversalBroadcast""!");
КонецЕсли; ПоказатьCaribe PL-55L
ИмяВнешнегоСобытия = "com.action.SCAN_RESULT";
Если ПодключитьВнешнююКомпоненту("ОбщийМакет.Component", "Broadcasts", ТипВнешнейКомпоненты.Native) Тогда
Компонента = Новый("AddIn.Broadcasts.UniversalBroadcast");
Компонента.УстановитьПараметр("FilterName",ИмяВнешнегоСобытия);
ШаблонДанных = Компонента.ПолучитьШаблонОписанияДанных();
barcode = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонДанных,"scanContext", XMLСтрока(Истина), XMLСтрока(15));
Компонента.УстановитьПараметр("CaptureData",barcode);
Если не Компонента.Подключить(НомерУстройства) Тогда
ТекстОшибки = "";
КодОшибки = Компонента.ПолучитьОшибку(ТекстОшибки);
ПоказатьПредупреждение(,"Ошибка: "+КодОшибки+", "+ТекстОшибки);
КонецЕсли;
Иначе
ПоказатьПредупреждение(,"Компонента не подключена",5);
ЗавершитьРаботуСистемы(Ложь);
КонецЕсли;
ПоказатьПробовал установить демонстрационное приложение на два устройства (в обоих случаях мобильная платформа 8.3.12.64, согласно вашей рекомендации):
1. ТСД Urovo V5100, Android 4.3
2. Чистый телефон Nexus 5, голый андроид 6.0.1
При выполнении команды Компонента.Подключить() приложение вылетает. На Андроиде 4.3 без отображения информации об ошибке, в 6.0.1 выдает следующий текст:
java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.Intent android.content.Intent.addFlags(int)' on a null object reference
at com.iksoftware.unimes.BroadcastMessage$2.run(BroadcastMessage.java:283)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Не подскажете, в чем может быть проблема?
Спасибо.
У меня на ТСД Honeywell тоже самое, хотя на прошлой версии компоненты все работало.
К сожалению ошибка осталась:
java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.Intent android.content.Intent.addFlags(int)' on a null object reference
at com.iksoftware.unimes.BroadcastMessage$2.run(BroadcastMessage.java:283)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6130)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
Но недавно наткнулся на проблему обработки XML-строки платформой 1С.
Вот XML, полученный при считывании штрихового кода на образце упаковки сигарет:
<?xml version="1.0" encoding="UTF-8"?><MessageData><FilterName>com.android.server.scannerservice.broadcast</FilterName><FilterData name="m3scannerdata">010460026601181721"Nv>vM-91ffd0929ysTNw==24010053940</FilterData><FilterData name="m3scanner_code_type">DataMatrix</FilterData></MessageData>В этом примере кода последовательность символов & # 2 9 ; при вставке кода в данном сообщении автоматически была заменена на собственно сам спецсимвол. Внешняя компонента возвращает именно представление спецсимвола & # 2 9 ; ( без пробелов, если пробелы убрать, получится )
Код
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.УстановитьСтроку(ТекстXML);
Пока ЧтениеXML.Прочитать() Цикл
...
выбрасывает исключение. Спецсимвол с кодом 29 (представление
& # 2 9 ;Приходится вставлять "костыль" СтрЗаменить перед УстановитьСтроку.
Это просто константация факта, особенности обработки XML-представления данных, возвращаемых компонентой.
В связи с тем, что в составе данных широковещательного сообщения
может быть строка, содержащая символы, не обрабатываемые
платформой 1С (символ с кодом 29) в том случае, если строка
размещена в XML-формате, можно ли доработать компоненту
следующим образом:
- добавить параметр с типом булево: HexСтрокиВXML или Base64СтрокиВXML.
Чтобы при установке параметра в значение "Истина", компонента
возвращала в XML, в котором строчные значения преобразованы
в Hex или Base64.
Такая доработка позволила бы обойти текущую ошибку платформы 1С -
исключение при вызове ЧтениеXML.Прочитать() , если для ЧтениеXML
установлена строка, содержащая последовательность символов & # 2 9 ;
И, кроме того, для остальных символов с кодом, меньшим 32
(например символ ">") не придется обрабатывать значения строчных полей
СтрЗаменить(Поле, "& g t ;", ">"). Лучше уж один раз обработать и преобразовать
из Hex или Base64 в оригинальную строку.
?
Для иллюстрации проблемы - изображение этикетки на блоке сигарет.
Обработка строки XML, возвращаемой компонентой при чтении
кода DataMatrix с этикетки, вызывает исключение в платформе 1С
( ЧтениеXML.Прочитать() )
Помогите разобраться у нас оборудование почти как у Вас:
сбора данных: Zebra TC-20 на 7 андроиде
При сканирование ШК в обработчике "Внешнее событие" в переменную данные возвращается XML строка которая не содержит Штрих код
В обработчике при открытии barcode = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонДанных,"data",XMLСтрока(Ложь),XMLСтрока(8));
Компонента.УстановитьПараметр("CaptureData",barcode);
Компонента.УстановитьПараметр("CaptureData",barcode);
Вот здесь вместо "data" нужно написать то самое длинное имя "com.symbol.datawedge.data_string". Если нужен еще тип кода, то нужно установить еще один параметр и вместо "data" указать "com.symbol.datawedge.label_type".
Процедура ПриОткрытии(Отказ)
ИмяСобытия = "scan.rcv.message";
Если ПодключитьВнешнююКомпоненту("ОбщийМакет.Component", "Broadcasts", ТипВнешнейКомпоненты.Native) Тогда
Компонента = Новый("AddIn.Broadcasts.UniversalBroadcast");
Компонента.УстановитьПараметр("FilterName",ИмяСобытия);
ШаблонДанных = Компонента.ПолучитьШаблонОписанияДанных();
barcode = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонДанных,"com.symbol.datawedge.data_string",XMLСтрока(Ложь),XMLСтрока(0));
Компонента.УстановитьПараметр("CaptureData",barcode);
Иначе
ПоказатьПредупреждение(,"Компонента не подключена",5);
ЗавершитьРаботуСистемы(Ложь);
КонецЕсли;
КонецПроцедуры
ПоказатьПытаюсь настроить компоненту на ТСД Zebra MC36, Android 4.4. Данные с батареи ловит, а со сканера - нет. Имя события в 1С прописал такое же, как в настройках сканера. Может ли проблема заключаться в том, что я неверное имя данных указываю в CaptureData? В документации к ТСД этой информации нет, разные варианты перепробовал и пока ничего не получается.
После запуска приложения. Выдается сообщения "Компонента не подключена".
Подскажите пожалуйста, кто то встречался с данной проблемой?
Может кто подсказать как запустить компоненту?
ТСД Honeywell EDA50K
Android 7.1.1
Платформа 8.3.12.67
Пробовал сначала все выполнить по комментарию greyhedgehog (номер комментария - 11)
Потом поставил оригинальный из темы Cf , проблема осталась.
Подскажите пожалуйста что сделать.
Наше оборудование Терминал сбора данных: Zebra TC-20 android ver 7.1
В обработчике по открытии
Добавлено
barcode = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонДанных,"data",XMLСтрока(Ложь),XMLСтрока(0));
Компонента.УстановитьПараметр("CaptureData",barcode);
При сканирование ШК в обработчике "Внешнее событие" в переменную данные возвращается XML строка которая не содержит Штрих код
а вы попробуйте СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонДанных,"data",XMLСтрока(Истина),XMLСтрока(15));
Игорь, пытаемся опубликовать скаченную конфигурацию (платформа 8.3.12.1685 32x в 64 WinОС) для проверки на ТСД - не получается - выдается ошибка следующего содержания:
"Ошибка разбора манифеста внешней компоненты Component: отсутствует обязательный атрибут name"
В чем может быть проблема?
Во время публикации приложения в настройках http-сервера необходимо добавить типы MIME для следующих расширений: .so, .apk, .dylib, .a. Тип MIME: application/octet-stream.
рестарт web сервера
Платформа 8.3.12.1685
"Ошибка разбора манифеста внешней компоненты бла-бла..."
Такая ошибка вываливается почти на каждой компоненте.
В проблемных манифестах добавлял атрибут
<?xml version="1.0" encoding="UTF-8"?>
<bundle xmlns="http://v8.1c.ru/8.2/addin/bundle" name="com_1c_MobileBarcodeScanner">
<component os="Android" path="libcom_1c_MobileBarcodeScanner_i386_1_0_3_2.so" codeType="c++" type="native" arch="i386" name="com_1c_MobileBarcodeScanner"/>
<component os="Android" path="com_1c_MobileBarcodeScanner_1_0_3_2.apk" codeType="java" type="native" arch="i386" name="com_1c_MobileBarcodeScanner"/>
<component os="Android" path="libcom_1c_MobileBarcodeScanner_ARM_1_0_3_2.so" codeType="c++" type="native" arch="ARM" name="com_1c_MobileBarcodeScanner"/>
<component os="Android" path="com_1c_MobileBarcodeScanner_1_0_3_2.apk" codeType="java" type="native" arch="ARM" name="com_1c_MobileBarcodeScanner"/>
</bundle>По аналогии, как в комментарии (56)
"заменил по инструкции интент фильтр" - поясните что вы сделали..
На платформе 1С:Предприятие 8.3.12.1685 перестала работать загрузка мобильного приложения через сервер.
Сообщение при попытке публикации мобильного приложения.
name
На предыдущих версиях 8.3.12 публикация завершается нормально.
<?xml version="1.0" encoding="UTF-8"?>
<bundle xmlns="http://v8.1c.ru/8.2/addin/bundle" name="com_iksoftware_unimes">
<component os="Android" path="libcom_iksoftware_unimes_ARM.so" codeType="c++" type="native" arch="ARM" name="com_iksoftware_unimes"/>
<component os="Android" path="unimes.apk" codeType="java" type="native" arch="ARM" name="com_iksoftware_unimes"/>
<component os="Android" path="libcom_iksoftware_unimes_x86.so" codeType="c++" type="native" arch="i386" name="com_iksoftware_unimes"/>
<component os="Android" path="unimes.apk" codeType="java" type="native" arch="i386" name="com_iksoftware_unimes"/>
</bundle>
ТСД symbol mc32n0, Андроид 4.1.1
события приходят, но доп поля, указанные в параметрах CaptureData - в XML отсутствуют.
Тот же пример прогнал на телефоне с Андроид 5.1 - все пришло с параметрами.
Получается, что дело в версии андроида? У кого-нибудь заработало на 4.1.1?
(58) Думаю это потому что компонента собрана для андроида начиная с 19й версии (4.4). Будет время сделаю ребилд с 16-й
Подскажите, еще ребилд с 16-ой не делали ? Очень нуно.
Спасибо.
Я прошу прощение. Не посмотрел информации перед тем как писать.
У меня Android 4 (API Level 14 насколько я понял). Вот с него есть возможность собрать компоненту. А то два ТСД есть с 4 и 4.1, события отлавливаются, а данные приходят пустые. Хотелось бы все терминалы на единую Вашу компоненту посадить.
(На 5.1 все норм)
Заранее большое спасибо.
Использовал для сканирования штрихкодов на следующих ТСД: Honeywell EDA50 и HT380K.
На обоих ТСД проверил работоспособность под платформой 8.3.10.84 и 8.3.13.45 - работает на обоих. Поэтому, просьба автору: поставь режим совместимости в cf в значение "8.3.10" - проверено, работает.
Спасибо.
Неплохо было бы, чтобы компонента имела функцию, возвращающую массив имен доступных полей интента.
Вот тут есть пример:
Имея такой массив, можно было бы заполнить им список выбора у поля на форме, чтобы пользователь не вбивал имя поля с клавиатура, а выбирал из списка.
Поэтому я и писал в (74), что неплохо было бы получить XML, содержащий список всех возможных полей. А, если, этот список будет ещё и значения этих полей содержать - вообще будет шикардос!
Можно сделать в виде служебного поля "AllData" и при получении XML, она будет содержать всевозможные поля интента с их значениями.
Компонента.УстановитьПараметр("FilterName", "com.xcheng.scanner.action.BARCODE_DECODING_BROADCAST");
Компонента.УстановитьПараметр("CaptureData",СтрокаПараметров, "EXTRA_BARCODE_DECODING_DATA",
XMLСтрока(Ложь), XMLСтрока(0)));java.lang.UnsatisfiedLinkError: dalvik.system.DexClassLoader[DexPathList[[zip file "/data/user/0/com.e1c.mobile/files/1C/1cem/76624a6c-6eb9-516e-b5f4-9ad5799f6cb6/ExtCompT/com_iksoftware_unimes.apk"],nativeLibraryDirectories=[/data/user/0/com.e1c.mobile/files/1C/1cem/76624a6c-6eb9-516e-b5f4-9ad5799f6cb6/ExtCompT, /system/lib, /vendor/lib]]] couldn't find "libcom_iksoftware_unimes.so"
at java.lang.Runtime.loadLibrary0(Runtime.java:984)
at java.lang.System.loadLibrary(System.java:1530)
at com.iksoftware.unimes.BroadcastMessage.run(BroadcastMessage.java:46)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6130)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) ПоказатьЧерез раз - имеется ввиду, что каждый раз приложение удаляется и устанавливается заново из того же файла 1cema.xml, то есть каждый раз происходит первый запуск мобильного приложения.
Приложение простое с единственным кодом (закомментированный кусок оставил для наглядности, для воспроизведения ошибки он не нужен):
Процедура ПриНачалеРаботыСистемы()
Если ПодключитьВнешнююКомпоненту("ОбщийМакет.КомпонентаШироковещательныхСообщений", "Broadcasts", ТипВнешнейКомпоненты.Native) Тогда
КомпонентаШироковещательныхСообщений = Новый("AddIn.Broadcasts.UniversalBroadcast");
КомпонентаШироковещательныхСообщений.УстановитьПараметр("FilterName", "scan.rcv.message");
//ШаблонОписанияДанных = КомпонентаШироковещательныхСообщений.ПолучитьШаблонОписанияДанных();
//КомпонентаШироковещательныхСообщений.УстановитьПараметр("CaptureData", ОбщегоНазначенияКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонОписанияДанных, "data", XMLСтрока(Ложь), XMLСтрока(0)));
//Если НЕ КомпонентаШироковещательныхСообщений.Подключить() Тогда
// ТекстОшибки = "";
// КодОшибки = КомпонентаШироковещательныхСообщений.ПолучитьОшибку(ТекстОшибки);
// ПоказатьПредупреждение(, "Компонента широковещательных сообщений не подключена по причине: " + КодОшибки + ", " + ТекстОшибки);
//КонецЕсли;
ПоказатьПредупреждение(, "Компонента широковещательных сообщений успешно подключена");
Иначе
ПоказатьПредупреждение(, "Компонента широковещательных сообщений не подключена");
КонецЕсли;
КонецПроцедуры ПоказатьПри последующих запусках приложения (не первых), всё работает стабильно и ошибок нет.
Проверял на платформах 8.3.13.45 и 8.3.10.84, ТСД EDA50 (android 7.1.1) и HT380K (android 6.0) - в любых комбинациях ТСД и платформы поведение одинаковое.
Теперь наиболее вероятным я вижу сценарий, что при ПодключитьВнешнююКомпоненту() создаётся временный файл, куда сохраняется компонента из макета и при закрытии приложения платформа остаётся запущенной и не освобождает этот файл, поэтому после удаления приложения, его установки и запуска, происходит крах платформы и она закрывается, освобождая этот несчастный файл.
Поэтому и падает приложение через раз: после падения платформы, она выгружается из памяти и файл освобождается, что позволяет один раз удалить приложение, установить его и запустить, а последующий удаление, установка и запуск приводят к краху платформы и всё повторяется.
В чем может быть ошибка при создании объекта?
Компонента = Новый("AddIn.Broadcasts.UniversalBroadcast");Пишет
Тип не определен (AddIn.Broadcasts.UniversalBroadcast)Версия мобильного приложения 8.3.14.53
Версия андроида 7.1.1
События отлавливаются, но данные пустые.
Спасибо заранее.
Успешно завелся ТСД - ZEBRA MC36 Android 4.4
Мобильная платформа 8.3.13.64
Для тех кто будет пользоваться -
ИмяСобытия - можно настроить в ScanConfig (стандартная утилита настройки сканера)
Category - можно настроить в ScanConfig (стандартная утилита настройки сканера)
ИмяСобытия = "com.symbol.scanconfig.SCANDEMO";
Компонента.УстановитьПараметр("FilterName",ИмяСобытия);
Category = "com.symbol.category.DEFAULT";
Компонента.УстановитьПараметр("Category",Category);
barcode = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонДанных,"com.symbol.scanconfig.decode_data",XMLСтрока(Ложь),XMLСтрока(0));
Компонента.УстановитьПараметр("CaptureData",barcode);
Респект автору!
ТСД Honeywell EDA50K
Версия мобильного приложения 8.3.12.64
Версия андроида 7.1.1
При запуске приложения из примера пишет компонента не подключена. В чем может быть причина? Подскажите пожалуйста.
При запуске ошибка:
"Файл не обнаружен \data\user\0\com.e1c.mobile.client\files\1cem\-------\ExtCompT\libcom_iksoftware_unimes.so.cfl"
Пробовал выдернуть из конфигурации компоненту и установить ее через apk, но ошибка не уходит, хотя компонента устанавливается.
Что и где подкрутить, чтобы заработало?
подключаем ВК первый раз на базе1 - все работает. Пытаемся подключить ВК на базе 2 и ловим ошибку:"Файл не обнаружен \data\user\0\com.e1c.mobile.client\files\1cem\-------\ExtCompT\libcom_iksoftware_unimes.so.cfl"
Теперь компонента будет работать только с базой1. Чтобы заработало в базе2 - сносим платформу, устанавливаем и подключаем ВК в базе2.
База1 в таком случае не сможет установить компоненту. Полагаю, что дело в самой платформе (8.3.15.1656)
было
стало
На всякий случай, если кто не знает, как поправить манифест - выгружаете компоненту из конфигурации в файл в виде архива, например, "component.zip", распаковываете полученный архив, правите файл "MANIFEST.XML", собираете файлы обратно в архив и загружаете его обратно в конфигурацию.
При попытке же работы с этой же базой, но клиент-серверной - падает при подключении к внешней компоненте с ошибкой
Файл не обнаружен
'\data\user\0\com.e1c.mobile.client\files\1C\1cem\595d4e06-1d25-fa92-0dea-9b19560ed6b4\ExtCompT\libcom_iksoftware_unimes.so.cfl'.2 (0x00000002)
Подозреваю, это неочевидные багофичи интерпретации манифеста на разных версиях платформы.
Т.е, пока не был прописан атрибут name для конкретной платформы, почему-то именно в клиент-сервере мобильный клиент сохранял библиотеку не под этим именем.
Компонента.УстановитьПараметр("FilterName", "com.xcheng.scanner.action.BARCODE_DECODING_BROADCAST");
Компонента.УстановитьПараметр("CaptureData",СтрокаПараметров, "EXTRA_BARCODE_DECODING_DATA",XMLСтрока(Ложь), XMLСтрока(0))
Не могу понять почему не работает , сборщик не использую, Платформа 8.3.64
(115)
Сам себе отвечу
ИмяСобытия = "com.xcheng.scanner.action.BARCODE_DECODING_BROADCAST"
Компонента = Новый("AddIn.Broadcasts.UniversalBroadcast");
Компонента.УстановитьПараметр("FilterName", ИмяСобытия);
ШаблонДанных = Компонента.ПолучитьШаблонОписанияДанных();
CaptureData = "EXTRA_BARCODE_DECODING_DATA";
barcode = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонДанных,CaptureData,XMLСтрока(Ложь),XMLСтрока(0));
Показатьработает на Атол Smart Lite начиная с версии 8.3.11 и выше (ниже не пробовал), обязательно надо собрать приложение в APK.
2. у меня есть еще один аппарат Атол Smart Droid, проверка батарейки работает. Не могу поймать событие по ScanWedge
ИмяСобытия = "DATA_SCAN";
CaptureData = "DATA_STRING";
ИмяСобытия = "com.cipherlab.barcodebaseapi.PASS_DATA_2_APP";
barcodeCipher = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонДанных,"Decoder_Data",XMLСтрока(Ложь),XMLСтрока(0));
Компонента.УстановитьПараметр("CaptureData",barcodeCipher);
Компонента.УстановитьПараметр("CaptureData",barcodeCipher);
Спасибо тебе добрый человек. Тоже пол дня убил пока не нашел твой комментарий!
В 1С есть для посылки интентов ЗапускПриложенияМобильногоУстройства(), но насколько я понял через него можно послать не любой интент. У тех же ТСД Zebra есть , позволяющий с помощью интентов управлять сканером. Ни один из этих интентов не получилось послать через ЗапускПриложенияМобильногоУстройства(), в то время как из простейшего андроид-приложения это делается элементарно.
Хорошая компонента. Я прикрутил её к мобильному клиенту. Платформы (моб. и серверная) 8.3.14. ТСД Honeywell EDA50. Но есть 2 вопроса.
1. Настроил всё на тестовой базе. Всё хорошо. При подключении 2-ой базы появляется ошибка "Файл не обнаружен..." на моменте подключить внешн. компоненту (см. картинку).
2. Никак не могу завести на 2-м терминале Zebra. Я попробовал, как написано в комментариях, но ничего не вышло. Может быть, проблема с настройкой Data wedge...
2-ой вопрос снят.
Для тех, кто как я не сразу "въехал" то, о чём писали коллеги, выкладываю полный текст для Зебры:
Компонента.УстановитьПараметр("FilterName", "scan.rcv.message");
if модельТСД = ПредопределенноеЗначение("Справочник.DCT_МоделиТСД.Zebra_TC8000") then
/// Zebra TC8000
Компонента.УстановитьПараметр("Category", "android.intent.category.DEFAULT");
ШаблонДанных = Компонента.ПолучитьШаблонОписанияДанных();
ТипМетки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонДанных, "com.symbol.datawedge.label_type", XMLСтрока(Ложь), XMLСтрока(0));
barcode = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонДанных, "com.symbol.datawedge.data_string", XMLСтрока(Ложь), XMLСтрока(0));
Компонента.УстановитьПараметр("CaptureData", ТипМетки);
/// ---
else///If модельТСД = ПредопределенноеЗначение("Справочник.DCT_МоделиТСД.Honetwell_EDA50") then
/// Honeywell EDA50
ШаблонДанных = Компонента.ПолучитьШаблонОписанияДанных();
barcode = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонДанных, "data", XMLСтрока(Ложь), XMLСтрока(0));
/// ---
endIf;
Компонента.УстановитьПараметр("CaptureData", barcode);
CreateDirectory(ComponentFolder + "Android\ARM64\");
CreateDirectory(ComponentFolder + "Android\x86_64\");
Не исправлял и не факт, что не будет проблем дальше. Подождем рабочего релиза.
На данный момент это не критично, необходим запуск и тестирование в разработке. Будем ждать нормального сборщика. С 1с будем уже разбираться.
Сейчас гугл отказывается выкладывать АПК без х64
Работает на моб. платформе 8.3.14.78
Настройки для сканеров ZKC. Они же Vioteh.
ИмяСобытия = "com.zkc.scancode";
Компонента = Новый("AddIn.Broadcasts.UniversalBroadcast");
Компонента.УстановитьПараметр("FilterName",ИмяСобытия);
ШаблонДанных = Компонента.ПолучитьШаблонОписанияДанных();
code = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонДанных,"code",XMLСтрока(Ложь),XMLСтрока(0));
Компонента.УстановитьПараметр("CaptureData",code);
Теперь пытаюсь отловить нажатия на кнопки. Знаю, что должен кидать broadcast нажатий и отпусканий. Неясно что ставить в фильтр.
К примеру
ИмяСобытия1 = "com.zkc.scancode";
ИмяСобытия2 = "android.view.KeyEvent"; //это неправильно. Просто для примера.
Я уже плюнул на это, перешел на xamarin.
Если не Компонента.Подключить(НомерУстройства) Тогда
ТекстОшибки = "";
КодОшибки = Компонента.ПолучитьОшибку(ТекстОшибки);
Сообщить(,"Ошибка: "+КодОшибки+", "+ТекстОшибки);
КонецЕсли;
По отладчику заходит в это условие, но Код ошибки и текст ошибки пустые. как определить проблему ?
И везде Компонента.Подключить = Ложь.
Сейчас всё переделал под 1с сборщик apk. Создал приложение. Приложение стало вылетать на
Компонента.УстановитьПараметр("CaptureData" - Просто вылетает на экран андроида. Только комментируешь, всё запускается без ошибок и Компонента.Подключить дает истину.
При использовании "AddIn.Broadcasts.UniversalBroadcast" событие сканирования у меня перехватывается, но самого штрихкода я не вижу. Что нужно прописать чтобы вышел штрихкод?
При использовании "AddIn.Broadcasts.Clipboard" событие тоже отрабатывает, и даже показывает штрихкод, но там не отрабатывает FilterName, и соответственно попадает весь мусор. Вопрос как все таки наложить фильтр?
Из двух способов для меня конечно предпочтительнее чтобы заработал первый).
Спасибо тебе человечище!!!
После перепрошивки эти поделки имени Атола перестали работать с com.hht.datawedge.data_string
Вопрос: а как я должен был догадаться, что надо emdk добавить? может кто-то поделиться сакральными знаниями?
Пытаюсь настроить ТСД, в логе вижу картинку, но не понимаю что писать в настройках компоненты.
10-28 16:50:27.181 767 10111 E ActivityManager: at com.android.server.am.ActivityManagerService.broadcastIntent(ActivityManagerService.java:20019)
10-28 16:50:27.181 767 10111 E ActivityManager: at android.app.ContextImpl.sendBroadcast(ContextImpl.java:971)
10-28 16:50:27.181 767 10111 E ActivityManager: at com.android.server.ScanService.SendScanData(ScanService.java:826)
10-28 16:50:27.181 767 10111 E ActivityManager: at com.android.server.ScanService.-wrap1(Unknown Source:0)
10-28 16:50:27.181 767 10111 E ActivityManager: at com.android.server.ScanService$Task.run(ScanService.java:1409)пробовал FilterName="com.android.server.ScanService"
И FilterName="com.android.server.ScanService.SendScanData"
По похоже это все не то.
Запросил у китайцев информацию, может они что подскажут - но это маловероятно.
А вообще может кто настраивал - ни в коем случае не реклама, просто нарвался на такие и уже вторые сутки не могу их с 1С подружить.
В обще сам спросил и сам отвечу.
С данной ВК не смог разобраться. Точнее в какой то момент смог получить внешнее событие, но без данных, просто XML с именем моего инвента.
В общем плюнул на эту затею и пошел искать дальше нашел как вызвать внешнее событие в 1С, ну то есть тупо поймать 1 интен и отправить другой.
а вот описание, как подправить манифест мобильной платформы.
Все заработало, единственная проблема, что я использую 3 разных вида оборудования, терминалы двух видов и блюпупные сканеры ШК.Поэтому 3 apk разные приходится держать под рукой
Осталось теперь найти прогера, который соберет все 3 компоненты в одну ВК для мобильной платформы.
<?xml version="1.0" encoding="UTF-8"?><MessageData>
<FilterName>scan.rcv.message</FilterName>
<FilterData name="barocode">
<ArrayValue>49</ArrayValue>
<ArrayValue>49</ArrayValue>
<ArrayValue>48</ArrayValue>
<ArrayValue>48</ArrayValue>
<ArrayValue>48</ArrayValue>
<ArrayValue>48</ArrayValue>
<ArrayValue>49</ArrayValue>
<ArrayValue>55</ArrayValue>
<ArrayValue>50</ArrayValue>
<ArrayValue>48</ArrayValue>
<ArrayValue>56</ArrayValue>
<ArrayValue>51</ArrayValue>
<ArrayValue>53</ArrayValue>
</FilterData>
</MessageData>
Только еще нужно декодировать из ASCII, но это просто
Бьюсь с очередным устройством, где
Компонента = Новый("AddIn.Broadcasts.UniversalBroadcast");
ИмяСобытия = "com.bw.scanservice";
Компонента.УстановитьПараметр("FilterName",ИмяСобытия);
Точно работает, но, не зная фильтров - непонятно как поймать событие.
Мобильная платформа 8.3.15.62
Андроид 5.1.1
Размер файла компоненты 1.1.4 1644Кб
Код:
ИмяСобытия = "android.intent.action.BATTERY_CHANGED";
Если ПодключитьВнешнююКомпоненту("ОбщийМакет.Макет", "Broadcasts", ТипВнешнейКомпоненты.Native) Тогда
Компонента = Новый("AddIn.Broadcasts.UniversalBroadcast");
Компонента.УстановитьПараметр("FilterName",ИмяСобытия);
НомерУстройства = Неопределено;
Если не Компонента.Подключить(НомерУстройства) Тогда
ТекстОшибки = "";
КодОшибки = Компонента.ПолучитьОшибку(ТекстОшибки);
ПоказатьПредупреждение(,"Ошибка: "+КодОшибки+", "+ТекстОшибки);
Иначе
ID_BarcodeScanner = НомерУстройства;
КонецЕсли;
Иначе
ПоказатьПредупреждение(,"Компонента не подключена",5);
ЗавершитьРаботуСистемы(Ложь);
КонецЕсли;
ПоказатьВнешнее событие возвращает:
<?xml version="1.0" encoding="UTF-8"?><MessageData><FilterName>android.intent.action.BATTERY_CHANGED</FilterName></MessageData>Планировал получить значения фильтров.
ИмяСобытия = "com.android.scanservice.scancontext";
Компонента.УстановитьПараметр("FilterName",ИмяСобытия);
ШаблонДанных = Компонента.ПолучитьШаблонОписанияДанных();
Scan_context = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонДанных,"Scan_context",XMLСтрока(Ложь),XMLСтрока(0));
Компонента.УстановитьПараметр("CaptureData",Scan_context);
3 дня. Все перепробовал. Component 1.1.4 - не заработал ни под 8.3.14, ни под 8.3.15. Пробовал и на Андроид 5, и на Андроид 7.
Пришлось слить ScanService.APK, Развернуть в Андроид Студии и методично просматривать код.
Всем, кому интересно, вот, примерно, так ищутся интенты.
&НаКлиенте
Процедура ПриОткрытии(Отказ)
Если не ПодключитьВнешнююКомпоненту("ОбщийМакет.Component", "Broadcasts", ТипВнешнейКомпоненты.Native) Тогда
ПоказатьПредупреждение(,"Компонента не подключена",5);
ЗавершитьРаботуСистемы(Ложь);
КонецЕсли;
ИмяСобытия = "com.xcheng.scanner.action.BARCODE_DECODING_BROADCAST";
Компонента = Новый("AddIn.Broadcasts.UniversalBroadcast");
Компонента.УстановитьПараметр("FilterName", ИмяСобытия);
ШаблонДанных = Компонента.ПолучитьШаблонОписанияДанных();
CaptureData = "EXTRA_BARCODE_DECODING_DATA";
barcode = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонДанных,CaptureData,XMLСтрока(Ложь),XMLСтрока(0));
Компонента.УстановитьПараметр("CaptureData", barcode);
Если Не Компонента.Подключить() Тогда
Сообщить("Не удалось подключить компоненту");
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ВнешнееСобытие(Источник, Событие, Данные)
Сообщить("Событие вызвано");
Сообщить(Данные);
КонецПроцедуры
ПоказатьПлатформа 8.3.16.1063,мобильная платформа 8.3.15.62. Пробовал и мобильное приложение и мобильный клиент. Отдельно устанавливал на ТСД com_iksoftware_unimes.apk. В настройках сканирования установил Data Receive Method BROADCAST_EVENT. Кроме этого ничего не делал.
Также пробовал реализовать через буфер обмена следующим образом:
&НаКлиенте
Процедура ПриОткрытии(Отказ)
ПодключитьВнешнююКомпоненту("ОбщийМакет.Component", "Broadcasts", ТипВнешнейКомпоненты.Native);
Компонента = Новый("AddIn.Broadcasts.UniversalBroadcast");
КомпонентаБуфер = Новый("AddIn.Broadcasts.Clipboard");
КомпонентаБуфер.Подключить();
КонецПроцедуры
&НаКлиенте
Процедура ВнешнееСобытие(Источник, Событие, Данные)
Сообщить("Событие вызвано");
Сообщить(Данные);
КонецПроцедуры
ПоказатьВ настройках сканирования установил Data Receive Method CLIPBOARD_EVENT. При сканировании приложение завершается с ошибкой. также если просто любой текст скопировать вылетает с ошибкой. Но если не подключать компоненту, свойство СодержимоеБуфера отражается корректно.
Прошу помочь разобраться
Попробовал запустить компоненту под мобильной платформой мобильная - 8.3.13.45.
ОС - Винда 7 х64
Сборщик - релиз 2.0.8.19 под платформой 8.3.13.1690 (32 разряда)
мобильная - 8.3.13.45
Терминал Атол Смарт Дройд
В архиве компоненты как автор говорит удалил строки для 64 разрядной и в манифесте тоже такие же строки удалил, залил в макет двоичный в конфе
написал строки при открытии формы на клиенте
Если Не ПодключитьВнешнююКомпоненту("ОбщийМакет.Component", "Broadcasts", ТипВнешнейКомпоненты.Native) Тогда
ПоказатьПредупреждение(,"Компонента не подключена",5);
ЗавершитьРаботуСистемы(Ложь);
КонецЕсли;
//ИмяСобытия = "com.xcheng.scanner.action.BARCODE_DECODING_BROADCAST"; //смарт лайт
ИмяСобытия = "com.hht.emdk.datawedge.data_string"; //смарт дройд
Компонента = Новый("AddIn.Broadcasts.UniversalBroadcast");
Компонента.УстановитьПараметр("FilterName", ИмяСобытия);
ШаблонДанных = Компонента.ПолучитьШаблонОписанияДанных();
//CaptureData = "EXTRA_BARCODE_DECODING_DATA"; //смарт лайт
CaptureData = "DATA_STRING"; //смарт дройд
barcode = ОбщегоНазначения.ПодставитьПараметрыВСтроку(ШаблонДанных,CaptureData,XMLСтрока(Ложь),XMLСтрока(0));
Компонента.УстановитьПараметр("CaptureData", barcode);
Если Не Компонента.Подключить() Тогда
//Сообщить("Не удалось подключить компоненту");
ТекстОшибки = "";
КодОшибки = Компонента.ПолучитьОшибку(ТекстОшибки);
ПоказатьПредупреждение(,"Ошибка: "+КодОшибки+", "+ТекстОшибки);
КонецЕсли; ПоказатьПриложение при открытии вываливается в ошибку "Ошибка формата потока"...
Я вижу тут есть, у кого под 13 платформой работай, не поделитесь - какие манипуляции надо делать?
Если закомментировать подключение компоненты - то приложение открывается.
Ранее использовал Компоненту 1.1.2, которая работала. Попробовал подгрузить 1.1.4. Она не заработала у меня ни на 14, ни на 15 платформе.
Вернул компоненту 1.1.2. Она тоже перестала работать.
ПодключитьВнешнююКомпоненту("ОбщийМакет.Component", "Broadcasts", ТипВнешнейКомпоненты.Native)Возвращала Ложь с обеими компонентами.
Не знаю, что помогло из этих действий:
- Снес IIS, поставил Apache (удобнее, быстрее)
- Переустановил платформу 14 на Андроид.
- Установил Платформу 14 на ПК.
- Переопубликовал приложение.
Черт его знает. Мне кажется ВК где-то кэшируется на Андроиде. Непонятно как, но 1.1.2 после 1.1.4 снова заработала только после всех этих действий.
Как поймать эти события, те которые тут писали не подходят, внешнее событие не срабатывает. А конфигурация автора на этом терминале работает по аккумуляторной батарее, у него событие внешнее срабатывает.
И буфер при сканировании приложения автора отрабатывает, туда сканируемый штрихкод попадает.
Зачем отладка, на ТСД через сообщить всё прекрасно видно. Я не разбирался, как с ТСД в отладку входить(
Использовал мобильную платформу 15 и соответственного её сборщика.
Через "UniversalBroadcast" на штрихкодах типа "code128", где помимо цифр и латиницы используются спецсимволы - ВК определила "<" как "& lt;" и ">" как "& gt;" (пробелы вставил, так как веб страница их тут же переводит в знаки больше и меньше) - на фото видно что это за символы. Хотя через буфер отработала ВК в читабельном виде. Но это я думаю уже особенности xml и назначения имен в этой среде. Поэтому надо будет кто использует такие штрихкода помимо парсинга в функции учитывать такого рода символы и разбирать их самому, чтобы получить строковое значение самого штрихкода.
В прикрепленном файле штрихкод <EMP>-1 и видно как его отработала ВК.
И еще остался вопрос, почему если используешь два фильтра "FilterName" и "CaptureData" - через "Данные" сразу не возвращать значение? ПО аналогии с типовой компонентой для сканера штрихкода? Чтобы строковое значение xml потом не парсить?
Я на примере просто выводил "Сообщить" на ТСД, так как не смог попасть в отладку.
Поставил его в общий модуль ОбщегоНазначенияКлиент. Вызываю из любой формы по внешнему событию для расшифровки ШК.
&НаКлиенте
Функция РасшифроватьСообщение(Данные) Экспорт
Струк = Новый Структура("Источник,Данные");
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.УстановитьСтроку(Данные);
ПостроительDOM = Новый ПостроительDOM;
ДокументDOM = ПостроительDOM.Прочитать(ЧтениеXML);
Для Каждого Элемент Из ДокументDOM.ЭлементДокумента.ДочерниеУзлы Цикл
Если Элемент.ИмяЭлемента = "FilterData" Тогда
Для Каждого Атрибут Из Элемент.Атрибуты Цикл
Если Атрибут.Значение = "Scan_context" Тогда
ШК = Элемент.ПервыйДочерний.Данные;
Струк.Вставить("Источник", "СканерШтрихкода");
Струк.Вставить("Данные", ШК);
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
Возврат Струк;
КонецФункции
ПоказатьВнимание на:
Если Атрибут.Значение = "Scan_context" Тогда
Вместо "Scan_context" ставите свой интент-фильтр!
Помогите, плз...
Вопрос по ТСД ATOL Smart.lite. Пробовал чистый пример от автора запустить на ТСД в режиме мобильной платформы. Не собирал конфигурацию с apk. Установил платформу, опубликовал конфигурацию для мобильной платформы. На ТСД конфигурация запускается, но выдает ошибку «Компонента не подключена».
В комментариях выше видел, что есть какая-то тонкость запуска примера без сборки.
Поделитесь хитростью. Пожалуйста.
P.S. При сборка в apk компонента подключается и ловит события.
Герман, если хотите, могу кинуть работающую на указанном ТСД конфигурацию. Только как-то сообщите мне почту или ещё какой-то контакт. Мож это как-то Вам поможет.
Кому нужно, у меня на данный момент у меня работает по этому сценарию . Имя broadcast "DATA_SCAN". в утилите ScanWedge настройку Send barcode dataставим "off". Работает на платформе не выше 8.3.11.
Если не ПодключитьВнешнююКомпоненту("ОбщийМакет.Component", "Broadcasts", ТипВнешнейКомпоненты.Native) Тогда
ПоказатьПредупреждение(,"Компонента не подключена. Сканер работать не будет");
КонецЕсли;
Компонента = Новый("AddIn.Broadcasts.UniversalBroadcast");
Компонента.УстановитьПараметр("FilterName", "DATA_SCAN");
Шбл=Компонента.ПолучитьШаблонОписанияДанных();
Компонента.УстановитьПараметр("CaptureData",
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
Шбл,
"com.hht.emdk.datawedge.data_string",
XMLСтрока(Ложь),
XMLСтрока(0)
)
);
Если Не Компонента.Подключить(НомерУстройства) Тогда
Сообщить("Не удалось подключить компоненту");
ТекстОшибки = "";
КодОшибки = Компонента.ПолучитьОшибку(ТекстОшибки);
ПоказатьПредупреждение(,"Ошибка: "+КодОшибки+", "+ТекстОшибки);
КонецЕсли;
ПоказатьРезультат придет в виде xml. А разобрать xml - дело техники.
Компонента.УстановитьПараметр("FilterName", "android.intent.ACTION_DECODE_DATA");
barcode = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Компонента.ПолучитьШаблонОписанияДанных(),"barcode_string",XMLСтрока(Ложь),XMLСтрока(0));
Компонента.УстановитьПараметр("CaptureData", barcode);
вот весь код, главное найти нужное название события на ТСД
Процедура ОбработкаВнешнегоСобытия(Источник, Событие, Данные)
//Сообщить(Событие);
//Сообщить(Данные);
Если Событие = "UniversalBroadcastEvent" Тогда
Протокол = Данные;
Часть1=Сред(Данные,СтрНайти(Данные,"_DATA"">")+7,СтрДлина(Данные)-(СтрНайти(Данные,"_DATA"">")+7));
Штрихкод= Лев(Часть1,(СтрНайти(Часть1,"<")-1));
Свойства = Новый Структура();
Свойства.Вставить("Данные", Штрихкод);
Если СтрДлина(Штрихкод)= 13 тогда
Оповестить("ВнешнееСобытие",Свойства,);
ИначеЕсли СтрДлина(Штрихкод)= 11 тогда
ОбщегоНазначенияКлиент.СоздатьСборку(Свойства);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Процедура ПриНачалеРаботыСистемы()
//СоОбщить("1");
#Если НЕ ТолстыйКлиент И НЕ ТонкийКлиент И НЕ Вебклиент тогда
ИмяСобытия="com.xcheng.scanner.action.BARCODE_DECODING_BROADCAST";
Если не ПодключитьВнешнююКомпоненту("ОбщийМакет.Component", "Broadcasts", ТипВнешнейКомпоненты.Native) Тогда
ПоказатьПредупреждение(,"Компонента не подключена",5);
ЗавершитьРаботуСистемы(Ложь);
Иначе
Компонента = Новый("AddIn.Broadcasts.UniversalBroadcast");
Компонента.УстановитьПараметр("FilterName", "com.xcheng.scanner.action.BARCODE_DECODING_BROADCAST");
ШаблонДанных = Компонента.ПолучитьШаблонОписанияДанных();
tech = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонДанных,"EXTRA_BARCODE_DECODING_DATA",XMLСтрока(Ложь),XMLСтрока(0));
Компонента.УстановитьПараметр("CaptureData",tech);
КонецЕсли;
Если не Компонента.Подключить() Тогда
ТекстОшибки = "";
КодОшибки = Компонента.ПолучитьОшибку(ТекстОшибки);
ПоказатьПредупреждение(,"Ошибка: "+КодОшибки+", "+ТекстОшибки);
КонецЕсли;
#КонецЕсли
КонецПроцедуры
ПоказатьТСД Атол Smart.Pro
Версия мобильной платформы 8.3.16.142
Загрузил в мобильное приложение через конфигуратор.
При нажатии на Старт выдается ошибка 0.
Аналогично для сканера при вызове метода Подключить() выдает ошибку компонента не подключена, код ошибки 0.
Для сканера пробовал вводить разные строки для ИмяСобытия , изначально пробовал из настроек в intent
ИмяСобытия = "com.hht.scanwedge";
ИмяКатегории = "android.intent.category.DEFAULT";
ScanDataLabel = "com.hht.datawedge.data_string";
ScanTypeLabel = "com.hht.datawedge.label_type";
Кто-то победил подобную проблему и каким образом?
Мобильная платформа 8.3.17.67
ТСД: Honeywell EDA60K-0
1. Опубликованное приложение на вебсервере не подключает компоненту при старте. Ни 64х, ни 32х. Так и не осилил
2. Подключается только у собранного приложения
3. Добавил в настройках ТСД Data Intent, как указано в (11)
4. Добавил там же Category
5. Использовал указанные интент и категорию (тип возвращаемых данных 15 (массив байтов)):
ИмяСобытия = "android.intent.action.scan";
ИмяКатегории = "barcode";
Компонента.УстановитьПараметр("FilterName",ИмяСобытия);
ШаблонДанных = Компонента.ПолучитьШаблонОписанияДанных();
dataBytes = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонДанных,"dataBytes",XMLСтрока(true),XMLСтрока(15)); //массив байтов
Компонента.УстановитьПараметр("CaptureData",dataBytes);
ПоказатьРаботает
Образовалась теперь одна проблема:
При сканировании штрих-кодов иногда тсд как-будто заикается, выдает предпоследний считанный штрихкод, причем это происходит непостоянно. Например считал несколько разных все нормально, потом заикнулся выдал предпоследний, потом опять все нормально.
Ребят , подскажите в какую сторону копать?
Мобильная платформа 8.3.17.67.
#Если МобильноеПриложениеКлиент ИЛИ МобильноеПриложениеСервер ИЛИ МобильныйКлиент Тогда
ИмяСобытия = "DATA_SCAN";
ИмяКатегории = "android.intent.category.DEFAULT";
ScanDataLabel = "com.hht.emdk.datawedge.data_string";
ScanTypeLabel = "com.hht.emdk.datawedge.label_type";
Если ПодключитьВнешнююКомпоненту("ОбщийМакет.Component", "Broadcasts", ТипВнешнейКомпоненты.Native) Тогда
Попытка
Компонента = Новый ("AddIn.Broadcasts.UniversalBroadcast");
Компонента.УстановитьПараметр("FilterName",ИмяСобытия);
Компонента.УстановитьПараметр("Category",ИмяКатегории);
ШаблонДанных = Компонента.ПолучитьШаблонОписанияДанных();
Barcode = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонДанных,
ScanDataLabel,
XMLСтрока(Ложь),
XMLСтрока(0));
Компонента.УстановитьПараметр("CaptureData",BarCode);
Если Не Компонента.Подключить(НомерУстройства) Тогда
Сообщить("Не удалось подключить компоненту");
ТекстОшибки = "";
КодОшибки = Компонента.ПолучитьОшибку(ТекстОшибки);
Сообщить("Код ошибки:" + Строка(КодОшибки) + ", " + ТекстОшибки);
Возврат Ложь;
Иначе
// Сообщить("Компонента Broadcasts подключена!");
// глКомпонентаВключена = Истина;
Возврат Истина;
КонецЕсли;
Исключение
Сообщить(ОписаниеОшибки());
Сообщить("Ошибка создания класса Component");
Конецпопытки;
Иначе
Сообщить("Компонента Component не загружена");
КонецЕсли;
#КонецЕсли
Возврат Ложь;
КонецФункции
ПоказатьНастройки в Scanwedge ставил аналогичные как в коде и чтобы пошустрей работал отключил все типы шк с которыми не работаю.
Есть глюк периодически "заикается" ловит предпоследний отсканированный штрихкод. Этот глюк победить не смог.
Андроид на аппарате какой-то сильно обрезанный, даже vpn не дает настроить, просит настройку блокировки экрана, а в нее не заходит вываливает ошибку.
Хочется сменить прошивку, но что-то очкую
Взлетело только когда отлавливаю событие "DATA_SCAN"
Компонента.УстановитьПараметр("FilterName", "DATA_SCAN");
Причем оно отрабатывает даже когда в ScanWedge отключен Broadcast Intent.
Вы тоже отлавливаете "DATA_SCAN"?
В обработке оповещения ловишь:
Если Источник = "ПодключаемоеОборудование" Тогда
Если ИмяСобытия = "UniversalBroadcastEvent" Тогда
НайденныйШК = ОбщегоНазначенияКлиент.ПолучитьШтрихКодИзXML(Параметр);
КонецЕсли;
КонецЕсли;
Функция ПолучитьШтрихКодИзXML(СтрокаXML) Экспорт
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.УстановитьСтроку(СтрокаXML);
ПостроительDOM = Новый ПостроительDOM;
ДокументDOM = ПостроительDOM.Прочитать(ЧтениеXML);
СписокУзлов = ДокументDOM.ДочерниеУзлы;
ТекстШК = Строка(СписокУзлов[0].ПоследнийДочерний.ТекстовоеСодержимое);
Возврат ТекстШК;
КонецФункции ПоказатьBarcode utility 1.1.2
Вот мой код
ИмяСобытия = "com.xcheng.scanner.action.BARCODE_DECODING_BROADCAST";
Компонента = Новый("AddIn.Broadcasts.UniversalBroadcast");
Компонента.УстановитьПараметр("FilterName", ИмяСобытия);
ШаблонДанных = Компонента.ПолучитьШаблонОписанияДанных();
CaptureData = "EXTRA_BARCODE_DECODING_DATA";
barcode = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонДанных,CaptureData,XMLСтрока(Ложь),XMLСтрока(0));
Если не Компонента.Подключить(НомерУстройства) Тогда
ТекстОшибки = "";
КодОшибки = Компонента.ПолучитьОшибку(ТекстОшибки);
ПоказатьПредупреждение(,"Ошибка: "+КодОшибки+", "+ТекстОшибки);
КонецЕсли;
ПоказатьСканер в настройках в режиме Broadcast event
При сканировании внешнее событие отлавливается, Данные содержат XML строку
Но в ней нет штрихкода((((
В форме "Получение оповещений" то же самое.
Если делаю через clipboard (буфер), то работает в форме "Работа с буфером обмена". Кто сталкивался?
МодельТСД = Разработка.ПолучитьМодельТСД();
Если НЕ ЗначениеЗаполнено(МодельТСД) Тогда
Возврат;
КонецЕсли;
#Если МобильноеПриложениеКлиент Тогда
Если ПодключитьВнешнююКомпоненту("ОбщийМакет.Component", "Broadcasts", ТипВнешнейКомпоненты.Native) Тогда
глКомпонента = Новый("AddIn.Broadcasts.UniversalBroadcast");
ШаблонДанных = глКомпонента.ПолучитьШаблонОписанияДанных();
Если МодельТСД = ПредопределенноеЗначение("Перечисление.МоделиТСД.Caribe_PL_45L")
ИЛИ МодельТСД = ПредопределенноеЗначение("Перечисление.МоделиТСД.Caribe_PL_40L") Тогда
ИмяСобытияСканирования = "scan.rcv.message";
barcode = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонДанных, "barocode", XMLСтрока(Истина), XMLСтрока(15));
ИначеЕсли МодельТСД = ПредопределенноеЗначение("Перечисление.МоделиТСД.Caribe_PL_55L") Тогда
ИмяСобытияСканирования = "com.action.SCAN_RESULT";
barcode = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонДанных, "scanContext", XMLСтрока(Истина), XMLСтрока(15));
ИначеЕсли МодельТСД = ПредопределенноеЗначение("Перечисление.МоделиТСД.Urovo_i6300")
ИЛИ МодельТСД = ПредопределенноеЗначение("Перечисление.МоделиТСД.Urovo_i6310") Тогда
ИмяСобытияСканирования = "android.intent.ACTION_DECODE_DATA";
barcode = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонДанных, "barcode_string", XMLСтрока(Ложь), XMLСтрока(0));
ИначеЕсли МодельТСД = ПредопределенноеЗначение("Перечисление.МоделиТСД.Newland_MT65_Beluga")
ИЛИ МодельТСД = ПредопределенноеЗначение("Перечисление.МоделиТСД.Newland_MT90") Тогда
ИмяСобытияСканирования = "nlscan.action.SCANNER_RESULT";
barcode = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонДанных, "SCAN_BARCODE1", XMLСтрока(Ложь), XMLСтрока(0));
КонецЕсли;
глКомпонента.УстановитьПараметр("FilterName", ИмяСобытияСканирования);
глКомпонента.УстановитьПараметр("CaptureData", barcode);
Если НЕ глКомпонента.Подключить(глНомерУстройства) Тогда
ТекстОшибки = "";
КодОшибки = глКомпонента.ПолучитьОшибку(ТекстОшибки);
Сообщить("Ошибка: "+КодОшибки+", "+ТекстОшибки);
КонецЕсли;
Иначе
Сообщить("Компонента сканирования не подключена");
КонецЕсли;
#КонецЕсли
ПоказатьЕсли не Компонента.Подключить(НомерУстройства) Тогда
ТекстОшибки = "";
КодОшибки = Компонента.ПолучитьОшибку(ТекстОшибки);
ПоказатьПредупреждение(,"Ошибка: "+КодОшибки+", "+ТекстОшибки);
КонецЕсли;Ошибка: 0,
куда копать?
Помогите, пожалуйста "чайнику".
Имеется ТСД Chipherlab RK25.
Будет ли данное решение работать на нем и как подключить?
Засунул в макет вариант компоненты 1,5 годовалой давности, там такой проблемы не возникает...
Подскажите, куда копать?
Спасибо!
Делаю так:
Компонента.УстановитьПараметр("FilterName", "android.intent.action.AIRPLANE_MODE");
Компонента.УстановитьПараметр("OutputFormat", 1);
state = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Компонента.ПолучитьШаблонОписанияДанных(),"state", XMLСтрока(Ложь), XMLСтрока(16));
Компонента.УстановитьПараметр("CaptureData", state);
Получаю xml
Команда "Выгрузить внеш. комп" для текущей строки ни чего не делает, хотя с другими компонентами проблемы нет.
Хочу купить вашу компоненту, но нет возможности купить ее за смартмани. Можете добавить способ покупки за рубли
#Если МобильноеПриложениеКлиент Тогда
Компонента.Отключить(НомерУстройства);
#КонецЕсли
Метод подключить отрабатывает
ОС Android 9
ТСД Honeywell EDA61K
Мобильная платформа 8.3.18.16
Компонента при открытии формы подключается.
MIME-типы .so и .apk добавлены
Хотим написать приложение на ТСД для внутреннего учета. Столкнулись с проблемой сканера ШК.
Вопросы:
1. Будет ли ваша компонента работать в мобильном клиенте?
2. Будет ли компонента работать с платформой 8.3.18 и выше?
3. Будет ли компонента работать с Android 4, 7 и 10?
Если нужна будет адаптация под новый ТСД - можно к вам обратиться?
Output broadcast tag: value
Код такой:
ИмяВнешнегоСобытия = "android.intent.action.SCANRESULT";
Если ПодключитьВнешнююКомпоненту("ОбщийМакет.Component", "Broadcasts", ТипВнешнейКомпоненты.Native) Тогда
Компонента = Новый("AddIn.Broadcasts.UniversalBroadcast");
Компонента.УстановитьПараметр("FilterName",ИмяВнешнегоСобытия);
ШаблонДанных = Компонента.ПолучитьШаблонОписанияДанных();
barcode = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонДанных,"value", XMLСтрока(Истина), XMLСтрока(15));
Компонента.УстановитьПараметр("CaptureData",barcode);
Если не Компонента.Подключить(НомерУстройства) Тогда
ТекстОшибки = "";
КодОшибки = Компонента.ПолучитьОшибку(ТекстОшибки);
ПоказатьПредупреждение(,"Ошибка: "+КодОшибки+", "+ТекстОшибки);
КонецЕсли;
Иначе
ПоказатьПредупреждение(,"Компонента не подключена",5);
ЗавершитьРаботуСистемы(Ложь);
КонецЕсли;
Но сообщения не перехватываются. Может кто то уже настраивал данные ТСД?
Купили у Вас ВК, не получается установить подключение через Bluetooth.
Все работает но при подключении к Bluetooth устройству возникает ошибка: 2010, read failed, socket might closed or timeout, read ret: -1.
Использую: Андроид 9 и 1С:Предприятие 8.3 (8.3.18.1208) и Мобильная платформа 8_3_19_51 и Сборщик мобильных приложений 8_3_19_51 и PUBID_779912-broadcast
Как с Вами связаться? Интересует покупка исходного кода ВК.
Ни в какую не подключается ни на смартфоне (ставил чтобы проверить подключится ли вообще компонента), ни на терминале UROVO DT40.
При этом если собрать мобильное приложение из конфигурации-примера (с компонентой с исходным манифестом) на тсд - все работает, компонента подключается, событие ловится.
Что еще можно попробовать сделать?
p.s. пробовал в свою базу засунуть "родную" компоненту urovo - также ПодключитьВнешнююКомпоненту выдает ложь. Проблема явно с публикацией, но в чем именно - никак не пойму.
Имя макета правильное. Что еще может быть не так?
#Область Универсальная
Процедура УстановитьКомпонентуУниверсальнаяЗавершение(ДополнительныеПараметры) Экспорт
врОповещение = Новый ОписаниеОповещения("ПодключитьКомпонентуУниверсальная",
кдОбщегоНазначенияМобКлиентКлиент.ЭтотОбъект,
,
"ОбработатьОшибкуПодключенияУниверсальная",
кдОбщегоНазначенияМобКлиентКлиент.ЭтотОбъект);
НачатьПодключениеВнешнейКомпоненты(врОповещение, "ОбщийМакет.Component", "Component", ТипВнешнейКомпоненты.Native);
КонецПроцедуры
Процедура ОбработатьОшибкуУстановкиУниверсальная(прИнформацияОбОшибке, СтандартнаяОбработка, ДополнительныеПараметры) Экспорт
Сообщить("Ошибка создания компоненты Универсальная компонента !!!");
ОткрытьФорму("ОбщаяФорма.ФормаАктивацииМобильногоПриложения");
КонецПроцедуры
Процедура ОбработатьОшибкуПодключенияУниверсальная(прИнформацияОбОшибке, СтандартнаяОбработка, ДополнительныеПараметры) Экспорт
Сообщить("Ошибка подключения Универсальная компонента !!!");
ОткрытьФорму("ОбщаяФорма.ФормаАктивацииМобильногоПриложения");
КонецПроцедуры
Процедура ПодключитьКомпонентуУниверсальная(Подключено, ДополнительныеПараметры) Экспорт
Если Подключено Тогда
Попытка
глКомпонента = Новый ("AddIn.Broadcasts.UniversalBroadcast");
Если глТипТСД = ПредопределенноеЗначение("Перечисление.ТСД.LECOM_T80") Тогда
глКомпонента.УстановитьПараметр("FilterName", "scan.rcv.message");
ШаблонДанных = глКомпонента.ПолучитьШаблонОписанияДанных();
barocode = ПодставитьПараметрыВСтроку(ШаблонДанных, "barocode", XMLСтрока(Ложь), XMLСтрока(15));
глКомпонента.УстановитьПараметр("CaptureData", barocode);
КонецЕсли;
Если не глКомпонента.Подключить(глИмяУстройства) Тогда
ТекстОшибки = "";
КодОшибки = глКомпонента.ПолучитьОшибку(ТекстОшибки);
ПоказатьПредупреждение(,"Ошибка: "+КодОшибки+", "+ТекстОшибки);
КонецЕсли;
ОткрытьФорму("ОбщаяФорма.АвторизацияМобильноеПриложение");
Исключение
Сообщить(ОписаниеОшибки());
Сообщить("Ошибка подключения класса Универсальная компонента !!!");
ОткрытьФорму("ОбщаяФорма.ФормаАктивацииМобильногоПриложения");
КонецПопытки;
Иначе
Сообщить("Ошибка !!! Универсальная компонента не подключена");
ОткрытьФорму("ОбщаяФорма.ФормаАктивацииМобильногоПриложения");
КонецЕсли;
КонецПроцедуры
Процедура ИнициализироватьВнешнююКомпонентуУниверсальную() Экспорт
врОповещение = Новый ОписаниеОповещения("УстановитьКомпонентуУниверсальнаяЗавершение",
кдОбщегоНазначенияМобКлиентКлиент.ЭтотОбъект,
,
"ОбработатьОшибкуУстановкиУниверсальная",
кдОбщегоНазначенияМобКлиентКлиент.ЭтотОбъект);
НачатьУстановкуВнешнейКомпоненты(врОповещение, "ОбщийМакет.Component");
КонецПроцедуры
#КонецОбласти
ПоказатьВот мой код подключение, работает во всех клиентах, из процедуры ПриНачалеРаботыСистемы() вызываю ИнициализироватьВнешнююКомпонентуУниверсальную();
Попробовал ваш код, убрав вызовы форм, которых у меня нет. В результате ошибки:
"Установка внешней компоненты не выполнена! В процессе установки произошла ошибка" Возможно, отсутствует компонента для используемого клиентского приложения"
и потом
"Ошибка!!! Универсальная компонента не подключена"
Судя по скринам Вы прописали в IIS MIME в корень сервера, нужно прописать именно в Вашу публикацию, я тоже на эти грабли натыкался, тут наследования видимо нету, т.к. в MIME публикации нету этих типов, пропишите в публикацию думаю заработает.
Теперь на строке
Компонента = Новый("AddIn.Broadcasts.UniversalBroadcast");Выдает ошибку
Тип не определен (AddIn.Broadcasts.UniversalBroadcast)
В этом обсуждении уже был такой вопрос, но на него так никто и не ответил
Игорь есть предложение по доработке.
В последнее время Google и 1с не дают разрешение MANAGE_EXTERNAL_STORAGE, поэтому приходится использовать проводник через запуск мобильного приложения, при этом получение самих данных (двоичные данные) проходит отлично, а вот имя файла, его расширение остается за завесой тайны. Т.к. как сторонние приложения возвращает путь к файлу в виде content://.
Суть предложения. Реализовать метод во внешней компоненте для получения из ссылки content:// реальный путь к файлу file://
На Honeywell EDA60K не считываются штрихкода типа CODE39 через компоненту. В системном тесте сканера - считывается, а вот через компоненту любые EAN13, CODE128 считываются, а вот CODE39 - нет. Помогите, пожалуйста!
На ТСД zebra MC33 работает отлично.
Один вопрос разработчику, ТСД начинает греться это может быть связано с компонентой?
Чтобы выяснить в чем проблема:
1. Передайте на принтер любую строку (он поддерживает ESC) из другого софта, работающего с com bluetooth. Принтер должен ее напечатать
2. Проверьте, что через компоненту из 1С вы передаете текст в OEM кодировке (только с ними работаю зебры). Как перекодировать строку 1С в двоичные данные oem через потоки, надеюсь, разберетесь.
Входная информация:
- До этого работали с версией 1.04 или около того
- Была нормальная работа на Андройд версии 5.1
- На версии андройда 7.1 версия 1.04 компоненты не работает.
- На версии андройда 7.1 и 5.1 версия 1.3 компоненты не работает
- На версии андроида 10 компоненты не работают
есть ли возможность отладить процесс подключения компоненты, так как Функция "ПодключитьВнешнююКомпоненту" возвращает только "да/нет" - без описания, в чем проблема с подключением компоненты.
Вопрос сейчас именно в том, что не происходит первоначального запуска через "ПодключитьВнешнююКомпоненту".
Перепробовал много разных компонент и доп программ.
Остановилс яна одной доп. программе, но она часто вылетала с ошибкой. 1Сный драйвер хоть и видео собвтие от сканера но игнорил его. И только благодаря этой компоненте я выяснил в каких полях какие данные передаются и каких типов. В моем случае часть ТСД передавали строку в barcode, часть barcodeData и все передавали массив данных в barocodeData - и этот массив 1Сный драйвер не понимает. А эта компонента нормально его принимает.
Еще огромное спасибо, что не приходится теперь при каждом новом релизе мобильной платформы менять ее манифест, что бы она принимала броадкасы со сторонней программы(раньше делал это регулярно).
1 В приложении ReaderConfig заходим в раздел Data Output и вводим значение полю Intent Action (имя события)
2 На примере демонстрационной конфигурации автора в параметре FilterName указываем имя из пункта 1
Добавляем параметр СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонДанных,"Decoder_Data",XMLСтрока(Ложь),XMLСтрока(0));
В него компонента будет возвращать результат сканирования. Спасибо tricolor за подсказку.
Автору еще раз большое спасибо!
Печатаю на БТ-принтер zebra z220 (у него язык программирования этикеток CPCL, не нашел в документации поддержки иного языка).
Подключается успешно, однако при отправке получаю "Ошибка: 0, "
Как делаю:
Отправлю на печать через SendData. InutData устанавливаю данными строки (предварительно перевожу ее в двоичные данные) .
Строка содержит этикетку в формате CPCL.
! 0 200 200 240 1
TEXT 7 0 0 0 Message: Here is a test label
BT 0 0 7
BARCODE 128 1 2 75 25 40 TestData
BT OFF
PRINT
Пробовал отправлять аналогично:
1) строку, переведенную в дд, с этикеткой в формате ZPL - результат тот же.
2) строку без перевода в дд с этикеткой в формате ZPL - результат тот же.
3) строку без перевода в дд с этикеткой в формате CPCL - результат тот же.
Может есть мысли ЧЯДНТ?
А поведаете всем что за проблема была и как решили?
Почти все модули и объекты включены в состав автономной конфигурации с приоритетом "автономный сервер".
Есть у кого опыт работы с компонентой в мобильном клиенте без связи с сервером? Куда копать?
НО! Если использовать приложение без сборки (пока не пробовал), а через веб-сервер, то если в мобильном приложении сканировать, потом полностью выйти к списку баз кнопкой назад и заново зайти и попробовать отсканировать, то мобильное приложение 1С падает. Нужно заново заходить и тогда все работает отлично.
Такое поведение было замечено, когда правильно устанавливаешь Action и Extra. Для моего ТСД это DATA_SCAN и com.hht.emdk.datawedge.data_string Если данные указываешь неверно, то и ничего не ловит система но и не падает).
Есть подозрение на утилиту ScanWedge на андроиде 9.
Может кто еще сталкивался с такой проблемой? Поделитесь решением.
Пробовал эту не взлетело, хотя параметры подключения были подобраны правильно и DataWedge был настроен корректно. Проверяли на стороннем мобильном приложении.
"Установка внешней компоненты не выполнена!
В процессе установки произошла ошибка!
Возможно, отсутствует компонента для используемого клиентского приложения."
Единственно, что изменилось - закрыли доступ в Интернет. Кто то еще сталкивался с подобной ситуацией? Как решили?
На 11 версии андроида сканирование заработало. Не знаю в чем дело было.
Обновил Мобильную платформу до Версия 8.3.23.59(32x) и обновил сборщик приложений до 8.3.23.9.
Единственное проблема в обработке.
Форма:ФормаBroadcasts
Элемент формы: РежимРаботы
При его переключении происходит ошибка
"Ошибка подключения внешней компоненты после обновления. Необходима перезагрузка приложения."
Приложение собрано через Android Debug Bridge
1.Перехватывать несколько разных событий
Данные по заряду батареи,нажатие кнопок на ТСД и сообщения сканера ШК.
2. Перехватить сообщения аппаратной клавиатуры, в данный момент занимался с тсд PM451.
Спасибо
Пробую использовать эту компоненту с ТСД. Подключается, ловит Broadcast со штрихкодом, с этим все ок.
Но есть проблема: запускаю приложение, сканирую, все ок. Закрываю приложение, снова открываю, пытаюсь сканировать и приложение вылетает с ошибкой "В работе приложения произошел сбой". При чем до функции Внешнее событие не доходит и не понятно на чем валится. Снова открываю приложение и оно работает штатно, пока его не закрою. Т.е. получается один раз запускаю приложение - оно работает штатно, закрываю, второй раз запускаю - оно вылетает, снова перезапускаю приложение - работает. Мобильная платформа 8.3.23.59
Событие по умолчанию (в приложении сканера можно менять): com.scanner.broadcast
Параметр содержащий штрихкод: barcodeStringData (не смотря на то что стандартный ключ "data", но он почему-то не содержит данных)
Тип данных: 0
У меня CipherLab RS30.
Всё настроил, внешние события приходят, но не получаю ШК.
В поле Decoder_Data не прилетает ничего, хотя в программе ReaderConfig при тесте ШК отображается.
Прописал как в (367) и установил параметр в компоненту.
Подскажите у кого такие же CipherLab как вы настроили Reader Config?
Фильтр: com.cipherlab.barcodebaseapi.PASS_DATA_2_APP
barcodeCipher = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонДанных,"Decoder_Data",XMLСтрока(Ложь),XMLСтрока(16));
Компонента.УстановитьПараметр("CaptureData",barcodeCipher);
Перечитал внимательно статью автора, поменял настройки полей чтения файла от драйвера сканера.
Инструкция для ТСД CipherLab RS30/RS31.
ПриНачалеРаботыСистемы():
Перем пц_КомпонентаДляRS30 Экспорт;
Если не ПодключитьВнешнююКомпоненту("ОбщийМакет.ComponentFromMistaForum", "Broadcasts", ТипВнешнейКомпоненты.Native) Тогда
//какой - то текст ошибки
КонецЕсли;
// тут же в отдельной процедуре сразу включаю компоненту
1. Компонента = Новый("AddIn.Broadcasts.UniversalBroadcast");
2. ИмяСобытия = "com.cipherlab.barcodebaseapi.PASS_DATA_2_APP";
3. Компонента.УстановитьПараметр("FilterName",ИмяСобытия);
4. ШаблонДанных = Компонента.ПолучитьШаблонОписанияДанных();
5. ИмяПоляСоШтрихкодом = "Decoder_Data";
6. barcodeCipher = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонДанных, ИмяПоляСоШтрихкодом, XMLСтрока(Ложь), XMLСтрока(0));
7. Компонента.УстановитьПараметр("CaptureData",barcodeCipher);
8. Компонента.УстановитьПараметр("OutputFormat", 1);
9. НомерУстройства = "";
10. Если НЕ Компонента.Подключить(НомерУстройства) Тогда
КодОшибки = Компонента.ПолучитьОшибку(ТекстОшибки);
КонецЕсли;
ПриЗавершенииРаботыСистемы():
1. НомерУстройства = "";
2. Компонента.Отключить(НомерУстройства);
На каждой форме включаю Внешнее событие и отлавливаю события "UniversalBroadcastEvent".
Потом вытаскиваю из полученного XML штрихкод строковыми функциями и всё работает.
Автору большое спасибо!
Воспользовался предоставленной компонентой. Инициализация проходит без каких либо ошибок.
При этом в 1С обработка внешнего события не возникает.
В настройках DataWedge:
Intent output - Enabled output via intent
Intent action - com.iksoftware.zebra.SCAN
Пробовал в коде (и одновременно в настройках) менять FilterName (и в настройках Intent action) на "DATA_SCAN" и "scan.rcv.message". Результата нет.
Не подскажите , в чем может быть проблема?
Код подключения в обработке :
Попытка
УстановитьВнешнююКомпоненту("ОбщийМакет.Component");
Исключение
Сообщить("Ошибка установки внешней компоненты Component.");
КонецПопытки;
Если ПодключитьВнешнююКомпоненту("ОбщийМакет.Component","Messages",ТипВнешнейКомпоненты.Native) Тогда
Попытка
КомпонентаОповещений = Новый("AddIn.Messages.UniversalBroadcast");
Исключение
Сообщить("Ошибка создания класса UniversalBroadcast.");
Возврат Ложь;
Конецпопытки;
//КомпонентаОповещений.УстановитьПараметр("FilterName", "DATA_SCAN");
//КомпонентаОповещений.УстановитьПараметр("FilterName", "scan.rcv.message");
КомпонентаОповещений.УстановитьПараметр("FilterName", "com.iksoftware.zebra.SCAN");
//КомпонентаОповещений.УстановитьПараметр("Category", "android.intent.category.DEFAULT");
ШаблонДанных = КомпонентаОповещений.ПолучитьШаблонОписанияДанных();
ТипМетки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонДанных, "com.symbol.datawedge.label_type", XMLСтрока(Ложь), XMLСтрока(0));
ТипДанные = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонДанных, "com.symbol.datawedge.data_string", XMLСтрока(Ложь), XMLСтрока(0));
КомпонентаОповещений.УстановитьПараметр("CaptureData", ТипМетки);
КомпонентаОповещений.УстановитьПараметр("CaptureData", ТипДанные);
Попытка
КомпонентаОповещений.Подключить();
Исключение
ТекстОшибкиКомпоненты = "";
КодОшибки = КомпонентаОповещений.ПолучитьОшибку(ТекстОшибкиКомпоненты);
Сообщить("Ошибка : " + КодОшибки + ", " + ТекстОшибкиКомпоненты);
КонецПопытки;
Иначе
Сообщить("Ошибка подключения компоненты UniversalBroadcast.");
Возврат Ложь;
КонецЕсли;
ПоказатьКак правильно подключать сканер, чтобы получать внешнее событие при сканировании асинхронно в фоне?
Работу с весами в синхронном режиме реализовали - работает.
В статье написано -"работу с устройствами через последовательные чтение/запись (com over bluetooth). Чтение данных может выполняться синхронно, в этом случае приложение ожидает данные, пока они не появятся от устройства, а приложение останавливается. Либо асинхронно в двух режимах - по запросу и в фоне. В первом случае компонента проверяет наличие данных и если их нет, возвращает ошибку, во втором ответ от устройства проверяется постоянно в отдельном потоке и при появлении данных в 1С возникает внешнее событие. Последний режим удобен для работы со сканерами, например такими. Работа с блютуз добавлена в представленную компоненту, чтобы расширить область ее применения в отношение сканеров.
One of RECEIVER_EXPORTED or RECEIVER_NOT_EXPORTED should be specified when a receiver isn't being registered exclusively for system broadcasts.
Есть версия компоненты где это решено?
&НаКлиенте
Процедура ПриОткрытии(Отказ)
#Если МобильноеПриложениеКлиент Тогда
УстановитьВнешнююКомпоненту("ОбщийМакет.Component");
Если ПодключитьВнешнююКомпоненту("ОбщийМакет.Component", "Broadcasts", ТипВнешнейКомпоненты.Native) Тогда
Компонента = Новый("AddIn.Broadcasts.UniversalBroadcast");
ИмяСобытия = "com.xcheng.scanner.action.BARCODE_DECODING_BROADCAST";
Компонента.УстановитьПараметр("FilterName", ИмяСобытия);
ШаблонДанных = Компонента.ПолучитьШаблонОписанияДанных();
CaptureData = "EXTRA_BARCODE_DECODING_DATA";
barcode = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонДанных,CaptureData,XMLСтрока(Ложь),XMLСтрока(0));
Компонента.УстановитьПараметр("CaptureData",barcode);
Иначе
ПоказатьПредупреждение(,"Компонента не подключена", 5);
ЗавершитьРаботуСистемы(Ложь);
КонецЕсли;
Если не Компонента.Подключить() Тогда
ТекстОшибки = "";
КодОшибки = Компонента.ПолучитьОшибку(ТекстОшибки);
ПоказатьПредупреждение(,"Ошибка: "+КодОшибки+", "+ТекстОшибки);
КонецЕсли;
#КонецЕсли
КонецПроцедуры
Вам необходимо воспользоваться сборщиком приложений 1С, собрать своё приложение, в нем должны приложится компонента эта. На выходе получаете свой apk файл, который уже устанавливаете на Android и получаете работающую компоненту
Вы можете заказать платную консультацию или разработку у автора. Будет создан приватный заказ на «Бирже заказов» для автора.
№ 779912
Создание 05.02.18 13:22
Обновление 10.11.25 08:39
Просмотры 72877
Загрузки 628
Рейтинг
109
Комментарии 415
Код открыт Да
Рубрики Разработка внешних компонент Мобильная разработка
Кому Разработчик
Тип файла Конфигурация (md, cf)
Платформа 1С:Предприятие 8
Конфигурация Универсальные
Операционная система Android
Страна Не имеет значения
Отрасль Не имеет значения
Налоги Не имеет значения
Вид учета Не имеет значения
Доступ к файлу Абонемент ($m)