Имя: Пароль:
1C
1С v8
как написать такой запрос?
0 dreamoff
 
25.06.13
12:23
необходимо объединить 2 таблицы через левое соединение.как добавить определенное значение,если в одной таблице нет значения.надеюсь понятно объяснил)
вот такой запросик
ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
   СправочникКартыПДС.Ссылка,
   СправочникКартыПДС.Код,
   СправочникКартыПДС.Наименование,
   ВЫБОР
       КОГДА ВыданныеКарты.КартаПДС.ЭтоГруппа = ЛОЖЬ
           ТОГДА ВЫБОР
                   КОГДА ВыданныеКарты.Количество = 1
                       ТОГДА "Активна"
                   ИНАЧЕ "Неактивна"
               КОНЕЦ
       ИНАЧЕ ""
   КОНЕЦ КАК Статус
ИЗ
   Справочник.КартыПДС КАК СправочникКартыПДС
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ВыданныеКарты КАК ВыданныеКарты
       ПО СправочникКартыПДС.Ссылка = ВыданныеКарты.КартаПДС

если в регистре нет значение,а справочнике есть,то нужно ставить статус "неактивен".подскажите,как это сделать?
1 mikecool
 
25.06.13
12:24
ЕстьNULL(Значение из регистра, Неактивен)
2 salvator
 
25.06.13
12:25
А чем текущий запрос не устраивает?
3 lamesnake
 
25.06.13
12:26
ВЫБОР
      КОГДА ВыданныеКарты.КартаПДС ЕстьNULL
           Тогда Неактивна"
      Иначе
       КОГДА ВыданныеКарты.КартаПДС.ЭтоГруппа = ЛОЖЬ
           ТОГДА ВЫБОР
                   КОГДА ВыданныеКарты.Количество = 1
                       ТОГДА "Активна"
                   ИНАЧЕ "Неактивна"
               КОНЕЦ
       ИНАЧЕ ""
   КОНЕЦ КАК Статус
4 fisher
 
25.06.13
12:26
Или так:

ВЫБОР
    КОГДА ВыданныеКарты.КартаПДС ЕСТЬ NULL
    ТОГДА ЛОЖЬ
    ИНАЧЕ ИСТИНА
КОНЕЦ КАК Активность
5 fisher
 
25.06.13
12:32
Вообще, плохо прямо в выборке формировать строковые представления. Как минимум потому, что это увеличивает размер выборки. Лучше это делать в выражениях представлений полей, а сами значения полей по возможности сводить к примитивным типам.
6 dreamoff
 
25.06.13
12:35
(2)а он не ставит неактивный,если нет значения в регистре
7 dreamoff
 
25.06.13
12:36
(5) а можно подробней и с примером,если несложно)
8 GANR
 
25.06.13
12:36
(0) Принцип один: надо исходить из предположения, что если в присоединенной справа таблице нет записей, соответствующих условию соединения, то функция is null вернет ИСТИНА

ВЫБОР
 КОГДА ПраваяТаблица.ТвоеПоле is null ТОГДА
   ""нет строки по условию соединения в таблице справа""
 ИНАЧЕ
   ""есть строка по условию соединения в таблице справа""
КОНЕЦ

Если нужно в случае присутствия записи вернуть значение некого поля, а в случае отсутствия - некое предопределенное значение, параметр или какое-то поле из левой таблицы - тогда проще всего будет воспользоваться ЕСТЬNULL(ПраваяТаблица.ТвоеПоле, ЧтоТоТам)

Примечание! ПраваяТаблица.ТвоеПоле = NULL - неверная конструкция.
9 kimba
 
25.06.13
12:38
КОГДА Не ВыданныеКарты.КартаПДС.ЭтоГруппа
 ТОГДА ВЫБОР
   КОГДА ВыданныеКарты.Количество > 0 ИЛИ ВыданныеКарты.КартаПДС ЕСТЬ NULL
     ТОГДА "Активна"
     ИНАЧЕ "Неактивна"
   КОНЕЦ
 ИНАЧЕ ""
КОНЕЦ КАК Статус
10 kimba
 
25.06.13
12:38
(9) Перепутал немного, ну ты понял...
11 fisher
 
25.06.13
12:39
(7) Пример в (4). А в выражении представления можно написать
ВЫБОР КОГДА Активность
     ТОГДА "Активна"
     ИНАЧЕ "Неактивна"
КОНЕЦ
12 fisher
 
25.06.13
12:44
Блин. Я почему-то подумал, что речь об СКД.
13 dreamoff
 
25.06.13
12:45
это для динамического списка
14 fisher
 
25.06.13
12:49
(13) Управляемая форма или обычная?
15 dreamoff
 
25.06.13
12:49
управляемая
16 fisher
 
25.06.13
12:55
(15) Тогда нужные представления можно через условное оформление формировать.
Но ключевой ответ по сабжу тебе уже несколько раз дали. Если значения в левом соединении нет, то оно NULL. А на NULL проверяют только специальными функциями.
2 + 2 = 3.9999999999999999999999999999999...