Имя: Пароль:
1C
 
RLS. Не проходит условие
0 Zixxx
 
22.03.17
20:43
Если в регистре нет пользователя тогда должна выводиться вся номенклатура. Но условие не отрабатывает. Такое впечатление что когда я указываю 1 в (ВЫБРАТЬ всегда возвращается какое-то неопределенно, даже если сделать так "1 В (ВЫБРАТЬ 1)". Подскажите на примере как правильно сделать условие?

Номенклатура ИЗ Справочник.Номенклатура КАК Номенклатура
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.RLS КАК RLS
    ПО Номенклатура.Подразделение = RLS.Подразделение
ГДЕ (RLS.Пользователь = &ТекущийПользователь
            ИЛИ НЕ 1 В
                    (ВЫБРАТЬ
                        1 КАК ПолеОтбора
                    ИЗ
                        РегистрСведений.RLS КАК RLS
                    ГДЕ
                        RLS.Пользователь = &ТекущийПользователь))
1 ВРедная
 
22.03.17
20:51
Отлаживай запрос в консоли. Из-за Где у тебя уже внутреннее соединение.
2 Zixxx
 
22.03.17
20:55
(1) Если заменить на ИЛИ 1=1 тогда все выводит. Если было бы внутреннее тогда было бы пусто и в этом случае
3 ВРедная
 
22.03.17
20:58
(2) если бы у бабушки были яйца, она была бы дедушкой.
Вот это

ВЫБРАТЬ
                        1 КАК ПолеОтбора
                    ИЗ
                        РегистрСведений.RLS КАК RLS
                    ГДЕ
                        RLS.Пользователь = &ТекущийПользователь)

В консоли что выдаёт?
4 Zixxx
 
22.03.17
21:03
Я отлаживаю в консоли, этот запрос ничего не выдает потому что ничего нет.

В кончали вот так выдает ДА

ВЫБРАТЬ ВЫБОР КОГДА НЕ 1 В
                    (ВЫБРАТЬ
                        1 КАК ПолеОтбора
                    ИЗ
                        РегистрСведений.RLS КАК RLS
                    ГДЕ
                        RLS.Пользователь = &ТекущийПользователь) ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ КОНЕЦ
5 Zixxx
 
22.03.17
21:16
Одно условие работает

ГДЕ
    1 В (ВЫБРАТЬ 1)

А если два то нет

ГДЕ
    1 В (ВЫБРАТЬ 1)
    ИЛИ RLS.Пользователь = &ТекущийПользователь
6 Zixxx
 
22.03.17
21:18
Можно сделать через объединить все, но как-то не красиво получается
7 RomanYS
 
22.03.17
21:23
(5)
   ИЛИ ЕстьNULL(RLS.Пользователь, &ТекущийПользователь) = &ТекущийПользователь
8 Zixxx
 
22.03.17
21:35
(7) С таким условием всегда выводит все записи
9 RomanYS
 
22.03.17
21:58
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.RLS КАК RLS
ПО Номенклатура.Подразделение = RLS.Подразделение
  И RLS.Пользователь = &ТекущийПользователь
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.RLS КАК RLS_БезПодразделений
ПО RLS_БезПодразделений.Пользователь = &ТекущийПользователь
где
  НЕ RLS.Пользователь Есть NULL
   или RLS_БезПодразделений.Пользователь Есть NULL