Как превратить копию центральной базы в подчиненный узел РИБ?

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

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

Осознание контекста и постановка задачи

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

Шаг 1: Подготовка в центральной базе (ЦБ)

Первым делом нам нужно зарегистрировать новый узел в плане обмена центральной базы. Чтобы ускорить этот процесс, особенно если вы работаете с конфигурациями на базе БСП, можно применить быстрое создание узла плана обмена, что избавит от необходимости производить настройки в двух базах одновременно.

  1. Откроем центральную базу в режиме «1С:Предприятие».
  2. Перейдем в нужный План обмена (например, «Полный» или «По магазинам»).
  3. Создадим новый элемент. В поле Код укажем уникальный идентификатор (например, «УЗ01»), а в поле Наименование — понятное описание (например, «Филиал Север»).
  4. Запишем объект. Теперь в центральной базе есть «заготовка» для будущего узла.

Шаг 2: Подготовка в базе-копии (будущий подчиненный узел)

Теперь перейдем к работе с копией. Главная сложность заключается в том, что в копии свойство ЭтотУзел в плане обмена все еще указывает на центральную базу. Нам нужно изменить логику: сделать так, чтобы узел, созданный нами в Шаге 1, стал для этой базы главным.

Разберем ситуацию: в платформе 8.3 через пользовательский интерфейс невозможно просто «назначить» главную базу. Это защита платформы от случайного нарушения целостности РИБ. Для решения задачи нам потребуется написать небольшой скрипт во внешней обработке или использовать консоль кода.

Шаг 3: Программное установление связи

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


// Находим в плане обмена узел, который соответствует нашей центральной базе
// В копии "ЭтотУзел" — это сама копия, а нам нужно найти ссылку на "центр"
УзелЦентр = ПланыОбмена.Полный.НайтиПоКоду("ЦБ"); 

Если Не УзелЦентр.Пустая() Тогда
    // Устанавливаем найденный узел как главный для текущей базы
    ПланыОбмена.УстановитьГлавныйУзел(УзелЦентр);
    Сообщить("Главный узел успешно установлен. База стала подчиненной.");
Иначе
    Сообщить("Ошибка: Узел с кодом ЦБ не найден!");
КонецЕсли;

После выполнения этого кода база потребует перезапуска. При следующем входе вы заметите, что многие объекты метаданных стали недоступны для редактирования (заблокированы конфигурацией), что подтверждает переход базы в режим подчиненного узла РИБ.

Шаг 4: Очистка регистрации изменений

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

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


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

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

Шаг 5: Синхронизация конфигураций

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

  1. Выгрузить конфигурацию из ЦБ в файл .cf.
  2. В подчиненном узле зайти в Конфигуратор и выполнить «Загрузить конфигурацию из файла».
  3. Если база не дает этого сделать из-за установленного главного узла, можно временно сбросить главный узел командой ПланыОбмена.УстановитьГлавныйУзел(Неопределено), обновить конфигурацию и установить узел обратно.

Шаг 6: Настройка префиксов и регламентных заданий

Для корректной работы в будущем нам необходимо исключить конфликты нумерации объектов. Если в центральной базе используется префикс «ЦБ», то в подчиненном узле обязательно нужно установить свой уникальный префикс, например, «СЕ». Это делается в настройках параметров учета или через константы.

Также проанализируем список Регламентных заданий. Помните, что в копии остались активными задания от центральной базы. Чтобы в дальнейшем видеть полную картину работы системы, рекомендуем внедрить мониторинг синхронизаций данных для баз на платформе 1С — для этого подойдёт утилита сравнения данных и контроля синхронизации РИБ.

Итог

Мы рассмотрели процесс трансформации копии базы в узел РИБ. Главное в этой процедуре — строго соблюдать последовательность: создание узла в центре, программное назначение главного узла в копии, очистка регистрации и настройка префиксов. Такой подход дает полный контроль над процессом развертывания распределенной системы.

← На главную