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

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

В процессе внедрения или перехода на новые конфигурации 1С часто возникает задача массового наполнения базы данных. Типичный сценарий: у клиента есть список из сотен ИНН контрагентов (например, выгруженный из старой CRM-системы или таблицы Excel), и необходимо быстро создать по ним полноценные карточки в новой базе 1С. При этом крайне желательно использовать встроенный сервис автоматического заполнения реквизитов по ИНН (сервис «1С:Контрагент»), чтобы не вводить адреса, КПП и наименования вручную, а также избежать дублирования информации.

Сложность заключается в том, что перед исполнителем (которым часто выступает консультант или аналитик, а не программист) стоит задача сделать это «вчера» и без привлечения дефицитных ресурсов разработки. В данной статье мы подробно разберем три различных метода решения этой задачи: от продвинутого low-code подхода с использованием BDD-сценариев автоматизации до стандартных интерактивных механизмов и классической программной обработки в несколько строк.

Вариант 1. Использование BDD-сценариев (Vanessa Automation) — элегантный No-Code подход

Этот способ идеально подходит для ИТ-консультантов и аналитиков, которые работают в современных проектах внедрения (например, на ERP или комплексных проектах), где активно применяется методология BDD (Behavior-Driven Development) и автотесты. Для реализации нам понадобится популярный инструмент автоматизации Vanessa Automation (или Vanessa-ADD), работающий в режиме Тест-Клиента.

Суть метода заключается в том, что мы создаем специальный сценарий (так называемый «фича-файл» с расширением .feature), который имитирует действия реального пользователя. Робот открывает форму создания контрагента, вводит ИНН, нажимает кнопку автозаполнения, ждет ответа от сервиса и записывает элемент. Давайте пошагово разберем, как устроен этот механизм.

Сначала мы создаем экспортный (шаблонный) сценарий, который умеет создавать одного контрагента по переданному параметру. Такой сценарий оформляется в виде отдельного файла и помечается тегом @ExportScenarios. Напишем его на понятном «человеческом» языке (языке Gherkin):


# language: ru
@ExportScenarios

Функционал: Вспомогательные сценарии для создания данных

Сценарий: Создать одного контрагента по ИНН
    * ИННКонтрагента = Параметры[0]
    Когда Я открываю список справочника "Контрагенты"
    И Я нажимаю кнопку "Создать"
    И Я ввожу текст ИННКонтрагента в поле "ИНН"
    И Я нажимаю кнопку "Заполнить по ИНН"
    И Я жду закрытия окна ожидания в течение 10 секунд
    И Я нажимаю кнопку "Записать и закрыть"

Этот сценарий работает аналогично функции в программировании. Теперь нам нужно запустить его в цикле для всего списка ИНН, который предоставил клиент. Для этого мы создаем основной сценарий, используя конструкцию «Структура сценария» (Scenario Outline) и блок «Примеры» (Examples). Консультанту достаточно просто скопировать колонку ИНН из Excel и вставить ее прямо в таблицу примеров сценария:


# language: ru

Функционал: Массовая загрузка контрагентов

Структура сценария: Загрузка списка контрагентов из таблицы
    Когда Я вызываю экспортный сценарий "Создать одного контрагента по ИНН" с параметрами:
        | <ИНН> |

Примеры:
    | ИНН        |
    | 7701234567 |
    | 7802345678 |
    | 5003144169 |
    | 7714000111 |

При запуске этого файла через обработку Vanessa Automation, система автоматически запустит 1С в режиме тест-клиента, откроет базу и последовательно, строка за строкой, прокликает интерфейс для каждого ИНН из списка. Преимущества этого метода очевидны: нет необходимости писать код на встроенном языке 1С, обходятся все интерфейсные проверки и гарантированно отрабатывает стандартная бизнес-логика системы (включая проверку дублей, если она настроена в интерфейсе формы).

Вариант 2. Загрузка из табличного документа и групповое заполнение (Стандартные инструменты 1С)

Если на проекте не используется Vanessa Automation, мы можем воспользоваться исключительно штатными инструментами современных конфигураций 1С (таких как «1С:Бухгалтерия 3.0», «1С:ERP» или «1С:Комплексная автоматизация»). Разберем этот сценарий по шагам.

  1. Загрузка структуры контрагентов. Переходим в меню «Администрирование» — «Загрузка данных из файла» (в некоторых конфигурациях этот функционал доступен непосредственно из списка справочника «Контрагенты» по кнопке «Загрузить»).
  2. Подготовка файла. Загружаем список ИНН из файла Excel. При сопоставлении колонок указываем только колонку «ИНН». Поле наименования можно оставить пустым или заполнить временным шаблоном (например, «Контрагент по ИНН » + ИНН), так как в дальнейшем сервис автозаполнения перезапишет его актуальными данными.
  3. Контроль дублей. В настройках загрузки обязательно указываем «Поиск по полю: ИНН». Это позволит системе автоматически сопоставить существующие в базе организации и не создавать дублирующие карточки.
  4. Массовое заполнение реквизитов. После того как справочник наполнился «пустыми» карточками, содержащими только ИНН, нам необходимо запустить механизм заполнения реквизитов. В типовой «1С:Бухгалтерии 3.0» это можно сделать с помощью обработки «Групповое изменение реквизитов». В некоторых версиях встроенных библиотек доступно автоматическое фоновое заполнение незаполненных контрагентов. Если же требуется принудительный запуск, мы можем временно включить режим выполнения произвольного алгоритма в групповой обработке и выполнить следующий код для отобранных элементов:

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

Вариант 3. Программный метод (Создание простой внешней обработки)

Если у вас есть доступ к конфигуратору или в вашем распоряжении имеется программист 1С на 15 минут, самым быстрым техническим решением будет написание простой внешней обработки. В современных конфигурациях 1С, использующих БСП (Библиотеку стандартных подсистем), за интеграцию с сервисом ФНС отвечает общий модуль РаботаСКонтрагентами.

Давайте рассмотрим пример готовой серверной процедуры, которая принимает массив ИНН, проверяет базу на наличие дублей, обращается к веб-сервису и создает новые элементы справочника Справочники.Контрагенты:


&НаСервере
Процедура СоздатьКонтрагентовПоМассивуИНН(МассивИНН)
    
    Для Каждого ТекИНН Из МассивИНН Цикл
        
        // Шаг 1. Проверяем контрагента на дублирование в базе данных
        СсылкаНаДубль = Справочники.Контрагенты.НайтиПоРеквизиту("ИНН", ТекИНН);
        Если ЗначениеЗаполнено(СсылкаНаДубль) Тогда
            ЗаписьЖурналаРегистрации("МассовоеСозданиеКонтрагентов", 
                УровеньЖурналаРегистрации.Предупреждение, , , 
                "Контрагент с ИНН " + ТекИНН + " уже существует в базе.");
            Продолжить;
        КонецЕсли;
        
        // Шаг 2. Получаем структуру данных юридического лица из сервиса 1С:Контрагент
        ДанныеКонтрагента = РаботаСКонтрагентами.РеквизитыЮридическогоЛицаПоИНН(ТекИНН);
        
        Если ДанныеКонтрагента = Неопределено Тогда
            ЗаписьЖурналаРегистрации("МассовоеСозданиеКонтрагентов", 
                УровеньЖурналаРегистрации.Ошибка, , , 
                "Не удалось получить данные от ФНС по ИНН: " + ТекИНН);
            Продолжить;
        КонецЕсли;
        
        // Шаг 3. Создаем новый объект и заполняем его реквизиты
        НовыйОбъект = Справочники.Контрагенты.СоздатьЭлемент();
        НовыйОбъект.ИНН = ТекИНН;
        
        // Заполняем реквизиты объекта на основе структуры, полученной из веб-сервиса
        ЗаполнитьЗначенияСвойств(НовыйОбъект, ДанныеКонтрагента);
        
        // Шаг 4. Безопасная запись объекта в базу данных
        Попытка
            НовыйОбъект.Записать();
            ЗаписьЖурналаРегистрации("МассовоеСозданиеКонтрагентов", 
                УровеньЖурналаРегистрации.Информация, , , 
                "Успешно создан контрагент: " + НовыйОбъект.Наименование + " (ИНН " + ТекИНН + ")");
        Исключение
            ЗаписьЖурналаРегистрации("МассовоеСозданиеКонтрагентов", 
                УровеньЖурналаРегистрации.Ошибка, , , 
                "Ошибка при записи контрагента с ИНН " + ТекИНН + ": " + ОписаниеОшибки());
        КонецПопытки;
        
    КонецЦикла;
    
КонецПроцедуры

Этот код представляет собой законченное техническое решение. Мы анализируем каждый ИНН, защищаем базу от появления одинаковых записей, корректно обрабатываем потенциальные ошибки связи с сервером ФНС (например, если сервис временно недоступен или ИНН указан неверно) и фиксируем все результаты в Журнале регистрации, что позволяет легко проконтролировать процесс загрузки.

Резюме

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

← На главную