Как программно заполнить реквизиты контрагента по ИНН в 1С?

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

При разработке обработок для массовой загрузки данных или автоматизации создания контрагентов часто возникает задача автоматического заполнения реквизитов (наименование, КПП, адрес, руководитель) по ИНН. В современных конфигурациях 1С (Бухгалтерия предприятия 3.0, ERP, УТ 11, КА 2), построенных на базе Библиотеки стандартных подсистем (БСП), для этого используется сервис «1С:Контрагент». Также возможна реализация заполнения контрагентов по ИНН данными ФНС в старых конфигурациях. Рассмотрим подробно, как реализовать этот функционал программно, используя встроенные механизмы системы.

Базовый метод получения данных через модуль ДанныеЕдиныхГосРеестров

Самый простой способ получить структуру реквизитов юридического лица по его идентификационному номеру — воспользоваться функциями общего модуля ДанныеЕдиныхГосРеестров или использовать готовое расширение для заполнения реквизитов. Проанализируем пример кода, который позволяет быстро инициализировать объект контрагента:


// Пример создания и заполнения нового контрагента по ИНН
КонтрагентОбъект = Справочники.Контрагенты.СоздатьЭлемент();
ИННДляПоиска = "7707083893"; // Пример ИНН

// Получаем структуру реквизитов напрямую из сервиса
РеквизитыКонтрагента = ДанныеЕдиныхГосРеестров.РеквизитыЮридическогоЛицаПоИНН(СокрЛП(ИННДляПоиска));

// Заполняем реквизиты объекта из полученной структуры
ЗаполнитьЗначенияСвойств(КонтрагентОбъект, РеквизитыКонтрагента);
КонтрагентОбъект.Записать();

Этот метод удобен тем, что он возвращает готовую структуру, ключи которой (Наименование, КПП, ОГРН и т.д.) зачастую совпадают с именами реквизитов справочника Контрагенты. Однако стоит учитывать, что метод работает преимущественно с юридическими лицами.

Особенности работы в конфигурации «Бухгалтерия предприятия 3.0»

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


// Программное создание контрагента в БП 3.0
НовКонтрагент = Справочники.Контрагенты.СоздатьЭлемент();
ТекущийИНН = "5001000100";

// Вызов функции для получения данных
РеквизитыКонтрагента = РаботаСКонтрагентами.РеквизитыЮридическогоЛицаПоИНН(СокрЛП(ТекущийИНН));

// Обязательная проверка на наличие ошибок
Если ПустаяСтрока(РеквизитыКонтрагента.ОписаниеОшибки) Тогда
    ЗаполнитьЗначенияСвойств(НовКонтрагент, РеквизитыКонтрагента);
    // Дополнительная логика записи
    НовКонтрагент.Записать();
Иначе
    ЗаписьЖурналаРегистрации("ЗагрузкаКонтрагентов", УровеньЖурналаРегистрации.Ошибка, , , 
        "Ошибка получения данных по ИНН " + ТекущийИНН + ": " + РеквизитыКонтрагента.ОписаниеОшибки);
КонецЕсли;

Важно помнить, что для индивидуальных предпринимателей (ИП) логика будет отличаться. У ИП ИНН состоит из 12 цифр, и для них нужно вызывать другой метод — РаботаСКонтрагентами.РеквизитыПредпринимателяПоИНН. Проанализируем, как можно универсализировать этот процесс:


Если СтрДлина(СокрЛП(ИНН)) = 10 Тогда
    Реквизиты = РаботаСКонтрагентами.СведенияОЮридическомЛицеПоИНН(ИНН);
ИначеЕсли СтрДлина(СокрЛП(ИНН)) = 12 Тогда
    Реквизиты = РаботаСКонтрагентами.РеквизитыПредпринимателяПоИНН(ИНН);
КонецЕсли;

Заполнение контактной информации и работа с адресами

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

Выясним причину: методы сервиса часто возвращают адрес в виде структуры или ссылки на временное хранилище. Чтобы "достать" эти данные и правильно их записать, проанализируем следующий подход:


// Получаем расширенные данные, включая адрес
РеквизитыКратко = КонтрагентыФормы.ДанныеЕдиныхГосРеестровПоИНН(СокрЛП(ИНН), Истина); 

Если ПустаяСтрока(РеквизитыКратко.ОписаниеОшибки) Тогда
    // Данные адреса часто упакованы во временное хранилище
    РеквизитыКонтрагента = ПолучитьИзВременногоХранилища(РеквизитыКратко.АдресРеквизитовКонтрагента);
    
    НовКонтрагент = Справочники.Контрагенты.СоздатьЭлемент();
    ЗаполнитьЗначенияСвойств(НовКонтрагент, РеквизитыКонтрагента);
    
    // Для записи адреса используем специализированные модули БСП
    // (например, РаботаСКонтрагентамиБП.ЗаполнитьКонтактнуюИнформацию)
    НовКонтрагент.Записать();
КонецЕсли;

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

Практические советы и ограничения

При реализации массового заполнения контрагентов необходимо учитывать несколько критических факторов:

  1. Лимиты сервиса: Программные вызовы сервиса «1С:Контрагент» расходуют лимит ваших запросов по договору ИТС — для этой задачи есть заполнение карточки контрагента по данным ФНС. Если вы запускаете цикл на 10 000 ИНН, убедитесь, что ваш тариф это позволяет. Перед началом цикла рекомендуется проверить доступность сервиса функцией РаботаСКонтрагентами.СервисДоступен().
  2. Филиалы и КПП: Для крупных организаций одного ИНН недостаточно. У компании может быть множество обособленных подразделений с разными КПП и адресами. Если ваша задача — создать филиальную сеть, обязательно анализируйте КПП, возвращаемый сервисом, или ищите данные по связке ИНН+КПП.
  3. Статус контрагента: Сервис возвращает информацию не только о реквизитах, но и о состоянии компании (Действующее, Ликвидировано, В процессе реорганизации). Программная загрузка "мертвых" компаний может засорить базу данных. Проверяйте статус в возвращаемой структуре.
  4. Длительные операции: Обращение к веб-сервису — это сетевая операция. При работе в интерактивном режиме (например, в обработке) рекомендуется использовать механизм ДлительныеОперации, чтобы интерфейс пользователя не "зависал" во время ожидания ответа от сервера 1С.
  5. Дубли: Перед созданием нового контрагента всегда выполняйте поиск в базе по ИНН. Это поможет избежать дублирования информации.

Таким образом, мы рассмотрели основные инструменты для автоматизации работы с контрагентами. Использование типовых методов БСП позволяет не только сэкономить время на разработку, но и гарантирует, что данные будут заполнены корректно с точки зрения форматов 1С и требований законодательства.

← На главную