powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / [игнор отключен] [закрыт для гостей] / Оптимизация запроса RLS
13 сообщений из 13, страница 1 из 1
Оптимизация запроса RLS
    #36788000
supervk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Задача: ограничить через RLS доступ к справочнику контрагентов по реквизиту ГруппаДоступа ГруппаДоступа - элемент справочника ГруппыДоступа, права доступа прописаны для групп пользователей в регистре ПраваДоступаПользователей.

Написал следующий запрос в ограничения доступа:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Контрагенты ГДЕ 
(Контрагенты.ГруппаДоступа В
  (ВЫБРАТЬ РАЗЛИЧНЫЕ
    ПраваДоступаПользователей.ОбъектДоступа
  ИЗ
    Справочник.ГруппыПользователей.ПользователиГруппы КАК СоставГруппы ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ПраваДоступаПользователей КАК ПраваДоступаПользователей
  ПО
    СоставГруппы.Ссылка = ПраваДоступаПользователей.Пользователь
      И ПраваДоступаПользователей.ОбъектДоступа ССЫЛКА Справочник.ГруппыДоступа
      И СоставГруппы.Пользователь = &ТекущийПользователь)
  ИЛИ Контрагенты.ГруппаДоступа = ЗНАЧЕНИЕ(Справочник.ГруппыДоступа.ПустаяСсылка)
  ИЛИ Контрагенты.ЭтоГруппа)

Подскажите, пожалуйста, как ещё можно оптимизировать данный запрос, на предмет скорости выполнения? Может по-другому организовать как-то?
...
Рейтинг: 0 / 0
Оптимизация запроса RLS
    #36788079
vitkhv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
Контрагенты.ГруппаДоступа В

Замени на соединение, будет быстрее.
...
Рейтинг: 0 / 0
Оптимизация запроса RLS
    #36788415
supervk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vitkhvЗамени на соединение, будет быстрее.
Ага, спасибо, сделал так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Контрагенты ИЗ Справочник.Контрагенты КАК Контрагенты
	ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ РАЗЛИЧНЫЕ
		ПраваДоступаПользователей.ОбъектДоступа КАК ОбъектДоступа
	ИЗ
		Справочник.ГруппыПользователей.ПользователиГруппы КАК СоставГруппы
			ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ПраваДоступаПользователей КАК ПраваДоступаПользователей
			ПО СоставГруппы.Ссылка = ПраваДоступаПользователей.Пользователь
				И (ПраваДоступаПользователей.ОбъектДоступа ССЫЛКА Справочник.ГруппыДоступа)
				И (СоставГруппы.Пользователь = &ТекущийПользователь)) КАК ГруппыДоступа
	ПО (Контрагенты.Ссылка = ГруппыДоступа.ОбъектДоступа
			ИЛИ Контрагенты.ЭтоГруппа
			ИЛИ Контрагенты.ГруппаДоступа = ЗНАЧЕНИЕ(Справочник.ГруппыДоступа.ПустаяСсылка))

Меня смущает то, что в типовых используется как-раз "В". Но там такие хитрые запросы, что я не смог их до конца понять.
...
Рейтинг: 0 / 0
Оптимизация запроса RLS
    #36788419
supervk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как можно объективно сравнить скорости выполнения запросов?
...
Рейтинг: 0 / 0
Оптимизация запроса RLS
    #36789083
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что всех тянет вложенные запросы плодить, да ещё зачем-то "РАЗЛИЧНЫЕ"...
Кроме того, у тебя связь через Контрагенты.ГруппаДоступа как-то незаметно морфировала в связь по Контрагенты.Ссылка.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Контрагенты ИЗ Справочник.Контрагенты КАК Контрагенты
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ПраваДоступаПользователей КАК ПраваДоступаПользователей
        ПО Контрагенты.ГруппаДоступа = ПраваДоступаПользователей.ОбъектДоступа
		ИЛИ Контрагенты.ЭтоГруппа
		ИЛИ Контрагенты.ГруппаДоступа = ЗНАЧЕНИЕ(Справочник.ГруппыДоступа.ПустаяСсылка)
	ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыПользователей.ПользователиГруппы КАК СоставГруппы
	ПО СоставГруппы.Ссылка = ПраваДоступаПользователей.Пользователь
		И ПраваДоступаПользователей.ОбъектДоступа ССЫЛКА Справочник.ГруппыДоступа
		И СоставГруппы.Пользователь = &ТекущийПользователь
...
Рейтинг: 0 / 0
Оптимизация запроса RLS
    #36789754
vitkhv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
supervkКак можно объективно сравнить скорости выполнения запросов?
Запросы для RLS отлаживаешь в универсальном отчете. Если MS SQL - отлавливаешь запрос из универсального отчета в профайлере, анализируешь план запроса, если что то не так - в QA отлаживаешь запрос, как только получил приемлемый план исполнения, пытаешся написать в 1С запрос который на выходе будет парсирован в такой же оптимальный как и полученный в QA.
QA это для 2000 сервера, для 2005 и выше функционал QA находится в менеджмент студио.

Да и еще учти, что 1С RLS запросы будет добавлять к обычным через инструкцию ВЫБРАТЬ РАЗРЕШЕННЫЕ, фактически ВЫБРАТЬ РАЗРЕШЕННЫЕ будет заменно на RLS запрос, поэтому пиши все запросы правильно и проблем будет меньше, вот здесь обсуждалась производительность различных вариантов разименовывания в запросах 1С, почитай будет полезно.
...
Рейтинг: 0 / 0
Оптимизация запроса RLS
    #36789807
supervk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
WildSeryКроме того, у тебя связь через Контрагенты.ГруппаДоступа как-то незаметно морфировала в связь по Контрагенты.Ссылка.

Да, спасибо, ошибся.

WildSeryЧто всех тянет вложенные запросы плодить, да ещё зачем-то "РАЗЛИЧНЫЕ"...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Контрагенты ИЗ Справочник.Контрагенты КАК Контрагенты
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ПраваДоступаПользователей КАК ПраваДоступаПользователей
        ПО Контрагенты.ГруппаДоступа = ПраваДоступаПользователей.ОбъектДоступа
		ИЛИ Контрагенты.ЭтоГруппа
		ИЛИ Контрагенты.ГруппаДоступа = ЗНАЧЕНИЕ(Справочник.ГруппыДоступа.ПустаяСсылка)
	ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыПользователей.ПользователиГруппы КАК СоставГруппы
	ПО СоставГруппы.Ссылка = ПраваДоступаПользователей.Пользователь
		И ПраваДоступаПользователей.ОбъектДоступа ССЫЛКА Справочник.ГруппыДоступа
		И СоставГруппы.Пользователь = &ТекущийПользователь


Спасибо, выбирается то что надо, но с дублями, как я понял, по количеству вхождений пользователя в группы пользователей. Для РЛС это не критично?
...
Рейтинг: 0 / 0
Оптимизация запроса RLS
    #36789808
supervk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vitkhvЗапросы для RLS отлаживаешь в универсальном отчете. Если MS SQL - отлавливаешь запрос из универсального отчета в профайлере, анализируешь план запроса, если что то не так - в QA отлаживаешь запрос, как только получил приемлемый план исполнения, пытаешся написать в 1С запрос который на выходе будет парсирован в такой же оптимальный как и полученный в QA.
QA это для 2000 сервера, для 2005 и выше функционал QA находится в менеджмент студио.
Да и еще учти, что 1С RLS запросы будет добавлять к обычным через инструкцию ВЫБРАТЬ РАЗРЕШЕННЫЕ, фактически ВЫБРАТЬ РАЗРЕШЕННЫЕ будет заменно на RLS запрос, поэтому пиши все запросы правильно и проблем будет меньше, вот здесь обсуждалась производительность различных вариантов разименовывания в запросах 1С, почитай будет полезно.
Спасибо, vitkhv.
...
Рейтинг: 0 / 0
Оптимизация запроса RLS
    #36789811
supervk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
WildSeryЧто всех тянет вложенные запросы плодить, да ещё зачем-то "РАЗЛИЧНЫЕ"...
Спасибо, выбирается то что надо, но с дублями, как я понял, по количеству вхождений пользователя в группы пользователей. Для РЛС это не критично?Мой оригинальный запрос (который с соединением), тоже плодит дубли, если пользователь находится в нескольких группах. Видимо, вариант с соединениями не подходит.
...
Рейтинг: 0 / 0
Оптимизация запроса RLS
    #36789993
vitkhv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
supervkМой оригинальный запрос (который с соединением), тоже плодит дубли, если пользователь находится в нескольких группах. Видимо, вариант с соединениями не подходит.
Может стоит SQL покурить и правильно написать запрос, чтобы дублей не выдавал?
...
Рейтинг: 0 / 0
Оптимизация запроса RLS
    #36790004
supervk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vitkhvsupervkМой оригинальный запрос (который с соединением), тоже плодит дубли, если пользователь находится в нескольких группах. Видимо, вариант с соединениями не подходит.
Может стоит SQL покурить и правильно написать запрос, чтобы дублей не выдавал?Да, конечно. Я просто по результатам отписался.
...
Рейтинг: 0 / 0
Оптимизация запроса RLS
    #36790612
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RLS последний раз смотрел уже давно и мало, проясните - действительно, если шаблон выдаёт дубли, то и в списке будут дубли?
Сейчас самому проверить не на чем.
...
Рейтинг: 0 / 0
Оптимизация запроса RLS
    #36791522
vitkhv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WildSeryRLS последний раз смотрел уже давно и мало, проясните - действительно, если шаблон выдаёт дубли, то и в списке будут дубли?
Сейчас самому проверить не на чем.

По моему и с дублями все нормально будет, хотя могу и ошибаться.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / [игнор отключен] [закрыт для гостей] / Оптимизация запроса RLS
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]