Стояла задача подключит сканер SPACE LITE-BT-2D к мобильному приложению. Сделал это с помощью ВК взятой из "БПО для мобильного (3.2.717)", общие макеты ОбщиеМакеты.Драйвер1СУстройстваВводаNative.
1. Добaвляем в IIS типы MIME: (иначе ВК в мобильном приложении не будут работать)
.apk application/octet-stream
.so application/octet-stream
2. Публикуем мобильное приложение.
3. Переводим сканер в режим Bluetooth SPP (обычно делается с помощью штрих кодов)
4. Подключаем сканер по блютузу.
5. Заходим в опубликованное приложение жмем:
Прочитать настройки, Выбираем устройство, Сохранить настройки, Подключить ВК.
6. Пробуем сканировать.
&НаКлиенте
Перем Компонента, КомпонентаПодключена;
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ЗначениеПараметров = Новый Структура;
КонецПроцедуры
&НаКлиенте
Процедура ВнешнееСобытие(Источник, Событие, Данные)
Результат = Результат + "Источник:" + Источник + ", Событие: " + Событие + ", Данные:" + Данные + Символы.ПС;
КонецПроцедуры
&НаКлиенте
Процедура ПодключитьВК(Команда)
Если ЗначениеПараметров.Количество()=0 Тогда
Результат = Результат + "Установите параметры компоненты." + Символы.ПС;
Возврат;
КонецЕсли;
Если КомпонентаПодключена Тогда
Компонента = Новый ("AddIn.AddIn.InputDevice");
Для каждого ТекПараметр Из ЗначениеПараметров Цикл
Компонента.УстановитьПараметр(Прав(ТекПараметр.Ключ, СтрДлина(ТекПараметр.Ключ)-2), ТекПараметр.Значение);
КонецЦикла;
Компонента.Подключить("");
Результат = Результат + "Компонента подключена" + Символы.ПС;
Иначе
Результат = Результат + "Компонента не подключена" + Символы.ПС;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОтключитьВК(Команда)
Если Не Компонента = неопределено Тогда
Компонента.Отключить("");
Компонента = Неопределено;
Результат = Результат + " ВК отключена" + Символы.ПС;
Иначе
Результат = Результат + " ВК не определено" + Символы.ПС;
КонецЕсли
КонецПроцедуры
&НаСервере
Процедура ПолучитьНастройки()
ЗначениеПараметров.Очистить();
ПараметрыДрайвераРеквизиты = ПолучитьРеквизиты();
Для Каждого Параметр Из ПараметрыДрайвераРеквизиты Цикл
Если Лев(Параметр.Имя, 2) = "P_" Тогда
ЗначениеПараметров.Вставить(Параметр.Имя, ЭтотОбъект[Параметр.Имя]);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ОбновитьНастраиваемыйИнтерфейс(ОписаниеИнтерфейса)
Суффикс = Ложь;
Префикс = Ложь;
БазоваяГруппа = Неопределено;
Элемент = Неопределено;
ИндексГруппы = 0;
КоличествоСтраниц = 0;
ТекущаяСтраница = Элементы.Добавить("ОсновнаяСтраница", Тип("ГруппаФормы"), Элементы.Страницы);
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.УстановитьСтроку(ОписаниеИнтерфейса);
ЧтениеXML.ПерейтиКСодержимому();
Если ЧтениеXML.Имя = "Settings" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
Пока ЧтениеXML.Прочитать() Цикл
Если ЧтениеXML.Имя = "Parameter" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
ТолькоЧтение = ?(ВРег(ЧтениеXML.ЗначениеАтрибута("ReadOnly")) = "TRUE", Истина, Ложь)
Или ?(ВРег(ЧтениеXML.ЗначениеАтрибута("ReadOnly")) = "ИСТИНА", Истина, Ложь);
ОригинальноеИмя = ЧтениеXML.ЗначениеАтрибута("Name");
ПараметрИмя = ?(ТолькоЧтение, "R_", "P_") + ОригинальноеИмя;
ПараметрЗаголовок = ЧтениеXML.ЗначениеАтрибута("Caption");
ПараметрТип = ВРег(ЧтениеXML.ЗначениеАтрибута("TypeValue"));
ПараметрТип = ?(НЕ ПустаяСтрока(ПараметрТип), ПараметрТип, "STRING");
ПараметрЗначение = ЧтениеXML.ЗначениеАтрибута("DefaultValue");
ПараметрОписание = ЧтениеXML.ЗначениеАтрибута("Description");
СтрокаФорматирования = ЧтениеXML.ЗначениеАтрибута("FieldFormat");
ПараметрСуществует = Ложь;
ПараметрыДрайвераРеквизиты = ПолучитьРеквизиты();
Для Каждого ПараметрДрайвераРеквизит Из ПараметрыДрайвераРеквизиты Цикл
Если ПараметрДрайвераРеквизит.Имя = ПараметрИмя Тогда
ПараметрСуществует = Истина;
Прервать;
КонецЕсли;
КонецЦикла;
Если Не ПараметрСуществует Тогда
Если ПараметрТип = "NUMBER" Тогда
Реквизит = Новый РеквизитФормы(ПараметрИмя, Новый ОписаниеТипов("Число"), , ПараметрЗаголовок, Истина);
ИначеЕсли ПараметрТип = "BOOLEAN" Тогда
Реквизит = Новый РеквизитФормы(ПараметрИмя, Новый ОписаниеТипов("Булево"), , ПараметрЗаголовок, Истина);
Иначе
Реквизит = Новый РеквизитФормы(ПараметрИмя, Новый ОписаниеТипов("Строка"), , ПараметрЗаголовок, Истина);
КонецЕсли;
// Добавляем новый реквизит в форму.
ДобавляемыеРеквизиты = Новый Массив;
ДобавляемыеРеквизиты.Добавить(Реквизит);
ИзменитьРеквизиты(ДобавляемыеРеквизиты);
КонецЕсли;
Если Суффикс Тогда
Элемент = Элементы.ПараметрыДорожекСуффикс
ИначеЕсли Префикс Тогда
Элемент = Элементы.ПараметрыДорожекПрефикс;
ИначеЕсли Элементы.Найти(ПараметрИмя) = Неопределено Тогда
// Если не было создано не одной группы.
Если БазоваяГруппа = Неопределено Тогда
БазоваяГруппа = Элементы.Добавить("БазоваяГруппа" + КоличествоСтраниц, Тип("ГруппаФормы"), ТекущаяСтраница);
БазоваяГруппа.Вид = ВидГруппыФормы.ОбычнаяГруппа;
БазоваяГруппа.Отображение = ОтображениеОбычнойГруппы.Нет;
БазоваяГруппа.РастягиватьПоГоризонтали = Истина;
БазоваяГруппа.Заголовок = НСтр("ru = 'Параметры'");
БазоваяГруппа.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная;
КонецЕсли;
// Добавляем новое поле ввода на форму.
Элемент = Элементы.Добавить(ПараметрИмя, Тип("ПолеФормы"), БазоваяГруппа);
Если ПараметрТип = "BOOLEAN" Тогда
Элемент.Вид = ВидПоляФормы.ПолеФлажка
Иначе
Элемент.Вид = ВидПоляФормы.ПолеВвода;
Элемент.АвтоМаксимальнаяШирина = Ложь;
Элемент.РастягиватьПоГоризонтали = Истина;
Элемент.Формат = СтрокаФорматирования;
Элемент.ФорматРедактирования = СтрокаФорматирования;
КонецЕсли;
Элемент.ПутьКДанным = ПараметрИмя;
Элемент.Подсказка = ПараметрОписание;
Элемент.ТолькоПросмотр = ТолькоЧтение;
КонецЕсли;
ХранимоеЗначение = Неопределено;
Если ЗначениеПараметров.Свойство(ПараметрИмя, ХранимоеЗначение) Тогда
ПараметрЗначение = ХранимоеЗначение
Иначе
Если НЕ ПустаяСтрока(ПараметрЗначение) Тогда
Если ПараметрТип = "BOOLEAN" Тогда
ПараметрЗначение = ?(ВРег(ПараметрЗначение) = "TRUE", Истина, Ложь) Или ?(ВРег(ПараметрЗначение) = "ИСТИНА", Истина, Ложь);
ИначеЕсли ПараметрТип = "STRING" Тогда
ПараметрЗначение = Строка(ПараметрЗначение);
КонецЕсли;
КонецЕсли;
КонецЕсли;
ЭтотОбъект[ПараметрИмя] = ПараметрЗначение;
КонецЕсли;
Если ЧтениеXML.Имя = "ChoiceList" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
Если НЕ (Элемент = Неопределено) И НЕ (Элемент.Вид = ВидПоляФормы.ПолеФлажка) Тогда
Элемент.РежимВыбораИзСписка = Истина;
Элемент.ВысотаСпискаВыбора = 10;
Элемент.РедактированиеТекста = Ложь;
Если Суффикс Или Префикс Тогда
Элемент.СписокВыбора.Добавить(0, "<NONE>");
КонецЕсли;
КонецЕсли;
Пока ЧтениеXML.Прочитать() И НЕ (ЧтениеXML.Имя = "ChoiceList") Цикл
Если ЧтениеXML.Имя = "Item" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
ЗначениеАтрибута = ЧтениеXML.ЗначениеАтрибута("Value");
Если ЧтениеXML.Прочитать() Тогда
ПредставлениеАтрибута = ЧтениеXML.Значение;
КонецЕсли;
Если ПустаяСтрока(ЗначениеАтрибута) Тогда
ЗначениеАтрибута = ПредставлениеАтрибута;
КонецЕсли;
Если Суффикс Или Префикс Тогда
Если Число(ЗначениеАтрибута) > 0 Тогда
Элемент.СписокВыбора.Добавить(Число(ЗначениеАтрибута), ПредставлениеАтрибута);
КонецЕсли;
ИначеЕсли ПараметрТип = "NUMBER" Тогда
Элемент.СписокВыбора.Добавить(Число(ЗначениеАтрибута), ПредставлениеАтрибута);
Иначе
Элемент.СписокВыбора.Добавить(ЗначениеАтрибута, ПредставлениеАтрибута)
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Если ЧтениеXML.Имя = "Page" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
ЗаголовокСтраницы = ЧтениеXML.ЗначениеАтрибута("Caption");
ЗаголовокСтраницы = ?(ПустаяСтрока(ЗаголовокСтраницы), НСтр("ru = 'Параметры'"), ЗаголовокСтраницы);
КоличествоСтраниц = КоличествоСтраниц + 1;
Если КоличествоСтраниц > 1 Тогда
Элементы.Страницы.ОтображениеСтраниц = ОтображениеСтраницФормы.ЗакладкиСверху;
ТекущаяСтраница = Элементы.Добавить("Страница" + КоличествоСтраниц, Тип("ГруппаФормы"), Элементы.Страницы);
БазоваяГруппа = Неопределено;
КонецЕсли;
ТекущаяСтраница.Заголовок = ЗаголовокСтраницы;
КонецЕсли;
Если ЧтениеXML.Имя = "Group" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
ЗаголовокГруппы = ЧтениеXML.ЗначениеАтрибута("Caption");
ЗаголовокГруппы = ?(ПустаяСтрока(ЗаголовокГруппы), НСтр("ru = 'Параметры'"), ЗаголовокГруппы);
БазоваяГруппа = Элементы.Добавить("Группа" + ИндексГруппы, Тип("ГруппаФормы"), ТекущаяСтраница);
БазоваяГруппа.Вид = ВидГруппыФормы.ОбычнаяГруппа;
БазоваяГруппа.Отображение = ОтображениеОбычнойГруппы.Нет;
БазоваяГруппа.РастягиватьПоГоризонтали = Истина;
БазоваяГруппа.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная;
БазоваяГруппа.Заголовок = ЗаголовокГруппы;
ИндексГруппы = ИндексГруппы + 1;
КонецЕсли;
КонецЦикла;
КонецЕсли;
ЧтениеXML.Закрыть();
КонецПроцедуры
&НаКлиенте
Процедура ПрочитатьНастройки(Команда)
Если ЗначениеПараметров.Количество()>0 Тогда
Возврат;
КонецЕсли;
УстановитьВнешнююКомпоненту("ОбщийМакет.Драйвер1СУстройстваВводаNative");
Если ПодключитьВнешнююКомпоненту("ОбщийМакет.Драйвер1СУстройстваВводаNative", "AddIn", ТипВнешнейКомпоненты.Native) Тогда
InputDevice = Новый ("AddIn.AddIn.InputDevice");
ОписаниеИнтерфейса = "";
InputDevice.ПолучитьПараметры(ОписаниеИнтерфейса);
ОбновитьНастраиваемыйИнтерфейс(ОписаниеИнтерфейса);
КомпонентаПодключена = Истина;
Иначе
Результат = Результат + "Компонента для сканера штрихкодов подключена" + Символы.ПС;
КомпонентаПодключена = Ложь;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СохранитьНастройки(Команда)
ПолучитьНастройки();
КонецПроцедуры
Тестирование производилась на мобильной платформе 8.3.24.77.
Данная конфигурация показывает пример применения подключения сканера к мобильному приложению.
Подключается конфигурация с помощью публикации мобильного приложения.
Вступайте в нашу телеграмм-группу Инфостарт