Внешние компоненты. Мобильное приложение 1С

Внешние компоненты. Мобильное приложение 1С

С выходом 8.3.9 фирма 1С для расширения возможностей мобильной платформы выпускает очень нужную технологию «Внешние компоненты для мобильной разработки». Данная технология, по сути, развязывает руки всем тем, кто был ограничен в мобильной разработке 1С и не хватало каких-либо возможностей, которые очень хочется применить, разрабатывая программный комплекс. Теперь возможно выносить логику работы приложения на уровень внешних компонент и получать все возможности операционных систем android и ios, применяя языки java и c++.

Данная технология существовала и раньше вот, например хорошая статья, чтобы разобраться с основами разработки компоненты. Что же еще удалось найти на просторах интернета по данной тематике: это пример подключения компоненты из ИТС.

Применение технологии

Как можно применить данную технологию для мобильной разработки (Android и IOS):

- Обращаться и использовать любые возможности API операционных систем.

- Обращаться к внутренним модулям мобильных устройств(wi-fi, компас, гироскоп, камера, микрофон и т.д.)

- Работать с любым оборудованием у которого есть возможность подключаться к мобильным устройствам (кассы, usb или bluetooth сканеры штрихкодов и т.д.)

- Работать с терминалами сборами данных на базе Android

Так же возможно вызывать свои диалоги поверх приложения 1С, но я не пробовал.

Для кого статья:

- для тех, кто уверенно программирует в 1С

- тот, кто работал с мобильной платформой 1с и делал сборки APK с помощью «сборщика»

- небольшое представление как программировать в Java и Android Studio. Хорошо бы еще С++.

- кому все-таки не хватает стандартных возможностей моб..платформы 1С.

Практика применения

Думаю интересное это попробовать самостоятельно, что то наваять. Собственные познания в java и c++ последний раз применялись года 3 назад, так что делал методом проб и ошибок. В интернете достаточно уроков для самообучения так что, потратив некоторое время вы сможете собрать свою компоненту. И так что же потребуется:

- Это доступ к ИТС чтобы скачать готовый пример приложения «Шагомер», который фирма 1С предоставила для изучения.

- Платформа 1С, например, 8.3.9.2084. Я на ней тестировал.

- Мобильная платформа Версия 8.3.9

- Конфигурация Сборщик мобильного приложения (2.0.3.31) (как настроить можно тут и тут подчерпнуть)

- Аппарат с Android. Я тестировал на Android 5.1

Как и описывал (Evil Beaver), для начала лучше использовать готовый пример, т.к. проще будет дополнять свои методами и проверять результат.

Далее можете установить Android Studio, чтобы подключить проект «Шагомер». В статье я опускаю многие моменты «где скачать?» «как подключить?» надеясь на то, что это самостоятельно сделаете и догадаетесь.

Скачайте мою заготовку для Android Studio (сразу уточню, что исходных кодов в ней нет). Вам надо будет с ИТС взять проект «Шагомера» и последовательно перекинуть файлы как я указал ниже.

Сам проект «Шагомер» располагается в архиве «VNCOMPS\VNCOMP83\example\NativeAPIMobile\».

- AddInNative.cpp – основной класс в котором описаны методы и функции реализуемые компонентой.

- StepCounter.cpp – тут уже сама логика работы «Шагомера». Обращаем внимаем что компонент поддерживает три платформы(android, ios, winrt). Нас интересует сейчас для android в коде директивы препроцессора обрамлены таким кодом #if defined(__ANDROID__)

- В каталоге Android_Proj располагается StepCounterClass.java тут уже вся логика работы с датчиком на java.

- В каталоге Config пример конфигурации для 1с для работы с компонентой «Шагомер».

Немного программируем

Теперь попробуем добавить в компоненту метод «ВыполнитьВибрацию()» и тем самым дадим возможность на аппаратах Android в течении 0.5 сек произвести вибрацию аппарата.

Из проекта «Шагомер» необходимо перекинуть файлы в готовый шаблон с этой статьи.

  1. В каталог stepCounterLib перекиньте LibActivity.java, StepCounterClass.java

1.1 В jni перекиньте AddInNative.cpp, AddInNative.h, jnienv.cpp, jnienv.h, StepCounter.cpp, StepCounter.h

1.2 В binder скиньте AddInDefBase.h, com.h, ComponentBase.h, ConversionWchar.cpp, ConversionWchar.h, IAndroidComponentHelper.h, IMemoryManager.h, mobile.h, types.h

  1. Добавляем в текущие исходники код, который нам поможет реализовать метод «ВыполнитьВибрацию». Меняем файл AddInNative.cpp

2.1 После строки L"ShowOrientation", добавить L"runVibrate">;

2.2 После L"ПоказатьУгловоеПоложениеУстройства", добавить L"ВыполнитьВибрацию">;

2.3 В функции StepCounter::GetParamDefValue После case eMethGetStepCount: добавить case eRunVibrate:

2.4 В функции StepCounter::CallAsProc после case eMethDisable: добавить свой

case eRunVibrate:

  1. Меняем файл AddInNative.h

2.1 После eMethShowOrientation, добавляем eRunVibrate,

  1. Меняем файл StepCounter.cpp

3.1 После jmethodID methodID_resetCounter; добавляем jmethodID methodID_runVibrate

3.2 В классе CStepCounterRecorder после реализации метода void stopStepCounterUpdates() добавляем свой код:

void runVibrate()

3.3 Еще в самом конце добавьте метод

void CStepCounter::runVibrate()

  1. Меняем файл StepCounter.h

В классе class CStepCounter после bool getRunningStepCounterUpdates(); добавьте void runVibrate();

  1. Меняем файл StepCounterClass.java

После реализации метода resetCounter() добавляем

public void runVibrate()

  1. Теперь можно Build APK.

Компонента

Теперь сформируем файл архива компоненты для загрузки его в конфигурацию 1С в общий макет МакетВК.

  1. Переименовать app-debug.apk в com_1c_StepCounter.apk
  2. Создаете файл MANIFEST.XML с текстом:

<?xml version="1.0" encoding="UTF-8"?>

<bundle xmlns="http://v8.1c.ru/8.2/addin/bundle" name="com_1c_StepCounter">

<component os="Android" path="libcom_1c_StepCounter_i386.so" codeType="c++" type="native" arch="i386"/>

<component os="Android" path="com_1c_StepCounter.apk" codeType="java" type="native" arch="i386"/>

<component os="Android" path="libcom_1c_StepCounter_ARM.so" codeType="c++" type="native" arch="ARM"/>

<component os="Android" path="com_1c_StepCounter.apk" codeType="java" type="native" arch="ARM"/>

  1. Создаете файл ANDROID_MANIFEST_EXTENTIONS.XML с текстом:

<?xml version="1.0" encoding="UTF-8"?>

  1. Необходимо открыть com_1c_StepCounter.apk(если что переименуйте в zip).

Перейти в lib/armeabi Скопировать в отдельный каталог libcom_1c_StepCounter.so и переименовать в libcom_1c_StepCounter_ARM.so

Перейти в lib/x86 скопировать в отдельный каталог libcom_1c_StepCounter.so и переименовать в libcom_1c_StepCounter_i386.so

  1. Все файлы упаковать в vk.zip : ANDROID_MANIFEST_EXTENTIONS.XML, com_1c_StepCounter.apk, libcom_1c_StepCounter_ARM.so, libcom_1c_StepCounter_i386.so, MANIFEST.XML

Не забываем про 1С

В конфигурации 1с Шагомера добавьте команду на форму и вставьте ее код:

Если Не ВК = неопределено Тогда ВК.ВыполнитьВибрацию();

Иначе Предупреждение("Ошибка загрузки ВК");

Далее в инструкции, которую предоставила Результат

Программу ставим на телефон и с надеждой нажимаем последовательно «Начать отсчет» и «Вибрация». Надеюсь вы почувствовали вибрацию :)

Итоги

Статью постараюсь дополнять, т.к. писал сухо и сжато. Надеюсь, без ошибок.

Следующая статья о том, как подружил Терминал сбора данных на Android с внешней компонентой.

Так же интересует написание компоненты для терминала Атол SmartDroid если есть, у кого аппарат в наличии то можем совместно разработать компоненту.

Еще мысли есть внешнюю компоненту применить для IOS, но надо, какое то практические применение придумать.

📎📎📎📎📎📎📎📎📎📎