Не знаю, все ли правильно. Запрос работает, количество строк в результате соответствует количеству документов. Но тест на быстродействие (по сети, сеансов больше одного) показывает примерно одинаковое время выполнения по сравнению с запросом по старому варианту (там, где много строк). Если совсем не залезать в табл. часть, скорость выше в 3-4 раза. Надеялся получить нечто среднее. [code]ТекстЗапроса = " |SELECT | ОбщийЖурнал.CLOSED as Флаг, | ОбщийЖурнал.ISMARK as ФлагУ, | DTOS(ОбщийЖурнал.DATE) + ОбщийЖурнал.TIME as Ключ, | ОбщийЖурнал.DATE as Дата, | ОбщийЖурнал.TIME as Время, | ШапкаЗаявки.iddoc as Заявка, | ОбщийЖурнал.DOCNO as Номер, | $ШапкаЗаявки.ВхДата as ВхДата, | $ШапкаЗаявки.ВхНомер as ВхНомер, | $ШапкаЗаявки.Обраб as ОбрСкл, | спрКонтрагенты.DESCR as Контрагент, | $ШапкаЗаявки.ДокСумма as Сумма, | | ICASE(Подзапрос.КолСтрокСПолученнымТоваром = 0,0,ICASE(Подзапрос.КолСтрокСПолученнымТоваром = Подзапрос.КолСтрокВДокументе,1,2)) as ФлагПолДок, | ICASE(Подзапрос.КолСтрокСПолученнымиДокументами = 0,0,ICASE(Подзапрос.КолСтрокСПолученнымиДокументами = Подзапрос.КолСтрокВДокументе,1,2)) as ФлагПолТовар, | | спрПользователи.DESCR as Автор |FROM | | 1SJourn as ОбщийЖурнал | |LEFT JOIN | $Документ.ЗаявкаНаДоставку as ШапкаЗаявки | ON | ШапкаЗаявки.iddoc |= | ОбщийЖурнал.iddoc | |LEFT JOIN | $Справочник.Контрагенты as спрКонтрагенты | ON | спрКонтрагенты.id |= | $ШапкаЗаявки.Контрагент | |LEFT JOIN | $Справочник.Пользователи as спрПользователи | ON | спрПользователи.id |= | ОбщийЖурнал.SP74 | // |**************************************************************** |LEFT JOIN |(SELECT | SUM(1.00) as КолСтрокВДокументе , | SUM(ICASE($СторонниеДокументы.ПолученТовар=1,1.00,0.00)) as КолСтрокСПолученнымТоваром, | SUM(ICASE($СторонниеДокументы.ПолученыДокументы =1,1.00,0.00)) as КолСтрокСПолученнымиДокументами, | ОбщийЖурнал1.iddoc as iddoc | |FROM | | 1SJourn as ОбщийЖурнал1 | |LEFT JOIN | $ДокументСтроки.ЗаявкаНаДоставку as СтрокиЗаявки | ON |( | СтрокиЗаявки.iddoc+STR(СтрокиЗаявки.lineno,4) |= | ОбщийЖурнал1.iddoc |) | |LEFT JOIN | $Справочник.СторонниеДокументы as СторонниеДокументы | ON | СторонниеДокументы.ID = $СтрокиЗаявки.СторонниеДокументы | | |WHERE | (ОбщийЖурнал1.IDDocDef + DTOS(ОбщийЖурнал1.date) + ОбщийЖурнал1.time + ОбщийЖурнал1.IDDoc BETWEEN ($ВидДокумента.ЗаявкаНаДоставку + DTOS(:НачДата~~) + ' ') | AND ($ВидДокумента.ЗаявкаНаДоставку + DTOS(:КонДата~~) +'ZZZZZZZZZZZZZZZ')) | |GROUP BY ОбщийЖурнал1.iddoc | ) as Подзапрос | ON | Подзапрос.iddoc = ШапкаЗаявки.iddoc // |**************************************************************** | |WHERE | (ОбщийЖурнал.IDDocDef + DTOS(ОбщийЖурнал.date) + ОбщийЖурнал.time + ОбщийЖурнал.IDDoc BETWEEN ($ВидДокумента.ЗаявкаНаДоставку + DTOS(:НачДата~~) + ' ') | AND ($ВидДокумента.ЗаявкаНаДоставку + DTOS(:КонДата~~) +'ZZZZZZZZZZZZZZZ'))[/code]
|