Имя: Пароль:
1C
1C 7.7
v7: 1SQLITE: Подскажите по запросу?
0 Zhuravlik
 
22.03.13
09:53
Доброе утро)Необходимо выбрать элементы справочника из табличных частей документов одного вида, с фильтром по дате документа и флагу проведения.
Вот такой запрос:

   ТекстЗапроса = "
   |SELECT
   |    ТЧ_заявка.Маршрут as [Маршрут $Справочник._ТТН_База_Маршруты]
   |FROM
   |    [ДокументСтроки._ТТН_Заявка] as [ТЧ_заявка]
   |
   |Left Join [_1S.Journ] as [Журнал] on (ТЧ_Заявка.IDDOC = Журнал.IDDOC) AND (Журнал.DATE Between :НачДата AND :КонДата) AND (Журнал.CLOSED <> '0')
   |
   |WHERE
   |    ТЧ_Заявка.IDDOC = Журнал.IDDOC
   |";


Все работает, но мне кажется что я чего-то недопонимаю. Не могли бы вы прокомментировать?
Меня вот это смущает:
- В лефт-джойне - чтобы ограничить выборку журнала видом документа пишу: "ТЧ_Заявка.IDDOC = Журнал.IDDOC"
- И в условии WHERE, чтобы указать что мне нужны только те таб. части, которые попадают в фильтр джойна тоже пишу: "ТЧ_Заявка.IDDOC = Журнал.IDDOC"
Может как-то по другому надо, лучше?
1 Man4kin
 
22.03.13
09:56
(0) почему не inner join ?
условие
   |WHERE
   |    ТЧ_Заявка.IDDOC = Журнал.IDDOC
мне кажется лишнее.
2 Ёпрст
 
22.03.13
09:59
(0)
1.where не нужно, заменить лефт джоин на иннер, воткнуть условие на виддокумента для попадания в индекс, (Журнал.CLOSED <> '0') - это не верно, клосет- это нумерик, а не чар
3 Zhuravlik
 
22.03.13
10:05
"Inner join необходим для получения только тех строк, для которых существует соответствие записей главной таблицы и присоединяемой."
-
(1)(2)Получается в FROM должен быть журнал, а иннером я присоединяю строки?
-
(2)А как получить этот вид? Я пробовал через MetaDataWork, но возвращает его порядковый номер в базе, а руками писать строчку вида не хотелось бы. Можно конечно спозиционироваться на первом документе, и получить вид оттуда (получить строку 13 симв, и вырезать), но мне кажется что все гораздо проще?
-
(2) Журнал.CLOSED  - а работает одинаково, что '0', что 0?
4 Zhuravlik
 
22.03.13
13:26
Так?

   ТекстЗапроса = "
   |SELECT
   |    ТЧ_заявка.Маршрут as [Маршрут $Справочник._ТТН_База_Маршруты]
   |FROM
   |    [ДокументСтроки._ТТН_Заявка] as [ТЧ_заявка]
   |
   |inner Join [_1S.Journ] as [Журнал] on (ТЧ_Заявка.IDDOC = Журнал.IDDOC) AND (Журнал.DATE Between :НачДата AND :КонДата) AND (Журнал.CLOSED <> 0)
   |";
5 Zhuravlik
 
22.03.13
13:26
+ Или Журнал в FROM?
6 viktor_vv
 
22.03.13
13:29
Журнал.CLOSED <> 0 у непроведенных может быть и не ноль, там от компонент зависит, в которые включен док.
7 Ёпрст
 
22.03.13
13:30
(6) неа
8 Ёпрст
 
22.03.13
13:30
от компонент зависит, но 0 - только у непроведенных.
9 Ёпрст
 
22.03.13
13:32
|SELECT
   |    ??_??????.???????  [??????? :??????????._???_????_????????]
   |FROM
   |    [??????????????._???_??????] as ??_??????
   |
   |inner Join [??????] ??? on ???.iddocdef = :????????????._???_?????? and ??_??????.IDDOC = ???.IDDOC AND ??????.DATE Between :??????? AND :??????? AND ??????.CLOSED <> 0
10 Ёпрст
 
22.03.13
13:32
|SELECT
   |    ТЧ_заявка.Маршрут  [Маршрут :Справочник._ТТН_База_Маршруты]
   |FROM
   |    [ДокументСтроки._ТТН_Заявка] as ТЧ_заявка
   |
   |inner Join [Журнал] Жур on Жур.iddocdef = :ВидДокумента._ТТН_Заявка and ТЧ_Заявка.IDDOC = Жур.IDDOC AND Журнал.DATE Between :НачДата AND :КонДата AND Журнал.CLOSED <> 0
11 Ёпрст
 
22.03.13
13:33
синтаксис там сам поправишь
12 Zhuravlik
 
22.03.13
13:34
(10) Спасибо) :ВидДокумента._ТТН_Заявка - не знал такого.
А если надо шапку дока подключить, это лефт-джойном с условием по ид журнала?
13 Zhuravlik
 
22.03.13
13:35
+ И алиасы, их же обязательно надо в квадратные скобки закрывать, или нет?
14 Ёпрст
 
22.03.13
13:35
ну да, с условием на iddoc
15 Ёпрст
 
22.03.13
13:35
(13) нет
16 viktor_vv
 
22.03.13
13:35
(8) Какая-то была у меня фигня с этим closed, сейчас не вспомню.
Или я таки не допер до "<>" , а через "=" все время пытался :).
17 Zhuravlik
 
22.03.13
13:36
(15) А в чем разница при типизации доллара от двоеточия?
18 Ёпрст
 
22.03.13
13:38
(17) не надо переключать расскладку клавиатуры (но это только в 1sqlite)
19 Zhuravlik
 
22.03.13
13:39
(18) Понял) Спасибо)
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший