Как сделать из распределенной базы (РИБ) обычную автономную базу 1С?

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

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

Разберем подробно два основных способа решения этой задачи: программный метод через внешнюю обработку и запуск конфигуратора со специальным ключом командной строки.

Способ 1. Программное отключение через внешнюю обработку

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

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

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

  1. Создадим новую внешнюю обработку в режиме «Конфигуратор» или воспользуемся универсальной обработкой для выполнения произвольного кода.
  2. Добавим кнопку на форму обработки и пропишем следующий программный код:

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

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

Способ 2. Отключение через командную строку (/ResetMasterNode)

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

Разберем синтаксис команды. Запуск выполняется через исполняемый файл платформы 1cv8.exe с указанием параметра /ResetMasterNode:


"C:\Program Files\1cv8\8.3.XX.XXXX\bin\1cv8.exe" CONFIG /F "D:\Bases\TradeBase" /ResetMasterNode /N "Администратор" /P "Пароль"

Проанализируем параметры командной строки:

  1. CONFIG — режим запуска Конфигуратора.
  2. /F "ПутьКБазе" — путь к каталогу файловой информационной базы (для серверных баз используется /S "Сервер\ИмяБазы").
  3. /ResetMasterNode — специальный ключ, который очищает ссылку на главный узел и делает базу автономной.
  4. /N "ИмяПользователя" и /P "Пароль" — учетные данные администратора, необходимые при включенной аутентификации.

Очистка регистрации изменений после отключения

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

Посмотрим на пример кода для полной очистки зарегистрированных изменений:


// Очистка таблиц регистрации изменений для всех узлов планов обмена
Для Каждого ПланОбмена Из Метаданные.ПланыОбмена Цикл
    ПланыОбмена.УдалитьРегистрациюИзменений(ПланыОбмена[ПланОбмена.Имя].ЭтотУзел());
КонецЦикла;

Как сделать из обычной базы подчиненный узел РИБ

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

  1. Конфигурация подключаемой базы должна быть полностью идентична конфигурации главного узла.
  2. Код предопределенного узла ЭтотУзел в подключаемой базе должен точно совпадать с кодом узла, созданного для этой базы в главном узле.
  3. В подключаемой базе должен быть создан узел, соответствующий главному узлу (с тем же кодом и наименованием).

Для привязки автономной базы к главному узлу выполним программный код:


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

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

← На главную