По данным из заказ "Адрес доставки" по кнопке "Геокодировать" получает данные адреса (широта, долгота) через Api Google Maps, и отображает на Яндекс карте точки. Выбранные точки меняют (при клике на карте или выборе в табличной части) цвет на красный и отмечаются как выбранные. Для геокодирования требуется Api ключ Google Maps.
Api ключ Google Maps заполняется в карточке организации.
Проверено на УНФ 1.6.18.105.
Геокодирование Google
&НаСервере
Процедура ГеокодироватьНаСервере()
// Вставить содержимое обработчика.
Ключ = Объект.Key_API;
Кол = 0;
Ном = 1;
Для Каждого Строка Из Объект.Заказы Цикл
Строка.НомерПП = Ном;
Ном = Ном + 1;
Строка.Выб = Ложь;
Если ЗначениеЗаполнено(Строка.Широта) и ЗначениеЗаполнено(Строка.Долгота) Тогда Продолжить; КонецЕсли;
ПараметрПоиска = Строка.Адрес;
Кол = Кол + 1;
АдресOutput = ПолучитьИмяВременногоФайла();
Ключ = Ключ;
Координаты = Новый Структура;
Координаты.Вставить("Адрес","");
Координаты.Вставить("Широта","");
Координаты.Вставить("Долгота","");
СервисРесурс = "maps/api";
СервисПараметры = "/geocode/json?language=ru&address="+ПараметрПоиска+"&key="+Ключ;
Сервер = "maps.googleapis.com";
ssl = Новый ЗащищенноеСоединениеOpenSSL(Неопределено,Неопределено);
Соединение = Новый HTTPСоединение(Сервер, , , , , 60,ssl);
ТелоОтвета = "";
Попытка
HTTPЗапрос = Новый HTTPЗапрос(СервисРесурс+СервисПараметры);
HTTPОтвет = Соединение.Получить(HTTPЗапрос);
ТелоОтвета = HTTPОтвет.ПолучитьТелоКакСтроку();
Исключение
Сообщить("Ошибка! Не удалось установить HTTP-соединение с сервером: "+Сервер+". "+ОписаниеОшибки());
КонецПопытки;
//Сообщить(ТелоОтвета);
Если ТелоОтвета="" Тогда
Сообщить("По заказу " + Строка.Заказ.Номер+ "адрес не найден: "+ТелоОтвета+".");
Продолжить;
КонецЕсли;
//Разбираем JSON
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(ТелоОтвета);
СтруктураОтвета = ПрочитатьJSON(ЧтениеJSON);
ЧтениеJSON.Закрыть();
Результат = СтруктураОтвета.status;
Если Результат = "OK" Тогда
//ошибок нет, адрес обработан и получен хотя бы один геокод.
ИначеЕсли Результат = "ZERO_RESULTS" Тогда
Сообщить("По заказу " + Строка.Заказ.Номер+ "адрес не найден: "+Результат+".");
Продолжить;
Иначе
Сообщить("По заказу " + Строка.Заказ.Номер+ " Ошибка: "+Результат+". Возможно не указан или не верный API Key в настройках Геокодера.");
Продолжить;
КонецЕсли;
Адрес1 = СокрЛП(СтруктураОтвета.results[0].formatted_address);
Строка.Широта = КоординатаВСтроку(Лев(СтруктураОтвета.results[0].geometry.location.lat,9));
Строка.Долгота = КоординатаВСтроку(Лев(СтруктураОтвета.results[0].geometry.location.lng,9));
КонецЦикла;
КонецПроцедуры
Функция КоординатаВСтроку(Знач Стр)
Стр = СтрЗаменить(Стр,",",".");
Стр = СтрЗаменить(Стр,Символы.НПП,"");
Возврат Стр;
КонецФункции