Мобильное приложение 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С v8.3 1С:Конвертация данных Платные (руб)

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

13200 руб.

27.12.2021    38233    108    161    

201

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

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

3000 руб.

03.12.2018    59323    192    103    

172

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

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

2000 руб.

22.04.2019    97286    587    189    

321

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

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

3450 руб.

28.04.2023    9487    15    0    

9

Мобильная разработка Платформа 1С v8.3 Конфигурации 1cv8 Финансовые услуги, инвестиции Управленческий учет Платные (руб)

Мобильное приложение и конфигурация 1С для автоматической торговли на бирже через API Тинькофф банка. Достаточно задать настройки, нажать «Пуск», и робот сам торгует ежедневно.

7000 руб.

25.05.2022    4660    1    0    

6

Мобильная разработка WEB-интеграция Программист Мобильная платформа Абонемент ($m)

Экспериментальный релиз и простенький скрипт к нему закрывает потребности в любых видах синхронизации между устройствами Simple и между Simple и бек-системами (например 1С). По сути – это очень простой python-скрипт, который можно запустить на доступной машине, сервере или VPS и он будет связывать клиентские устройства между собой и с 1С или другими бек-системами. В самой платформе появилось для этого множество доработок для поддержки стабильного постоянного соединения, докачки больших файлов и работе в фоне. Дополнение к основной статье https://infostart.ru/1c/tools/1153616/

1 стартмани

23.08.2024    1223    6    informa1555    1    

13

Мобильная разработка Мобильная платформа Абонемент ($m)

В этом релизе собрано много нового из области интерфейса, связи, хранения и важные новые способы управления. Дополнение к основной статье https://infostart.ru/1c/tools/1153616/

1 стартмани

25.06.2024    2621    29    informa1555    0    

33
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
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 410 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 410 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 410 22.05.19 09:24 Сейчас в теме
(17) Аналогичная задача была с китайским ТСД и SDK на китайском языке :)
20. Xenomorph 22.05.19 14:29 Сейчас в теме
(19) помогите пожалуйста!
21. user621724_Dimav1979 410 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 410 22.05.19 16:21 Сейчас в теме
Передавайте через Web сервисы
24. Xenomorph 24.05.19 07:14 Сейчас в теме
Оставьте свое сообщение