Написание внешних компонент для мобильных приложений 1С представляет собой очень сложную задачу. Не случайно в сообществе Инфостарт пока никто не представил мобильную компоненту, выполняющую реальную работу. Я предлагаю опытным разрабочикам делиться своими продуктами, так как многообразие устройств, особенно на Android, оставляет мало шансов, что фирма "1С" покроет его своей библиотекой драйверов для мобильных приложений. Для подкрепления своих слов предлагаю свою компоненту для управления сканером терминалов китайской фирмы Lauchgang модель U8000S. Компонента содержит набор всех необходимых функций для сканирования из 1С: включение/выключение, принудительное включение и выключение лазера и, конечно, получение результата сканирования внешним событием 1С, без необходимости использования клавиатурного режима сканера и вывода результата в поле ввода (к сожадению, очень распространенная практика среди 1С-ников).
Разработчик, который решится написать внешнюю компоненту для мобильного приложения, должен быть настоящим универсалом. Богатого опыта в 1С, знания технологии внешних компонент NativeAPI и C++ для десктопных приложений не достаточно. Ему прийдется освоить все виды взаимодействий между управляемым и неуправляемым кодом, особенности работы сборщиков мусора на разных платформах. Кроме хорошего знания C++ скорее всего потребуются Java/Managed C++/Objective C. Большие мучения доставляет отладка внешних компонент, точнее ее отсутствие. Все что доступно программисту в этом плане - это вывод сообщений в системный журнал (к которому еще надо добраться!). Причем компоненту необходимо каждый раз собирать и загружать на устройство заново, после обнаружения очередной ошибки. Сбои в работе компоненты вызывают крах всего приложения. Для программиста с малым опытом отладка превратится в настоящую пытку. Ошибки лучше отлавливать, еще и еще раз просматривая и анализируя код. В этом деле не помешает интуиция, которая, конечно, есть следствие опыта и понимания процессов взаимодействия мобильной платформы с окружением.
В качестве иллюстрации приведу схему процессов для мобильной платформы 1С на Android:
Реализация интерфейса IComponentBase во внешней компоненте - раздел знакомый разработчикам внешних компонент. В мобильном приложении он почти не изменился по сравнению с платформой 1С. Если Вам удалось найти библиотеку оборудования на чистом C++ на этой реализации можно остановиться. Но большинство библиотек устройств под Android написаны на Java и без взаимодействия с управляемым кодом не обойтись. Для этого необходимо написать на Java реализацию интефейса Runnable, в который можно передать окно мобильного приложения 1С в виде, получаемое методом GetActivity интерфейса IAndroidComponentHelper. События устройств передаются в приложение через широковещательные оповещения, а их, в свою очередь, необходимо передавать в 1С вызовом ExternalEvent. Для моста между Runnable-объектом и компонентой необходимо создать экспортируемые функции JNIEXPORT, доступные из кода на Java.
Еще одна трудность, с которой прийдется столкнуться разработчику, это пока еще сырая мобильная платформа 8.3.9, в которой технология внешних компонент реализована впервые, а также ошибки в библитеках драйверов устройств от различных производителей. В коде демонстрационной конфигурации в комментариях я указал на особенности использования и вызовов методов данной компоненты. Особенности ее использования связаны с несовершенством SDK для сканера.
В приложенном к статье файле выложена демострационная конфигурация, содержащая двоичные данные компоненты (макет). Он не содержит кода самой компоненты, поэтому скачивать его имеет смысл лишь тем, кто имеет у себя терминалы U8000S и хотел бы оптимизировать их использование. Компонента разработана в полном соответствии со стандартами 1С к подключаемому оборудованию и включена в состав конфигурации "Библиотека подключаемого оборудования для мобильных приложений" версии 2.0.8.