Как объединить две базы 1С, если одна была создана копированием другой и объекты имеют одинаковые UUID

Программист 1С v8.3 (Обычные формы) 1C:Бухгалтерия Бухгалтерский учет
← На главную

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

Почему происходит «склейка» объектов при объединении баз

Разберем внутреннюю структуру данных 1С. Каждый объект в базе (справочник, документ) имеет уникальный внутренний идентификатор — UUID (или GUID). Именно по нему система отличает один элемент от другого. Если мы создаем базу Б2 простым копированием Б1, то все объекты, которые были в базе на момент копирования, имеют абсолютно идентичные UUID в обеих базах.

Когда мы пытаемся загрузить данные из Б2 в Б1 через универсальную обработку ВыгрузкаЗагрузкаДанныхXML, система видит, что UUID организации в файле совпадает с UUID организации в базе-приемнике. Для программы это один и тот же объект, поэтому она просто обновляет реквизиты старой организации данными новой. В итоге вместо двух организаций мы получаем одну «испорченную». Рассмотрим основные способы обхода этой ситуации.

Решение №1: Использование конфигурации «Конвертация данных 2.1» (КД)

Этот метод считается наиболее профессиональным и правильным. Он позволяет гибко настроить правила поиска объектов, игнорируя их внутренние идентификаторы. Разберем этот процесс по шагам:

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

Благодаря этому при загрузке данных система не будет смотреть на «старый» UUID, а создаст новый элемент, если не найдет в базе организацию с таким ИНН.

Решение №2: Программная модификация поиска в типовой обработке

Если нет времени на изучение «Конвертации данных», можно доработать стандартную обработку ВыгрузкаЗагрузкаДанныхXML. Проанализируем пример кода, который можно вставить в процедуру загрузки объектов, чтобы перехватить чтение XML и изменить логику поиска:


Пока ВозможностьЧтенияXML(ЧтениеXML) Цикл
    Попытка
        ЗаписанноеЗначение = ПрочитатьXML(ЧтениеXML);
        
        // Вставка: Логика подмены для конкретного типа объекта
        Если ЧтениеXML.Имя = "CatalogObject.Организации" Тогда
            // Пытаемся найти организацию по ИНН, а не по UUID
            СсылкаНаОрг = Справочники.Организации.НайтиПоРеквизиту("ИНН", ЗаписанноеЗначение.ИНН);
            Если Не СсылкаНаОрг.Пустая() Тогда
                 // Если нашли — можно либо пропустить, либо сопоставить
            КонецЕсли;
        КонецЕсли;

        // Стандартная запись объекта
        ЗаписанноеЗначение.ОбменДанными.Загрузка = Истина;
        ЗаписанноеЗначение.Записать();
    Исключение
        // Обработка ошибок
    КонецПопытки;
КонецЦикла;

Этот метод требует навыков программирования, но позволяет быстро решить проблему «на лету» без создания сложных правил обмена.

Решение №3: Ручная замена UUID в файле выгрузки (Метод автора темы)

Рассмотрим «хитрый» способ, который помог автору вопроса. Если в базах пересекается только один ключевой объект (Организация), а остальные данные (документы) должны просто «долиться», можно сделать следующее:

  1. В базе-источнике (Б2) создаем новую организацию вручную. Она получит совершенно новый, уникальный UUID.
  2. Выгружаем данные в XML файл.
  3. Открываем файл XML в текстовом редакторе (если файл большой, используем специальные инструменты для работы с XML).
  4. Находим UUID старой организации и заменяем его во всем файле на UUID новой организации.
  5. Загружаем файл в базу-приемник.

Важно: Этот метод рискован, так как UUID может встречаться в ссылках других объектов, и простая замена текста может повредить структуру файла. Однако для простых случаев это рабочее решение.

Важные подготовительные действия

Прежде чем приступать к объединению, проанализируем ситуацию с префиксами. Если в обеих базах документы создавались с одинаковыми номерами (например, Счет №1 в Б1 и Счет №1 в Б2), то при слиянии возникнет конфликт. Выясним, как этого избежать:

Во-первых, в базе-источнике (Б2) необходимо установить уникальный префикс организации и префикс информационной базы. Во-вторых, нужно запустить обработку «Групповое изменение реквизитов» и программно перенумеровать существующие документы, добавив к ним новый префикс. Только после этого данные можно выгружать для объединения.

Проверка регистров после загрузки

После объединения баз крайне важно проверить не только справочники и документы, но и независимые регистры сведений. Например, такие регистры как УчетнаяПолитика, ОтветственныеЛицаОрганизаций или МетодыРаспределенияКосвенныхРасходов.

Поскольку в этих регистрах записи идентифицируются по набору измерений (Организация + Период), при одинаковых UUID организаций записи из базы Б2 могут просто перезаписать записи Б1. Если вы использовали метод с «Конвертацией данных», убедитесь, что в правилах для регистров сведений также настроено корректное сопоставление полей.

Завершающим этапом мы рекомендуем выполнить Тестирование и исправление информационной базы и полный пересчет итогов, чтобы исключить ошибки в регистрах бухгалтерии, которые могли возникнуть при массовой загрузке ссылочных данных.

← На главную