Внешние компоненты для ТСД на Android. Работает на ТСД Zebra MC33
Компонента ZebraDW - для Зебровской програмулины DataWedge - создает и активирует нужный профиль на ТСД для того чтобы могла работать компонента перехвата событий и направлять в 1С.
Компонента Component - это компонента UniversalBroadcast, которая перехватывает широковещательные сообщения Android и направляет в 1С как внешние события.
Компоненты в архивах (под паролем разумеется) - их распаковываем, а те уже архивы (архивы в архиве) после распаковки, их НЕ распаковываем это и есть ВК.
Создаем новые общие макеты типа ВнешняяКомпонента и загружаем туда распакованные внутренние файлы.
Переходим к коду:
Использовать 32х битную мобильную платформу или моб. приложение (одна из компонент поддерживает только 32)
// Вначале обявляем переменные где будут хранится компоненты, иначе ничего не заработает
&НаКлиенте
Перем мКомпонентаНастройки Экспорт;
&НаКлиенте
Перем мКомпонентаОповещений Экспорт;
&НаКлиенте
Процедура ПриОткрытии(Отказ)
ПідключенняДрайвера();
КонецПроцедуры
&НаКлиенте
Процедура ПідключенняДрайвера()
Если ПодключитьВнешнююКомпоненту("ОбщийМакет.ZebraDW", "DWSetup", ТипВнешнейКомпоненты.Native) Тогда
мКомпонентаНастройки = Новый ("AddIn.DWSetup.ZebraDW");
мКомпонентаНастройки.УстановитьПараметр("ProfileName", "1C");
мКомпонентаНастройки.УстановитьПараметр("EventName", "barcode_event");
Если НЕ мКомпонентаНастройки.Подключить() Тогда
ТекстОшибкиКомпоненты = "";
КодОшибки = мКомпонентаНастройки.ПолучитьОшибку(ТекстОшибкиКомпоненты);
СообщениеПользователю = Новый СообщениеПользователю();
СообщениеПользователю.Текст = "Ошибка: "+ КодОшибки + ", " + ТекстОшибкиКомпоненты;
СообщениеПользователю.Сообщить();
КонецЕсли;
Иначе
СообщениеПользователю = Новый СообщениеПользователю();
СообщениеПользователю.Текст = "Ошибка подключения компоненты ""ZebraDW""";
СообщениеПользователю.Сообщить();
КонецЕсли;
Если ПодключитьВнешнююКомпоненту("ОбщийМакет.Component", "Broadcasts", ТипВнешнейКомпоненты.Native) Тогда
мКомпонентаОповещений = Новый ("AddIn.Broadcasts.UniversalBroadcast");
мКомпонентаОповещений.УстановитьПараметр("FilterName", "barcode_event");
//мКомпонентаНастройки.УстановитьПараметр("Category", "android.intent.category.DEFAULT"); //// це не треба
ШаблонДанных = мКомпонентаОповещений.ПолучитьШаблонОписанияДанных();
ТипДанные = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонДанных, "com.symbol.datawedge.data_string", XMLСтрока(Ложь), XMLСтрока(0));
мКомпонентаОповещений.УстановитьПараметр("CaptureData", ТипДанные);
Если НЕ мКомпонентаОповещений.Подключить() Тогда
ТекстОшибкиКомпоненты = "";
КодОшибки = мКомпонентаОповещений.ПолучитьОшибку(ТекстОшибкиКомпоненты);
СообщениеПользователю = Новый СообщениеПользователю();
СообщениеПользователю.Текст = "Ошибка: "+ КодОшибки + ", " + ТекстОшибкиКомпоненты;
СообщениеПользователю.Сообщить();
КонецЕсли;
Иначе
СообщениеПользователю = Новый СообщениеПользователю();
СообщениеПользователю.Текст = "Ошибка подключения компоненты ""UniversalBroadcast""";
СообщениеПользователю.Сообщить();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ВнешнееСобытие(Источник, Событие, Данные)
//Сообщить("+" + Источник + " - "+ Событие + " - " + Данные); ///// Далее можно просто раскоментировать и видеть XML который пришел
Если Событие = "UniversalBroadcastEvent" Тогда
ОбробкаВводуШтрихкода(Данные);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОбробкаВводуШтрихкода(Данные)
ЧтениеXML = Новый ЧтениеXML();
ЧтениеXML.УстановитьСтроку(Данные);
Пока ЧтениеXML.Прочитать() Цикл //Цикл по структуре
Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента И ЧтениеXML.Имя = "MessageData" Тогда
ЧтениеXML.Прочитать(); // Поч. елемента
ЧтениеXML.Прочитать();//Знач
Если ЧтениеXML.Значение = "barcode_event" Тогда
ЧтениеXML.Прочитать();// Кін. елемента
ЧтениеXML.Прочитать();// Поч. елемента
Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента И ЧтениеXML.Имя = "FilterData" Тогда //Определяем начало элемента
ЧтениеXML.Прочитать();
Если ЧтениеXML.ТипУзла=ТипУзлаXML.Текст Тогда
Сообщить(СокрЛП(ЧтениеXML.Значение)); //// Тут наш штрихкод
Возврат;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедуры