Работа с распределенными информационными базами (РИБ) — это стандартная задача для администраторов и программистов 1С, когда требуется синхронизация данных между филиалами или удаленными офисами. Однако иногда возникает необходимость временно или навсегда «отвязать» подчиненный узел от главного, сделав базу автономной. Казалось бы, процедура проста, но на практике специалисты часто сталкиваются с ситуацией, когда признак главного узла упорно не желает исчезать. В этой статье мы подробно разберем, почему это происходит и как гарантированно решить проблему.
Первым и основным инструментом в арсенале разработчика является метод глобального контекста ПланыОбмена.УстановитьГлавныйУзел(). Рассмотрим стандартный подход к его использованию. Для выполнения операции нам потребуется создать внешнюю обработку или воспользоваться консолью кода.
Проанализируем программный код, который должен решить задачу:
// Процедура для отключения связи с главным узлом
Процедура ОтключитьРИБНаСервере()
// Передаем Неопределено, чтобы очистить ссылку на главный узел
ПланыОбмена.УстановитьГлавныйУзел(Неопределено);
Сообщить("Связь с главным узлом успешно разорвана. База теперь является автономной.");
КонецПроцедуры
Важный нюанс: этот код должен выполняться в режиме 1С:Предприятие. При этом крайне важно обеспечить монопольный режим. Разберем, почему это критично. Метод УстановитьГлавныйУзел вносит изменения в системные таблицы базы данных (таблица Params), и если база открыта в Конфигураторе или другими пользователями, блокировка может помешать записи изменений. Выясним причину неудачи: если после выполнения кода вы заходите в Конфигуратор и видите, что значок РИБ (синий кубик у корневого узла конфигурации) остался — значит, транзакция не была зафиксирована или сработал кэш.
Если программный метод не помогает, рассмотрим альтернативный вариант, предусмотренный разработчиками платформы — запуск с ключом /ResetMasterNode. Многие пользователи путают этот параметр с обычным режимом работы, но это команда «разового действия».
Разберем алгоритм действий по шагам:
"C:\Program Files\1cv8\common\1cestart.exe" /ResetMasterNode /F "ПутьКБазе" /N "Администратор" /P "Пароль".Проанализируем, что происходит в этот момент: платформа запускается в фоновом режиме, находит запись о главном узле, удаляет её и немедленно закрывается. Если вы видите, что окно 1С открылось и тут же исчезло — не пугайтесь, скорее всего, команда выполнилась успешно. Однако помните: если у пользователя недостаточно прав (нужны права Администратор системы), команда завершится без сообщения об ошибке, но и без результата.
Рассмотрим ситуацию, описанную участниками профессиональных сообществ. Часто в клиент-серверных базах даже после установки блокировки регламентных заданий и удаления всех пользовательских сеансов признак РИБ не снимается. Выясним причину: виновником может быть само соединение консоли администрирования серверов 1С.
Посмотрим на последовательность действий, которая помогла решить проблему в реальном кейсе:
ПланыОбмена.УстановитьГлавныйУзел(Неопределено).Если вышеперечисленные методы не помогают, проанализируем ситуацию на уровне базы данных SQL. Признак РИБ хранится в таблице Params в записи с идентификатором masterNode. В некоторых случаях блокировка может возникать на уровне транзакций СУБД (MS SQL Server или PostgreSQL).
Рассмотрим рекомендации по работе с СУБД:
Во-первых, попробуем перезапустить службу 1C:Enterprise 8.3 Server Agent. Это гарантированно сбросит серверный кэш сессий. Во-вторых, проверим, не установлена ли для базы данных опция READ_ONLY в свойствах SQL-базы. Если база находится в режиме «только чтение», 1С не сможет физически удалить запись о главном узле, хотя программный код отработает без исключений.
Разберем важный момент: после того как мы успешно удалили связь с главным узлом, в базе все еще остаются объекты метаданных, связанные с обменом. Нам нужно привести их в порядок, чтобы избежать ошибок в будущем.
Выполним следующие действия в режиме 1С:Предприятие:
ПланыОбмена).РегистрацияИзмененийДляОбменаДанными.Резюмируем: процедура отключения РИБ требует чистоты окружения. Главными препятствиями являются фоновые задания, кэш сервера приложений и «зависшие» сессии консоли управления. Действуя системно — от простого кода к анализу соединений в кластере — мы всегда сможем добиться успеха и вернуть базе статус автономной.