Процедура ЗаполнитьИННПоПаспортнымДаннымНаСервере() Если НЕ ЗначениеЗаполнено(Объект.Ссылка) Тогда Сообщить("Перед заполнением ИНН необходимо записать элемент справочника"); Возврат; КонецЕсли; Запрос = Новый Запрос("ВЫБРАТЬ | ПодтверждающиеДокументы.Владелец.Фамилия КАК Фамилия, | ПодтверждающиеДокументы.Владелец.Имя КАК Имя, | ПодтверждающиеДокументы.Владелец.Отчество КАК Отчество, | ПодтверждающиеДокументы.Владелец.ДатаРождения КАК ДатаРождения, | ПодтверждающиеДокументы.Серия КАК Серия, | ПодтверждающиеДокументы.Номер КАК Номер, | ПодтверждающиеДокументы.ДатаВыдачи КАК ДатаВыдачиПаспорта |ИЗ | Справочник.ПодтверждающиеДокументы КАК ПодтверждающиеДокументы |ГДЕ | ПодтверждающиеДокументы.ВидПодтверждающегоДокумента = ЗНАЧЕНИЕ(Перечисление.ВидыДокументов.Паспорт) | И ПодтверждающиеДокументы.Владелец = &Владелец | И НЕ ПодтверждающиеДокументы.ПометкаУдаления | И ПодтверждающиеДокументы.Текущий"); Запрос.УстановитьПараметр("Владелец", Объект.Ссылка); РезультатЗапроса = Запрос.Выполнить(); Если РезультатЗапроса.Пустой() Тогда Сообщить("У данного контрагента не занесен паспорт! Заполнение ИНН невозможно"); Возврат; КонецЕсли; Выборка = РезультатЗапроса.Выбрать(); Если Выборка.Следующий() Тогда СоединениеHTTP = Новый HTTPСоединение("service.nalog.ru",443,,,,10, Новый ЗащищенноеСоединениеOpenSSL(,),Ложь); Заголовки = Новый Соответствие; Заголовки.Вставить("Content-type", "application/x-www-form-urlencoded"); СерияПаспорта = СтрЗаменить(СокрЛП(Выборка.Серия), " ", ""); СерияПаспорта = Лев(СерияПаспорта, 2) + " " + Прав(СерияПаспорта, 2); АдресРесурса = "/inn-proc.do?" + "fam=" + СокрЛП(Выборка.Фамилия) + "&nam=" + СокрЛП(Выборка.Имя) + "&otch=" + СокрЛП(Выборка.Отчество) + "&bdate=" + Формат(Выборка.ДатаРождения, "ДФ=dd.MM.yyyy") + // Формат даты: 04.12.1995 "&bplace" + // Оставляем пустым "&doctype=21" + // Так указывается тип Паспорт на сайте "&docno=" + СерияПаспорта + " " + Выборка.Номер + // Строка вида "99 99 9999990" "&docdt=" + Формат(Выборка.ДатаВыдачиПаспорта, "ДФ=dd.MM.yyyy") + // Формат даты: 04.12.1995 "&c=innMy" + "&captcha" + "&captchaToken"; ЗапросHTTP = Новый HTTPЗапрос(АдресРесурса, Заголовки); Попытка Ответ = СоединениеHTTP.ОтправитьДляОбработки(ЗапросHTTP); Исключение Сообщить(ОписаниеОшибки()); Возврат; КонецПопытки; Если Ответ.КодСостояния = 200 Тогда ТелоОтвета = Ответ.ПолучитьТелоКакСтроку(); СтруктураОтвета = СтруктураИзСтрокиJSON(ТелоОтвета); Если НЕ СтруктураОтвета = Неопределено Тогда Если СтруктураОтвета.code = 1 Тогда Объект.ИНН = СтруктураОтвета.inn; ИначеЕсли СтруктураОтвета.code = 0 Тогда Сообщить("По данным ФНС не найдена информация об ИНН. |Рекомендуется проверить правильность введенных данных и повторить попытку поиска."); КонецЕсли; КонецЕсли; Иначе Сообщить("Сервер вернул код состояния " + Ответ.КодСостояния + Символы.ПС + ТелоОтвета = Ответ.ПолучитьТелоКакСтроку()); КонецЕсли; КонецЕсли; КонецПроцедуры Функция СтруктураИзСтрокиJSON(Строка, СвойстваТипаДата = Неопределено) Экспорт ЧтениеJSON = Новый ЧтениеJSON; ЧтениеJSON.УстановитьСтроку(Строка); Попытка ЗаписьJSON = ПрочитатьJSON(ЧтениеJSON, Ложь, СвойстваТипаДата, ФорматДатыJSON.ISO); Исключение Возврат Неопределено; КонецПопытки; Возврат ?(ТипЗнч(ЗаписьJSON) = Тип("Структура"), ЗаписьJSON, Неопределено); КонецФункции
{"contextData":{"NaN":{}},"contextMarkers":[]}