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

29.10.18

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

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

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

Наименование Файл Версия Размер
Мобильный клиент + HTTP Сервис + Расширение конфигурации:
.rar 23,03Kb
60
.rar 1.0.0 23,03Kb 60 Скачать

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

Задача: На основе разработки //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 и выше и выкладываю Управляющую конфигурацию.

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

См. также

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

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

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

2880 руб.

03.12.2018    54622    137    102    

161

SALE! 25%

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

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

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

13200 9900 руб.

27.12.2021    33287    80    157    

174

"Мобильный ТСД" - инвентаризация и сбор штрихкодов для 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    91948    511    186    

293

Магазин 15 - приемка товара по штрихкодам или инвентаризация в торговом зале

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

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

12950 руб.

30.05.2023    3388    2    0    

4

Работа с графикой в браузере (SimpleWEB). Векторный редактор

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

В SimpleWEB добавились средства для работы с графикой и отслеживание событий мыши, в онлайн редактор https://seditor.ru:1555/ добавился «Векторный редактор» на этом API. Теперь можно нарисовать схемы складов на ПК, сделать карты (*.sug-файлы) для мобильной платформы SimpleUI, выводить данные из 1С в графическом виде. Таким образом, API для работы с векторными файлами теперь есть и в веб- и в мобильной платформе, а также средства для создания и редактирования векторных файлов есть тоже в обеих платформах.

1 стартмани

20.03.2024    1478    0    informa1555    1    

39

Зачем нам 1С:Элемент

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

Flutter может быть использован с 1С:Предприятием для разработки кроссплатформенных мобильных приложений, обеспечивая единый интерфейс и функциональность на устройствах под управлением iOS и Android. Это позволяет создавать приложения с высокой производительностью благодаря использованию собственного движка рендеринга Flutter. Интеграция Flutter с 1С:Предприятием позволяет создавать мобильные приложения любого уровня сложности, интегрировать их в корпоративные информационные системы, а также реализовывать бизнес-логику

19.03.2024    6890    ROk_dev    56    

37

JavaScript в Simple

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

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

12.02.2024    1629    informa1555    0    

25
Отзывы
15. dsdred 3251 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 4 16.04.18 12:26 Сейчас в теме
Публикация интересная, но в ней как-то мало новой информации. Всё это уже было тут рассказано много раз. В вашем варианте вообще нет разницы - использовать мобильный клиент, или мобильную платформу.
Вот если бы расширение к типовой программе давало ей мобильный интерфейс сразу, без промежуточных баз и сервисов обмена - было бы круто. Жаль что так нельзя, по крайней мере пока.
2. dsdred 3251 16.04.18 12:49 Сейчас в теме
(1)
Вот если бы расширение к типовой программе давало ей мобильный интерфейс сразу, без промежуточных баз и сервисов обмена - было бы круто. Жаль что так нельзя, по крайней мере пока.

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


Вообще конечно можно больше было рассказать... Посмотрим может попозже что то попроще именно про мобильный клиент набросаю.
Пока планирую другую статью))
10. пользователь 18.04.18 03:18
Сообщение было скрыто модератором.
...
13. пользователь 19.04.18 06:21
Сообщение было скрыто модератором.
...
16. пользователь 30.05.18 15:56
Сообщение было скрыто модератором.
...
17. пользователь 31.05.18 05:15
Сообщение было скрыто модератором.
...
18. Region102 31.05.18 05:26 Сейчас в теме
(1) вполне можно, человеку конечно плюс за старания, но мне кажется, что чем проще тем лучше.
22. dsdred 3251 31.05.18 08:06 Сейчас в теме
(18)Наверное лучше, но вот такой я человек. Мне если просто, то скучно...
26. пользователь 02.06.18 06:14
Сообщение было скрыто модератором.
...
27. пользователь 02.06.18 17:29
Сообщение было скрыто модератором.
...
28. пользователь 04.06.18 08:11
Сообщение было скрыто модератором.
...
29. пользователь 05.06.18 13:52
Сообщение было скрыто модератором.
...
3. efin 16.04.18 14:10 Сейчас в теме
Коллеги, простите за оффтопик. Тут свежая тема, и релевантные люди.

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


Статью полезную не находил по эплам, только курсы (https://xn----1-bedvffifm4g.xn--p1ai/1c-v8/mobile-1c-monetization/)
7. efin 16.04.18 20:35 Сейчас в теме
(4) как говорится, за деньги и дурак купит...
Есть продукт, есть документация разработчиков.
Есть подозрение, что я просто не знаю где она есть (может в файлах, или в справке или на ИТС или на партнерском форуме).
А курс... ну тот что Вы показали, он устарел (XCode сейчас 9.3) и там много того что не нужно. Это как купить велосипед, чтобы у меня был насос для накачивания волйбольного мяча
8. dsdred 3251 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 3251 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 3251 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 302 16.04.18 17:51 Сейчас в теме
Вместо "Все ОК" написать "Все отлично" или "Все хорошо" никак ?
Минус поставил.
Designer1C; Axel089; +2 9 Ответить
6. dsdred 3251 16.04.18 19:47 Сейчас в теме
(5)
Вместо "Все ОК" написать "Все отлично" или "Все хорошо" никак ?
Минус поставил.

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

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

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

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

Спасибо исправил. ;)
33. Designer1C 447 29.10.18 10:18 Сейчас в теме
(12) За статью спасибо. Прочитал с интересом. Надеюсь скоро воспользоваться Вашим опытом.
Как читатель добавлю : Хорошо, что ошибки в тексте исправляются.
Это трудное слово пишется слитно : ""посредством", вдобавок.
Я иногда применяю способ замены сложных для написания слов на более простые
В тексте могут быть использованы слова-синонимы : "методом", "с помощью". Смысл может остаться тот же.
34. dsdred 3251 29.10.18 10:35 Сейчас в теме
(33)Спасибо за урок. Учту.
Статью писал ночью на одном дыхание, слова уже с трудом подбирались.
35. chemezov 47 08.08.19 03:18 Сейчас в теме
(5)У вас наверно от кнопок "ОК" в Windows и 1С и других русифицированных программах глаза уже дергаются )_)))))
9. пользователь 17.04.18 19:31
Сообщение было скрыто модератором.
...
14. djolejek 06.05.18 10:33 Сейчас в теме
А где мобильный клиент? Пришлите можалуйста дистрибутив. Спасибо.
15. dsdred 3251 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 1351 03.05.20 00:37 Сейчас в теме
(15) лицензия нужна на мобильную платформу?
37. dsdred 3251 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. devonec_team 36 18.07.18 09:33 Сейчас в теме
Добрый день, а вы решали проблему аутентификации пользователя, через расширение ? Опубликован веб клиент, и есть http - сервис через расширение, и при обращению к http - сервису он дает ошибку аунтефикации. Как сделать автоматическую аунтефикацию под пользователем для http-сервиса через расширение, но веб клиент не трогать.
31. dsdred 3251 06.08.18 21:16 Сейчас в теме
(30)Добрый вечер. Проблему не решал, так как с такой проблемой не сталкивался.
32. пользователь 18.10.18 17:55
Сообщение было скрыто модератором.
...
Оставьте свое сообщение