Почему новый отчет в 1С:Управление торговлей 11 не отображается у пользователя и как это исправить?

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей IT и автоматизация бизнеса
← На главную

Нередко разработчики сталкиваются с ситуацией: в конфигурацию 1С:Управление торговлей 11 добавлен новый отчет, создана отдельная роль с правами на его просмотр и открытие, в тестовой базе все успешно проверено под пользователем с ограниченными правами. Однако после переноса изменений в рабочую базу с применением динамического обновления администраторы отчет видят, а рядовой пользователь не находит его даже в меню «Все функции» (или «Функции для технического специалиста»). При этом очистка локального кэша и перезапуск сеанса не приносят результата.

Проанализируем архитектуру конфигураций на базе Библиотеки стандартных подсистем (БСП), выясним причину такого поведения платформы и подробно разберем способы решения проблемы.

В чем причина скрытия отчета у пользователя?

Основная причина кроется в сочетании механизмов БСП и динамического обновления («демонического» обновления конфигурации базы данных). Рассмотрим ключевые факторы:

  1. Неактуальность справочника метаданных. В конфигурациях на БСП права доступа пользователей рассчитываются не только платформенным механизмом ролей, но и специальной подсистемой управления доступом. Она опирается на служебный справочник ИдентификаторыОбъектовМетаданных. При динамическом обновлении фоновые и штатные процедуры обновления информационных баз не запускаются, поэтому новый отчет и новая роль попросту не регистрируются в этом справочнике. Администратор видит отчет благодаря роли ПолныеПрава, которая игнорирует ограничения подсистемы БСП, а для рядового пользователя объект считается несуществующим.
  2. Автоматическая зачистка ролей при старте сеанса. БСП строго контролирует соответствие ролей пользователя назначенным ему Профилям групп доступа. Если разработчик вручную назначил роль пользователю в дереве пользователей конфигуратора, механизм синхронизации БСП при очередном входе пользователя сопоставит роли с его профилями доступа и принудительно снимет «неучтенную» роль.
  3. Зависание серверного кэша рабочих процессов. Динамическое обновление часто приводит к тому, что рабочий процесс сервера rphost продолжает удерживать в оперативной памяти старую структуру прав и кэш метаданных для текущих сеансов.

Способ 1. Программное обновление идентификаторов метаданных БСП (без монопольного режима)

Штатный запуск базы с параметром командной строки /ЗапуститьОбновлениеИнформационнойБазы (или ЗапуститьОбновлениеИБ) решает проблему, но требует монопольного захвата базы и завершения работы всех пользователей. Если отключить пользователей посреди рабочего дня невозможно, выполним актуализацию идентификаторов «на лету» через внешнюю обработку или консоль разработчика с правами администратора.

Разберем по шагам вызов сервисных процедур БСП для принудительного обновления состава метаданных и прав:


// Принудительно актуализируем состав справочника идентификаторов объектов
Справочники.ИдентификаторыОбъектовМетаданных.ОбновитьДанные(Истина, Ложь);

// Обновляем параметры работы пользователей и права доступа
ПользователиСлужебный.ОбновитьПараметрыРаботыПользователей();

Метод ОбновитьДанные(Истина, Ложь) сканирует структуру метаданных конфигурации, находит добавленный отчет и новую роль, создает для них соответствующие записи в справочнике и связывает их с логикой разграничения прав БСП без необходимости перезапуска всей системы.

Способ 2. Корректное назначение прав через Профили групп доступа

В типовых конфигурациях назначение ролей через конфигуратор является грубой ошибкой администрирования. Настроим права правильным способом в режиме 1С:Предприятие:

  1. Перейдем в раздел НСИ и администрирование — Настройки пользователей и прав — Профили групп доступа.
  2. Создадим новый профиль или откроем существующий (например, профиль, назначенный пользователю), найдем в списке разрешенных действий созданную роль и установим для нее флаг.
  3. Если создавался новый профиль, перейдем в Группы доступа, добавим пользователя в соответствующую группу доступа и сохраним изменения.

После этого регламентные процедуры БСП зафиксируют роль за пользователем штатно и не будут удалять ее при открытии сеанса.

Способ 3. Перезапуск рабочих процессов сервера 1С

Если после обновления идентификаторов отчет по-прежнему не виден пользователю во «Всех функциях», проанализируем состояние серверного кэша. Динамическое обновление не обновляет внутреннюю память уже запущенных процессов кластера серверов 1С.

Для исправления ситуации выполним следующие действия:

  1. Откроем консоль администрирования кластера серверов 1С:Предприятия.
  2. Завершим зависшие процессы rphost (при настроенном автоматическом перезапуске процессов) либо полностью перезапустим службу ragent во время технологического окна.
  3. Попросим пользователя полностью перезапустить клиентское приложение 1С:Предприятие.

Способ 4. Настройка видимости отчета в командном интерфейсе

Если у пользователя отчет уже появился в списке «Функции для технического специалиста», но отсутствует в разделах программы (например, в панели отчетов раздела Продажи или Склад), проверим настройки командного интерфейса подсистемы «Варианты отчетов»:

  1. В конфигураторе убедимся, что для роли включено право Просмотр не только на сам отчет, но и на все родительские Подсистемы, в которых отчет расположен, а у подсистем взведен флаг Включать в командный интерфейс.
  2. В режиме «1С:Предприятие» перейдем в раздел НСИ и администрирование — Печатные формы, отчеты и обработки — Отчеты.
  3. Найдем добавленный отчет и проверим, включено ли его размещение в нужных разделах командного интерфейса для пользователей.
← На главную