В процессе администрирования и сопровождения информационных баз 1С нередко возникает необходимость отвязать подчиненный узел распределенной информационной базы (РИБ) от главного узла, превратив его в полностью автономную («обычную») базу. Это требуется, например, при закрытии филиала, разделении учета или необходимости внести изменения в конфигурацию, заблокированную механизмом РИБ.
Разберем подробно два основных способа решения этой задачи: программный метод через внешнюю обработку и запуск конфигуратора со специальным ключом командной строки.
Когда база находится в статусе подчиненного узла РИБ, в дереве конфигурации многие объекты закрыты для редактирования специальными значками (замочками), а редактирование состава метаданных заблокировано. Чтобы снять признак подчиненности без изменения самой конфигурации поставщика, воспользуемся внешней обработкой.
Выясним причину блокировок: у подчиненного узла в системе определен главный узел. Проверить текущий статус можно с помощью функции ПланыОбмена.ГлавныйУзел(). Если функция возвращает ссылку на узел, база является подчиненной. Для отвязки необходимо передать значение Неопределено в соответствующую процедуру платформы.
Разберем пошагово, как это реализовать:
// Проверяем наличие главного узла и отключаем его
Если ПланыОбмена.ГлавныйУзел() <> Неопределено Тогда
ПланыОбмена.УстановитьГлавныйУзел(Неопределено);
Сообщить("База успешно отключена от главного узла РИБ и стала автономной.");
Иначе
Сообщить("База уже является автономной или главным узлом.");
КонецЕсли;
Важно: для выполнения метода ПланыОбмена.УстановитьГлавныйУзел() пользователь должен обладать полными административными правами. При запуске внешней обработки в современных конфигурациях необходимо убедиться, что она открывается с отключенным безопасным режимом, иначе платформа заблокирует выполнение административной операции.
Если нет возможности запустить обработку в режиме предприятия, рассмотрим альтернативный вариант — запуск конфигуратора с параметром сброса главного узла через командную строку Windows.
Разберем синтаксис команды. Запуск выполняется через исполняемый файл платформы 1cv8.exe с указанием параметра /ResetMasterNode:
"C:\Program Files\1cv8\8.3.XX.XXXX\bin\1cv8.exe" CONFIG /F "D:\Bases\TradeBase" /ResetMasterNode /N "Администратор" /P "Пароль"
Проанализируем параметры командной строки:
CONFIG — режим запуска Конфигуратора./F "ПутьКБазе" — путь к каталогу файловой информационной базы (для серверных баз используется /S "Сервер\ИмяБазы")./ResetMasterNode — специальный ключ, который очищает ссылку на главный узел и делает базу автономной./N "ИмяПользователя" и /P "Пароль" — учетные данные администратора, необходимые при включенной аутентификации.После того как узел переведен в автономный режим, в таблицах базы данных остаются записи регистрации изменений для узлов обмена. Если их не очистить, система будет продолжать фиксировать изменения объектов, что приведет к неоправданному росту размера базы данных и снижению производительности.
Посмотрим на пример кода для полной очистки зарегистрированных изменений:
// Очистка таблиц регистрации изменений для всех узлов планов обмена
Для Каждого ПланОбмена Из Метаданные.ПланыОбмена Цикл
ПланыОбмена.УдалитьРегистрациюИзменений(ПланыОбмена[ПланОбмена.Имя].ЭтотУзел());
КонецЦикла;
Рассмотрим обратную ситуацию, когда автономную базу необходимо подключить к существующей РИБ в качестве подчиненного узла. Для этого должны быть соблюдены следующие условия:
ЭтотУзел в подключаемой базе должен точно совпадать с кодом узла, созданного для этой базы в главном узле.Для привязки автономной базы к главному узлу выполним программный код:
// Установка связи с главным узлом
ГлавныйУзел = ПланыОбмена.ПоОрганизациям.НайтиПоКоду("ГУ");
Если ЗначениеЗаполнено(ГлавныйУзел) Тогда
ПланыОбмена.УстановитьГлавныйУзел(ГлавныйУзел);
Сообщить("Главный узел успешно назначен.");
Иначе
Сообщить("Узел с указанным кодом не найден!");
КонецЕсли;
После назначения главного узла перед выполнением первого сеанса обмена важно согласовать номера сообщений в свойствах НомерОтправленного и НомерПринятого, чтобы пакет обмена был корректно прочитан базой.