При создании подчиненного узла Распределенной Информационной Базы (РИБ) из копии основной базы может возникнуть неприятная ситуация: вы программно или интерактивно назначаете новый главный узел, все выглядит корректно, но после перезапуска информационной базы эта настройка пропадает, и база перестает быть подчиненной. Давайте подробно разберем, почему так происходит и как это исправить.
Основная причина такого поведения кроется в том, что копия базы "помнит" свою старую связь с главным узлом. Простое удаление настройки синхронизации через пользовательский интерфейс или даже программное назначение нового главного узла не всегда полностью очищает все служебные данные (константы, записи в регистрах сведений), которые отвечают за состояние базы в структуре РИБ. В результате при запуске система обнаруживает эти "хвосты" и откатывает изменения, считая, что она все еще является частью старой структуры или независимой базой.
Рассмотрим несколько надежных способов, как полностью "отвязать" копию базы от старого главного узла и корректно настроить ее как подчиненную новому.
Платформа "1С:Предприятие" предоставляет специальный штатный механизм для полного сброса информации о главном узле. Это самый быстрый, надежный и рекомендуемый метод.
Суть метода: запуск Конфигуратора с параметром командной строки /ResetMasterNode. Эта команда принудительно очищает все служебные данные, отвечающие за привязку ИБ к главному узлу, и фактически превращает базу в "чистый лист" для настройки новой синхронизации РИБ.
Разберем по шагам, как его использовать:
1cv8.exe добавьте команду запуска Конфигуратора с нужным параметром. Строка запуска будет выглядеть примерно так:"C:\Program Files\1cv8\8.3.XX.YYYY\bin\1cv8.exe" CONFIG /F"C:\PathToYourBase" /ResetMasterNode
Где:
CONFIG — ключ для запуска в режиме Конфигуратора./F"C:\PathToYourBase" — путь к вашей файловой базе. Если база серверная, используйте ключ /S"ServerName\BaseName"./ResetMasterNode — тот самый ключевой параметр для сброса главного узла.Если по каким-то причинам использовать параметр запуска неудобно, можно выполнить "отвязку" базы вручную через интерфейс. Этот способ требует больше действий, но также является эффективным.
Суть метода: вручную изменить значения служебных констант и удалить из плана обмена запись, соответствующую старому главному узлу.
Выполним процедуру по шагам:
Настройка подчиненного узла РИБ завершенаЭто автономное рабочее местоЭти константы сообщают системе о текущем статусе базы в распределенной сети. Сняв флаги, мы говорим системе, что база не является настроенным подчиненным узлом.
После того как вы выполнили очистку одним из двух вышеописанных способов, можно приступать к финальному шагу — назначению нового главного узла. Автор исходной темы использовал для этого обработку, и это абсолютно правильный подход.
Приведем пример кода, который можно использовать в своей обработке для назначения главного узла. Этот код будет корректно работать на "чистой" базе.
// В вашей обработке должен быть реквизит "ПланОбменаУзел",
// в который вы выбираете созданный узел нового главного сервера.
// Тип реквизита: ПланОбменаСсылка.<ИмяВашегоПланаОбменаРИБ>
&НаСервере
Процедура УстановитьГлавныйУзелНаСервере(ПланОбменаУзел)
Попытка
Если ЗначениеЗаполнено(ПланОбменаУзел) Тогда
//Назначаем главный узел, "подчиняем" текущую базу этому узлу
ПланыОбмена.УстановитьГлавныйУзел(ПланОбменаУзел);
Сообщить("Новый главный узел успешно установлен!");
Иначе
//Снимаем главный узел, "освобождаем" базу
ПланыОбмена.УстановитьГлавныйУзел(Неопределено);
Сообщить("Главный узел снят. База стала независимой.");
КонецЕсли;
Исключение
Сообщить(ОписаниеОшибки());
Сообщить("Не удалось изменить статус базы. Убедитесь, что все сеансы, кроме вашего, закрыты.", СтатусСообщения.Важное);
КонецПопытки;
КонецПроцедуры
Важный момент: вызов процедуры ПланыОбмена.УстановитьГлавныйУзел() без предварительной очистки базы от старых связей и приводит к проблеме, описанной в теме. Метод отрабатывает, но его результат не сохраняется на постоянной основе, так как другие служебные данные вступают с ним в конфликт при следующем запуске.
Таким образом, ключ к успешному созданию подчиненного узла РИБ из копии — это полное и корректное удаление всех следов ее предыдущей принадлежности к другой РИБ. Использование параметра /ResetMasterNode является наиболее предпочтительным и быстрым решением этой задачи.