Конвертация любых адресов, написанных в свободной форме, к ФИАС

23.06.25

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

Допустим у нас есть база с адресами клиентов, и написаны они могут быть как душе угодно. С опечатками, без индексов, без разделителей, в совершенно любом формате. Вот было бы здорово иметь функцию, которая одним нажатием кнопки преобразует любую белиберду к строгому представлению адреса по ФИАС? Восстановит индекс, исправит опечатки и вернёт на 100% валидный адрес. Для всех, кто мечтательно сказал "ДА!", выкладываю данную обработку.

Файлы

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

Наименование Скачано Купить файл
Конвертация любых адресов, написанных в свободной форме, к ФИАС, версия 1.1
.epf 23,29Kb ver:1.1
186 4 200 руб. Купить
Конвертация любых адресов, написанных в свободной форме к ФИАС
.epf 23,22Kb ver:1.0
66 4 200 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Всего одно нажатие, и уже через секунду практически любой адрес, написанный в свободной форме, превратится в стройный и красивый ФИАС, например, такие:

  • Барнаул,Северо-заподная,29"А",кв24
  • Барнаул Северо-заподная,29"А",кв24
  • Барнаул Северозаподная,29А,кв24
  • Барнаул Северозаподная,29А 24 кварт
  • Барнаул Северозаподная,29-А 24
  • Северозаподная,29-А 24 Барнаул
  • Северозаподная,29-А 24 (Барнаул)
  • Северозаподная,29-А 24 Борнаул
  • Россиюшка, славный город Барнаул, Северозаподная,29-А 24
  • Борнаул Северозаподная,29 корпус А 24 квортира

На выходе без исключения для всех вариантов получаем:
656037, Алтайский край, Барнаул г, Северо-Западная ул, дом № 29А, кв 24

Обработка является симбиозом внутренних очисток и преобразований входящего адреса на встроенном языке 1С и API вызовов к сервису Ahunter (бесплатной версии).
С помощью данной функции удаётся корректно восстановить более 95% входящих адресов.
Для работы функции необходим доступ в интернет.

Протестировано на платформах 8.3.13.1513 и 8.3.16.1063.

Проверено на следующих конфигурациях и релизах:

  • 1С:Библиотека стандартных подсистем, редакция 3.1, релизы 3.1.10.420

Вступайте в нашу телеграмм-группу Инфостарт

преобразование адреса конвертация ФИАС КЛАДР

См. также

WEB-интеграция Программист 1С:Предприятие 8 1С:Бухгалтерия 3.0 Бытовые услуги, сервис Платные (руб)

Расширение для автоматизации передачи данных между сервисом Vetmanager с 1С: Бухгалтерия 3.0. Решение позволяет загружать документы и справочники из Ветменеджер в 1С:Бухгалтерию, сокращая время на ручной ввод данных и минимизируя ошибки.

24000 руб.

02.02.2021    22080    65    52    

41

Сайты и интернет-магазины WEB-интеграция Системный администратор Программист Пользователь 1С:Предприятие 8 1C:Бухгалтерия 1С:Управление торговлей 11 Автомобили, автосервисы Россия Управленческий учет Платные (руб)

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

42700 руб.

03.08.2020    23415    34    24    

26

WEB-интеграция Загрузка и выгрузка в Excel Программист Пользователь 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Розничная и сетевая торговля (FMCG) Россия Платные (руб)

Расширение освободит вас от необходимости вручную обновлять товары в группах ВКонтакте. Достаточно задать правила один раз, и система автоматически синхронизирует ваш каталог. Вы сможете легко выбирать, какие товары публиковать, создавая гибкие критерии отбора. Например, можно добавить важные для покупателей параметры: цвет, размер или другие характеристики.

12200 руб.

29.08.2025    1802    4    0    

5

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

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

60000 руб.

07.05.2019    41641    75    45    

31

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

Модуль "Экспортер" — это расширение для 1С, предназначенное для автоматизации процессов выгрузки данных. Оно позволяет эффективно извлекать, преобразовывать и передавать данные из систем 1С в интеграционную платформу Spot2D. Подсистема упрощает настройку, снижает количество ручных операций и обеспечивает удобный контроль данных.

17568 руб.

20.12.2024    5455    23    4    

25
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. capitan 2557 30.06.20 15:56 Сейчас в теме
Сервис dadata.ru такое может
2. ovasiliev 7 17.10.20 14:47 Сейчас в теме
Судя по "Для работы функции необходим доступ в интернет.", он наверное это и делает.
3. XilDen 783 21.10.20 11:13 Сейчас в теме
(2) По сути, да. Только используется не сервис dadata, а сервис Ahunter, в сочетании с внутренними функциями очистки и подготовки адреса на стороне 1С для отправки в этот сервис (данная предварительная обработка увеличивает качество итогового результата примерно на 10-15%).
4. XilDen 783 21.10.20 11:43 Сейчас в теме
(2) Сравнил ради интереса результаты Dadata.ru по тем же адресам, которые привёл в описании к обработке, счёт 10:2 в пользу моего решения. Написание улицы "Северо-западная" без дефиса в адресе сразу убила всю нейросеть Dadata, которая не могла верно идентифицировать адрес:
Прикрепленные файлы:
5. ovasiliev 7 21.10.20 12:37 Сейчас в теме
Ну вообще, ahunter платный. Как решён этот вопрос?
7. XilDen 783 21.10.20 13:15 Сейчас в теме
(5) На сайте Ahunter есть бесплатный демонстрационный API, не требующий ключей. Для функционала обработки этого вполне достаточно
6. XilDen 783 21.10.20 13:06 Сейчас в теме
На сайте Ahunter есть демонстрационный API, который бесплатен и работает без ключей, для функционала обработки этого вполне достаточно. Можете посмотреть здесь: https://www.ahunter.ru/site/demo/address
8. MrTom 03.12.20 13:08 Сейчас в теме
(6) Не подскажете: у демо-API есть ограничение на количество обработанных запросов или им можно пользоваться неограниченно?
9. XilDen 783 11.12.20 08:49 Сейчас в теме
(8) Я бы на всякий случай делал интервал между запросами в пару секунд, в случае пакетной обработки данных, чтобы IP не забанили за DDoS сервера. А так, ни на какие ограничения я не натыкался.
10. johnyb2002 02.06.21 14:59 Сейчас в теме
Подскажите, правильно лит я вас понимаю, что эта обработка прогоняет уже существующие контакты в базе, например "исправить" адреса всех Партнеров в базе? Или она просто "контролирует правильность" на этапе ввода адреса в поле 1С
11. XilDen 783 02.06.21 18:30 Сейчас в теме
(10) Это функция, на входе даём строку с адресом в свободной форме, на выходе получаем строку с адресом в строгом соответствии с ФИАС, который прекрасно проглатывается конструктором адреса в 1С и разбивается на поля. Как вы эту функцию будете использовать - ваше дело. Ничего не мешает написать программу, которая исправит адреса всех партнёров с помощью данной функции.
12. johnyb2002 03.06.21 01:33 Сейчас в теме
(11) благодарю за ответ, простите за наглость, но вы бы не могли подсказать\намекнуть на такую обработку, которая подскажет "как исправить адреса всех партнёров с помощью данной функции" или где можно почитать о подобном.
Вопрос не праздный, поскольку понимаю что ваша разработка поможет, если смогу решить вопрос как прогнать ей все адреса в базе. Спасибо!
13. XilDen 783 03.06.21 06:23 Сейчас в теме
Общий принцип простой. Получаем список партнёров с помощью запроса, затем в цикле проходим результат запроса, у каждого партнёра берём его адрес, отправляем в функцию. Получаем исправленный адрес, по ссылке получаем объект партнёра, заменяем там адрес и сохраняем. Подробнее могу сказать, когда расскажете, что у вас за конфигурация, какая там структура объектов метаданных, в каком виде хранятся адреса партнёров.
14. kns77 109 30.06.21 15:19 Сейчас в теме
Кривовато работает, в моем случае не 95% а процентов 30 верно распознает
например
626150, Тюменская обл, Тобольск г, 6 мкр, дом 2, квартира 5
628306, Ханты-Мансийский Автономный округ - Югра АО, Нефтеюганск г, 14-й мкр, дом № 22, квартира1
628464, Ханты-Мансийский Автономный округ - Югра АО, Радужный г, 2-й мкр, дом № 23, квартира 1
SERGEJ64; XilDen; +2 Ответить
15. XilDen 783 01.07.21 14:00 Сейчас в теме
(14) Действительно, обнаружил ошибку, программа не учитывала возможность существования микрорайонов в адресе. Исправил. Версию 1.1 выложил. Если бесплатно не получается скачать, пишите в ЛС, скину
16. citytop 18.08.22 09:10 Сейчас в теме
а есть расширение, которое позволяет преобразовывать сразу в форме ввода партнера?
или пакетно уже существующие адреса?
17. XilDen 783 18.08.22 14:08 Сейчас в теме
(16) Подобное расширение можно сделать, но под конкретную конфигурацию, везде разная структура хранения контактной информации. То же касается и пакетной обработки.
18. simuljakr 207 13.09.22 12:17 Сейчас в теме
Не скачивал (пока не нужно), но однозначно +
19. duke55 27.10.22 08:00 Сейчас в теме
подскажите, а demotoken еще работает ?

мне в ответ прилетает следующее:

{"errors":[{"code":10006,"description":"<h1>Получен некорректный токен API<\/h1> \r\n<p>\r\n Нам не удалось обработать Ваш запрос, поскольку мы получили от Вас невалидный токен API.\r\n Узнать свой токен API Вы можете в своем личном кабинете. Там же Вы можете его изменить.\r\n<\/p>\r\n<p>\r\n Если Вы считаете, что данное сообщение Вам выдано по ошибке, то напишите, нам, пожалуйста, об этом письмо \r\n по адресу <a href=\"mailto:info@ixlab.ru\">info@ixlab.ru<\/a>.\r\n<\/p>\r\n","file_name":"..\/..\/source\/webserver\/users\/user_manager.cpp","func_name":"","line_number":419,"name":"INVALID_TOKEN_API","text":""}],"request_process_time":0}
20. пользователь 16.06.25 10:19
Сообщение было скрыто модератором.
...
21. corelius 4 13.02.26 11:47 Сейчас в теме
Написал тоже программу работы с этим АПИ. Вы пишите что написали алгоритм который причесывает адрес и повышает точность распознавания сервисом.

Есть адрес, стандартизированный: Московская область, Город Пушкино, Территория 33-й км автодороги М8 Холмогоры, Дом 16а Строение 1

Распознает? У них территория "33-й км автодороги М8 Холмогоры" не распознается. Или хитрость есть?
22. GeterX 1442 21.02.26 01:47 Сейчас в теме
Вариант работы api в платном режиме. Может кому пригодится.
В бесплатном варианте, очень мало запросов.
&НаСервере
Функция ПреобразоватьАдрес(Знач Адрес, БезКорректировкиАдреса = Ложь, ГородПоиска = Неопределено)
	
	ssl = Новый ЗащищенноеСоединениеOpenSSL(
				Новый СертификатКлиентаWindows(),
				Новый СертификатыУдостоверяющихЦентровWindows());  
	
	Соединение = Новый HTTPСоединение(
				"ahunter.ru",,,,,
				1, // таймаут в секундах
				
				ssl // защищенное HTTPS соединение
				
				);
	
	//Соединение = Новый HTTPСоединение("ahunter.ru", 80);
	//Запрос = Новый HTTPЗапрос("/site/demo/address?query=" + Адрес);
	Запрос = Новый HTTPЗапрос("/site/cleanse/address?user=" + Объект.ТокенAhunter + ";output=xml;query=""" + Адрес + """");

	Результат = Соединение.ОтправитьДляОбработки(Запрос);
	ИсходныйТекст = Результат.ПолучитьТелоКакСтроку();
	
	НовоеПредставлениеАдреса = ПреобразоватьАдресСервисаВПредставление(ИсходныйТекст, Адрес);
	
	Возврат НовоеПредставлениеАдреса;
	
КонецФункции 

&НаСервереБезКонтекста
Функция ПреобразоватьАдресСервисаВПредставление(ИсходныйТекст, Адрес)

	СтруктураКонтактнойИнформации = РаботаСАдресамиКлиентСервер.СтруктураКонтактнойИнформацииПоТипу(Перечисления.ТипыКонтактнойИнформации.Адрес);
	
	ЧтениеXML = Новый ЧтениеXML();
	ЧтениеXML.УстановитьСтроку(ИсходныйТекст);
	Фабрика = Новый ФабрикаXDTO();
	ОбъектXDTO =  Фабрика.ПрочитатьXML(ЧтениеXML); 
	
	Попытка
		СтруктураКонтактнойИнформации.Страна = ОбъектXDTO.Address.Country.name;
		СтруктураКонтактнойИнформации.НаименованиеСтраны = ОбъектXDTO.Address.Country.name;
		
		Для каждого Строка Из ОбъектXDTO.Address.Field Цикл
			
			Если Строка.level = "Zip" Тогда
				СтруктураКонтактнойИнформации.Индекс = Строка.name;		
			ИначеЕсли Строка.level = "Region" Тогда
				СтруктураКонтактнойИнформации.Регион = Строка.name;
				СтруктураКонтактнойИнформации.РегионСокращение = Строка.type;
			ИначеЕсли Строка.level = "District" Тогда
				СтруктураКонтактнойИнформации.Район = Строка.name;
				СтруктураКонтактнойИнформации.РайонСокращение = Строка.type;
			ИначеЕсли Строка.level = "City" Тогда
				СтруктураКонтактнойИнформации.Город = Строка.name;
				СтруктураКонтактнойИнформации.ГородСокращение = Строка.type;
			ИначеЕсли Строка.level = "Place" Тогда
				СтруктураКонтактнойИнформации.НаселенныйПункт = Строка.name;
				СтруктураКонтактнойИнформации.НаселенныйПунктСокращение = Строка.type;
			ИначеЕсли Строка.level = "Site" Тогда
				//СтруктураКонтактнойИнформации. = Строка.name;
				//СтруктураКонтактнойИнформации. = Строка.type;
			ИначеЕсли Строка.level = "Street" Тогда
				СтруктураКонтактнойИнформации.Улица = Строка.name;
				СтруктураКонтактнойИнформации.УлицаСокращение = Строка.type; 
			ИначеЕсли Строка.level = "House" Тогда
				СтруктураКонтактнойИнформации.Дом = Строка.name;
				СтруктураКонтактнойИнформации.ТипДома = Строка.type; 
			ИначеЕсли Строка.level = "Building" Тогда
				СтруктураКонтактнойИнформации.Корпус = Строка.name;
				СтруктураКонтактнойИнформации.ТипКорпуса = Строка.type;
			ИначеЕсли Строка.level = "Flat" Тогда		
				СтруктураКонтактнойИнформации.Квартира = Строка.name;
				СтруктураКонтактнойИнформации.ТипКвартиры = Строка.type;	
			КонецЕсли;
			
		КонецЦикла; 	
	Исключение
	    Сообщить("Адрес не распознан: " + Адрес);
		СтруктураКонтактнойИнформации.Представление = Адрес; 
	КонецПопытки;
	
	НовоеПредставление = УправлениеКонтактнойИнформацией.ПредставлениеКонтактнойИнформации(СтруктураКонтактнойИнформации);
	
	Возврат НовоеПредставление;
	
КонецФункции

Показать
Для отправки сообщения требуется регистрация/авторизация