При разработке обработок для массовой загрузки данных или автоматизации создания контрагентов часто возникает задача автоматического заполнения реквизитов (наименование, КПП, адрес, руководитель) по ИНН. В современных конфигурациях 1С (Бухгалтерия предприятия 3.0, ERP, УТ 11, КА 2), построенных на базе Библиотеки стандартных подсистем (БСП), для этого используется сервис «1С:Контрагент». Также возможна реализация заполнения контрагентов по ИНН данными ФНС в старых конфигурациях. Рассмотрим подробно, как реализовать этот функционал программно, используя встроенные механизмы системы.
Самый простой способ получить структуру реквизитов юридического лица по его идентификационному номеру — воспользоваться функциями общего модуля ДанныеЕдиныхГосРеестров или использовать готовое расширение для заполнения реквизитов. Проанализируем пример кода, который позволяет быстро инициализировать объект контрагента:
// Пример создания и заполнения нового контрагента по ИНН
КонтрагентОбъект = Справочники.Контрагенты.СоздатьЭлемент();
ИННДляПоиска = "7707083893"; // Пример ИНН
// Получаем структуру реквизитов напрямую из сервиса
РеквизитыКонтрагента = ДанныеЕдиныхГосРеестров.РеквизитыЮридическогоЛицаПоИНН(СокрЛП(ИННДляПоиска));
// Заполняем реквизиты объекта из полученной структуры
ЗаполнитьЗначенияСвойств(КонтрагентОбъект, РеквизитыКонтрагента);
КонтрагентОбъект.Записать();
Этот метод удобен тем, что он возвращает готовую структуру, ключи которой (Наименование, КПП, ОГРН и т.д.) зачастую совпадают с именами реквизитов справочника Контрагенты. Однако стоит учитывать, что метод работает преимущественно с юридическими лицами.
В специализированных конфигурациях, таких как 1С:Бухгалтерия, существуют свои общие модули, предоставляющие более широкие возможности — пригодится решение для автоматического заполнения ОКВЭД. Рассмотрим использование модуля РаботаСКонтрагентами. Разберем ситуацию, когда нам нужно обработать возможные ошибки сервиса (например, отсутствие ИНН в базе или проблемы со связью).
// Программное создание контрагента в БП 3.0
НовКонтрагент = Справочники.Контрагенты.СоздатьЭлемент();
ТекущийИНН = "5001000100";
// Вызов функции для получения данных
РеквизитыКонтрагента = РаботаСКонтрагентами.РеквизитыЮридическогоЛицаПоИНН(СокрЛП(ТекущийИНН));
// Обязательная проверка на наличие ошибок
Если ПустаяСтрока(РеквизитыКонтрагента.ОписаниеОшибки) Тогда
ЗаполнитьЗначенияСвойств(НовКонтрагент, РеквизитыКонтрагента);
// Дополнительная логика записи
НовКонтрагент.Записать();
Иначе
ЗаписьЖурналаРегистрации("ЗагрузкаКонтрагентов", УровеньЖурналаРегистрации.Ошибка, , ,
"Ошибка получения данных по ИНН " + ТекущийИНН + ": " + РеквизитыКонтрагента.ОписаниеОшибки);
КонецЕсли;
Важно помнить, что для индивидуальных предпринимателей (ИП) логика будет отличаться. У ИП ИНН состоит из 12 цифр, и для них нужно вызывать другой метод — РаботаСКонтрагентами.РеквизитыПредпринимателяПоИНН. Проанализируем, как можно универсализировать этот процесс:
Если СтрДлина(СокрЛП(ИНН)) = 10 Тогда
Реквизиты = РаботаСКонтрагентами.СведенияОЮридическомЛицеПоИНН(ИНН);
ИначеЕсли СтрДлина(СокрЛП(ИНН)) = 12 Тогда
Реквизиты = РаботаСКонтрагентами.РеквизитыПредпринимателяПоИНН(ИНН);
КонецЕсли;
Одной из самых сложных задач является корректное заполнение юридического и почтового адресов. В современных версиях 1С адреса хранятся не просто строками, а в виде XML-структур в табличной части КонтактнаяИнформация. Простого использования ЗаполнитьЗначенияСвойств здесь недостаточно.
Выясним причину: методы сервиса часто возвращают адрес в виде структуры или ссылки на временное хранилище. Чтобы "достать" эти данные и правильно их записать, проанализируем следующий подход:
// Получаем расширенные данные, включая адрес
РеквизитыКратко = КонтрагентыФормы.ДанныеЕдиныхГосРеестровПоИНН(СокрЛП(ИНН), Истина);
Если ПустаяСтрока(РеквизитыКратко.ОписаниеОшибки) Тогда
// Данные адреса часто упакованы во временное хранилище
РеквизитыКонтрагента = ПолучитьИзВременногоХранилища(РеквизитыКратко.АдресРеквизитовКонтрагента);
НовКонтрагент = Справочники.Контрагенты.СоздатьЭлемент();
ЗаполнитьЗначенияСвойств(НовКонтрагент, РеквизитыКонтрагента);
// Для записи адреса используем специализированные модули БСП
// (например, РаботаСКонтрагентамиБП.ЗаполнитьКонтактнуюИнформацию)
НовКонтрагент.Записать();
КонецЕсли;
Важный момент: если вы записываете адрес напрямую строкой в реквизит, он может не отобразиться в формах отчетности или не пройти проверку ФНС. Всегда старайтесь использовать типовые процедуры заполнения контактной информации из модуля УправлениеКонтактнойИнформацией.
При реализации массового заполнения контрагентов необходимо учитывать несколько критических факторов:
РаботаСКонтрагентами.СервисДоступен().ДлительныеОперации, чтобы интерфейс пользователя не "зависал" во время ожидания ответа от сервера 1С.Таким образом, мы рассмотрели основные инструменты для автоматизации работы с контрагентами. Использование типовых методов БСП позволяет не только сэкономить время на разработку, но и гарантирует, что данные будут заполнены корректно с точки зрения форматов 1С и требований законодательства.