Работа с распределенными информационными базами (РИБ) в платформе «1С:Предприятие 8» — стандартная задача для сетевого ритейла и территориально распределенных компаний. Однако на практике администраторы и разработчики часто сталкиваются с ситуацией, когда периферийную базу необходимо «отвязать» от центрального узла, превратив её в самостоятельную и полностью автономную систему. При попытке сделать это стандартными методами система может выдавать ошибки доступа, блокировать редактирование конфигурации или сообщать, что действие недоступно.
В этой статье мы подробно разберем, почему возникает блокировка конфигурации (знаменитые «серые замочки»), как правильно использовать технологический ключ /ResetMasterNode, почему программные методы могут выдавать ошибки контекста и какие шаги необходимо выполнить в пользовательском режиме 1С, чтобы окончательно очистить базу от «следов» интеграции распределенной сети.
Прежде чем приступать к активным действиям, давайте проанализируем поведение системы. Очень часто разработчики путают копии баз данных или папки на диске. Если вы открываете конфигуратор и видите, что объекты конфигурации закрыты для редактирования (напротив них отображаются серые значки замочков), это однозначный сигнал платформы.
В технологии РИБ конфигурация блокируется исключительно в периферийных (подчиненных) узлах. В главном (центральном) узле конфигурация всегда остается доступной для внесения изменений, поскольку именно оттуда изменения транслируются вниз по иерархии распределенной сети. Если вы столкнулись с блокировкой, значит, текущая информационная база на уровне платформы считает себя подчиненным узлом, ожидающим файлы обновлений от главного узла.
Попытки отключить синхронизацию стандартным способом из интерфейса такой базы часто приводят к ошибке: «Действие недоступно для главного узла распределенной ИБ» или к полному запрету на изменение настроек обмена. Нам потребуется снять признак подчиненности принудительно.
Самый надежный и быстрый способ снять признак подчиненности на уровне платформы — запуск конфигуратора в специальном режиме очистки главного узла. Для этого мы воспользуемся командной строкой операционной системы.
Выполним процедуру по шагам:
1Cv8.1CD для файловой базы или сделайте бэкап СУБД для клиент-серверной)./ResetMasterNode.Пример команды для файловой базы данных выглядит следующим образом:
"C:\Program Files\1cv8\8.3.16.1030\bin\1cv8.exe" DESIGNER /F"C:\Users\User\Documents\1C\Retail2" /N"Администратор" /P"ПарольАдмина" /ResetMasterNode
Рассмотрим параметры этой команды подробнее:
DESIGNER — указывает системе, что запуск производится в режиме конфигуратора./F — путь к каталогу с файловой информационной базой (для серверной базы используйте параметры /S"ИмяСервера\ИмяБазы")./N — имя пользователя, обладающего правами администратора./P — пароль указанного пользователя./ResetMasterNode — технологический параметр, который принудительно очищает ссылку на главный узел в системных таблицах базы данных.Важная особенность поведения платформы: на современных релизах платформы (начиная с версий 8.3.14) запуск с этим ключом не выводит никаких диалоговых окон с подтверждением. Конфигуратор запускается, выполняет операцию в фоновом режиме и мгновенно закрывается. Не пугайтесь — это штатное поведение. При следующем обычном открытии этой базы признак подчиненности будет снят, а конфигурация разблокируется.
Если по каким-то причинам запуск через командную строку неудобен, мы можем прибегнуть к программному методу отвязки с помощью встроенного языка 1С. Для этого используется метод менеджера планов обмена УстановитьГлавныйУзел().
Однако при попытке выполнить код напрямую в тонком клиенте разработчики часто получают ошибку о том, что команда или метод не найдены. Выясним причину этой ошибки. Согласно синтакс-помощнику, метод ПланыОбмена.УстановитьГлавныйУзел() имеет жесткие ограничения по доступности:
В современных конфигурациях, работающих под управлением управляемых форм (таких как «1С:Розница 2.3» или «3.0»), стандартным режимом запуска является тонкий клиент. Выполнить этот метод напрямую в контексте клиента нельзя.
Чтобы успешно применить программный метод, нам необходимо обернуть вызов в серверную процедуру. Создадим внешнюю обработку и пропишем в модуле формы следующий код:
&НаСервере
Процедура ОтвязатьБазуНаСервере()
// Передаем Неопределено, чтобы очистить ссылку на главный узел
ПланыОбмена.УстановитьГлавныйУзел(Неопределено);
Сообщить("Связь с главным узлом успешно разорвана. База переведена в автономный режим.");
КонецПроцедуры
&НаКлиенте
Процедура ВыполнитьОтключение(Команда)
ОтвязатьБазуНаСервере();
КонецПроцедуры
После выполнения этой процедуры на сервере платформа очистит признак подчиненности. База перестанет требовать файлы обмена при обновлении конфигурации.
Просто сбросить главный узел на уровне платформы (через /ResetMasterNode или программно) в современных конфигурациях недостаточно. Конфигурация «1С:Розница» построена с использованием Библиотеки стандартных подсистем (БСП), которая хранит собственные метаданные о состоянии интеграции в константах и регистрах сведений.
Если не очистить эти настройки, при первом же запуске в пользовательском режиме система БСП может обнаружить несоответствие, выдать критическую ошибку или попытаться автоматически заблокировать работу пользователей. Чтобы завершить отвязку корректно, выполним следующие шаги:
Настройка подчиненного узла РИБ завершена — снимите этот флаг (установите значение в Ложь).Это автономное рабочее место — снимите этот флаг (установите в Ложь).Главный узел — если данная константа присутствует в вашей версии БСП, очистите её значение.После очистки констант БСП база полностью перейдет в штатный режим работы обычной локальной базы данных и больше не будет инициировать сценарии распределенной синхронизации.
Рассмотрим обратную ситуацию. Что делать, если перед нами действительно центральная база, обмен с периферийными узлами больше не требуется, и мы хотим корректно удалить настройки синхронизации, не повредив конфигурацию?
В центральной базе использовать ключ /ResetMasterNode категорически не нужно, так как центральная база изначально не имеет главного узла. Здесь процедура выполняется полностью в пользовательском режиме:
Обратите внимание, что элемент «Этот узел» в плане обмена (который обозначает саму текущую центральную базу) удалить невозможно — он является предопределенным и системным. Он останется в списке, однако без активных подчиненных узлов регистрация изменений и обмен данными происходить не будут, и система продолжит функционировать как обычная локальная информационная база.