Имя: Пароль:
1C
1C 7.7
v7: Все ВошедшиеВЗапрос и 1С++
,
0 woha
 
12.03.15
11:57
Доброго дня!

Помогите, пожалуйстра, разобраться с прямым запросом:

ТекстЗапроса = "  
    |SELECT
    |    РегТовар.Товар as [Товар $Справочник.ТМЦ],
    |    РегДатаДок.ДатаДок as ДатаДок
    |FROM
    |(SELECT DISTINCT
    |     РегТовар.Товар
    |FROM (
    |SELECT
    |    $ТЧЗаказ.ТМЦ as Товар
    |FROM
    |    $ДокументСтроки.ЗаказРеализатора as ТЧЗаказ
    |INNER JOIN
    |    $Документ.ЗаказРеализатора as ДокЗаказ
    |ON
    |     ТЧЗаказ.IDDoc = ДокЗаказ.IDDoc                            
    |INNER JOIN
    |    _1SJourn as Жур ON Жур.IDDoc = ТЧЗаказ.IDDoc  
    |WHERE
    |     Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~
    |AND
    |     Жур.Closed & 1 = 1
    | " + Доп + "
    |GROUP BY
    |    $ТЧЗаказ.ТМЦ
    |
    |UNION ALL
    |
    |SELECT
    |    $ТЧДок.ТМЦ as Товар                                    
    |FROM
    |    $ДокументСтроки.РасходнаяНакладная as ТЧДок
    |INNER JOIN
    |    $Документ.РасходнаяНакладная as Док
    |ON
    |     ТЧДок.IDDoc = Док.IDDoc                            
    |INNER JOIN
    |    _1SJourn as Жур ON Жур.IDDoc = ТЧДок.IDDoc  
    |WHERE
    |     Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~
    |AND
    |     Жур.Closed & 1 = 1
    | " + Доп1 + "
    |GROUP BY
    |    $ТЧДок.ТМЦ) as РегТовар
    |GROUP BY
    |    РегТовар.Товар    
    |) as РегТовар,
    |
    |(SELECT DISTINCT
    |      РегДатаДок.ДатаДок as ДатаДок
    |FROM (
    |SELECT
    |     CAST(LEFT(Жур.Date_Time_IDDoc, 8) as DateTime) as ДатаДок
    |FROM
    |    $ДокументСтроки.ЗаказРеализатора as ТЧЗаказ
    |INNER JOIN
    |    $Документ.ЗаказРеализатора as ДокЗаказ
    |ON
    |     ТЧЗаказ.IDDoc = ДокЗаказ.IDDoc                            
    |INNER JOIN
    |    _1SJourn as Жур ON Жур.IDDoc = ТЧЗаказ.IDDoc  
    |WHERE
    |     Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~
    |AND
    |     Жур.Closed & 1 = 1
    | " + Доп + "
    |GROUP BY
    |    CAST(LEFT(Жур.Date_Time_IDDoc, 8) as DateTime)
    |
    |UNION ALL
    |
    |SELECT
    |     CAST(LEFT(Жур.Date_Time_IDDoc, 8) as DateTime) as ДатаДок
    |FROM
    |    $ДокументСтроки.РасходнаяНакладная as ТЧДок
    |INNER JOIN
    |    $Документ.РасходнаяНакладная as Док
    |ON
    |     ТЧДок.IDDoc = Док.IDDoc                            
    |INNER JOIN
    |    _1SJourn as Жур ON Жур.IDDoc = ТЧДок.IDDoc  
    |WHERE
    |     Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~
    |AND
    |     Жур.Closed & 1 = 1
    | " + Доп1 + "
    |GROUP BY
    |    CAST(LEFT(Жур.Date_Time_IDDoc, 8) as DateTime)) as РегДатаДок
    |GROUP BY
    |    РегДатаДок.ДатаДок    
    |) as РегДатаДок  
    |
    |LEFT JOIN
    |(
    |SELECT
    |     РегКолво.Товар as Товар,
    |        РегКолво.ДатаДок as ДатаДок,
    |     SUM(РегКолво.КоличествоЗаказ) as Заказано,
    |     SUM(РегКолво.КоличествоРасход) as Отгружено,
    |     SUM(РегКолво.КоличествоРасход - РегКолво.КоличествоЗаказ) as НеСделано,
    |     SUM(РегКолво.СуммаРасход) as Сумма
    |FROM (
    |SELECT
    |    $ТЧЗаказ.ТМЦ as Товар,
    |     CAST(LEFT(Жур.Date_Time_IDDoc, 8) as DateTime) as ДатаДок,
    |    SUM($ТЧЗаказ.Кво) as КоличествоЗаказ,
    |    0 as КоличествоРасход,  
    |    0 as СуммаРасход  
    |FROM
    |    $ДокументСтроки.ЗаказРеализатора as ТЧЗаказ
    |INNER JOIN
    |    $Документ.ЗаказРеализатора as ДокЗаказ
    |ON
    |     ТЧЗаказ.IDDoc = ДокЗаказ.IDDoc                            
    |INNER JOIN
    |    _1SJourn as Жур ON Жур.IDDoc = ТЧЗаказ.IDDoc  
    |WHERE
    |     Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~
    |AND
    |     Жур.Closed & 1 = 1
    | " + Доп + "
    |GROUP BY
    |    $ТЧЗаказ.ТМЦ,
    |    CAST(LEFT(Жур.Date_Time_IDDoc, 8) as DateTime)
    |
    |UNION ALL
    |
    |SELECT
    |    $ТЧДок.ТМЦ as Товар,                                      
    |     CAST(LEFT(Жур.Date_Time_IDDoc, 8) as DateTime) as ДатаДок,
    |    0,
    |    SUM($ТЧДОк.Кво) as КоличествоРасход,
    |    SUM($ТЧДОк.СуммаСНДС) as СуммаРасход
    |FROM
    |    $ДокументСтроки.РасходнаяНакладная as ТЧДок
    |INNER JOIN
    |    $Документ.РасходнаяНакладная as Док
    |ON
    |     ТЧДок.IDDoc = Док.IDDoc                            
    |INNER JOIN
    |    _1SJourn as Жур ON Жур.IDDoc = ТЧДок.IDDoc  
    |WHERE
    |     Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~
    |AND
    |     Жур.Closed & 1 = 1
    | " + Доп1 + "
    |GROUP BY
    |    $ТЧДок.ТМЦ,
    |     CAST(LEFT(Жур.Date_Time_IDDoc, 8) as DateTime)
    |) as РегКолво
    |GROUP BY
    |   РегКолво.Товар,
    |    РегКолво.ДатаДок
    |) as РегКолво
    |ON
    |    РегКолво.Товар = РегТовар.Товар
    |AND
    |   РегКолво.ДатаДок = РегДатаДок.ДатаДок
    |";

Когда запускаю без левого соединения - работает, как только подключаю соединение ругается на алиас: The column prefix 'РегТовар' does not match with a table name or alias name used in the query.
Два дня поисков и никакого толку.

Спасибо.
1 woha
 
12.03.15
11:58
Похоже проблема в:
2 mikecool
 
12.03.15
11:58
вызываешь по алиасу таблицу, которой нет
запрос не смотрел, ибо не хочу
3 woha
 
12.03.15
11:59
Похоже проблема в:
    |ON
    |    РегКолво.Товар = РегТовар.Товар
    |AND
    |   РегКолво.ДатаДок = РегДатаДок.ДатаДок
4 woha
 
12.03.15
11:59
(2) Есть таблица.
5 woha
 
12.03.15
12:00
запрос сделан по примеру: http://www.script-coding.com/Direct_queries.html
6 dk
 
12.03.15
12:03
реально думаешь кто-то будет твою портянку читать? да еще и неполную
---
упрости пример либо запакуй во временные таблицы, чтобы читать проще было
7 mehfk
 
12.03.15
12:06
в
    |GROUP BY
    |    РегТовар.Товар    
    |) as РегТовар,
замени
|) as РегТовар,
на что-нибудь другое
8 mehfk
 
12.03.15
12:07
и потом в соединении тоже
9 Ёпрст
 
12.03.15
12:07
Какой-то бестолковый запрос
10 Ёпрст
 
12.03.15
12:08
еще и кросс джоин там зачем то.. нипанятна
11 woha
 
12.03.15
12:11
Извините за беспокойство. два select distinct завернул в одну таблицу, к ней сделал левое соединение и тогда пошло.
    |SELECT
    |      Рег.Товар as [Товар $Справочник.ТМЦ],
    |    Рег.ДатаДок as ДатаДок,
    |   РегКолво.Заказано as Заказано,
    |   РегКолво.Отгружено as Отгружено,
    |   РегКолво.Отгружено - РегКолво.Заказано as НеСделано,
    |   РегКолво.Сумма as Сумма
    | FROM
    |(
    |SELECT
    |    РегТовар.Товар Товар,
    |    РегДатаДок.ДатаДок as ДатаДок
    |FROM
    |(SELECT DISTINCT
    |     РегТовар.Товар
    |FROM (
    |SELECT
    |    $ТЧЗаказ.ТМЦ as Товар
    |FROM
    |    $ДокументСтроки.ЗаказРеализатора as ТЧЗаказ
    |INNER JOIN
    |    $Документ.ЗаказРеализатора as ДокЗаказ
    |ON
    |     ТЧЗаказ.IDDoc = ДокЗаказ.IDDoc                            
    |INNER JOIN
    |    _1SJourn as Жур ON Жур.IDDoc = ТЧЗаказ.IDDoc  
    |WHERE
    |     Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~
    |AND
    |     Жур.Closed & 1 = 1
    | " + Доп + "
    |GROUP BY
    |    $ТЧЗаказ.ТМЦ
    |
    |UNION ALL
    |
    |SELECT
    |    $ТЧДок.ТМЦ as Товар                                    
    |FROM
    |    $ДокументСтроки.РасходнаяНакладная as ТЧДок
    |INNER JOIN
    |    $Документ.РасходнаяНакладная as Док
    |ON
    |     ТЧДок.IDDoc = Док.IDDoc                            
    |INNER JOIN
    |    _1SJourn as Жур ON Жур.IDDoc = ТЧДок.IDDoc  
    |WHERE
    |     Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~
    |AND
    |     Жур.Closed & 1 = 1
    | " + Доп1 + "
    |GROUP BY
    |    $ТЧДок.ТМЦ) as РегТовар
    |GROUP BY
    |    РегТовар.Товар    
    |) as РегТовар,
    |
    |(SELECT DISTINCT
    |      РегДатаДок.ДатаДок as ДатаДок
    |FROM (
    |SELECT
    |     CAST(LEFT(Жур.Date_Time_IDDoc, 8) as DateTime) as ДатаДок
    |FROM
    |    $ДокументСтроки.ЗаказРеализатора as ТЧЗаказ
    |INNER JOIN
    |    $Документ.ЗаказРеализатора as ДокЗаказ
    |ON
    |     ТЧЗаказ.IDDoc = ДокЗаказ.IDDoc                            
    |INNER JOIN
    |    _1SJourn as Жур ON Жур.IDDoc = ТЧЗаказ.IDDoc  
    |WHERE
    |     Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~
    |AND
    |     Жур.Closed & 1 = 1
    | " + Доп + "
    |GROUP BY
    |    CAST(LEFT(Жур.Date_Time_IDDoc, 8) as DateTime)
    |
    |UNION ALL
    |
    |SELECT
    |     CAST(LEFT(Жур.Date_Time_IDDoc, 8) as DateTime) as ДатаДок
    |FROM
    |    $ДокументСтроки.РасходнаяНакладная as ТЧДок
    |INNER JOIN
    |    $Документ.РасходнаяНакладная as Док
    |ON
    |     ТЧДок.IDDoc = Док.IDDoc                            
    |INNER JOIN
    |    _1SJourn as Жур ON Жур.IDDoc = ТЧДок.IDDoc  
    |WHERE
    |     Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~
    |AND
    |     Жур.Closed & 1 = 1
    | " + Доп1 + "
    |GROUP BY
    |    CAST(LEFT(Жур.Date_Time_IDDoc, 8) as DateTime)) as РегДатаДок
    |GROUP BY
    |    РегДатаДок.ДатаДок    
    |) as РегДатаДок   ) as Рег
    |
    |LEFT JOIN
    |(
    |SELECT
    |     РегКолво.Товар as Товар,
    |      РегКолво.ДатаДок as ДатаДок,
    |     SUM(РегКолво.КоличествоЗаказ) as Заказано,
    |     SUM(РегКолво.КоличествоРасход) as Отгружено,
    |     SUM(РегКолво.КоличествоРасход - РегКолво.КоличествоЗаказ) as НеСделано,
    |     SUM(РегКолво.СуммаРасход) as Сумма
    |FROM (
    |SELECT
    |    $ТЧЗаказ.ТМЦ as Товар,
    |     CAST(LEFT(Жур.Date_Time_IDDoc, 8) as DateTime) as ДатаДок,
    |    SUM($ТЧЗаказ.Кво) as КоличествоЗаказ,
    |    0 as КоличествоРасход,  
    |    0 as СуммаРасход  
    |FROM
    |    $ДокументСтроки.ЗаказРеализатора as ТЧЗаказ
    |INNER JOIN
    |    $Документ.ЗаказРеализатора as ДокЗаказ
    |ON
    |     ТЧЗаказ.IDDoc = ДокЗаказ.IDDoc                            
    |INNER JOIN
    |    _1SJourn as Жур ON Жур.IDDoc = ТЧЗаказ.IDDoc  
    |WHERE
    |     Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~
    |AND
    |     Жур.Closed & 1 = 1
    | " + Доп + "
    |GROUP BY
    |    $ТЧЗаказ.ТМЦ,
    |    CAST(LEFT(Жур.Date_Time_IDDoc, 8) as DateTime)
    |
    |UNION ALL
    |
    |SELECT
    |    $ТЧДок.ТМЦ as Товар,                                      
    |     CAST(LEFT(Жур.Date_Time_IDDoc, 8) as DateTime) as ДатаДок,
    |    0,
    |    SUM($ТЧДОк.Кво) as КоличествоРасход,
    |    SUM($ТЧДОк.СуммаСНДС) as СуммаРасход
    |FROM
    |    $ДокументСтроки.РасходнаяНакладная as ТЧДок
    |INNER JOIN
    |    $Документ.РасходнаяНакладная as Док
    |ON
    |     ТЧДок.IDDoc = Док.IDDoc                            
    |INNER JOIN
    |    _1SJourn as Жур ON Жур.IDDoc = ТЧДок.IDDoc  
    |WHERE
    |     Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~
    |AND
    |     Жур.Closed & 1 = 1
    | " + Доп1 + "
    |GROUP BY
    |    $ТЧДок.ТМЦ,
    |     CAST(LEFT(Жур.Date_Time_IDDoc, 8) as DateTime)
    |) as РегКолво
    |GROUP BY
    |   РегКолво.Товар,
    |    РегКолво.ДатаДок
    |) as РегКолво
    |ON
    |    РегКолво.Товар = Рег.Товар
    |AND
    |   РегКолво.ДатаДок = Рег.ДатаДок
    |";
Спасибо Всем!
12 Ёпрст
 
12.03.15
12:16
вот такие вещи

   |SELECT
    |     CAST(LEFT(Жур.Date_Time_IDDoc, 8) as DateTime) as ДатаДок
    |FROM
    |    $ДокументСтроки.ЗаказРеализатора as ТЧЗаказ
    |INNER JOIN
    |    $Документ.ЗаказРеализатора as ДокЗаказ
    |ON
    |     ТЧЗаказ.IDDoc = ДокЗаказ.IDDoc                            
    |INNER JOIN
    |    _1SJourn as Жур ON Жур.IDDoc = ТЧЗаказ.IDDoc  
    |WHERE
    |     Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~
    |AND
    |     Жур.Closed & 1 = 1
    | " + Доп + "
    |GROUP BY
    |    CAST(LEFT(Жур.Date_Time_IDDoc, 8) as DateTime)

вообще за гранью добра и зла..
13 trad
 
12.03.15
12:16
с таким форматированием понять структуру запроса очень трудно
14 trad
 
12.03.15
12:18
как я понял автор пытался вязать так

select
from A, B
join C on C.f = A.f
15 woha
 
12.03.15
12:25
(14) AND C.j = B.j
16 trad
 
12.03.15
12:28
(15) так вот - это невозможно
представь запрос в таком условном виде и будет понятно почему
select
from A, (B join C on C.f = A.f and C.j = B.j)
17 woha
 
12.03.15
12:28
пришлось сделать:
select
D.f,
D.j
from
A,B
join
C
on
C.f = D.f
and
C.j = D.j

пример оказался не совсем верным.
18 trad
 
12.03.15
12:29
(16) + тут тебе и будет сказано
The column prefix 'A'...
19 woha
 
12.03.15
12:30
ТекстЗапроса = "
|SELECT
|    РегТовар.Товар Товар,    
|    РегСклад.Склад Склад,    
|    РегКолво.Количество Количество
|FROM
|(
|SELECT DISTINCT
|    РегТовар.Товар Товар    
|FROM
|    $РегистрОстатки.ОстаткиТоваров(:ВыбДата~,,
|                                 Фирма = :ВыбФирма,
|                                 (Товар), (Количество)) as РегТовар
|) as РегТовар,
|(
|SELECT DISTINCT
|    РегСклад.Склад Склад    
|FROM
|    $РегистрОстатки.ОстаткиТоваров(:ВыбДата~,,
|                                 Фирма = :ВыбФирма,
|                                 (Склад), (Количество)) as РегСклад
|) as РегСклад
|LEFT JOIN
|(
|SELECT
|    РегКолво.КоличествоОстаток Количество,    
|    РегКолво.Товар Товар,    
|    РегКолво.Склад Склад    
|FROM
|    $РегистрОстатки.ОстаткиТоваров(:ВыбДата~,,
|                                 Фирма = :ВыбФирма,
|                                 (Склад, Товар), (Количество)) as РегКолво
|) as РегКолво ON РегКолво.Склад = РегСклад.Склад AND
|                 РегКолво.Товар = РегТовар.Товар    
|";

это не я писал, это http://www.script-coding.com/Direct_queries.html#11. Глава 11.
20 trad
 
12.03.15
12:30
(17) что есть D
и зачем столько ентеров - читать невозможно же
21 woha
 
12.03.15
12:31
по этому образцу и делал вначале.
22 woha
 
12.03.15
12:32
D - select из A и B в одной таблице
23 trad
 
12.03.15
12:39
(19) "это не я писал, это Глава 11." - там бред написан
24 woha
 
12.03.15
12:43
(23) Немного подправил и работает.
25 DrZombi
 
гуру
12.03.15
13:03
(0) Переименуй название Таблиц по человечески, не стоит их называть однотипно

|GROUP BY
|    $ТЧДок.ТМЦ) as РегТовар
|GROUP BY
|    РегТовар.Товар    
|) as РегТовар,

Что за дьявольская конструкция?

РегТовар в РегТовар, фантазия кончилась?
26 woha
 
12.03.15
19:45
Еще раз всем спасибо.
Конечный вариант запроса:

ТекстЗапроса = "
    |SELECT
    |     РегКолво.Товар as Товар,
    |      РегКолво.ДатаДок as ДатаДок,
    |     SUM(РегКолво.КоличествоЗаказ) as Заказано,
    |     SUM(РегКолво.КоличествоРасход) as Отгружено,
    |     SUM(РегКолво.КоличествоРасход - РегКолво.КоличествоЗаказ) as НеСделано,
    |     SUM(РегКолво.СуммаРасход) as Сумма  
    |INTO
    |    #TempTab
    |
    |FROM (
    |SELECT
    |    $ТЧЗаказ.ТМЦ as Товар,
    |     CAST(LEFT(Жур.Date_Time_IDDoc, 8) as DateTime) as ДатаДок,
    |    SUM($ТЧЗаказ.Кво) as КоличествоЗаказ,
    |    0 as КоличествоРасход,  
    |    0 as СуммаРасход  
    |FROM
    |    $ДокументСтроки.ЗаказРеализатора as ТЧЗаказ
    |INNER JOIN
    |    $Документ.ЗаказРеализатора as ДокЗаказ
    |ON
    |     ТЧЗаказ.IDDoc = ДокЗаказ.IDDoc                            
    |INNER JOIN
    |    _1SJourn as Жур ON Жур.IDDoc = ТЧЗаказ.IDDoc  
    |WHERE
    |     Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~
    |AND
    |     Жур.Closed & 1 = 1
    | " + Доп + "
    |GROUP BY
    |    $ТЧЗаказ.ТМЦ,
    |    CAST(LEFT(Жур.Date_Time_IDDoc, 8) as DateTime)
    |
    |UNION ALL
    |
    |SELECT
    |    $ТЧДок.ТМЦ as Товар,                                      
    |     CAST(LEFT(Жур.Date_Time_IDDoc, 8) as DateTime) as ДатаДок,
    |    0,
    |    SUM($ТЧДОк.Кво) as КоличествоРасход,
    |    SUM($ТЧДОк.СуммаСНДС) as СуммаРасход
    |FROM
    |    $ДокументСтроки.РасходнаяНакладная as ТЧДок
    |INNER JOIN
    |    $Документ.РасходнаяНакладная as Док
    |ON
    |     ТЧДок.IDDoc = Док.IDDoc                            
    |INNER JOIN
    |    _1SJourn as Жур ON Жур.IDDoc = ТЧДок.IDDoc  
    |WHERE
    |     Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~
    |AND
    |     Жур.Closed & 1 = 1
    | " + Доп1 + "
    |GROUP BY
    |    $ТЧДок.ТМЦ,
    |     CAST(LEFT(Жур.Date_Time_IDDoc, 8) as DateTime)
    |) as РегКолво
    |GROUP BY
    |   РегКолво.Товар,
    |    РегКолво.ДатаДок";
    Запрос.УстановитьТекстовыйПараметр("НачДата", НачДата);
    Запрос.УстановитьТекстовыйПараметр("КонДата", КонДата);

    ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
    

    ТекстЗапроса = "
    |SELECT
    |      Рег.Товар as [Товар $Справочник.ТМЦ],
    |    Рег.ДатаДок as ДатаДок,
    |   РегКолво.Заказано as Заказано,
    |   РегКолво.Отгружено as Отгружено,
    |   РегКолво.Отгружено - РегКолво.Заказано as НеСделано,
    |   РегКолво.Сумма as Сумма
    | FROM
    |(
    |SELECT
    |    РегТовар.Товар Товар,
    |    РегДатаДок.ДатаДок as ДатаДок
    |FROM
    |(SELECT DISTINCT
    |     РегТовар.Товар
    |FROM
    |    #TempTab as РегТовар
    |) as РегТовар,
    |
    |(SELECT DISTINCT
    |      РегДатаДок.ДатаДок as ДатаДок
    |FROM                  
    |      #TempTab as РегДатаДок
    |) as РегДатаДок   ) as Рег
    |
    |LEFT JOIN
    |(
    |SELECT
    |     РегКолво.Товар as Товар,
    |      РегКолво.ДатаДок as ДатаДок,
    |     SUM(РегКолво.Заказано) as Заказано,
    |     SUM(РегКолво.Отгружено) as Отгружено,
    |     SUM(РегКолво.Отгружено - РегКолво.Заказано) as НеСделано,
    |     SUM(РегКолво.Сумма) as Сумма
    |FROM
    |      #TempTab as РегКолво
    |
    |GROUP BY
    |   РегКолво.Товар,
    |    РегКолво.ДатаДок
    |) as РегКолво
    |ON
    |    РегКолво.Товар = Рег.Товар
    |AND
    |   РегКолво.ДатаДок = Рег.ДатаДок
    |ORDER BY
    |   Рег.Товар,
    |   Рег.ДатаДок
    |";
    Запрос.УстановитьТекстовыйПараметр("НачДата", НачДата);
    Запрос.УстановитьТекстовыйПараметр("КонДата", КонДата);
    ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);

Вынес основной запрос отдельно во временную таблицу.
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс