Внешние компоненты. Мобильное приложение 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
2
.apk 26,59Mb 2 Скачать
Шаблон для Android studio
.zip 20,78Kb
16.02.17
10
.zip 20,78Kb 10 Скачать

См. также

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

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

Надо сказать что с помощью "1С:Библиотека подключаемого оборудования для мобильных приложений" можно быстро протестировать работу оборудования со стандартными драйверами от 1С (и от др. разработчиков).
При необходимости за пару часов можно вставить код и в свое собственное мобильное приложение (пример работы опять же можно посмотреть в библиотеке).
10. Ruslan Ruslan (flyer) 207 21.02.17 23:03 Сейчас в теме
Анатолий если не сложно может статью накидаете о своем опыте? я постараюсь интересные материалы собрать в нашей группе Мобильные приложения 1С (http://infostart.ru/community/groups/1185/)
11. Andrei Novikov (dreamadv) 83 22.02.17 08:01 Сейчас в теме
(7) Спасибо, ранее когда обращали внимание в сторону мобильной платформы данного функционала просто не было. Да нам скорее всего подойдет драйвер от 1С ESC/POS по bluetooth
12. Dmitry Semenov (dima1c) 22 28.02.17 18:15 Сейчас в теме
То что нужно, а то ЗапуститьМобильноеПриложение не совсем устраивает.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа