В процессе сопровождения распределенных информационных баз (РИБ) разработчики и администраторы нередко сталкиваются с ситуацией, когда подчиненный узел блокируется из-за критической ошибки в коде. Типичный пример — сбой в процедуре УстановкаПараметровСеанса общего модуля сеанса (например, при попытке обращения к еще не созданным предопределенным элементам данных). В этом случае войти в режим «1С:Предприятие» невозможно, конфигурация закрыта для редактирования механизмом РИБ, а попытка сбросить признак главного узла через штатный ключ командной строки /ResetMasterNode приводит к аварийному завершению работы платформы с кодом исключения 0xc0000005 в библиотеке backend.dll.
Разберем подробно причины такого поведения системы и рассмотрим надежные способы решения проблемы и восстановления доступа к базе данных.
Проанализируем природу возникновения описанной ошибки. Сбой обусловлен двумя взаимосвязанными факторами:
/ResetMasterNode на ряде релизов платформы 1С:Предприятие (в частности, в некоторых сборках 8.3.8–8.3.9) содержит внутреннюю ошибку работы с нарушенными таблицами соответствия предопределенных данных, что приводит к критическому нарушению прав доступа в памяти (Access Violation) в модуле backend.dll.Наиболее простое и быстрое решение, позволяющее избежать потери накопленных за рабочий день данных, — запустить процесс очистки сведений о главном узле с помощью стабильного или более раннего релиза платформы 1С, в котором ошибка модуля backend.dll отсутствует.
Рассмотрим порядок выполнения по шагам:
1Cv8.1CD).*.1CL, *.1CD-journal, *.cfl)./ResetMasterNode:
"C:\Program Files (x86)\1cv8\8.3.6.2076\bin\1cv8.exe" CONFIG /F "D:\Bases\SubNodeBase" /ResetMasterNode /N "Администратор" /P "Пароль"
Обратим внимание на следующие важные моменты при запуске команды:
CONFIG (или DESIGNER)./N "Логин" и /P "Пароль").Если в базу удается войти под учетной записью с полными правами, в которой не падает инициализация параметров сеанса, либо если есть возможность выполнить код через внешнее подключение, отключение узла выполняется штатными средствами встроенного языка.
Посмотрим на пример кода, выполняемого в контексте режима «1С:Предприятие»:
ПланыОбмена.УстановитьГлавныйУзел(Неопределено);
Если доступ к графическому интерфейсу заблокирован, но COM-соединение отрабатывает корректно, можно выполнить сброс через внешний скрипт:
Соединитель = Новый COMObject("V83.COMConnector");
База = Соединитель.Connect("File=""D:\Bases\SubNodeBase"";Usr=""Администратор"";Pwd=""Пароль""");
База.ПланыОбмена.УстановитьГлавныйУзел(Неопределено);
Если сменить платформу невозможно, а восстанавливать базу из старой резервной копии нежелательно из-за потери оперативных данных, можно исправить причину падения в основном узле:
УстановкаПараметровСеанса.Попытка ... Исключение)..cf) либо сформируем штатный файл обмена.
"C:\Program Files (x86)\1cv8\8.3.9.1818\bin\1cv8.exe" CONFIG /F "D:\Bases\SubNodeBase" /LoadCfg "D:\Updates\FixedConfig.cf" /UpdateDBCfg /N "Администратор" /P "Пароль"
После применения корректного обновления модуль сеанса перестанет аварийно завершать работу, и вход в подчиненную базу восстановится.
После того как признак главного узла успешно снят, при первом запуске конфигурации на базе БСП система обнаружит отключение от РИБ и выдаст диалоговое окно с предупреждением. Для корректной автономной работы потребуется подтвердить отключение узла в пользовательском интерфейсе либо очистить служебные константы синхронизации, чтобы исключить запуск фоновых процедур обмена данными.