Имя: Пароль:
1C
1С v8
Запрос на пятницу.
0 AlexxJ
 
28.11.14
11:11
Столкнулся со странным поведением запроса
ВЫБРАТЬ
    Закупки.Регистратор КАК Регистратор,
    КурсыВалют.Курс
ИЗ
    РегистрНакопления.Закупки КАК Закупки
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК КурсыВалют
        ПО НачалоПериода(Закупки.Период,день) = КурсыВалют.Период
ГДЕ
    КурсыВалют.Валюта = &Валюта

на выходе получаем ничего. Регистр Курс имеет запись только на 1980 год. Если убрать условие по валюте, то все нормально. Выводит все записи, курс NULL. Че за фигня?
1 Ёпрст
 
28.11.14
11:12
ПО НачалоПериода(Закупки.Период,день) =  НачалоПериода(КурсыВалют.Период,День)
2 18_plus
 
28.11.14
11:13
всё правильно работает
3 vicof
 
28.11.14
11:13
Тема всплывает с завидной регулярностью
4 Cube
 
28.11.14
11:13
(0) Условие засунь в соединения
5 John83
 
28.11.14
11:13
(1) у курса валюты и так дата на начало дня
6 Cube
 
28.11.14
11:13
(3) +100
7 AlexxJ
 
28.11.14
11:14
(1) пофиг пусто
8 John83
 
28.11.14
11:14
(0) может ТиИ?
9 User_Agronom
 
28.11.14
11:14
(0)...Если убрать условие по валюте, то все нормально...
Тут собака порылась?
10 AlexxJ
 
28.11.14
11:14
(6) в чем секрет тогда?
(8) на 2х базах пробовал, сервер и файловая
11 18_plus
 
28.11.14
11:15
(0) а на валюту регистратора накласть?
12 AlexxJ
 
28.11.14
11:15
(9) хз, по идее должен вывести записи из рег.Закупки с курсом NULL
13 18_plus
 
28.11.14
11:15
(10) секрет в кривом запросе
14 18_plus
 
28.11.14
11:15
(12) неверно
15 Ёпрст
 
28.11.14
11:15
тогда Где замени на И
16 AlexxJ
 
28.11.14
11:15
(11) да пофиг, важен сам прецендент
17 ДенисЧ
 
28.11.14
11:16
"Регистр Курс имеет запись только на 1980 год"
А регистраторы какого года?
18 AlexxJ
 
28.11.14
11:16
(14) поясни
19 18_plus
 
28.11.14
11:17
(16)
а) выведи результат запроса без условия
б) глазами отбери записи, которые соответствуют твоему условию
20 AlexxJ
 
28.11.14
11:18
(15) хм. А почему? условие должно применяться только к таблице Курсы и если там ничего то поле должно быть NULL
21 AlexxJ
 
28.11.14
11:19
(19) все соответствуют. Соединение левое, все записи из регистра запасы должны попасть в выборку полюбому. Или нет????
22 AlexxJ
 
28.11.14
11:20
(21) *регистр закупки
23 AlexxJ
 
28.11.14
11:20
(17) размазаны с 2008 по 2014
24 Любопытная
 
28.11.14
11:22
(20) Кому должно?
25 AlexxJ
 
28.11.14
11:23
(24) мне, в основном ))
26 vicof
 
28.11.14
11:23
(0) Автор, ты не только про порядок выполнения операторов в запросе не слышал, так и про параметры виртуальных таблиц?
27 Любопытная
 
28.11.14
11:24
(20) Сначала выбирается общая таблица по соединениям, потом срабатывает условие. И если в результирующей таблице нет записей, соответствующих условию, то пусто у тебя в результате запроса
28 AlexxJ
 
28.11.14
11:24
(26) много пафоса, мало сути
29 Любопытная
 
28.11.14
11:24
+ (27) Порядок закладок в конструкторе запросов имеет некоторый смысл :)
30 18_plus
 
28.11.14
11:25
(28) суть: матчасть учи
31 AlexxJ
 
28.11.14
11:26
ладно в общем и целом понятно, всем спасибо
32 Hmster
 
28.11.14
11:27
(0) КурсыВалют.Валюта = &Валюта
указано не в соединении.
Полсе соединения КурсыВалют.Валюта имеет значение NULL любые операции с которым есть ЛОЖЬ.

ПОнял?
33 Ёпрст
 
28.11.14
11:27
(20) Потому, что условие нужно накладывать в месте присоединения таблиц, а не на результат соединения. В этом случае, ты получаешь неявный иннер джоин.
34 AlexxJ
 
28.11.14
11:29
(32) угу, спс
(33) соединения - зло ))
35 AlexxJ
 
28.11.14
11:49
(29) блин, вот про порядок никогда не думал. вро де в фоксе и аксесе немного по другому запросы работают
36 hhhh
 
28.11.14
12:22
(35) в общем NULL не равно &Валюта, в этом все беды.
37 Ёпрст
 
28.11.14
12:31
(35)Неправда, там всё тоже самое.