Почему сбрасывается настройка главного узла РИБ после перезапуска базы?

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

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

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

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

Решение 1: Использование параметра запуска Конфигуратора (Рекомендуемый способ)

Платформа "1С:Предприятие" предоставляет специальный штатный механизм для полного сброса информации о главном узле. Это самый быстрый, надежный и рекомендуемый метод.

Суть метода: запуск Конфигуратора с параметром командной строки /ResetMasterNode. Эта команда принудительно очищает все служебные данные, отвечающие за привязку ИБ к главному узлу, и фактически превращает базу в "чистый лист" для настройки новой синхронизации РИБ.

Разберем по шагам, как его использовать:

  1. Завершите все активные сеансы с информационной базой, включая фоновые и регламентные задания. Для выполнения этой операции требуется монопольный доступ.
  2. Откройте свойства ярлыка для запуска "1С:Предприятие" или используйте командную строку.
  3. В поле "Объект" (или в командной строке) после пути к исполняемому файлу 1cv8.exe добавьте команду запуска Конфигуратора с нужным параметром. Строка запуска будет выглядеть примерно так:

"C:\Program Files\1cv8\8.3.XX.YYYY\bin\1cv8.exe" CONFIG /F"C:\PathToYourBase" /ResetMasterNode

Где:

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

Решение 2: Ручная проверка констант и удаление старого узла

Если по каким-то причинам использовать параметр запуска неудобно, можно выполнить "отвязку" базы вручную через интерфейс. Этот способ требует больше действий, но также является эффективным.

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

Выполним процедуру по шагам:

  1. Зайдите в информационную базу в монопольном режиме.
  2. Откройте меню "Все функции" (обычно находится в главном меню программы). Если этот пункт отсутствует, его нужно включить в "Настройки" -> "Параметры" -> "Отображать команду 'Все функции'".
  3. В списке объектов найдите и откройте "Константы".
  4. Найдите следующие две константы и убедитесь, что у них сняты флаги:
    • Настройка подчиненного узла РИБ завершена
    • Это автономное рабочее место

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

  5. Не закрывая окно "Все функции", найдите и откройте нужный вам план обмена, например, "Планы обмена. Полный".
  6. В открывшемся списке узлов найдите узел, который раньше был главным для этой копии базы, и удалите его стандартным способом (пометить на удаление и выполнить удаление помеченных объектов).
  7. После этих действий база будет полностью отсоединена от старой структуры РИБ. Теперь можно создавать новый узел для нового главного сервера и выполнять настройку.

Решение 3: Программная установка главного узла после очистки

После того как вы выполнили очистку одним из двух вышеописанных способов, можно приступать к финальному шагу — назначению нового главного узла. Автор исходной темы использовал для этого обработку, и это абсолютно правильный подход.

Приведем пример кода, который можно использовать в своей обработке для назначения главного узла. Этот код будет корректно работать на "чистой" базе.


// В вашей обработке должен быть реквизит "ПланОбменаУзел",
// в который вы выбираете созданный узел нового главного сервера.
// Тип реквизита: ПланОбменаСсылка.<ИмяВашегоПланаОбменаРИБ>

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

КонецПроцедуры

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

Таким образом, ключ к успешному созданию подчиненного узла РИБ из копии — это полное и корректное удаление всех следов ее предыдущей принадлежности к другой РИБ. Использование параметра /ResetMasterNode является наиболее предпочтительным и быстрым решением этой задачи.

← На главную