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