|
УТ 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
немного выше есть пост с текстом, что добавлено. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |