Имя: Пароль:
1C
1С v8
Http-Сервисы:Обмен данными
0 applesound
 
08.07.20
11:22
Добрый день.
Настраиваю выгрузку контрагентов из БП в УТ с помощью http-сервиса по заданному ИНН.
На стороне БП:
Http-сервис
Имя: Exchange
Синоним: Exchange
Корневой URL: Exchange

Шаблон URL
Имя: GetAnyRequest
Синоним: GetAnyRequest
Шаблон: /GetAnyRequest

Метод
Имя: POST
Синоним: POST
HTTP-метод: POST
Обработчик:
Функция GetAnyRequestGET(Запрос)
JSON_Struktura = Запрос.ПолучитьТелоКакСтроку("UTF-8");

ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(JSON_Struktura);
ЗапросПараметры = ПрочитатьJSON(ЧтениеJSON);
ЧтениеJSON.Закрыть();

Запрос = Новый Запрос;
Запрос.Текст = ЗапросПараметры.Запрос;
Для Каждого СтрСтр Из ЗапросПараметры.Параметры Цикл
Результат = "";
Значение1 = СтрЗаменить(СтрСтр.Значение,";",""); //запрет кода 1с с двумя и более операторами
Выполнить("Результат = " + Значение1);
Запрос.УстановитьПараметр(СтрСтр.Ключ,Результат);
КонецЦикла;
ТЗ = Запрос.Выполнить().Выгрузить();
Текст = ЗначениеВСтрокуВнутр(ТЗ);

Ответ = Новый HTTPСервисОтвет(200);
Ответ.УстановитьТелоИзСтроки(Текст);
Возврат Ответ;
КонецФункции
////////////////////////////////////////////////////////////­////////////////////////////////////////////////////////////­///////////////
На стороне УТ. Обработка
Реквизиты:
ИмяКомпьютера (тип.строка)
ИНН (тип.строка)
Команда: Получить
//Пишем процедуру обращения к HTTP- сервису.
//Описываем запрос который будет выполнен в другой базе.
//Заворачиваем запрос в JSON.
//Делаем POST-запрос к адресу http-сервиса.
//Получаем текст из тела ответа.
//Преобразуем ее в Таблицу значений методом ЗначениеИзСтрокиВнутр.

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

&НаСервере
Процедура ПолучитьНаСервере()
//Реквизиты обработки
РеквизитИмяКомпьютера = Строка(Элементы.ИмяКомпьютера);
РеквизитИНН = Строка(Элементы.ИНН);

//Описываем запрос который будет выполнен в другой базе.
ТекстЗапроса = "ВЫБРАТЬ
| Контрагенты.Наименование,
| Контрагенты.ИНН,
| Контрагенты.НаименованиеПолное
|ИЗ
| Справочник.Контрагенты КАК Контрагенты
|ГДЕ
| Контрагенты.ИНН = &ИНН";

Стр = Новый Структура;
Стр.Вставить("Запрос", ТекстЗапроса);
Параметры1 = Новый Структура;
Параметры1.Вставить("ИНН","РеквизитИНН");
Стр.Вставить("Параметры",Параметры1);

//Заворачиваем запрос в JSON.
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, Стр);
СтрокаJSON = ЗаписьJSON.Закрыть();

//Делаем POST-запрос к адресу http-сервиса.
Пользователь = "admin";
Пароль = "123";
Запрос = Новый HTTPЗапрос;
Запрос.АдресРесурса = "/GetAnyRequest";

Запрос.УстановитьТелоИзСтроки(СтрокаJSON, "UTF-8");

//Получаем текст из тела ответа.
Соединение2 = Новый HTTPСоединение(РеквизитИмяКомпьютера+"/BPdemo/hs/Exchange",,Пользователь,Пароль);
ОтветHTTP = Соединение2.ОтправитьДляОбработки(Запрос);

//Преобразуем ее в Таблицу значений методом ЗначениеИзСтрокиВнутр.
ТекстТЗ = ОтветHTTP.ПолучитьТелоКакСтроку();
Если ЗначениеИзСтрокиВнутр(ТекстТЗ) Тогда
ТЗ2 = ЗначениеИзСтрокиВнутр(ТекстТЗ);
Для Каждого Стр Из ТЗ2 Цикл
Сообщить(Стр.Код + " " + Стр.Наименование+ " " + Стр.Наименование);
КонецЦикла;
КонецЕсли;

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

////////////////////////////////////////////////////////////­///////////////////////////////////////////
При попытке получить контрагента получаю ошибку:

Ошибка работы с Интернет: Couldn't resolve host name
{ВнешняяОбработка.ВнешняяОбработка1.Форма.Форма.Форма(50)}: ОтветHTTP = Соединение2.ОтправитьДляОбработки(Запрос);
{ВнешняяОбработка.ВнешняяОбработка1.Форма.Форма.Форма(10)}: ПолучитьНаСервере();

по причине:
Ошибка работы с Интернет: Couldn't resolve host name

В чем может быть беда? Где не досмотрел?


Большую часть материала взял из http://catalog.mista.ru/public/955078/
1 Garykom
 
гуру
08.07.20
11:25
(0) КПП не досмотрел
2 Волшебник
 
модератор
08.07.20
11:32
Couldn't resolve host name
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.