Нередко разработчики сталкиваются с ситуацией: в конфигурацию 1С:Управление торговлей 11 добавлен новый отчет, создана отдельная роль с правами на его просмотр и открытие, в тестовой базе все успешно проверено под пользователем с ограниченными правами. Однако после переноса изменений в рабочую базу с применением динамического обновления администраторы отчет видят, а рядовой пользователь не находит его даже в меню «Все функции» (или «Функции для технического специалиста»). При этом очистка локального кэша и перезапуск сеанса не приносят результата.
Проанализируем архитектуру конфигураций на базе Библиотеки стандартных подсистем (БСП), выясним причину такого поведения платформы и подробно разберем способы решения проблемы.
Основная причина кроется в сочетании механизмов БСП и динамического обновления («демонического» обновления конфигурации базы данных). Рассмотрим ключевые факторы:
ИдентификаторыОбъектовМетаданных. При динамическом обновлении фоновые и штатные процедуры обновления информационных баз не запускаются, поэтому новый отчет и новая роль попросту не регистрируются в этом справочнике. Администратор видит отчет благодаря роли ПолныеПрава, которая игнорирует ограничения подсистемы БСП, а для рядового пользователя объект считается несуществующим.rphost продолжает удерживать в оперативной памяти старую структуру прав и кэш метаданных для текущих сеансов.Штатный запуск базы с параметром командной строки /ЗапуститьОбновлениеИнформационнойБазы (или ЗапуститьОбновлениеИБ) решает проблему, но требует монопольного захвата базы и завершения работы всех пользователей. Если отключить пользователей посреди рабочего дня невозможно, выполним актуализацию идентификаторов «на лету» через внешнюю обработку или консоль разработчика с правами администратора.
Разберем по шагам вызов сервисных процедур БСП для принудительного обновления состава метаданных и прав:
// Принудительно актуализируем состав справочника идентификаторов объектов
Справочники.ИдентификаторыОбъектовМетаданных.ОбновитьДанные(Истина, Ложь);
// Обновляем параметры работы пользователей и права доступа
ПользователиСлужебный.ОбновитьПараметрыРаботыПользователей();
Метод ОбновитьДанные(Истина, Ложь) сканирует структуру метаданных конфигурации, находит добавленный отчет и новую роль, создает для них соответствующие записи в справочнике и связывает их с логикой разграничения прав БСП без необходимости перезапуска всей системы.
В типовых конфигурациях назначение ролей через конфигуратор является грубой ошибкой администрирования. Настроим права правильным способом в режиме 1С:Предприятие:
После этого регламентные процедуры БСП зафиксируют роль за пользователем штатно и не будут удалять ее при открытии сеанса.
Если после обновления идентификаторов отчет по-прежнему не виден пользователю во «Всех функциях», проанализируем состояние серверного кэша. Динамическое обновление не обновляет внутреннюю память уже запущенных процессов кластера серверов 1С.
Для исправления ситуации выполним следующие действия:
1С:Предприятия.rphost (при настроенном автоматическом перезапуске процессов) либо полностью перезапустим службу ragent во время технологического окна.1С:Предприятие.Если у пользователя отчет уже появился в списке «Функции для технического специалиста», но отсутствует в разделах программы (например, в панели отчетов раздела Продажи или Склад), проверим настройки командного интерфейса подсистемы «Варианты отчетов»:
Просмотр не только на сам отчет, но и на все родительские Подсистемы, в которых отчет расположен, а у подсистем взведен флаг Включать в командный интерфейс.