Имя: Пароль:
1C
1С v8
RLS
0 qwasqu
 
16.03.15
14:36
Здравствуйте, подскажите как ограничить доступ к записям справочника, имеющим определенный реквизит?

Я делаю так:
у справочника запись должна быть видна, если реквизит "Состояние" есть в регистре сведений по текущему пользователю.

ТекущаяТаблица из #ТекущаяТаблица как ТекущаяТаблица ГДЕ ТекущаяТаблица.Состояние В
            (ВЫБРАТЬ РАЗЛИЧНЫЕ
                НастройкиСостояний.Значение КАК Состояние
            ИЗ
                РегистрСведений.НастройкиСостоянийКАК НастройкиСостояний
            ГДЕ
                НастройкиСостояний.Пользователь = &ТекущийПользователь
                И НастройкиСостояний.Настройка = ЗНАЧЕНИЕ(планвидовхарактеристик.НастройкиСостояний.Состояние))

Вообще все записи недоступны. Если вместо операции "В" использовать левое соединение, то эффект то же.

Спасибо.
1 D_E_S_131
 
16.03.15
14:38
Не мог бы описать структуру твоего РС "НастройкиСостояний"?

P.S. Прочитал никнейм ТС и пить захотелось...
2 vde69
 
16.03.15
14:42
обычно подобные траблы бывают если типы разные
3 qwasqu
 
16.03.15
14:47
(1) Структура:
НастройкиСостояний.Настройка - план видов характеристик

НастройкиСостояний.Пользователь - пользователи

НастройкиСостояний.Значение - справочник.состояния и не только.

(2) ограничил тип НастройкиСостояний.Значение ссылка справочник.состояния, не помогло
4 Лефмихалыч
 
16.03.15
14:50
а запрос  этот вложенный у этого текущего пользвоателя возвращает хоть что-нибудь-то?
5 qwasqu
 
16.03.15
14:50
(4) Да, возвращает, то, что нужно.
6 Лефмихалыч
 
16.03.15
14:51
ну и запрос с вот такой строчкой "РегистрСведений.НастройкиСостоянийКАК НастройкиСостояний"
вообще выполниться не сможет, так что сказочник ты, автор, как тот Римус...
7 qwasqu
 
16.03.15
14:52
(6)
Да это при перекопировывании так получилось.
На самом деле так:
"РегистрСведений.НастройкиСостояний КАК НастройкиСостояний"
8 Лефмихалыч
 
16.03.15
14:54
значит типы не совпадают или кэш прокис
9 qwasqu
 
16.03.15
14:59
(8)
Кэш почистил, а типы совпадают, т.к. в консоли проверял, выдает данные.
10 Лефмихалыч
 
16.03.15
15:01
(9) ну, значит чудо происходит. Приложи к серверу больное что-нибудь, глядишь выздоровеет.
11 genosse
 
16.03.15
15:08
Попробуй заменить "ЗНАЧЕНИЕ(планвидовхарактеристик.НастройкиСостояний.Состояние)" на "&ПараметрСеансаСостояние" - заполни при начале работы
12 qwasqu
 
16.03.15
15:27
(11)
Я сделал даже еще круче:

ТекущаяТаблица ГДЕ ТекущаяТаблица.Состояние = &ТекущееСостояние

где текущее состояние нахожу по коду.

Все равно не доступны все записи.
13 vde69
 
16.03.15
15:27
ТекущаяТаблица из #ТекущаяТаблица как ТекущаяТаблица ГДЕ ТекущаяТаблица.Состояние В

            (ВЫБРАТЬ РАЗЛИЧНЫЕ
                ЕстьNULL(НастройкиСостояний.Значение,0) КАК Состояние
            ИЗ
                РегистрСведений.НастройкиСостоянийКАК НастройкиСостояний
            ГДЕ
                НастройкиСостояний.Пользователь = &ТекущийПользователь
                И НастройкиСостояний.Настройка = ЗНАЧЕНИЕ(планвидовхарактеристик.НастройкиСостояний.Состояние))
14 qwasqu
 
16.03.15
15:36
(13)
null запрос не возвращает, но я попробовал.
Хотя после проверки того, что
ТекущаяТаблица ГДЕ ТекущаяТаблица.Состояние = &ТекущееСостояние
не работает, это было бессмыленно.

Что то не пруха какая то.
15 vde69
 
16.03.15
15:41
можно писать так

ГДЕ Состояние = &ТекущееСостояние
16 vde69
 
16.03.15
15:44
попробуй так (разумеется код не для работы, просто проверить)

ГДЕ Состояние = &ТекущееСостояние или Состояние.Ссылка есть null
17 qwasqu
 
16.03.15
15:51
(16)
vde69, Вы Бог 1С!
Заработало, только смысла честно говоря не уловил.
18 vde69
 
16.03.15
15:58
(17) ТекущаяТаблица.Состояние - какой тип ???

проблемма именно в этом!

там или составной неопределенный тип или null или тип строка
19 qwasqu
 
16.03.15
16:11
(18)

100% не составной тип справочник.состояния

Единственное, там есть группы.
20 vde69
 
16.03.15
16:17
все я понял......

делай так


ТекущаяТаблица из #ТекущаяТаблица как ТекущаяТаблица ГДЕ
ТекущаяТаблица.ЭтоГруппа = Истина
ИЛИ ТекущаяТаблица.Состояние В

            (ВЫБРАТЬ РАЗЛИЧНЫЕ
                НастройкиСостояний.Значение КАК Состояние
            ИЗ
                РегистрСведений.НастройкиСостоянийКАК НастройкиСостояний
            ГДЕ
                НастройкиСостояний.Пользователь = &ТекущийПользователь
                И НастройкиСостояний.Настройка = ЗНАЧЕНИЕ(планвидовхарактеристик.НастройкиСостояний.Состояние))
21 qwasqu
 
16.03.15
16:28
(20) Спасибо большое, теперь я понял смысл сего.
22 vde69
 
16.03.15
16:37
все просто:

ты создал реквизит "Состояние" и пометил "ТолькоДляЭлементов", для групп он равен null, у тебя список иеархический, он группы не видит и глубже не лезет...

если-бы ты снял просмотрт по иерархии - то сразу увидел-бы свой результат...
23 bolobol
 
16.03.15
17:18
(22) Вот, спасибо! Заодно, так сказать))