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