1С 8.3 Заполнение информации о Контрагенте по ИНН через сервис api-fns.ru
Данные > Примеры кода 1С > 1С 8.3 Типовые (БП3, ЗУП, УТ)
Перейти в раздел примеры кода 1С 8.3:
- Необходимо получить API ключ, бесплатно выдается на портале;
- Получение формата данных JSON с помощью стандартного GET - запроса;
- Необходимо учитывать что подключение защищенное (нужно указать параметр СоединениеOpenSSL в http-соединении, иначе будет получен редирект);
- Описание API: https://api-fns.ru/api_help
Программное заполнение инфо о контрагента по ИНН через api-fns.ru API-ФНС для Предприятия 1С 8.3:
&НаКлиенте
Процедура ЗаполнитьПоИНН(Команда)
//Проверка заполнения ИНН;
Если НЕ ЗначениеЗаполнено(Объект.ИНН) Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Значение реквизита не заполнено !";
Сообщение.Поле = "ИНН";
Сообщение.Сообщить();
Возврат;
КонецЕсли;
//Создаем HTTPS-соединение, GET-запрос;
hostname = "api-fns.ru";
APIkey = "СЮДА ВВОДИМ АПИ КЛЮЧ";
resourse = СтрШаблон("/api/egr?req=%1&key=%2+", Объект.ИНН, APIkey);
httpconn = Новый HTTPСоединение(hostname ,,,,, 5, Новый ЗащищенноеСоединениеOpenSSL());
httprequest = Новый HTTPЗапрос(resourse);
Ответ = Неопределено;
Попытка
Ответ = httpconn.Получить(httprequest);
Исключение
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Не удалось выполнить http запрос, код состояния:" + Ответ.КодСостояния;
Сообщение.Сообщить();
Возврат;
КонецПопытки;
//чтение ответа HTTP-сервера;
СведенияJSON = Неопределено;
Попытка
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8));
СведенияJSON = ПрочитатьJSON(ЧтениеJSON, Истина);
Исключение
Возврат;
КонецПопытки;
//достаем из соответствия необходимую информацию;
Попытка
ПолученноеЗначениеКПП = СведенияJSON["items"][0]["ЮЛ"]["КПП"];
ПолученноеЗначениеНаименование = СведенияJSON["items"][0]["ЮЛ"]["НаимСокрЮЛ"];
ПолученноеЗначениеЮрЛицо = СведенияJSON["items"][0]["ЮЛ"]["Адрес"]["АдресПолн"];
Исключение
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Произошла ошибка! Перепроверьте введенную информацию";
Сообщение.Сообщить();
Возврат;
КонецПопытки;
//произвольное кол-во реквизитов;
//делаем проверку на расхождение полученных данных и данных контрагента;
Если Объект.КПП <> ПолученноеЗначениеКПП
Или Объект.Наименование <> ПолученноеЗначениеНаименование
Или Объект.Наименование <> ПолученноеЗначениеНаименование Тогда
//если расхождение есть, задаем вопрос:
ТекстВопроса = "Для ИНН "+ Объект.ИНН +
" в государственном реестре плательщиков соответствует юридическое лицо со следующими реквизитами:
|
|Наименование: " + ПолученноеЗначениеНаименование + "
|КПП : " + ПолученноеЗначениеКПП + "
|ЮрАдрес : " + ПолученноеЗначениеЮрЛицо + "
|Установить данные реквизиты для текущего контрагента?";
Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет);
КонецЕсли;
Если Ответ = КодВозвратаДиалога.Нет Тогда
Возврат;
Иначе
Объект.КПП = ПолученноеЗначениеКПП;
Объект.Наименование = ПолученноеЗначениеНаименование;
ЮрАдресЗначение = ПолучитьВидКонтактнойИнформацииЮрАдрес();
СтруктураОтбора = Новый Структура("Вид", ЮрАдресЗначение);
МассивЗначений = Объект.КонтактнаяИнформация.НайтиСтроки(СтруктураОтбора);
Если МассивЗначений.Количество() <> 0 Тогда
Объект.КонтактнаяИнформация.Удалить(МассивЗначений[0]);
КонецЕсли;
НоваяСтрокаТЧ = Объект.КонтактнаяИнформация.Добавить();
НоваяСтрокаТЧ.Тип = ПолучитьТипКонтактнойИнформации();
НоваяСтрокаТЧ.Вид = ЮрАдресЗначение;
НоваяСтрокаТЧ.Значение = ПолученноеЗначениеЮрЛицо;
КонецЕсли;
КонецПроцедуры
//вспомогательные функции;
&НаСервереБезКонтекста
Функция ПолучитьВидКонтактнойИнформацииЮрАдрес()
Возврат Справочники.ВидыКонтактнойИнформации.ЮридическийАдресКонтрагента;
КонецФункции // ()
&НаСервереБезКонтекста
Функция ПолучитьТипКонтактнойИнформации()
Возврат Перечисления.ТипыКонтактнойИнформации.Адрес;
КонецФункции // ()
Процедура ЗаполнитьПоИНН(Команда)
//Проверка заполнения ИНН;
Если НЕ ЗначениеЗаполнено(Объект.ИНН) Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Значение реквизита не заполнено !";
Сообщение.Поле = "ИНН";
Сообщение.Сообщить();
Возврат;
КонецЕсли;
//Создаем HTTPS-соединение, GET-запрос;
hostname = "api-fns.ru";
APIkey = "СЮДА ВВОДИМ АПИ КЛЮЧ";
resourse = СтрШаблон("/api/egr?req=%1&key=%2+", Объект.ИНН, APIkey);
httpconn = Новый HTTPСоединение(hostname ,,,,, 5, Новый ЗащищенноеСоединениеOpenSSL());
httprequest = Новый HTTPЗапрос(resourse);
Ответ = Неопределено;
Попытка
Ответ = httpconn.Получить(httprequest);
Исключение
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Не удалось выполнить http запрос, код состояния:" + Ответ.КодСостояния;
Сообщение.Сообщить();
Возврат;
КонецПопытки;
//чтение ответа HTTP-сервера;
СведенияJSON = Неопределено;
Попытка
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8));
СведенияJSON = ПрочитатьJSON(ЧтениеJSON, Истина);
Исключение
Возврат;
КонецПопытки;
//достаем из соответствия необходимую информацию;
Попытка
ПолученноеЗначениеКПП = СведенияJSON["items"][0]["ЮЛ"]["КПП"];
ПолученноеЗначениеНаименование = СведенияJSON["items"][0]["ЮЛ"]["НаимСокрЮЛ"];
ПолученноеЗначениеЮрЛицо = СведенияJSON["items"][0]["ЮЛ"]["Адрес"]["АдресПолн"];
Исключение
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Произошла ошибка! Перепроверьте введенную информацию";
Сообщение.Сообщить();
Возврат;
КонецПопытки;
//произвольное кол-во реквизитов;
//делаем проверку на расхождение полученных данных и данных контрагента;
Если Объект.КПП <> ПолученноеЗначениеКПП
Или Объект.Наименование <> ПолученноеЗначениеНаименование
Или Объект.Наименование <> ПолученноеЗначениеНаименование Тогда
//если расхождение есть, задаем вопрос:
ТекстВопроса = "Для ИНН "+ Объект.ИНН +
" в государственном реестре плательщиков соответствует юридическое лицо со следующими реквизитами:
|
|Наименование: " + ПолученноеЗначениеНаименование + "
|КПП : " + ПолученноеЗначениеКПП + "
|ЮрАдрес : " + ПолученноеЗначениеЮрЛицо + "
|Установить данные реквизиты для текущего контрагента?";
Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет);
КонецЕсли;
Если Ответ = КодВозвратаДиалога.Нет Тогда
Возврат;
Иначе
Объект.КПП = ПолученноеЗначениеКПП;
Объект.Наименование = ПолученноеЗначениеНаименование;
ЮрАдресЗначение = ПолучитьВидКонтактнойИнформацииЮрАдрес();
СтруктураОтбора = Новый Структура("Вид", ЮрАдресЗначение);
МассивЗначений = Объект.КонтактнаяИнформация.НайтиСтроки(СтруктураОтбора);
Если МассивЗначений.Количество() <> 0 Тогда
Объект.КонтактнаяИнформация.Удалить(МассивЗначений[0]);
КонецЕсли;
НоваяСтрокаТЧ = Объект.КонтактнаяИнформация.Добавить();
НоваяСтрокаТЧ.Тип = ПолучитьТипКонтактнойИнформации();
НоваяСтрокаТЧ.Вид = ЮрАдресЗначение;
НоваяСтрокаТЧ.Значение = ПолученноеЗначениеЮрЛицо;
КонецЕсли;
КонецПроцедуры
//вспомогательные функции;
&НаСервереБезКонтекста
Функция ПолучитьВидКонтактнойИнформацииЮрАдрес()
Возврат Справочники.ВидыКонтактнойИнформации.ЮридическийАдресКонтрагента;
КонецФункции // ()
&НаСервереБезКонтекста
Функция ПолучитьТипКонтактнойИнформации()
Возврат Перечисления.ТипыКонтактнойИнформации.Адрес;
КонецФункции // ()
0
комментарии
____________________
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник