Имя: Пароль:
1C
1C 7.7
v7: Прямой запрос по журналу документов
,
0 dum80
 
18.02.16
10:59
Помогите с прямым запросом, очень редко их делаю:(
вот такая ошибка:
\EXTFORMS\ТЕСТ ВЫБОРА ДОК ИЗ ЖУРНАЛА ПРЯМЫМ ЗАПРОСОМ.ERT(24)}: State 42000, native 102, message [Microsoft][ODBC SQL Server Driver][SQL Server]Incorrect syntax near 'Жур'.

Пытаюсь выбрать из документов "ВозвратПоНаим" товары
таким запросом:
    Запрос = СоздатьОбъект("ODBCRecordset");
    Запрос.Отладка();
    ТекстЗапроса = "
    |SELECT
    |$ДокС.Товар as [Товар $Справочник.Номенклатура],
    |SUM($ДокС.Количество) as Количество
    |FROM
    |$ДокументСтроки.ВозвратПоНаим as ДокС
    |INNER JOIN
    |$Документ.ВозвратПоНаим as Док ON Док.IDDoc = ДокС.IDDoc AND
    |$Док.Клиент = :ВыбКлиент
    |INNER JOIN
    |_1SJourn as Жур ON Жур.IDDoc = ДокС.IDDoc
    |Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ AND
    |Жур.Closed & 1 = 1
    |GROUP BY
    |$ДокС.Товар";    
    
    Запрос.УстановитьТекстовыйПараметр("НачДата", НачДата);
    Запрос.УстановитьТекстовыйПараметр("КонДата", КонДата);
    Запрос.УстановитьТекстовыйПараметр("ВыбКлиент", ВыбКлиент);
    ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
    ТЗ.Выгрузить(ТабЗ);
в отладке он такой:
SELECT
ДокС.sp6822 as [Товар $Справочник.Номенклатура],
SUM(ДокС.sp6824) as Количество
FROM
dt6816 as ДокС
INNER JOIN
dh6816 as Док ON Док.IDDoc = ДокС.IDDoc AND
Док.sp6817 = '   8B8   '
INNER JOIN
_1SJourn as Жур ON Жур.IDDoc = ДокС.IDDoc
Жур.Date_Time_IDDoc BETWEEN '20160101' AND '20160131Z' AND
Жур.Closed & 1 = 1
GROUP BY
ДокС.sp6822
1 Mikeware
 
18.02.16
11:02
|INNER JOIN
    |_1SJourn as Жур ON Жур.IDDoc = ДокС.IDDoc
    |Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ AND
2 dum80
 
18.02.16
11:22
Спасибо, но все равно не понял:(
3 Mikeware
 
18.02.16
11:23
(2) |INNER JOIN
    |_1SJourn as Жур ON Жур.IDDoc = ДокС.IDDoc
WHERE
    |Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ AND
4 dum80
 
18.02.16
11:26
Спасибо большое
5 Ёпрст
 
18.02.16
11:26
(0)
|_1SJourn as Жур ON Жур.IDDoc = ДокС.IDDoc

|AND --тут пропущен AND, Карл!

    |Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ AN
6 Ёпрст
 
18.02.16
11:27
(3) у него же иннер, можно вере и не писать :)
7 Ёпрст
 
18.02.16
11:28
(0) это, втыкай хинт (nolock) еще
8 Mikeware
 
18.02.16
11:28
(6) согласен, можно AND. Но хоть что-то надо написать :-)
сработают они в данном случае одинаково
9 Mikeware
 
18.02.16
11:29
(7) кстати, OnDrop у меня так и не перехватывается...
10 Ёпрст
 
18.02.16
11:36
(9) ну хз, лень смотреть даже, 7.7 забросили :(
11 dum80
 
18.02.16
11:37
чет тут все равно не то, ошибки нет запрос выполняется, но все пусто
12 Mikeware
 
18.02.16
11:38
(10) мне ее еще год тянуть...
13 Ёпрст
 
18.02.16
11:40
(11) нет проведенных документо за данный период
14 Mikeware
 
18.02.16
11:40
(11) обрезай и проверяй, обрезай и проверяй...
15 dum80
 
18.02.16
11:45
Спасибо, все нормально, не того клиента смотрели
16 dum80
 
18.02.16
16:54
Захотелось чуть усложнить запрос, добавил клиентов, результат пустой, тыкнете где косяк:
    Запрос = СоздатьОбъект("ODBCRecordset");
    Запрос.Отладка();
    ТекстЗапроса = "
    |SELECT    
    |$Док.Клиент as [Клиент $Справочник.Контрагенты],
    |$ДокС.Товар as [Товар $Справочник.Номенклатура],
    |SUM($ДокС.Количество) as Количество
    |FROM
    |$ДокументСтроки.ВозвратПоНаим as ДокС
    |INNER JOIN
    |$Документ.ВозвратПоНаим as Док ON Док.IDDoc = ДокС.IDDoc AND
    |$Док.Клиент IN (SELECT $ВидСправочника36.Контрагенты + Val FROM #ВгруппаК)
    |INNER JOIN
    |_1SJourn as Жур ON Жур.IDDoc = ДокС.IDDoc AND  
    |Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ AND    
    |Жур.Closed & 1 = 1
    |GROUP BY
    |$Док.Клиент, $ДокС.Товар";
    Запрос.УстановитьТекстовыйПараметр("НачДата", НачДата);
    Запрос.УстановитьТекстовыйПараметр("КонДата", КонДата);
    Запрос.УложитьСписокОбъектов(ВыбКлиент,"#ВгруппаК","Контрагенты");
    ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
    ТЗ.Выгрузить(ТабЗ);
17 Mikeware
 
18.02.16
16:56
(16) см (14)
18 Mikeware
 
18.02.16
16:57
(16) и тыц уверен, что у тебя клиент в документе - просто типа Справочник?
19 dum80
 
18.02.16
16:59
Точно,точно, он Справочник.Контрагенты
20 Ёпрст
 
18.02.16
16:59
(16)
(SELECT Val FROM #ВгруппаК)
21 Mikeware
 
18.02.16
17:00
(19) дык зачем $ВидСправочника36.Контрагенты+ ???
22 dum80
 
18.02.16
17:06
скопировал с аналога не подумав
Огромное спасибо,за помощь.