При потере или ликвидации центральной базы в распределенной информационной базе (РИБ) возникает необходимость отвязать подчиненный (периферийный) узел и сделать его полностью автономным или новым главным узлом. Однако при простом отключении базы с помощью ключа /ResetMasterNode или метода ПланыОбмена.УстановитьГлавныйУзел(Неопределено) разработчики часто сталкиваются с ошибками: либо в режиме «1С:Предприятие» возникает исключение «Предопределенный элемент отсутствует в данных», либо при включении автоматического обновления предопределенных элементов происходит их массовое задвоение (дублируются справочники, планы счетов, виды субконто и планы видов характеристик).
Разберем причины такого поведения платформы 1С:Предприятие 8.3 и рассмотрим правильный пошаговый алгоритм перевода периферийного узла в автономный с сохранением целостности данных.
Проанализируем особенности хранения предопределенных элементов в платформе 8.3:
ИмяПредопределенныхДанных.Рассмотрим правильную последовательность действий, которая предотвращает появление дублей и сбоев при последующих обновлениях конфигурации.
Отключение периферийного узла можно выполнить через внешнюю обработку в режиме «1С:Предприятие» с помощью встроенного языка. Посмотрим на пример кода:
// Отключаем главный узел РИБ
ПланыОбмена.УстановитьГлавныйУзел(Неопределено);
Также отвязку можно выполнить пакетным запуском конфигуратора с ключом /ResetMasterNode, однако программный метод в коде предпочтительнее, так как позволяет сразу выполнить сопутствующие сервисные действия.
Чтобы платформа знала, как обрабатывать предопределенные элементы после отключения от РИБ, зададим режим обновления предопределенных данных для всей информационной базы. Выполним следующий код:
// Устанавливаем режим автообновления для автономной базы
УстановитьОбновлениеПредопределенныхДанныхИнформационнойБазы(
РежимОбновленияПредопределенныхДанныхИнформационнойБазы.Авто
);
В пакетном режиме конфигуратора для этой цели используется параметр командной строки:
"C:\Program Files\1cv8\8.3.X.X\bin\1cv8.exe" DESIGNER /F "ПутьКБазе" /N "Администратор" /P "Пароль" /SetPredefinedDataUpdate -Auto
Значение -Auto означает, что для главного или автономного узла платформа автоматически применяет режим UpdateAutomatically, а для подчиненного — DoNotUpdateAutomatically.
Если в базе уже появились элементы, которые потеряли связь с метаданными, восстановим их программно. Для этого используется прямое заполнение свойства ИмяПредопределенныхДанных с отключением проверок при записи:
// Пример привязки существующего элемента справочника к метаданным
Выборка = Справочники.Банки.Выбрать();
Пока Выборка.Следующий() Цикл
Если Выборка.Код = "000000001" Тогда // условие поиска нужного элемента
Объект = Выборка.ПолучитьОбъект();
Объект.ОбменДанными.Загрузка = Истина;
Объект.ИмяПредопределенныхДанных = "БанкПоУмолчанию";
Объект.Записать();
КонецЕсли;
КонецЦикла;
Когда свойство ИмяПредопределенныхДанных заполнено корректным строковым идентификатором из конфигурации, платформа при обновлении базы данных распознает существующий объект и не станет генерировать дубликат.
Если обновление конфигурации уже прошло и задвоение предопределенных элементов произошло, разберем порядок исправления:
Объект = СсылкаНаСтарыйЭлемент.ПолучитьОбъект();
Объект.ОбменДанными.Загрузка = Истина;
Объект.ИмяПредопределенныхДанных = "";
Объект.Записать();
В типовых конфигурациях (таких как «Бухгалтерия предприятия 3.0») после отвязки узла проверим настройки Библиотеки стандартных подсистем:
/C ЗапуститьОбновлениеИнформационнойБазы).