При переходе на новые версии программных продуктов, например, при миграции с устаревшей 1С:Предприятие 7.7 на современную 1С:Управление торговлей 11.4, пользователи сталкиваются с необходимостью массового заведения или актуализации нормативно-справочной информации. Заполнение карточек контрагентов вручную — процесс трудоемкий и чреватый ошибками. Стандартный механизм автоматического заполнения по ИНН в 1С требует активной подписки 1С:ИТС ПРОФ или отдельно приобретаемого сервиса 1С:Контрагент. Если бюджет компании ограничен или количество запросов не оправдывает покупку годовой подписки, приходится искать альтернативные варианты.
В этой статье мы подробно рассмотрим, как реализовать бесплатное или максимально бюджетное автозаполнение контрагентов по ИНН в 1С:УТ 11.4 без использования стандартных сервисов 1С.
Самый простой, но организационно сложный способ — найти коллег или знакомых, у которых есть действующий договор ИТС ПРОФ. Сервис 1С:Контрагент привязывается к логину и паролю портала информационно-технологического сопровождения (1С:ИТС). Если прописать эти авторизационные данные в настройках интернет-поддержки вашей базы УТ 11.4, система начнет штатно заполнять реквизиты. Однако этот способ имеет очевидные минусы: зависимость от чужого аккаунта, нарушение лицензионных соглашений и лимиты на количество запросов, которые могут быстро закончиться у ваших партнеров.
Проанализируем наиболее стабильный, законный и бесплатный способ решения задачи — использование стороннего веб-сервиса DaData.ru. Этот ресурс предоставляет доступ к базе данных ФНС, Росстата и других ведомств через собственный программный интерфейс (API).
Рассмотрим ключевые особенности работы с DaData:
При интеграции с любыми сторонними API разработчики часто сталкиваются с критической проблемой — форматом адреса. Сервис DaData отдает юридический адрес в виде одной текстовой строки (например, "101000, г. Москва, ул. Мясницкая, д. 40").
Для корректного ведения учета в УТ 11.4 адрес обязательно должен быть разобран по полям адресного классификатора ФИАС/ГАР. Если записать адрес просто «одной строкой» в текстовое поле, возникнут следующие проблемы:
Поэтому при выборе готовой обработки или написании собственного кода необходимо использовать возможности DaData по разбору адреса на составляющие (составляющие структуры address.data: регион, город, улица, дом и т.д.) и сопоставлять их с полями контактной информации в 1С.
Выясним, в каком виде лучше внедрять интеграцию. На форумах часто ищут внешние обработки в формате .epf. Но для конфигураций на управляемых формах (таких как УТ 11.4) гораздо удобнее использовать Расширение конфигурации (файлы .cfe). Разберем по шагам преимущества этого подхода:
Безопасный режим и Защита от опасных действий. В противном случае платформа 1С заблокирует сетевые HTTP-запросы к серверам DaData.Рассмотрим пример того, как программно реализовать отправку запроса к API сервиса DaData из среды 1С:Предприятие для получения реквизитов организации по ИНН.
&НаСервере
Функция ПолучитьРеквизитыПоИНН(Знач ИНН, Знач APIКлюч) Экспорт
Результат = Новый Структура("Успех, Наименование, КПП, ОГРН, Руководитель, АдресСтрокой", Ложь, "", "", "", "", "");
// Настройка параметров подключения
Сервер = "suggestions.dadata.ru";
Ресурс = "/suggestions/api/4_1/rs/findById/party";
// Формируем JSON-запрос в соответствии с требованиями API DaData
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписьJSON.ЗаписатьНачалоОбъекта();
ЗаписьJSON.ЗаписатьСвойство("query", ИНН);
ЗаписьJSON.ЗаписатьКонецОбъекта();
СтрокаЗапроса = ЗаписьJSON.Закрыть();
// Установка HTTP-заголовков авторизации
Заголовки = Новый Соответствие;
Заголовки.Вставить("Content-Type", "application/json");
Заголовки.Вставить("Accept", "application/json");
Заголовки.Вставить("Authorization", "Token " + APIКлюч);
Попытка
// Устанавливаем защищенное SSL-соединение
НТТРСоединение = Новый HTTPСоединение(Сервер, 443,,,,, Новый ЗащищенноеСоединениеOpenSSL);
НТТРЗапрос = Новый HTTPЗапрос(Ресурс, Заголовки);
НТТРЗапрос.УстановитьТелоИзСтроки(СтрокаЗапроса, КодировкаТекста.UTF8);
Ответ = НТТРСоединение.ВызватьHTTPМетод("POST", НТТРЗапрос);
Если Ответ.КодСостояния = 200 Тогда
СтрокаОтвета = Ответ.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8);
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(СтрокаОтвета);
ДанныеОтвета = ПрочитатьJSON(ЧтениеJSON);
ЧтениеJSON.Закрыть();
// Анализируем полученный ответ
Если ДанныеОтвета.Свойство("suggestions") И ДанныеОтвета.suggestions.Количество() > 0 Тогда
СведенияОбОрганизации = ДанныеОтвета.suggestions[0];
Результат.Успех = Истина;
Результат.Наименование = СведенияОбОрганизации.value;
Если СведенияОбОрганизации.Свойство("data") Тогда
ПодробныеДанные = СведенияОбОрганизации.data;
Если ПодробныеДанные.Свойство("kpp") Тогда
Результат.КПП = ПодробныеДанные.kpp;
КонецЕсли;
Если ПодробныеДанные.Свойство("ogrn") Тогда
Результат.ОГРН = ПодробныеДанные.ogrn;
КонецЕсли;
// Извлекаем ФИО руководителя компании
Если ПодробныеДанные.Свойство("management") И ПодробныеДанные.management <> Неопределено Тогда
Если ПодробныеДанные.management.Свойство("name") Тогда
Результат.Руководитель = ПодробныеДанные.management.name;
КонецЕсли;
КонецЕсли;
// Извлекаем адрес
Если ПодробныеДанные.Свойство("address") И ПодробныеДанные.address <> Неопределено Тогда
Если ПодробныеДанные.address.Свойство("value") Тогда
Результат.АдресСтрокой = ПодробныеДанные.address.value;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Исключение
ЗаписьЖурналаРегистрации("Интеграция_DaData", УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецПопытки;
Возврат Результат;
КонецФункции
Данный код выполняет асинхронный POST-запрос к веб-сервису, передавая ИНН контрагента в теле запроса. В ответ приходит структурированный JSON-пакет, который мы разбираем стандартным методом платформы ПрочитатьJSON. Полученную структуру далее можно использовать для заполнения соответствующих реквизитов справочника Контрагенты и табличной части контактной информации.
Если у вас в штате нет программиста, способного самостоятельно написать парсер адресов и интегрировать вышеописанный код в логику конфигурации, вы можете воспользоваться готовыми наработками: