Как реализовать автозаполнение реквизитов контрагента по ИНН в 1С

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

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

Проблема ручного ввода и выбор стратегии решения

Когда пользователь заводит нового контрагента, ему приходится заполнять множество полей: краткое и полное наименование, КПП, ОГРН, юридический адрес и сведения о руководителе. Ошибки в этих данных могут привести к проблемам с налоговой отчетностью и некорректному формированию первичных документов. Мы рассмотрим три основных способа автоматизации этого процесса:

  1. Использование сервиса 1С:Контрагент через WSПрокси.
  2. Проверка существования ИНН через бесплатный сервис ФНС.
  3. Интеграция с внешними API (например, DaData) через HTTPСоединение.

Вариант 1: Использование официального сервиса 1С:Контрагент

Это наиболее «родной» способ для систем 1С. Сервис предоставляет полные данные из ЕГРЮЛ/ЕГРИП. Рассмотрим код, который позволяет получить данные по ИНН. Основная работа здесь строится вокруг объектов WSОпределения и WSПрокси. Мы подключаемся к веб-сервису, передаем параметры и получаем структурированный ответ в формате XDTO.

Проанализируем пример реализации:


// Создаем определение веб-сервиса
Определение = Новый WSОпределения("https://api.orgregister.1c.ru/orgregister/v7?wsdl", ЛогинИТС, ПарольИТС);

// Инициализируем прокси-объект для взаимодействия с методами сервиса
Сервис = Новый WSПрокси(Определение, "http://ws.orgregister.company1c.com/", "RequisitesWebServiceEndpointImpl7Service", "RequisitesWebServiceEndpointImpl7Port");

// Указываем учетные данные для авторизации в сервисе 1С:Контрагент
Сервис.Пользователь = ЛогинИТС;
Сервис.Пароль = ПарольИТС;

// Получаем тип параметра из фабрики XDTO
ТипWSПараметра = Сервис.ФабрикаXDTO.Пакеты.Получить("http://ws.orgregister.company1c.com/").Получить("getCorporationRequisitesByINN");

// Создаем объект параметра и передаем в него ИНН
ПараметрЗапроса = Сервис.ФабрикаXDTO.Создать(ТипWSПараметра);
ПараметрЗапроса.INN = "7707083893"; // Пример ИНН

// Выполняем запрос к сервису
Результат = Сервис.getCorporationRequisitesByINN(ПараметрЗапроса);

Важные нюансы данного метода:

Вариант 2: Проверка корректности через сервис ФНС

Иногда задача стоит проще: не заполнить все данные, а просто проверить, существует ли такой контрагент в базе налоговой и не закрыт ли он. Для этого используется сервис npchk.nalog.ru. Обратите внимание, что этот сервис не возвращает название или адрес, он возвращает только статус (код состояния).

Разберем пример реализации такой проверки:


Определение = Новый WSОпределения("http://npchk.nalog.ru/FNSNDSCAWS_2?wsdl");
Прокси = Новый WSПрокси(Определение, "http://ws.unisoft", "FNSNDSCAWS2", "FNSNDSCAWS2_Port");

// Создаем структуру запроса через фабрику XDTO
Запрос = Прокси.ФабрикаXDTO.Создать(Прокси.ФабрикаXDTO.Тип("http://ws.unisoft/FNSNDSCAWS2/Request", "NdsRequest2"));
Контрагент = Прокси.ФабрикаXDTO.Создать(Прокси.ФабрикаXDTO.Тип("http://ws.unisoft/FNSNDSCAWS2/Request", "NdsRequest2_NP"));

// Заполняем данные для проверки
Контрагент.INN = "7708503727"; 
Контрагент.KPP = "770801001"; 
Контрагент.DT = Формат(ТекущаяДата(), "ДФ=dd.MM.yyyy"); 
Запрос.NP.Добавить(Контрагент); 

// Получаем ответ от ФНС
РезультатЗапроса = Прокси.NdsRequest2(Запрос);

Для каждого ОтветДляКонтрагента из РезультатЗапроса.NP Цикл
    СтатусКонтрагента = ОтветДляКонтрагента.State;
    // Статус "0" означает, что контрагент найден и активен
КонецЦикла;

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

Вариант 3: Использование современных API (на примере DaData)

Если ваша база 1С не имеет доступа к порталу 1С или вы хотите избежать громоздких WSОпределения, отличным выбором будет использование REST API через формат JSON. Популярные сервисы, такие как DaData, позволяют получать расширенную информацию: от кодов ОКВЭД до статуса организации (действующая или ликвидирована).

Выясним причину популярности этого метода. В отличие от SOAP, работа с JSON в 1С (начиная с версии 8.3.6) реализуется гораздо проще через HTTPСоединение. Нам не нужно скачивать WSDL схему, достаточно отправить POST-запрос с токеном авторизации.

Примерная структура кода для работы с внешним JSON-сервисом:


// Настройка соединения
Сервер = "suggestions.dadata.ru";
Токен = "ВАШ_ТОКЕН_API";

Заголовок = Новый Соответствие;
Заголовок.Вставить("Content-Type", "application/json");
Заголовок.Вставить("Accept", "application/json");
Заголовок.Вставить("Authorization", "Token " + Токен);

// Формируем тело запроса
ЗапросJSON = "{ ""query"": """ + СтрокаИНН + """ }";

Соединение = Новый HTTPСоединение(Сервер, 443, , , , , Новый ЗащищенноеСоединениеOpenSSL());
HTTPЗапрос = Новый HTTPЗапрос("/suggestions/api/4_1/rs/findById/party", Заголовок);
HTTPЗапрос.УстановитьТелоИзСтроки(ЗапросJSON, КодировкаТекста.UTF8);

Ответ = Соединение.ОтправитьДляОбработки(HTTPЗапрос);

Если Ответ.КодСостояния = 200 Тогда
    ЧтениеJSON = Новый ЧтениеJSON;
    ЧтениеJSON.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку());
    Данные = ПрочитатьJSON(ЧтениеJSON);
    ЧтениеJSON.Закрыть();
    
    // Здесь мы разбираем структуру "Данные" и заполняем реквизиты объекта
КонецЕсли;

Сравнение и рекомендации

Рассмотрим подробнее, какой метод выбрать в зависимости от ситуации:

  1. Официальная поддержка 1С: Если в компании уже оплачен ИТС, логичнее использовать штатный сервис 1С:Контрагент. Он стабилен и интегрирован в типовые решения.
  2. Минимальный бюджет: Если вы работаете в небольшой компании без ИТС, сервисы типа DaData предлагают бесплатные лимиты (например, до 100 запросов в день), чего часто хватает для небольшого магазина.
  3. Техническая простота: Работа через HTTPСоединение и JSON считается более современной. Она быстрее отрабатывает на стороне клиента и требует меньше ресурсов сервера, чем разбор тяжелых XML-ответов от SOAP-сервисов.

При реализации любого из этих методов мы рекомендуем выносить логику во Внешнюю обработку или в Общий модуль с признаком «Сервер». Это позволит избежать дублирования кода и упростит поддержку механизма при обновлении платформы или конфигурации.

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

Подводя итог, автоматизация заполнения реквизитов по ИНН — это задача, которая решается несколькими способами. Выбор зависит от ваших требований к полноте данных (нужен ли только статус или полные реквизиты), бюджета и технологического стека вашей конфигурации.

← На главную