1С РЛС что такое

Как в 1С:Бухгалтерия предприятия редакции 3.0 настроить права пользователей в разрезе организаций, Ограничение прав доступа пользователей на уровне записей к данным только одной организации в 1С:Бухгалтерии с помощью механизма RLS (Record Level Security), Пользователь должен видеть документы только своей организации в многофирменной информационной базе 1С:Бухгалтерии, Как в 1С:Бухгалтерии использовать механизм ограничения доступа на уровне записей (RLS – Record Level Securiy) для настройки прав пользователя к документам только одной организации? Настройка механизма разграничения прав на уровне записей RLS (Record Level Security) в 1С:Бухгалтерии 8.3, На предприятии в одной информационной базе конфигурации 1С:Бухгалтерия предприятия 3.0 ведется учет нескольких организаций и пользователям базы данных необходимо настроить доступ таким образом, чтобы каждый пользователь мог видеть документы только нужных организаций? Как в 1С:Бухгалтерии 8.3 разрешить пользователю доступ к данным только одной организации, Настройка системы RLS ограничения прав пользователя для доступа к документам только одной организации в конфигурации 1С:Бухгалтерия предприятия ред.3.0, Как настроить ограничение доступа на уровне записей RLS в типовой конфигурации 1С:Бухгалтерия 8.3, Ограничения доступа по организациям в 1С:Бухгалтерии 8.3. с помощью механизма RLS, Как в 1С:Бухгалтерии 8.3 настроить права доступа пользователю к данным только одной организации, Как в 1С:Бухгалтерии 8 скрыть организации для некоторых пользователей, Настройка системы RLS (Row Level Security — ограничение прав на уровне строк) в 1С:Бухгалтерия предприятия ред.3.0, Ограничение доступа к данным только одной организации у конкретного пользователя в 1С:Бухгалтерии 8.3, Как в типовой конфигурации 1С:Бухгалтерия предприятия редакции 3.0 настроить права доступа пользователей в разрезе организаций, Как включить возможность настройки ограничения доступа на уровне записей в типовой конфигурации 1С:Бухгалтерия предприятия ред.3.0, Как при многофирменном учете в 1С:Бухгалтерии разрешить пользователю доступ к документам только одной организации, Как в конфигурации 1С:Бухгалтерия предприятия 3.0 настроить права доступа пользователя к документам только одной организации, Настройка системы RLS (Record Level Security — ограничение прав на уровне записей) в конфигурации 1С:Бухгалтерия предприятия ред.3.0, Настройка механизмов RLS для ограничения пользователю прав доступа к данным только одной организации в конфигурации 1С:Бухгалтерия предприятия ред.3.0, Ограничение доступа к документам только одной организации у конкретного пользователя в 1С:Бухгалтерия предприятия 3.0, Как скрыть документы одной организации в общей базе 1С:Бухгалтерии для одного пользователя, В одной информационной базе 1С:Бухгалтерии ведется учет нескольких организаций, как настроить RLS чтобы пользователь мог видеть документы только своей организации? На предприятии в одной информационной базе 1С:Бухгалтерии ведется многофирменный учет и пользователям базы данных необходимо настроить доступ таким образом, чтобы каждый пользователь мог создавать, просматривать и редактировать документы только определенных организаций? Как в 1С:Бухгалтерии 8.3 с помощью механизма RLS (Record Level Security — ограничение прав на уровне записей) настроить ограничение видимости документов для конкретного пользователя в разрезе выбранных организаций?

Задача: сделать так, чтобы пользователь мог выбрать элемент из списка выбора, но при этом не мог открыть элемент для просмотра.

В старые добрые времена такая задача выполнялась с помощью запрета на открытие формы элемента для пользователя, у которого нет соответствующего разрешения, а разрешения, назначенные пользователям, хранились в в регистре сведений.

Однако, времена меняются, горизонты расширяются, поэтому попробуем получить нужный результат с помощью системы ограничения доступа RLS.

Имеем программу 1С: ERP 2, в которой нас интересует, например, документ «Заявка на расходование денежных средств». Назначим пользователю такие права доступа, чтобы он, создавая заявку на расходование денежных средств с типом операции «Выдача ДС подотчётнику», мог для реквизита «Подотчётное лицо» выбрать физическое лицо из списка выбора, но не мог открыть элемент для просмотра.

В типовой конфигурации ERP есть несколько ролей с правом чтения справочника «Физические лица», но предустановленные в них ограничения доступа не позволяют настроить систему так, как требует задача. Поэтому создадим новую роль и назовём её, к примеру, «ЧтениеФизическихЛицБезПросмотра».

Настроим для созданной роли доступ к справочнику «Физические лица».

Первой приходит мысль установить разрешение «Чтение» и не устанавливать разрешение «Просмотр». Воплощение мысли в жизнь, сохранение конфигурации, запуск в режиме «Предприятие», обновление параметров ограничения доступа, проверка… Увы, при такой настройке система не позволяет даже открыть список выбора. Ошибка «У пользователя недостаточно прав для работы с базой даных».

Следующая мысль – установить права «Чтение», «Просмотр», и для права «Чтение» настроить ограничение доступа RLS таким образом, чтобы поля «Ссылка» и»Наименование» были доступны, а все остальные нет. Делаем:

Условием «Где Истина» предоставляем доступ к полям «Ссылка» и «Наименование», а ко всем остальным закрываем доступ условием «Где Ложь».

Проверяем работу ограничения и видим, что прогресс есть, но не совсем достаточный: форма выбора открывается, однако она пуста.

Переходим к следующей идее. Раз уж не получается скрыть все поля, а показать только разрешённые, то попробуем пойти от противного — запретим только те поля, которые не должны быть доступны пользователю:

Снова проверяем, что получилось. Список выбора открывается, и он заполнен значениями. Пробуем открыть элемент — элемент не открывается, ошибка: «У пользователя недостаточно прав для работы с базой данных». В принципе, такое поведение системы условию задачи удовлетворяет. Разумеется, если нужно ещё как-то ограничивать список физических лиц, например по организации, то соответствующие ограничения доступа нужно добавлять.

1. Даем доступ к некоторым объектам или исключение из правил для RLS

2. Добавляем поиск показателя ограничения в регистрах.

Публикацию планирую наращивать, если желаете получить пример реализации какого-нибудь механизма в шаблоне РЛС — пишите в коменты.

1. Исключения в RLS

RLS достаточно точный механизм, ограничивающий доступ к таблицам базы по определенным условиям. Хоть и подразумевается что пользователь имеющий доступ только к некоторым документам определенного, к примеру, подразделения, на практике бывает необходимость все же выборочно давать доступ к объектам, запрещенным настройкой RLS.

Для примера – доступ ограничен по Организации и Подразделению для менеджера по кадрам. В случае перемещения сотрудника из подразделение в подразделение необходимо чтобы документ перемещения и сотрудник были видны в обоих подразделениях. Ну и при увольнении сотрудника типовая конфигурация пытается получить доступ к документу приема, который является документом первого подразделения.

На этом примере и проиллюстрирую не сложный механизм исключений из правил для RLS.

Исходные данные:

Шаблон ограничений для объектов где показатели для ограничения находятся в шапке документа:

ТекущаяТаблица ИЗ #ТекущаяТаблица КАК ТекущаяТаблица ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ РАЗЛИЧНЫЕ СоставГруппы.Ссылка КАК ГруппаПользователей ИЗ Справочник.ГруппыПользователей.ПользователиГруппы КАК СоставГруппы ГДЕ СоставГруппы.Пользователь = &ТекущийПользователь) КАК ГруппыПользователей ПО (ИСТИНА) ГДЕ НЕ ГруппыПользователей.ГруппаПользователей ЕСТЬ NULL И (НЕ 1 В (ВЫБРАТЬ ПЕРВЫЕ 1 1 ИЗ РегистрСведений.НазначениеВидовОбъектовДоступа КАК НазначениеВидовОбъектовДоступа ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиПравДоступаПользователей КАК НастройкиПравДоступаПользователей ПО НастройкиПравДоступаПользователей.ОбъектДоступа = ВЫБОР КОГДА НазначениеВидовОбъектовДоступа.ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.ПодразделенияОрганизаций) ТОГДА ВЫБОР КОГДА ТипЗначения(ТекущаяТаблица.#Параметр(2)) = ТипЗначения(NULL) ТОГДА НастройкиПравДоступаПользователей.ОбъектДоступа ИНАЧЕ ТекущаяТаблица.#Параметр(2) КОНЕЦ КОГДА НазначениеВидовОбъектовДоступа.ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.Организации) ТОГДА ТекущаяТаблица.#Параметр(1) КОНЕЦ И НастройкиПравДоступаПользователей.ВидОбъектаДоступа = НазначениеВидовОбъектовДоступа.ВидОбъектаДоступа И НастройкиПравДоступаПользователей.ОбластьДанных = ЗНАЧЕНИЕ(Перечисление.ОбластиДанныхОбъектовДоступа.ПустаяСсылка) И НастройкиПравДоступаПользователей.Пользователь = ГруппыПользователей.ГруппаПользователей ГДЕ НазначениеВидовОбъектовДоступа.ГруппаПользователей = ГруппыПользователей.ГруппаПользователей И НазначениеВидовОбъектовДоступа.ВидОбъектаДоступа В ( ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.ПустаяСсылка) , ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.ПодразделенияОрганизаций) , ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.Организации) ) И НастройкиПравДоступаПользователей.ОбъектДоступа ЕСТЬ NULL ))

Шаблон ограничений для объектов где Организация в шапке, Подразделение в табличной части:

ТекущаяТаблица ИЗ #ТекущаяТаблица КАК ТекущаяТаблица ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ РАЗЛИЧНЫЕ СоставГруппы.Ссылка КАК ГруппаПользователей ИЗ Справочник.ГруппыПользователей.ПользователиГруппы КАК СоставГруппы ГДЕ СоставГруппы.Пользователь = &ТекущийПользователь) КАК ГруппыПользователей ПО (ИСТИНА) ГДЕ НЕ ГруппыПользователей.ГруппаПользователей ЕСТЬ NULL И (НЕ 1 В (ВЫБРАТЬ ПЕРВЫЕ 1 1 ИЗ РегистрСведений.НазначениеВидовОбъектовДоступа КАК НазначениеВидовОбъектовДоступа ГДЕ НазначениеВидовОбъектовДоступа.ГруппаПользователей = ГруппыПользователей.ГруппаПользователей И ВЫБОР КОГДА НазначениеВидовОбъектовДоступа.ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.Организации) ТОГДА ВЫБОР КОГДА 1 В (ВЫБРАТЬ ПЕРВЫЕ 1 1 ИЗ (ВЫБРАТЬ 1 КАК Поле ) КАК Оптимизация ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиПравДоступаПользователей КАК НастройкиПравДоступаПользователей ПО НастройкиПравДоступаПользователей.ОбъектДоступа = ТекущаяТаблица.Организация И НастройкиПравДоступаПользователей.ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.Организации) И НастройкиПравДоступаПользователей.ОбластьДанных = ЗНАЧЕНИЕ(Перечисление.ОбластиДанныхОбъектовДоступа.ПустаяСсылка) И НастройкиПравДоступаПользователей.Пользователь = НазначениеВидовОбъектовДоступа.ГруппаПользователей) ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ КОНЕЦ КОГДА НазначениеВидовОбъектовДоступа.ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.ПодразделенияОрганизаций) ТОГДА ВЫБОР КОГДА (НЕ 1 В (ВЫБРАТЬ ПЕРВЫЕ 1 1 ИЗ Документ.#Параметр(1) КАК ТабличнаяЧастьДокумента ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПодразделенияОрганизаций КАК ПодразделенияОрганизации ПО ПодразделенияОрганизации.Ссылка = ТабличнаяЧастьДокумента.#Параметр(2) ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиПравДоступаПользователей КАК НастройкиПравДоступаПользователей ПО НастройкиПравДоступаПользователей.ОбъектДоступа = ПодразделенияОрганизации.Ссылка И НастройкиПравДоступаПользователей.ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.ПодразделенияОрганизаций) И НастройкиПравДоступаПользователей.ОбластьДанных = ЗНАЧЕНИЕ(Перечисление.ОбластиДанныхОбъектовДоступа.ПустаяСсылка) И НастройкиПравДоступаПользователей.Пользователь = НазначениеВидовОбъектовДоступа.ГруппаПользователей ГДЕ ТабличнаяЧастьДокумента.Ссылка = ТекущаяТаблица.Ссылка И НастройкиПравДоступаПользователей.ОбластьДанных ЕСТЬ NULL )) ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ КОНЕЦ ИНАЧЕ ИСТИНА КОНЕЦ = ЛОЖЬ)) И НЕ ГруппыПользователей.ГруппаПользователей ЕСТЬ NULL

Итак. Начнем с создания регистра сведений ДОП_ИсключенияПравДоступа. В нем мы будем хранить объекты к которым необходимо дать доступ и показатель – по которому необходимо дать доступ. Допустим для подразделения «Основное» следует дать доступ к документу «Прием на работу в организацию №000000001» который относится к другому подразделению. Создадим соответственно 2 измерения – ОбъектДоступа и ПоказательДоступа.

Следующим шагом следует обеспечить заполнение нашего регистра. В случае, приведенном в качестве примера, нас интерисует документ КадровоеПеремещение. Создадим подписку на событие, по событию ОбработкаПроведения и в новом общем модуле опишем движения по нашему регистру:

Процедура ДОП_ИсключенияПравДоступаКадровоеПеремещениеОбработкаПроведения(Источник, Отказ, РежимПроведения) Экспорт Запись = РегистрыСведений.ДОП_ИсключенияПравДоступа.СоздатьНаборЗаписей(); Запись.Отбор.Регистратор.Установить(Источник.Ссылка); Для Каждого Строка Из Источник.РаботникиОрганизации Цикл Если НЕ Строка.ПодразделениеОрганизации = Строка.Сотрудник.ТекущееПодразделениеОрганизации Тогда //Документ перемещения доступен в старом подразделении НоваяЗапись = Запись.Добавить(); НоваяЗапись.Регистратор = Источник.Ссылка; НоваяЗапись.Активность = Истина; НоваяЗапись.ОбъектДоступа = Источник.Ссылка; НоваяЗапись.ПоказательДоступа = Строка.Сотрудник.ТекущееПодразделениеОрганизации; //Сотрудник доступен в старом подразделении НоваяЗапись = Запись.Добавить(); НоваяЗапись.Регистратор = Источник.Ссылка; НоваяЗапись.Активность = Истина; НоваяЗапись.ОбъектДоступа = Строка.Сотрудник; НоваяЗапись.ПоказательДоступа = Строка.Сотрудник.ТекущееПодразделениеОрганизации; //Прием на работу сотрудника в старом подразделении доступен в новом подразделении НоваяЗапись = Запись.Добавить(); НоваяЗапись.Регистратор = Источник.Ссылка; НоваяЗапись.Активность = Истина; НоваяЗапись.ОбъектДоступа = НайтиДокументПриема(Строка.Сотрудник, Отказ); НоваяЗапись.ПоказательДоступа = Строка.ПодразделениеОрганизации; КонецЕсли; КонецЦикла; Если НЕ Отказ Тогда Запись.Записать(); КонецЕсли; КонецПроцедуры

Все, подготовительный этап окончен. Данные о объектах к которым необходимо дать доступ и о подразделениях, которым необходимо дать доступ к этим объектам попадают в регистр. Осталось немного поправить шаблоны ограничений добавив несколько строк.

Для шаблона с показателями в шапке:

ТекущаяТаблица ИЗ #ТекущаяТаблица КАК ТекущаяТаблица ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ РАЗЛИЧНЫЕ СоставГруппы.Ссылка КАК ГруппаПользователей ИЗ Справочник.ГруппыПользователей.ПользователиГруппы КАК СоставГруппы ГДЕ СоставГруппы.Пользователь = &ТекущийПользователь) КАК ГруппыПользователей ПО (ИСТИНА) ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДОП_ИсключенияПравДоступа КАК ОбъектыДоступа ПО ТекущаяТаблица.Ссылка = ОбъектыДоступа.ОбъектДоступа ГДЕ НЕ ГруппыПользователей.ГруппаПользователей ЕСТЬ NULL И (НЕ 1 В (ВЫБРАТЬ ПЕРВЫЕ 1 1 ИЗ РегистрСведений.НазначениеВидовОбъектовДоступа КАК НазначениеВидовОбъектовДоступа ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиПравДоступаПользователей КАК НастройкиПравДоступаПользователей ПО (НастройкиПравДоступаПользователей.ОбъектДоступа = ВЫБОР КОГДА НазначениеВидовОбъектовДоступа.ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.ПодразделенияОрганизаций) ТОГДА ВЫБОР КОГДА ТипЗначения(ТекущаяТаблица.#Параметр(2)) = ТипЗначения(NULL) ТОГДА НастройкиПравДоступаПользователей.ОбъектДоступа ИНАЧЕ ТекущаяТаблица.#Параметр(2) КОНЕЦ КОГДА НазначениеВидовОбъектовДоступа.ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.Организации) ТОГДА ТекущаяТаблица.#Параметр(1) КОНЕЦ ИЛИ НастройкиПравДоступаПользователей.ОбъектДоступа = ВЫБОР КОГДА НазначениеВидовОбъектовДоступа.ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.ПодразделенияОрганизаций) ТОГДА ВЫБОР КОГДА ТипЗначения(ТекущаяТаблица.#Параметр(2)) = ТипЗначения(NULL) ТОГДА НастройкиПравДоступаПользователей.ОбъектДоступа ИНАЧЕ ОбъектыДоступа.ПоказательДоступа КОНЕЦ КОНЕЦ ) И НастройкиПравДоступаПользователей.ВидОбъектаДоступа = НазначениеВидовОбъектовДоступа.ВидОбъектаДоступа И НастройкиПравДоступаПользователей.ОбластьДанных = ЗНАЧЕНИЕ(Перечисление.ОбластиДанныхОбъектовДоступа.ПустаяСсылка) И НастройкиПравДоступаПользователей.Пользователь = ГруппыПользователей.ГруппаПользователей ГДЕ НазначениеВидовОбъектовДоступа.ГруппаПользователей = ГруппыПользователей.ГруппаПользователей И НазначениеВидовОбъектовДоступа.ВидОбъектаДоступа В ( ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.ПустаяСсылка) , ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.ПодразделенияОрганизаций) , ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.Организации) ) И НастройкиПравДоступаПользователей.ОбъектДоступа ЕСТЬ NULL ))

И для шаблона ограничений с Организацией в шапке и подразделением в табличной части:

ТекущаяТаблица ИЗ #ТекущаяТаблица КАК ТекущаяТаблица ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ РАЗЛИЧНЫЕ СоставГруппы.Ссылка КАК ГруппаПользователей ИЗ Справочник.ГруппыПользователей.ПользователиГруппы КАК СоставГруппы ГДЕ СоставГруппы.Пользователь = &ТекущийПользователь) КАК ГруппыПользователей ПО (ИСТИНА) ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДОП_ИсключенияПравДоступа Как ОбъектыДоступа ПО ТекущаяТаблица.Ссылка = ОбъектыДоступа.ОбъектДоступа ГДЕ НЕ ГруппыПользователей.ГруппаПользователей ЕСТЬ NULL И (НЕ 1 В (ВЫБРАТЬ ПЕРВЫЕ 1 1 ИЗ РегистрСведений.НазначениеВидовОбъектовДоступа КАК НазначениеВидовОбъектовДоступа ГДЕ НазначениеВидовОбъектовДоступа.ГруппаПользователей = ГруппыПользователей.ГруппаПользователей И ВЫБОР КОГДА НазначениеВидовОбъектовДоступа.ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.Организации) ТОГДА ВЫБОР КОГДА 1 В (ВЫБРАТЬ ПЕРВЫЕ 1 1 ИЗ (ВЫБРАТЬ 1 КАК Поле ) КАК Оптимизация ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиПравДоступаПользователей КАК НастройкиПравДоступаПользователей ПО НастройкиПравДоступаПользователей.ОбъектДоступа = ТекущаяТаблица.Организация И НастройкиПравДоступаПользователей.ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.Организации) И НастройкиПравДоступаПользователей.ОбластьДанных = ЗНАЧЕНИЕ(Перечисление.ОбластиДанныхОбъектовДоступа.ПустаяСсылка) И НастройкиПравДоступаПользователей.Пользователь = НазначениеВидовОбъектовДоступа.ГруппаПользователей) ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ КОНЕЦ КОГДА НазначениеВидовОбъектовДоступа.ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.ПодразделенияОрганизаций) ТОГДА ВЫБОР КОГДА (НЕ 1 В (ВЫБРАТЬ ПЕРВЫЕ 1 1 ИЗ Документ.#Параметр(1) КАК ТабличнаяЧастьДокумента ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПодразделенияОрганизаций КАК ПодразделенияОрганизации ПО ПодразделенияОрганизации.Ссылка = ТабличнаяЧастьДокумента.#Параметр(2) ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиПравДоступаПользователей КАК НастройкиПравДоступаПользователей ПО (НастройкиПравДоступаПользователей.ОбъектДоступа = ПодразделенияОрганизации.Ссылка ИЛИ НастройкиПравДоступаПользователей.ОбъектДоступа = ОбъектыДоступа.ПоказательДоступа) И НастройкиПравДоступаПользователей.ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.ПодразделенияОрганизаций) И НастройкиПравДоступаПользователей.ОбластьДанных = ЗНАЧЕНИЕ(Перечисление.ОбластиДанныхОбъектовДоступа.ПустаяСсылка) И НастройкиПравДоступаПользователей.Пользователь = НазначениеВидовОбъектовДоступа.ГруппаПользователей ГДЕ ТабличнаяЧастьДокумента.Ссылка = ТекущаяТаблица.Ссылка И НастройкиПравДоступаПользователей.ОбластьДанных ЕСТЬ NULL )) ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ КОНЕЦ ИНАЧЕ ИСТИНА КОНЕЦ = ЛОЖЬ)) И НЕ ГруппыПользователей.ГруппаПользователей ЕСТЬ NULL

Вот и все. Осталось только указать параметры для шаблона для документов. Это наименования реквизитов, содержащих организацию и подразделение (знаю что это можно было убрать – зато иллюстрирует работу с параметрами) для шаблона для объектов с организацией и подразделением в табличной части и наименование документа + наименование табличной части и наименование реквизита, содержащего подразделение.

2. Поиск показателя ограничения в регистрах

Продолжим. Во многих кадровых и расчетных документах явно не указывается подразделение организации. Зато есть сотрудник, нам этого вполне хватит, чтобы найти его подразделение.

Для начала разберем конструкцию:

ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ СрезПоследних.Период КАК Период, СрезПоследних.Сотрудник КАК Сотрудник, Регистр.Регистратор КАК Регистратор, Регистр.ПодразделениеОрганизации КАК ПодразделениеОрганизации ИЗ (ВЫБРАТЬ РаботникиОрганизаций.Сотрудник КАК Сотрудник, МАКСИМУМ(РаботникиОрганизаций.Период) КАК Период ИЗ РегистрСведений.РаботникиОрганизаций КАК РаботникиОрганизаций СГРУППИРОВАТЬ ПО РаботникиОрганизаций.Сотрудник) КАК СрезПоследних ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РаботникиОрганизаций КАК Регистр ПО СрезПоследних.Период = Регистр.Период И СрезПоследних.Сотрудник = Регистр.Сотрудник)ПодразделениеСотрудника ПО ТекущаяТаблица.#Параметр(2) = ПодразделениеСотрудника.Сотрудник

Так как в RLS нельзя использовать виртуальные таблицы — нам придется ее сделать самостоятельно, что мы выше и сделали.

То есть мы получили подразделение по сотруднику из РС Работники организации. Осталось только внедрить этот кусочек в наши шаблоны RLS. Сотрудники обычно находятся в табличной части документа. В этот шаблон мы и добавим наш новый кусочек

ТекущаяТаблица ИЗ #ТекущаяТаблица КАК ТекущаяТаблица ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ РАЗЛИЧНЫЕ СоставГруппы.Ссылка КАК ГруппаПользователей ИЗ Справочник.ГруппыПользователей.ПользователиГруппы КАК СоставГруппы ГДЕ СоставГруппы.Пользователь = &ТекущийПользователь) КАК ГруппыПользователей ПО (ИСТИНА) ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДОП_ИсключенияПравДоступа Как ОбъектыДоступа ПО ТекущаяТаблица.Ссылка = ОбъектыДоступа.ОбъектДоступа ГДЕ НЕ ГруппыПользователей.ГруппаПользователей ЕСТЬ NULL И (НЕ 1 В (ВЫБРАТЬ ПЕРВЫЕ 1 1 ИЗ РегистрСведений.НазначениеВидовОбъектовДоступа КАК НазначениеВидовОбъектовДоступа ГДЕ НазначениеВидовОбъектовДоступа.ГруппаПользователей = ГруппыПользователей.ГруппаПользователей И ВЫБОР КОГДА НазначениеВидовОбъектовДоступа.ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.Организации) ТОГДА ВЫБОР КОГДА 1 В (ВЫБРАТЬ ПЕРВЫЕ 1 1 ИЗ (ВЫБРАТЬ 1 КАК Поле ) КАК Оптимизация ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиПравДоступаПользователей КАК НастройкиПравДоступаПользователей ПО НастройкиПравДоступаПользователей.ОбъектДоступа = ТекущаяТаблица.Организация И НастройкиПравДоступаПользователей.ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.Организации) И НастройкиПравДоступаПользователей.ОбластьДанных = ЗНАЧЕНИЕ(Перечисление.ОбластиДанныхОбъектовДоступа.ПустаяСсылка) И НастройкиПравДоступаПользователей.Пользователь = НазначениеВидовОбъектовДоступа.ГруппаПользователей) ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ КОНЕЦ КОГДА НазначениеВидовОбъектовДоступа.ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.ПодразделенияОрганизаций) ТОГДА ВЫБОР КОГДА (НЕ 1 В (ВЫБРАТЬ ПЕРВЫЕ 1 1 ИЗ Документ.#Параметр(1) КАК ТабличнаяЧастьДокумента ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ СрезПоследних.Период КАК Период, СрезПоследних.Сотрудник КАК Сотрудник, Регистр.Регистратор КАК Регистратор, Регистр.ПодразделениеОрганизации КАК ПодразделениеОрганизации ИЗ (ВЫБРАТЬ РаботникиОрганизаций.Сотрудник КАК Сотрудник, МАКСИМУМ(РаботникиОрганизаций.Период) КАК Период ИЗ РегистрСведений.РаботникиОрганизаций КАК РаботникиОрганизаций СГРУППИРОВАТЬ ПО РаботникиОрганизаций.Сотрудник) КАК СрезПоследних ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РаботникиОрганизаций КАК Регистр ПО СрезПоследних.Период = Регистр.Период И СрезПоследних.Сотрудник = Регистр.Сотрудник)ПодразделениеСотрудника ПО ТабличнаяЧастьДокумента.#Параметр(2) = ПодразделениеСотрудника.Сотрудник ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПодразделенияОрганизаций КАК ПодразделенияОрганизации ПО ПодразделенияОрганизации.Ссылка = ПодразделениеСотрудника.ПодразделениеОрганизации ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиПравДоступаПользователей КАК НастройкиПравДоступаПользователей ПО (НастройкиПравДоступаПользователей.ОбъектДоступа = ПодразделенияОрганизации.Ссылка ИЛИ НастройкиПравДоступаПользователей.ОбъектДоступа = ОбъектыДоступа.ПоказательДоступа) И НастройкиПравДоступаПользователей.ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.ПодразделенияОрганизаций) И НастройкиПравДоступаПользователей.ОбластьДанных = ЗНАЧЕНИЕ(Перечисление.ОбластиДанныхОбъектовДоступа.ПустаяСсылка) И НастройкиПравДоступаПользователей.Пользователь = НазначениеВидовОбъектовДоступа.ГруппаПользователей ГДЕ ТабличнаяЧастьДокумента.Ссылка = ТекущаяТаблица.Ссылка И НастройкиПравДоступаПользователей.ОбластьДанных ЕСТЬ NULL )) ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ КОНЕЦ ИНАЧЕ ИСТИНА КОНЕЦ = ЛОЖЬ)) И НЕ ГруппыПользователей.ГруппаПользователей ЕСТЬ NULL

В результате мы видем объекты с сотрудниками только своего подразделения. Надеюсь этот материал поможет разобраться с RLS и не отказываться от него из-за его якобы «сложности»

  • Добавить свою публикацию
  • для этого требуется регистрация

YPermitin 08.07.2013 +2

Предисловие

В одной из предыдущих статей мы рассматривали сквозной пример настройки ограничений на уровне записей (RLS) по организациями в УПП 1.3. Сегодня мы рассмотрим еще небольшой пример настройки RLS по контрагентам, поскольку ход действий будет немного отличаться от процесса настройки доступа по организациям.

И так, приступим!

Настройки прав

Допустим, нам нужно для пользователя из отдела оптовых продаж «Бильданова Алексея Николаевича» добавить права на работу с некоторым списком контрагентов. Пусть это будут некоторые VIP-клиенты нашей организации (см. скриншот выше).

Для решения поставленной задачи практически идеально подойдет механизм разграничения прав на уровне записей (RLS). Зайдя в программу под администратором, включим интерфейс администрирования пользователей и в меню «Доступ на уровне записей» перейдем в параметры.

Здесь нам нужно установить галку «Контрагенты». Тем самым мы включили разграничение доступа на уровне записей для вида объектов «Контрагенты». На скриншоте также включено разграничение прав по организациям, которое мы настраивали в предыдущей статье. Как уже упомяналось ранее в статьях, работа RLS в УПП основывается на группах пользователей. Поэтому создадим новую группу пользователей «Доступ к VIP-клиентам» и включим в ее состав пользователя «Бильданова».

Прежде чем приступать к настройка прав доступа для созданной группы пользователей, создадим группу доступа контрагентов, к которой в дальнейшем и будут привязываться настройки RLS.

Теперь перейдем к настройке прав для группы пользователей. Установим следующие параметры:

В соответствии с установленными настройками, пользователи, входящие в группу пользователей «Доступ к VIP-клиентам», могут редактировать как самих контрагентов, так и их дополнительную информацию (адреса, свойства и т.д.), НО ТОЛЬКО ВХОДЯЩИХ В ГРУППУ доступа контрагентов «VIP-клиенты».

Настройка прав доступа к контрагентам на этом этапе практически завершена. Осталось лишь добавить VIP-клиентов в созданную группу доступа контрагентов. Для этого у всех элементов справочника «Контрагенты», находящихся в группе «VIP-покупатели» нужно установить значение реквизита «Группа доступа к контрагенту» в соответсвии с созданной ранее группой доступа:

На этом все, посмотрим результат.

Результат

Запустим программу в режиме 1С:Предприятия под пользователем «Бильданов». Открыв справочник «Контрагенты», нам будут доступны только те контрагенты, которые находятся в группе доступа контрагентов «VIP-клиенты».

Особенностью организации доступа на уровне записей для контрагентов в конфигурации «Управление производственным предприятием» является то, что ограничения не действуют на группу справочника «Контрагенты».

Особенностью, отличающую настройку RLS для контрагентов от справочника «Организации», является использование дополнительноо звера — справочника «Группы доступа контрагентов», в то время как для организаций доступа устанавливался непосредственно на элементы справочника. Сделано так для удобства настройки прав (более укрупненными блоками), а также для более оптимальной работы запросов к базе данных при использовании RLS.

Оставьте комментарий