Как изменить код узла плана обмена и превратить подчиненную базу РИБ в центральную?

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

В практике администрирования 1С встречается критическая ситуация: центральная информационная база (ЦБ) распределенной информационной базы (РИБ) безвозвратно утрачена или повреждена, а в наличии остался только рабочий подчиненный узел (УБ). Задача администратора — сделать из оставшейся подчиненной базы новую центральную, вернуть ей прежний префикс и код ЦБ, а затем создать новые подчиненные узлы.

При попытке удалить старый узел или интерактивно переназначить текущий узел администраторы сталкиваются с сообщением платформы: Нельзя помечать на удаление элемент с установленным признаком "ЭтотУзел". Выясним причину такого поведения платформы и разберем пошаговый алгоритм решения проблемы.

Почему возникает ошибка и почему нельзя удалить «ЭтотУзел»

Проанализируем архитектуру планов обмена в платформе 1С:Предприятие. Для каждого плана обмена в конкретной информационной базе ровно один элемент имеет признак ЭтотУзел = Истина. Это внутренняя ссылка, через которую база идентифицирует сама себя во всех механизмах регистрации изменений и нумерации документов.

На уровне ядра платформы установлены жесткие правила:

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

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

Шаг 1. Отключение связи с главным узлом РИБ

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

Первый способ — запуск базы в режиме 1С:Предприятие или Конфигуратор с командным ключом /ResetMasterNode.

Второй способ — программный вызов встроенного метода платформы во внешней обработке:

ПланыОбмена.УстановитьГлавныйУзел(Неопределено);

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

Шаг 2. Программное изменение кода и наименования текущего узла

Так как интерактивно форма элемента плана обмена не дает отредактировать код текущего узла, воспользуемся внешней обработкой. Напишем код, который получает объект текущего узла и перезаписывает его реквизиты:


// Замените ИмяПланаОбмена на имя вашего плана обмена из дерева метаданных
УзелОбъект = ПланыОбмена.ИмяПланаОбмена.ЭтотУзел().ПолучитьОбъект();

// Указываем требуемый код и наименование бывшей центральной базы
УзелОбъект.Код = "БП";
УзелОбъект.Наименование = "Центральная база (главный узел)";

УзелОбъект.Записать();

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

Шаг 3. Корректировка префиксов информационной базы (для типовых конфигураций)

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

Константы.ПрефиксИнформационнойБазы.Установить("БП");

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

Шаг 4. Очистка старых данных синхронизации и создание нового подчиненного узла

После того как текущая база стала центральной, выполним финальные действия:

  1. Очистка регистрации изменений: Чтобы база не пыталась формировать гигантские пакеты выгрузки по старым правилам, очистим очередь изменений для узла, который раньше представлял центральную базу:
    
    // Старый узел бывшей ЦБ теперь стал обычным подчиненным элементом
    ПланыОбмена.УдалитьРегистрациюИзменений(СсылкаНаСтарыйУзел);
    
    После снятия регистрации этот старый элемент плана обмена можно пометить на удаление и удалить стандартной процедурой удаления помеченных объектов.
  2. Создание нового подчиненного узла: В плане обмена создаем новый элемент для будущей периферийной базы (например, с кодом БЛ).
  3. Формирование начального образа: Для разворачивания подчиненного узла на новом рабочем месте создаем начальный образ базы интерактивно через меню плана обмена либо программным методом: ПланыОбмена.СоздатьНачальныйОбраз(НовыйУзел, "File=""C:\Bases\NewSubNode"";");

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

← На главную