Нано HTTP сервер - внешняя компонента для мобильного приложения 1C, на Android
Разработка - Разработка внешних компонент
Файлы
ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.
Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний
Оформите подписку на компанию для решения рабочих задач
Оформить подписку и скачать решение со скидкойВы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.
Так как у мобильного приложения 1С нет HTTP сервисов решил написать свой.
На чем я работал:
1. Android Studio 3.6.2
2. Мобильное приложение 1С 8.3.16.142
3. 1С:Предприятие 8.3 (8.3.17.1386)
Начнем с описания функционала:
// Описание: Функция запускает сервер.
// Параметры:
//Не обязательные.
// Порт - число. Порт который слушает сервер. 8080 по умолчанию.
// Имя, Пароль - строки.
// Если не заполнены значит нет аутентификации
//Возвращает указатель на Сервер - пустая строка ошибка создания.
СтрокаУказатель = Компонента.CreateHttpServer(Порт, Имя, Пароль)
// Описание: функция отвечает на запрос
// Параметры:
// обязательные.
// Сокет- строка. Указатель на клиентский сокет - получается из запрос HTTP
// Не обязательные.
// КодОтвет - СТРОКА. если не заполнено тогда "200"
// Данные - СТРОКА. если не заполнено тогда ""
// Возвращает количество отправленных байт если <= 0 то ошибка.
ОтправленоБайт = Компонента.SendAnswer(Сокет, КодОтвет, Данные)
// Описание: Количество подключенных к серверу клиентов
Число = Компонента.ClientCount;
// Описание: Данные интерфейса IP (только когда запущен сервер)
JSONСтрока = Компонента.IPConfig;
// Описание: Отладка можно посмотреть версию
JSONСтрока = Компонента.InfoString;
1. Подключение стандартное ниже на скрине.
Важно:
Во время настройки Web-публикации следует провести следующее действие. В настройках http-сервера необходимо добавить типы MIME для следующих расширений:
- .so
- .apk
Тип MIME: application/octet-stream

2. Проверим.

2. Написал обработку с двумя кнопками. Запустил на УТ.
код обработки:
Процедура КнопкаВыполнитьPOST(Кнопка)
Попытка
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка,
| Номенклатура.Наименование,
| Штрихкоды.ПредставлениеШтрихкода
|ИЗ
| РегистрСведений.Штрихкоды КАК Штрихкоды
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура
| ПО Штрихкоды.Владелец = Номенклатура.Ссылка
| И НЕ Номенклатура.ЭтоГруппа";
Выборка = Запрос.Выполнить().Выбрать();
// Создаем строку с данные JSON выборка примерно 45000 элементов
JSONДанныеПередачи = СоздатьСтрокуJSON(Выборка);
Если HTTPСоединение = Неопределено Тогда
HTTPСоединение = Новый HTTPСоединение("192.168.0.98", 8080, "Админ", "123");
КонецЕсли;
HTTPЗапрос = Новый HTTPЗапрос("/HTTPTest/Post?Номенклатура=" + КодироватьСтроку(НоменклатураСсылка,СпособКодированияСтроки.КодировкаURL) + "&Индекс=" + Индекс);
//добовляем заголовки к запрос
//к сожеления не поборол руские буквы в заголовках поэтому нужно использовать функцияю КодироватьСтроку
HTTPЗапрос.Заголовки.Вставить(КодироватьСтроку("КомандаЗаголовок",СпособКодированияСтроки.КодировкаURL)
,КодироватьСтроку("Выгружаем номенклатуру",СпособКодированияСтроки.КодировкаURL));
HTTPЗапрос.Заголовки.Вставить(КодироватьСтроку("ДатаЗапроса",СпособКодированияСтроки.КодировкаURL),ТекущаяДата());
HTTPЗапрос.Заголовки.Вставить(КодироватьСтроку("Количество",СпособКодированияСтроки.КодировкаURL),Выборка.Количество());
HTTPЗапрос.УстановитьТелоИзСтроки(JSONДанныеПередачи);
HTTPОтвет = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);
Сообщить(Строка(HTTPОтвет.КодСостояния) + Символы.ПС + HTTPОтвет.ПолучитьТелоКакСтроку());
Индекс = Индекс + 1;
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
КонецПроцедуры
Процедура КнопкаВыполнитьGET(Кнопка)
Попытка
//подключение к нашему серверу
Если HTTPСоединение = Неопределено Тогда
HTTPСоединение = Новый HTTPСоединение("192.168.0.98", 8080, "Админ", "123");
КонецЕсли;
HTTPЗапрос = Новый HTTPЗапрос("/HTTPTest/Get?Номенклатура=" + НоменклатураСсылка + "&Индекс=" + Индекс);
//добовляем заголовки к запрос
//к сожеления не поборол руские буквы в заголовках поэтому нужно использовать функцияю КодироватьСтроку
HTTPЗапрос.Заголовки.Вставить(КодироватьСтроку ("КомандаЗаголовок",СпособКодированияСтроки.КодировкаURL) ,КодироватьСтроку("Родитель",СпособКодированияСтроки.КодировкаURL));
HTTPЗапрос.Заголовки.Вставить(КодироватьСтроку ("ДатаЗапроса",СпособКодированияСтроки.КодировкаURL),ТекущаяДата());
//Выполнили метод
HTTPОтвет = HTTPСоединение.Получить(HTTPЗапрос);
//Обработка ответа
Сообщить(Строка(HTTPОтвет.КодСостояния) + Символы.ПС + HTTPОтвет.ПолучитьТелоКакСтроку());
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
КонецПроцедуры
3. Написал обработку события на сервере в мобильное приложение 1С.
код обработки:
Процедура ОбработкаВнешнегоСобытия(Источник, Заголовоки, Контент)
Если Источник = "MALhttpserver" Тогда
//Обычное преобразование JSON в сооответсвие заголовков
ДанныеЗапроса = JSONМодуль.СоздатьСтруктуруИзAndroid(Заголовоки, Истина);
//Так как событие асинхронное то и пришлось добавить ид сокета для ответа.
КлиентСокет = ДанныеЗапроса.Получить("ClientSocket");
//Сам запрос
Запрос = ДанныеЗапроса.Получить("Inquiry");
Если Запрос = "HTTPTest/Get" Тогда
//Просто отвечаем
глHTTPServer.SendAnswer(КлиентСокет,"200","Привет я тебя понял)");
ИначеЕсли Запрос = "HTTPTest/Post" Тогда
//Разбераем данные клиента
СтруктураКонтент = JSONМодуль.СоздатьСтруктуруИзAndroid(Контент, Ложь);
//создаем строкуJSON из входного масива
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку(Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Нет));
ЗаписатьJSON(ЗаписьJSON, СтруктураКонтент.Номенклатура);
ОтветСтрокаJSON = ЗаписьJSON.Закрыть();
//Отвечаем массивом обратно, а 201 просто так захотелось.
глHTTPServer.SendAnswer(КлиентСокет,"201",ОтветСтрокаJSON);
Иначе
глHTTPServer.SendAnswer(КлиентСокет,"404","Нет токой страници!");
КонецЕсли;
КонецЕсли;
3. Посмотрим точки останова.
В обработке запущенной на УТ нажимаем кнопку "отправить GET запрос" . На сервере(мобильное приложение 1С) возникает внешнее событие:

Сервер отвечает и вот его ответ:

Теперь в обработке запущенной на УТ нажимаем кнопку "отправить POST запрос" . На сервере(мобильное приложение 1С) возникает внешнее событие:

Сервер отвечает и вот его ответ:

4. Ну пожалуй все.
В Архиве исходники на компоненту ,сf , и тестовая обработка . В папке package уже готовый zip для компаненты. Все исходники для android написаны под Android Studio 3.6.2. Все, что нужно, само подгрузится.
Вступайте в нашу телеграмм-группу Инфостарт
См. также
3050 руб.
22.04.2019 125082 739 207
18300 руб.
30.05.2017 57943 12 71
2196 руб.
18.01.2017 152770 235 237
5084 руб.
12.05.2020 34992 147 100
19000 руб.
24.06.2025 4155 26 0