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

Опубликовал Ruslan Ruslan (flyer) в раздел Программирование - Внешние компоненты

Пример применения технологии внешних компонент для мобильной платформы 1С (Android)

Предисловие

С выходом 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С предоставила для изучения.

- Android Studio

- Платформа 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.javaStepCounterClass.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:
                        {
                           stepCounter.runVibrate();
                           break;
                         }

  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()
             {
                 JNIEnv* jenv = getJniEnv();
                 jmethodID methodID_runVibrate = jenv->GetMethodID(cc, "runVibrate", "()V");
                 jenv->CallVoidMethod(obj, methodID_runVibrate);
             }

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

             void CStepCounter::runVibrate() {
                   motionRecorder->runVibrate();
             }

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

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

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

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

             public void runVibrate()
             {
                 long mills = 500L;
                Vibrator vibrator = (Vibrator)  m_Activity.getSystemService(Context.VIBRATOR_SERVICE);
                vibrator.vibrate(mills);
             }

  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"/>

</bundle>

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

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

<root xmlns:android="http://schemas.android.com/apk/res/android"

<uses-permission android:name="android.permission.VIBRATE"/>

    <target xpath="/manifest/application" >          

                              <uses-feature

                                            android:name="android.hardware.sensor.accelerometer"

                                            android:required="true" />    </target>

</root

  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с Шагомера добавьте команду на форму и вставьте ее код:

&НаКлиенте

Процедура КомандаВибрация(Команда)

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

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

          КонецЕсли

КонецПроцедуры

Далее в инструкции, которую предоставила 1с описан процесс загрузки vk.zip в макет и получения выходного файла для сборщика. Загружаете 1cema.zip в «Сборщик» и собираете конечный APK файл.

Результат

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

Итоги

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

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

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

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

Вступайте в нашу группу Мобильные приложения 1С

Скачать файлы

Наименование Файл Версия Размер
Пример APK с внешней компонентой
.apk 26,59Mb
16.02.17
3
.apk 26,59Mb 3 Скачать
Шаблон для Android studio
.zip 20,78Kb
16.02.17
15
.zip 20,78Kb 15 Скачать

См. также

Комментарии
1. Игорь Кисиль (IgorKissil) 88 18.02.17 13:59 Сейчас в теме
А СредстваМультимедиа.ВоспроизвестиЗвуковоеОповещение чем не устраивает?
2. Вова Вишин (Tahallus) 420 18.02.17 17:08 Сейчас в теме
(1) ну началось, Вы видимо не поняли смысл статьи.
starik-2005; dj_serega; dreamadv; CyberCerber; +4 Ответить
3. Andrei Novikov (dreamadv) 89 20.02.17 15:10 Сейчас в теме
Реальное использование например печать на ESC/POS bluetooth термо-принтере. На данный момент у нас свое android приложение на Java. Присматриваемся к мобильной платформе. Это как раз то что останавливало от ее использования.
4. Ruslan Ruslan (flyer) 223 20.02.17 15:39 Сейчас в теме
(3) с такими принтерами не работал. у вас sdk есть по этой модели?
5. Andrei Novikov (dreamadv) 89 20.02.17 15:44 Сейчас в теме
(4) У нас есть код печати в Java приложении который работает и печатает товарные чеки на данный момент. Предполагаем если вынести его в ВК то можно использовать его же в мобильной платформе. Принтеры Zebra и что-то типа ноунейм с aliexpress под оба разные языки печати.
6. Ruslan Ruslan (flyer) 223 20.02.17 15:51 Сейчас в теме
(5) если у вас получиться переделать на ВК то можете статью тут накидать. я думаю многих такое решение заинтересует. а если исходники к статье добавите то от меня плюс(+)
7. Анатолий Бритько (headMade) 132 21.02.17 17:11 Сейчас в теме
(5) вы стандартные драйвера от 1С для работы с принтерами из мобильной платформы смотрели?
Описание есть (но оно не полное) тут http://v8.1c.ru/libraries/celmob/mob_certified.htm

Лучше установите себе на телефон/планшет "1С:Библиотека подключаемого оборудования для мобильных приложений". (там сразу можно и потестить работу с оборудованием).
8. Ruslan Ruslan (flyer) 223 21.02.17 18:23 Сейчас в теме
(7) Анатолий подскажите вы пробовали запустить данную библиотеку в работу? например для печати на принтере.
9. Анатолий Бритько (headMade) 132 21.02.17 22:11 Сейчас в теме
(8) Да, мы использовали драйвер "1С:Принтер чеков" для печати на bluetooth принтере ZEBRA EM220. (т.е. можно использовать бесплатный apk от 1С и не заморачиваться с разработкой собственного )

Надо сказать что с помощью "1С:Библиотека подключаемого оборудования для мобильных приложений" можно быстро протестировать работу оборудования со стандартными драйверами от 1С (и от др. разработчиков).
При необходимости за пару часов можно вставить код и в свое собственное мобильное приложение (пример работы опять же можно посмотреть в библиотеке).
10. Ruslan Ruslan (flyer) 223 21.02.17 23:03 Сейчас в теме
Анатолий если не сложно может статью накидаете о своем опыте? я постараюсь интересные материалы собрать в нашей группе Мобильные приложения 1С (http://infostart.ru/community/groups/1185/)
11. Andrei Novikov (dreamadv) 89 22.02.17 08:01 Сейчас в теме
(7) Спасибо, ранее когда обращали внимание в сторону мобильной платформы данного функционала просто не было. Да нам скорее всего подойдет драйвер от 1С ESC/POS по bluetooth
12. Dmitry Semenov (dima1c) 22 28.02.17 18:15 Сейчас в теме
То что нужно, а то ЗапуститьМобильноеПриложение не совсем устраивает.
13. Алексей (MarryJane) 15 10.04.17 16:09 Сейчас в теме
Может у кого нить есть пример работы со сканером штрих-кода на IOS вешняя компонента. Или кто может написать
14. Ruslan Ruslan (flyer) 223 10.04.17 23:27 Сейчас в теме
(13) лучше в бирже заказов накатать заявку. там быстрее можете найти исполнителя.
15. Андрей Овсянкин (Evil Beaver) 3904 25.04.17 16:35 Сейчас в теме
Реквестирую вторую статью: как быстро скачать все что нужно и куда тыкнуть, чтобы собрать Helloworld.

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

Даешь вторую статью! :)
16. Ruslan Ruslan (flyer) 223 25.04.17 17:44 Сейчас в теме
(15) я статью примерно оценивал на контингент который уже работал с native java и собирал проекты. а то получается человек понятие не имеет как работать с android studio то это лучше курсы пройти сначала и практику получить по программированию.
17. Андрей Овсянкин (Evil Beaver) 3904 25.04.17 19:48 Сейчас в теме
(16) позвольте не согласиться. Тут контингент такой, что хоть с чем сможет работать. И если будет статья для профи, но при этом в стиле Quick Start - контингент (в т.ч. и я) скажет огромное спасибо.

Возьмем абстрактного меня: я на чом хошь напишу, мне лишь нужна помощь по сборке Helloworld, а дальше сам.

И еще раз: статья отличная, еще бы таких побольше, побольше! :)
18. Ruslan Ruslan (flyer) 223 26.04.17 09:39 Сейчас в теме
ладно попробую дополнить статью
Оставьте свое сообщение