Загрузка адреса юридического лица из ЕГРЮЛ

Обработки - Обработка справочников

Обработка позволяет актуализировать адрес контрагента из ЕГРЮЛ. Актуальна в виду вступления в силу Постановления Правительства РФ от 19.08.2017 № 981. Работает с сайтом ИФНС и не требует никаких активных учетных записей. Имеется возможность доработать под себя

Обработка позволяет актуализировать адрес контрагента из ЕГРЮЛ. Актуальна в виду вступления в силу Постановления Правительства РФ от 19.08.2017 № 981. Работает с сайтом ИФНС и не требует никаких активных учетных записей. Необходимо участие пользователя для ввода капчи.

Просто интегрируется в вашу систему - достаточно просто скопировать форму из обработки и при открытии передавать в параметрах ИНН. По закрытию форма возвращает полученный адрес.

Пример подключения:

    ПараметрыОткрытия = Новый Структура("ИНН", ИНН);
    АдресЕГРЮЛ = ОткрытьФормуМодально("Справочник.Контрагенты.Форма.ФормаПолученияАдресаИзЕГРЮЛ", ПараметрыОткрытия);
    Если ЗначениеЗаполнено(АдресЕГРЮЛ) Тогда
        Запись = Неопределено;
        Для Каждого ЭлементНабора Из НаборКонтактнойИнформации Цикл
            Если ЭлементНабора.Вид.Наименование = "Адрес ЕГРЮЛ" Тогда
                Запись = ЭлементНабора;
                Прервать;
            КонецЕсли;
        КонецЦикла;
        Если Запись = Неопределено Тогда
            Запись = НаборКонтактнойИнформации.Добавить();
        КонецЕсли;
        Запись.Вид = Справочники.ВидыКонтактнойИнформации.НайтиПоНаименованию("Адрес ЕГРЮЛ");
        Запись.Тип = Перечисления.ТипыКонтактнойИнформации.Адрес;
        Запись.Представление = АдресЕГРЮЛ;
    КонецЕсли;

Для разработчиков на форме есть скрытые поля, для контроля результатов обращения к серверу ИФНС.

Тестировалось на платформе 8.3.10.2561. В конфигурациях "Библиотека стандартных подсистем", редакции 2.3. (2.3.4.45)  и Альфа-Авто: Автосалон+Автосервис+Автозапчасти ПРОФ, редакция 5.1 (5.1.06.04)

Скачать файлы

Наименование Файл Версия Размер
Загрузка адреса юридического лица из ЕГРЮЛ:
.epf 8,25Kb
20.09.17
27
.epf 1.0 8,25Kb 27 Скачать

См. также

Комментарии
1. Михаил Петухов (oldfornit) 21.09.17 17:49 Сейчас в теме
потрясающе!
Восхитительная смесь управляемых форм, модальных открытий и совершенно неприспособленного для работы интерфейса.

Бесплатно, то есть даром, дам рабочий код.

//
// Параметры:
//  ИНН     - Строка - ИНН организации
// 
// Возвращаемое значение:
// Структура  - ЮрЛицо, ДатаРегистрации, НаименованиеПолное, НаименованиеКраткое,
//        ОКОПФ, КПП, ОГРН, РуководительДолжность, РуководительФИО, АдресЮридический
//
Функция ДанныеКонтрагентаПоИНН(Знач ИНН) Экспорт
    
    // подробности см https://dadata.ru/api/suggest/
    
    // резервный токен
     Токен = "ваш полученный токен";
    
    Если Неопределено = Токен Тогда
        Возврат Неопределено;
    КонецЕсли; 
    
    АдресСервиса = "https://suggestions.dadata.ru/suggestions/api/4_1/rs/suggest/party";
    
    Ошибка = Ложь;
    Ответ = Неопределено;
    Заголовки = Новый Соответствие;
    Заголовки.Вставить("Content-Type", "application/json");
    Заголовки.Вставить("Authorization", "Token " + Токен);
    Заголовки.Вставить("Accept", "application/json");
    
    ТелоЗапроса = "{""query"" : """ + ИНН + """ }";
    
    ВыполнитьHTTPЗапросPOST(АдресСервиса, 1, Заголовки, ТелоЗапроса, Ответ, Ошибка);
    
    Если Ошибка Тогда
        Возврат Неопределено;
    КонецЕсли;
    
    ТекстОтвета = Ответ.ПолучитьТелоКакСтроку();
    
    ЧтениеJSON = Новый ЧтениеJSON;
    ЧтениеJSON.УстановитьСтроку(ТекстОтвета);
    
    ДанныеСервиса = ПрочитатьJSON(ЧтениеJSON, Истина);
    ЧтениеJSON.Закрыть();
    
    ПолученныеДанныеСервиса = ДанныеСервиса.Получить("suggestions");
    Если ПолученныеДанныеСервиса = Неопределено Тогда
        Возврат Неопределено;
    КонецЕсли; 
    
    ДанныеКонтрагента = Новый Структура("ЮрЛицо, ДатаРегистрации, НаименованиеПолное, НаименованиеКраткое,
    |ОКОПФ, КПП, ОГРН, РуководительДолжность, РуководительФИО, АдресЮридический");   
    Для каждого ДанныеСервиса Из ПолученныеДанныеСервиса Цикл
        промДанныеКонтрагента = ДанныеСервиса.Получить("data");
        
        Если Неопределено = промДанныеКонтрагента Тогда
            Продолжить;
        КонецЕсли; 
        
        Если Не ЗначениеЗаполнено(промДанныеКонтрагента["state"]["actuality_date"]) Тогда
            Продолжить;
        КонецЕсли;
        
        Если ВРЕГ(промДанныеКонтрагента["state"]["status"]) = "LIQUIDATED"  Тогда
            Продолжить;
        КонецЕсли; 
        
        Если Неопределено = промДанныеКонтрагента["state"]["registration_date"] Тогда
        	Продолжить;
        КонецЕсли; 
        
        Если ЗначениеЗаполнено(ДанныеКонтрагента.ДатаРегистрации) 
            И ДанныеКонтрагента.ДатаРегистрации > (Дата("19700101") + промДанныеКонтрагента["state"]["registration_date"]/1000) Тогда
            Продолжить;
        КонецЕсли; 
        
        ДанныеКонтрагента.Юрлицо                = ВРЕГ(промДанныеКонтрагента["type"]) = "LEGAL";
        ДанныеКонтрагента.ДатаРегистрации       = Дата("19700101") + промДанныеКонтрагента["state"]["registration_date"]/1000;
        ДанныеКонтрагента.НаименованиеКраткое   = промДанныеКонтрагента["name"]["short_with_opf"];
        ДанныеКонтрагента.НаименованиеПолное    = промДанныеКонтрагента["name"]["full_with_opf"];
        ДанныеКонтрагента.ОКОПФ                 = промДанныеКонтрагента["opf"]["short"];
        ДанныеКонтрагента.КПП                   = промДанныеКонтрагента["kpp"];
        ДанныеКонтрагента.ОГРН                  = промДанныеКонтрагента["ogrn"];
        Если "INDIVIDUAL" = ВРЕГ(промДанныеКонтрагента["type"])Тогда
            ДанныеКонтрагента.РуководительДолжность = промДанныеКонтрагента["opf"]["full"];
            ДанныеКонтрагента.РуководительФИО       = промДанныеКонтрагента["name"]["full"];
        Иначе
            Если Неопределено = промДанныеКонтрагента["management"] Тогда
                ДанныеКонтрагента.РуководительДолжность = "";
                ДанныеКонтрагента.РуководительФИО       = "";
            Иначе
                ДанныеКонтрагента.РуководительДолжность = промДанныеКонтрагента["management"]["post"];
                ДанныеКонтрагента.РуководительФИО       = промДанныеКонтрагента["management"]["name"];
            КонецЕсли; 
            
        КонецЕсли; 
        
        ДанныеКонтрагента.АдресЮридический      = ? (Неопределено = промДанныеКонтрагента["address"], "", промДанныеКонтрагента["address"]["unrestricted_value"]);
    КонецЦикла; 
    
    Если Не ЗначениеЗаполнено(ДанныеКонтрагента.Юрлицо) Тогда
    	ДанныеКонтрагента = Неопределено;
    КонецЕсли; 
    
    Возврат ДанныеКонтрагента;
    
КонецФункции

Процедура ВыполнитьHTTPЗапросPOST(Знач АдресРесурса, Знач ЧастейПутиВАдресе = 0, Знач Заголовки = Неопределено, Знач ТелоЗапроса = Неопределено, Результат, Ошибка = Ложь) Экспорт
    
    СтруктураURI = СтруктураURI(АдресРесурса);
    
    АдресРесурса = СтруктураURI.Хост;
    
    Если ЧастейПутиВАдресе > 0 Тогда
        ЧастиПути = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(СтруктураURI.ПутьНаСервере, "/", Истина);
        Для Счетчик = 1 По ЧастейПутиВАдресе Цикл
        	АдресРесурса = АдресРесурса + "/" + ЧастиПути[Счетчик - 1];
        КонецЦикла; 
        
        ПутьНаСервере = "";
        
        Для Подсчетчик = Счетчик По ЧастиПути.Количество() Цикл
        	ПутьНаСервере = ПутьНаСервере + ЧастиПути[Подсчетчик - 1] + "/";
        КонецЦикла; 
        
    Иначе
        ПутьНаСервере = СтруктураURI.ПутьНаСервере;
    КонецЕсли; 
    
    ЗащищенноеСоединение = Неопределено;
    
    Если "https" = СтруктураURI.Схема Тогда
    	ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL;
    КонецЕсли; 
    
    HTTPСоединение = Новый HTTPСоединение(АдресРесурса, СтруктураURI.Порт, , , , , ЗащищенноеСоединение); 
    
    Запрос = Новый HTTPЗапрос(ПутьНаСервере);
    
    Если ЗначениеЗаполнено(Заголовки) Тогда
    	Запрос.Заголовки = Заголовки;
    КонецЕсли; 
    
    Если ЗначениеЗаполнено(ТелоЗапроса) И ТипЗнч(ТелоЗапроса) = Тип("Строка") Тогда
    	Запрос.УстановитьТелоИзСтроки(ТелоЗапроса);
    КонецЕсли; 
    
    Попытка
    	Результат = HTTPСоединение.ОтправитьДляОбработки(Запрос);
    Исключение
        Ошибка = Истина;
        Возврат;
    КонецПопытки;
    
    Если Результат.КодСостояния > 300 Тогда
    	Ошибка = Истина;
    КонецЕсли; 
    
КонецПроцедуры

Функция СтруктураURI(Знач СтрокаURI) Экспорт
	
	СтрокаURI = СокрЛП(СтрокаURI);
	
	// схема
	Схема = "";
	Позиция = СтрНайти(СтрокаURI, "://");
	Если Позиция > 0 Тогда
		Схема = НРег(Лев(СтрокаURI, Позиция - 1));
		СтрокаURI = Сред(СтрокаURI, Позиция + 3);
	КонецЕсли;

	// Строка соединения и путь на сервере.
	СтрокаСоединения = СтрокаURI;
	ПутьНаСервере = "";
	Позиция = СтрНайти(СтрокаСоединения, "/");
	Если Позиция > 0 Тогда
		ПутьНаСервере = Сред(СтрокаСоединения, Позиция + 1);
		СтрокаСоединения = Лев(СтрокаСоединения, Позиция - 1);
	КонецЕсли;
		
	// Информация пользователя и имя сервера.
	СтрокаАвторизации = "";
	ИмяСервера = СтрокаСоединения;
	Позиция = СтрНайти(СтрокаСоединения, "@");
	Если Позиция > 0 Тогда
		СтрокаАвторизации = Лев(СтрокаСоединения, Позиция - 1);
		ИмяСервера = Сред(СтрокаСоединения, Позиция + 1);
	КонецЕсли;
	
	// логин и пароль
	Логин = СтрокаАвторизации;
	Пароль = "";
	Позиция = СтрНайти(СтрокаАвторизации, ":");
	Если Позиция > 0 Тогда
		Логин = Лев(СтрокаАвторизации, Позиция - 1);
		Пароль = Сред(СтрокаАвторизации, Позиция + 1);
	КонецЕсли;
	
	// хост и порт
	Хост = ИмяСервера;
	Порт = "";
	Позиция = СтрНайти(ИмяСервера, ":");
	Если Позиция > 0 Тогда
		Хост = Лев(ИмяСервера, Позиция - 1);
		Порт = Сред(ИмяСервера, Позиция + 1);
		Если Не СтроковыеФункцииКлиентСервер.ТолькоЦифрыВСтроке(Порт) Тогда
			Порт = "";
		КонецЕсли;
	КонецЕсли;
	
	Результат = Новый Структура;
	Результат.Вставить("Схема", Схема);
	Результат.Вставить("Логин", Логин);
	Результат.Вставить("Пароль", Пароль);
	Результат.Вставить("ИмяСервера", ИмяСервера);
	Результат.Вставить("Хост", Хост);
	Результат.Вставить("Порт", ?(ПустаяСтрока(Порт), Неопределено, Число(Порт)));
	Результат.Вставить("ПутьНаСервере", ПутьНаСервере);
	
	Возврат Результат;
	
КонецФункции

Показать
2. Игорь Герман (German_Tagil) 6 28.09.17 14:40 Сейчас в теме
3. Куряев Вадим (if74) 02.10.17 00:12 Сейчас в теме
Оставьте свое сообщение