Проверка ИНН контрагента — это критически важная задача для любого бизнеса, особенно в условиях строгого контроля со стороны налоговых органов. Ошибка в реквизитах может привести к отказу в вычете по НДС или к необходимости подачи уточненных деклараций. В рамках этой статьи мы разберем, как реализовать механизм проверки ИНН в 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С, являющимся шлюзом к данным ФНС.
Разберем по шагам, как найти этот код:
Если вы разрабатываете собственную конфигурацию или дорабатываете старую (например, на платформе 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С, который позволяет значительно расширить возможности любой учетной системы.