Публикация устарела в связи с изменениями API на сайте dadata.ru
Сервис dadata.ru позволяет получать подсказки по ФИО и по Адресам. У него есть довольно неплохо описанный API. Мы Рассмотрим, как с помощью него можно вывести подсказку в ФИО.
Данными с сайтом можно обмениваться в двух форматах:
- XML
- JSON
Я решил делать в xml, как в более используемом в 1С. Итак, для начала создадим новую пустую конфигурацию, со справочником Физлица, и так же создадим XDTO схему:
Создадим форму элемента справочника Физлица.
Основной функцией у нас будет: ПолучитьОбъектXDTO, в которую мы будем передавать набираемый текст (Обратите внимание, что вы должны передавать в параметрах ваш код авторизации, который вы можете получить свободно на сайте).
&НаКлиенте
Функция ПолучитьОбъектXDTO(Текст, КоличествоПодсказок = 10)
HTTPЗапрос = Новый HTTPЗапрос();
HTTPЗапрос.АдресРесурса = "/api/v2/suggest/fio";
HTTPЗапрос.Заголовки.Вставить("Content-Type", "application/xml");
HTTPЗапрос.Заголовки.Вставить("Accept", "application/xml");
HTTPЗапрос.Заголовки.Вставить("Authorization", "ВАШ КОД АВТОРИЗАЦИИ");
HTTPЗапрос.УстановитьТелоИзСтроки("" + Текст + "" + КоличествоПодсказок + "");
Соединение = Новый HTTPСоединение("dadata.ru",,,,Новый ИнтернетПрокси,, Новый ЗащищенноеСоединениеOpenSSL);
ОтветHTTP = Соединение.ОтправитьДляОбработки(HTTPЗапрос);
Тело = ОтветHTTP.ПолучитьТелоКакСтроку();
Если Тело = "" Тогда
Возврат Ложь;
Иначе
структурныйТип = ФабрикаXDTO.Тип("http://www.sample-package.org", "SuggestFioResponse");
МойXML = Новый ЧтениеXML;
МойXML.УстановитьСтроку(Тело);
ОбъектXDTO = ФабрикаXDTO.ПрочитатьXML(МойXML, структурныйТип);
Возврат ОбъектXDTO;
КонецЕсли;
КонецФункции
Затем назначим элементу "Наименование" событие: "Автоподбор".
&НаКлиенте
Процедура НаименованиеАвтоПодбор(Элемент, Текст, ДанныеВыбора, Параметры, Ожидание, СтандартнаяОбработка)
Если СтрДлина(Текст) > 3 Тогда
Элемент.СписокВыбора.Очистить();
ОбъектXDTO = ПолучитьОбъектXDTO(Текст);
Если ТипЗнч(ОбъектXDTO) = Тип("ОбъектXDTO") Тогда
Если ТипЗнч(ОбъектXDTO.suggestions) = Тип("СписокXDTO") Тогда
Для каждого Ключ Из ОбъектXDTO.suggestions Цикл
Элемент.СписокВыбора.Добавить(Ключ.value);
КонецЦикла;
ИначеЕсли ТипЗнч(ОбъектXDTO.suggestions) = Тип("ОбъектXDTO") Тогда
Элемент.СписокВыбора.Добавить(ОбъектXDTO.suggestions.value);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Можно пойти и дальше. Создадим у справочника реквизиты: Фамилия, Имя, Отчество и Пол (тип: Перечисления). И заполним их при окончании редактирования:
&НаКлиенте
Процедура НаименованиеПриИзменении(Элемент)
Если ЗначениеЗаполнено(Объект.Наименование) Тогда
ОбъектXDTO = ПолучитьОбъектXDTO(Объект.Наименование, 1);
Если ТипЗнч(ОбъектXDTO) = Тип("ОбъектXDTO") Тогда
ПолученныеДанные = ОбъектXDTO.suggestions;
Объект.Фамилия = ?(ТипЗнч(ПолученныеДанные.data.surname)=Тип("Строка"), ПолученныеДанные.data.surname, "");
Объект.Имя = ?(ТипЗнч(ПолученныеДанные.data.name)=Тип("Строка"), ПолученныеДанные.data.name, "");
Объект.Отчество = ?(ТипЗнч(ПолученныеДанные.data.patronymic)=Тип("Строка"), ПолученныеДанные.data.patronymic, "");
Если ПолученныеДанные.data.gender = "MALE" Тогда
Объект.Пол = ПредопределенноеЗначение("Перечисление.ПолФизическогоЛица.Мужской");
ИначеЕсли ПолученныеДанные.data.gender = "FEMALE" Тогда
объект.Пол = ПредопределенноеЗначение("Перечисление.ПолФизическогоЛица.Женский");
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Как результат получаем весьма удобный список подбора и разложение на составляющие ФИО.