Имя: Пароль:
1C
 
левое соединение 1с 8.2 через условие, работает как внутреннее
0 DmitriyDI
 
21.08.15
12:56
Делаю нечто похожее на срез остатков на каждую дату, но соединяю левым соединением через условие вида:

ВЫБОР
    КОГДА Бонусы.УсловияРасчетов = ЗНАЧЕНИЕ(Перечисление.УсловияРасчетов.Первое)
        ТОГДА ВложенныйЗапрос.Период1 >= Бонусы.Период
    КОГДА Бонусы.УсловияРасчетов = ЗНАЧЕНИЕ(Перечисление.УсловияРасчетов.Второе)
        ТОГДА ВложенныйЗапрос.Период2 >= Бонусы.Период
    ИНАЧЕ ЛОЖЬ
КОНЕЦ

ВложенныйЗапрос.Период1 и ВложенныйЗапрос.Период2 могут быть пустой датой, и почемуто- это условие работает ни как левое соединение, а как внутреннее.
1 AlexTim03
 
21.08.15
12:57
Мега-баян
2 hhhh
 
21.08.15
12:58
что с чем соединяется здесь?
3 DmitriyDI
 
21.08.15
12:58
(1) давай, трави в чем проблема)? соединяю не через ГДЕ
4 Nuobu
 
21.08.15
12:59
(2) Бонусы со вложеннымЗапросом.
(0) Перенеси в ГДЕ.
5 DmitriyDI
 
21.08.15
12:59
ВложенныйЗапрос левым соединением с бонусами (2)
6 Матиус
 
21.08.15
12:59
в результат попадают записи если одно условий = истина
7 Матиус
 
21.08.15
13:00
сам запрос где?
8 Господин ПЖ
 
21.08.15
13:00
по ложь будет пусто
9 DmitriyDI
 
21.08.15
13:01
(4) а можете объяснить почему так?
я всегда думал, что наоборот условие в где делает левое соединение, внутренним.
(6) (8) так записи из ВложенныйЗапрос должны быть все, соединение то левое?
10 hhhh
 
21.08.15
13:02
может там ВложенныйЗапрос.Период равно NULL? тогда действительно ЛОЖЬ вернет
11 Nuobu
 
21.08.15
13:03
(9) Я прикалываюсь.
Если это у тебя поле, то тогда он и правда правильно поступает.
Переделай с помощью ЕстьNull(ВложенныйЗапрос.Период2, ДатаВремя(1,1,1)).
Должно помочь.
12 DmitriyDI
 
21.08.15
13:08
(11) во вложенном запросе я делаю проверку на естьнул, попробовал все равно прописать, не взлетело.
13 Nuobu
 
21.08.15
13:10
(12) Тогда, может, дело не  этом условии?
Удали из условия ВложенныйЗапрос, поставь вместо сравнения Истину и проверь.
14 DmitriyDI
 
21.08.15
13:13
(13) проверял, убираю условие, все как надо работает
15 hhhh
 
21.08.15
13:15
ну может действительно пустые даты ему подсовываете?
16 DmitriyDI
 
21.08.15
13:16
упростил условие: ЕСТЬNULL(ВложенныйЗапрос.Период1, ДАТАВРЕМЯ(1, 1, 1)) >= Бонусы.Период, работает как внутреннее опять, убираю, как левое
17 DmitriyDI
 
21.08.15
13:18
(15) даже если пустая дата в период1, то это же условие на соединение, почему часть документов не попадает...
18 hhhh
 
21.08.15
13:21
(17) а в ГДЕ что написано?
19 Nuobu
 
21.08.15
13:22
(16) Может, у тебя ВложенныйЗапрос это основная таблица? Может, галочка не с той стороны стоит?
20 hhhh
 
21.08.15
13:24
(19) так и есть, читай (5)
21 DmitriyDI
 
21.08.15
13:28
(18) ничего, может скд что подставляет, сейчас в консоли скд запущу проверю.
22 DmitriyDI
 
21.08.15
13:33
(21) скд это условие изменяет и оно оказывается в блоке ГДЕ!
23 DmitriyDI
 
21.08.15
13:38
всем спасибо, разобрался, соединение было в норме, просто в скд был отбор, по реквизиту, который я не проверил на нулл.
Независимо от того, куда вы едете — это в гору и против ветра!