Написал отчет "задолженность перед поставщиками". Там основой всего является запрос:
ТекстЗапроса = "-- qryMaker:Отчет по просроченному поставщикам.2010.09.13.17.12.37
|Select
| Выборка.Менеджер [Менеджер $Справочник.ФизЛица]
| , Выборка.Контрагент [Контрагент $Справочник.Контрагенты]
| , Выборка.День
| , Выборка.Сальдо
| , Выборка.ЧистоеСальдо
|--, Выборка.ИсключитьИзСальдо
| , Выборка.ПоступлениеТМЦ [ПоступлениеТМЦ $Документ.ПоступлениеТМЦ]
| , Выборка.ДатаОплаты
| , Sum(Выборка.Сумма) Сумма
|From(Select Выборка1.Менеджер Менеджер
| , Контрагент = Case Выборка1.Контрагент
| When Null Then Выборка3.Контрагент
| Else Выборка1.Контрагент End
| , Выборка1.День День
| , (Выборка1.СуммаСальдо + IsNull(Выборка3.Сумма,0)) Сальдо
| , Выборка1.СуммаСальдо ЧистоеСальдо
| , Выборка3.Сумма ИсключитьИзСальдо
| , ПоступлениеТМЦ = Case Выборка1.День
| When Выборка2.ДатаОплаты Then
| Case Выборка1.Контрагент When Выборка2.Контрагент Then Выборка2.ПоступлениеТМЦ
| Else Null End
| Else Null End
| , ДатаОплаты = Case Выборка1.День
| When Выборка2.ДатаОплаты Then
| Case Выборка1.Контрагент When Выборка2.Контрагент Then Выборка2.ДатаОплаты
| Else Null End
| Else Null End
| , Сумма = Case Выборка1.День
| When Выборка2.ДатаОплаты Then
| Case Выборка1.Контрагент When Выборка2.Контрагент Then Выборка2.Сумма
| Else Null End
| Else Null End
|From
|------------------------- Выборка 1.1
|(SELECT $Контрагенты.Менеджер Менеджер
| , Контрагенты.ID Контрагент
| , Dat_.Dat День
| , Sum(IsNull(ПоставщикиОстатки.СуммаРубОстаток,0) + IsNull(ПокупателиОстатки.СуммаРубОстаток,0)) СуммаСальдо
| , Sum(ПоставщикиОстатки.СуммаРубОстаток) СуммаПоставщика
|FROM $Справочник.Контрагенты AS Контрагенты With (NOLOCK)
|Inner Join $Справочник.ФизЛица As ФизЛица On $Контрагенты.Менеджер = ФизЛица.Id
|FULL OUTER JOIN Dat_ On (1=1)
|LEFT JOIN $РегистрОстатки.Поставщики(:НачДата~,
| RIGHT OUTER JOIN $Справочник.Контрагенты AS Контрагенты With (NOLOCK) ON $Контрагенты.ОсновнойДоговор = Договор,
| Договор,
| СуммаРуб) AS ПоставщикиОстатки ON $Контрагенты.ОсновнойДоговор = ПоставщикиОстатки.Договор
|LEFT JOIN $РегистрОстатки.Покупатели(:НачДата~,
| RIGHT OUTER JOIN $Справочник.Контрагенты AS Контрагенты With (NOLOCK) ON $Контрагенты.ОсновнойДоговор = Договор,
| Договор,
| СуммаРуб) AS ПокупателиОстатки ON $Контрагенты.ОсновнойДоговор = ПокупателиОстатки.Договор
| WHERE ($Контрагенты.Поставщик = 0)
| And (Not(Контрагенты.Descr Like 'яя%'))
| And ($ФизЛица.ЯвлМенеджер = 1)
|GROUP BY $Контрагенты.Менеджер
| , Контрагенты.Id
| , Контрагенты.Descr
| , Dat_.Dat
|) As Выборка1
|------------------------- Выборка 1.2
| Left Join (Select $ПоступлениеТМЦ.Контрагент Контрагент
| , Sum($ПоступлениеТМЦ.СуммаВзаиморасчетов) Сумма
| FROM $Документ.ПоступлениеТМЦ AS ПоступлениеТМЦ With (NOLOCK)
| INNER JOIN _1SJOURN AS Журнал With (NOLOCK) ON ПоступлениеТМЦ.IDDOC = Журнал.IDDOC
| Where ($ПоступлениеТМЦ.ДатаОплаты Between :НачДата And :КонДата)
| And ((Журнал.CLOSED & 1) = 1)
| Group by $ПоступлениеТМЦ.Контрагент) As Выборка3 On Выборка3.Контрагент = Выборка1.Контрагент
|------------------------- Выборка 2
| ,(Select $ПоступлениеТМЦ.Контрагент Контрагент
| , ПоступлениеТМЦ.IDDOC ПоступлениеТМЦ
| , $ПоступлениеТМЦ.ДатаОплаты ДатаОплаты
| , $ПоступлениеТМЦ.СуммаВзаиморасчетов Сумма
| From $Документ.ПоступлениеТМЦ As ПоступлениеТМЦ
| INNER JOIN _1SJOURN AS Журнал With (NOLOCK) ON ПоступлениеТМЦ.IDDOC = Журнал.IDDOC
| Where ($ПоступлениеТМЦ.ДатаОплаты Between :НачДата And :КонДата)
| And (Журнал.IsMark = 0)) As Выборка2
| Where ((Выборка1.СуммаСальдо<>0) And (Not(Выборка1.СуммаСальдо Is Null)) And
| (Выборка1.СуммаПоставщика<>0) And (Not(Выборка1.СуммаПоставщика Is Null)))
| Or ((Выборка3.Сумма<>0) And (Not(Выборка3.Сумма Is Null)))
| Or (Выборка2.ДатаОплаты <> cast('17530101' as datetime))
|--((Выборка1.Контрагент = Выборка2.Контрагент) Or (Выборка2.Контрагент Is Null))
| ) As Выборка
|-- Where ((Выборка.ИсключитьИзСальдо<>0) And (Not(Выборка.ИсключитьИзСальдо Is Null)))
|-- Or ((Выборка.ЧистоеСальдо<>0) And (Not(Выборка.ЧистоеСальдо Is Null)))
|Group By
| Выборка.Менеджер
| , Выборка.Контрагент
| , Выборка.День
| , Выборка.Сальдо
| , Выборка.ЧистоеСальдо
| , Выборка.ПоступлениеТМЦ
| , Выборка.ДатаОплаты
|Order By
| Выборка.Менеджер
| , Выборка.Контрагент
| , Выборка.День
| , Выборка.Сальдо
|-- , Выборка.ИсключитьИзСальдо
| , Выборка.ПоступлениеТМЦ
| , Выборка.ДатаОплаты
|";
, где Dat_ - уложенная временная таблица дней
Делаю отчет по дебиторке на основе данного - меняю в тексте запроса "РегистрПокупатели" на "РегистрПоставщики" и "ПоступлениеТМЦ" на "Реализацию". Получаю аналогичный запрос, который корректно отрабатывается и всё бы замечательно, но он "вешает" сервер в отличие от первого. Проверил, (NOLOCK) везде есть. Переделал заново - результат тот же.
Помогите разобраться, в чём причина. Текст запроса далее.