|
Запрос. Странно работает "Выбор когда". Или лыжи не едут. | ☑ | ||
---|---|---|---|---|
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) Ага, спасибо. Но это же пример запроса, а не оригинал. В оригинале еще пара веток есть.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |