Почему возникает ошибка «Требуется актуализировать ограничение доступа»?
Кратко: платформа 1С:Предприятие не может найти требуемое значение параметра сеанса‚ которое используется в шаблоне RLS (ограничение на уровне записей).
При отсутствии или неверном формате параметра «валится» синтаксическая ошибка:
<<?>>: Требуется актуализировать ограничение доступа по причине: Не удалось определить вариант ограничения доступа в параметрах сеанса для шаблона ДляОбъекта...
Что такое параметр сеанса?
Параметр сеанса — это ключ-значение‚ которое платформа хранит в течение всего времени работы пользователя и подставляет в ограничения доступа. Примеры:
ТекущийПользователь— ссылка на справочник ПользователиТекущаяОрганизация— ссылка на справочник ОрганизацииДатаНачала/ДатаОкончания— произвольные даты‚ заданные в сеансе
Значение параметра можно получить в любом месте конфигурации‚ но для ограничений доступа обязательно зарегистрировать его до момента первого обращения к данным.
Как установить параметр сеанса
Создание обработки-инициализатора
Создайте общий модуль ПараметрыСеанса с функцией:
// Устанавливает нужные параметры и возвращает их список
Функция УстановитьПараметрыСеанса Экспорт
// 1. Найдем текущего пользователя
ТекПользователь = Справочники.Пользователи;НайтиПоНаименованию(ИмяПользователя‚ Истина);
УстановитьПараметрСеанса("ТекущийПользователь"‚ ТекПользователь);
// 2. Найдем организацию
Организация = Справочники.Организации.НайтиПоКоду("000000001");
УстановитьПараметрСеанса("ТекущаяОрганизация"‚ Организация);
// 3. Возвратим список установленных параметров
Возврат "ТекущийПользователь‚ТекущаяОрганизация";
КонецФункции
Регистрация в подсистеме БСП
Если используется Библиотека стандартных подсистем‚ в справочнике «Настройки пользователей» задайте строку:
УстановитьПараметрыСеанса
Регистрация в обработке «Запуск 1С» (если БСП не используется)
- Откройте обработку
ОбщиеНастройки.ПриНачалеРаботыСистемы - Добавьте вызов:
ПараметрыСеанса.УстановитьПараметрыСеанса;
Как использовать параметр в RLS
Шаблон «ДляОбъекта»
В конфигураторе откройте Права доступа → Ограничения доступа на уровне записей и добавьте новое ограничение:
- Объект: Справочник.Контрагенты
- Право: Чтение
- Шаблон:
<<?Если ТекущаяОрганизация = Контрагенты.Организация Тогда Истина Иначе Ложь>>
Возможные ошибки и способы исправления
| Текст ошибки | Причина | Решение |
|---|---|---|
| Не удалось определить параметр «ТекущийПользователь» | Не вызвана функция УстановитьПараметрСеанса | Проверьте регистрацию функции в «ПриНачалеРаботыСистемы» |
| Синтаксическая ошибка при вычислении шаблона | Имя параметра указано без кавычек | ТекущийПользователь → <<? ТекущийПользователь = Документ.Автор>> |
| Ошибка преобразования типа | Тип параметра не совпадает с типом реквизита | Убедитесь‚ что ТекущийПользователь — это ссылка‚ а не строка |
Диагностика: где посмотреть текущие параметры
В режиме отладки выполните код:
П = ПараметрыСеанса.ПолучитьПараметрыСеанса;
Сообщить(П.Свойство("ТекущийПользователь"));
Или используйте внешнюю обработку «Анализатор RLS» с сайта infostart.ru.
- Убедитесь‚ что параметр сеанса установлен до первого обращения к данным.
- Используйте
УстановитьПараметрСеансав начале сеанса (ПриНачалеРаботыСистемы). - Проверьте корректность имени параметра в шаблоне RLS.
- Проверьте тип параметра: ссылка‚ строка‚ дата и т. д.
После этих шагов ошибка «Требуется актуализировать ограничение доступа» исчезнет‚ а RLS начнет работать корректно.