Как правильно объединить две базы 1С с переносом доработок и данных?

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

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

Анализ технической ситуации и возможные риски

Прежде чем приступать к механическому объединению, проанализируем ключевые сложности, с которыми сталкивается разработчик при слиянии разнородных баз:

  1. Несовпадение внутренних идентификаторов (GUID): Если элементы справочников в обеих базах вводились независимо, одинаковые по смыслу контрагенты, номенклатурные позиции или склады будут иметь разные внутренние ссылки. Прямая загрузка данных без настройки сопоставления приведет к появлению дубликатов или образованию «битых» ссылок вида <Объект не найден...>.
  2. Потеря данных при реструктуризации метаданных: Если в доработанной конфигурации были изменены типы стандартных реквизитов (например, сужена длина строки или изменен составной тип данных), применение таких изменений к оригинальной базе вызовет реструктуризацию таблиц СУБД, что может привести к необратимой очистке значений в существующих полях.
  3. Рассинхронизация регистров и регистраторов: Если переносить записи регистров накопления, сведений или бухгалтерии без самих документов-регистраторов, нарушается целостность базы данных, и типовые отчеты будут выводить некорректные остатки и обороты.
  4. Различие в версиях и режиме совместимости: Если доработки создавались в старой конфигурации, а целевая база обновлялась, код модулей может содержать устаревшие синтаксические конструкции или методы, не поддерживаемые текущим релизом платформы.

Пошаговый алгоритм объединения баз

Рассмотрим последовательность действий для безопасного слияния конфигураций и переноса учетной информации.

  1. Создание резервных копий: Перед началом любых манипуляций обязательно создаем полные архивные копии обеих баз данных (в формате выгрузки .dt или через средства СУБД). Для экспериментов создаем отдельную третью базу — копию целевой рабочей базы с полными справочниками.
  2. Аудит и перенос структуры метаданных:

    Выгружаем файл конфигурации .cf из базы с доработками. В созданной тестовой базе открываем Конфигуратор и запускаем процедуру через меню Конфигурация — Сравнить, объединить с конфигурацией из файла.

    При объединении внимательно настраиваем дерево объектов:

    1. Отмечаем флагами только новые добавленные объекты (кастомные регистры, документы, реквизиты, справочники).
    2. Для типовых объектов, в которые вносились точечные изменения, используем режим объединения с ручным контролем текста модулей, чтобы не затереть стандартные алгоритмы целевой базы.
    3. Если режим совместимости конфигурации позволяет (8.3.14 и выше), новые объекты и доработки логики рекомендуется оформлять в виде отдельного расширения конфигурации (CFE), не снимая основную конфигурацию с поддержки.
  3. Обновление конфигурации базы данных: Применяем изменения по кнопке F7 (Обновить конфигурацию базы данных) и отслеживаем список предупреждений реструктуризации.
  4. Перенос учетных данных и сопоставление: Переносим данные документов, регистров и проводок из базы-донора в обновленную целевую базу.

Методы переноса данных между базами

Выясним, какие инструменты лучше использовать для переноса накопленной информации в зависимости от сложности учета.

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

Это наиболее надежный и гибкий способ, исключающий появление дублей и битых ссылок. Разберем порядок настройки правил обмена:

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

2. Программный перенос через COM-соединение

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


// Пример программного подключения к исходной базе и чтения данных
Подключение = Новый COMОбъект("V83.COMConnector");
СтрокаПодключения = "File=""C:\Bases\BaseSource"";Usr=""Администратор"";Pwd=""Пароль"";";

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

ЗапросИсточника = БазаИсточник.NewObject("Запрос");
ЗапросИсточника.Текст = 
    "ВЫБРАТЬ
    |    КастомныйРегистр.Период КАК Период,
    |    КастомныйРегистр.Контрагент.ИНН КАК КонтрагентИНН,
    |    КастомныйРегистр.Сумма КАК Сумма
    |ИЗ
    |    РегистрСведений.КастомныйРегистр КАК КастомныйРегистр";

Выборка = ЗапросИсточника.Выполнить().Выбрать();

НаборЗаписей = РегистрыСведений.КастомныйРегистр.СоздатьНаборЗаписей();

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

Если НаборЗаписей.Количество() > 0 Тогда
    НаборЗаписей.Записать(Ложь);
КонецЕсли;

Финальная проверка и тестирование базы

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

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