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