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