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

08.06.17

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

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Адрес из яндекса в 1с
.epf 7,95Kb
35
35 Скачать (1 SM) Купить за 1 850 руб.

Обработка разбирает составные часты адреса с использованием Яндекс 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].ТекстовоеСодержимое;
			НовыйАдрес.Дом=Дом;
		КонецЕсли;	
	КонецЦикла;	
	
КонецПроцедуры



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

См. также

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

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

57600 руб.

26.11.2024    1237    1    1    

4

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

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

36000 руб.

03.08.2020    18356    20    22    

18

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

Интеграция 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    20565    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    320    2    0    

5

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

Расширение значительно упрощает написание API на 1С. Веб программисты получают простой и понятный доступ к 1С. Описание API создаётся автоматически и представляется в виде удобном как для человека, так и для программной обработки.

24000 руб.

27.09.2024    2490    1    0    

3
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
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. ВикторП 350 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. ВикторП 350 09.06.17 10:58 Сейчас в теме
(5) Вариантов 2- 1. Можно открыть яндекс 2. можно выполнять на клиенте - но там тоже был "закидон", с которым я не разобрался, с какой- то периодичностью - что- то типа 150 , не проходило обращение к серверу Яндекса
8. ВикторП 350 09.06.17 13:31 Сейчас в теме
(7) Хорошо. Для такого варианта использования обработки - да .
В реальной работе с геоданными у меня ввода с клавиатуры нет, разбираемый адрес читается из файла , ищется наличие такого адреса в инф базе и при отсутствии - обращается на сервер Яндекса для разбора
9. androgin 09.06.17 16:28 Сейчас в теме
(8) Это все равно не логично.
Возвращается куча адресов и пользователю снова приходится просматривать это список.
двойная работа
10. androgin 09.06.17 16:56 Сейчас в теме
(8) ну и само использование временного файла уже можно не использовать.
Тож быстрее
11. ВикторП 350 09.06.17 17:04 Сейчас в теме
(9) нелогично что? Что Яндекс возвращает по введенному тексту несколько адресов , так я понимаю?

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

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

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

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

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

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