Как реализовать проверку ИНН через сервис ФНС в 1С: подробное руководство

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

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

Локальная проверка корректности ИНН (Алгоритм контрольного числа)

Прежде чем отправлять запрос на сервер ФНС, нам необходимо убедиться, что сам номер ИНН составлен корректно. ИНН имеет строго определенную структуру: 10 цифр для юридических лиц и 12 цифр для физических лиц и ИП. Последние цифры являются контрольными и вычисляются по определенному математическому алгоритму.

Рассмотрим алгоритм проверки: мы умножаем каждую цифру ИНН на определенный коэффициент (вес) и берем остаток от деления суммы этих произведений на 11. Рассмотрим пример реализации функции для 10-значного ИНН на языке 1С:


Функция ИННКорректен(Знач ИНН) Экспорт
    Если СтрДлина(ИНН) = 10 Тогда
        Веса = "2,4,10,3,5,9,4,6,8";
        Сумма = 0;
        Для К = 1 По 9 Цикл
            Сумма = Сумма + Число(Сред(ИНН, К, 1)) * Число(СтрРазделить(Веса, ",")[К-1]);
        КонецЦикла;
        КонтрольноеЧисло = (Сумма % 11) % 10;
        Возврат КонтрольноеЧисло = Число(Сред(ИНН, 10, 1));
    КонецЕсли;
    // Для 12-значного ИНН логика аналогична, но проверяются две последние цифры
    Возврат Ложь;
КонецФункции

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

Использование встроенных механизмов типовых конфигураций

Как справедливо отмечено в обсуждении, в современных конфигурациях 1С (таких как Бухгалтерия предприятия 3.0, ERP, Управление торговлей 11) функционал проверки ИНН уже встроен "из коробки". В частности, при заполнении декларации по НДС система автоматически обращается к веб-сервису ФНС.

Проанализируем ситуацию: если вы работаете в типовой конфигурации, вам не нужно писать код с нуля. Достаточно изучить общие модули, связанные с проверкой контрагентов. Обычно это модули с именами типа ПроверкаКонтрагентов или ПроверкаКонтрагентовВызовСервера. В них используются методы Библиотеки Интернет-Поддержки (БИП), которые через защищенное соединение обращаются к серверам 1С, являющимся шлюзом к данным ФНС.

Разберем по шагам, как найти этот код:

  1. Откройте конфигуратор вашей базы.
  2. Перейдите в глобальный поиск по строке "проверитьИНН" или "NP_CHECK".
  3. Вы увидите вызовы к веб-сервисам, которые возвращают статус контрагента (действует, прекратил деятельность, не найден).

Реализация прямого обмена с веб-сервисом ФНС (API)

Если вы разрабатываете собственную конфигурацию или дорабатываете старую (например, на платформе 7.7), вам потребуется реализовать HTTP-обмен. Основным инструментом для этого в 1С является объект HTTPСоединение.

ФНС предоставляет специализированный SOAP-сервис. Для взаимодействия с ним мы формируем XML-пакет (SOAP Envelope), содержащий проверяемые ИНН и КПП. Рассмотрим пример формирования такого запроса:


Процедура ПроверитьИНННаСайтеФНС(ИНН, КПП)
    Сервер = "npchk.nalog.ru"; // Актуальный адрес сервиса
    Ресурс = "/search.do"; 
    
    Соединение = Новый HTTPСоединение(Сервер, , , , , 30, Новый ЗащищенноеСоединениеOpenSSL());
    
    Запрос = Новый HTTPЗапрос(Ресурс);
    Запрос.Заголовки.Вставить("Content-Type", "text/xml; charset=utf-8");
    
    ТекстЗапроса = 
    "<soapenv:Envelope xmlns:soapenv=""http://schemas.xmlsoap.org/soap/envelope/"">
    |   <soapenv:Body>
    |       <CheckRequest xmlns=""http://nalog.ru/"">
    |           <INN>" + ИНН + "</INN>
    |           <KPP>" + КПП + "</KPP>
    |       </CheckRequest>
    |   </soapenv:Body>
    |</soapenv:Envelope>";
    
    Запрос.УстановитьТелоИзСтроки(ТекстЗапроса);
    
    Попытка
        Ответ = Соединение.ОтправитьДляОбработки(Запрос);
        Если Ответ.КодСостояния = 200 Тогда
            ЧтениеXML = Новый ЧтениеXML;
            ЧтениеXML.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку());
            // Далее выполняем разбор XML и анализируем коды ответов (0, 1, 2, 3...)
        КонецЕсли;
    Исключение
        Сообщить("Ошибка связи с сервисом: " + ОписаниеОшибки());
    КонецПопытки;
КонецПроцедуры

Важные моменты при работе с HTTP: всегда используйте ЗащищенноеСоединениеOpenSSL, так как государственные сервисы работают через протокол HTTPS. Также не забывайте обрабатывать тайм-ауты, чтобы ваша программа не "зависала" при проблемах с интернетом у клиента.

Где найти документацию (ЖКК и другие источники)

В сообщениях форума упоминается аббревиатура ЖКК. Для начинающих разработчиков это может показаться странным, но расшифровка проста: "Желтые Коробки Книг". Это официальная документация, которая поставляется вместе с платформой 1С.

Для глубокого понимания того, как работают веб-сервисы, рекомендуется изучить книгу "1С:Предприятие 8.3. Руководство разработчика", раздел "Средства интеграции и обмена данными". Там подробно описаны объекты HTTPСоединение, WSОпределения и методы работы с JSON/XML.

Также полезно будет изучить:

Итоги и рекомендации

Мы выяснили, что задача проверки ИНН может быть решена несколькими способами. Если ваша конфигурация типовая — используйте встроенные возможности и не "изобретайте велосипед". Если же вы создаете уникальное решение — ориентируйтесь на работу с HTTPСоединение и обязательно реализуйте предварительную проверку контрольного числа локально.

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

← На главную