Автоматизация ввода данных контрагентов — это одна из наиболее востребованных задач в любой конфигурации 1С. Она позволяет не только ускорить работу пользователя, но и минимизировать ошибки ручного ввода, которые могут привести к проблемам с налоговой отчетностью. В данной статье мы разберем несколько способов реализации этой функции: от использования стандартного сервиса 1С до интеграции со сторонними API, такими как DaData, а также рассмотрим технические нюансы для различных платформ.
Если у вашей организации есть действующая подписка ИТС, вы можете использовать официальный шлюз 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);
КонецЕсли;
КонецПроцедуры
Важный нюанс: использование этого метода требует наличия активного договора сопровождения. Если его нет, система вернет ошибку авторизации.
Проанализируем альтернативный и крайне популярный вариант — использование сервиса 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-структур.
Иногда программисту не нужно программно заполнять все поля, а достаточно дать пользователю возможность быстро проверить благонадежность контрагента. Выясним, как это сделать одной кнопкой, открывающей страницу компании в браузере.
Процедура ПроверитьНаRusprofile(ИНН)
// Формируем прямую ссылку на поиск по ИНН
АдресСайта = "https://www.rusprofile.ru/search?query=" + ИНН + "&type=ul&search_inactive=2";
ЗапуститьПриложение(АдресСайта);
КонецПроцедуры
Этот простой метод позволяет бухгалтеру мгновенно увидеть статус предприятия (действует или ликвидировано), наличие судебных дел и другие важные маркеры без сложных интеграций.
При внедрении механизмов заполнения данных по ИНН, проанализируем несколько важных аспектов, которые помогут сделать решение профессиональным:
РегистрСведений «КэшЗапросовКонтрагентов». Перед отправкой HTTP-запроса проверяйте, не искали ли этот ИНН сегодня.ФоновыеЗадания. Это обеспечит комфортную работу пользователя.Попытка...Исключение при работе с внешними ресурсами. Отсутствие интернета или временная недоступность сервиса не должны приводить к аварийному завершению работы программы.Подведем итог: для типовых конфигураций с поддержкой ИТС оптимально использовать встроенные механизмы 1С. Если же вы работаете с самописной системой или старой версией программы (7.7, 8.1), лучшим выбором станет интеграция с DaData через HTTP-запросы. Оба метода обеспечивают высокую точность данных и существенно экономят время сотрудников.