Автоматизация ввода данных о контрагентах — одна из самых востребованных задач при разработке в среде 1С. Это не только ускоряет работу пользователей, но и минимизирует количество ошибок, связанных с человеческим фактором. В рамках данной статьи мы подробно разберем, как реализовать механизм автозаполнения, проанализируем доступные сервисы и выберем оптимальный подход для интеграции в вашу конфигурацию.
Когда пользователь заводит нового контрагента, ему приходится заполнять множество полей: краткое и полное наименование, КПП, ОГРН, юридический адрес и сведения о руководителе. Ошибки в этих данных могут привести к проблемам с налоговой отчетностью и некорректному формированию первичных документов. Мы рассмотрим три основных способа автоматизации этого процесса:
WSПрокси.HTTPСоединение.Это наиболее «родной» способ для систем 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(ПараметрЗапроса);
Важные нюансы данного метода:
Результат, вытягивая из него свойства Name, ShortName, KPP и прочие.Иногда задача стоит проще: не заполнить все данные, а просто проверить, существует ли такой контрагент в базе налоговой и не закрыт ли он. Для этого используется сервис 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" означает, что контрагент найден и активен
КонецЦикла;
Этот метод полезен для валидации уже имеющейся базы или при проверке ИНН перед отправкой декларации НДС, но для полноценного автозаполнения карточки он недостаточен.
Если ваша база 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С:Контрагент. Он стабилен и интегрирован в типовые решения.HTTPСоединение и JSON считается более современной. Она быстрее отрабатывает на стороне клиента и требует меньше ресурсов сервера, чем разбор тяжелых XML-ответов от SOAP-сервисов.При реализации любого из этих методов мы рекомендуем выносить логику во Внешнюю обработку или в Общий модуль с признаком «Сервер». Это позволит избежать дублирования кода и упростит поддержку механизма при обновлении платформы или конфигурации.
Также важно предусмотреть обработку исключений. Веб-сервисы могут быть временно недоступны. Поэтому код всегда стоит оборачивать в конструкцию Попытка...Исключение, чтобы ошибка сервера не блокировала работу пользователя в программе 1С.
Подводя итог, автоматизация заполнения реквизитов по ИНН — это задача, которая решается несколькими способами. Выбор зависит от ваших требований к полноте данных (нужен ли только статус или полные реквизиты), бюджета и технологического стека вашей конфигурации.