Идет выборка по нескольким счетам и по одному субконто. Вобще то каждый раз приходится писать свой запрос, но это окупает скростью работы. Был в прошлом году случай когда заставили делть отчет с 2002 года. так вот у меня он работал минут - 10. по словам буха, у коллег больше 12 часов, при это тогда было не до оптимизации... разовый отчет...
|SELECT |ЛицСчет.ID as [ЛицевойСчет $Справочник.икЛицевыеСчета] |,ВидУсл.ID as [ВидУслуги $Справочник.икВидыУслуг] |,БИ.сч as [Счет $Счет.основной] | , Sum(БИ.СуммаВх) AS СН | ,Sum(БИ.Дебет) AS ДО | ,Sum(БИ.Кредит) AS КО | ,Sum(БИ.СуммаВх+БИ.Дебет-БИ.Кредит ) AS СК |FROM |( |SELECT | Ост.SC0 as Клиент |, Ост.SC1 as усл |, Ост.ACCID as сч |, "+СтрокаНачСумма+" |,$0 as Дебет |,$0 As Кредит |FROM | 1SBKTTL as Ост | |WHERE | | (DTOS(Ост.DATE)+Ост.KIND+Ост.ACCID+Ост.SC0+Ост.SC1+Ост.SC2 +Ост.currid= DTOS(:НачПериода~~)+'1') -- вот тут и несовсем использутеся индекс когда создать свой DTOS(Ост.DATE)+Ост.KIND+Ост.SC0+Ост.SC1+Ост.SC2 скорость ..... |AND %Ост.SC0 AND (Ост.ACCID in " + ВыбрСч + ") | |GROUP BY | 1, | 2, | 3 | |UNION ALL | |-- Оборот Дебетовый |Select | Деб.Клиент as Клиент |, Деб.усл as усл |, Деб.сч as сч |, Деб.СуммаВх as СуммаВх |, Деб.Дебет as Дебет |, Деб.Кредит as Кредит |FROM |( |SELECT | Проводки.DTSC0 as Клиент |, Проводки.DTSC1 as усл |, Проводки.ACCDTID as сч |, $0 as СуммаВх |, Sum(Проводки.Sum) as Дебет |, $0 as Кредит | From 1SENTRY as Проводки, |( |SELECT DOCID+STR(NUMBER,5) as ключД | FROM 1SSBSEL -- эта таблица по выбранным субконто, использование дает приличное, но счета....... | WHERE SBKINDID+VAL + DTOS(DATE)+ TIME+DOCID+STR(NUMBER,5)+STR(CORNO,5) Between | :ТипСуб+:ЛицСчет+DTOS(:ДатаНачала~~) +' '+' 0'+' 0' | and :ТипСуб+:ЛицСчет+DTOS(:ДатаКонца~~) +'ZZZZZZ'+'99999'+'99999' |) as Выборка |Where Проводки.DOCID+STR(NUMBER,5)+STR(CORNO,5) = Выборка.ключД -- .DOCID+ STR(Выборка.NUMBER,5) |GROUP BY 1,2,3 |) as Деб |Where Деб.сч in " + ВыбрСч + " | | |union all | |-- пОборот Кредитовый |Select | Кред.Клиент as Клиент |, Кред.усл as усл |, Кред.сч as сч |, Кред.СуммаВх as СуммаВх |, Кред.Дебет as Дебет |, Кред.Кредит as Кредит |FROM |( |Select | Проводки.KTSC0 as Клиент |, Проводки.KTSC1 as усл |, Проводки.ACCKTID as сч |, $0 as СуммаВх |, $0 as Дебет |, Sum(Проводки.Sum) as Кредит | From 1SENTRY as Проводки, |( |SELECT DOCID+STR(NUMBER,5) as ключД | FROM 1SSBSEL | WHERE SBKINDID+VAL + DTOS(DATE)+ TIME+DOCID+STR(NUMBER,5)+STR(CORNO,5) Between | :ТипСуб+:ЛицСчет+DTOS(:ДатаНачала~~) -- +' '+' 0'+' 0' | and :ТипСуб+:ЛицСчет+DTOS(:ДатаКонца~~) -- +'ZZZZZZ'+'99999'+'99999' |) as Выборка |Where Проводки.DOCID+STR(NUMBER,5)+STR(CORNO,5) = Выборка.ключД |GROUP BY 1,2,3 |) as Кред |WHERE Кред.сч in " + ВыбрСч + " |) as БИ | |INNER JOIN | $Справочник.икЛицевыеСчета AS ЛицСчет |ON ЛицСчет.ID = БИ.Клиент | |INNER JOIN | $Справочник.икВидыУслуг AS ВидУсл |ON ВидУсл.ID = БИ.усл |GROUP BY 1 |,2 |,3
очень надеюсь сам на критику этого запроса....
|