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

07.07.21

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

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

Файлы

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

Наименование Скачано Купить файл
Пример использования сервиса dadata.ru из 1С Предприятие 8.1:
.epf 7,41Kb ver:1.0
1 2 500 руб. Купить

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

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

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

Вы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

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

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

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

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

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