Внешний компонент "1С:Сканер штрихкода" (Native) версия для платформы "1С Предприятие 8.3".
Коллеги здравствуйте!
Суть вопроса заключается в использовании внешней компонеты (Версия 10.3.1.2.). Взял ее из "Библиотека подключаемого оборудования для мобильных приложений". В общем проблема работы самого приложения "Библиотека подключаемого оборудования для мобильных приложений" с выбранным сканером на андроид устройстве решена. (Сканер "Netum", использовали разные модели). Решена проблема работы этого сканера в своей конфигурации путем переноса функционала из "Библиотека подключаемого оборудования для мобильных приложений". Но, решение получилось слегка громоздким.
Попытались упростить всю эту схему и столкнулись с тем, что внешнее событие в упрощенной схеме не ловится. Суть упрощения в том, что получаем драйвер из макета , подключаем внешнюю компоненту , ну и дальше как всегда поступали со старыми драйверами надеемся получить внешнее событие при сканировании. Но нет. Так мало того еще и мобильный клиент при попытке сканирования слетает.
Смотрим как зачарованные на реализацию в "Библиотека подключаемого оборудования для мобильных приложений" . Ну используют там модуль сеанса , где устанавливают в этом модуле параметр сеанса, который называется "РабочееМестоКлиента" и тип имеет "СправочникСсылка.РабочиеМеста". Ну и как бы нет ни чего такого. Но, подозрение есть , что без этой штуки не работает связка драйвер - внешнее событие. Есть ли у кого понимание в этом вопросе? Благодарю. Для предвосхищения вопросов типа "Зачем тебе этот новый драйвер? Возьми драйвер постарше и попроще, на котором все работает и не мучайся." Отвечаю, у ряда планшетов на предприятии есть встроенный сканер и там мы результаты сканирования получаем через механизм Broadcast . Вот зачем.
Важное замечание: Содержание лога от внешней компоненты в случае когда мы работаем из функционала БПО и своего упрощенного функционала слегка разный получаю.
В приложенных файлах файл с именем "scan_opos (5)" отвечает не работающей ситуации, файл с именем scan_opos (6) работающей ситуации.
Параметры внешней компоненты в своей реализации устанавливал глядя на то как это все делается в "Библиотека подключаемого оборудования для мобильных приложений". Но в итоге получил не работающий вариант. Все это тестировал в рамках одного и того же мобильного клиента, внешнюю компоненту брал из одного и того же макета.
Заранее благодарю за содействие.
Суть вопроса заключается в использовании внешней компонеты (Версия 10.3.1.2.). Взял ее из "Библиотека подключаемого оборудования для мобильных приложений". В общем проблема работы самого приложения "Библиотека подключаемого оборудования для мобильных приложений" с выбранным сканером на андроид устройстве решена. (Сканер "Netum", использовали разные модели). Решена проблема работы этого сканера в своей конфигурации путем переноса функционала из "Библиотека подключаемого оборудования для мобильных приложений". Но, решение получилось слегка громоздким.
Попытались упростить всю эту схему и столкнулись с тем, что внешнее событие в упрощенной схеме не ловится. Суть упрощения в том, что получаем драйвер из макета , подключаем внешнюю компоненту , ну и дальше как всегда поступали со старыми драйверами надеемся получить внешнее событие при сканировании. Но нет. Так мало того еще и мобильный клиент при попытке сканирования слетает.
Смотрим как зачарованные на реализацию в "Библиотека подключаемого оборудования для мобильных приложений" . Ну используют там модуль сеанса , где устанавливают в этом модуле параметр сеанса, который называется "РабочееМестоКлиента" и тип имеет "СправочникСсылка.РабочиеМеста". Ну и как бы нет ни чего такого. Но, подозрение есть , что без этой штуки не работает связка драйвер - внешнее событие. Есть ли у кого понимание в этом вопросе? Благодарю. Для предвосхищения вопросов типа "Зачем тебе этот новый драйвер? Возьми драйвер постарше и попроще, на котором все работает и не мучайся." Отвечаю, у ряда планшетов на предприятии есть встроенный сканер и там мы результаты сканирования получаем через механизм Broadcast . Вот зачем.
Важное замечание: Содержание лога от внешней компоненты в случае когда мы работаем из функционала БПО и своего упрощенного функционала слегка разный получаю.
В приложенных файлах файл с именем "scan_opos (5)" отвечает не работающей ситуации, файл с именем scan_opos (6) работающей ситуации.
Параметры внешней компоненты в своей реализации устанавливал глядя на то как это все делается в "Библиотека подключаемого оборудования для мобильных приложений". Но в итоге получил не работающий вариант. Все это тестировал в рамках одного и того же мобильного клиента, внешнюю компоненту брал из одного и того же макета.
Заранее благодарю за содействие.
Прикрепленные файлы:
scan_opos (5).txt
scan_opos (6).txt
По теме из базы знаний
- Маркировка: 2D Android Штрихкод сканер + драйвер устройства для 1С
- Первоначальная настройка 1С:Управление торговлей 11
- Подключение сканера штрихкода через драйвер NativeAPI для типовых конфигураций
- Подключение сканера магнитных карт через драйвер NativeAPI для типовых конфигураций
- Самые используемые методы БСП 3.1.9
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(2)Если можно, дайте, пожалуйста, попробую.
Еще просьба: взгляните на код подключения, ни чего ли не упущено при подключении ВК?
Еще просьба: взгляните на код подключения, ни чего ли не упущено при подключении ВК?
Procedure ConnectingExternalComponentForScanToMC()
//If Attached Then
//ExternalComponent = New("AddIn.InputDevice.InputDevice");
OK = ПодключитьВнешнююКомпоненту("CommonTemplate.Драйвер1ССканерШтрихкода", "InputDevice", ТипВнешнейКомпоненты.Native);
ExternalComponent = Новый ("AddIn.InputDevice.InputDevice");
//P1 = "";
//P2 = "";
//P3 = "";
//P4 = "";
//P5 = "";
//P6 = "";
//P7 = "";
//ExternalComponent.GetDescription(P1, P2, P3, P4, P5, P6, P7); // получаем описание
ExternalComponent.SetParameter("EquipmentType", "УстройствоВвода");
ExternalComponent.SetParameter("Action", "android.intent.action.DEFAULT");
ExternalComponent.SetParameter("BluetoothDevice", "DEV_KEYBOARD"); // устанавливаем тип сканера блютус девайЗ
ExternalComponent.SetParameter("COMEncoding", "UTF-8");
ExternalComponent.SetParameter("Category", "");
ExternalComponent.SetParameter("DataBits", 8);
ExternalComponent.SetParameter("Extra", "android.intent.extra.STREAM");
ExternalComponent.SetParameter("ExtraType", "String");
//ExternalComponent.SetParameter("GSSymbolKey", 7);
ExternalComponent.SetParameter("GSSymbolKey", 7);
ExternalComponent.SetParameter("LogFilePath", "/storage/emulated/0/Download/scan_opos.txt");
ExternalComponent.SetParameter("LogType", 0); // Логируем в файл
ExternalComponent.SetParameter("OutputDataType", 0); // тип данных выходных
ExternalComponent.SetParameter("Parity", 0); //
ExternalComponent.SetParameter("Prefix", -1); //
ExternalComponent.SetParameter("Speed", 9600); //
ExternalComponent.SetParameter("StandardAction", "NONE"); //
ExternalComponent.SetParameter("StandardCategory", "NONE"); //
ExternalComponent.SetParameter("StandardExtra", "NONE"); //
ExternalComponent.SetParameter("StopBits", 0); //
ExternalComponent.SetParameter("Suffix", 3338); //
ExternalComponent.SetParameter("Timeout", 75); //
//ExternalComponent.SetParameter("AppType", 6); //
IDParametr = "";
OK = ExternalComponent.Open(IDParametr); // подключаем компоненту
РезультатТеста = "";
АктивированДемоРежим = "";
РезультатТеста = ExternalComponent.ТестУстройства(РезультатТеста, АктивированДемоРежим);
Сообщить(ExternalComponent.ПолучитьНомерВерсии());
Параметры1 = "";
ExternalComponent.ПолучитьПараметры(Параметры1); // получаем параметры
СтрокаПараметры = Параметры1;
ОписаниеДрайвера = "";
ExternalComponent.ПолучитьОписание(ОписаниеДрайвера);
If Not OK Then
Message(ExternalComponent.GetLastError(P7));
EndIf;
//EndIf;
EndProcedure
Показать
(5) Доброго дня. Получилось как то реализовать подключение сканера через компоненту и обработку результата?
Подключить компоненту у меня получилось. Вот только не пойму - в настройках (xml) компоненты показывается, что по умолчанию клавиатура. Можно как то переопределять? Как вообще указать настройки своего сканера и как перехватить событие?
Спасибо
Подключить компоненту у меня получилось. Вот только не пойму - в настройках (xml) компоненты показывается, что по умолчанию клавиатура. Можно как то переопределять? Как вообще указать настройки своего сканера и как перехватить событие?
Спасибо
(7) В настройках можно/нужно указать нужные.
У меня вот такие на Атолах
Компонента.УстановитьПараметр("EquipmentType", "УстройствоВвода");
Компонента.УстановитьПараметр("Action", Интент);
Компонента.УстановитьПараметр("EventName", "Штрихкод");
Компонента.УстановитьПараметр("Extra", ИнтентДанные);
Компонента.УстановитьПараметр("BluetoothDevice", "BROADCAST");
Компонента.УстановитьПараметр("StandardCategory", "NONE");
Компонента.УстановитьПараметр("StandardAction", "NONE");
Компонента.УстановитьПараметр("StandardExtra", "NONE");
Интент и ИнтентДанные для каждой модели сканера свои.
У меня работает в боевом режиме.
Драйвера 10.1.8.5
Для более новых драйверов приложение не собирал, поскольку текущие работают без нареканий.
У меня вот такие на Атолах
Компонента.УстановитьПараметр("EquipmentType", "УстройствоВвода");
Компонента.УстановитьПараметр("Action", Интент);
Компонента.УстановитьПараметр("EventName", "Штрихкод");
Компонента.УстановитьПараметр("Extra", ИнтентДанные);
Компонента.УстановитьПараметр("BluetoothDevice", "BROADCAST");
Компонента.УстановитьПараметр("StandardCategory", "NONE");
Компонента.УстановитьПараметр("StandardAction", "NONE");
Компонента.УстановитьПараметр("StandardExtra", "NONE");
Интент и ИнтентДанные для каждой модели сканера свои.
У меня работает в боевом режиме.
Драйвера 10.1.8.5
Для более новых драйверов приложение не собирал, поскольку текущие работают без нареканий.
(10) Может есть какие мысли, почему не работает? При скане вообще приложение 1С вылетает.
В модуле приложения пытаюсь отловить:
Сообщить(Событие);
Сообщить(Источник);
Сообщить(Данные);
УстановитьВнешнююКомпоненту ("ОбщийМакет.Драйвер1СУстройстваВводаNative");
Если ПодключитьВнешнююКомпоненту("ОбщийМакет.Драйвер1СУстройстваВводаNative", "AddIn", ТипВнешнейКомпоненты.Native) Тогда
Сообщить("Компонента для сканера штрихкодов подключена");
Компонента = Новый ("AddIn.AddIn.InputDevice");
Интент = "nlscan.action.SCANNER_RESULT";
ИнтентДанные = "SCAN_BARCODE1";
Компонента.УстановитьПараметр("EquipmentType", "УстройствоВвода");
Компонента.УстановитьПараметр("Action", Интент);
Компонента.УстановитьПараметр("EventName", "Штрихкод");
Компонента.УстановитьПараметр("Extra", ИнтентДанные);
Компонента.УстановитьПараметр("BluetoothDevice", "BROADCAST");
Компонента.УстановитьПараметр("StandardCategory", "NONE");
Компонента.УстановитьПараметр("StandardAction", "NONE");
Компонента.УстановитьПараметр("StandardExtra", "NONE");
Компонента.Подключить("Штрихкод");
Иначе
Сообщить("Компонента для сканера штрихкодов подключена");
КонецЕсли;
ПоказатьВ модуле приложения пытаюсь отловить:
Сообщить(Событие);
Сообщить(Источник);
Сообщить(Данные);
(12) Даже не знаю. Визуально вроде все ОК.
1С вылетает и никакие сообщения не показываются?
А на устройстве бродкасты включены? Хотя все-равно вылетать не должна.
А это мобильное приложение или клиент? Как оно на устройство попадает? Через http? Тогда посмотреть чтобы в веб-сервере были разрешены миме-типы apk и so.
Хотя опять же, без них просто не установится компонента.
Даже не знаю что еще посоветовать :-(
1С вылетает и никакие сообщения не показываются?
А на устройстве бродкасты включены? Хотя все-равно вылетать не должна.
А это мобильное приложение или клиент? Как оно на устройство попадает? Через http? Тогда посмотреть чтобы в веб-сервере были разрешены миме-типы apk и so.
Хотя опять же, без них просто не установится компонента.
Даже не знаю что еще посоветовать :-(
(13) Тестил установку компоненты - она вроде как ставиться. Это мобильное приложение. Ставлю через отладку по кабелю (апк не собирал). Бродкасты тоже включены, там стороннее приложение похожее работает - все ок (там код к сожалению не глянуться). Понял, спасибо
(14) День добрый. Вчера весь день мучался с той же самой проблемой. Перепробовал всё на свете, даже по adb читал logcat системы. =)
В общем. Вы через Новый создаёте экземпляр класса. Это отлично. А потом вы выходите из функции, и этот экземпляр очищается из памяти. Сразу же. Поскольку 1С использует для сборки мусора подсчёт ссылок.
Потом вы сканирует ШК и перед тем, как передать в 1С, его сначала обрабатывает ваша компонента. Но обрабатывать уже некому. Неожиданная ситуация. По участку памяти, который ожидает система, уже ничего нет. Segmentation Fault.
Сохраните полученный экземпляр где нибудь в глобальном контексте. БПО, например, в модуле приложения хранит структуру с инициализированными драйверами. Вам, может быть, хватит и просто глобальной переменной.
Тогда счётчик количества ссылок никогда не обнулится и ваш экземпляр класса никуда не испарится.
В общем. Вы через Новый создаёте экземпляр класса. Это отлично. А потом вы выходите из функции, и этот экземпляр очищается из памяти. Сразу же. Поскольку 1С использует для сборки мусора подсчёт ссылок.
Потом вы сканирует ШК и перед тем, как передать в 1С, его сначала обрабатывает ваша компонента. Но обрабатывать уже некому. Неожиданная ситуация. По участку памяти, который ожидает система, уже ничего нет. Segmentation Fault.
Сохраните полученный экземпляр где нибудь в глобальном контексте. БПО, например, в модуле приложения хранит структуру с инициализированными драйверами. Вам, может быть, хватит и просто глобальной переменной.
Тогда счётчик количества ссылок никогда не обнулится и ваш экземпляр класса никуда не испарится.
(15) Вообще, само появление Segmentation Fault при такой ситуации — свидетельство того, что драйвера для БПО писали рептилоиды.
Перед очисткой объекта, созданного из внешней компоненты, 1С вызывает у него деструктор. Вот в этом деструкторе, по-хорошему, должна была произойти отписка от событий.
Если бы это было сделано именно так, вместо полного вылета 1С вы (и я) просто не получали бы никаких событий.
Но работаем с тем, что есть.
Перед очисткой объекта, созданного из внешней компоненты, 1С вызывает у него деструктор. Вот в этом деструкторе, по-хорошему, должна была произойти отписка от событий.
Если бы это было сделано именно так, вместо полного вылета 1С вы (и я) просто не получали бы никаких событий.
Но работаем с тем, что есть.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот