Предположим, что нам необходимо ограничить работу пользователя проводками и документами одного филиала. Известно, что среди реквизитов документа Операция есть реквизит Организация (ссылка на филиал), и среди реквизитов проводки есть реквизит Организация. Имеется параметр сеанса «ТекущийПользователь» (ссылка на справочник Пользователей), а регистре сведений НастройкиПользователя для настройки предопределенного значения «ОсновнаяОрагнизация» хранится значение текущего филиала (организации) пользователя (по которому, собственно, и нужно отфильтровать проводки и документы).
Конечно, было бы проще построить запрос, если бы организация так же была объявлена как параметр сеанса. Но и в том подходе, который имеется, тоже есть свои плюсы (например, если пользователю кто-либо изменит основную организацию, то проводки будут уже отражены по актуальному значению, а пользователю не нужно будет перезаходить в систему).
В общем случае запрос к организации текущего пользователя имеет следующий вид
/
/--------------------------------------------------------------------------------
ВЫБРАТЬ
Выразить(НастройкиПользователей.Значение как Справочник.Организации) как Организация
ИЗ
РегистрСведений.НастройкиПользователей КАК НастройкиПользователей
ГДЕ
НастройкиПользователей.Пользователь = &ТекущийПользователь
И НастройкиПользователей.Настройка = Значение(ПланВидовХарактеристик.НастройкиПользователей.ОсновнаяОрганизация)
//--------------------------------------------------------------------------------
Для ограничения доступа в ролях имеются специальные механизмы (Рисунок 1,2):
- Ограничения доступа к данным;
- Шаблон ограничений.
В строках «Ограничения доступа к данным» описывается запрос регламентирующий доступ. В тексте запроса можно использовать параметры сеанса, как параметры запроса.
Шаблон позволяет использовать однотипные запросы в разных объектах. К примеру, в нашем случае мы должны будем ограничить как доступ к бухгалтерскому регистру, так и к документу ОперацияБух. Что бы не писать два раза один и тот же запрос, создадим шаблон с названием «ОрагнизацияПользователя» и укажем его (при помощи символа #) в нужных строках ограничения пользователя.
Текст запроса в шаблоне имеет вид:
/
/--------------------------------------------------------------------------
ТекущаяТаблица ИЗ #ТекущаяТаблица КАК ТекущаяТаблица
ГДЕ
(ТекущаяТаблица.Организация В
(
ВЫБРАТЬ
Выразить(НастройкиПользователей.Значение как Справочник.Организации) как Организация
ИЗ
РегистрСведений.НастройкиПользователей КАК НастройкиПользователей
ГДЕ
НастройкиПользователей.Пользователь = &ТекущийПользователь
И НастройкиПользователей.Настройка = Значение(ПланВидовХарактеристик.НастройкиПользователей.ОсновнаяОрганизация)
)
)
//--------------------------------------------------------------------------
В тексте шаблона значение #ТекущаяТаблица является служебным значением, и обозначает саму таблицу, права пользователя к которой описывается.
К сведению. В шаблоне можно так же использовать параметры запроса. К примеру, если в документе организация это реквизит «Филиал», а в проводках «ОрагизациПроводки». Тогда для документа обращение к шаблону будет:
#ОрганизацияПользователя(«Филиал»)
А текст шаблона
//--------------------------------------------------------------------------
ТекущаяТаблица ИЗ #ТекущаяТаблица КАК ТекущаяТаблица
ГДЕ
(ТекущаяТаблица.#Параметр(1) В
(
ВЫБРАТЬ
Выразить(НастройкиПользователей.Значение как Справочник.Организации) как Организация
ИЗ
РегистрСведений.НастройкиПользователей КАК НастройкиПользователей
ГДЕ
НастройкиПользователей.Пользователь = &ТекущийПользователь
И НастройкиПользователей.Настройка = Значение(ПланВидовХарактеристик.НастройкиПользователей.ОсновнаяОрганизация)
)
)
//--------------------------------------------------------------------------
Подробнее об ограничении прав написано в «1С:Предприятие 8.1. Конфигурирование и Администрирование» Часть 1 (стр. 79).
РS. Решил написать, поскольку часто попадаются вопросы по этой теме (если не нужно - уберу). Во вложении файл Word с всем тем же самым что и тут написано (может просто кому-то удобнее файл скачать).