NAviADdress API
1C
Как использовать API платформы Naviaddress
вместе с ERP-системой 1С
Naviaddress API может быть легко интегрирован в платформу на базе 1С для хранения расширенной информации о контрагенте или месторасположении актива. Давайте рассмотрим порядок работы с API с помощью языка 1С.

Для начала давайте создадим на карточке контрагенты следующие компоненты:
  • закладку, где будет отражаться навиадрес
  • поле строку для ввода и хранения навиадреса на этой закладке
  • текстовое поле для данных карточки навиадреса
  • кнопку "Получить данные навиадреса", на которую повесим скрипт обработки нажатия.

Расположение элементов может быть примерно такое, как на скриншоте снизу.
Теперь добавим программу обработки нажатия кнопки.

Для начала создадим тело процедуры, которая будет выполняться на сервере, и зададим необходимые константы. В этом примере мы будем использовать простой метод GET Addresses.

Для странового контейнера установим значение "7", так как в данном примере мы будем использовать навиадреса для компаний-контрагентов только из России.
&НаСервере
Процедура ПолучитьДанныеНавиадресаНаСервере()
	
	Сервер 			= "staging-api.naviaddress.com";
	Версия 			= "1.5";
	Контейнер 		= "7";
	Навиадрес 		= Объект.Навиадрес;
	АдресРесурса 	= СтрШаблон("/api/v%1/Addresses/%2/%3", Версия, Контейнер, Навиадрес);

	// Здесь будем писать далее текст программы

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

В первой части этой части кода мы подготавливаем заголовок HTTP-запроса, указывая на передаваемые тип данных "application/json".

Потом мы выполняем запрос с сервису платформы Naviaddress, которая возвращает строку, содержащую JSON объект ЧтениеJSON, который потом мы преобразуем в переменную Ответ с помощью функции ПрочитатьJSON().
	ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL;
	Заголовки = Новый Соответствие;
	Заголовки.Вставить("Accept", 		"application/json");
	Заголовки.Вставить("Content-Type", 	"application/json");
	HTTPСоединение = Новый HTTPСоединение(Сервер,,,,,, ЗащищенноеСоединение);
	HTTPЗапрос = Новый HTTPЗапрос(АдресРесурса, Заголовки);
	HTTPОтвет = HTTPСоединение.Получить(HTTPЗапрос);
	ТекстОтвета = HTTPОтвет.ПолучитьТелоКакСтроку();	
	
	Если Не HTTPОтвет.КодСостояния = 200 Тогда
		Объект.ДанныеНавиадреса = "Данные не найдены";	
		Возврат;
	КонецЕсли;

	ЧтениеJSON = Новый ЧтениеJSON;
	ЧтениеJSON.УстановитьСтроку(ТекстОтвета);
	Ответ = ПрочитатьJSON(ЧтениеJSON);
	Если Не ТипЗнч(Ответ) = Тип("Структура") Или Не Ответ.Свойство("result") Тогда
		Объект.ДанныеНавиадреса = "Данные не найдены";	
		Возврат;
	КонецЕсли;
После получения и расшифровки данных, они сохраняются в переменную Ответ, откуда их уже можно использовать для обработки. Например, таким образом можно получить информацию об описании, почтовом адресе и географических координатах объекта.
ДанныеНавиадреса = "Name: " +Ответ.result.name;
	Если Ответ.result.Свойство("description") Тогда
		ДанныеНавиадреса = ДанныеНавиадреса + Символы.ПС + "Description: " + Ответ.result.description;
	КонецЕсли;
	Если Ответ.result.Свойство("postal_address") Тогда
		ДанныеНавиадреса = ДанныеНавиадреса + Символы.ПС + "Postal address: " + Ответ.result.postal_address;
	КонецЕсли;
	Если Ответ.result.Свойство("point") Тогда
		ДанныеНавиадреса = ДанныеНавиадреса + Символы.ПС + "Point: " + Ответ.result.point.lat +"; "+Ответ.result.point.lng;
	КонецЕсли;
Если в навиадресе задано свойство с описанием пути прохода (т.н. "последней миле"), то ее можно получить из свойства last_mile. При этом необходимо проверить, каким образом задана эта последняя миля:
  • в виде текстового описания - тогда можно взять просто свойство last_mile.text
  • в виде последовательности шагов - тогда для описания шагов придется сделать цикл по свойству last_mile.steps
	Если Ответ.result.Свойство("last_mile") Тогда
		ДанныеНавиадреса = ДанныеНавиадреса + Символы.ПС + "Last mile: ";
		Если Ответ.result.last_mile.type = "text" Тогда
			ДанныеНавиадреса = ДанныеНавиадреса + Ответ.result.last_mile.text;
		Иначе
			НомерШага = 0;
			Для каждого Шаг Из Ответ.result.last_mile.steps Цикл
				НомерШага = НомерШага + 1;
				ДанныеНавиадреса = ДанныеНавиадреса + Символы.ПС + "             " + НомерШага + ") " + Шаг.Text
			КонецЦикла;
		КонецЕсли;
	КонецЕсли;
	
	Объект.ДанныеНавиадреса = ДанныеНавиадреса;
Полностью исходный текст программы на языке 1С можно скачать по следующей ссылке.

Большая благодарность коллегам из Центра развития 1С из компании Ай-Теко: Андрею Силину и Андрею Борисову за помощь в подготовке примера интеграции.

Автор: А.Гершун (11.09.2018)
Made on
Tilda