Мобильное приложение 1С и приложение Java. Совместная работа через Intent. Часть 3. Передаем данные из 1С в приложение Java

31.08.17

Разработка - Мобильная разработка

Пишем два приложения - конфигурацию на мобильной платформе 1С и приложение Java Android Studio. На примере рассматриваем совместное использование двух приложений через Intent. Публикация состоит из 3 частей: Часть 1. Запуск приложения Java из 1С Часть 2. Получаем данные в 1С из приложения Java Часть 3. Отправляем данные в приложение Java из 1С.

Добрый день, уважаемые коллеги!

В данной части доработаем наши мобильные приложения, описанные в 1 и 2 частях (//infostart.ru/public/613072/  //infostart.ru/public/613225/) и посмотрим на примере, как передать данные из 1С в Java приложение.

1.Открываем наш проект в Android Studio

Добавляем в activity_main.xml кнопку и два поля ввода. Должно получиться так

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical">

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:id="@+id/btnTime"
        android:text="Показать время">
    </Button>
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:id="@+id/btnDate"
        android:text="Показать дату">
    </Button>
    <Button
        android:id="@+id/btnName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:layout_margin="20dp"
        android:text="Ввести имя">
    </Button>

    <TextView
        android:id="@+id/tvName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:text="Ваше имя: ">
    </TextView>

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:gravity="center_horizontal"
        android:text="Введите ваше имя">
    </TextView>
    <TableLayout
        android:id="@+id/tableLayout1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="10dp"
        android:stretchColumns="1">
        <TableRow
            android:id="@+id/tableRow1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
            <TextView
                android:id="@+id/textView1"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="Имя">
            </TextView>
            <EditText
                android:id="@+id/etFName"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginLeft="5dp">
                <requestFocus>
                </requestFocus>
            </EditText>
        </TableRow>
        <TableRow
            android:id="@+id/tableRow2"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
            <TextView
                android:id="@+id/textView2"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="Фамилия">
            </TextView>
            <EditText
                android:id="@+id/etLName"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginLeft="5dp">
            </EditText>
        </TableRow>
    </TableLayout>
    <Button
        android:id="@+id/btnSubmit"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:text="Передать данные">
    </Button>
</LinearLayout>

Создадим новый Layout в котором будем отображать переданные данные view.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <TextView
        android:id="@+id/tvView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="20dp"
        android:text="TextView"
        android:textSize="20sp">
    </TextView>
</LinearLayout>

Создаем класс ViewActivity:

package ru.w0rm.develop.intentfilter;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;

public class ViewActivity extends Activity {

    TextView tvView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.view);

        tvView = (TextView) findViewById(R.id.tvView);

        Intent intent = getIntent();

        String fName = intent.getStringExtra("fname");
        String lName = intent.getStringExtra("lname");

        tvView.setText("Ваше имя: " + fName + " " + lName);
    }
}

В коде находим TextView, затем получаем Intent и извлекаем из него String-объекты с именами fname и lname. Это те самые значения, которые мы будем передавать из 1С. Формируем строку вывода в TextView с использованием полученных данных.

Кодим класс MainActivity:

package ru.w0rm.develop.intentfilter;

import android.app.Activity;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends Activity implements View.OnClickListener {

    TextView tvName;
    Button btnName;
    EditText etFName;
    EditText etLName;

    Button btnSubmit;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button btnTime = (Button) findViewById(R.id.btnTime);
        Button btnDate = (Button) findViewById(R.id.btnDate);

        tvName = (TextView) findViewById(R.id.tvName);
        btnName = (Button) findViewById(R.id.btnName);
        btnName.setOnClickListener(this);

        btnTime.setOnClickListener(this);
        btnDate.setOnClickListener(this);

        etFName = (EditText) findViewById(R.id.etFName);
        etLName = (EditText) findViewById(R.id.etLName);

        btnSubmit = (Button) findViewById(R.id.btnSubmit);
        btnSubmit.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        Intent intent;

        switch(v.getId()) {
            case R.id.btnTime:
                intent = new Intent("ru.w0rm.intent.action.showtime");
                startActivity(intent);
                break;
            case R.id.btnDate:
                intent = new Intent("ru.w0rm.action.showdate");
                startActivity(intent);
                break;
            case R.id.btnName:
                intent = new Intent("ru.w0rm.intent.action.GetData");
                startActivityForResult(intent, 1);
                break;
            case R.id.btnSubmit:
                intent = new Intent("ru.w0rm.intent.action.PutData");
                intent.putExtra("fname", etFName.getText().toString());
                intent.putExtra("lname", etLName.getText().toString());
                startActivityForResult(intent, 1);
                break;
        }

    }
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (data == null) {return;}
        String name = data.getStringExtra("name");
        tvName.setText("Ваше имя:  " + name);
    }
}

Здесь мы определяем поля ввода и кнопку. Кнопке присваиваем обработчик – Activity (this). Рассмотрим реализацию метода onClick.  Мы создаем Intent с использованием  action.

Итак, Intent создан, смотрим код дальше. Используется метод putExtra. Он имеет множество вариаций и аналогичен методу put для Map, т.е. добавляет к объекту пару. Первый параметр – это ключ(имя), второй - значение.

Мы поместили в Intent два объекта с именами: fname и lnamefname содержит значение поля etFName, lname – значение поля etLName. Остается только отправить укомплектованный Intent с помощью метода startActivity.

Не забываем в манифесте прописать наш action:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="ru.w0rm.develop.intentfilter">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name="ActivityTime">
            <intent-filter>
                <action android:name="ru.w0rm.intent.action.showtime"></action>
                <category android:name="android.intent.category.DEFAULT"></category>
            </intent-filter>
        </activity>
        <activity android:name="ActivityDate" android:label="Date basic">
            <intent-filter>
                <action android:name="ru.w0rm.action.showdate"></action>
                <category android:name="android.intent.category.DEFAULT"></category>
            </intent-filter>
        </activity>

        <activity android:name="NameActivity" android:label="Get data">
            <intent-filter>
                <action android:name="ru.w0rm.intent.action.GetData"></action>
                <category android:name="android.intent.category.DEFAULT"></category>
            </intent-filter>
        </activity>

        <activity android:name="ViewActivity" android:label="Put data">
            <intent-filter>
                <action android:name="ru.w0rm.intent.action.PutData"></action>
                <category android:name="android.intent.category.DEFAULT"></category>
            </intent-filter>
        </activity>

    </application>

</manifest>

 

На этом реализация проекта на Java окончена. Запускаем приложение и проверяем:

 

2.Теперь реализуем передачу данных из 1С в приложение Java.

Открываем нашу конфигурацию 1С.

В общую форму НачальнаяФорма добавляем команду ПередатьДанные и два реквизита формы: Имя и Фамилия

Добавляем обработчик команды:


&НаКлиенте
Процедура ПоказатьВремя(Команда)
	
	#Если МобильноеПриложениеКлиент Тогда 
		НовВз = Новый ЗапускПриложенияМобильногоУстройства();
    	НовВз.Действие="ru.w0rm.intent.action.showtime";
    	НовВз.Запустить(Истина);
	#КонецЕсли

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

&НаКлиенте
Процедура ПоказатьДату(Команда)
	
	#Если МобильноеПриложениеКлиент Тогда 
		НовВз = Новый ЗапускПриложенияМобильногоУстройства();
    	НовВз.Действие="ru.w0rm.action.showdate";
    	НовВз.Запустить(Истина);
	#КонецЕсли

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

&НаКлиенте
Процедура ПолучитьДанные(Команда)
	#Если МобильноеПриложениеКлиент Тогда 
		НовВз = Новый ЗапускПриложенияМобильногоУстройства();
    	НовВз.Действие="ru.w0rm.intent.action.GetData";
    	НовВз.Запустить(Истина);
	    Для Каждого Стр Из НовВз.ДополнительныеДанные Цикл
       	 Сообщить(Стр.Ключ+" - "+Стр.Значение);
   		КонецЦикла;  		
	#КонецЕсли

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

&НаКлиенте
Процедура ПередатьДанные(Команда)
	
	#Если МобильноеПриложениеКлиент Тогда 
		НовВз = Новый ЗапускПриложенияМобильногоУстройства();
    	НовВз.Действие="ru.w0rm.intent.action.PutData";
		
		НовВз.ДополнительныеДанные.Добавить("fname", Имя);
		НовВз.ДополнительныеДанные.Добавить("lname", Фамилия);
		
    	НовВз.Запустить(Истина);
		
	#КонецЕсли

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

Передача данных осуществляется через метод ДополнительныеДанные.Добавить("fname", Имя), гдк fname - это ключ параметра, а Имя - это его значение.

Запускаем мобильное приложение 1С и проверяем:

На этом у меня все.

Спасибо за внимание!

 

См. также

"Штрихкод-информер" - мобильный ТСД и прайс-чекер в смартфоне

Мобильная разработка Сканер штрих-кода Терминал сбора данных Управляемые формы Мобильная платформа 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Управленческий учет Платные (руб)

Сбор заказов, инвентаризация, проверка ценников, просмотр полной информации об остатках и ценах со смартфона Онлайн. Отправка данных со смартфона выполняется либо напрямую в открытую форму документа, отсканировав QR-код, либо в общую корзину учетной системы, не подходя к компьютеру. Кассир или оператор сможет просмотреть список присланных данных и загрузить в любую форму, поддерживающую работу с ТСД. Для работы с мобильным приложением требуется опубликовать HTTP-сервис из поставляемого расширения.

2880 руб.

03.12.2018    54423    135    102    

160

SALE! 25%

Что нам стоит бота построить? Нарисуем - будет жить! Графический конструктор телеграм-ботов/Telegram

Мобильная разработка Мессенджеры и боты Платформа 1С v8.3 Платные (руб)

Теперь создать telegram-бота - элементарно. Достаточно просто нарисовать блок-схему телеграм-бота, и он сразу заработает. Это возможно при использовании Графического конструктора телеграм-ботов. Это единственный конструктор ботов для telegram, чье качество и функционал подтверждены фирмой 1С, есть сертификат 1С:Совместимо. Расширение в интерактивном режиме, с помощью блок-схем, позволяет с минимальными трудозатратами создать телеграм-ботов в любой конфигурации, работающей на платформе «1С:Предприятие 8.3».

13200 9900 руб.

27.12.2021    33022    80    157    

173

"Мобильный ТСД" - инвентаризация и сбор штрихкодов для iOS и Android

Сканер штрих-кода Терминал сбора данных Мобильная разработка Монитор заказов Оптовая торговля Розничная торговля Ценообразование, анализ цен Платформа 1С v8.3 Мобильная платформа 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Розничная и сетевая торговля (FMCG) Оптовая торговля, дистрибуция, логистика Управленческий учет Платные (руб)

Простой мобильный терминал сбора данных для смартфонов на iOS и Android, не требующий сложных настроек и установки дополнительных программ. Обмен между Вашей 1С и мобильным приложением осуществляется через облачный сервис и расширение конфигурации. Работает с конфигурациями УТ 11, ERP, КА2, Розница 2, Розница 3, УНФ 1.6, УНФ 3.0. Полнофункциональный демо-доступ для своей конфигурации можно запросить в настройках мобильного приложения - все необходимое придет на почту автоматически.

2000 руб.

22.04.2019    91742    507    186    

293

JavaScript в Simple

Мобильная разработка Бесплатно (free)

В SimpleUI и SimpleWEB, наряду с обработчиками на python и онлайн (1С и т.д.) добавляется интерпретатор JavaScript. В андроид платформе он скорее играет на поле python, т.к. является оффлайновым решением для самостоятельной обработки и расширяет аудиторию разработчиков для разработки самостоятельных решений. Дополнение к основной статье https://infostart.ru/1c/tools/1153616/

12.02.2024    1598    informa1555    0    

25

Создание экранов в произвольной разметке (xml) в SimpleUI

Мобильная разработка Бесплатно (free)

Я сделал альтернативный способ рисования экранов и списков в виде стандартной xml-разметки (стандартных xml-файлов для Android). Теперь можно рисовать в Android Studio или Figma в визуальном редакторе, прицеплять в симпле и работать дальше как обычно.

27.11.2023    1474    informa1555    1    

19

Релиз 11.75 Simple UI. Октябрь 2023

Мобильная разработка Мобильная платформа Бесплатно (free)

В новом релизе сразу много всего: интегрирована собственная документно-ориентированная СУБД SimpleBase, развит функционал работы, доработана OCR и ActiveCV, работа с диалогами (более удобная) и много всего другого полезного. Дополнение к основной статье https://infostart.ru/1c/tools/1153616/

02.10.2023    2404    informa1555    12    

24

Как начать зарабатывать на разработке мобильных приложений уже завтра!

Мобильная разработка Мобильная платформа Бесплатно (free)

В статье предлагаются готовые наработки, с помощью которых можно быстро набросать заказчику прототип мобильного приложения на 1С с удобным меню, основными функциями авторизации, push-уведомлений и чатом. А также рассмотрим пример решения вопроса использования зарубежных инструментов в условиях санкций и что помогает поставить разработку мобильных приложений «на поток».

17.08.2023    2235    natashik.angel    2    

32
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. asmuk 24.04.17 08:51 Сейчас в теме
Спасибо
Прикрепленные файлы:
It-developer; MORT32Ram; rhtr; Interrupted; dj_serega; Hamsik; smirnov.es; rpgshnik; +8 Ответить
2. smirnov.es 21 24.04.17 09:26 Сейчас в теме
Хорошая попытка, мобильная платформа 1С, но нет (пока нет)
kild; rpgshnik; +2 Ответить
3. SerhiySee 24.04.17 12:01 Сейчас в теме
Довольно интересно....
4. пользователь 24.04.17 12:05
Сообщение было скрыто модератором.
...
5. so-quest 140 26.04.17 13:14 Сейчас в теме
Огромное спасибо. Вовремя опубликовали.
6. kolp821 06.07.17 17:18 Сейчас в теме
Автор, может поскажешь как обработать нажатие апаратной клавиши?
Например хочу отправить данные в 1С по нажатию апаратной клавиши, вместо програмной. Спасибо.
7. user621724_Dimav1979 401 13.07.17 05:43 Сейчас в теме
(6)@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {

if (keyCode == 139) {


}

return super.onKeyDown(keyCode, event);
}

@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
if (keyCode == 139) {

}

return super.onKeyUp(keyCode, event);
}
starik-2005; user1021675; +2 Ответить
8. AganinEvgeniy 2 17.11.17 17:27 Сейчас в теме
Спасибо огромное автору, за труд! Отличная работа!
Yan_Malyakov; user621724_Dimav1979; +2 Ответить
9. FEAS88 8 20.12.17 21:31 Сейчас в теме
Спасибо! Кстати как сделать push-сообщение из 1С когда она закрыта? Хочу сделать напоминание.
user621724_Dimav1979; +1 Ответить
10. bubus 11.01.18 12:26 Сейчас в теме
Спасибо за статью. А не могли бы вы объяснить или дописать в статье, как теперь все это дело оформить во внешнюю компоненту, что бы она шла и мобильным приложением 1С и юзалась из его макета. Ну что бы apk не устанавливать отдельно. Это возможно?
user621724_Dimav1979; +1 Ответить
11. user621724_Dimav1979 401 11.01.18 18:07 Сейчас в теме
(10) Такой возможности я не видел.
Единственное, что приходит на ум, из макета сохранить apk из макета, например в память телефона и запустить приложение для установки. Но данным вопросом я не занимался.
12. neikist 29.06.18 10:10 Сейчас в теме
Приветствую, не пробовали из 1с передавать массив строк? В синтакс помошнике вроде и написано что массив строк автоматически платформой преобразуется в String[], по факту в нативном приложении через intent.getStringArrayExtra(...) получить не удается. А если указывать явно в 1с имя типа String[] - падает в исключение.
З.Ы. сам разобрался, нормально платформа все передает, это я исключение бросал если хоть одного параметра не было, а сам считывал передаваемый double как int.
user621724_Dimav1979; +1 Ответить
13. пользователь 29.06.18 10:40
Сообщение было скрыто модератором.
...
14. oleksij.kravchuk 01.11.18 13:15 Сейчас в теме
Здравствуйте, спасибо за статью
Подскажите пожалуйста, есть ли возможность запустить мобильное приложение 1с с передачей параметров из Java приложения ?
15. vers139 53 15.05.19 15:36 Сейчас в теме
16. Xenomorph 20.05.19 07:27 Сейчас в теме
а как передать справочник или номенклатуру?
17. MORT32Ram 16 22.05.19 07:42 Сейчас в теме
Аплодирую автору стоя, благодаря циклу статей получилось срастить мобильное приложение 1С и chainway-c6000 (сертифицированные драйвера от rightscan на отказ не хотели работать), благодаря этим статьям добавил поддержку передачи штрихкода через Intent в скачанные исходники идущие с ТСД. Автор мегакрут дай бог тебе здоровья, денег и жену красавицу.
user621724_Dimav1979; +1 Ответить
19. user621724_Dimav1979 401 22.05.19 09:24 Сейчас в теме
(17) Аналогичная задача была с китайским ТСД и SDK на китайском языке :)
20. Xenomorph 22.05.19 14:29 Сейчас в теме
(19) помогите пожалуйста!
21. user621724_Dimav1979 401 22.05.19 15:13 Сейчас в теме
(20)передать с мобильной платформы 1с в java?
22. Xenomorph 22.05.19 15:57 Сейчас в теме
(21) если это возможно то да. Или с самой 1с на компьютере. Как легче хотелось бы.
25. Xenomorph 06.06.19 08:41 Сейчас в теме
18. Xenomorph 22.05.19 08:36 Сейчас в теме
(0) как передать справочник или номенклатуру из 1С в приложение Java?
23. user621724_Dimav1979 401 22.05.19 16:21 Сейчас в теме
Передавайте через Web сервисы
24. Xenomorph 24.05.19 07:14 Сейчас в теме
Оставьте свое сообщение