1С и Java: GetData - возврат имени из Activity в форму мобильного клиента

07.10.26

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

Вторая часть цикла про Intent: action ru.w0rm.intent.action.GetData, NameActivity, startActivityForResult, extra name и асинхронный ЗапускПриложенияМобильногоУстройства в 1С 8.3. Таблица action и чеклист типичных сбоев.

Мобильная платформа 1С:Предприятие 8.3 позволяет вызывать сторонние Андроид-приложения через объект ЗапускПриложенияМобильногоУстройства. В первой части цикла мы разбирали односторонний запуск: action showtime и showdate без возврата данных. Во второй части замыкаем контур - пользователь вводит текст во внешнем Activity на Java, а строка попадает обратно в реквизит формы 1С. Ключевые механизмы Android: явный Intent по action, startActivityForResult, setResult с extra и обработчик onActivityResult. На стороне 1С - асинхронный НачатьЗапускПриложенияМобильногоУстройства и процедура оповещения, которая читает extra с ключом name.

 

1. Зачем возвращать данные из Java в 1С

Дерево Андроид-проекта: layout, Activity и манифест GetData

Сомранион-приложение на Java часто удобнее для доступа к камере, сканеру штрихкодов, NFC или сложной нативной логике. Если результат нужен в конфигурации 1С, рисовать второй экран внутри мобильного клиента необязательно: достаточно одного Activity с полем ввода и согласованного контракта extra. Демо action ru.w0rm.intent.action.GetData - учебный, но шаблон переносится на любые строковые или сериализованные данные.

Границы материала: Android с установленным APK, мобильный клиент 1С с директивой #Если МобильноеПриложениеКлиент. НТТР-сервисы, публикация в магазинах и корпоративный MDM здесь не рассматриваются.

 

2. NameActivity: layout и setResult

Intent с результатом: запуск GetData и extra name в ответе

Создаём Activity с разметкой name.xml: EditText для имени и кнопка OK. По нажатию OK формируем Интент-ответ, кладём строку в extra name, вызываем setResult(RESULT_OK, intent) и finish(). Без второго аргумента setResult вызывающая сторона получит data == null даже при RESULT_OK.

public class NameActivity extends AppCompatActivity {
 private EditText etName;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.name);
 etName = findViewById(R.id.etName);
 findViewById(R.id.btnOk).setOnClickListener(v -> onOk());
 }

 private void onOk() {
 String name = etName.getText().toString().trim();
 Intent result = new Intent();
 result.putExtra("name", name);
 setResult(RESULT_OK, result);
 finish();
 }
}

Кнопка «Назад» без OK закрывает Activity без setResult - для вызывающего кода это отмена (RESULT_CANCELED). В 1С это соответствует флагу отмены в результате оповещения.

 

3. MainActivity: startActivityForResult и onActivityResult

На главном экране кнопка «Ввести имя» создаёт Intent с action ru.w0rm.intent.action.GetData и вызывает startActivityForResult(intent, 1). Константа 1 - requestCode; если позже добавите второй экран с результатом, заведите отдельные коды и ветку switch (requestCode).

case R.id.btnName:
 intent = new Intent("ru.w0rm.intent.action.GetData");
 startActivityForResult(intent, 1);
 break;

Обработчик результата:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
 super.onActivityResult(requestCode, resultCode, data);
 if (requestCode!= 1) {
 return;
 }
 if (resultCode!= RESULT_OK || data == null) {
 Log.d("MainActivity", "GetData canceled or empty data");
 return;
 }
 String name = data.getStringExtra("name");
 if (name == null) {
 name = "";
 }
 tvName.setText("Ваше имя: " + name);
}

Три параметра, которые путают новичков: requestCode связывает ответ с конкретным вызовом; resultCode говорит, подтвердил ли пользователь действие; data несёт extra. Без проверки resultCode и data == null легко поймать NPE после Back.

 

4. Манифест и локальная проверка Jава-приложения

NameActivity регистрируем с intent-filter, иначе система не найдёт обработчик action GetData.

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

 

Где прописан один и тот же action

Опечатка в action - самая частая причина «Activity not found». Сверьте строки буква в букву.

Место Строка action / назначение
AndroidManifest.xml, intent-filter NameActivity ru.w0rm.intent.action.GetData
MainActivity, Intent для btnName ru.w0rm.intent.action.GetData
1С, свойство «Действие» при запуске ru.w0rm.intent.action.GetData
MainActivity, showtime (часть 1, без результата) ru.w0rm.intent.action.showtime
MainActivity, showdate (часть 1) ru.w0rm.action.showdate (обратите внимание на отличие от showtime)

GetData не смешиваем с showtime/showdate: другой intent-filter, другой сценарий (ввод и result extra).

 

Проверка только Java

Соберите debug APK, установите на эмулятор или устройство. «Ввести имя», затем ввод текста и OK. На главном экране в tvName должна появиться строка «Ваше имя: …». Back без OK не меняет подпись (или остаётся прежний текст, если вы не обнуляете поле). В logcat фильтр по тегам NameActivity и MainActivity покажет цепочку setResult / onActivityResult.

 

5. 1С: команда ПолучитьДанные и асинхронный запуск Java

На стороне 1С:Предприятие 8.3 (мобильная платформа) используем объект ЗапускПриложенияМобильногоУстройства и метод НачатьЗапускПриложенияМобильногоУстройства. Вызов асинхронный: форма не блокируется, результат приходит в процедуру оповещения после закрытия внешнего Activity.

 

Команда на НачальнаяФорма

Добавьте на общую форму «НачальнаяФорма» реквизит для отображения, например ИмяПользователя (строка), и команду формы «ПолучитьДанные». Клиентский код помещайте в модуль формы под директивой #Если МобильноеПриложениеКлиент, процедуры - с &НаКлиенте.

#Если МобильноеПриложениеКлиент Тогда

&НаКлиенте
Процедура ПолучитьДанные(Команда)

 Оповещение = Новый ОписаниеОповещения("ПослеЗапускаGetData", ЭтотОбъект);
 Запуск = Новый ЗапускПриложенияМобильногоУстройства;
 Запуск.Действие = "ru.w0rm.intent.action.GetData";
 // При необходимости укажите Данные (URI) или ТипДанных, если фильтр Java их требует;
 // для демо из части 2 достаточно Действия и category DEFAULT в манифесте.

 ЗапускПриложенияМобильногоУстройства.НачатьЗапускПриложенияМобильногоУстройства(
 Оповещение, Запуск);

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

#КонецЕсли

Поля объекта запуска на практике проверяют так: «Действие» - строка action intent-filter; «Данные» (URI) и «ТипДанных» (MIME) нужны, если манифест Java объявляет data в filter. В нашем GetData filter содержит только action и DEFAULT, поэтому URI не обязателен.

 

Разбор результата оповещения

В процедуре оповещения читаем параметры завершения и extra с ключом name (аналог getStringExtra("name") в Java). Имена свойств результата в вашей версии мобильной платформы сверьте в синтакс-помощнике конфигуратора; смысл тот же: код результата, признак отмены, набор переданных пар ключ-значение.

#Если МобильноеПриложениеКлиент Тогда

&НаКлиенте
Процедура ПослеЗапускаGetData(РезультатЗапуска, ДополнительныеПараметры) Экспорт

 // На этапе отладки временно выведите РезультатЗапуска в сообщение - 
 // так видно, пришли ли extra и не отменил ли пользователь ввод.

 Если РезультатЗапуска = Неопределено Тогда
 Возврат;
 КонецЕсли;

 Если РезультатЗапуска.Отмена Тогда
 // Пользователь закрыл Activity без OK: не падаем, старое значение на форме сохраняем.
 Возврат;
 КонецЕсли;

 ИмяИзJava = "";
 Если РезультатЗапуска.Данные <> Неопределено Тогда
 Если ТипЗнч(РезультатЗапуска.Данные) = Тип("Соответствие") Тогда
 ЗначениеExtra = РезультатЗапуска.Данные.Получить("name");
 Если ЗначениеExtra <> Неопределено Тогда
 ИмяИзJava = Строка(ЗначениеExtra);
 КонецЕсли;
 КонецЕсли;
 КонецЕсли;

 Если ПустаяСтрока(ИмяИзJava) Тогда
 Возврат;
 КонецЕсли;

 ИмяПользователя = ИмяИзJava;

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

#КонецЕсли

Обёртка #Если МобильноеПриложениеКлиент не даёт скомпилировать вызов API на десктопной сборке конфигурации. На этапе отладки сообщение с содержимым РезультатЗапуска я оставляю на один-два прогона, пока не убедюсь, что ключ name приходит стабильно.

 

6. Сквозной сценарий 1С - Java - 1С и типичные сбои

Сквозной цикл: 1С открывает Java, имя возвращается на форму

Финальная проверка - полный цикл на одном устройстве: мобильный клиент 1С с вашей конфигурацией, установленный APK с NameActivity. На «НачальнаяФорма» команда «ПолучитьДанные» открывает Jава-экран ввода; после OK строка появляется в реквизите формы 1С. Если Java уже проверена локально (раздел 4), а 1С падает или молчит, проблема почти всегда в action, в отсутствии APK или в разборе оповещения.

 

Цепочка, которую я прогоняю руками

  1. Установлен APK, в настройках нет блокировки установки из неизвестных источников для вашего канала сборки.
  2. Из Java MainActivity GetData возвращает имя в tvName.
  3. Из 1С та же action открывает NameActivity.
  4. Back без OK: форма 1С не меняется, без исключения на клиенте.
  5. OK с непустым именем: реквизит формы обновлён.

 

Ошибки после шагов (проверяемый список)

  • Activity not found - нет intent-filter GetData, опечатка action, APK не установлен или установлен другой applicationId.
  • Java tvName пустой, logcat без setResult - не тот requestCode в onActivityResult, или NameActivity не вызывает setResult перед finish().
  • data == null при OK в Java - забыли передать Intent во второй аргумент setResult.
  • 1С открывает не то приложение - на устройстве несколько обработчиков с похожим action; для прода иногда задают явный package в запуске, в демо достаточно уникального action.
  • Extra не читается в 1С - ключ не name, или результат ещё не разобран в оповещении (ожидаем асинхронное завершение, не код сразу после Начать…).
  • На эмуляторе работает, на телефоне нет - на телефоне старая версия APK без NameActivity; переустановите сборку.

 

Отладка без догадок

Android: logcat при setResult и в onActivityResult с requestCode и resultCode. 1С: на время разработки выведите в сообщение пользователю сериализацию РезультатЗапуска (отмена, код, ключи extra). После стабилизации сценария сообщение уберите, чтобы не шуметь в поле.

 

7. Activity Result API и миграция с startActivityForResult

Google помечает классический startActivityForResult как устаревающий в пользу Activity Result API (registerForActivityResult с контрактом StartActivityForResult). Для учебного проекта и старых шаблонов Java-Activity классический путь всё ещё понятен новичкам и совпадает с большинством примеров в сети. При переносе на Result API смысл контракта тот же: requestCode заменяется отдельным launcher на каждый сценарий, а разбор extra остаётся в callback.

На стороне 1С миграция Jава-кода не меняет протокол: action GetData и ключ name в extra по-прежнему единственный контракт между конфигурацией и APK. Обновите только внутреннюю реализацию MainActivity, если хотите соответствовать рекомендациям AndroidX.

 

8. Расширение контракта: несколько полей и типы данных

Строка в extra name - минимальный пример. Для передачи нескольких значений используйте отдельные ключи (phone, comment) или один ключ с JСОН-строкой, если объём данных велик. Помните лимиты Intent: очень большие payload лучше писать во временный файл и передавать URI с правами FLAG_GRANT_READ_URI_PERMISSION. Для полевых мобильных конфигураций 1С обычно хватает коротких строк: штрихкод, номер документа, ФИО с экрана Jава-сканера.

Согласуйте имена ключей в Java (putExtra) и в процедуре оповещения 1С (Соответствие.Получить). Документируйте контракт в комментарии к команде формы или в README команды разработки, чтобы через полгода не искать ключи по logcat.

 

9. Безопасность и приватность

Intent с action виден другим приложениям на устройстве, если filter экспортирован неявно. Для внутренних корпоративных APK часто достаточно уникального action и отсутствия лишних intent-filter. Не передавайте через demo-extra пароли и персональные данные без шифрования; для прода рассмотрите явный package при запуске из 1С и подпись APK тем же каналом, что использует ИТ-отдел.

На форме 1С отображайте только те данные, которые пользователь осознанно подтвердил на Jава-экране. Логирование полного РезультатЗапуска в продуктиве отключайте, если extra могут содержать чувствительные поля.

Когда цикл замкнулся, у вас один action GetData в манифесте Java, в MainActivity и в свойстве «Действие» запуска из 1С, плюс согласованный ключ extra name. Дальше по тому же шаблону можно передавать другие строки или набор полей, не рисуя второй экран в конфигурации 1С. Граница демо: только Android с установленным сомранион-приложением; публикация в Google Play, MDM и БСП сюда не входят.

Если после сверки таблицы action и logcat результат всё ещё не доходит до формы, начните с переустановки APK и одного жёстко заданного имени в NameActivity вместо ввода с клавиатуры - так отделите ошибку передачи extra от раскладки или фокуса на EditText.

Материал рассчитан на разработчиков мобильных конфигураций 1С, которые уже прошли односторонний Intent из части 1 и готовы добавить обратный канал данных без выхода в веб-сервисы. Держите таблицу action под рукой при каждой сборке APK и при выкладке обновления конфигурации на тестовый стенд - расхождение одной буквы в строке action стоит часов поиска на устройстве.

Вступайте в нашу телеграмм-группу Инфостарт

1С Android Java Intent мобильное приложение GetData startActivityForResult мобильное приложение 1С ЗапускПриложенияМобильногоУстройства NameActivity extra name

Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

См. также

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

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

3050 руб.

03.12.2018    72927    250    108    

191

Сканер штрих-кода Терминал сбора данных Мобильная разработка Монитор заказов Оптовая торговля Розничная торговля Ценообразование, анализ цен Разработчик Пользователь 1С:Предприятие 8 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. Полнофункциональный демо-доступ для своей конфигурации можно запросить в настройках мобильного приложения - все необходимое придет на почту автоматически. Решение предназначено для считывания штрихкодов, а не для их создания и печати.

3050 руб.

22.04.2019    124923    739    207    

391

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

Android-клиент: конструктор и выполнение запросов 1С по HTTP к опубликованной базе. Часть экосистемы КонфигРедактор.

06.10.2026    1897    54    aleksandrboldyusov    0    

30

Мобильная разработка Разработчик 1С 8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Абонемент ($m)

Эта подключаемая обработка для любой конфигурации 1С, позволяет отправить любой объект (и рекуррентно связанные с ним объекты) на устройства c NodaLogic, где они будут полнофункциональны и доступны офлайн, по ним можно вести переписку как со стороны чата в NodaLogic, так и со стороны 1С, заполнять данные и загрузить в 1С по мере надобности. Т.е. обработка содержит генератор UI/UX интерфейса NodaLogic и создает объекты для обмена. При этом не надо ни разбираться в NodaLogic вообще, ни иметь базу/сервер/решение на стороне NL – только учетка и мобильное устройство, а со стороны 1С достаточно галочками отметить, какие поля должны быть на формах. Все данные хранятся в ХранилищеОбщихНастроек, поэтому никакого расширения не нужно, сервера со стороны 1С для связи с устройствами тоже не нужно. Тестировалось на 1С:Предприятие 8.3 (8.3.27.1326), 1С:Комплексная автоматизация 2 (2.4.8.63)

1 стартмани

12.05.2026    1559    6    informa1555    1    

14

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

Мне нужен был высокопроизводительный язык для фронт-сайда, я его сделал, а потом подумал, а что, если сделать 1С-синтаксис? Вот что из этого вышло. Продолжение статьи https://infostart.ru/1c/articles/2614496/

12.03.2026    2843    informa1555    11    

14

Мобильная разработка Разработчик 1С 8.3 1С:Комплексная автоматизация 2.х 1С:КА Управленческий учет Абонемент ($m)

В этой статье простейший документ - ориентированный пример складского учета на клиент-серверной платформе NodaLogic с автономными мобильными рабочими местами. Это чисто скелетный пример как можно вынести часть учета во внешний контур. И расширение - модуль связи с 1С. Тестировалось на платформе 1С:Предприятие 8.3 (8.3.27.1326), 1С:Комплексная автоматизация 2 (2.4.8.63).

1 стартмани

13.02.2026    4135    informa1555    5    

27

WEB-интеграция Мобильная разработка Разработчик 1С:Предприятие 8 1С:Библиотека стандартных подсистем Россия Бесплатно (free)

Бесплатное приложение для интеграции веб-клиента 1С с Android-устройством. Просто установите, укажите веб-адрес вашей базы 1С - и пользуйтесь привычным интерфейсом с расширенным доступом к функциям устройства: лазерный и имидж-сканер ТСД, сканер штрихкода камерой, GPS, Bluetooth, фотокамера, NFC и многое другое.

05.08.2025    4693    221    OneScan    25    

12
Для отправки сообщения требуется регистрация/авторизация