Процедура ЗаполнитьИННПоПаспортнымДаннымНаСервере()
Если НЕ ЗначениеЗаполнено(Объект.Ссылка) Тогда
Сообщить("Перед заполнением ИНН необходимо записать элемент справочника");
Возврат;
КонецЕсли;
Запрос = Новый Запрос("ВЫБРАТЬ
| ПодтверждающиеДокументы.Владелец.Фамилия КАК Фамилия,
| ПодтверждающиеДокументы.Владелец.Имя КАК Имя,
| ПодтверждающиеДокументы.Владелец.Отчество КАК Отчество,
| ПодтверждающиеДокументы.Владелец.ДатаРождения КАК ДатаРождения,
| ПодтверждающиеДокументы.Серия КАК Серия,
| ПодтверждающиеДокументы.Номер КАК Номер,
| ПодтверждающиеДокументы.ДатаВыдачи КАК ДатаВыдачиПаспорта
|ИЗ
| Справочник.ПодтверждающиеДокументы КАК ПодтверждающиеДокументы
|ГДЕ
| ПодтверждающиеДокументы.ВидПодтверждающегоДокумента = ЗНАЧЕНИЕ(Перечисление.ВидыДокументов.Паспорт)
| И ПодтверждающиеДокументы.Владелец = &Владелец
| И НЕ ПодтверждающиеДокументы.ПометкаУдаления
| И ПодтверждающиеДокументы.Текущий");
Запрос.УстановитьПараметр("Владелец", Объект.Ссылка);
РезультатЗапроса = Запрос.Выполнить();
Если РезультатЗапроса.Пустой() Тогда
Сообщить("У данного контрагента не занесен паспорт! Заполнение ИНН невозможно");
Возврат;
КонецЕсли;
Выборка = РезультатЗапроса.Выбрать();
Если Выборка.Следующий() Тогда
Соединение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":[]}