В практике администрирования и разработки на платформе 1С нередко возникает ситуация, когда необходимо создать новый узел распределенной информационной базы (РИБ), но стандартный механизм создания начального образа не подходит. Это может быть связано с огромным объемом данных, из-за чего процесс создания образа прерывается по тайм-ауту, или с необходимостью отвязать базу от РИБ и переподключить её на основе уже существующей копии. В этой статье мы подробно разберем, как превратить обычную копию центральной базы в полноценный подчиненный узел и корректно подключить его к «центру».
Прежде чем приступать к техническим манипуляциям, давайте проанализируем ситуацию. Создание узла из копии — это не просто переименование папки с базой. Нам необходимо «обмануть» систему, заставив копию базы считать, что у нее есть «родитель» (главный узел), а центральную базу — что эта копия является её законным «ребенком» (подчиненным узлом). Рассмотрим пошагово, какие действия необходимо предпринять в обеих базах.
Первым делом нам нужно зарегистрировать новый узел в плане обмена центральной базы. Чтобы ускорить этот процесс, особенно если вы работаете с конфигурациями на базе БСП, можно применить быстрое создание узла плана обмена, что избавит от необходимости производить настройки в двух базах одновременно.
Код укажем уникальный идентификатор (например, «УЗ01»), а в поле Наименование — понятное описание (например, «Филиал Север»).Теперь перейдем к работе с копией. Главная сложность заключается в том, что в копии свойство ЭтотУзел в плане обмена все еще указывает на центральную базу. Нам нужно изменить логику: сделать так, чтобы узел, созданный нами в Шаге 1, стал для этой базы главным.
Разберем ситуацию: в платформе 8.3 через пользовательский интерфейс невозможно просто «назначить» главную базу. Это защита платформы от случайного нарушения целостности РИБ. Для решения задачи нам потребуется написать небольшой скрипт во внешней обработке или использовать консоль кода.
Выясним причину, по которой обычное создание элемента в плане обмена не работает: база должна получить статус «подчиненная» на уровне системных констант платформы. Для этого используем метод ПланыОбмена.УстановитьГлавныйУзел(). Рассмотрим пример кода, который нужно выполнить в копии базы:
// Находим в плане обмена узел, который соответствует нашей центральной базе
// В копии "ЭтотУзел" — это сама копия, а нам нужно найти ссылку на "центр"
УзелЦентр = ПланыОбмена.Полный.НайтиПоКоду("ЦБ");
Если Не УзелЦентр.Пустая() Тогда
// Устанавливаем найденный узел как главный для текущей базы
ПланыОбмена.УстановитьГлавныйУзел(УзелЦентр);
Сообщить("Главный узел успешно установлен. База стала подчиненной.");
Иначе
Сообщить("Ошибка: Узел с кодом ЦБ не найден!");
КонецЕсли;
После выполнения этого кода база потребует перезапуска. При следующем входе вы заметите, что многие объекты метаданных стали недоступны для редактирования (заблокированы конфигурацией), что подтверждает переход базы в режим подчиненного узла РИБ.
Проанализируем критически важный момент: поскольку мы сделали копию центральной базы, в ней «перекочевали» все таблицы регистрации изменений. Если мы прямо сейчас запустим обмен, копия попытается выгрузить в центр все данные, которые когда-либо были в ней изменены. Чтобы избежать хаоса, может потребоваться универсальная очистка базы или полная очистка очереди обмена в копии.
В некоторых случаях бывает полезна регистрация документов и справочников после определенной даты (в этом поможет универсальная обработка регистрации изменений в планах обмена), чтобы передать в центр только те данные, которые были созданы после разделения баз. Для полной очистки воспользуемся методом УдалитьРегистрациюИзменений():
// Очищаем все накопленные изменения для этого узла,
// чтобы не "заспамить" центральную базу старыми данными
УзелДляОчистки = ПланыОбмена.УстановитьГлавныйУзел(Неопределено); // Сначала проверим, что узел определен
ПланыОбмена.УдалитьРегистрациюИзменений(ПланыОбмена.ЭтотУзел());
Сообщить("Таблицы регистрации изменений очищены.");
Важно: Проделайте аналогичную операцию и в центральной базе для созданного узла «УЗ01», если вы не хотите, чтобы при первом же обмене в филиал улетели все накопленные терабайты данных.
Посмотрим на технические требования к РИБ: для успешного обмена конфигурации в обеих базах должны быть идентичны «байт в байт». Если с момента снятия копии в центральной базе были обновлены метаданные, обмен не начнется. В этом случае мы рекомендуем:
.cf.ПланыОбмена.УстановитьГлавныйУзел(Неопределено), обновить конфигурацию и установить узел обратно.Для корректной работы в будущем нам необходимо исключить конфликты нумерации объектов. Если в центральной базе используется префикс «ЦБ», то в подчиненном узле обязательно нужно установить свой уникальный префикс, например, «СЕ». Это делается в настройках параметров учета или через константы.
Также проанализируем список Регламентных заданий. Помните, что в копии остались активными задания от центральной базы. Чтобы в дальнейшем видеть полную картину работы системы, рекомендуем внедрить мониторинг синхронизаций данных для баз на платформе 1С — для этого подойдёт утилита сравнения данных и контроля синхронизации РИБ.
Мы рассмотрели процесс трансформации копии базы в узел РИБ. Главное в этой процедуре — строго соблюдать последовательность: создание узла в центре, программное назначение главного узла в копии, очистка регистрации и настройка префиксов. Такой подход дает полный контроль над процессом развертывания распределенной системы.