Спасибо всем за создание форума и концентрацию на нем полезной для разработчиков информации!
Не нашла темы по RLS запросам в ролях пользователей, возможно плохо искала.
RLS запросы удобная вещь, но они очень существенно влияют на быстродействие системы в файловом варианте.
В типовой конфигурации УПП есть такая конструкция :
АктОбОказанииПроизводственныхУслуг ГДЕ (АктОбОказанииПроизводственныхУслуг.Контрагент = ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
ИЛИ 1 В
(ВЫБРАТЬ ПЕРВЫЕ 1
1
ИЗ
РегистрСведений.ПраваДоступаПользователейКОбъектам КАК ПраваДоступаПользователейКОбъектам
ГДЕ
ПраваДоступаПользователейКОбъектам.ОбъектДоступа = АктОбОказанииПроизводственныхУслуг.Контрагент
И ПраваДоступаПользователейКОбъектам.ОбластьДанных = ЗНАЧЕНИЕ(Перечисление.ОбластиДанныхОграниченияПравДоступа.КонтрагентыДанные)
И ПраваДоступаПользователейКОбъектам.Пользователь В (&ГруппыТекущегоПользователя)
И ПраваДоступаПользователейКОбъектам.Чтение = ИСТИНА))
Шапка ИЗ Документ.ЗаказПокупателя КАК Шапка
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиПользователей КАК НастройкиПользователей
ПО (НастройкиПользователей.Пользователь = &ТекущийПользователь)
И (НастройкиПользователей.Настройка = ЗНАЧЕНИЕ(ПланВидовХарактеристик.НастройкиПользователей.ОсновнойВидНоменклатуры))
И Шапка.Система.ВидНоменклатуры = НастройкиПользователей.Значение
1 В
(ВЫБРАТЬ ПЕРВЫЕ 1
1
ИЗ
РегистрСведений.ПраваДоступаПользователейКОбъектам КАК ПраваДоступаПользователейКОбъектам
ГДЕ
ПраваДоступаПользователейКОбъектам.ОбъектДоступа = АктОбОказанииПроизводственныхУслуг.Контрагент
И ПраваДоступаПользователейКОбъектам.ОбластьДанных = ЗНАЧЕНИЕ(Перечисление.ОбластиДанныхОграниченияПравДоступа.КонтрагентыДанные)
И ПраваДоступаПользователейКОбъектам.Пользователь В (&ГруппыТекущегоПользователя)
И ПраваДоступаПользователейКОбъектам.Чтение = ИСТИНА))
Мне кажется ваша конструкция не будет работать медленнее
интересно , конечно, узнать в цифрах сравнительное быстродействие для разных конструкций запросов.
Первый вариант использует одну таблицу и сложное условие с вложенным запросом
Второй вариант две связанные таблицы.
Но вопрос, оказывается, ещё и в том, что эти варианты не равнозначны в функционале.
Для второго варианта у меня не получилось реализовать ограничение по двум реквизитам через ИЛИ
То есть, когда мне понадобилось добавить ещё права и на документы с Ответственный = Пользователь, то пришлось использовать типовую конструкцию с одной таблицей
ЗаказПокупателя.Ответственный = &ТекущийПользователь
ИЛИ 1 В
(ВЫБРАТЬ ПЕРВЫЕ 1
1
ИЗ
РегистрСведений.НастройкиПользователей КАК НастройкиПользователей
ГДЕ
(НастройкиПользователей.Пользователь = &ТекущийПользователь)
И (НастройкиПользователей.Настройка = ЗНАЧЕНИЕ(ПланВидовХарактеристик.НастройкиПользователей.ОсновнойВидНоменклатуры))
И ЗаказПокупателя.Система.ВидНоменклатуры = НастройкиПользователей.Значение
RLS + запросы такого типа зло ... Юзайте попроще ...
ЗЫ: конструкция с единицей будет работать быстрее так как результат не будет содержать объект ссылочного типа ...
Заведите реквизит Создатель, в РЛС напишите Где Создатель = &глПользователь Или Система = &глСистема
глСистема и глПользователь - глобальные переменные.
ЗЫ: повторюсь не мудрите с РЛС ...
ЗаказПокупателя.Ответственный = &ТекущийПользователь
ИЛИ
ЗаказПокупателя.Система = &глСистема
ЗаказПокупателя.Ответственный = &ТекущийПользователь
ИЛИ 1 В
(ВЫБРАТЬ ПЕРВЫЕ 1
1
ИЗ
РегистрСведений.НастройкиПользователей КАК НастройкиПользователей
ГДЕ
(НастройкиПользователей.Пользователь = &ТекущийПользователь)
И (НастройкиПользователей.Настройка = ЗНАЧЕНИЕ(ПланВидовХарактеристик.НастройкиПользователей.ОсновнойВидНоменклатуры))
И ЗаказПокупателя.Система.ВидНоменклатуры = НастройкиПользователей.Значение
Я бы сказал что в разы ... Но при условии, что чем старше версия MS SQL тем лучше отрабатывает оптимизатор запросов - то разница будет ощутима только на больших объемах ... Плюс кэширование запроса - первый раз он выполниться в 100 раз медленнее чем последующие ...
ЗЫ: сказать в реальных цифрах нет возможности ... Нужно экспериментировать ...
ЗЫЫ: профайлер в руки + http://pro1c.org.ua/redirect.php?http://www.gilev.ru/1c/81/index/optimquery.htm и любой запрос в ваших руках будет работать очень быстро
Это всё хорошо для MS SQL. А если файловый вариант?
Есть какие-нибудь статьи-исследования по сравнению быстродействия выполнения одного и того же RLS запроса в файловом и SQL варианте базы?
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua