Как быстро перенести документы со всеми связанными справочниками между одинаковыми базами 1С 8.3

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

Перенос данных между двумя базами с одинаковой конфигурацией — задача, которая часто кажется более сложной, чем она есть на самом деле. Особенно если пытаться решить её «в лоб» через создание правил в Конвертации данных 3.1. Разберем, почему стандартный путь через КД 3 может быть избыточным для этой задачи, и какие инструменты позволят выполнить перенос гораздо быстрее и качественнее.

Анализ проблемы: Почему Конвертация данных 3.1 не всегда подходит?

Рассмотрим ситуацию: нам нужно перенести документ Приобретение товаров и услуг со всеми его зависимостями (Контрагенты, Договоры, Номенклатура, Склады и т.д.) из одной базы УТ 11 в другую точно такую же. В старой доброй Конвертации данных 2.0 существовала функция «Синхронизация свойств» с галочкой «Рекурсивно создавать правила конвертации». Это позволяло в пару кликов «вытянуть» все нужные типы данных.

В Конвертации данных 3.1 логика изменилась кардинально. Она базируется на использовании формата Enterprise Data и XDTO-пакетов. Прямого переноса «объект в объект» здесь нет — данные сначала конвертируются в промежуточный формат, а затем загружаются в приемник. Попытка вручную настроить все ПКО (Правила конвертации объектов) и ПОД (Правила обработки данных) для разового переноса между идентичными базами приведет к огромным трудозатратам. Мы потратим дни на то, что можно сделать за минуты.

Решение №1: Использование утилиты ВыгрузкаЗагрузкаДанныхXML83

Для переноса данных между абсолютно идентичными конфигурациями (одинаковый релиз и структура метаданных) существует «золотой стандарт» — обработка ВыгрузкаЗагрузкаДанныхXML83.epf. Проанализируем её преимущества:

  1. Отсутствие правил обмена: Обработка работает напрямую с метаданными. Ей не нужны файлы xml с правилами конвертации.
  2. Сохранение ссылочной целостности: При выборе документа обработка автоматически умеет выгружать все объекты, на которые он ссылается.
  3. Скорость: Это самый быстрый способ «перекинуть» данные без лишних преобразований.

Где найти эту обработку? Рассмотрим основные источники:

Разберем по шагам, как правильно пользоваться этой утилитой:

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

Решение №2: Синхронизация через универсальный формат

Если конфигурации типовые (например, УТ 11, ERP 2.5, КА 2), мы можем воспользоваться механизмом синхронизации, встроенным в саму систему. Это решение подходит, если перенос планируется делать регулярно.

Проанализируем этот путь:

В современных конфигурациях реализован обмен через Универсальный формат (Enterprise Data). Вместо написания правил в КД 3, мы можем настроить «Синхронизацию данных» через «Другую конфигурацию».

Нюансы поиска объектов: ИНН/КПП vs UUID

Одной из главных проблем при переносе является возникновение дублей. Разберем, как с этим бороться. Стандартная обработка ВыгрузкаЗагрузкаДанныхXML83 ищет объекты только по УИД (уникальному идентификатору). Если в новой базе вы уже успели завести контрагента «Ромашка» вручную, а потом загрузили его из старой базы, у вас появится две «Ромашки» с разными УИД.

Если ситуация критична, можно прибегнуть к небольшой доработке обработки ВыгрузкаЗагрузкаДанныхXML83. Посмотрим на логику изменений, которую реализовал автор темы в сообщении 13:

Для реализации поиска по ИНН/КПП в момент загрузки, необходимо в модуле обработки найти процедуру загрузки объекта и добавить проверку существования по реквизитам. Пример упрощенной логики (псевдокод):


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

Важное предупреждение: такие доработки требуют высокой квалификации, так как нарушение логики установки ссылок может привести к повреждению базы данных. Для разовых задач лучше сначала синхронизировать справочники в двух базах по УИД (например, обработками «Поиск и замена дублей»), а уже потом выполнять массовый перенос документов.

Рекомендации по работе в КД 3.1, если без неё не обойтись

Если вы всё же решили осваивать Конвертацию данных 3 для этой задачи (например, в учебных целях), запомните основные этапы:

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

Подведем итог: если ваша задача — разово перенести данные между одинаковыми базами, не тратьте время на изучение КД 3 для этой конкретной цели. Используйте ВыгрузкаЗагрузкаДанныхXML83 с включенной опцией «Выгружать с объектом ссылки». Это сэкономит вам часы работы и обеспечит корректность данных.

← На главную