Совсем простой обмен HTTP, 2 функции

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

Разработка - Системная интеграция - Интеграция с WEB

http рест обмен get post

60
Функция для вызова рест-сервиса и функция для разбора результата. Быстро, просто, универсально.

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


// Вспомогательная
Процедура СообщитьИВнестиВПротокол(инфо,рПротокол,рПояснять=Ложь) Экспорт
	Если Прав(инфо,3)="!!!" Тогда
		рСтатус=СтатусСообщения.ОченьВажное;
	ИначеЕсли Прав(инфо,2)="!!" Тогда
		рСтатус=СтатусСообщения.Важное;
	ИначеЕсли Прав(инфо,1)="!" Тогда
		рСтатус=СтатусСообщения.Внимание;
	Иначе
		рСтатус=СтатусСообщения.Информация;
	КонецЕсли;
	Если рПояснять Тогда
		Сообщить(инфо,рСтатус);
	КонецЕсли;
	//
	Если ТипЗнч(рПротокол)=Тип("ТекстовыйДокумент") Тогда
		рПротокол.ДобавитьСтроку(инфо);
	КонецЕсли;
КонецПроцедуры

// Выполняет любой запрос к соединению,при необходимости создаёт соединение,заносит в параметры ответ сервиса.
// Возвращает успешность (булево), при ошибке возвращает Ложь.
//
// Параметры:
//    рПараметры - структура:
//
//        Соединение - HTTP-соединение; заносится в этот ключ,если не было передано (создаётся в функции),и используется из этого ключа без изменений,если было передано;
//        если значение ключа Соединение не указано или имеет иной тип,то соединение создаётся согласно значениям указанных ключей:
//            Сервер -строка, обязательный (если пусто или не указано,то возвращает ошибку),если начинается с http://,то приводится к правильному виду автоматически;
//            Порт - число, обязательный (по умолчанию для незащищённых 80,для защищённых 443);
//            Пользователь - строка, необязательный;
//            Пароль - строка, необязательный;
//            Таймаут - число, необязательный (по умолчанию 0);
//            ПроксиПользователь - строка, необязательный (по умолчанию пуста); если не пуста,то это признак использования прокси,в этом случае требуется передача свойств:
//                ПроксиПароль - строка, необязательный;
//                ПроксиСервер - строка,
//                ПроксиПорт - число, необязательный (по умолчанию 0);
//            ЗащищенноеСоединение - булево, необязательный; если используется,то применяется SSL;
//            КраткийФорматВызова - булево, необязательный; если указан,то соединение НЕ защищённое и БЕЗ прокси.
//        Если Соединение не было указано,то по завершении функции в ключ Соединение вносится созданное в ней;
//
//        HTTPЗапрос - запрос с уже установленными свойствами; необязательный,если не указан,то инициализируется в функции согласно значениям указанных ключей:
//            АдресРесурса или АдресСкрипта (равнозначны оба ключа) - строка,необязательный; по умолчанию "/";
//            ЗаголовкиЗапроса - соответствие или фикс.соответствие, необязательный;
//            ПараметрыЗапроса - структура,соответствие,фикс.соответствие или список значений (где имя ключа - Представление,а значение ключа - Значение),
//                список значений используется в случае,когда важен порядок следования параметров, вносит в ком.строку строго по порядку вхождения данных в список;
//            ТелоЗапроса - строка или двоичные данные,необязательный;
//                уточнения для тела запроса,являющегося строкой: КодировкаТелаЗапроса (по умолчанию UTF-8),ИспользованиеByteOrderMark (по умолчанию НеИспользовать);
//            ИмяФайлаТелаЗапроса - строка; необязательный;
//                указание тела запроса более приоритетно, чем указание имени файла тела запроса;
//        Если HTTPЗапрос был указан, то по завершении функции из рПараметры значение с ключом HTTPЗапрос удаляется,во избежание кэширования;
//
//        МетодHTTP - строка,необязательный (по умолчанию GET), допустимы только значения "GET" и "POST";
//        
//        Протокол - текстовый документ, необязательный (по умолчанию пуст и не используется);
//        Пояснять - булево; если Истина, то действия поясняются и в протокол (если ведётся), и сообщениями.
//
//    По итогам работы функции при её успешном завершении в рПараметры вставляется значение с ключом HTTPОтвет. При ошибке вставляет Неопределено.
//
// Возвращает успешность (булево).
//
Функция HTTPВыполнитьЗапрос(рПараметры) Экспорт
Попытка	
	рПротокол=?(рПараметры.Свойство("Протокол"),рПараметры.Протокол,Неопределено);
	рПояснять=?(рПараметры.Свойство("Пояснять"),рПараметры.Пояснять,Ложь);
	
	// сразу по умолчанию
	//рОтвет=Новый HTTPСервисОтвет(0,"Запрос не выполнялся"); // в релизах ниже 8.3.7 не отрабатывает
	рОтвет=Неопределено;
	рПараметры.Вставить("HTTPОтвет",рОтвет);
	
	рКраткийФормат=?(рПараметры.Свойство("КраткийФорматВызова"),рПараметры.КраткийФорматВызова,Ложь);
	рЗащищённое=?(рПараметры.Свойство("ЗащищенноеСоединение"),рПараметры.ЗащищенноеСоединение,Ложь);
	
	рПользователь=?(рПараметры.Свойство("Пользователь"),рПараметры.Пользователь,"");
	рПароль=?(рПараметры.Свойство("Пароль"),рПараметры.Пароль,"");			
	
	рСоединение=?(рПараметры.Свойство("Соединение"),рПараметры.Соединение,Неопределено);
	Если ТипЗнч(рСоединение)<>Тип("HTTPСоединение") Тогда // надо его установить
		#Область УстановкаСоединения
		Если не рПараметры.Свойство("Сервер") Тогда Возврат Ложь КонецЕсли;
		рСервер=СокрЛП(рПараметры.Сервер);
		Если ПустаяСтрока(рСервер) Тогда Возврат Ложь КонецЕсли;
		рПорт=?(рПараметры.Свойство("Порт"),рПараметры.Порт,0);
		рТаймаут=?(рПараметры.Свойство("Таймаут"),рПараметры.Таймаут,0);
		рПроксиПользователь=?(рПараметры.Свойство("ПроксиПользователь"),рПараметры.ПроксиПользователь,""); // признак применения прокси именно в этом
		Если рКраткийФормат Тогда рЗащищённое=Ложь; рПроксиПользователь="" КонецЕсли;
		//
		рПрокси=Неопределено;
		Если не ПустаяСтрока(рПроксиПользователь) Тогда
			рПрокси=Новый ИнтернетПрокси;
			рПрокси.Пользователь=рПроксиПользователь;
			рПрокси.Пароль=рПараметры.ПроксиПароль;
			Если рПараметры.ПроксиПорт=0 Тогда
				рПрокси.Установить("HTTP",рПараметры.ПроксиСервер);
			Иначе	
				рПрокси.Установить("HTTP",рПараметры.ПроксиСервер,рПараметры.ПроксиПорт);
			КонецЕсли;	
		КонецЕсли;
		//
		Если СтрНачинаетсяС(НРег(рСервер),"http://") Тогда
			рСервер=Сред(рСервер,8);
		КонецЕсли;		
		Если рПорт=0 Тогда
			рПорт=?(рЗащищённое,443,80);
		КонецЕсли;
		//
		Если рЗащищённое Тогда			
			си=Новый СистемнаяИнформация;
			Если Число(СтрРазделить(си.ВерсияПриложения,".",Ложь).Получить(2))>9 Тогда
				рSSL=Новый ЗащищенноеСоединениеOpenSSL(Новый СертификатКлиентаWindows(СпособВыбораСертификатаWindows.Выбирать),Новый СертификатыУдостоверяющихЦентровWindows());
			Иначе
				рSSL=Новый ЗащищенноеСоединениеOpenSSL(,Новый СертификатыУдостоверяющихЦентровWindows);
			КонецЕсли;
		Иначе
			рSSL=Неопределено;
		КонецЕсли;
		//
		Если рКраткийФормат Тогда
			Если рЗащищённое Тогда
				рСоединение=Новый HTTPСоединение(рСервер,,,,,,рSSL);
			Иначе
				рСоединение=Новый HTTPСоединение(рСервер);
			КонецЕсли;			
		Иначе
			Если рПрокси=Неопределено Тогда
				рСоединение=Новый HTTPСоединение(рСервер,рПорт,рПользователь,рПароль,,рТаймаут,рSSL);
			Иначе
				рСоединение=Новый HTTPСоединение(рСервер,рПорт,рПользователь,рПароль,рПрокси,рТаймаут,рSSL);
			КонецЕсли;
		КонецЕсли;
		//
		Если ТипЗнч(рСоединение)<>Тип("HTTPСоединение") Тогда
			СообщитьИВнестиВПротокол("Не удалось создать объект HTTP-соединения!",рПротокол,рПояснять);
		КонецЕсли;
		//
		// вставим на будущее (это иногда имеет смысл кэшировать)
		рПараметры.Вставить("Соединение",рСоединение);
		#КонецОбласти
	Иначе
		рСервер=рСоединение.Сервер;
		рПорт=рСоединение.Порт;
		рТаймаут=рСоединение.Таймаут;
		рПроксиПользователь=рСоединение.Прокси.Пользователь;
	КонецЕсли;
	// а эти всегда берём по итогам установленного соединения
	рПроксиСервер=рСоединение.Прокси.Сервер();
	рПроксиПорт=рСоединение.Прокси.Порт();
	//
	// выводим настройки соединения
	инфо="Соединение:
	|Сервер: "+СокрЛП(рСервер)+",порт: "+Строка(рПорт)+",пользователь: "+СокрЛП(рПользователь)+",таймаут: "+рТаймаут+"
	|краткий формат: "+Строка(рКраткийФормат)+",защищённое: "+Строка(рЗащищённое)+Символы.ПС;
	Если не ПустаяСтрока(рПроксиПользователь) Тогда
		инфо=инфо+"прокси: сервер "+СокрЛП(рПроксиСервер)+",порт "+Строка(рПроксиПорт)+",пользователь "+СокрЛП(рПроксиПользователь);
	Иначе
		инфо=инфо+"прокси не используется";
	КонецЕсли;
	СообщитьИВнестиВПротокол(инфо,рПротокол,рПояснять);
	//
	Если ТипЗнч(рСоединение)<>Тип("HTTPСоединение") Тогда // уже без сообщения,именно выход по ошибке
		Возврат Ложь;
	КонецЕсли;	
	
	рЗапрос=?(рПараметры.Свойство("HTTPЗапрос"),рПараметры.HTTPЗапрос,Неопределено);
	Если ТипЗнч(рЗапрос)<>Тип("HTTPЗапрос") Тогда
		#Область УстановкаЗапроса
		Если рПараметры.Свойство("АдресРесурса") и не ПустаяСтрока(рПараметры.АдресРесурса) Тогда
			рАдресРесурса=рПараметры.АдресРесурса;
		ИначеЕсли рПараметры.Свойство("АдресСкрипта") и не ПустаяСтрока(рПараметры.АдресСкрипта) Тогда
			рАдресРесурса=рПараметры.АдресСкрипта;
		Иначе
			рАдресРесурса="/";
			СообщитьИВнестиВПротокол("Используется пустой адрес ресурса для запроса.",рПротокол,рПояснять);
		КонецЕсли;
		//
		рЗаголовки=Новый Соответствие;
		Если рПараметры.Свойство("ЗаголовкиЗапроса") Тогда
			Если ТипЗнч(рПараметры.ЗаголовкиЗапроса)=Тип("Соответствие") или ТипЗнч(рПараметры.ЗаголовкиЗапроса)=Тип("ФиксированноеСоответствие") Тогда
				рЗаголовки=рПараметры.ЗаголовкиЗапроса;
			КонецЕсли;
		КонецЕсли;
		//
		Если рПараметры.Свойство("ПараметрыЗапроса") Тогда
			Если ТипЗнч(рПараметры.ПараметрыЗапроса)=Тип("Структура")
			или ТипЗнч(рПараметры.ПараметрыЗапроса)=Тип("Соответствие") 
			или ТипЗнч(рПараметры.ПараметрыЗапроса)=Тип("ФиксированноеСоответствие") 
			Тогда
				Если рАдресРесурса<>"/" Тогда
					разд="?";
					Для каждого киз Из рПараметры.ПараметрыЗапроса Цикл
						рАдресРесурса=рАдресРесурса+разд+СокрЛП(киз.Ключ)+"="+СокрЛП(Строка(киз.Значение)); разд="&";
					КонецЦикла;
				КонецЕсли;
			ИначеЕсли ТипЗнч(рПараметры.ПараметрыЗапроса)=Тип("СписокЗначений") Тогда
				// случай,когда был очень важен порядок параметров,и их разместили осознанно именно так; не сортировать!
				Если рАдресРесурса<>"/" Тогда
					разд="?";
					Для каждого знч Из рПараметры.ПараметрыЗапроса Цикл
						рАдресРесурса=рАдресРесурса+разд+СокрЛП(знч.Представление)+"="+СокрЛП(Строка(знч.Значение)); разд="&";
					КонецЦикла;
				КонецЕсли;
			КонецЕсли;
		КонецЕсли;
		//
		рЗапрос=Новый HTTPЗапрос(рАдресРесурса,рЗаголовки);
		//
		Если рПараметры.Свойство("ТелоЗапроса") Тогда
			Если ТипЗнч(рПараметры.ТелоЗапроса)=Тип("Строка") Тогда
				рКодировка=?(рПараметры.Свойство("КодировкаТелаЗапроса"),рПараметры.КодировкаТелаЗапроса,Неопределено);
				Если не ЗначениеЗаполнено(рКодировка) Тогда рКодировка=КодировкаТекста.UTF8 КонецЕсли;
				рИспользоватьБОМ=?(рПараметры.Свойство("ИспользованиеByteOrderMark"),рПараметры.ИспользованиеByteOrderMark,Неопределено);
				Если не ЗначениеЗаполнено(рИспользоватьБОМ) Тогда рИспользоватьБОМ=ИспользованиеByteOrderMark.НеИспользовать КонецЕсли;
				рЗапрос.УстановитьТелоИзСтроки(рПараметры.ТелоЗапроса,рКодировка,рИспользоватьБОМ);
			ИначеЕсли ТипЗнч(рПараметры.ТелоЗапроса)=Тип("ДвоичныеДанные") Тогда
				рЗапрос.УстановитьТелоИзДвоичныхДанных(рПараметры.ТелоЗапроса);
			КонецЕсли;
		ИначеЕсли рПараметры.Свойство("ИмяФайлаТелаЗапроса") Тогда
			// наличие файла не проверяем,считаем,что он есть априорно
			рЗапрос.УстановитьИмяФайлаТела(рПараметры.ИмяФайлаТелаЗапроса);
		КонецЕсли;
		#КонецОбласти
	КонецЕсли;
	Если рПараметры.Свойство("HTTPЗапрос") Тогда
		// удаляем из параметров,чтобы не повторялось в будущем (кэшировать его нам не надо)
		рПараметры.Удалить("HTTPЗапрос");
	КонецЕсли;
	
	// выводим настройки запроса
	инфо="Запрос:
	|Адрес ресурса: "+рЗапрос.АдресРесурса+",заголовк"+?(рЗапрос.Заголовки.Количество()=0,"ов нет","и:");
	Для каждого киз Из рЗапрос.Заголовки Цикл
		инфо=инфо+"
		|     "+СокрЛП(киз.Ключ)+"="+СокрЛП(киз.Значение);
	КонецЦикла;
	Если рПараметры.Свойство("ТелоЗапроса") и ТипЗнч(рПараметры.ТелоЗапроса)=Тип("Строка") Тогда
		инфо=инфо+"
		|Тело запроса:"+Символы.ПС+рПараметры.ТелоЗапроса;
	КонецЕсли;
	СообщитьИВнестиВПротокол(инфо,рПротокол,рПояснять);
	
	рМетодHTTP=?(рПараметры.Свойство("МетодHTTP"),ВРег(рПараметры.МетодHTTP),"");
	Если ПустаяСтрока(рМетодHTTP) Тогда рМетодHTTP="GET" КонецЕсли;
	//
	Если рМетодHTTP="GET" Тогда
		рОтвет=рСоединение.Получить(рЗапрос);
	ИначеЕсли рМетодHTTP="POST" Тогда
		рОтвет=рСоединение.ОтправитьДляОбработки(рЗапрос);
	Иначе
		СообщитьИВнестиВПротокол("Указан не поддерживаемый метод: "+рМетодHTTP+",никакое действие не выполняется!!",рПротокол,рПояснять);
		Возврат Ложь;
	КонецЕсли;
	рПараметры.Вставить("HTTPОтвет",рОтвет);
	
	Возврат Истина;
	
Исключение
	инфо="HTTPВыполнитьЗапрос,общая ошибка: "+ОписаниеОшибки();
	Сообщить(инфо,СтатусСообщения.Важное);
	ЗаписьЖурналаРегистрации("Обмен",УровеньЖурналаРегистрации.Ошибка,,,инфо);
	Возврат Ложь;
КонецПопытки;
КонецФункции

// Выполняет анализ ответа rest-сервиса как объекта HTTPОтвет,заносит в параметры результаты разбора.
// Возвращает успешность (булево),при ошибке возвращает Ложь.
//
// Параметры:
//    HTTPОтвет - объект типа "HTTPСервисОтвет", обязательный; собственно разбираемый ответ;
//    КодСостояния - число, вносимый;
//    Причина - строка, вносимый; если КодСостояния 200, то пуста;
//    ЗаголовкиОтвета - соответствие, вносимый;
//    ТелоКакСтрока - булево; если указан и Истина, то читается тело ответа как строка, для уточнения кодировки используется ключ:
//        КодировкаТелаОтвета - строка или КодировкаТекста, по умолчанию UTF8;
//    ТелоКакДвоичныеДанные - булево; если указан и Истина, то читается тело ответа как двоичные данные;
//    ТелоКакИмяФайла - булево; если указан и Истина, то возвращается имя файла, куда прочитано тело ответа;
//    ТелоОтвета - результат чтения тела ответа, вносимый, если способ чтения тела не указан, то Неопределено;
//    Протокол - текстовый документ, необязательный (по умолчанию пуст и не используется);
//    Пояснять - булево; если Истина, то действия поясняются и в протокол (если ведётся), и сообщениями.
//
Функция HTTPРазобратьОтвет(рПараметры) Экспорт
Попытка
	рПротокол=?(рПараметры.Свойство("Протокол"),рПараметры.Протокол,Неопределено);
	рПояснять=?(рПараметры.Свойство("Пояснять"),рПараметры.Пояснять,Ложь);
	
	Если Не (рПараметры.Свойство("HTTPОтвет") и ТипЗнч(рПараметры.HTTPОтвет)=Тип("HTTPОтвет")) Тогда
		СообщитьИВнестиВПротокол("В структуре параметров не найден ответ сервиса!!",рПротокол,рПояснять);
		Возврат Ложь;
	КонецЕсли;
	рОтвет=рПараметры.HTTPОтвет;
	//
	рПараметры.Вставить("КодСостояния",рОтвет.КодСостояния);
	Если рОтвет.КодСостояния=200 Тогда
		рПараметры.Вставить("Причина","");
	Иначе
		Попытка рПараметры.Вставить("Причина",рОтвет.Причина) Исключение рПараметры.Вставить("Причина","") КонецПопытки;
	КонецЕсли;	
	рПараметры.Вставить("ЗаголовкиОтвета",рОтвет.Заголовки);
	Если рПараметры.Свойство("ТелоКакСтрока") и ТипЗнч(рПараметры.ТелоКакСтрока)=Тип("Булево") и рПараметры.ТелоКакСтрока=Истина Тогда
		рКодировка=КодировкаТекста.UTF8;
		Если рПараметры.Свойство("КодировкаТелаОтвета") и ЗначениеЗаполнено(рПараметры.КодировкаТелаОтвета) Тогда
			Если ТипЗнч(рПараметры.КодировкаТелаОтвета)=Тип("Строка") или ТипЗнч(рПараметры.КодировкаТелаОтвета)=Тип("КодировкаТекста") Тогда
				рКодировка=рПараметры.КодировкаТелаОтвета;
			КонецЕсли;
		КонецЕсли;		
		рПараметры.Вставить("ТелоОтвета",рОтвет.ПолучитьТелоКакСтроку(рКодировка));
	ИначеЕсли рПараметры.Свойство("ТелоКакДвоичныеДанные") и ТипЗнч(рПараметры.ТелоКакДвоичныеДанные)=Тип("Булево") и рПараметры.ТелоКакДвоичныеДанные=Истина Тогда
		рПараметры.Вставить("ТелоОтвета",рОтвет.ПолучитьТелоКакДвоичныеДанные());
	ИначеЕсли рПараметры.Свойство("ТелоКакИмяФайла") и ТипЗнч(рПараметры.ТелоКакИмяФайла)=Тип("Булево") и рПараметры.ТелоКакИмяФайла=Истина Тогда		
		рПараметры.Вставить("ТелоОтвета",рОтвет.ПолучитьИмяФайлаТела());
	Иначе
		СообщитьИВнестиВПротокол("Тело ответа игнорируется,т.к. его тип и способ обработки не указаны!",рПротокол,рПояснять);
		рПараметры.Вставить("ТелоОтвета",Неопределено);
	КонецЕсли;
	//
	Возврат Истина;
Исключение
	инфо="HTTPРазобратьОтвет,общая ошибка: "+ОписаниеОшибки();
	Сообщить(инфо,СтатусСообщения.Важное);
	ЗаписьЖурналаРегистрации("Обмен",УровеньЖурналаРегистрации.Ошибка,,,инфо);
	Возврат Ложь;
КонецПопытки;
КонецФункции

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

Применимо, начиная с 8.3.6.

60

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

Комментарии
Избранное Подписка Сортировка: Древо
1. VmvLer 12.08.19 16:34 Сейчас в теме
не читал подробно, но приветствую.
никакой воды: лаконичное описание и код для тестирования/использования.

не то что опусы тутошних маркетологов - напишут с три короба, замылят глаза картинками, а проку пшик.
mashinist; Yashazz; varius; GreenDragon; Vanch90; +5 1 Ответить
2. Yashazz 2840 12.08.19 18:17 Сейчас в теме
Странное что-то с пробелами после запятых, взяли и исчезли... Извиняюсь, возможно, накосячил при публикации.
3. fr13 624 13.08.19 06:11 Сейчас в теме
В попытке выполнять такой большой участок кода... сомнительное решение. Все возможные ошибки проглатываются и сводятся к одной. Такой код тяжело поддерживать.
Vladimir Litvinenko; dsdred; wowik; Yakud3a; silberRus; FreeArcher; +6 Ответить
4. Yashazz 2840 13.08.19 10:17 Сейчас в теме
(3) Соглашусь. Действительно, логичнее разбить на пошаговые попытки. Переделать?
5. AllexSoft 13.08.19 10:25 Сейчас в теме
Автор любитель условий через ?(,,), сразу видать )
Даю подсказку:
рКодировка=?(рПараметры.Свойство("КодировкаТелаЗапроса"),рПараметры.КодировкаТелаЗапроса,Неопределено);

заменяется на
рПараметры.Свойство("КодировкаТелаЗапроса", рПараметры.КодировкаТелаЗапроса);

и без всяких условий, ну и вся инициализация переменных из свойств аналогично.

А раз так много переменных параметров для запроса требуется, то лучше вынести это в структуру вообще типа
СтруктураПараметровЗапроса = новый Структура("параметр1, параметр2, параметр3", "", "", неопределено);
ну а потом ЗаполнитьЗначенияСвйоств(СтруктураПараметровЗапроса , рПараметры);
все! две строи и параметры инициализированы, и вы точно уверены в полях СтруктураПараметровЗапроса

А здесь зачем то сделано через попытку..
Попытка рПараметры.Вставить("Причина",рОтвет.Причина) Исключение рПараметры.Вставить("Причина","") КонецПопытки;

хотя то же самое что
 Если ОбщегоНазначенияКлиентСервер.ЕстьРеквизитИлиСвойствоОбъекта(рОтвет, "Причина") Тогда рПараметры.Вставить("Причина",рОтвет.Причина) Иначе рПараметры.Вставить("Причина","") КонецЕсли  


А вобще для ODATA неплохо бы процедурку которая умеет собирать параметр filter из структуры отбора или настройки отбора компоновщика скд.
maxopik2; +1 Ответить
6. Yashazz 2840 13.08.19 10:27 Сейчас в теме
(5) Алекс, а это я часть кода резал, неуниверсальную, перед публикацией. Вышло так. Вообще, конечно, ты прав.
7. Yashazz 2840 13.08.19 10:31 Сейчас в теме
(5) Насчёт filter'а для опен даты поищу, вроде где-то делал...
8. AllexSoft 13.08.19 10:37 Сейчас в теме
(7) вот это было бы здорово! у меня никак руки не доходят написать такое, пока использую свои наработки и получается что то типа этого

	ПутьНаСервере = СтруктураПодключения.ИмяПубликации + "/odata/standard.odata/Catalog_ДоговорыКонтрагентов?$format=json&$filter=Owner_Key eq guid'"+СтруктураКонтрагент.Ref_Key+"'";
			
	СвойстваСДатой = Новый Структура("Дата, СрокДействия", '00010101', '00010101');
			
	Результат = ПолучитьДанныеИзODATAвСтруктуру(СтруктураПодключения, ПутьНаСервере,,, СвойстваСДатой);
	
	Для каждого СтруктураДоговор Из Результат.value Цикл
		
		СтруктураПолейПоиска = Новый Структура("Дата, Номер, Контрагент", Новый Структура("ИмяПоля", "Дата"), Новый Структура("ИмяПоля", "Номер"), НайденныйКонтрагент.Ссылка);
		
		НайденныйДоговор = ПолучитьОбъектПоСтруктуреODATA(СтруктураДоговор, "Справочник.ДоговорыКонтрагентов", СтруктураПолейПоиска);
		ЗаполнитьЗначенияСвойств(НайденныйДоговор, СтруктураДоговор,,"Code");

.....
НайденныйДоговор.Записать();

КонецЦикла;


Показать


где ПолучитьДанныеИзODATAвСтруктуру - получает массив структур из ODATA, ПолучитьОбъектПоСтруктуреODATA - по структуре находит объекты в базе или создает их (подобно как ПКО в КД2). Вот сюда бы как раз универсальную замену вот этой строке
ПутьНаСервере = СтруктураПодключения.ИмяПубликации + "/odata/standard.odata/Catalog_ДоговорыКонтрагентов?$format=json&$filter=Owner_Key eq guid'"+СтруктураКонтрагент.Ref_Key+"'";
9. Yashazz 2840 13.08.19 11:02 Сейчас в теме
(8) Вечером доберусь до терминала, где делал это - скопирую и выложу. Хотя у меня это примерно на том же уровне, что и ты привёл пример... Надо вообще?
10. AllexSoft 13.08.19 11:07 Сейчас в теме
(9)
Надо вообще?

думаю в качестве дополнения к статье было бы интересно не только мне.. тем более у меня filter никак не формируется вообще (
11. user1166203 13.08.19 11:59 Сейчас в теме
Спонсор функции - производитель колесиков для мыши :(
OttoBismarck; json; reotem; fotov; Vladimir Litvinenko; +5 Ответить
12. kosmo0 81 15.08.19 10:11 Сейчас в теме
Немного не по статье (раз уж специалисты по работе 1С в интернете собрались).
Можно ли как-то прологировать действия 1с с инетом? В частности работу FTPСоединение. А то один компьютер подключается и нормально забирает и выкладывает файлы. Другой этого не может, хотя конфа одна и та же. Можно конечно потыкать пальцем в небо - давайте попробуем то или это, но хотелось бы видеть действия программы. Или это только сниффером пакеты смотреть?
13. AllexSoft 15.08.19 11:21 Сейчас в теме
(12) по идее включить тех журнал, там наверняка есть события подобного рода. Первое куда я бы смотрел это туда.
15. kosmo0 81 22.08.19 09:12 Сейчас в теме
(13)(14) Спасибо за возможные решения проблемы. Но решил отказаться от FTP в данном случае. Так как не специалист по сетевым технологиям и времени на устранение понадобится довольно много. Плюс надо проверять и изменять из места в котором я не обладаю всеми полномочиями.

зы. Для информации. FTP-сервер расположен на роутере (флешка в usb-порту). Раньше был один роутер, после поломки приобретен от того же производителя, но модель попроще. На старом роутере работало оба обмена использующие FTPСоединение. Но новом только один.

Код который работал и работает:
Соединение.НайтиФайлы("[полный путь к папке]", <ИмяФайла>);

Код который не стал работать:
Соединение.УстановитьТекущийКаталог("[полный путь к папке]");
Соединение.НайтиФайлы(,<ИмяФайла>);

Плюс оказалось что есть чувствительность к регистру букв в полном пути (особенно в наименовании корневого каталога).
14. Yashazz 2840 15.08.19 12:50 Сейчас в теме
(12) Просто ЖР для начала, и каждый шаг писать. Прям вот каждый, и код разобрать на совсем простые шаги. Ну и внимательно смотреть всё - клиент или сервер, какие права у юзера и аккаунта подключения, итд.

Алекс, мне обрубили доступ к тому терминалу. Попробую по черновикам восстановить.
AllexSoft; +1 Ответить
Оставьте свое сообщение

См. также

Простой способ опубликовать базу 1C из дома в интернет, когда Ваш провайдер этого не обеспечивает (3G, 4G модем и т.п.) 24

Статья Системный администратор Нет файла v8 1cv8.cf Бесплатно (free) WEB Облачные сервисы, хостинг

Если у Вас возникла потребность опубликовать из дома во всемирную паутину базу 1С (например, для тестирования), в т.ч. интерфейс OData, HTTP или Web-сервисы, а интернет-провайдер (например, 3G Мегафон) не предоставляет возможности инициировать соединения извне, то в конце статьи Вы найдете простой, быстрый и условно-бесплатный способ это сделать.

вчера в 11:48    1024    uno-c    11       

Самый примитивный HTTP-сервис в мире 161

Статья Программист Нет файла v8 Бесплатно (free) WEB

Пошаговый пример создания простейшего HTTP-сервиса, который генерирует HTML-страницу для поиска товара, а также реализует асинхронное получение данных из базы.

12.09.2019    5830    YPermitin    25       

Свой веб интерфейс к 1С: побеждаем CORS на IIS, сохраняя авторизацию 56

Статья Системный администратор Программист Нет файла v8 Windows Бесплатно (free) WEB Администрирование данных 1С

Если "веб морда" расположена не по тому же адресу, что и публикация 1С (что часто бывает, например, при разработке, публикация 1С на http://localhost/1c, а разрабатываемое веб-приложение на http://localhost:8080) или, например, мы заходим на веб приложение то по ip адресу, то по имени сервера, или просто веб сервер и сервер, на котором опубликована 1С - это разные сервера, то для большинства запросов от браузера к 1С срабатывает политика CORS, которая заключается в том, что браузер сначала посылает запрос OPTIONS, на который сервер должен ответить определенным образом, заголовками, содержащими разрешения, а потом уже (если разрешение есть), браузер посылает основной запрос. В случае, когда в публикации 1С (default.vrd) жестко прописан логин и пароль, разрулить ситуацию можно средствами 1С. В случае же, когда нужно сохранить авторизацию (или используется стандартный интерфейс odata), начинаются проблемы.

20.08.2019    3090    Fragster    7       

Вывод отчетов из Штрих-М Торговое предприятие 5 на кассовое ПО Кассир 5 через веб-сервис 3

Статья Системный администратор Программист Нет файла v8 1cv8.cf Розничная и сетевая торговля (FMCG) Россия УУ Windows Розничная торговля Бесплатно (free) WEB

Универсальный механизм вывода отчетов товароучетной системы Штрих-М Торговое предприятие в кассовое ПО Кассир 5 посредством веб-сервиса.

14.08.2019    874    Van2507    1       

Использование HTTP-сервиса для создания "фронтенда" HTML/CSS/jQuery. Продолжение 51

Статья Программист Расширение (cfe) v8 1cv8.cf Бесплатно (free) WEB

Получение изображений из информационной базы и отправка файлов через "фронт" на HTML/CSS/JS.

08.08.2019    3197    Sedaiko    1       

1Script.Web. Интернет-приложения на языке 1С 119

Статья Программист Нет файла v8 Бесплатно (free) WEB OneScript

Запросы рынка таковы, что любое современное клиент-серверное приложение должно иметь веб-интерфейс. Почему бы не писать такие приложения на языке 1С? Андрей Овсянкин расскажет о возможностях разработки веб-приложений на базе 1Script, рассмотрит перспективы этого направления и в качестве демонстрации покажет «боевое» веб-приложение на новом движке – кроссплатформенную консоль администрирования парка кластеров 1С.

20.05.2019    11539    Evil Beaver    32       

Неверные остатки на сайте битрикс 2

Статья Программист Нет файла v8 УТ11 Бесплатно (free) WEB

Исправление процедуры выгрузки остатков на сайт битрикс из УТ 11

25.04.2019    1750    distorshion    4       

Отправка файлов через SOAP. SOAP with attachments, MTOM 38

Статья Программист Нет файла v8 1cv8.cf Россия Бесплатно (free) WEB

В продолжение «своеобразной» поддержки 1С протокола SOAP, описанной в https://infostart.ru/public/965259/, опишу еще одну особенность. 1С не поддерживает возможность отправки файлов-вложений. Для решения этой проблемы пришлось самостоятельно писать формирование пакетов SOAP и разбор ответов сервера.

18.04.2019    2730    mysm    2       

HTML-клиент у конфигурации 1С 137

Статья Программист Нет файла v8 Бесплатно (free) WEB

Приветствую. В этой публикации опишу свой опыт создания html-клиента для конфигурации 1С с помощью http-сервисов. HTML-клиент в этом случае - это frontend (html + css+ js), который генерирует и выдает пользователю конфигурация + backend, который тоже реализован в этой же конфигурации.

17.04.2019    10832    Smaylukk    119       

Парсинг сайтов из 1С на примере ломбарды.рф с помощью XPATH для ДокументDOM 67

Статья Программист Нет файла v8 Бесплатно (free) WEB

На всякую хитрую гайку всегда найдется болт с резьбой (с)

01.04.2019    7051    starik-2005    33       

Логируй больше! 1С + UPD + GELF + Graylog 27

Статья Системный администратор Программист Нет файла v8 Windows Бесплатно (free) Практика программирования Администрирование данных 1С WEB Разработка

Наличие производительной платформы управления логами - это жизненно важный элемент в ландшафте систем с высокой активностью. Рассмотрим один из подходов логирования активности систем на платформе 1С в Graylog.

26.02.2019    5154    Lars Ulrich    15       

Создание телеграм бота с гугл авторизацией, обратными вызовами и уведомлениями об обновлении через сервер-маршрутизатор 157

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) WEB

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

07.11.2018    17099    🅵🅾️🆇    40       

Мой опыт небольшого проекта с веб-сервисами (Часть 2) 20

Статья Программист Нет файла v8 Windows Бесплатно (free) WEB

Продолжение публикации по веб-сервису для реализации странички с выводом данных.

05.10.2018    4198    alex_bitti    0       

Как запустить работу Google Maps в поле HTML формы 1С? 25

Статья Программист Нет файла v8 Россия Бесплатно (free) Практика программирования WEB

Как справиться с передачей события в поле HTML, если надо передать данные. Переход на новую версию Google Maps.

26.09.2018    6309    Green2    10       

Мой опыт небольшого проекта с веб-сервисами (Часть 1) 22

Статья Программист Нет файла v8 Windows Бесплатно (free) WEB

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

08.08.2018    6404    alex_bitti    33       

Создание web-площадки на технологиях 1С, или как Водоканал сделал "Личный кабинет потребителя" 54

Статья Программист Нет файла v8 Энергетика и ЖКХ УУ Управление взаимоотношениями с клиентами (СRM) Дебиторская и кредиторская задолженность Бесплатно (free) WEB

Гончаров Максим делится опытом создания «Личного кабинета потребителя» на сайте водоканала. Он описывает архитектуру системы и объясняет, какую роль в ней играют технологии: «Битрикс», OData, веб-сервисы, «1С:БСП». Также в статье раскрываются возможности использования подсистемы «Анкетирование» в «1С:БСП» как конструктора документов.

25.06.2018    10329    maxx    31       

На что действительно способны HTTP-сервисы 169

Статья Программист Нет файла v8 Бесплатно (free) WEB

В статье я собираюсь не только рассказать вам про HTTP-сервисы 1С, но и показать много прикольных слайдов с картинками. Я думаю, будет весело, и вы найдете для себя что-то полезное.

14.06.2018    22359    dalgaso2010    44       

Подготовка тестового контура с помощью gitlab-ci и Яндекс.Диска 18

Статья Системный администратор Нет файла v8 1cv8.cf Бесплатно (free) WEB

В статье описан пример использования gitlab-ci для копирования продуктовой базы в Яндекс.Диск и разворачивания на другом контуре.

04.05.2018    7142    pallid    0       

Запуск Apache 2.4 с модулем 1С внутри Docker контейнера 87

Статья Системный администратор Программист Нет файла v8 Linux Бесплатно (free) Администрирование данных 1С WEB docker Apache

Про Apache и про Linux слышали, наверное, все. А вот про Docker пока нет, но он сильно набирает популярность последнее время и не зря. Поделюсь своим опытом и дам пошаговую инструкцию настройки веб-сервера Apache с модулем 1С внутри Docker контейнера на Linux хосте. При этом сам сервер 1С может находиться совсем на другой машине и на другой операционной системе. Это не важно, главное чтобы Apache смог достучаться до сервера 1С по TCP. В статье дам подробное пояснение по каждой используемой команде со ссылками на документацию по Docker, чтобы не создавалось ощущение непонятной магии. Также прилагаю git репозиторий с описанием всей конфигурации, можете попробовать развернуть у себя буквально за 10 минут.

04.04.2018    17708    petr.myazin    35       

1С:Альфа-Авто Автосалон Автосервис: обмен с сайтом (не Битрикс) ч.6 2

Статья Программист Нет файла v8 1cv8.cf Автомобили, автосервисы Бесплатно (free) WEB

Принцип обмена данными из 1С с сайтом (на MySQL) и выдачи (публикации) этих данных по запросу. PHP-Скрипт публикации выборки данных сайта работающего на WordPress.

19.03.2018    5840    osivv    0       

Интеграция 1С УТ 11.2 и Битрикс. Настройка выгрузки старой цены для интернет-магазина 8

Статья Программист Нет файла v8 УТ11 Россия УУ Розничная торговля Бесплатно (free) WEB

Настройки позволят вытащить информацию о старой цене из 1С и передать её в CMS Битрикс.

24.01.2018    7841    Consultant_1C    2       

1С:Альфа-Авто Автосалон Автосервис: обмен с сайтом (не Битрикс) ч.3 3

Статья Программист Нет файла v8 1cv8.cf Автомобили, автосервисы УУ Windows Бесплатно (free) WEB

Принцип обмена данными из 1С с сайтом (на MySQL) и выдачи (публикации) этих данных по запросу. PHP-Скрипт автоматической загрузки данных из файла данных в формате CSV в базу данных сайта работающего на WordPress.

09.01.2018    6728    osivv    0       

Готовим Soap для Web-сервисов. Рецепты 130

Статья Программист Нет файла v8 Россия Windows Бесплатно (free) WEB

В статье описаны различные варианты обмена данными с web-сервисами по протоколу Soap, основанные на личном опыте.

28.12.2017    28506    987ww765    27       

УкрПочта - групповая проверка трек-номеров 9

Статья Программист Нет файла v8 Украина Бесплатно (free) WEB

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

23.10.2017    6103    abavas    2       

1С:Альфа-Авто Автосалон Автосервис: обмен с сайтом (не Битрикс) 5

Статья Программист Нет файла v8 1cv8.cf Автомобили, автосервисы Windows Бесплатно (free) WEB

Принцип обмена данными из 1С с сайтом (на MySQL) и выдачи (публикации) этих данных по запросу.

16.10.2017    8637    osivv    3       

1С, oauth2, Google API и Google Merchant. Сбор данных и парсинг 18

Статья Программист Нет файла v8 УТ10 Россия Бесплатно (free) Практика программирования WEB

Всем привет. Стала задача, собрать данные с Google Merchants и внести их в 1С, для более детального анализа того, что сейчас показывается, что нет и какие проблемы при этом есть. Если кому это интересно, прошу под кат.

14.09.2017    13079    Mi11er    8       

Отслеживание почтовых сообщений парсингом страницы (УкрПочта) 5

Статья Программист Нет файла v8 Украина Бесплатно (free) WEB

Когда официальное API есть, но по факту не работает. Возвращаемся к старому способу - парсинг страниц.

17.07.2017    7693    abavas    2       

XPath и пространства имен на примере разбора файла ответа сервиса геокодирования Яндекс 33

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования WEB

Есть некоторые нюансы разбора с помощью Xpath xml-файла, в котором используются несколько пространств имен. Приведен разбор такого файла на примере файла ответа сервиса геокодирования Яндекс.

14.04.2017    9761    brr    6       

PHP OData драйвер 17

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) WEB

Удобный доступ к OData данным через SQL синтаксис

03.04.2017    8102    virtex3    4       

Online телефонный справочник из 1С: Зарплата и управление персоналом 33

Статья Системный администратор Программист Нет файла v8 ЗУП3.x Россия Управление персоналом (HRM) Бесплатно (free) WEB

В интернете представлено много реализаций online телефонных справочников организаций. Есть справочники, которые использует для хранения информации базу Active Directory (LDAP), есть справочники, которые реализованы с использованием СУБД (например, MySQL). Но я не нашел справочника, который использует информацию из базы 1С. Далее я рассмотрю данную разработку.

10.03.2017    18964    ruha    14       

Веб-сервисы и 1С: «Здравствуй, Name», время-деньги и «Жизнь» 75

Статья Программист Нет файла v8 Бесплатно (free) WEB

Несколько статей о создании веб-сервисов на платформе 1С

09.03.2017    20912    hayroff    11       

Интерактивный ввод капчи 26

Статья Программист Нет файла v8 Бесплатно (free) WEB

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

17.02.2017    8428    gaabora    3       

Отправка PUT запроса средствами 1С 8.3 65

Статья Программист Нет файла v8 Россия Бесплатно (free) Практика программирования WEB

HTTP запрос с использованием метода PUT средствами 1С 8.3 на практике - проблема и решение

16.02.2017    20249    hspeed79    16       

Нагрузочное тестирование сервера 1С при использовании WEB сервисов 51

Статья Системный администратор Программист Нет файла v8 ИТ-компания Бесплатно (free) Производительность и оптимизация (HighLoad) Внешние источники данных WEB

Проведение нагрузочного тестирования WEB-сервисов, развернутых на платформе 1С. Целью тестирования является ознакомление с возможностями платформы 1С при работе с большим количеством запросов через опубликованные WEB сервисы на IIS 7.5

01.02.2017    22911    BraunAlex    34       

Еще немного об обмене на web-сервисах 18

Статья Программист Нет файла v8 Россия Бесплатно (free) WEB Перенос данных из 1C8 в 1C8

Расскажу о собственном опыте по передаче данных через web-сервисы

26.08.2016    10460    savostin.alex    8       

HOWTO: создание и отладка HTTP-сервиса в 1С:Предприятие 123

Статья Программист Нет файла v8 1cv8.cf Россия Бесплатно (free) WEB Практика программирования Универсальные функции

Статья о том, как можно быстро создать HTTP-сервис в 1С:Предприятие и как выполнять его отладку.

25.07.2016    39280    serg_infostart    19       

SOAP-сервисы с предварительной Cookie-аутентификацией 16

Статья Программист Нет файла v8 Бесплатно (free) WEB

Платформа 1С не позволяет использовать cookie при работе со статичной WS-ссылкой или WS-прокси. Вследствие этого работа со многими веб-сервисами крупных поставщиков (например, DHL) напрямую невозможна.

05.06.2016    8996    blackschool    1       

Google Analytics API, Oauth2.0 и 1c8 51

Статья Системный администратор Нет файла v8 1С:Франчайзи, автоматизация бизнеса Windows Бесплатно (free) Практика программирования WEB

Обращение к Google Analytics API, Протокол Oauth 2.0 и запросы от 1С:8 без авторизации пользователя

02.05.2016    21678    Ольга_tmp    18       

HTTP-сервисы для тех, кто ничего не понимает в WEB 426

Статья Программист Нет файла v8 Windows Бесплатно (free) WEB

Если вы ничего не понимаете в WEB технологиях и такие слова, как json, get, post и прочее для вас ничего не значат и вы просто заядлый 1С-ник до мозга костей, но вам кровь из носу надо подружить 1С со сторонними приложениями или сайтом, то эта статья для вас

21.04.2016    100234    YAGolova    55       

Дай дернуть-2! Обращение к веб-сервисам с помощью подручных средств 97

Статья Программист Нет файла v8 Бесплатно (free) WEB

Как показала практика, о веб-сервисах знает почти каждый программист, но о том, как их готовить, - весьма ограниченный круг. Давайте интереса ради замутим сервис и дернем его с помощью простого подручного средства - "Бумеранг"!

21.04.2016    29850    starik-2005    32       

Отладка обмена с web-сайтом на Битрикс 71

Статья Системный администратор Программист Нет файла v8 Windows Бесплатно (free) WEB

Часто возникает необходимость отладки обмена между 1С и web-сайтом на Битрикс. Разберемся, какие инструменты есть для этого...

04.04.2016    14912    vital1c    6       

.Net в 1С. На примере использования HTTPClient, AngleSharp. Удобный парсинг сайтов с помощью библиотеки AngleSharp, в том числе с авторизацией аля JQuery с использованием CSS селекторов. Динамическая компиляция 110

Статья Программист Нет файла v7.7 v8 Windows Бесплатно (free) Практика программирования WEB

Часто приходится парсить сайты, в том числе с авторизацией, перескакивая со страницы на страницу по ссылкам. Тот, кто занимался вэб программированием, знает, как удобно использовать JQuery и CSS селекторы. На .Net написана очень удобная библиотека AngleSharp. Я покажу, как с её помощью можно значительно облегчить себе труд.

10.03.2016    48209    Serginio    33       

.Net в 1С. Асинхронные HTTP запросы, отправка Post нескольких файлов multipart/form-data, сжатие трафика с использованием gzip, deflate, удобный парсинг сайтов и т.д. 37

Статья Программист Нет файла v7.7 v8 Windows Бесплатно (free) Практика программирования Разработка внешних компонент WEB

Очень часто нужно при работе с HTTP сервисами или сайтами использовать Асинхронные HTTP запросы, отправку на сервер нескольких файлов, использование сжатия трафика. Эта статья про то, как этого легко добиться.

09.03.2016    25259    Serginio    22       

Управление магазином ECWID из 1С 11

Статья Программист Нет файла v8 Windows Бесплатно (free) WEB

Вероятно многие (в том числе и я) используют для поддержки интернет-магазина стороннего поставщика, выплачивая ему энную сумму денег в месяц. Я выбрал ECWID. Не реклама, но не жалуюсь. Услуги вполне качественные. В этой статье пойдет речь об инструментах, с помощью которых можно из 1С через API Эквида общаться с их движком.

01.02.2016    9636    Sardukar    3       

Дай дернуть! О веб-сервисах, Linux'ах и добрых поисковых сайтах 60

Статья Программист Нет файла v8 1cv8.cf Linux Бесплатно (free) Инструментарий разработчика Администрирование данных 1С WEB

О веб-сервисах, апачах и *nix'ах. - установим на новенький убунту старенький апач с php. - дернем сервис из php-скрипта. - создадим приложение, позволяющее дергать произвольный сервис с произвольными данными. - ну и что там получится по пути в лес...

30.12.2015    22426    starik-2005    4