Имя: Пароль:
1C
1С v8
RLS и запросы (<Объект не найден>)
,
0 UnsavedSoul
 
03.03.14
17:55
Как известно, наложив RLS на справочник Склады, например, выбирая все элементы справочника без РАЗРЕШЕННЫЕ наткнемся на исключение, а с ним - увидим в результате только те элементы, которые удовлетворяют условию RLS. Однако, обращаясь к таблице остатков регистра накопления и выбирая в качестве результирующего поля склад, мы увидим остатки по всем складам, вот только у тех записей, что условию RLS по справочнику Склады не удовлетворяют, в соответствующем поле будет красоваться <Объект не найден>. Собственно вопрос, как от него избавиться?:) Пока пришло в голову только создание ВТ с разрешенными складами и ограничение результирующего запроса только теми складами, что есть в ВТ. Есть у кого еще какие мысли?
Вопрос встал в процессе разработки отчета для пользователей с RLS в ролях, и, соответственно, в отчете задействованы эти самые таблицы с ограничениями.
1 Господин ПЖ
 
03.03.14
17:59
>Собственно вопрос, как от него избавиться?

от кого?
2 UnsavedSoul
 
03.03.14
18:00
От <Объект не найден> в результате запроса
3 Господин ПЖ
 
03.03.14
18:00
>Пока пришло в голову только создание ВТ с разрешенными складами и ограничение результирующего запроса только теми складами, что есть в ВТ

наложить на таблицу RLS нормальный - никак?
4 UnsavedSoul
 
03.03.14
18:02
Что значит "нормальный"?
5 Господин ПЖ
 
03.03.14
18:04
после наложения которого таких веток не возникает...
6 UnsavedSoul
 
03.03.14
18:07
В справочнике "Склады" 5 элементов, согласно условию RLS пользователю доступны только 3 из них.
Результатом запроса "ВЫБРАТЬ РАЗРЕШЕННЫЕ * ИЗ Справочник.Склады" будут 3 записи, удовлетворяющие условию.
А результатом запроса к таблице остатков регистра накопления, в котором есть измерение "Склад" будут все(!) записи, вот только в поле Склад результата запроса для разрешенных складов будет ссылка на склад, а для тех,что не прошли проверку по RLS - <Объект не найден>. И если стоит задача пользователю с такими ограничениями сформировать отчет по остаткам, то как быть с этими записями <Объект не найден>?
7 ale-sarin
 
03.03.14
18:08
(4) Так на регистр еще надо РЛС наложить. или положить. или покласть.
8 Maxus43
 
03.03.14
18:10
(6) ещё РЛС на регистр покласть, чтоб не смогли читать остатки по этому складу
9 Wobland
 
03.03.14
18:10
(6) юзеру количество кто-то запретил видеть?
10 Господин ПЖ
 
03.03.14
18:10
(6) ты наложил rls на таблицу складов, что дает в таблице РН (а на нее свои права) "объект не найден" - ибо "перекрыты" поля формирующие представление ссылки... на РН твой RLS не действует

что не понятно то....
11 UnsavedSoul
 
03.03.14
18:12
(10) это-то мне как раз и понятно! Непонятно, как с этим быть? Неужели только RLS на регистр?
12 Wobland
 
03.03.14
18:12
ну почему только? ВТ со складами, пост-обработка запроса, раскрашивание результирующего ТабДокумента...
13 Maxus43
 
03.03.14
18:13
(12) и так на все типовые отчеты...)
14 Wobland
 
03.03.14
18:13
(13) ну надо как-то зряплату оправдывать ;)
15 Господин ПЖ
 
03.03.14
18:13
(11) а что должно быть?
16 ale-sarin
 
03.03.14
18:13
(11) А че смущает? Типовые гляньте.
17 Жан Пердежон
 
03.03.14
18:15
(11) еще вариант: добавь в запрос наименование склада
18 Wobland
 
03.03.14
18:16
(17) типа, если ссылку запрещено читать, будем читать наименование?
19 Maxus43
 
03.03.14
18:17
(18) да тож ничо вариант, типа в спсике мы видим, а вот зайти в элемент, подрихтовать - низя
20 Жан Пердежон
 
03.03.14
18:17
(18) ссылку то как раз читать и не запрещено
21 UnsavedSoul
 
03.03.14
18:18
(15) Хотелось бы убрать эти записи из результата зепроса.
22 Господин ПЖ
 
03.03.14
18:19
(17) смысл глубинный... в списке склада нет, а данные видно?
23 Wobland
 
03.03.14
18:19
(21) благословить?
24 Господин ПЖ
 
03.03.14
18:20
(21) rls накладывай на РН нормальный... можно взять из типовой подходящий по смыслу шаблон если разрезов может быть несколько... или самому нарисовать
25 Жан Пердежон
 
03.03.14
18:20
(22) сработает ограничение "Разрешенные"
26 UnsavedSoul
 
03.03.14
18:20
(23) Нет, помочь подобрать инструмент.
27 Господин ПЖ
 
03.03.14
18:21
(25) в каком месте?
28 Wobland
 
03.03.14
18:21
(26) БСП
29 Maxus43
 
03.03.14
18:21
(26) РЛС на регистр, говорили же ужо
30 fisher
 
03.03.14
18:21
(26) RLS надо накладывать на все таблицы, к которым они должны применяться. В том числе и на регистры. Никакого интеллектуального "изъятия" записей, содержащих ссылки на неразрешенные записи в другой таблице платформа не делает.
31 fisher
 
03.03.14
18:23
Да! И про журналы тоже не забудь.
32 UnsavedSoul
 
03.03.14
18:27
(17) (25)
Спасибо! Это вариант мне нравится больше: в таком случае вместо наименования получаем Null, а по нему уже отобрать никаких проблем, что на уровне запроса, что на уровне СКД.
33 Жан Пердежон
 
03.03.14
18:27
(27) в запросе. но это скорее костыль, который можно использовать, если тс нельзя менять конфу
34 fisher
 
03.03.14
18:30
(32) Отличный вариант. Вместо того, чтобы надежно и централизованно решить проблему раз и навсегда, будем всю жизнь в куче мест костыли втыкать.
35 Господин ПЖ
 
03.03.14
18:32
(33) так себе вариант имхо... я такое делал в конфе, в которой наоборот надо было убрать лишнее, а поля формирующие ссылки были выведены из-под rls
36 UnsavedSoul
 
03.03.14
18:35
(30) (31)
Спасибо! Поведение платформы в случае работы с RLS мне понятно, хотелось бы просто максимально быстрое решение в рамках разработки одного отчета.
(34)
Согласен, однако в данном случае грамотная настройка RLS означает изменение всех объектов метаданных, ссылающихся на справочник Склады. Это нецелесообразно в рамках решения проблемы формирования одного отчета.
37 kiruha
 
03.03.14
18:36
(32)
Издеваешься ?
Разрешенные склады во временную клади
На регистр условие - склад из этой временной
38 Жан Пердежон
 
03.03.14
18:38
(32) какая версия платформы? какой запрос? никаких доп.отборов по NULL быть не должно; в любом случае еще в (7) самый правильный ответ был.
39 UnsavedSoul
 
03.03.14
18:44
(38)
8.2.19.83
<code>ВЫБРАТЬ РАЗРЕШЕННЫЕ
    ТоварыНаСкладахОстатки.Склад
ИЗ
    РегистрНакопления.ТоварыНаСкладах.Остатки(, ) КАК ТоварыНаСкладахОстатки</code>
В складах RLS на ссылку с условием
<code>ГДЕ Наименование <> "Склад Магазина №1"
    И Наименование <> "Склад Магазина №2"</code>
40 fisher
 
03.03.14
18:45
(39) <рука-лицо>
41 Wobland
 
03.03.14
18:48
(39) различные сильно ускорит этот запрос, но какая в пень разница, когда (40)?..
42 UnsavedSoul
 
03.03.14
18:50
В итоге:
1. Единственный корректный вариант использования RLS - это настройка во всех таблицах, имеющих ссылки на таблицу с данными, к которым ограничиваем доступ;
2. Первый костыль. В запросе используем временную таблица с разрешенными записями, а потом фильтруем с помощью этих данных результирующий запрос;
3. Второй костыль. Выбираем в запросе любое поле из таблицы с RLS, получаем в результирующем запросе Null и фильтруем по нему.
43 UnsavedSoul
 
03.03.14
18:51
Всем откликнувшимся и действительно пытавшимся помочь - спасибо.
44 UnsavedSoul
 
03.03.14
18:53
(40) (41)
Разумеется это просто запрос из головы, но выполнение которого приведет к аналогичному результату. К нему и применял советы, есличо.
45 Wobland
 
03.03.14
18:53
4. взывать к наименованию только под страхом лишения конечностей или суставов
46 kiruha
 
03.03.14
18:55
1)
ВЫБРАТЬ РАЗРЕШЕННЫЕ
Склады.ССылка КАК Склад
Поместить РазрешенныеСклады
ИЗ Справочник.Склады КАК Склады;
ВЫБРАТЬ РАЗРЕШЕННЫЕ
    ....
ИЗ
    РегистрНакопления.ТоварыНаСкладах.Остатки(,Склад В (Выбрать Склад ИЗ РазрешенныеСклады ) ) КАК ТоварыНаСкладахОстатки
Этого достаточно . Вот если есть ограничение более сложное Организация + Склад - то придется еще спец регистр заводить

2)

Либо РЛС на регистр
47 fisher
 
03.03.14
19:03
В самописках, если количество объектов доступа небольшое а используется много где (склады, подразделения и т.п.) и вычисляется не так уж тривиально (группы пользователей и т.п.), я обычно при старте сеанса пихал объекты доступа пользователя в параметры сеанса типа ФиксированныйМассив.
А во всех RLS простое условие на принадлежность массиву.
ИМХО, шустрее этого ничего нету.
48 UnsavedSoul
 
03.03.14
19:17
(46)
Большое спасибо.
(47)
Да, конечно, если все делать по-православному (согласно руководству разработчика), то именно такой инструментарий и следует использовать.
49 Лефмихалыч
 
03.03.14
21:27
(6) заставь себя наложить rls и на регистр тоже. Или кого-нибудь еще заставь
50 Лефмихалыч
 
03.03.14
21:29
(48) а если всё делать через жопу и с закрытыми глазами, то получается <объект не найден>. Это штука неприятная, "последствия" называется
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn