Имя: Пароль:
1C
1С v8
Запрос. ВЫБОР КОГДА
,
0 first_may
 
09.06.17
09:55
Добрый день.

Подскажите пож, можно ли использовать конструкцию в запросе

ВЫБРАТЬ
   ...
   ВЫБОР
      КОГДА условие1
         ТОГДА значение1
      КОГДА условие2
         ТОГДА значение2
      КОГДА (ВЫБРАТЬ
               ..
            ИЗ ..) = ИСТИНА
         ТОГДА значение3
   ИНАЧЕ значение4
   ..
ИЗ
   ..

то есть в одном из полей использовать запрос?
1 Лефмихалыч
 
09.06.17
09:56
нет. ВЫБОР применяется к каждой строке выборки
2 elCust
 
09.06.17
09:58
(1) Че за ерунда, можно канечно.

Обычная конструкция SELECT CASE
3 first_may
 
09.06.17
10:01
Пробую написать в конструкторе в поле

ВЫБОР
    КОГДА
        ТОГДА
    КОГДА
        ТОГДА
    КОГДА
        ТОГДА
    КОГДА
        ТОГДА
    КОГДА ЕСТЬNULL(выбрать 1 из истина, ЛОЖЬ) = ИСТИНА
        ТОГДА МАКСИМУМ(ВложенныйЗапросНДФЛ.Сумма)
    ИНАЧЕ 0
КОНЕЦ

ругается на то, что синтаксическая ошибка и "ожидается выражение выбрать"..
4 Лефмихалыч
 
09.06.17
10:02
(2) почитай топик внимательно.

(3) в КОГДА так нельзя
5 elCust
 
09.06.17
10:03
(3) Может я неправильно понял тебя))

Вот как ты написал в примере правильно сказано в (1).
6 first_may
 
09.06.17
10:05
То есть селект в поле нельзя?
7 dezss
 
09.06.17
10:14
(6) конечно нельзя, делай соединение и тогда уж проверяй в своем "когда".
8 Неверный Параметр И
 
09.06.17
10:14
(3) > выбрать 1 из истина

Эта чо?
9 НЕА123
 
09.06.17
10:17
(8)
это толпа единичек. колво= колво записей ВТ истина.
я так думаю (с)
10 apokrit
 
09.06.17
10:18
(0) Нельзя
(6) Ни где нельзя, не только в поле.
Можно только IN (SELECT)
11 elCust
 
09.06.17
10:25
(6) Давай обратимся к матчасти:

В качестве описания поля выборки может быть выражение, использующее следующие элементы:

Литералы типов: число, строка (в кавычках), булево (значения Истина и Ложь), Null, Неопределено. [Замечание: Чтобы указать литерал типа "дата", можно воспользоваться ключевым словом языка запросов ДАТАВРЕМЯ или передать дату через параметр запроса].
Параметры запроса (со знаком &)
Имя поля
Имя табличной части
Разыменование ссылочного поля (через одну или несколько точек)
Арифметические операции (+, -, /, *) [Замечание: операция получения остатка % в языке запросов не поддерживается]
Операция конкатенации строк (+) [Замечание: операцию конкатенации нельзя использовать для виртуальных полей]
Встроенные функции языка запросов (ДЕНЬ, МЕСЯЦ, ГОД и т.д.)
Агрегатные функции (СУММА, МИНИМУМ, МАКСИМУМ, СРЕДНЕЕ, КОЛИЧЕСТВО)
Операция выбора ВЫБОР / CASE - позволяет получить одно из возможных значений в соответствии с указанными условиями.
Операция приведения типов ВЫРАЗИТЬ / CAST
12 first_may
 
09.06.17
10:29
(10) "Можно только IN (SELECT)" - то есть, что то вроде этого

ВЫБОР
    КОГДА
        ТОГДА 1
    КОГДА
        ТОГДА 2
    КОГДА
        ТОГДА 3
    КОГДА
        ТОГДА 4
    КОГДА ИСТИНА В (ВЫБРАТЬ .. ИЗ ..)
        ТОГДА 5
    ИНАЧЕ 0
КОНЕЦ

??
13 elCust
 
09.06.17
10:33
>> КОГДА ИСТИНА В (ВЫБРАТЬ .. ИЗ ..)

Низя так
14 Неверный Параметр И
 
09.06.17
10:41
(13) Можно
15 Неверный Параметр И
 
09.06.17
10:42
КОГДА ИСТИНА В (ВЫБРАТЬ ИСТИНА ИЗ РегистрСведений.РегистрСведений1) ТОГДА "Пыщь"
16 first_may
 
09.06.17
10:42
(14) например?
17 first_may
 
09.06.17
10:44
да, получилось.. вот

ВЫБОР
    КОГДА ВложенныйЗапросНачисления.ВидРасчета = ЗНАЧЕНИЕ(ПланВидовРасчета.ОсновныеНачисленияОрганизаций.ОкладПоДням)
        ТОГДА МАКСИМУМ(ВложенныйЗапросНДФЛ.Сумма)
    КОГДА ВложенныйЗапросНачисления.ВидРасчета = ЗНАЧЕНИЕ(ПланВидовРасчета.ДополнительныеНачисленияОрганизаций.ДоговорПодряда)
        ТОГДА МАКСИМУМ(ВложенныйЗапросНДФЛ.Сумма)
    КОГДА ВложенныйЗапросНачисления.ВидРасчета = &ОкладПоДнямАкционеры
        ТОГДА МАКСИМУМ(ВложенныйЗапросНДФЛ.Сумма)
    КОГДА ВложенныйЗапросНачисления.ВидРасчета = ЗНАЧЕНИЕ(ПланВидовРасчета.ОсновныеНачисленияОрганизаций.ОкладПоЧасам)
        ТОГДА МАКСИМУМ(ВложенныйЗапросНДФЛ.Сумма)
    КОГДА ИСТИНА В
            (ВЫБРАТЬ
                ИСТИНА
            ИЗ
                РегистрСведений.ВерсииПодсистем)
        ТОГДА МАКСИМУМ(ВложенныйЗапросНДФЛ.Сумма)
    ИНАЧЕ 0
КОНЕЦ
18 Неверный Параметр И
 
09.06.17
10:46
(17) Тебе точно нужна логика "когда в регистре версий подситем есть записи, тогда максимум сумм"
(:
19 first_may
 
09.06.17
10:48
спасибо всем, дальше буду думать сам..
20 first_may
 
09.06.17
10:53
(18) будет конечно не РегистрСведений.ВерсииПодсистем, заменю на то, что мне надо.

Главное логика мне понятна. Спасибо.
21 youalex
 
09.06.17
10:54
Интересно. Всегда думал что можно. Попробовал - и правда можно:

ВЫБРАТЬ ВЫБОР КОГДА 1 = 0 ТОГДА 0
КОГДА 1 В (ВЫБРАТЬ 1) ТОГДА 99
КОГДА 0 = 0 ТОГДА 1 КОНЕЦ

работает.
22 first_may
 
09.06.17
10:58
(21) я то же где то раньше видел, а как правильно писать не отложилось в голове :).
23 h-sp
 
09.06.17
11:05
(22) непонятно что с чем сравниваешь

      КОГДА (ВЫБРАТЬ
               ..
            ИЗ ..) = ИСТИНА


выборка же не может равняться истине. Она же не логическое выражение, а выборка.
24 first_may
 
09.06.17
11:08
(23) условие такое надо

КОГДА ИСТИНА В
            (ВЫБРАТЬ
                ИСТИНА
            ИЗ
25 youalex
 
09.06.17
11:18
(24) Да. вложенный должен возвращать один ряд значения (одну колонку), тогда можно использовать условие IN()
26 youalex
 
09.06.17
11:21
upd. Удобно кстати, когда нужно использовать EXISTS (которого в 1С нет), тогда просто 1 В (ВЫБРАТЬ ПЕРВЫЕ 1 1 ИЗ Таблица)
27 first_may
 
09.06.17
11:22
(26) Да, да. Согласен :).