Mail: info@it-titan.ru

Алексеенко Павел

Работаем с сервисом подсказок на формах: dadata.ru

Сервис dadata.ru позволяет получать подсказки по ФИО и по Адресам. У него есть довольно неплохо описанный API. Мы Рассмотрим, как с помощью него можно вывести подсказку в ФИО. 

Данными с сайтом можно обмениваться в двух форматах: 

  1. XML
  2. JSON

Я решил делать в xml, как в более используемом в 1С. Итак, для начала создадим новую пустую конфигурацию, со справочником Физлица, и так же создадим XDTO схему:

схема XDTO

Создадим форму элемента справочника Физлица.

Основной функцией у нас будет: ПолучитьОбъектXDTO, в которую мы будем передавать набираемый текст (Обратите внимание, что вы должны передавать в параметрах ваш код авторизации, который вы можете получить свободно на сайте).

&НаКлиенте
Функция ПолучитьОбъектXDTO(Текст, КоличествоПодсказок = 10)
	
	HTTPЗапрос = Новый HTTPЗапрос();
	HTTPЗапрос.АдресРесурса = "/api/v2/suggest/fio";
	
	HTTPЗапрос.Заголовки.Вставить("Content-Type", "application/xml");
	HTTPЗапрос.Заголовки.Вставить("Accept", "application/xml");
	HTTPЗапрос.Заголовки.Вставить("Authorization", "ВАШ КОД АВТОРИЗАЦИИ");
	HTTPЗапрос.УстановитьТелоИзСтроки("<req><query>" + Текст + "</query><count>" +  КоличествоПодсказок + "</count></req>");
	
	Соединение = Новый HTTPСоединение("dadata.ru",,,,Новый ИнтернетПрокси,, Новый ЗащищенноеСоединениеOpenSSL);
	
	ОтветHTTP = Соединение.ОтправитьДляОбработки(HTTPЗапрос);
	
	Тело = ОтветHTTP.ПолучитьТелоКакСтроку();	
	Если Тело = "<SuggestFioResponse/>" Тогда
		Возврат Ложь;
	Иначе
		структурныйТип = Фабрика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);
		КонецЕсли;
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура УстановитьПол(gender)
	
	Если gender = "MALE" Тогда
		Объект.Пол = Перечисления.ПолФизическогоЛица.Мужской;	
	ИначеЕсли gender = "FEMALE" Тогда
		объект.Пол = Перечисления.ПолФизическогоЛица.Женский;	
	КонецЕсли;
	
КонецПроцедуры

 Как результат получаем весьма удобный список подбора, и разложение на состовляющие ФИО.

результат

3 года назад
3 года назад удалил


© 2014-2017 Alekseenko Pavel / qwinter - все права защищены

Комментировать