Имя: Пароль:
1C
 
Запрос. Странно работает "Выбор когда". Или лыжи не едут.
0 Галахад
 
гуру
22.09.21
08:02
Простой запрос:
ВЫБРАТЬ
    Док.Ссылка КАК Ссылка
ИЗ
    Документ.Док КАК Док
ГДЕ
    ВЫБОР
            КОГДА &ТекущийПользователь = Док.ААА
                ТОГДА ИСТИНА
            КОГДА &ТекущийПользователь В (Док.ТЧ_ААА.ААА)
                ТОГДА ИСТИНА
            ИНАЧЕ ЛОЖЬ
        КОНЕЦ
1 Галахад
 
гуру
22.09.21
08:03
Возвращает 1 запись

Запрос:    
Простой запрос:
ВЫБРАТЬ
    Док.Ссылка КАК Ссылка
ИЗ
    Документ.Док КАК Док
ГДЕ
    ВЫБОР
            КОГДА &ТекущийПользователь В (Док.ТЧ_ААА.ААА)
                ТОГДА ИСТИНА
            ИНАЧЕ ЛОЖЬ
        КОНЕЦ

возвращает множество записей.

С чего это?
2 Галахад
 
гуру
22.09.21
08:04
Не, (1) не читать.

ВЫБРАТЬ
    Док.Ссылка КАК Ссылка
ИЗ
    Документ.Док КАК Док
ГДЕ
    ВЫБОР
            КОГДА &ТекущийПользователь = Док.ААА
                ТОГДА ИСТИНА
            ИНАЧЕ ЛОЖЬ
        КОНЕЦ

возвращает множество записей.
3 Галахад
 
гуру
22.09.21
08:09
ВЫБРАТЬ
    Док.Ссылка КАК Ссылка
ИЗ
    Документ.Док КАК Док
ГДЕ
    &ТекущийПользователь = Док.ААА ИЛИ &ТекущийПользователь В (Док.ТЧ_ААА.ААА)

Такой тоже возвращает множество записей.
4 Мультук
 
гуру
22.09.21
08:10
(0)

1C неправильно раскручивает условие &ТекущийПользователь В (Док.ТЧ_ААА.ААА)
Не делай так (с)

P.S.

Раньше (когда трава была зеленая) даже за мысли о подобном

&ТекущийПользователь В (Док.ТЧ_ААА.ААА)

гуру били ногами в живот.

Но сейчас все по другому, жаль только (как видно из примера) 1С об этом не в курсе

P.P.S.
Если можешь, глянь какие SQL-запросы рожает 1С в обоих случаях, это любопытно, но не более того
5 Ненавижу 1С
 
гуру
22.09.21
08:10
(0) пихать неявно табличную часть это моветон
6 acanta
 
22.09.21
08:13
Возможно, в файловой или постгресе оно будет работать по другому?
7 PuhUfa
 
22.09.21
08:21
(0)
    Запрос = НОвый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ЗаказНаряд.Ссылка
        |ИЗ
        |    Документ.ЗаказНаряд КАК ЗаказНаряд
        |ГДЕ
        |    ВЫБОР
        |            КОГДА &Реквизит1 = ЗаказНаряд.Менеджер
        |                ТОГДА ИСТИНА
        |            КОГДА &Реквизит1 В (ЗаказНаряд.Исполнители.Исполнитель)
        |                ТОГДА ИСТИНА
        |            ИНАЧЕ ЛОЖЬ
        |        КОНЕЦ";
    Запрос.УстановитьПараметр("Реквизит1",Реквизит1);
    Результат = Запрос.Выполнить().Выгрузить();

В файловой на 8.3.17.1851 работает нормально
8 Галахад
 
гуру
22.09.21
08:34
Ну, млин. Не прокатило по простому... :-(
9 Галахад
 
гуру
22.09.21
09:09
(4) Да, весело получилось...

ВЫБРАТЬ
    T1.Ссылка КАК Ссылка
ИЗ
    Документ.Док КАК T1
ГДЕ
    ИСТИНА В
            (ВЫБРАТЬ
                1
            ИЗ
                Документ.Док.ААА КАК T2
            ГДЕ
                T1.Ссылка = T2.Ссылка
                И ВЫБОР
                    КОГДА T1.ААА = &P1
                        ТОГДА ИСТИНА
                    КОГДА T2.ААА = &P2
                        ТОГДА ИСТИНА
                    ИНАЧЕ ЛОЖЬ
                КОНЕЦ = ИСТИНА)
10 Мультук
 
гуру
22.09.21
09:14
(9)

ВЫБРАТЬ
   РАЗЛИЧНЫЕ т1.ссылка КАК Ссылка
ИЗ
  Документ.Док.ААА как т1
ГДЕ
   т1.Реквизит = &Реквизит1  
   ИЛИ т1.Ссылка.Реквизит = &Реквизит1  


Индексируем поля (по вкусу)
Документ.Док.ААА.Реквизит
Документ.Док.Реквизит
11 Галахад
 
гуру
22.09.21
09:19
(10) Это зачем? В (9) я показал что делает SQL.
12 Галахад
 
гуру
22.09.21
09:21
Кстати с РЛС что-то попроще этого написать?

Док ИЗ Документ.Док КАК Док
    ЛЕВОЕ СОЕДИНЕНИЕ Документ.Док.ААА КАК ДокААА
    ПО Док.Ссылка = ДокААА.Ссылка
        И (ДокААА.ААА = &ТекущийПользователь)
ГДЕ (ВЫБОР
                КОГДА Док.ААА = &ТекущийПользователь
                    ТОГДА ИСТИНА
                ИНАЧЕ ЛОЖЬ
            КОНЕЦ
            ИЛИ НЕ ДокААА.Ссылка ЕСТЬ NULL)
13 acanta
 
22.09.21
09:27
Вы хотите рлс на табличную часть?
14 Галахад
 
гуру
22.09.21
09:29
(13) Если пользователь есть в ТЧ ААА, то ему можно работать с документом.
15 youalex
 
22.09.21
09:41
(0) Не лучше будет РС создать с разрезом Док/Пользователь, обновлять при записи Док (в подписке)  и в RLS его джойнить.
16 Галахад
 
гуру
22.09.21
09:54
(15) Лень двигатель прогресса. Уже сделал как в (12), и лень что-то усложнять. :-)
17 Малыш Джон
 
22.09.21
12:27
(12) ВЫБОР
                КОГДА Док.ААА = &ТекущийПользователь
                    ТОГДА ИСТИНА
                ИНАЧЕ ЛОЖЬ
            КОНЕЦ

собственно это то же самое что и

Док.ААА = &ТекущийПользователь
18 Галахад
 
гуру
22.09.21
12:32
(17) Ага, спасибо. Но это же пример запроса, а не оригинал. В оригинале еще пара веток есть.