Получение и расшифровка адреса из яндекса в 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 разных брендов в одной информационной базе в ручном и автоматическом режиме.

36000 руб.

03.08.2020    15746    10    17    

11

Интеграция 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    17548    6    15    

13

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

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

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

12000 руб.

02.02.2021    16359    42    49    

23

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

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

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

8400 руб.

01.02.2019    25741    9    0    

7

Заполнение по ИНН или наименованию реквизитов контрагента по данным сайта ФНС

Обмен с ГосИС 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    88579    160    215    

318
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
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 это уже не работает да?
Оставьте свое сообщение