Как перенести справочник со всеми данными из одной базы 1С в другую

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

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

Способ 1. Использование обработки «Выгрузка и загрузка данных XML»

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

Разберем по шагам порядок работы с этой обработкой:

  1. Открываем обработку в информационной базе-источнике через меню Файл — Открыть.
  2. В дереве объектов находим нужный справочник и отмечаем его флагом. При необходимости настраиваем период или отбор по конкретным элементам.
  3. Указываем путь к файлу выгрузки на диске и нажимаем кнопку «Выгрузить данные».
  4. Открываем ту же обработку в базе-приемнике, переходим на вкладку «Загрузка данных».
  5. Выбираем ранее сохраненный XML-файл и нажимаем «Загрузить данные».

Преимущество данного способа заключается в том, что он не требует написания правил обмена и полностью сохраняет уникальные идентификаторы (GUID), иерархическую структуру, реквизиты и табличные части объектов. Однако структуры переносимого справочника и связанных с ним метаданных в обеих базах должны быть полностью идентичны.

Способ 2. Обработка «Универсальный обмен данными в формате XML» и правила конвертации

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

Рассмотрим порядок действий:

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

Способ 3. Программный перенос через COM-соединение (V83.COMConnector)

Если требуется автоматизировать процесс или выполнить перенос данных напрямую между базами без создания промежуточных файлов, применим прямое подключение через COMConnector. Проанализируем пример программного кода, который подключается к удаленной базе, считывает данные запросом и выполняет поиск или создание элементов в текущей базе:


Перем Соединение;

Процедура Подключение() Экспорт
    Попытка
        Сервер = "ИмяСервера";
        База = "ИмяБазы";
        Параметры = "Srvr=" + Сервер + "; Ref=" + База + ";";
        V8 = Новый COMObject("V83.COMConnector");
        Соединение = V8.Connect(Параметры);
        Сообщить("Подключение успешно установлено.");
    Исключение
        Сообщить("Ошибка подключения: " + ОписаниеОшибки());
    КонецПопытки;
КонецПроцедуры

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

Способ 4. Загрузка данных из табличного документа

Для простых справочников, содержащих преимущественно текстовые и числовые реквизиты, отлично подходит перенос через табличный документ (Excel, MXL, CSV):

  1. В базе-источнике открываем список справочника, нажимаем «Еще» — «Вывести список» и сохраняем сформированную таблицу.
  2. В базе-приемнике открываем типовую обработку «Загрузка данных из табличного документа».
  3. Вставляем данные из сохраненного файла, настраиваем сопоставление колонок таблицы с реквизитами справочника 1С и запускаем процесс загрузки.

Важные ограничения платформы и возможные проблемы при переносе

Выясним основные риски, с которыми можно столкнуться при переносе данных, и способы их предотвращения:

  1. Ссылочная целостность: Если реквизиты справочника содержат ссылки на другие объекты (например, ЕдиницыИзмерения, СтавкиНДС, Контрагенты), при изолированном переносе одного справочника эти реквизиты в базе-приемнике примут вид «<Объект не найден>». Связанную нормативно-справочную информацию необходимо переносить комплексно.
  2. Опасность удаления справочника в рабочей базе: Если в базе-приемнике элементы справочника уже использовались в документах или регистрах, их нельзя удалять. Удаление приведет к появлению битых ссылок в существующих операциях и искажению аналитических отчетов. В таких случаях данные необходимо обновлять и сопоставлять, а не создавать с нуля.
  3. Предопределенные элементы: Предопределенные элементы имеют системную привязку в коде конфигурации. При загрузке без сопоставления системных имен они могут задвоиться, что нарушит корректное выполнение типовых алгоритмов.
  4. Иерархия и владельцы: Для иерархических или подчиненных справочников запись объектов должна происходить последовательно: сначала создаются группы верхнего уровня и элементы-владельцы, а затем вложенные элементы.
  5. Ограничения COM-соединения: Использование V83.COMConnector требует совпадения разрядности процессов (32 или 64 бита), совпадения версий и номеров сборок платформы, а также не поддерживается нативно на серверах под управлением Linux (в качестве современной альтернативы рекомендуется использовать OData REST API или HTTP-сервисы).
← На главную