Как быстро перенести контрагентов между одинаковыми конфигурациями 1С с поиском по ИНН и КПП

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

Перенос элементов справочника Контрагенты между двумя абсолютно одинаковыми базами данных 1С — это классическая задача, с которой регулярно сталкиваются разработчики и администраторы. Однако при ее реализации часто возникают две критические проблемы: появление дубликатов из-за несовпадения уникальных идентификаторов (GUID) и перенос лишних связанных объектов (документов, договоров, банковских счетов), которые тянутся «хвостом» за основным справочником.

В этой статье мы подробно разберем, как решить эту задачу максимально быстро, безопасно и строго с соблюдением условия: сопоставлять контрагентов по ИНН и КПП, а при отсутствии совпадений — создавать новые элементы.

Способ 1. Загрузка данных из файла Excel/CSV (Рекомендуемый бескодовый метод)

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

Выполним этот процесс по шагам:

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

Главное преимущество метода: Полное отсутствие риска утащить за собой «хвосты» в виде старых договоров, контактных лиц или движений по документам из базы-источника.

Способ 2. Использование COM-соединения (Быстрое программное решение)

Если обе информационные базы находятся в пределах одной локальной сети и у вас есть навыки программирования, задачу можно решить написанием внешней обработки буквально за 10 минут. Мы подключимся к базе-источнику напрямую через COM-соединение, выберем нужные данные запросом и перенесем их в приемник.

Рассмотрим пример кода, реализующего этот алгоритм:


ПараметрыПодключения = "Srvr=""MyServer"";Ref=""SourceBase"";Usr=""Admin"";Pwd=""Password123"";";
Connector = Новый COMОбъект("V83.COMConnector");

Попытка
    БазаИсточник = Connector.Connect(ПараметрыПодключения);
Исключение
    Сообщить("Не удалось подключиться к базе-источнику: " + ОписаниеОшибки());
    Возврат;
КонецПопытки;

// Формируем запрос к базе-источнику через COM
ЗапросИсточник = БазаИсточник.NewObject("Запрос");
ЗапросИсточник.Текст = 
    "ВЫБРАТЬ
    |	Контрагенты.Наименование КАК Наименование,
    |	Контрагенты.ИНН КАК ИНН,
    |	Контрагенты.КПП КАК КПП,
    |	Контрагенты.ЮридическоеФизическоеЛицо КАК ЮридическоеФизическоеЛицо
    |ИЗ
    |	Справочник.Контрагенты КАК Контрагенты
    |ГДЕ
    |	НЕ Контрагенты.ПометкаУдаления";

ТаблицаДанных = ЗапросИсточник.Выполнить().Выгрузить();

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

Данный код гарантирует, что в базу-приемник будут добавлены только те контрагенты, которых там физически нет (сравнение идет жестко по ИНН и КПП), без генерации дублей.

Способ 3. Конвертация данных 2.1 (КД)

Если конфигурации действительно идентичны, мы можем воспользоваться конфигурацией «Конвертация данных 2.1» для создания правил обмена за считанные минуты.

Проанализируем процесс быстрой настройки правил поиска:

  1. Выгрузим структуру метаданных обеих конфигураций с помощью обработки MD83Exp.epf.
  2. Загрузим полученные файлы структуры в КД 2.1.
  3. Создадим новую конвертацию, выбрав источник и приемник (они будут одинаковыми).
  4. Создадим Правило конвертации объектов (ПКО) для справочника Контрагенты. Воспользуемся автогенерацией свойств.
  5. Перейдем на вкладку «Настройки поиска» в ПКО Контрагенты. Отметим галочками свойства ИНН и КПП как поля поиска. Обязательно установим признак «Искать объект по полям поиска, если не найден по внутреннему идентификатору» (или снимем галочку поиска по GUID вообще, если базы ранее велись независимо).
  6. Создадим Правило выгрузки данных (ПВД) для справочника Контрагенты.
  7. Сохраним правила и выгрузим данные из источника с помощью универсальной обработки ВыгрузкаЗагрузкаДанныхРегламентированныйОтчет.epf (или аналогичной универсальной выгрузки XML).

Важный нюанс: В правилах конвертации свойств (ПКС) для реквизитов справочника (например, ОсновнойБанковскийСчет, ОсновнойДоговорКонтрагента) лучше отключить автоматическую генерацию правил конвертации, чтобы при выгрузке XML не потащились связанные объекты, создавая избыточный мусор в базе-приемнике.

Способ 4. Нюансы использования стандартной обработки «Выгрузка и загрузка данных XML»

Участники обсуждений часто предлагают использовать стандартную обработку «Выгрузка и загрузка данных XML» (из состава инструментов разработчика 1С). Однако при ее использовании нужно быть крайне осторожными:

Способ 5. Использование универсального формата EnterpriseData

В современных конфигурациях 1С, поддерживающих БСП, встроен механизм синхронизации данных через формат **EnterpriseData**. Этот способ отлично подходит, если вы не хотите писать код и использовать сторонние обработки.

Алгоритм действий следующий:

  1. Настроим временную синхронизацию данных между двумя базами через локальный каталог.
  2. В правилах отправки данных выберем вариант «Ручная регистрация объектов». Это позволит избежать автоматической отправки всех документов.
  3. С помощью обработки «Регистрация изменений для обмена» зарегистрируем к отправке только справочник Контрагенты.
  4. Запустим выгрузку в источнике и загрузку в приемнике. Стандартные правила формата EnterpriseData автоматически сопоставят контрагентов по полям ИНН и КПП, предотвращая задвоение.

Резюме: какой способ выбрать?

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

← На главную