Получение и расшифровка адреса из яндекса в 1С

08.06.17

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

Определение составных частей адреса - страна, регион, населенный пункт из текстового поля определяются с использованием Яндекс API.

Скачать файлы

Наименование Файл Версия Размер
Адрес из яндекса в 1с
.epf 7,95Kb
34
.epf 7,95Kb 34 Скачать

Обработка разбирает составные часты адреса с использованием Яндекс API.  

Подобные решения есть и на Инфостарте, например , эта публикация //infostart.ru/public/587079/ . 

Документацию Яндекса на эту тему можно найти здесь

https://tech.yandex.ru/maps/doc/geocoder/desc/concepts/About-docpage/

Функционал геокодирования, реализованный в обработке, мы использовали для:

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

Первоначальный вариант был еще на первой версии API, здесь рабочий вариант на сегодняшний день.

В обработке в поле Адрес указывается разбираемый адрес. 

Кнопка Разобрать адрес вызывает функционал геокодирования Яндекса и результат отображает в форме обработки ниже.

Несколько примеров работы обработки

Первый пример - с неполным адресом . По введенному адресу Яндекс находит 10 похожих адресов.  

Второй пример - с адресом, содержащим ошибки в написании. Тем не менее , использование Яндекс API дает отличный -единственный результат

Обработка сделана на управляемых формах, для разработчиков код приведен ниже.

// Адрес - вводится на форме и разбирается Яндексом
//

&НаКлиенте
Процедура Разобрать(Команда)
 	
	НайденныеАдреса.Очистить();
	
	//НайденныеАдреса- таблица значений на форме
	//
	// Колонки   (все колонки строки неограниченной длины)
	//
	// АдресИсправленный  - Адрес , исправленный Яндексом
	// Страна
	// Регион
	// Округ- округ/район
	// Населенный пункт
	// Улица
	// Дом
	
		
	Запрос = Новый HTTPСоединение("geocode-maps.yandex.ru", , , , , , Новый ЗащищенноеСоединениеOpenSSL());
	
	АдресOutput = КаталогВременныхФайлов() + "geores.xml";
	
	Запрос.Получить("1.x/?&geocode=" + Адрес, АдресOutput);
	
	ЧтениеXML = Новый ЧтениеXML;
	ЧтениеXML.ОткрытьФайл(АдресOutput);
	ПостроительDOM = Новый ПостроительDOM;
	ДокументДОМ = ПостроительDOM.Прочитать(ЧтениеXML);
	
	ЧтениеXML.Закрыть();
	
	Найдено = ДокументДОМ.ПолучитьЭлементыПоИмени("featureMember");
	
	Для каждого НайденныйАдрес из Найдено Цикл
		
		НовыйАдрес=НайденныеАдреса.Добавить();
		СписокTextСтрана = НайденныйАдрес.ПолучитьЭлементыПоИмени("CountryName");	
		
		Если СписокTextСтрана.Количество()>0 Тогда
			Страна=СписокTextСтрана[0].ТекстовоеСодержимое;
			НовыйАдрес.Страна=Страна;
		КонецЕсли;
		
		АдресИсправленный=Адрес;
		СписокTextАдрес = НайденныйАдрес.ПолучитьЭлементыПоИмени("AddressLine");	
		Если СписокTextАдрес.Количество()>0 Тогда
			АдресИсправленный=СписокTextАдрес[0].ТекстовоеСодержимое; //Адрес, исправленный Яндексом
		КонецЕсли;
		НовыйАдрес.АдресИсправленный=АдресИсправленный;
		
		СписокTextРегион = НайденныйАдрес.ПолучитьЭлементыПоИмени("AdministrativeAreaName");	
		Если СписокTextРегион.Количество()>0 Тогда
			Регион=СписокTextРегион[0].ТекстовоеСодержимое;
			НовыйАдрес.Регион=Регион;
		КонецЕсли;
		
		СписокTextОкруг = НайденныйАдрес.ПолучитьЭлементыПоИмени("SubAdministrativeAreaName");	
		Если СписокTextОкруг.Количество()>0 Тогда
			Округ=СписокTextОкруг[0].ТекстовоеСодержимое;
			НовыйАдрес.Округ=Округ;
		КонецЕсли;	
		
		СписокTextНаселенныйПункт = НайденныйАдрес.ПолучитьЭлементыПоИмени("LocalityName");	
		Если СписокTextНаселенныйПункт.Количество()>0 Тогда
			НаселенныйПункт=СписокTextНаселенныйПункт[0].ТекстовоеСодержимое;
			НовыйАдрес.НаселенныйПункт=НаселенныйПункт;
		КонецЕсли;	
		
		СписокTextУлица = НайденныйАдрес.ПолучитьЭлементыПоИмени("ThoroughfareName");	
		Если СписокTextУлица.Количество()>0 Тогда
			Улица=СписокTextУлица[0].ТекстовоеСодержимое;
			НовыйАдрес.Улица=Улица;
		КонецЕсли;	
		
		СписокTextДом = НайденныйАдрес.ПолучитьЭлементыПоИмени("PremiseNumber");	
		Если 	СписокTextДом.Количество()>0 Тогда
			Дом=	СписокTextДом[0].ТекстовоеСодержимое;
			НовыйАдрес.Дом=Дом;
		КонецЕсли;	
	КонецЦикла;	
	
КонецПроцедуры



Яндекс Получение адреса разбор адреса

См. также

Интеграция Альфа Авто 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    15660    9    17    

9

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

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

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

22656 руб.

25.05.2021    12809    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    17425    6    15    

13

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

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

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

8400 руб.

01.02.2019    25687    9    0    

7

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

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

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

12000 руб.

02.02.2021    16259    41    49    

22
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. androgin 09.06.17 02:03 Сейчас в теме
Я, конечно, извиняюсь, но зачем городить такой огромный и затратные код, да еще и на сервере, если все можно сделать на клиенте?!
Тем более все прекрасно работает в АвтоПодборе без нажатия на всякие кнопки ))))
(файлик прикрепил ))) )

&НаКлиенте
Процедура СтрокаПоискаАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка)
    ТекстПоиска = СокрЛП(Текст);
    Если СтрДлина(ТекстПоиска) > 5 Тогда // чтобы зря не гонять на сервер яндекса. Значение ставьте своё
        РазобратьАдресПоиска(ТекстПоиска);
    КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура РазобратьАдресПоиска(АдресПоиска)
	
	Соединение = Неопределено;
    
	Попытка		
	    Соединение = Новый HTTPСоединение("geocode-maps.yandex.ru", , , , , , Новый ЗащищенноеСоединениеOpenSSL());
	Исключение		
		Сообщить("Не удалось установить соединение с сервером геодирования Яндекс. Проверьте правильность адреса сервера.");
        Возврат;
    Конецпопытки;
    
	Если Соединение = Неопределено Тогда
		Возврат;
    КонецЕсли;	
    
    ТелоОтвета = "";
    Попытка
        Запрос = Новый HTTPЗапрос;
        Запрос.АдресРесурса = "/1.x/?format=json&geocode="+АдресПоиска; 
        Ответ = Соединение.Получить(Запрос);
        ТелоОтвета = Ответ.ПолучитьТелоКакСтроку();
        Соединение = Неопределено;		
	Исключение
	    Сообщить(ИнформацияОбОшибке().Описание);
        Возврат;
    КонецПопытки;
    
    ЧтениеJSON = Новый ЧтениеJSON;
    ЧтениеJSON.УстановитьСтроку(ТелоОтвета);
    СтруктураАдреса = ПрочитатьJSON(ЧтениеJSON);
    ЧтениеJSON.Закрыть();
    
    // в СтруктураАдреса лежат адреса для разбора
    
КонецПроцедуры
Показать
Прикрепленные файлы:
ГеокодированиеЯндекс.epf
Dilovar9; Goggy; tkv44; BigB; kiruha; +5 Ответить
3. ВикторП 342 09.06.17 09:23 Сейчас в теме
(1)
Переход на сервер - это осталось от переноса рабочего кода в эту демо- обработку . На сервере - я ищу объекты из базы, например Регион из справочника.

В Вашем примере после ввода каждой буквы начиная с 6 тоже будут обращения к серверу Яндекса :)

В рабочем варианте ввод адресов происходит из файла и разбираются только новые адреса, которых еще не было в информационной базе . Тут порядок чисел такой- всего адресов - до 20 тыс, новых адресов ~10% - странно стабильное число уже 2 года.
5. kiruha 388 09.06.17 10:45 Сейчас в теме
(3)
Часто админы запрещают с сервера обращаться куда бы то ни было
Sword; androgin; +2 Ответить
7. androgin 09.06.17 13:19 Сейчас в теме
(3) так вот мой вариант менее затратный и объективный. Он может соазу показывать найденные адреса в поле поиска. И пользователю останется лишь выбрать нужный из найденный и система дальше его уже разложит.
Уж намного лучше, чемс сервера гонять данные туда-сюда на клиент.
6. ВикторП 342 09.06.17 10:58 Сейчас в теме
(5) Вариантов 2- 1. Можно открыть яндекс 2. можно выполнять на клиенте - но там тоже был "закидон", с которым я не разобрался, с какой- то периодичностью - что- то типа 150 , не проходило обращение к серверу Яндекса
8. ВикторП 342 09.06.17 13:31 Сейчас в теме
(7) Хорошо. Для такого варианта использования обработки - да .
В реальной работе с геоданными у меня ввода с клавиатуры нет, разбираемый адрес читается из файла , ищется наличие такого адреса в инф базе и при отсутствии - обращается на сервер Яндекса для разбора
9. androgin 09.06.17 16:28 Сейчас в теме
(8) Это все равно не логично.
Возвращается куча адресов и пользователю снова приходится просматривать это список.
двойная работа
10. androgin 09.06.17 16:56 Сейчас в теме
(8) ну и само использование временного файла уже можно не использовать.
Тож быстрее
11. ВикторП 342 09.06.17 17:04 Сейчас в теме
(9) нелогично что? Что Яндекс возвращает по введенному тексту несколько адресов , так я понимаю?

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

(10) временный файл- с которого вводятся данные- присылается другими организациями- от них нельзя отказаться - у этих организаций одна и та же точка может быть написана по разному, разбор с помощью Яндекса позволяет их соотнести друг с другом
12. androgin 09.06.17 20:19 Сейчас в теме
(11) временный файл - вы его сами в коде создаете! Ни от кого он не присылается)))
И опят же: сами говорите, что пользователю приходится выбирать из списка. А значит сервер-клиент.
А если клиент обрабатывает - то и нелогично это
ВикторП; +1 Ответить
13. ВикторП 342 11.06.17 06:54 Сейчас в теме
(12) Спс, использование временного файла убрал.
14. androgin 13.06.17 18:50 Сейчас в теме
(13) ай-ай...
как нехорошо то))
кусок своего кода заменили моим)))
а где "спасибо" в статье? ))))
15. ВикторП 342 13.06.17 22:21 Сейчас в теме
16. ВикторП 342 13.06.17 22:57 Сейчас в теме
(14) при неиспользовании временного файла уменьшение времени работы обработки не зафиксировано- в обоих случаях время работы меньше 1 секунды
17. androgin 14.06.17 01:49 Сейчас в теме
(16) я так понимаю, вы недавно в 1С, если подобное заявляете.
То, что с временным файлом задействована файловая система - вас в принципе ни разу не волновало и вы понятия не имеете, что роли системы могут просто не позволить создавать эти файлы.
Не говоря уже функциональности кода
18. androgin 14.06.17 01:50 Сейчас в теме
(15) спасибо не в комментариях говорят, уж если код вывесили на всеобщее обозрение
19. ВикторП 342 14.06.17 08:50 Сейчас в теме
(17) можете привести примеры ролей , которые не позволяют создать временный файл?

Использование временного файла выигрыша во времени работы обработки не даёт. Метрика- время. Вы про какую метрику говорите?

Что не так с функциональностью кода, уважаемый критик?

(18)Код вывешен для разработчиков, его использование - например, для разбора ответа сервера геокодирования- поля уже определены + рабочая демо обработка
20. androgin 14.06.17 12:52 Сейчас в теме
(19) вебклиент, корпоративный комп, БезопасныйРежим.
продолжать?
4. ВикторП 342 09.06.17 09:26 Сейчас в теме
(2) Да, на эту публикацию у меня есть ссылка.
Отличие - в разборе ответа.

Мой разбор был сделан до поддержки json платформой 1с. у меня разбор через DOM.
21. ВикторП 342 14.06.17 15:10 Сейчас в теме
22. Pim 180 05.09.18 20:37 Сейчас в теме
Плохо, что нельзя получить адрес в формате ФИАС. На худой конец, КЛАДР...
23. ВикторП 342 06.09.18 10:57 Сейчас в теме
24. user645801_yyyuuu123q 15.02.22 06:51 Сейчас в теме
в 2022 это уже не работает да?
Оставьте свое сообщение