Задача: стандартизировать записываемый адрес из строки введенной с клавиатуры.
Т.е. поменять строку введенную пользовтелем на список валидных адресов и предложить пользователю выбрать нужный вариант.
(для моей задачи нужно заполнить реквизиты: Регион, Населенныйпункт и УлицаНомерДома.)
Сложность заключается в отсутствии удобных механизмов работы с сервисами http в формате обмена JSON у платформы.
На помощь приходят пара COM-объектов:
ТекстЗапроса = "мск варшавское 4";
WinHttpUTF8 = Новый COMОбъект("WinHttp.WinHttpRequest.5.1");
WinHttpUTF8.Option(2, "UTF-8");
WinHttpUTF8.SetTimeouts(10000, 10000, 30000, 30000);
Скрипт = Новый COMОбъект("MSScriptControl.ScriptControl");
Скрипт.Language = "javascript";
Скрипт.AddObject("WinHttp", WinHttpUTF8);
Скрипт.Eval("WinHttp.Option(2) = ""utf-8""");
Скрипт.Eval("WinHttp.Option(4) = 13056");
Скрипт.Eval("WinHttp.Option(6) = true");
Скрипт.Eval("WinHttp.Option(12) = true");
WinHttpUTF8.Open("POST", "http://suggestions.dadata.ru/suggestions/api/4_1/rs/suggest/address", 0);
WinHttpUTF8.SetRequestHeader("Content-Type", "application/json;charset=UTF-8");
WinHttpUTF8.SetRequestHeader("Accept", "application/json");
///+++ нужно зарегистрироваться в сервисе и ввести свои данные
WinHttpUTF8.SetRequestHeader("Authorization", "Token b1b2e*********117d874b");
WinHttpUTF8.SetRequestHeader("X-Secret", "9e13**********6be0f6042");
///---
WinHttpUTF8.Send("{""query"": """+ТекстЗапроса+"""}");
ТекстJSON = WinHttpUTF8.ResponseText();
/// ответ разбиваем на строки
ОтветСтроки = СтрЗаменить(ТекстJSON,"""value"":", Символы.ПС);
Дальше уже совсем легко – находим нужное имя до «:» и далее будет соответствующее значение;
А имён там довольно много (включая геодаты, что позволит обращаться к картам, но это другая история... )
тз = Новый ТаблицаЗначений;
тз.Колонки.Добавить("Адрес");
тз.Колонки.Добавить("Регион");
тз.Колонки.Добавить("НаселенныйПункт");
тз.Колонки.Добавить("УлицаДом");
кол = СтрЧислоСтрок(ОтветСтроки);
Для д=2 По кол Цикл
нов = тз.Добавить();
текСтрока = СтрПолучитьСтроку(ОтветСтроки,д);
текДлина = СтрДлина(текСтрока);
Для Сч = 1 По текДлина Цикл
Символ = Сред(текСтрока, Сч, 1);
Если Символ = "u" Тогда
Поз2 = Сч-3;
Прервать;
КонецЕсли;
КонецЦикла;
//…………………………………………………………………
КонецЦикла;
//здесь пользователь должен выбрать валидный адрес
стр = тз.ВыбратьСтроку();
Переносим данные из выбранной строки в нужное место.
Тестировалась на релизе 1С:Предприятие 8.1 (8.1.15.14). Код будет работать везде, где удастся создать оба COM-объекта.