Внешние компоненты мобильной платформы 1С для ОС Андроид

Публикация № 987286

Разработка - Разработка внешних компонент

Мобильная платформа Внешние компоненты Андроид

55
На трех простых примерах описана процедура разработки внешних компонент для Андроид. Статья написана по мотивам доклада на конференции INFOSTART 2018 EDUCATION.

Условия успешного старта

 

Поддержка технологии внешних компонент (ТВК) мобильной платформой 1С начиная с 8-го релиза является почти революционным шагом. Особое ее значение проявляется в сегменте приложений для терминалов сбора данных и другого специального оборудования, где дизайн приложения (минус платформы 1С) играет второстепенную роль по отношению к функциональности. Мобильная технология внешних компонент, точно также как и стационарная, поддерживает работу с внешними устройствами. Кроме того, она позволяет расширить функциональность приложений, используя возможности ОС Андроид, напрямую обращаясь к API SDK.

Со стороны программистов 1С с момента выхода к этой технологии проявляется устойчивый интерес. Вместе с тем в библиотеке Инфостарта и в сети пока мало реальных рабочих примеров, пусть даже с закрытым кодом, хотя ее описание и учебный пример опубликованы на официальном ресурсе 1С в открытом доступе. Как мне кажется, есть несколько препятствий для освоения технологии. Во-первых, примеры не содержат указания на среду разработки (кроме компонент для Windows 8 phone, но это выходит за рамки статьи), во-вторых, они скорее предназначены для профессионалов, имеющих опыт программирования на C++ под Android NDK и Java. Огромную трудность представляет отладка и поиск ошибок, половина из которых приводят к "падению" платформы. Для программиста с малым опытом в Android SDK и C++ JNI поиск источника ошибки будет непреодолимой преградой, если учесть, что сама ошибка может быть не в собственном коде, а в мобильной платформе.

В этой статье я попытаюсь объяснить по шагам процедуру создания внешних компонент на трех простых примерах. Но следует предупредить начинающих, что даже собрав и запустив эти примеры, на каждом следующем шаге в процессе самостоятельного освоения, вы будете сталкиваться с большими преградами. "Серебряной пули" на этом пути не существует! Мобильная разработка требует специфического опыта. К освоению технологии лучше приступать, если вы сталкивались с написанием нативных (NativeAPI) компонент для стационарной платформы 1С, знаете как и в какой последовательности платформа вызывает API компоненты, какие внешние интерфейсы и зачем должна реализовать компонента - эти вопросы здесь рассматриваться не будут. Также вам необходим опыт разработки приложений под Андроид. Особое внимание уделите средствам взаимодействия управляемого и неуправляемого кода (JNI). В награду, если у вас получится создать несколько мобильных компонент, вы окажетесь на голову выше не только ваших коллег 1С-ников, но и многих разработчиков Android, которые часто ограничиваются Java, Android SDK и frontend'ом. В отличие от них, вы будете знать такие сложные темы, как JNI, NDK, многопоточность, устройство ядра.

 

Архитектура

Мобильная платформа предоставляет разработчикам внешних компонент интерфейс IComponetnBase (файл ComponentBase.h). Он является базой функционирования как мобильной так и десктопной внешней компоненты и состоит из интерфейсов:

  • IInitDoneBase - шлюз для получения функциональности платформы: загрузка/выгрузка, управление памятью, генерация внешних событий
  • ILanguageExtenderBase - описатель типа компоненты, предоставляет возможности для расширения встроенного языка 1С
  • LocaleBase - управление локализацией компоненты

При начале работы с компонентой 1С вызывает несколько классических экспортных C-функций из динамической библиотеки компоненты:

  • GetClassNames - возвращает имена объектов вашей компоненты, это то, что пишется после на месте <объект> в коде 1С: 
  • Новый("AddIn.<псевдоним>.<объект>");
  • GetClassObject - создает ваш объект компоненты, реализующий IComponentBase
  • DestroyObject - удаляет объект
  • SetPlatformCapabilities - получает версию платформы (для мобильной платформы в настоящий момент версия не важна)

Таким образом, наша задача - реализовать методы интерфейса IComponentBase. Минимальную компоненту можно сделать на C++, используя API ядра Linux. Но, к сожалению, их множество очень ограничено, поэтому трудно обойтись без JNI. С его помощью можно создавать и вызывать функции объектов java и, за некоторыми исключениями, написать компоненту полностью. Но перевести весь java-код в JNI очень трудоемко и чревато трудно обнаруживаемыми ошибками. Это может пригодится только, если вы хотите защитить свой код. В обычной практике лучше использовать часть на C++ как промежуточный слой, а главную реализацию сделать на Java.

Разработчики платформы предоставляют нам доступ к движку Java через API getJniEnv() и интерфейс IAndroidComponentHelper. Последний обеспечивает доступ к контексту мобильного приложения через GetActivity() - функцию, возвращающую активность приложения. Класс java, отвечающий за взаимодействие с кодом на C++ реализует интерфейс Runnable. Это - признак многопоточности, т.е. компонента запускается в отдельном потоке (thread) приложения. Одно из следствий этого - невозможность взаимодействия с интерфейсом приложения и создания собственных активностей.

Обратные вызовы платформы из Java-кода функций C++ выполняются через Java native call. Часто в технологии внешних компонент эти вызовы используются для генерации внешних событий.

В примерах я покажу, как создать простейшую компоненту на C++ (пример 1), как вызвать методы классов Java стандартных библиотек Андроида (пример 2) из C++ кода. Пример 3 представит приложение, реализующее все участки архитектуры.

 

Среда разработки

 

В принципе, для создания мобильных внешних компонент необходим компилятор C++ и Java под Android SDK. Для них существует много RAD и вы можете использовать любые по своему вкусу. Содержание этого раздела отражает лишь мой личный опыт использования MS Visual Studio 2017 и Android studio. Но кто-то захочет предпочесть NetBeans, Eclipse и др. - выбор широк.

Для разработки на VS2017 + Android studio на вашем компьютере должны быть:

  1. Операционная система Windows 10 pro или выше.
  2. Платформа 1С:Предприятие 8.3, необходимо скачать архив свежего релиза мобильной платформы (рекомендуем не ниже 12го!), распаковать и установить сборщик мобильных приложений. (Этот этап и настройку сборщика не описываем, полагаем программисты 1С мобильных приложений знают, как это делать).
  3. С сайта ИТС скачать и распаковать в отдельную папку примеры внешних компонент, нам впоследствии понадобятся из них отдельные заголовочные файлы для C++ проекта.
  4. Со страницы https://visualstudio.microsoft.com загружаем небольшой установщик Visual studio community edition. Эта версия свободная и может использоваться индивидуальными разработчиками для создания коммерческих продуктов. (Если у вас есть платная версия - конечно используйте ее).
  5. Запускаем установщик, после того, как он подготовит среду, ожидаем экран, похожий на этот: Если вы планируете использовать студию только для разработки мобильных компонент, вам достаточно включить флажок "Mobile development with C++". Запускаем установку и ожидаем ее окончания. Все компоненты студия загружает из интернет, поэтому позаботьтесь о хорошем канале.
  6. Загружаем установщик Android studio: https://developer.android.com/studio. Запускаем и устанавливаем продукт.
  7. Запускаем Android studio, чтобы она загрузила и установила необходимые компоненты, в первую очередь Android SDK.

 

Пример 1: "Задержка"

Внешняя компонента без использования JNI

Реализация первого примера очень простая, буквально пара строчек кода, которые я приведу в конце раздела (не считая реализации архитектуры компоненты конечно). Вначале сосредоточимся на создании проекта. В Visual studio создаем новый проект с типом C++ cross platform mobile - android - dynamic shared library:

После открытия проекта Visual studio создаст два файла с именем проекта: SharedObject1.h и SharedObject1.cpp. Я их удаляю - мы будем использовать заготовки из шаблона внешних компонент 1С.

На этом рисунке показаны из шаблона, которые вам необходимо включать в проект каждой компоненты. Вносить изменения в них не рекомендуется. Теперь настроим свойства проекта. На закладке General я изменяю имя выходного файла с учетом архитектуры процессора (выделено жирным), чтобы их можно было помещать в архив компоненты без переименования. В качестве компилятора можно использовать любой, я предпочитаю GCC, по отзывам генерирующий более эффективный код для ARM процессоров:

Версию языка (закладка Language с разделе C/C++) установим 11-ю, чтобы использовать преимущества современного C++ при разработке.

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

Компонента = Новый("AddIn.Sample.Infostart2018");

Он наследуется от IComponentBase. Начинающий разработчик может взять за образец файлы AddInNative.h и AddInNative.cpp. В определении класса следует модифицировать перечисления Props и Methods и приватную часть класса. Наш пример будет выполнять задержку в ходе работы приложения на заданное число миллисекунд, логично для этого сделать метод: в перечислении Methods добавим значение eMethDelay. В файле AddInNative.cpp прописываем в статические массивы g_MethodNames и g_MethodNamesRu английское и русское имя метода. Сигнатуры методов задаются в GetNParams, GetParamDefValue и в HasRetValue. Пусть метод Delay принимает один параметр - целое число - количество миллисекунд задержки, соответственно GetNParams должен вернуть 1, HasRetValue - false. Реализацию метода пишем в CallAsProg. В ОС Андроид задержку можно реализовать, вызвав API ядра Linux - sleep или воспользоваться стандартной библиотекой C++ (здесь нам пригодилось использование версии 11 языка). Выберем последний вариант как более универсальный:

long lDelay = numericValue(paParams);
if (lDelay > 0)
  std::this_thread::sleep_for(std::chrono::milliseconds(lDelay));

После компиляции проекта для процессоров ARM и x86 создадим манифест компоненты:

<?xml version="1.0" encoding="UTF-8"?>
<bundle xmlns="http://v8.1c.ru/8.2/addin/bundle" name="ru_infostart_education">
  <component os="Android" path="libru_infostart_education_ARM.so" codeType="c++" type="native" arch="ARM"/>
  <component os="Android" path="libru_infostart_education_x86.so" codeType="c++" type="native" arch="i386"/>
  <component os="Android" path="infostart.apk" codeType="java" type="native" arch="ARM"/>
  <component os="Android" path="infostart.apk" codeType="java" type="native" arch="i386"/>
</bundle>

Если мы хотим ограничиться только первым или вторым примерами, apk-составляющие в архив можно не включать. Независимо от архитектуры устройства, имя разворачиваемой компоненты будет ru_infostart_education - оно нам потребуется в третьем примере, когда мы будет из java делать обратный вызов в библиотеку C++. Помещаем в архив динамические библиотеки so и этот манифест - и компонента готова.

 

Пример 2: "Информация об устройстве"

Внешняя компонента с вызовами JNI

 

Задача следующего примера - продемонстрировать вызовы сущностей объектов java из C++. Для этого попробуем получить имя производителя и модели устройства с помощью класса Build. В компоненте реализуем свойство ePropDevice только для чтения. Для настройки сигнатур свойств IComponentBase предоставляет ряд методов, которые должны быть читателю известны по технологии внешних компонент для настольной платформы. Сосредоточимся на коде:

IAndroidComponentHelper* helper = (IAndroidComponentHelper*)m_iConnect->GetInterface(eIAndroidComponentHelper);
pvarPropVal->vt = VTYPE_EMPTY;
if (helper)
{
	WCHAR_T* className = nullptr;
	convToShortWchar(&className, L"android.os.Build");
	jclass ccloc = helper->FindClass(className);
	delete[] className;
	className = nullptr;
	std::wstring wData{};
	if (ccloc)
	{
		JNIEnv* env = getJniEnv();
		jfieldID fldID = env->GetStaticFieldID(ccloc, "MANUFACTURER", "Ljava/lang/String;");
		jstring	jManufacturer = (jstring)env->GetStaticObjectField(ccloc, fldID);
		std::wstring wManufacturer = ToWStringJni(jManufacturer);
		env->DeleteLocalRef(jManufacturer);
		fldID = env->GetStaticFieldID(ccloc, "MODEL", "Ljava/lang/String;");
		jstring	jModel = static_cast<jstring>(env->GetStaticObjectField(ccloc, fldID));
		std::wstring wModel = ToWStringJni(jModel);
		env->DeleteLocalRef(jModel);
		if (wManufacturer.length())
			wData = wManufacturer + L": " + wModel;
		else
			wData = wModel;
		env->DeleteLocalRef(ccloc);
	}
if (wData.length())
	ToV8String(wData.c_str(), pvarPropVal);

Фактически это - классический вызов статических свойств класса java через JNI с той разницей, что указатель на окружение виртуальной машины извлекается не из функции main, а из getJniEnv() или IAndroidComponentHelper. Вспомогательные функции ToWStringJni и ToV8String выполняют преобразования строк и параметров, их код вы найдете в примере к статье. В коде C++ внешней компоненты следует строго следовать правилам программирования JNI, по собственному опыту сформулирую наиболее важные моменты:

  • возвращайте как можно раньше указатели сборщику мусора с помощью DeleteLocalRef и DeleteGlobalRef
  • локальные указатели преобразовывайте в глобальные, если их следует передавать в другие процедуры, а также если в процессе их "жизни" используются методы интерфейсов 1С (например, передается внешнее событие ExternalEvent)
  • при работе с java-строками GetStringChar, а не GetStringUTFChar, не забывайте о ReleaseStringChars. Помните, что в Андроид размер переменной char равен 16 битам

 

Пример 3: "Состояние экрана"

Внешняя компонента с кодом java

 

Создадим внешнюю компоненту, отслеживающую событие разблокировки экрана устройства и посылающую об этом оповещение в 1С. В андроиде все оповещения получает класс BroadcastReceiver, который перед регистрацией в контексте приложения предварительно необходимо настроить, указав в отслеживаемые намерения (Intent) и возможно другие параметры. Настройка выполняется в коде или в манифесте приложения. Во внешней компоненте доступен только первый вариант, так как манифест создается сборщиком приложений автоматически. Логика работы компоненты будет реализована на java, а код C++ будет вызывать сущности из apk и  передавать внешние события в 1С. Создание объектов и вызов сущностей из созданной вами компоненты на java точно такое же как в примере 2 для стандартных библиотек - через JNI. Чтобы объекты apk были доступны из C++, они должны быть публичными (public). Для создания java-приложения компоненты сделайте в Android studio проект без активностей, я также удаляю из него лишние ресурсы (папка res), но это не обязательно. Ни ресурсы ни манифест проекта для компоненты значения не имеют и в ней не используются. В проект добавляем класс, реализующий интерфейс Runnable, например так:

И реализуем его как класс внешней компоненты. Для генерации внешних событий будет необходимо вызывать функцию из нашей динамической библиотеки. Имя ее мы задали в манифесте компоненты - "ru_infostart_education", а имя экспортной функции, вызываемой по правилам языка C должно состоять из префика Java_, имени пространства имен в apk (у нас это будет ru.infostart.education) и имени нативной java функции, которую нужно задекларировать в классе. Первые два аргумента зависят от типа функции (статический член класса или нет), остальные аргументы должны соответствовать декларации. Подробнее об этом смотрите в правилах вызова нативных функций из java. После сборки apk в Android studio, его следует переименовать в infostart.apk и поместить в архив.

Подробнее покажем взаимодействие класса LockState с C++ кодом. В нем объявим такой член:

static native void OnLockChanged(long pObject);

Соответствующая функция C в коде компоненты должна быть следующей:

extern "C" JNIEXPORT void JNICALL Java_ru_infostart_education_LockState_OnLockChanged(JNIEnv* env, jclass jClass, jlong pObject)

в ней реализуем генерацию внешнего события в 1С через ExternalEvent. Требует пояснения аргумент pObject - это указатель на интерфейс 1С платформы, который передается в класс LockState в его конструкторе. Он нужен, чтобы вернуть его обратно в экспортную функцию, так как функции типа extern с C++ не могут принадлежать какому-то классу и мы не можем в них получать адреса интерфейсов, который хранит AddInNative. Другое решение данной проблемы - глобальная переменная в коде C++ компоненты, но оно с точки зрения объектно-ориентированного подхода хуже. Приведем код начала класса LockState:

public class LockState implements Runnable {

  // in C/C++ code the function will have name Java__ru_infostart_education_LockState_OnLockChanged
  static native void OnLockChanged(long pObject);

  private long m_V8Object; // 1C application context
  private Activity m_Activity; // custom activity of 1C:Enterprise
  private BroadcastReceiver m_Receiver;

  public LockState(Activity activity, long v8Object)
  {
    m_Activity = activity;
    m_V8Object = v8Object;
  }

  public void run()
  {
    System.loadLibrary("ru_infostart_education");
  }

  public void show()
  {
    m_Activity.runOnUiThread(this);
  }

Член m_Activity необходим для получения контекста приложения, с его помощью можно зарегистрировать BroadcastReceiver. В методе run выполняется загрузка so-библиотеки в управляемый код. Метод show стандартен, он позволяет выполнить код компоненты в контексте вашего приложения.

Полный код этого и предшествующих примеров, а также конфигурацию 1С для их вызовов участники INFOSTART 2018 Education могут получить на форуме конференции. Для всех - ссылка на эти же примеры в приложении.

****************

Данная статья написана по итогам доклада, прочитанного на конференции INFOSTART EVENT 2018 EDUCATION. Больше статей можно прочитать здесь.

В 2020 году приглашаем всех принять участие в 7 региональных митапах, а также юбилейной INFOSTART EVENT 2020 в Москве.

Выбрать мероприятие.

55

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

Наименование Файл Версия Размер
Примеры к статье
.htm 1,08Kb
01.02.19
110
.htm 1,08Kb 110 Скачать бесплатно

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо
1. user623969_dusa 31.01.19 13:21 Сейчас в теме
почему си на андроиде? потому что внешние компоненты на си легче писать??
2. Xershi 762 31.01.19 20:16 Сейчас в теме
Возьму на заметку.
Как раз подхожу к этапу разработки:
https://forum.infostart.ru/forum15/topic202825/
3. ni032mas 95 01.02.19 08:32 Сейчас в теме
Отличная статья, спасибо. Я все время думаю, зачем это все? Получается, чтобы написать хорошее мобильное бизнес приложение на платформе 1С нужны: C++, Java и 1C разработчики, это как минимум дорого. А найти три в одном не простая задача для HR. Плюс ко всему приложение на 1С проигрывает нативным по скорости работы, по отзывчивости, по возможности кастомизации интерфейса. А еще есть куча багов от 1С, порой которые ставят крест на всем проекте. Сам уже несколько лет забил на мобильную платформу и начал писать нативно под Android.
neikist; chemezov; rhtr; it_tungus; +4 Ответить
4. KostyaBu 20 04.02.19 19:47 Сейчас в теме
Уважаемые коллеги Прошу помощи пишу внешнюю компоненту которая достает из буфера обмена скопированные данные.
В разработке компонента более менее разобрался добавил свою процедуру которая успешно возвращает в 1с " Привет мир".
Однако при инициализации ClipboardManager(а) Сервис с помощью которого можно обратится к буферу: m_ClipboardManager = (ClipboardManager)
m_Activity.getSystemService(Context.CLIPBOARD_SERVICE) Компонента отваливается вместе с 1с молча падает. Однако подобный пример только с датчиками движения, как на итс работает.

Итак вопрос. Нужны ли какие разрешения для создания CLIPBOARD_SERVICE и в чем хитрость работы именно этого сервиса, другой с датчиками ведь успешно запускается,

Благодарен любой подсказке.
5. IgorKissil 252 08.02.19 12:43 Сейчас в теме
(4) Реализовал буфер в своей компоненте: https://infostart.ru/public/779912/ С получением сервиса и операциями copy/paste не нашел никаких проблем - вы что-то делаете не так. Трудности будут с получением callback'а об изменении буфера, потребуются знания многопоточности и одна хитрость. Но тоже, как видите, преодолимо.
KostyaBu; +1 Ответить
6. KostyaBu 20 08.02.19 17:01 Сейчас в теме
(5) Прежде всего хотел выразить благодарность что вы откликнулись. Увидел что вы уже все реализовали и я скачал. спасибо! Но очень хочется разобраться времени много потрачено нужно разобраться.

напишу кусок из Вашего примера дописка в инициализации класса:

private long m_V8Object; // 1C application context
private Activity m_Activity; // custom activity of 1C:Enterprise
private BroadcastReceiver m_Receiver;
private String text;
private ClipboardManager m_ClipboardManager = null;


// private ClipData.Item item= null;;

public LockState(Activity activity, long v8Object)
{
m_Activity = activity;
m_V8Object = v8Object;
m_Context = activity.getBaseContext();

m_ClipboardManager =(ClipboardManager) m_Context.getSystemService(Context.CLIPBOARD_SERVICE); (Здесь падает)

}

хотя сервис доступа к сенсорам получаю без проблем как в примере Степ каунтер.
m_SensorManager = (SensorManager) m_Context.getSystemService(Context.SENSOR_SERVICE);

Заранее благодарен за ответ!
7. IgorKissil 252 08.02.19 17:37 Сейчас в теме
(6) Зачем вам getBaseContext? Используйте контекст активности или приложения
KostyaBu; +1 Ответить
8. KostyaBu 20 08.02.19 20:47 Сейчас в теме
(7)
я его написал от безисходности т.к

m_Activity.getSystemService(Context.CLIPBOARD_SERVICE);
тоже падает (вся система вместе с 1с закрывается)
9. KostyaBu 20 08.02.19 20:51 Сейчас в теме
(7)
такое чувство. что на CLIPBOARD_SERVICE есть какое то ограничение. а с m_SensorManager = (SensorManager) m_Context.getSystemService(Context.SENSOR_SERVICE); как в примере от 1с проходит все гладко но Вы в своей компоненте доказали что я где- то что то не понимаю ((. Осталось понять что.
10. user1169242 11.03.19 15:44 Сейчас в теме
Коллеги. Прошу совета. Задолбался уже искать причину.
void connect() { 
    Initialize(); 
    StartAPKMethod(); 
} 

void disconnect() { 
    StopAPKMethod(); 
} 

void StartAPKMethod(){ 
    if (obj){ 
        JNIEnv* env = getJniEnv(); 
        jmethodID methID = env->GetMethodID(cc, "start", "()V"); 
        env->CallVoidMethod(obj, methID); 
    } 
} 
void StopAPKMethod(){ 
    if (obj) { 
        JNIEnv* env = getJniEnv(); 
        jmethodID methID = env->GetMethodID(cc, "stop", "()V"); 
        env->CallVoidMethod(obj, methID); 
        env->DeleteGlobalRef(obj); 
        env->DeleteGlobalRef(cc); 
        obj = nullptr; 
        cc = nullptr; 
    } 
}
Показать

Если сделать так:
for(int i=0; i<100; ++i){
   connect();
   disconnect();
}


То приложение стабильно падает. Собственно пример синтетический. На самом деле приложение периодически падает при закрытии мобильного приложения 1с. Очевидно все дело в уничтожении объектов, но куда копать и почему оно падает не всегда - понять не могу
11. ineshyk 07.05.19 22:57 Сейчас в теме
Скачал Демку 1С, залил на телефон. При запуске пишет ошибка подключения внешней компоненты
12. Ignat87 02.08.19 15:04 Сейчас в теме
Ребята, помогите. В VS 2019 собрал пустое приложение (i386 b ARM) из шаблона ИТС для мобильных платформ, но на участке кода ПодключитьВнешнююКомпоненту("ОбщийМакет.TestVK", "TestVK", ТипВнешнейКомпоненты.Native) платформа просто падает без описания ошибок.

Я новичек в этом деле, в чем проблема - не пойму. Сделал вроде все правильно. Прикреплю файл с проектом, может кто подскажет, в чем проблема.
Прикрепленные файлы:
Компонента и ее исходник.rar
13. refostart 14.08.19 16:51 Сейчас в теме
Хотелось бы уточнить, есть ли какой-то способ что-то логировать в Java-коде? Написание почти с нуля в лоб внешних компонент весьма проблематичная задача.
14. IgorKissil 252 15.08.19 04:38 Сейчас в теме
(13)Посмотрите шагомер от 1С, файл jnienv.cpp. Логирование делается как описано здесь: https://developer.android.com/ndk/reference/group/logging Ну и почитайте https://developer.android.com/studio/debug/am-logcat
chemezov; refostart; +2 Ответить
15. ripreal1 392 07.11.19 08:59 Сейчас в теме
Столкнулись с проблемой, что компонента не может вызывать java классы, если она была инициализирована на сервере. Расследование показало, что причина кроется в методе IAndroidComponentHelper->FindClass(), который возвращает null, При вызове компоненты с клиента все работает отлично. Отрывок кода на C++:

Код использую типовой:

IAndroidComponentHelper* helper = (IAndroidComponentHelper*)cnn->GetInterface(eIAndroidComponentHelper);
if (helper)
	{
		WCHAR_T* className = nullptr;
		convToShortWchar(&className, L"org.biterp.prmqmobile.MainApp");
		jclass ccloc = helper->FindClass(className); // Метод возвращает NULL
		delete[] className;
		className = nullptr;
		if (ccloc)
		{
			JNIEnv* env = getJniEnv();
			cc = static_cast<jclass>(env->NewGlobalRef(ccloc));
			env->DeleteLocalRef(ccloc);
			jobject activity = helper->GetActivity();
			// call of constructor for java class
			jmethodID methID = env->GetMethodID(cc, "<init>", "(Landroid/app/Activity;J)V");
			jobject objloc = env->NewObject(cc, methID, activity, (jlong)cnn);
			obj = static_cast<jobject>(env->NewGlobalRef(objloc));
			env->DeleteLocalRef(objloc);
			methID = env->GetMethodID(cc, "show", "()V");
			env->CallVoidMethod(obj, methID);
			env->DeleteLocalRef(activity);
		}
	}
Показать


Кому-нибудь удалось выывать Java код для компоненты с сервера?
16. IgorKissil 252 07.11.19 10:12 Сейчас в теме
(15)Верно. Мобильные компоненты работают только на клиенте. Потому что есть мобильный клиент. Как вы думаете, где выполняются его Функции и процедуры с директивой &НаСервере? Правильно, на сервере предприятия с среде windows или Linux.
17. ripreal1 392 07.11.19 12:40 Сейчас в теме
(16) Я пытаюсь запустить не на мобильном клиенте, а на автономном мобильном приложении. Вроде сами разработчики платформы говорили, что аннотации &НаСервере оставлены там только ради обратной совместимости и весь код исполняется в рамках одного приложения. Как-то странно, что "На Сервере" не работает.
18. lokli 20.11.19 11:02 Сейчас в теме
Добрый день. Разбираю ваши исходники, пытаюсь разобраться в данном вопросе. Подскажите, в каком направлении копать, что бы передавать в 1С данные из бродкаста (например, как при работе со сканером или с буфером обмена)?
Оставьте свое сообщение

См. также

Simple UI – простой конструктор мобильных приложений для бизнеса. Обновление 11.12.19: распознавание текста и многое другое 50

Инструменты и обработки Программист Пользователь Руководитель проекта Архив с данными v8 УУ Абонемент ($m) Мобильная разработка

Simple UI – платформа для создания приложений на Android мобильных рабочих мест (в точ числе ТСД, телефонов и т.д.), работающих в режиме мобильного фронта к учетнйо системе так и самостоятельно. Это продолжение и развитие проекта Simple WMS. Новая платформа содержит все, что есть в Simple WMS но, вместе с тем реализует новые подходы к разработке, которые позволяют создавать приложения для любых целей, а не только для склада. Приложение имеет полную обратную совместимость и способно запускать старые конфигурации. Тестировалось на 1С: Предприятие 8.3 релиз 8.3.13.1865.

5 стартмани

14.11.2019    3389    23    informa1555    8       

Программы для исполнения 54-ФЗ Промо

С 01.02.2017 контрольно-кассовая техника должна отправлять электронные версии чеков оператору фискальных данных - правила установлены в 54-ФЗ ст.2 п.2. Инфостарт предлагает подборку программ, связанных с применением 54-ФЗ, ККТ и электронных чеков.

Получение AndroidID в мобильном приложении 8

Инструменты и обработки Программист Архив с данными v8::Mobile Россия Абонемент ($m) Мобильная разработка

Получаем Android DeviceID в мобильном приложении/клиенте, используя стороннее приложение.

1 стартмани

05.11.2019    2043    sam441    8       

ODa - Android приложение для подключения к любой конфигурации 1С, используя OData протокол 63

Инструменты и обработки no Приложение (apk) v8 1cv8.cf Абонемент ($m) Мобильная разработка

В платформе 1С реализована прекрасная возможность работы с открытым веб-протоколом OData, который предоставляет любой другой платформе интерфейс доступа - возможность запрашивать и обновлять данные из базы 1С. Далее в статье будут описаны особенности работы мобильного приложения ODa, которое без программировании на стороне Android'a позволит разработчикам публиковать базы 1С, что даст возможность обычным пользователям взаимодействовать с объектами метаданных, используя нативные элементы интерфейса платформы Android.

1 стартмани

22.10.2019    4316    7    Kosigo    11       

Базовый курс для начинающих 1С-программистов. Пятый поток. Онлайн-курс с 12 февраля по 15 апреля 2020 г. Промо

Данный онлайн-курс является начальной ступенью по изучению базовых принципов программирования в системе “1С:Предприятие” и предназначен для обучения 1С-программированию “с нуля”.

4500/9500 рублей

Маленькая и скромная мобильная внешняя компонента 46

Вопрос Программист Архив с данными v8 Абонемент ($m) Разработка внешних компонент

Изваять простенькую мобильную компоненту на 1С для android не так-то просто. Посему назло отдельным супостатам, не желающим делится исходниками, представляю весь свой скромный труд на публичный суд.

1 стартмани

21.10.2019    3960    1    ripreal1    12       

Native внешняя компонента для оповещения по UDP или TCP 36

Инструменты и обработки Программист Архив с данными v8 Windows Абонемент ($m) Разработка внешних компонент

Native внешняя компонента для оповещения по UDP или TCP, которая реализует возможность в 1С передавать сообщения с сервера на клиента. Исходный код компоненты также представлен.

1 стартмани

06.10.2019    3373    7    vdv2701    10       

Программы для исполнения 488-ФЗ: Маркировка товаров Промо

1 января 2019 года вступил в силу ФЗ от 25.12.2018 № 488-ФЗ о единой информационной системе маркировки товаров с использованием контрольных (идентификационных) знаков, который позволяет проследить движение товара от производителя до конечного потребителя. Инфостарт предлагает подборку программ, связанных с применением 488-ФЗ и маркировкой товаров.

Мой помощник и бухгалтер 5

Отчеты и формы no Приложение (apk) v8::Mobile Домашние учет и финансы Россия УУ Android Абонемент ($m) Учет доходов и расходов Мобильная разработка

Домашняя бухгалтерия, записная книжка, контакты, напоминания, сканер штрих-кода, матрица Эйзенхауэра - все в твоём телефоне.

1 стартмани

26.09.2019    1929    2    user-sergey    10       

Компонента аутентификации и шифрования с помощью биометрической информации для Андроид 9

Инструменты и обработки Программист Конфигурация (md, cf) v8::Mobile Android Абонемент ($m) Разработка внешних компонент Мобильная разработка Защита и шифрование

Компонента для мобильной платформы, позволяющая идентифицировать пользователя и шифровать данные с помощью биометрических сканеров.

5 стартмани

17.09.2019    1738    1    IgorKissil    0       

Перенос данных БП 2.0 => УТ 11 / КА 2 / ERP 2 (перенос остатков, документов и справочников из "1С:Бухгалтерия предприятия 8", ред. 2.0 в "1С:Управление торговлей 8", ред.11 / КА 2 / ERP 2). Обновлено до УТ 11.4.10.х, КА 2.4.10.х, ERP 2.4.10.х! Промо

Перенос позволяет загрузить в УТ 11 / КА 2 / ERP 2 документы за выбранный период, справочную информацию и остатки по счетам бух. учета. Переносятся остатки денежных средств, взаиморасчетов, остатки товаров и материалов на складах. Переносятся девятнадцать основных видов документов за выбранный период и вся нормативно-справочная информация. Есть фильтр по организации. Если нужно переносить что-то дополнительно, то обычно бесплатно дорабатываю правила (перед покупкой согласуйте необходимые доработки).

29700 руб.

Пример простого и приятного внешнего HTML интерфейса для мобильного приложения 10

Отчеты и формы Программист Конфигурация (md, cf) v8::Mobile Абонемент ($m) Работа с интерфейсом Мобильная разработка

Реализация простого и приятного внешнего HTML интерфейса для мобильного приложения. Делимся исходниками, чтобы разработчики мобильных приложений разрабатывали больше приятных интерфейсов для приложений.

5 стартмани

05.09.2019    2295    21    Baksheev-Nikita    10       

Мобильное приложение 1С для помарочной инвентаризации маркируемой (алкогольной) продукции 11

Инструменты и обработки Программист Пользователь Архив с данными v8::Mobile Розничная и сетевая торговля (FMCG) Android Розничная торговля Абонемент ($m) Терминал сбора данных Мобильная разработка

Мобильное приложение 1С для помарочной инвентаризации маркируемой (алкогольной) продукции на ТСД под Android. Получение данных марок (штрихкодов), используя БПО для мобильного приложения. Разработка на платформе 8.3.13.1809. Мобильная платформа 8.3.13.64. Версия сборщика 2.0.8.19.

1 стартмани

18.07.2019    2765    7    savostin.alex    0       

Перенос данных КА 1.1 / УПП 1.3 => БП 3.0 (перенос остатков, документов и справочников из "1С:Комплексная автоматизация 1.1" / УПП 1.3 в "1С:Бухгалтерия 3.0"). Обновлен до версий КА 1.1.115.х, УПП 1.3.127.х! Промо

Разработка позволяет перенести остатки по всем счетам бух.учета в программу "1С:Бухгалтерия предприятия 8", ред. 3.0 на выбранную дату начала ведения учета. Также переносятся документы за период и вся необходимая справочная информация. Правила оперативно обновляю при выходе новых релизов. Рассылка обновлений правил бесплатно в течение 12 месяцев. Есть видеодемонстрация проведения переноса данных. Конфигурации при использовании обмена остаются полностью типовыми. Перенос данных возможен в Бухгалтерию 3.0 версии ПРОФ, КОРП или базовую.

24700 руб.

Внешняя компонента для принтеров Bixolon 3

Инструменты и обработки Программист Конфигурация (md, cf) v8::Mobile Android Абонемент ($m) Разработка внешних компонент

Представлена компонента мобильной платформы 1С для ОС Android, поддерживающая принтеры этикеток и чеков семейства Bixolon. Тестировалась на релизе мобильной платформы 8.3.14.53.

5 стартмани

08.07.2019    1533    IgorKissil    2       

Мобильное приложение "Сбор заказов" 7

Отчеты и формы Программист Пользователь Приложение (apk) v8 v8::Mobile 1cv8.cf Украина УУ Монитор заказов Абонемент ($m) Мобильная разработка

Приложение «Сбор заказов» разрабатывалось и разрабатывается для хранения и накопления данных от торговых представителей и автоматического обмена данными с программой учёта на базе платформы 1С:Предприятие. Мобильное приложение написано на технологии мобильной платформы 1С:Предприятие. Механизм обмена данных происходит посредством почтового сервера. В дальнейшем будет реализован механизм непосредственного доступа приложения к учётной системе через прямое интернет-соединение. FTP-соединение не работает как надо, так что будем довольствоваться тем, что есть... :)

4 стартмани

06.06.2019    2963    yarsort    9       

Перенос документов, остатков и справочников КА 1.1 => КА 2 / УТ 11. Обновлено до КА 2.4.10.х и УТ 11.4.10.х! Промо

Более 130 компаний выполнили переход на КА 2 или УТ 11 с помощью нашей разработки! Позволяет перенести не только остатки и справочники (как типовая обработка), но и документы за нужный период времени. Предоставляем техподдержку, оперативно исправляем замечания, выпускаем обновления при выходе новых релизов программ 1С. Вы можете проверить разработку до покупки: сделаем бесплатный тестовый перенос из вашей базы КА 1.1 и предоставим доступ к базе-результату через веб-клиент!

29700 руб.

Мобильное приложение 1С: Список покупок и анализ расходов 33

Отчеты и формы Программист Пользователь Конфигурация (md, cf) v8 v8::Mobile Домашние учет и финансы Россия УУ Windows Финансовый учет и бюджетирование (FRP) Абонемент ($m) Мобильная разработка

В публикации рассмотрено небольшое домашнее мобильное приложение для составления списка покупок и анализа расходов. В приложении реализованы: работа с штрихкодами (сканирование встроенной камерой), поиск наименования товара по штрихкоду из интернета, загрузка чеков из ФНС по QR-коду, вывод QR-кода ранее загруженного чека и др.

1 стартмани

06.06.2019    4039    18    vasilievil    4       

Event Management - мобильное приложение для управления мероприятиями (Android) 2

Отчеты и формы no Приложение (apk) v8::Mobile Развлечения, искусство, спорт УУ Android Производство готовой продукции (работ, услуг) Абонемент ($m) Мобильная разработка

Event Management - мобильное приложение для управления мероприятиями. Отлично подойдет event-агентствам, свадебным организаторам, а также тем, кто проводит консультации, тренинги и т.д. Работает на Android (проверено на версии 5.1).

4 стартмани

31.05.2019    2445    1    yuriy_lokhonya    1       

Очный семинар по регулярному менеджменту Александра Фридмана "Вы или Хаос", 12 декабря 2019 г. , Санкт-Петербург Промо

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

от 11000 до 29000 рублей

Шаблон http-сервиса для вашего проекта 89

Инструменты и обработки Программист Архив с данными v8 v8::Mobile 1cv8.cf Абонемент ($m) Внешние источники данных WEB Мобильная разработка

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

3 стартмани

04.05.2019    8970    57    MarkoSokolov    47       

Управление ТСД Zebra с помощью внешней компоненты для мобильной платформы 5

Инструменты и обработки Программист Конфигурация (md, cf) v8::Mobile Android Абонемент ($m) Разработка внешних компонент Мобильная разработка

Представлена внешняя компонента для управления сканерами терминалов Zebra из мобильных приложений 1С.

2 стартмани

15.04.2019    3297    6    IgorKissil    1       

Перенос данных БП 3.0 => УТ 11 / КА 2 / ERP 2 (ЕРП) (перенос остатков, документов и справочной информации из "1С:Бухгалтерия предприятия 8", ред.3.0). Обновлено до БП 3.0.73.х, УТ 11.4.10.х, КА 2.4.10.х., ERP 2.4.10.х! Промо

Переносятся документы за выбранный период, справочная информация и остатки по счетам бух. учета в программу УТ 11 / КА 2 / ЕРП 2 (ERP). Переносятся все возможные виды операций ввода остатков на нужную дату. Есть отбор по периоду переноса документов и фильтр по организации, доступен выбор даты ввода остатков. Если нужно переносить что-то дополнительно, то обычно бесплатно добавляем это в перенос . Смотрите видеодемонстрацию со звуком - советами по переносу и рекомендациями настройки программ.

29700 руб.

Андроид активити, разработанное для запуска и сбора информации из мобильного приложения 1С 8.3 3

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8::Mobile 1cv8.cf Автомобили, автосервисы Android Абонемент ($m) Мобильная разработка

Активити доступно из кода мобильного приложения 1С 8.3. Может использоваться как часть приложения при приемке автомобиля на предприятиях автосервиса. По сути является модальным диалогом, для внесения данных по осмотру автомобиля при приемке/передаче.

1 стартмани

10.04.2019    2255    hiEnergy    1       

Подборка программ для взаимодействия с ЕГАИС Промо

ЕГАИС (Единая государственная автоматизированная информационная система) - автоматизированная система, предназначенная для государственного контроля за объёмом производства и оборота этилового спирта, алкогольной и спиртосодержащей продукции. Инфостарт рекомендует подборку проверенных решений для взаимодействия с системой.

Подкасты сайта "Эхо Москвы" в мобильном приложении 1С 3

Инструменты и обработки no Архив с данными v8::Mobile Россия Android Абонемент ($m) Мобильная разработка

Данная разработка показывает возможности мобильного приложения от 1С на примере получения данных с сайта радиостанции "Эхо Москвы" и последующего проигрывания мультимедиа.

1 стартмани

09.03.2019    2466    2    NovPas    6       

Альтернатива для "ПоказатьВыборИзСписка" и "ПоказатьВопрос" для приложений на Мобильной Платформе (УФ) 4

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8::УФ v8::Mobile 1cv8.cf Абонемент ($m) Мобильная разработка

Внешняя обработка, которая может быть интегрирована в вашу мобильную конфигурацию, если вы собираетесь уделить внимание интерфейсу программы в объеме отличном от нуля. Позволяет организовать выбор пользователем одного элемента из массива или спискаЗначений с возможностью управления цветом, размером и положением как текста вопроса, так и вариантов ответов.

1 стартмани

04.02.2019    3210    HorusTheOne    0       

1C:Предприятие для программистов: Запросы и отчеты. Второй поток. Онлайн-интенсив с 17 марта по 16 апреля 2020 г. Промо

Данный онлайн-курс предусматривает углубленное изучение языка запросов и возможностей системы компоновки данных, которые понадобятся при разработке отчетов, работающих на платформе “1С:Предприятие” в рамках различных прикладных решений. Курс предназначен для тех, кто уже имеет определенные навыки конфигурирования и программирования в системе “1С:Предприятие”, а также для опытных пользователей различных прикладных решений, которые используют в своей работе отчеты разного назначения.

6500 рублей

Инструкция по применению мобильного приложения 1С:Штрихкоды 3

Инструменты и обработки Программист Приложение (apk) v8::Mobile Android Абонемент ($m) Практика программирования Сканер штрих-кода Мобильная разработка

После выпуска обзора на настраиваемое мобильное приложение для сканирования штрихкодов у заинтересованных лиц появилось множество вопросов о том, как этим пользоваться.

1 стартмани

18.01.2019    4457    2    inord777    0       

Сканер штрих-кодов Сервер + Клиент 5

Инструменты и обработки Программист Пользователь Архив с данными v8::Mobile 1cv8.cf Россия Windows Розничная торговля Абонемент ($m) Мобильная разработка Сканер штрих-кода

Мобильное приложение для магазинов одежды, продавец сканирует товар, и ему мобилка выдает остаток +сумму+ склад+ цвет+ размер+ свойство товара.

1 стартмани

18.01.2019    3302    1    enot_tut    0       

С 2020 года сервис «Продление поддержки конфигурации 1С:УПП» подорожает вдвое Промо

Успейте продлить поддержку УПП до повышения цен! Фирма «1С» предупредила об изменении цен на сервис «Продление поддержки конфигурации "1С:Управление производственным предприятием"». С 1 января 2020 года сервис подорожает в два раза.

Конструктор мобильного клиента Simple WMS Client: способ создать полноценный ТСД без мобильной разработки. Теперь новая версия - Simple UI (обновлено 14.11.2019) 178

Инструменты и обработки Программист Архив с данными v8 v8::Mobile БУ УУ Android Оптовая торговля Производство готовой продукции (работ, услуг) Розничная торговля Учет ОС и НМА Учет ТМЦ Абонемент ($m) Инструментарий разработчика Сканер штрих-кода Терминал сбора данных Мобильная разработка

Simple WMS Client – это визуальный конструктор мобильного клиента для терминала сбора данных(ТСД) или обычного телефона на Android. Приложение работает в онлайн режиме через интернет или WI-FI, постоянно общаясь с базой посредством http-запросов (вариант для 1С-клиента общается с 1С напрямую как обычный клиент). Можно создавать любые конфигурации мобильного клиента с помощью конструктора и обработчиков на языке 1С (НЕ мобильная платформа). Вся логика приложения и интеграции содержится в обработчиках на стороне 1С. Это очень простой способ создать и развернуть клиентскую часть для WMS системы или для любой другой конфигурации 1С (УТ, УПП, ERP, самописной) с минимумом программирования. Например, можно добавить в учетную систему адресное хранение, учет оборудования и любые другие задачи. Приложение умеет работать не только со штрих-кодами, но и с распознаванием голоса от Google. Это бесплатная и открытая система, не требующая обучения, с возможностью быстро получить результат.

5 стартмани

09.01.2019    25176    229    informa1555    189       

Мобильное приложение для Android по учету выполненных работ/услуг и отслеживанию состояния расчетов с клиентами 1

Отчеты и формы Пользователь Архив с данными v8::Mobile УУ Производство готовой продукции (работ, услуг) Абонемент ($m) Мобильная разработка

Мобильное приложение для Android по учету выполненных работ/услуг. Позволяет вести почасовой учет выполненных работ/услуг, их закрытие, а так же отражение оплаты за выполненные работы и услуги. Позволяет сформировать отчеты о выполненных работах и услугах и о состоянии расчетов с клиентами, а так же отправлять результаты формирования отчетов в pdf формате на электронную почту.

1 стартмани

31.12.2018    3378    alevpe_1c    12       

Перенос данных УПП 1.3 => ERP 2 (ЕРП) / УТ 11 / КА 2.х (обработка переноса документов, остатков и справочников из "1С:Управление производственным предприятием, ред. 1.3" в ERP / УТ 11 / КА 2). Обновлен до УПП 1.3.127.х, КА 2.4.10.х и ERP 2.4.10.х! Промо

Обработка позволяет переносить из УПП 1.3 в ERP 2 документы за выбранный период и остатки. Типовая обработка от фирмы 1С документы не переносит. Также исправлены ошибки типовой обработки. При выходе новых релизов обновление высылается бесплатно в течение года. Разработка будет полезна фирмам-франчайзи, которые периодически выполняют такой перенос данных для заказчиков. Вы можете один раз приобрести обработку переноса, и потом бесплатно получать обновления при выходе новых релизов конфигураций 1С.

29700 руб.

Мобильное приложение: Терминал сбора данных (Автоматизация работы склада в режиме он-лайн) 29

Отчеты и формы no Расширение (cfe) v8::ОУ v8::Mobile ERP2 УТ11 КА2 Розничная и сетевая торговля (FMCG) Оптовая торговля, дистрибуция, логистика Россия УУ Оптовая торговля Розничная торговля Учет ТМЦ Абонемент ($m) Терминал сбора данных Мобильная разработка

Мобильное приложение предназначено для автоматизации работы склада в режиме он-лайн. Программа работает на ТСД (или на смартфоне) под управлением Android. Для работы необходим постоянный доступ к веб-публикации центральной базы данных через интернет.

1 стартмани

10.12.2018    8385    47    user1028927    20