Мобильный клиент + HTTP Сервис + Расширение конфигурации

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

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

OData Мобильный клиент мобильная платформа сервисы расширения конфигурации IIS http web apache сервис Публикатор Линк API PAPI Pretty API

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

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

Задача: На основе разработки //infostart.ru/public/811834/ создать маленькую конфигурацию с таким же функционалом, которая будет подключаться  к другим конфигурациям посредством http сервиса, который будет встраиваться посредством расширения конфигураций. В http сервисах будет описано два метода. Первый должен собирать метаданные и передавать в управляющую конфигурацию, второй должен передавать массив выбранных элементов и делать их доступными по стандартному интерфейсу OData.

Для решения использовано следующее программное обеспечение:

Платформы 8.3.10.2650 и 8.3.12.1412, Мобильная платформа 8.3.12.46, телефон на android 7.0, IIS 6 и 7, (Android Studio 3.1.1 это было необязательно, но хотелось попробовать вариант с установкой мобильной платформы на телефон через USB из конфигуратора)

1 Создаем расширение в любой конфигурации от 8.3.10, так как необходима возможность создания http сервиса и модуля. (Хотя такой функционал был и в 8.3.9, но так как конфигурации были под 8.3.8, а потом сразу 8.3.10 я считаю 8.3.9 "мертвым релизом", таким же как и 8.3.11...)

-Создаем http сервис MC_HTTPMob с UrlШаблоном ->    /V1/{ВхДанные}

-Создаем http сервис с методом get (PingMe) код обработчика:

Функция MobClientHTTPPingMe(Запрос)
	перВхИмя  = Запрос.ПараметрыURL["ВхДанные"];
	Ответочка = ?(перВхИмя = "ПроверкаПодключения","Все ОК!","Все ОК! Вы написали "+перВхИмя);
	
	Ответ = Новый HTTPСервисОтвет(200);
	Ответ.УстановитьТелоИзСтроки(Ответочка,КодировкаТекста.UTF8);	
	Ответ.Заголовки.Вставить("Content-Type","text/html; charset=utf-8");
	Возврат Ответ;
КонецФункции

 -Создаем http сервис с методом post (POST_Servis) код обработчика:

Функция MobClientHTTPPOST_Servis(Запрос)
	перИмяМетода  = Запрос.ПараметрыURL["ВхДанные"];
	ЗапросОтКлиентаJSON = Запрос.ПолучитьТелоКакСтроку();	
	СтруктураОтвет = MC_МодульHTTPMob.ОбработкаВходящихДанныхHTTP_Сервиса(ЗапросОтКлиентаJSON,перИмяМетода);
	Ответ = Новый HTTPСервисОтвет(СтруктураОтвет.КодОтвета);
	Если СтруктураОтвет.Отработало Тогда 
	    Ответ.УстановитьТелоИзСтроки(СтруктураОтвет.ДанныеОтвета,КодировкаТекста.UTF8);
	Иначе
		Ответ.УстановитьТелоИзСтроки(СтруктураОтвет.ТекстОшибки,КодировкаТекста.UTF8);
	КонецЕсли;	
	Ответ.Заголовки.Вставить("Content-Type","text/html; charset=utf-8");
	Возврат Ответ;
КонецФункции

-Создаем модуль MC_МодульHTTPMob который содержит следующий код

Функция ОбработкаВходящихДанныхHTTP_Сервиса(ЗапросОтКлиентаJSON,перИмяМетода) Экспорт
	СтруктураОтвет = Новый Структура("ДанныеОтвета,Отработало,ТекстОшибки,КодОтвета","",Истина,"",200);
	Если ВРег(перИмяМетода) = ВРег("GiveAllMetadate") Тогда 		
		ОтдайМетаданныеOData(СтруктураОтвет,ЗапросОтКлиентаJSON);
	ИначеЕсли ВРег(перИмяМетода) = ВРег("GoodMetadate") Тогда	
		
		ОткройМетаданныеODate(СтруктураОтвет,ЗапросОтКлиентаJSON);
		
	Иначе	
		СтруктураОтвет.КодОтвета 	= 400;
		СтруктураОтвет.ТекстОшибки	= "Unknown method!!!";
		СтруктураОтвет.Отработало	= Ложь;
		СтруктураОтвет.ДанныеОтвета = "";	
	КонецЕсли;		
	Возврат СтруктураОтвет;	
КонецФункции
Процедура ОтдайМетаданныеOData(СтруктураОтвет,ЗапросОтКлиентаJSON)
	СписокОбъектовOdata = ПолучитьСписокОбъектовOData();	
	УстановитьПривилегированныйРежим(Истина);
	СоставСтандартногоИнтерфейсаOData = ПолучитьСоставСтандартногоИнтерфейсаOData();
	
	РезультатОтвет = Новый Массив;
	Для Каждого СтрокаСпискаОбъектов Из СписокОбъектовOdata Цикл 
		Состояние 		= Истина;	
		ПрефиксИмениURL = ?(ПустаяСтрока(СтрокаСпискаОбъектов.Представление),"",СтрокаСпискаОбъектов.Представление);
		ИмяЗначение		= СтрокаСпискаОбъектов.Значение;
		МассивДанногоТипа = Новый Массив;
		Для Каждого ОбъектМетаданных Из Метаданные[ИмяЗначение] Цикл
			НайденOData = СоставСтандартногоИнтерфейсаOData.Найти(ОбъектМетаданных) <> Неопределено;
			МассивДанногоТипа.Добавить(Новый Структура("Имя,Синоним,ПрефиксИмениURL,Состояние",
				ОбъектМетаданных.Имя,
				ОбъектМетаданных.ПолноеИмя(),
				?(ПустаяСтрока(ПрефиксИмениURL),"",ПрефиксИмениURL+"_"+ОбъектМетаданных.Имя),			
				НайденOData));
				
			Если не НайденOData и Состояние Тогда 
				Состояние	= Ложь;
			КонецЕсли;
		КонецЦикла;	
		РезультатОтвет.Добавить(Новый Структура("ИмяЗначение,ПрефиксИмениURL,Состояние,МассивДанногоТипа",
			СтрокаСпискаОбъектов.Значение,
			ПрефиксИмениURL,
			Состояние,
			МассивДанногоТипа));	
	КонецЦикла;	
	УстановитьПривилегированныйРежим(Ложь);
	
	//Все нормально
	ПараметрыJSON	= Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Нет, " " , Истина, ЭкранированиеСимволовJSON.Нет, Ложь, Ложь, Ложь, Ложь);
	ЗаписьJSON		= Новый ЗаписьJSON;
	ЗаписьJSON.ПроверятьСтруктуру = Истина;
	ЗаписьJSON.УстановитьСтроку(ПараметрыJSON);

	ЗаписатьJSON(ЗаписьJSON, РезультатОтвет);
	СтрокаJSON = ЗаписьJSON.Закрыть();
	
	ЗаполнитьСтруктуруОтвета(СтруктураОтвет,200,"",Истина,СтрокаJSON);
КонецПроцедуры
Процедура ОткройМетаданныеODate(СтруктураОтвет,ЗапросОтКлиентаJSON)
	ЧтениеJSON = Новый ЧтениеJSON;
	ЧтениеJSON.УстановитьСтроку(ЗапросОтКлиентаJSON);	
					
	Попытка
		ДопДанные = ПрочитатьJSON(ЧтениеJSON);
	Исключение
		ЗаполнитьСтруктуруОтвета(СтруктураОтвет,406,"Не удалось получить данные!",Ложь,"X");
		Возврат;
	КонецПопытки;
	Если ТипЗнч(ДопДанные) = Тип("Массив") Тогда 
		УстановитьПривилегированныйРежим(Истина);
		Попытка
			УстановитьСоставСтандартногоИнтерфейсаOData(ДопДанные);	
		Исключение
			ЗаполнитьСтруктуруОтвета(СтруктураОтвет,406,ОписаниеОшибки(),Ложь,"X");
			Возврат;	
		КонецПопытки;	
	Иначе	
		ЗаполнитьСтруктуруОтвета(СтруктураОтвет,406,"Передан не массив!",Ложь,"X");
		Возврат;	
	КонецЕсли;	
	ЗаполнитьСтруктуруОтвета(СтруктураОтвет,200,"",Истина,"ОК!");
КонецПроцедуры

Функция ПолучитьСписокОбъектовOData()
	СписокОбъектовOdata = Новый СписокЗначений;	
	СписокОбъектовOdata.Добавить("Справочники",			"Catalog");	
	СписокОбъектовOdata.Добавить("Документы",			"Document");
	СписокОбъектовOdata.Добавить("ЖурналыДокументов",	"DocumentJournal");
	СписокОбъектовOdata.Добавить("Константы",			"Constant");
	СписокОбъектовOdata.Добавить("ПланыОбмена",			"ExchangePlan");
	СписокОбъектовOdata.Добавить("ПланыСчетов",			"ChartOfAccounts");
	СписокОбъектовOdata.Добавить("ПланыВидовРасчета",	"ChartOfCalculationTypes");
	СписокОбъектовOdata.Добавить("ПланыВидовХарактеристик",	"ChartOfCharacteristicTypes");
	СписокОбъектовOdata.Добавить("РегистрыСведений",	"InformationRegister");
	СписокОбъектовOdata.Добавить("РегистрыНакопления",	"AccumulationRegister");
	СписокОбъектовOdata.Добавить("РегистрыРасчета",		"CalculationRegister");
	СписокОбъектовOdata.Добавить("РегистрыБухгалтерии",	"AccountingRegister");
	СписокОбъектовOdata.Добавить("БизнесПроцессы",		"BusinessProcess");
	СписокОбъектовOdata.Добавить("Задачи",				"Task");
	СписокОбъектовOdata.Добавить("Перечисления",		"");
	Возврат СписокОбъектовOdata;	
КонецФункции	
				
Процедура ЗаполнитьСтруктуруОтвета(СтруктураОтвет,КодОтвета,ТекстОшибки,Отработало,ДанныеОтвета)
	СтруктураОтвет.КодОтвета 	= КодОтвета;
	СтруктураОтвет.ТекстОшибки	= ТекстОшибки;
	СтруктураОтвет.Отработало	= Отработало;
	СтруктураОтвет.ДанныеОтвета = ДанныеОтвета;	
КонецПроцедуры

-Помещаем данное расширение в нужные нам конфигурации и публикуем на вэб сервере.

Незабываем сделать публикацию с учетом OData и расширения!!!

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

В моем случае  http://127.0.0.1/DemoRetail22723/hs/MC_HTTPMob/V1/Привет

2 Создаем Управляющую конфигурацию

-Создаем справочник для хранения настроек подключений к другим конфигурациям

Реквизит НастройкиПодключения я сделал с типом ХранилищеЗначения.

На форму добавил кнопку с подключением к get методу PingMe

-Добавляем в конфигурацию обработку (//infostart.ru/public/811834/) и переделываем ее под такой вид:

-ПриОткрытии я использовал новую директиву МобильныйКлиент (глава на ИТС 26.5.2. Подготовка конфигурации для работы в мобильном клиенте)

#Если не МобильныйКлиент Тогда
	Элементы.СписокМетаданныхГруппаФлажки.Отображение = ОтображениеГруппыКнопок.Компактное;
	Элементы.СписокМетаданныхГруппаВсернутьРазвернуть.Отображение = ОтображениеГруппыКнопок.Компактное;
	Элементы.СписокМетаданныхПрефиксИмениURL.Видимость = Истина;
	Элементы.Система.ПодсказкаВвода	= "";
	НеМобильныйШрифт = Новый Шрифт(Элементы.СписокМетаданныхЗаписатьИзменения.Шрифт,,12,истина);
	Элементы.СписокМетаданныхЗаписатьИзменения.Шрифт = НеМобильныйШрифт;
#Иначе	
	Элементы.СписокМетаданныхВыбран.Заголовок = "Выбрать";
	Элементы.СписокМетаданныхСпасибо.Видимость = Ложь;
#КонецЕсли

-Прописываем действие команды ЗагрузитьМетаданныеСистемы

&НаКлиенте
Процедура ЗагрузитьМетаданныеСистемы(Команда)
	Если Не ЗначениеЗаполнено(Система) Тогда 
		Возврат;
	КонецЕсли;	
	ЗагрузитьМетаданныеСистемыНаСервере();
КонецПроцедуры

&НаСервере
Процедура ЗагрузитьМетаданныеСистемыНаСервере()
	СтруктураПараметры = Система.НастройкиПодключения.Получить();
	
	Если ТипЗнч(СтруктураПараметры) = Тип("Структура") Тогда 
		
		Если СтруктураПараметры.Свойство("БлокНастройкиПодключенияHTTP") Тогда 
			
			СтрБлокНастройкиПодключенияHTTP = СтруктураПараметры.БлокНастройкиПодключенияHTTP; 
			
			Если СтрБлокНастройкиПодключенияHTTP.Свойство("HTTPСервер") Тогда
				Сервер = СтрБлокНастройкиПодключенияHTTP.HTTPСервер;
			КонецЕсли;
			
			Если СтрБлокНастройкиПодключенияHTTP.Свойство("HTTPПорт") Тогда
				Порт = СтрБлокНастройкиПодключенияHTTP.HTTPПорт;
			КонецЕсли;
			
			Если СтрБлокНастройкиПодключенияHTTP.Свойство("HTTPРесурсНаСервере") Тогда
				РесурсНаСервере = СтрБлокНастройкиПодключенияHTTP.HTTPРесурсНаСервере;
			КонецЕсли;
			
			Если СтрБлокНастройкиПодключенияHTTP.Свойство("HTTPПользователь") Тогда
				Пользователь = СтрБлокНастройкиПодключенияHTTP.HTTPПользователь;
			КонецЕсли;
			
			Если СтрБлокНастройкиПодключенияHTTP.Свойство("HTTPПароль") Тогда
				Пароль = СтрБлокНастройкиПодключенияHTTP.HTTPПароль;
			КонецЕсли;
		КонецЕсли;
	КонецЕсли;	
	
	Если ПустаяСтрока(Сервер) Тогда
		Сообщить("Не заполнен ""Сервер""!");
		Возврат;
	Иначе	
		перСервер = Сервер;
	КонецЕсли;	
	Если ПустаяСтрока(РесурсНаСервере) Тогда
		Сообщить("Не заполнен ""Ресурс на сервере""!");
		Возврат;
	Иначе	
		перРесурсНаСервере = РесурсНаСервере;
	КонецЕсли;
	
	перПользователь = Пользователь;
	перПароль = Пароль;
	
	Если Порт > 0 Тогда
		перПорт = Порт;
	Иначе	
		перПорт = 0;
	КонецЕсли;
	ИмяМетода = "GiveAllMetadate";
	перРесурсНаСервере = ?(Лев(перРесурсНаСервере,1)<>"/","/","") + перРесурсНаСервере + ?(Прав(перРесурсНаСервере,1)<>"/","/","") + ИмяМетода;
	
	
	Попытка		
		Если перПорт <= 0 Тогда 
			HTTPСоединение = Новый HTTPСоединение(перСервер,,перПользователь,перПароль);
		Иначе 
			HTTPСоединение = Новый HTTPСоединение(перСервер,перПорт,перПользователь,перПароль);
		КонецЕсли;
		
		HTTPЗапрос = Новый HTTPЗапрос(перРесурсНаСервере);
		HTTPЗапрос.УстановитьТелоИзСтроки("");
		
		HTTPОтвет = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);
		//Получаем ответный массив или текст ошибки
		Ответочка = HTTPОтвет.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8);
		
		
	Исключение
		Сообщить("Подключение не прошло по причине "+ОписаниеОшибки());
		
		//Подчищаем соединение
		HTTPСоединение = Неопределено;
		Возврат;
	КонецПопытки;
	
	//Подчищаем соединение
	HTTPСоединение = Неопределено;
	
	Если HTTPОтвет.КодСостояния <> 200 Тогда 
		Сообщить(Строка(Ответочка));
	Иначе 
		
		ЧтениеJSON = Новый ЧтениеJSON;
		ЧтениеJSON.УстановитьСтроку(Ответочка);	
		
		Попытка
			ДопДанные = ПрочитатьJSON(ЧтениеJSON);
		Исключение
			Сообщить("Неудалось получить данные!");
			Возврат;
		КонецПопытки;
		
		
	КонецЕсли;
	
	
	перСписокМетаданных = РеквизитФормыВЗначение("СписокМетаданных");
	перСписокМетаданных.Строки.Очистить();
	Если ТипЗнч(ДопДанные) = Тип("Массив") Тогда 
		Для Каждого СтрокаМассива из ДопДанные Цикл
			Если ТипЗнч(СтрокаМассива) = Тип("Структура") Тогда	
				ВерхнийУровеньДерева = перСписокМетаданных.Строки.Добавить();	
				ВерхнийУровеньДерева.Выбран			= ?(СтрокаМассива.Свойство("Состояние"),СтрокаМассива.Состояние,Ложь);	
				ВерхнийУровеньДерева.Состояние		= ВерхнийУровеньДерева.Выбран;
				ВерхнийУровеньДерева.Имя			= ?(СтрокаМассива.Свойство("ИмяЗначение"),СтрокаМассива.ИмяЗначение,"");
				ВерхнийУровеньДерева.Синоним        = ВерхнийУровеньДерева.Имя;
				ВерхнийУровеньДерева.ПрефиксИмениURL= ?(СтрокаМассива.Свойство("ПрефиксИмениURL"),СтрокаМассива.ПрефиксИмениURL,"");
				
				Если СтрокаМассива.Свойство("МассивДанногоТипа") Тогда 
					Если ТипЗнч(СтрокаМассива.МассивДанногоТипа) = Тип("Массив") Тогда
						Для Каждого ОбъектМетаданных Из СтрокаМассива.МассивДанногоТипа Цикл
							Если ТипЗнч(ОбъектМетаданных) = Тип("Структура") Тогда
								ПодчиненныйУровеньДерева = ВерхнийУровеньДерева.Строки.Добавить();
								ПодчиненныйУровеньДерева.Имя			= ?(ОбъектМетаданных.Свойство("Имя"),ОбъектМетаданных.Имя,"");
								ПодчиненныйУровеньДерева.Синоним        = ?(ОбъектМетаданных.Свойство("Синоним"),ОбъектМетаданных.Синоним,"");
								ПодчиненныйУровеньДерева.ПрефиксИмениURL= ?(ОбъектМетаданных.Свойство("ПрефиксИмениURL"),ОбъектМетаданных.ПрефиксИмениURL,"");
								ПодчиненныйУровеньДерева.Состояние		= ?(ОбъектМетаданных.Свойство("Состояние"),ОбъектМетаданных.Состояние,Ложь);
								ПодчиненныйУровеньДерева.Выбран			= ПодчиненныйУровеньДерева.Состояние;
							Иначе
								Сообщить("Элемент массива не является структурой!")
							КонецЕсли	
						КонецЦикла;	
					Иначе
						Сообщить("МассивДанногоТипа не массив!")
					КонецЕсли;
				Иначе
					Сообщить("Отсутствует ""МассивДанногоТипа""!")
				КонецЕсли
			Иначе
				Сообщить("Элемент массива не является структурой!")
			КонецЕсли				
		КонецЦикла;
	Иначе
		Сообщить("Вернулся не массив!")
	КонецЕсли;		
	ЗначениеВРеквизитФормы(перСписокМетаданных, "СписокМетаданных");	
	Модифицированность = Ложь;
КонецПроцедуры

-Описываем действие команды ЗаписатьИзменения

&НаКлиенте
Процедура ЗаписатьИзменения(Команда)
	ЗаписатьИзмененияНаСервере();
КонецПроцедуры
&НаСервере
Процедура ЗаписатьИзмененияНаСервере()
	СоставСтандартногоИнтерфейсаOData = Новый Массив;
	перСписокМетаданных = РеквизитФормыВЗначение("СписокМетаданных");
	
	//Проверим ниже модифицировано или нет
	Модифицированность = Ложь;
	Для Каждого ВерхнийУровеньДерева Из перСписокМетаданных.Строки Цикл		
		Для Каждого ПодчиненныйУровеньДерева Из ВерхнийУровеньДерева.Строки Цикл
			Если ПодчиненныйУровеньДерева.Выбран Тогда
				СоставСтандартногоИнтерфейсаOData.Добавить(ПодчиненныйУровеньДерева.Синоним);	
			КонецЕсли;
			
			//Может ничего и не меняли
			Если ПодчиненныйУровеньДерева.Выбран<>ПодчиненныйУровеньДерева.Состояние И не Модифицированность Тогда 
				Модифицированность = Истина;
			КонецЕсли;	
		КонецЦикла;
	КонецЦикла;
	
	//Если меняли записываем
	Если Модифицированность Тогда 
		
		СтруктураПараметры = Система.НастройкиПодключения.Получить();
		
		Если ТипЗнч(СтруктураПараметры) = Тип("Структура") Тогда 
			
			Если СтруктураПараметры.Свойство("БлокНастройкиПодключенияHTTP") Тогда 
				
				СтрБлокНастройкиПодключенияHTTP = СтруктураПараметры.БлокНастройкиПодключенияHTTP; 
				
				Если СтрБлокНастройкиПодключенияHTTP.Свойство("HTTPСервер") Тогда
					Сервер = СтрБлокНастройкиПодключенияHTTP.HTTPСервер;
				КонецЕсли;
				
				Если СтрБлокНастройкиПодключенияHTTP.Свойство("HTTPПорт") Тогда
					Порт = СтрБлокНастройкиПодключенияHTTP.HTTPПорт;
				КонецЕсли;
				
				Если СтрБлокНастройкиПодключенияHTTP.Свойство("HTTPРесурсНаСервере") Тогда
					РесурсНаСервере = СтрБлокНастройкиПодключенияHTTP.HTTPРесурсНаСервере;
				КонецЕсли;
				
				Если СтрБлокНастройкиПодключенияHTTP.Свойство("HTTPПользователь") Тогда
					Пользователь = СтрБлокНастройкиПодключенияHTTP.HTTPПользователь;
				КонецЕсли;
				
				Если СтрБлокНастройкиПодключенияHTTP.Свойство("HTTPПароль") Тогда
					Пароль = СтрБлокНастройкиПодключенияHTTP.HTTPПароль;
				КонецЕсли;
			КонецЕсли;
		КонецЕсли;	
		
		Если ПустаяСтрока(Сервер) Тогда
			Сообщить("Не заполнен ""Сервер""!");
			Возврат;
		Иначе	
			перСервер = Сервер;
		КонецЕсли;	
		Если ПустаяСтрока(РесурсНаСервере) Тогда
			Сообщить("Не заполнен ""Ресурс на сервере""!");
			Возврат;
		Иначе	
			перРесурсНаСервере = РесурсНаСервере;
		КонецЕсли;
		
		перПользователь = Пользователь;
		перПароль = Пароль;
		
		Если Порт > 0 Тогда
			перПорт = Порт;
		Иначе	
			перПорт = 0;
		КонецЕсли;
		ИмяМетода = "GoodMetadate";
		перРесурсНаСервере = ?(Лев(перРесурсНаСервере,1)<>"/","/","") + перРесурсНаСервере + ?(Прав(перРесурсНаСервере,1)<>"/","/","") + ИмяМетода;
		
		Попытка		
			Если перПорт <= 0 Тогда 
				HTTPСоединение = Новый HTTPСоединение(перСервер,,перПользователь,перПароль);
			Иначе 
				HTTPСоединение = Новый HTTPСоединение(перСервер,перПорт,перПользователь,перПароль);
			КонецЕсли;
			
			ПараметрыJSON	= Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Нет, " " , Истина, ЭкранированиеСимволовJSON.Нет, Ложь, Ложь, Ложь, Ложь);
			ЗаписьJSON		= Новый ЗаписьJSON;
			ЗаписьJSON.ПроверятьСтруктуру = Истина;
			ЗаписьJSON.УстановитьСтроку(ПараметрыJSON);
			ЗаписатьJSON(ЗаписьJSON, СоставСтандартногоИнтерфейсаOData);
			СтрокаJSON = ЗаписьJSON.Закрыть();
			
			HTTPЗапрос = Новый HTTPЗапрос(перРесурсНаСервере);
			HTTPЗапрос.УстановитьТелоИзСтроки(СтрокаJSON);
			
			HTTPОтвет = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);
			//Получаем ответный массив или текст ошибки
			Ответочка = HTTPОтвет.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8);
		Исключение
			Сообщить("Подключение не прошло по причине "+ОписаниеОшибки());	
			//Подчищаем соединение
			HTTPСоединение = Неопределено;
			Возврат;
		КонецПопытки;
		//Подчищаем соединение
		HTTPСоединение = Неопределено;
		
		Если HTTPОтвет.КодСостояния <> 200 Тогда 
			Сообщить(Строка(Ответочка));
		Иначе 	
			Модифицированность = Ложь;	
		КонецЕсли;	
	КонецЕсли;	
КонецПроцедуры

3 Проверяем в тонком клиенте

4 Публикуем и устанавливаем мобильную платформу на телефон.

Есть два способа, простой и сложный.

Простой: В настройках телефона в меню безопасность включаем Неизвестные источники и скачиваем мобильную платформу и закидываем ее на телефон.

Сложный способ: Качаем и устанавливаем Android Studio 3.1.1 (https://developer.android.com/studio/index.html) и качаем мобильную платформу.

-На телефоне включаем отладку по USB (чаще всего в меню разработчика) и включаем Неизвестные источники.

 -В конфигураторе прописываем путь к SDK и мобильной платформе, ставим галочку Использование Android debug bridge.

-подключаем телефон по usb и в конфигураторе: Главное меню \ Конфигурация \Мобильный клиент\ Использование Android debug bridge \ Установить мобильный клиент.

Более подробно описано на ИТС в главе 26.6.2. Установка инструментов разработчика.

5 Тестируем Мобильный клиент

Открываем мобильную платформу и добавляем нашу конфигурацию

У меня так:

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

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

Наименование Файл Версия Размер
Мобильный клиент + HTTP Сервис + Расширение конфигурации:

.rar 23,03Kb
43
.rar 1.0.0 23,03Kb 43 Скачать

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

Лучшие комментарии
15. dsdred 1535 06.05.18 12:05 Сейчас в теме
(14)
А где мобильный клиент? Пришлите можалуйста дистрибутив. Спасибо.

Добрый день. В том то и дело, что мобильный клиент это то что появилось в 8.3.12. Теперь можно просто опубликовать конфигурацию без разработок отдельного мобильного приложения.
Мобильный клиент работает по протоколу http. (https://wonderland.v8.1c.ru/blog/mobilnyy-klient/)

В архиве лежит МобильныйКлиентТест.cf
1 Необходимо развернуть данную конфигурацию на платформе 8.3.12(я использовал эту версию https://releases.1c.ru/version_files?nick=Platform83&ver=8.3.12.1412) и опубликовать на веб сервере (я использовал IIS 6) .
(Ниже приложил картинку.)

2 На телефон установить Мобильную платформу(я использовал вот эту https://releases.1c.ru/version_files?nick=mobile&ver=8.3.12.46), прописать путь к опубликованной базе и использовать. (пункт 5 в статье)

В статье в самом низу я указал что в архиве (Выкладываю Расширение конфигурации, его можно встроить в любую конфигурацию с поддержкой 8.3.10 и выше и выкладываю Управляющую конфигурацию.)
Прикрепленные файлы:
tsugancov; Rustig; +2 Ответить
Остальные комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Sapiens_bru 3 16.04.18 12:26 Сейчас в теме
Публикация интересная, но в ней как-то мало новой информации. Всё это уже было тут рассказано много раз. В вашем варианте вообще нет разницы - использовать мобильный клиент, или мобильную платформу.
Вот если бы расширение к типовой программе давало ей мобильный интерфейс сразу, без промежуточных баз и сервисов обмена - было бы круто. Жаль что так нельзя, по крайней мере пока.
2. dsdred 1535 16.04.18 12:49 Сейчас в теме
(1)
Вот если бы расширение к типовой программе давало ей мобильный интерфейс сразу, без промежуточных баз и сервисов обмена - было бы круто. Жаль что так нельзя, по крайней мере пока.

Это почему нельзя? Очень даже можно.
1 В расширение добавляем нужную обработку, HTTP сервис, роль. На эту роль вешаем на рабочий стол форму обработки.
2 Создаем пользователя и даем ему эту роль.
3 Публикуем и радуемся.
Этот вариант неудобен тем, что в списке баз на мобилке будет столько сколько баз с разширениями.


Вообще конечно можно больше было рассказать... Посмотрим может попозже что то попроще именно про мобильный клиент набросаю.
Пока планирую другую статью))
18. Region102 31.05.18 05:26 Сейчас в теме
(1) вполне можно, человеку конечно плюс за старания, но мне кажется, что чем проще тем лучше.
22. dsdred 1535 31.05.18 08:06 Сейчас в теме
(18)Наверное лучше, но вот такой я человек. Мне если просто, то скучно...
3. saa@kuzov.org 16.04.18 14:10 Сейчас в теме
Коллеги, простите за оффтопик. Тут свежая тема, и релевантные люди.

Подскажите толковую статью про сборку моб приложений на платформе 1с под яблоко (особенно что как делать на сайте эппл про сертификаты-профили для сборки, пуши, публикациб). и под андроид (тут все умею, но моб клиент 8.3.13 не собирается никак, какие настройки и версия sdk?)
4. dsdred 1535 16.04.18 14:27 Сейчас в теме
(3)
Подскажите толковую статью про сборку моб приложений на платформе 1с под яблоко (особенно что как делать на сайте эппл про сертификаты-профили для сборки, пуши, публикациб). и под андроид (тут все умею, но моб клиент 8.3.13 не собирается никак, какие настройки и версия sdk?)


Статью полезную не находил по эплам, только курсы (https://xn----1-bedvffifm4g.xn--p1ai/1c-v8/mobile-1c-monetization/)
7. saa@kuzov.org 16.04.18 20:35 Сейчас в теме
(4) как говорится, за деньги и дурак купит...
Есть продукт, есть документация разработчиков.
Есть подозрение, что я просто не знаю где она есть (может в файлах, или в справке или на ИТС или на партнерском форуме).
А курс... ну тот что Вы показали, он устарел (XCode сейчас 9.3) и там много того что не нужно. Это как купить велосипед, чтобы у меня был насос для накачивания волйбольного мяча
8. dsdred 1535 16.04.18 20:46 Сейчас в теме
(7) На ИТС только Глава 26. Разработка для мобильных устройств по этой теме.
Хотя я могу ошибаться...

К сожалению с документацией у 1с обычно не очень хорошо...
19. Region102 31.05.18 05:28 Сейчас в теме
(3) сборку на IOS я еще не делал, но мобильный клиент отлично собирается под android, можете посмотреть на моем канале youtube.
20. Region102 31.05.18 05:35 Сейчас в теме
21. dsdred 1535 31.05.18 08:00 Сейчас в теме
(20)Спасибо за видео, единственное наверное стоило обозначить что для рабочей конфигурации не стоит менять режим совместимости и конфигурацию проверить на режим Мобильный клиент.

А в остальном очень понравилась подача материала.
Прикрепленные файлы:
23. Region102 31.05.18 11:47 Сейчас в теме
(21) Согласен, получилось бы быстрее выявить ошибки, а не методом тыка )
24. Region102 31.05.18 11:49 Сейчас в теме
(21)
не стоит менять режим совместимости
типовые до сих пор работают в режиме совместимости 8.3.10 или 8.3.11. Мобильный клиент работает только в режиме 8.3.12, если я не ошибаюсь.
25. dsdred 1535 31.05.18 12:06 Сейчас в теме
(24)
типовые до сих пор работают в режиме совместимости 8.3.10 или 8.3.11. Мобильный клиент работает только в режиме 8.3.12, если я не ошибаюсь.

Все верно типовые работают на 8.3.10, а мобильный под 8.3.12.
Суть в том, что типовые под 8.3.12 выйдут не ранее сентября этого года.

Режим совместимости для Тестирования на здоровье можно перевести на 8.3.12 в "не использовать", но боевые базы переводить не надо и об этом лучше предупредить сразу.
5. Steelvan 50 16.04.18 17:51 Сейчас в теме
Вместо "Все ОК" написать "Все отлично" или "Все хорошо" никак ?
Минус поставил.
Designer1C; Axel089; +2 7 Ответить
6. dsdred 1535 16.04.18 19:47 Сейчас в теме
(5)
Вместо "Все ОК" написать "Все отлично" или "Все хорошо" никак ?
Минус поставил.

Вы серьезно? Это самое необычное замечание за всю мою жизнь))

Это же как говорится на вкус и цвет. Служит данный ответ сервиса только для того чтобы узнать что все подключено и все работает, разовая операция.

Меняется в одном месте.
В расширении конфигурации MC.cfe, в модуле http сервиса, в функции MobClientHTTPPingMe поменять одну стройчку.
Было
Ответочка = ?(перВхИмя = "ПроверкаПодключения","Все ОК!","Все ОК! Вы написали "+перВхИмя);

Стало
Ответочка = ?(перВхИмя = "ПроверкаПодключения","Все хорошо!","Все хорошо! Вы написали "+перВхИмя);
или
Ответочка = ?(перВхИмя = "ПроверкаПодключения","Все замечательно!","Все замечательно! Вы написали "+перВхИмя);
или
Ответочка = ?(перВхИмя = "ПроверкаПодключения","Все великолепно!","Все великолепно! Вы написали "+перВхИмя);
или
Ответочка = ?(перВхИмя = "ПроверкаПодключения","Все отлично!","Все отлично! Вы написали "+перВхИмя);
chemezov; dimkakopylow001; softgarant; kolya_tlt; Max27; rutony; awk; pinkz80; yarsort; +9 Ответить
11. asved.ru 35 18.04.18 08:31 Сейчас в теме
(5) Надо было к "по средствам" придираться.
kaa_; dsdred; +2 Ответить
12. dsdred 1535 18.04.18 20:14 Сейчас в теме
(11)
Надо было к "по средствам" придираться.

Спасибо исправил. ;)
33. Designer1C 354 29.10.18 10:18 Сейчас в теме
(12) За статью спасибо. Прочитал с интересом. Надеюсь скоро воспользоваться Вашим опытом.
Как читатель добавлю : Хорошо, что ошибки в тексте исправляются.
Это трудное слово пишется слитно : ""посредством", вдобавок.
Я иногда применяю способ замены сложных для написания слов на более простые
В тексте могут быть использованы слова-синонимы : "методом", "с помощью". Смысл может остаться тот же.
34. dsdred 1535 29.10.18 10:35 Сейчас в теме
(33)Спасибо за урок. Учту.
Статью писал ночью на одном дыхание, слова уже с трудом подбирались.
35. chemezov 36 08.08.19 03:18 Сейчас в теме
(5)У вас наверно от кнопок "ОК" в Windows и 1С и других русифицированных программах глаза уже дергаются )_)))))
14. djolejek 06.05.18 10:33 Сейчас в теме
А где мобильный клиент? Пришлите можалуйста дистрибутив. Спасибо.
15. dsdred 1535 06.05.18 12:05 Сейчас в теме
(14)
А где мобильный клиент? Пришлите можалуйста дистрибутив. Спасибо.

Добрый день. В том то и дело, что мобильный клиент это то что появилось в 8.3.12. Теперь можно просто опубликовать конфигурацию без разработок отдельного мобильного приложения.
Мобильный клиент работает по протоколу http. (https://wonderland.v8.1c.ru/blog/mobilnyy-klient/)

В архиве лежит МобильныйКлиентТест.cf
1 Необходимо развернуть данную конфигурацию на платформе 8.3.12(я использовал эту версию https://releases.1c.ru/version_files?nick=Platform83&ver=8.3.12.1412) и опубликовать на веб сервере (я использовал IIS 6) .
(Ниже приложил картинку.)

2 На телефон установить Мобильную платформу(я использовал вот эту https://releases.1c.ru/version_files?nick=mobile&ver=8.3.12.46), прописать путь к опубликованной базе и использовать. (пункт 5 в статье)

В статье в самом низу я указал что в архиве (Выкладываю Расширение конфигурации, его можно встроить в любую конфигурацию с поддержкой 8.3.10 и выше и выкладываю Управляющую конфигурацию.)
Прикрепленные файлы:
tsugancov; Rustig; +2 Ответить
36. Rustig 1668 03.05.20 00:37 Сейчас в теме
(15) лицензия нужна на мобильную платформу?
37. dsdred 1535 03.05.20 11:32 Сейчас в теме
(36)В зависимости от вариантов: Мобильная платформа 1С: лицензионная политика.

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

Правила лицензирования для тиражных решений.
При бесплатном распространении мобильного приложения, созданного на платформе «1С:Предприятие», среди третьих лиц через магазины приложений AppStore, Google Play и Windows Store и любыми другими способами, заключение лицензионного договора с фирмой «1С» не требуется, никаких финансовых обязательств перед «1С» у разработчика не возникает.

При любом способе монетизации требуется заключение лицензионного соглашения с фирмой «1С», согласно которому, начиная с 60 001-го заработанного в результате распространения приложения рубля (или суммы в долларах, эквивалентной 60 001 руб для случаев монетизации не в рублях), выплачивать в «1С» роялти в размере 10% от оборота приложения.

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

При установке на одно устройство нескольких приложений, созданных на мобильной платформе "1С:Предприятие 8", необходимо приобрести клиентскую лицензию (картинка превью) на мобильные рабочие места на каждое из таких приложений.

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

Подробна информация и стоимость клиентских лицензий для Российской Федерации, для других стран.

Лицензирование использования технологии мобильный клиент.
При использовании технологии мобильный клиент используется клиентская лицензия, выдаваемая сервером на время сеанса. Ничего дополнительно для мобильного клиента приобретать не нужно.
30. GlebBR 17 18.07.18 09:33 Сейчас в теме
Добрый день, а вы решали проблему аутентификации пользователя, через расширение ? Опубликован веб клиент, и есть http - сервис через расширение, и при обращению к http - сервису он дает ошибку аунтефикации. Как сделать автоматическую аунтефикацию под пользователем для http-сервиса через расширение, но веб клиент не трогать.
31. dsdred 1535 06.08.18 21:16 Сейчас в теме
(30)Добрый вечер. Проблему не решал, так как с такой проблемой не сталкивался.
Оставьте свое сообщение

См. также

Внешние компоненты. Мобильное приложение 1С Промо

Разработка внешних компонент Мобильная разработка v8::Mobile 1cv8.cf Абонемент ($m)

Пример применения технологии внешних компонент для мобильной платформы 1С (Android)

1 стартмани

17.02.2017    42537    flyer    36    

Хороший заказчик - плохой заказчик

О жизни Россия Бесплатно (free)

Лайфхак о том, как стать легендарным клиентом.

13.09.2019    8111    dsdred    24    

EGAIS Scan - приложение для ТСД

Терминал сбора данных Мобильная разработка Оптовая торговля Розничная торговля Учет ТМЦ Оптовая торговля Розничная торговля Учет ТМЦ v8 УТ10 УПП1 УТ11 КА2 Россия УУ Абонемент ($m)

Каждый, кто занимается торговлей алкогольной продукцией, сталкивался с проблемами сканирования акцизных марок и трудностями при взаимодействии с учетной системой 1С. Приложение EGAIS Scan - простое и оптимальное решение для выполнения быстрой приемки и отгрузки алкогольной продукции.

1 стартмани

17.04.2019    5516    MrChe    3    

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

Разработка внешних компонент Мобильная разработка v8::Mobile Абонемент ($m)

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

31.01.2019    17742    IgorKissil    25    

Hello world на metadata.js Промо

Инструментарий разработчика WEB Мобильная разработка v8 1cv8.cf Абонемент ($m)

Про браузерные offline-first приложения можно написать миллионы слов. Сэкономлю своё и ваше время и перейду сразу к делу. В статье не будет рекламы и агитации за новые технологии, не будет критики традиционных или попсовых решений. Рассмотрим по шагам разработку простейшей программы на metadata.js. Постараюсь сделать акцент не на том «как это сделано», а «почему сделано именно так»

1 стартмани

11.08.2016    60255    unpete    209    

Применение цифровой подписи при организации учёта ТМЦ и ГСМ

Защита и шифрование Управление бизнес-процессами (BPM) Мобильная разработка v8::Mobile v8::Бизнес-процессы 1cv8.cf Абонемент ($m)

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

1 стартмани

25.10.2018    7498    ikekoval    2    

HTTP Сервисы: Путь к своему сервису. Часть 1

Практика программирования WEB v8 1cv8.cf Абонемент ($m)

Уже много было написано про http-сервисы, но то и дело всплывают «Новые» статьи по обмену между базами V8 по COM, что «Немножко» удивляет. Решил внести свои 5 копеек, поработаем с http-сервисом.

1 стартмани

15.07.2018    101570    dsdred    32    

Доступный состав стандартного интерфейса OData

Работа с интерфейсом v8 1cv8.cf Россия Абонемент ($m)

Обработка позволяет настраивать состав объектов метаданных, доступных через стандартный сервис OData API.

1 стартмани

06.04.2018    20921    142    dsdred    0    

Мобильное приложение: особенности разработки на примере «Тестирование: Отчеты»

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

В данной статье мы расскажем, с какими проблемами столкнулись и как их решили при создании мобильного приложения «Тестирование: Отчеты» для платформы 1С. Приложение доступно в google play + есть возможность посмотреть работу в демонстрационном режиме.

1 стартмани

12.03.2018    20325    ivanov660    2    

Сборка мобильного приложения 1С под IOS

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

В статье представлена инструкция по сборке мобильного приложения 1С под iOS с использованием бесплатного аккаунта разработчика Apple.

1 стартмани

29.01.2018    29094    Isonic    52    

Google OAuth и мобильное приложение

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

Об аутентификации для работы с сервисами google из мобильного или настольного приложения

1 стартмани

29.08.2017    11698    stveans@gmail.com    3    

Мобильное приложение 1С и приложение Java. Совместная работа через Intent. Часть 1. Запуск приложения Java из 1С

Практика программирования Мобильная разработка v8::Mobile 1cv8.cf Россия Абонемент ($m)

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

1 стартмани

20.04.2017    29096    user621724_Dimav1979    20    

Push сообщения с использованием Firebase cloud message

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

Используем новую технологию FCM, отправляем пуши на устройства на базе Android, инициируем вызов сервера клиентом с самого сервера.

1 стартмани

06.04.2017    41130    nbeliaev    114    

Интеграция типовой конфигурации с мобильным приложением

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

В данной статье речь пойдет о том, как быстро наладить взаимодействие конфигурации УТ 11 из мобильной конфигурацией, написанной на 1С 8.3. В качестве примера мы вместе разработаем отчет «Валовая прибыль по месяцам», который сможем запускать из смартфона или планшета под управлением операционной системы Android 4.2. Взаимодействие между информационной базой и мобильным приложением будет осуществляется с помощью web-сервиса.

1 стартмани

16.09.2013    17383    akomar    9