Доступ из базы 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

См. также

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

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

57600 руб.

26.11.2024    1562    1    1    

4

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

Интеграционный модуль обмена между конфигурацией Альфа Авто 5 и Альфа Авто 6 и порталом AUTOCRM. Данный модуль универсален. Позволяет работать с несколькими обменами AUTOCRM разных брендов в одной информационной базе в ручном и автоматическом режиме.

36000 руб.

03.08.2020    18573    20    22    

18

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

Интеграция 1С и Битрикс 24. Разработка имеет двухстороннюю синхронизацию 1С и Bitrix24 задачами. Решение позволяет создавать пользователя в 1С из Битрикс24 и наоборот. Данная разработка технически подходит под все основные конфигурации линейки продуктов 1С:Предприятие 8.3 (платформа начиная с 8.3.23): 1С:Управление торговлей, 1С:Управление Нашей фирмой 3, 1С:Комплексная автоматизация 2, Объединенное решение: Модуль 1С:CRM 3 (3.0.21.3) +1С:ERP Управление предприятием 2. При приобретении предоставляется 1 месяц бесплатных обновлений разработки. Доступна демо-версия продукта с подключением Вашего Битрикс24

7200 руб.

04.05.2021    20719    13    19    

18

WEB-интеграция Программист Бизнес-аналитик Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Оптовая торговля, дистрибуция, логистика ИТ-компания Платные (руб)

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

14400 руб.

20.12.2024    478    2    0    

5

Обмен с ГосИС WEB-интеграция Бухгалтер Пользователь Платформа 1С v8.3 Управляемые формы 1С:Комплексная автоматизация 1.х 1С:Бухгалтерия 2.0 1С:Управление торговлей 10 1С:Управление производственным предприятием 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия государственного учреждения 1С:Документооборот 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Платные (руб)

Обработка является альтернативой механизму, разработанному фирмой 1С и заполняющему реквизиты контрагента по ИНН или наименованию. Не требуется действующей подписки ИТС. Вызывается как внешняя дополнительная обработка, т.е. используется, непосредственно, из карточки контрагента. Заполнение по ИНН или наименованию реквизитов контрагента по данным сайта ФНС (egrul.nalog.ru) для БП 2.0, БП 3.0, БГУ 1.0, БГУ 2.0, УТ 10.3, УТ 11.x, КА 1.1, КА 2.x, УПП 1.x, ERP 2.x, УНФ 1.5, УНФ 1.6, УНФ 3.0, ДО 2.1

2400 руб.

28.04.2016    92199    184    217    

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

Спасибо, попробую такой вариант, я что-то до этого не додумалась.
3. ltfriend 24.02.21 18:57 Сейчас в теме
Авторизация в одну строку при создании HTTPСоединения
Новый HTTPСоединение("www.excample.com",  , ИмяПользователя, Пароль)
bashta.aleksey; dsdred; Cmapnep; valeraContek; kondrat230386; +5 Ответить
4. dsdred 3777 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 22 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 3777 01.03.21 11:08 Сейчас в теме
(5) Да тоже самое что во 2.

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