Как реализовать автоматическое заполнение данных контрагентов по ИНН в 1С

Программист 1С v8.3 (Обычные формы) IT и автоматизация бизнеса
← На главную

Автоматизация ввода данных контрагентов — это одна из наиболее востребованных задач в любой конфигурации 1С. Она позволяет не только ускорить работу пользователя, но и минимизировать ошибки ручного ввода, которые могут привести к проблемам с налоговой отчетностью. В данной статье мы разберем несколько способов реализации этой функции: от использования стандартного сервиса 1С до интеграции со сторонними API, такими как DaData, а также рассмотрим технические нюансы для различных платформ.

Вариант 1: Использование сервиса «1С:Контрагент» через SOAP

Если у вашей организации есть действующая подписка ИТС, вы можете использовать официальный шлюз 1С. Этот метод является наиболее «родным» для программ 1С, так как данные поступают напрямую из реестров, поддерживаемых вендором. Рассмотрим реализацию на примере кода, который может быть адаптирован даже для старых систем (например, 1С 7.7), но логика остается актуальной и для 8-й версии.

Для отправки запроса мы будем использовать объект WinHttp.WinHttpRequest.5.1. Основная задача здесь — сформировать правильный XML-пакет и передать учетные данные ИТС.


Процедура ПолучитьСведенияПоИТС(ИннКонтрагента)
    Инн = СокрЛП(ИннКонтрагента);
    // Определяем тип функции в зависимости от длины ИНН
    Если СтрДлина(Инн) = 10 Тогда 
        ФункцияУРЛ = "getCorporationRequisitesByINN"; // Юридическое лицо
    Иначе
        ФункцияУРЛ = "getEntrepreneurRequisitesByINN"; // ИП
    КонецЕсли;

    URL = "https://api.orgregister.1c.ru/orgregister/v7?wsdl";
    WinHttp = Новый COMОбъект("WinHttp.WinHttpRequest.5.1");  
    
    // Формируем SOAP-запрос
    ТекстЗапроса = "<?xml version=""1.0"" encoding=""UTF-8"" standalone=""no""?>  
    |<SOAP-ENV:Envelope xmlns:SOAPSDK1=""http://www.w3.org/2001/XMLSchema"";   
    | xmlns:SOAPSDK2=""http://www.w3.org/2001/XMLSchema-instance"";   
    | xmlns:SOAPSDK3=""http://schemas.xmlsoap.org/soap/encoding/"";   
    | xmlns:SOAP-ENV=""http://schemas.xmlsoap.org/soap/envelope/"";   
    | xmlns:ns1=""http://ws.orgregister.company1c.com/"">;  
    |<SOAP-ENV:Body>  
    | <ns1:" + ФункцияУРЛ + ">  
    | <ns1:INN >" + Инн + "</ns1:INN>  
    | <ns1:configurationName>0</ns1:configurationName>    
    | </ns1:" + ФункцияУРЛ + ">  
    |</SOAP-ENV:Body>  
    |</SOAP-ENV:Envelope>";    
    
    WinHttp.Open("POST", URL, Ложь);    
    // ВАЖНО: Требуется подписка ИТС
    WinHttp.SetCredentials("Ваш_Логин_ИТС", "Ваш_Пароль_ИТС", 0);  
    WinHttp.Send(ТекстЗапроса);  
    
    Если WinHttp.Status = 200 Тогда
        Ответ = WinHttp.ResponseText;
        // Здесь необходимо распарсить полученный XML ответ
        Сообщить("Данные получены успешно!");
    Иначе
        Сообщить("Ошибка запроса: " + WinHttp.Status);
    КонецЕсли;
КонецПроцедуры

Важный нюанс: использование этого метода требует наличия активного договора сопровождения. Если его нет, система вернет ошибку авторизации.

Вариант 2: Интеграция с сервисом DaData через JSON

Проанализируем альтернативный и крайне популярный вариант — использование сервиса DaData. Он привлекателен тем, что предоставляет до 10 000 бесплатных запросов в день, что вполне достаточно для среднего бизнеса. В отличие от предыдущего метода, здесь мы будем использовать современный протокол передачи данных JSON и встроенные объекты платформы HTTPСоединение.

Разберем по шагам реализацию запроса для конфигураций на управляемых или обычных формах (8.3):


Процедура ЗаполнитьПоИНН_DaData(ИНН)
    Если СтрДлина(ИНН) < 10 Тогда
        Сообщить("Некорректный ИНН");
        Возврат;
    КонецЕсли;
    
    // Настраиваем защищенное соединение
    Соединение = Новый HTTPСоединение("suggestions.dadata.ru",,,, , , Новый ЗащищенноеСоединениеOpenSSL);
    
    // Формируем заголовки
    Заголовки = Новый Соответствие();
    Заголовки.Вставить("Content-Type", "application/json");
    Заголовки.Вставить("Accept", "application/json");
    // Вместо 'Ваш_Токен' вставьте API-ключ из личного кабинета DaData
    Заголовки.Вставить("Authorization", "Token Ваш_Токен");
    
    // Подготовка тела запроса
    ТелоЗапроса = "{ ""query"": """ + СокрЛП(ИНН) + """, ""status"": ""ACTIVE"" }";
    
    Запрос = Новый HTTPЗапрос("/suggestions/api/4_1/rs/suggest/party", Заголовки);
    Запрос.УстановитьТелоИзСтроки(ТелоЗапроса);
    
    Попытка
        Ответ = Соединение.ОтправитьДляОбработки(Запрос);
        Если Ответ.КодСостояния = 200 Тогда
            ТекстОтвета = Ответ.ПолучитьТелоКакСтроку();
            
            // Читаем JSON
            Чтение = Новый ЧтениеJSON;
            Чтение.УстановитьСтроку(ТекстОтвета);
            Данные = ПрочитатьJSON(Чтение);
            
            Если Данные.suggestions.Количество() > 0 Тогда
                Сведения = Данные.suggestions[0].data;
                
                Наименование = Сведения.name.short_with_opf;
                ОГРН = Сведения.ogrn;
                Адрес = Сведения.address.unrestricted_value;
                
                // Проверка типа: ЮЛ или ИП
                Если Сведения.type = "LEGAL" Тогда
                    Руководитель = Сведения.management.name;
                    Должность = Сведения.management.post;
                КонецЕсли;
                
                Сообщить("Наименование: " + Наименование);
                Сообщить("Адрес: " + Адрес);
            Иначе
                Сообщить("Контрагент с таким ИНН не найден.");
            КонецЕсли;
        КонецЕсли;
    Исключение
        Сообщить("Ошибка связи с сервисом: " + ОписаниеОшибки());
    КонецПопытки;
КонецПроцедуры

Рассмотрим преимущества этого подхода: во-первых, использование HTTPСоединение более стабильно в современных ОС (включая Linux-серверы), во-вторых, работа с ПрочитатьJSON значительно проще, чем парсинг XML-структур.

Вариант 3: Быстрая проверка через внешние ресурсы (Rusprofile)

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


Процедура ПроверитьНаRusprofile(ИНН)
    // Формируем прямую ссылку на поиск по ИНН
    АдресСайта = "https://www.rusprofile.ru/search?query=" + ИНН + "&type=ul&search_inactive=2";
    ЗапуститьПриложение(АдресСайта);
КонецПроцедуры

Этот простой метод позволяет бухгалтеру мгновенно увидеть статус предприятия (действует или ликвидировано), наличие судебных дел и другие важные маркеры без сложных интеграций.

Дополнительные рекомендации и технические нюансы

При внедрении механизмов заполнения данных по ИНН, проанализируем несколько важных аспектов, которые помогут сделать решение профессиональным:

  1. Кэширование данных: Чтобы не тратить лимиты платных запросов (в случае с DaData) и ускорить работу, рекомендуем создать в конфигурации РегистрСведений «КэшЗапросовКонтрагентов». Перед отправкой HTTP-запроса проверяйте, не искали ли этот ИНН сегодня.
  2. Фоновое выполнение: Сетевые запросы могут занимать время (от 1 до 5 секунд). Чтобы интерфейс 1С не «зависал», выполняйте заполнение через ФоновыеЗадания. Это обеспечит комфортную работу пользователя.
  3. Обработка ошибок: Всегда используйте конструкцию Попытка...Исключение при работе с внешними ресурсами. Отсутствие интернета или временная недоступность сервиса не должны приводить к аварийному завершению работы программы.
  4. Юридическая значимость: Помните, что данные из API (особенно бесплатных) могут обновляться с задержкой в несколько дней. Для критически важных сделок рекомендуется запрашивать официальную выписку через API ФНС «Прозрачный бизнес».
  5. Финансовые показатели: Если ваша цель — оценка надежности, обратите внимание на ГИР БО (Государственный информационный ресурс бухгалтерской отчетности). Через его API можно бесплатно подтягивать данные о балансе и прибыли контрагента напрямую в 1С.

Подведем итог: для типовых конфигураций с поддержкой ИТС оптимально использовать встроенные механизмы 1С. Если же вы работаете с самописной системой или старой версией программы (7.7, 8.1), лучшим выбором станет интеграция с DaData через HTTP-запросы. Оба метода обеспечивают высокую точность данных и существенно экономят время сотрудников.

← На главную