Каталог решений - Пример использования сервиса dadata.ru для платформы 8.1 (маленькая дверь к большим возможностям внешних сервисов)

Пример использования сервиса dadata.ru для платформы 8.1 (маленькая дверь к большим возможностям внешних сервисов)

Пример использования сервиса dadata.ru для платформы 8.1 (маленькая дверь к большим возможностям внешних сервисов)

В наличии

Для 8.1 не нашел подходящего решения для работы с сервисами dadata.ru Это пример работы только с API стандартизации адресов. Работает так: посылаем адрес, введенный пользователем в виде строки, на API сервис dadata.ru В ответ получаем массив структур с вариантами валидных адресов (формат JSON) . Показываем таблицу (массив) для выбора нужного адреса пользователю. Данные из выбранной строки переносим куда нужно. Весь перечень данных (а он не маленький) в каждом варианте ответа https://dadata.ru/api/clean/address/

Категория:

Описание

Задача: стандартизировать записываемый адрес из строки введенной с клавиатуры.

Т.е. поменять строку введенную пользовтелем на список валидных адресов и предложить пользователю выбрать нужный вариант.

(для моей задачи нужно заполнить реквизиты: Регион, Населенныйпункт и УлицаНомерДома.)

Сложность заключается в отсутствии удобных механизмов работы с сервисами 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-объекта.

has been added to your cart:
Оформление заказа