Имя: Пароль:
1C
1С v8
УТ 11 и RLS. Изменения режима при открытии формы
0 men47
 
16.08.19
12:28
Всем привет! нужна помощь.

В компании включен RLS, но необходимо, чтобы поиск в подборе происходил достаточно быстро. Запрос вывода в динамический список, уже несколько раз изменялся, убирались лишние на текущий момент таблицы, теперь дошло и до RLS. Через сиквел мы видим, что при построении запроса поиска платформа подтягивает таблицы ограничении RLS'а. Нашли роль, которая осуществляет подстановку запроса, в УТ 11 это "ЧтениеОстатковДоступныхТоваров". Если мы коментим ограничение доступа у регистра накопления "СвободныеОстатки", то о чудо, при построения запроса поиска таблицы нету. Было принято решение добавить условие в ограничение доступа и через параметр сеанса включать/выключать данное ограничение. Т.е. при открытии/закрытии формы мы меняем параметр сеанса.

Создал параметр, добавил условие, добавил инициализацию при запуске, добавил код изменения параметр сеанса в подборе при открытии/закрытии формы. НО, ничего не поменялось, т.е. если мы меняем при запуске булево с ложь на истина, то да, таблица не добавляется. Если мы меняем при открытии/закрытии формы, нет. На мысль пришло то что необходимо при открытии/закрытии повторно инициализировать параметр сеанса. Так же нашел, что если мы отключаем RLS, то на лету (без перезахода) отключается подстановка таблицы. Посмотрел код при отключении/включении RLS, нашел, при изменении параметра, программа лезет в общий модуль "УправлениеДоступомСлужебный" в процедуру "УстановкаПараметровСеанса". Сделал обращение при открытии/закрытии формы по аналогии, добавил в эту процедуру свой параметр, прописал установку этого параметра так же как и остальные. И...... ничего не поменялось... Есть предложения куда еще можно заглянуть?

В роли прописано вот так:

#Если НЕ &ЛМ_НеИспользоватьRLS #Тогда
#Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда
#ДляРегистра("ИдентификаторыОбъектовМетаданных.РегистрНакопленияСвободныеОстатки", "Склад", "", "", "", "")
#Иначе
#ПоЗначениям( "РегистрНакопления.СвободныеОстатки","Чтение","",
"Склады","Склад", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","" )
#КонецЕсли
#КонецЕсли

в Общем модуле вот так:

&Вместо("УстановкаПараметровСеанса")
Процедура ЛМ_УстановкаПараметровСеанса(ИмяПараметра, УстановленныеПараметры)
    
    //на всякий случай скопировал весь модуль
    //Если ИмяПараметра = "ЛМ_НеИспользоватьRLS" Тогда
        ОграничениеЛМ_НеИспользоватьRLS = Константы.ЛМ_НеИспользоватьRLS.Получить();
        ПараметрыСеанса.ЛМ_НеИспользоватьRLS = ОграничениеЛМ_НеИспользоватьRLS;
        УстановленныеПараметры.Добавить("ЛМ_НеИспользоватьRLS");
    //КонецЕсли;
.......


Обращение в эту процедуру вот так:

Процедура ПриИзмененииЛМ_НеИспользоватьRLS(ОграничениеДоступаНаУровнеЗаписейВключено) Экспорт
    
    УстановитьПривилегированныйРежим(Истина);
    
    Константы.ЛМ_НеИспользоватьRLS.Установить(ОграничениеДоступаНаУровнеЗаписейВключено);

    УстановленныеПараметры = Новый Массив;
    УстановкаПараметровСеанса("", УстановленныеПараметры);
    
КонецПроцедуры


Из формы произвожу обращение:
&НаСервере
Процедура ЛМ_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
    НачатьТранзакцию();
    
    УстановитьПривилегированныйРежим(Истина);
    УправлениеДоступомСлужебный.ПриИзмененииЛМ_НеИспользоватьRLS(Истина);
    УстановитьПривилегированныйРежим(Ложь);
    ЗафиксироватьТранзакцию();
КонецПроцедуры

при закрытии на севере так же только параметр "Ложь"
1 men47
 
16.08.19
12:33
(0) если что, отключить RLS не предлагать=)))
2 men47
 
19.08.19
10:17
(0) решение здесь: http://forum.infostart.ru/forum9/topic223942/message2276635/#message2276635

немного выше есть пост с текстом, что добавлено.
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс