Доступ из базы 1С к стандартному интерфейсу Odata базы 1С, в которой заведен пользователь

24.02.21

Интеграция - WEB-интеграция

Есть база, с пользователем/паролем, нужно подключиться к Odata из другой базы 1С, получить элементы справочника.

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

У меня возникла необходимость получения элементов справочника из базы, опубликованной на веб-сервере, через OData (в этой базе заведен пользователь и пароль). 

Первая ошибка, с которой я столкнулась, еще при попытке подключения из браузера (см.ниже), решилась просто: с помощью метода  "УстановитьСоставСтандартногоИнтерфейсаOData([МассивМетаданных])".

{
"odata.error": {
"code": "8",
"message": {
"lang": "ru",
"value": "Сущность 'Catalog_Маркет' не найдена"
}
}
}

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

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

Код для подключения к OData — обычный,  см. ниже: 

//создаем соединение
Попытка    		
		HTTPСоединение = Новый HTTPСоединение(СтруктураСоединения.СерверИсточник);
	Исключение
		Сообщение.Текст = "Не удалось соединиться с сервером: " + 	СтруктураСоединения.СерверИсточник;
		Сообщение.Сообщить();
		Сообщение.Текст = ОписаниеОшибки();
		Сообщение.Сообщить();
		
		Возврат Неопределено;
КонецПопытки;

//формируем URL
АдресРесурса = "/[имя базы на веб-сервере]/odata/standard.odata/Catalog_[Имя справочника]?$format=application/json"; 

//создаем  http-запрос
HTTPЗапрос = Новый HTTPЗапрос(АдресРесурса); 
	
	Попытка
		// Получаем ответ сервера в виде объекта HTTPОтвет.
		Ответ = HTTPСоединение.Получить(HTTPЗапрос); 
		
		//обработаем ответ, если нужно
		Если Ответ.КодСостояния > 300 тогда 

		КонецЕсли; 
        
        //получаем ответ в том виде, который нам нужен

		//ТелоОтвета = Ответ.ПолучитьТелоКакСтроку();     		
		ТелоОтвета = Ответ.ПолучитьТелоКакПоток(); 

	Исключение

		Сообщение.Текст = ОписаниеОшибки();
		Сообщение.Сообщить();

	КонецПопытки; 	
	

Я посмотрела заголовки на открытой странице базы (изображение к публикации) и сравнила их с теми, которые я передавала в http-запросе.


Оказалось, что  мне нужно было в http-запросе указать заголовок Autorization (у меня базовая авторизация, по логину паролю, закодированному в формате base64, есть еще Digital, но в нее я не углублялась, потому что в моем случае в ней нет необходимости — моя база видна только в локальной сети).

Дальше казалось все просто — я закодировала логин и пароль в нужном формате следующим образом (есть еще вариант, как это сделать, с меньшим количеством строк кода, но я сделала так):


	ПотокВПамяти = Новый ПотокВПамяти();
	ЗаписьДанных = Новый ЗаписьДанных(ПотокВПамяти);
	ЗаписьДанных.ЗаписатьСтроку([тут логин и пароль]);
		
	ДД = ПотокВпамяти.ЗакрытьИПолучитьДвоичныеДанные();
	
	СтрокаЛогинПароль = Base64Строка(ДД);
	Заголовки.Вставить("Authorization" , "Basic "+СтрокаЛогинПароль);

И...не сработало —  все та же ошибка авторизации, с кодом ответа 401...

По причине, что при преобразовании строки важна как кодировка текста, так и разделитель строк: его быть не должно. Я после создания записи данных убираю разделитель строк: 

ЗаписьДанных.РазделительСтрок = "";

 И вуаля, все работает. Подключение и получение данных из базы 1С через OData к другой базе отрабатывает как нужно.

Публикация, которая мне помогла, спасибо автору): //infostart.ru/public/392252/

 

	ЗаписьДанных.РазделительСтрок = "";

 

интеграция интерфейс OData

См. также

Интеграция Альфа Авто 5 / Альфа Авто 6 и AUTOCRM / Инфотек

Сайты и интернет-магазины WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 1С:Управление торговлей 11 Автомобили, автосервисы Россия Управленческий учет Платные (руб)

Интеграционный модуль обмена между конфигурацией Альфа Авто 5 и Альфа Авто 6 и порталом AUTOCRM. Данный модуль универсален. Позволяет работать с несколькими обменами AUTOCRM разных брендов в одной информационной базе в ручном и автоматическом режиме. Без существенных изменений типовой конфигурации. Проверено с брендами: Интеграция 1С и GEELY Интеграция 1С и HAVAL Интеграция 1С и KIA Интеграция 1С и FORD Интеграция 1С и LADA ГАРАНТИЯ 100% ВНЕДРЕНИЯ!

36000 руб.

03.08.2020    15665    9    17    

10

Модуль для обмена "1С:Предприятие 8. УАТ. ПРОФ" с FortMonitor

WEB-интеграция 8.3.8 Конфигурации 1cv8 Автомобили, автосервисы Беларусь Украина Россия Казахстан Управленческий учет Платные (руб)

Расширение предназначено для конфигурации "1С:Предприятие 8. Управление Автотранспортом. ПРОФ". Функционал модуля: 1. Заполнение регистров сведений по подсистеме "Мониторинг", а именно: события по мониторингу, координаты по мониторингу, пробег и расход по мониторингу, текущее местоположение ТС по мониторингу 2. Заполнение путевого листа: пробег по мониторингу, время выезда/заезда, табличная часть ГСМ, места стоянок по геозонам. 3. Отчеты по данным загруженным в регистры сведений. 4. Предусмотрена автоматическая загрузка данных в фоновом режиме (условия работы данной загрузке читайте в описании товара) Модуль работает без включенной константы по настройкам мониторинга. Модуль формы предоставляется с открытым кодом, общий модуль защищен. Любой заинтересованный пользователь, имеет возможность скачать демо-версию расширения.

22656 руб.

25.05.2021    12811    30    8    

10

Интеграция 1С — Битрикс24. Обмен задачами

Сайты и интернет-магазины Интеграция WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 Управленческий учет Платные (руб)

Интеграция 1С и Битрикс24. Разработка имеет двухстороннюю синхронизацию 1С и Битрикс24 задачами. Решение позволяет создавать пользователя в 1С из Битрикс24 и наоборот. Данная разработка технически подходит под все основные конфигурации линейки продуктов 1С:Предприятие 8.3 (8.3.18.1289). При приобретении предоставляется 1 месяц бесплатных обновлений разработки. Доступна демо-версия продукта с подключением Вашего Битрикс24

5040 руб.

04.05.2021    17435    6    15    

13

[Расширение] БОР-Навигатор.Культура

Зарплата Бюджетный учет WEB-интеграция Обмен с ГосИС Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бюджетный учет Платные (руб)

Расширение конфигурации, включающее в себя объекты, необходимые для подготовки и сдачи отчета "Штатная численность" системы "БОР-Навигатор.Культура" в программе "1С:Зарплата и кадры государственного учреждения", редакция 3.1.

8400 руб.

01.02.2019    25691    9    0    

7

Интеграция с сервисом vetmanager

WEB-интеграция Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Бытовые услуги, сервис Платные (руб)

Внешняя обработка разрабатывалась для загрузки документов из Ветменеджер в 1С: Бухгалтерия 3.0

12000 руб.

02.02.2021    16262    41    49    

22
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. kirillkr 29 24.02.21 14:44 Сейчас в теме
(0)
Сам доходил до такого же, пока не попробовал авторизацию средствами самого HTTPСоединение. Если передать логин и пароль - пройдет Basic авторизация без ручного кодирования и добавления заголовка.
ovasiliev; +1 Ответить
2. user823999 21 24.02.21 15:05 Сейчас в теме
(1)
же, пока не попробовал авторизацию средствами самого HTTPСоединение. Если передать логин и пароль - пройдет Basic авторизация без ручного кодирования и добавления заголовка.

Спасибо, попробую такой вариант, я что-то до этого не додумалась.
3. ltfriend 951 24.02.21 18:57 Сейчас в теме
Авторизация в одну строку при создании HTTPСоединения
Новый HTTPСоединение("www.excample.com",  , ИмяПользователя, Пароль)
bashta.aleksey; dsdred; Cmapnep; valeraContek; kondrat230386; +5 Ответить
4. dsdred 3231 01.03.21 10:39 Сейчас в теме
Иногда нужно просто прочитать статью в которой уже все разжевано. Например: https://infostart.ru/1c/articles/885287/


перСервер = "127.0.0.1";
перПользователь = "Администратор (ОрловАВ)";
перПароль = "";

//Формируем запрос для OData
перРесурсНаСервере = "/DemoEnterprise2_4_3_145/odata/standard.odata/";	
перРесурсНаСервереФин = перРесурсНаСервере + 
"Catalog_Склады?$select=Ref_Key,Description&$filter=DeletionMark eq false and IsFolder eq false&$format=json;odata=nometadata";
HTTPСоединение = Новый HTTPСоединение(перСервер,,перПользователь,перПароль);
Ответочка = HTTPОтвет.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8);
Показать


И все работает
5. user823999 21 01.03.21 10:54 Сейчас в теме
(4)
перСервер = "127.0.0.1";
перПользователь = "Администратор (ОрловАВ)";
перПароль = "";

//Формируем запрос для OData
перРесурсНаСервере = "/DemoEnterprise2_4_3_145/odata/standard.odata/";
перРесурсНаСервереФин = перРесурсНаСервере +
"Catalog_Склады?$select=Ref_Key,Description&$filter=DeletionMark eq false and IsFolder eq false&$format=json;odata=nometadata";
HTTPСоединение = Новый HTTPСоединение(перСервер,,перПользователь,перПароль);
Ответочка = HTTPОтвет.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8);
Ну, это то же самое, что и в (2) предложили.

Меня смутило в данном случае то, что написано в синтаксис-помощнике про HTTP-соединение:
HTTPСоединение (HTTPConnection)
По умолчанию
Синтаксис:
Новый HTTPСоединение(<Сервер>, <Порт>, <Пользователь>, <Пароль>, <Прокси>, <Таймаут>, <ЗащищенноеСоединение>, <ИспользоватьАутентификациюОС>)
Параметры:
<Сервер> (обязательный)
Тип: Строка. 
Хост сервера, с которым осуществляется соединение.
Примечание: Имя хоста не должно содержать указание протокола. Например, example.com.
<Порт> (необязательный)
Тип: Число. 
Порт сервера, с которым осуществляется соединение. 
Значение по умолчанию для HTTP соединений равно 80, для защищенных HTTPS соединений - 443.
Значение по умолчанию: порт по умолчанию для используемого протокола.
<Пользователь> (необязательный)
Тип: Строка. 
Имя пользователя на указанном сервере.
<Пароль> (необязательный)
Тип: Строка. 
Пароль пользователя на указанном сервере.
Показать
Что имя пользователя и пароль на указанном сервере... Собственно, я поэтому искала другой вариант.
6. dsdred 3231 01.03.21 11:08 Сейчас в теме
(5) Да тоже самое что во 2.

на счет "Пароль пользователя на указанном сервере."
Скорее всего это связано с "ИспользоватьАутентификациюОС"
Оставьте свое сообщение