|   |   | 
| 
 | Почему виснет запрос? | ☑ | ||
|---|---|---|---|---|
| 0
    
        Koala 23.07.13✎ 21:19 | 
        Есть вот такой запрос:
  ВЫБРАТЬ ХозрасчетныйОбороты.Регистратор КАК Регистратор, ХозрасчетныйОбороты.Период КАК Период, ХозрасчетныйОбороты.Субконто1 КАК Субконто1, ХозрасчетныйОбороты.Субконто2 КАК Субконто2 ИЗ РегистрБухгалтерии.Хозрасчетный.Обороты(&НачДата, &КонДата, Регистратор, Счет В ИЕРАРХИИ (&Счет), , , , ) КАК ХозрасчетныйОбороты ГДЕ ВЫБОР КОГДА &ВидЗадолженности = 0 ТОГДА ХозрасчетныйОбороты.СуммаОборотДт > 0 ИЛИ ХозрасчетныйОбороты.СуммаОборотКт > 0 КОГДА &ВидЗадолженности = 1 ТОГДА ХозрасчетныйОбороты.СуммаОборотДт > 0 ИНАЧЕ ХозрасчетныйОбороты.СуммаОборотКт > 0 КОНЕЦ И ВЫБОР КОГДА &КонтрагентПараметр <> 0 ТОГДА ХозрасчетныйОбороты.Субконто1 = &КонтрагентПараметр ИНАЧЕ ИСТИНА КОНЕЦ И ВЫБОР КОГДА &ДоговорПараметр <> 0 ТОГДА ХозрасчетныйОбороты.Субконто2 = &ДоговорПараметр ИНАЧЕ ИСТИНА КОНЕЦ И ХозрасчетныйОбороты.Регистратор В (ВЫБРАТЬ ПЕРВЫЕ 1 ХозрасчетныйОбороты2.Регистратор КАК Регистратор ИЗ РегистрБухгалтерии.Хозрасчетный.Обороты(&НачДата, &КонДата, Регистратор, Счет В ИЕРАРХИИ (&Счет), , , , ) КАК ХозрасчетныйОбороты2 ГДЕ ВЫБОР КОГДА &ВидЗадолженности = 0 ТОГДА ХозрасчетныйОбороты.СуммаОборотДт > 0 ИЛИ ХозрасчетныйОбороты.СуммаОборотКт > 0 КОГДА &ВидЗадолженности = 1 ТОГДА ХозрасчетныйОбороты.СуммаОборотДт > 0 ИНАЧЕ ХозрасчетныйОбороты.СуммаОборотКт > 0 КОНЕЦ И ВЫБОР КОГДА &КонтрагентПараметр <> 0 ТОГДА ХозрасчетныйОбороты.Субконто1 = &КонтрагентПараметр ИНАЧЕ ИСТИНА КОНЕЦ И ВЫБОР КОГДА &ДоговорПараметр <> 0 ТОГДА ХозрасчетныйОбороты.Субконто2 = &ДоговорПараметр ИНАЧЕ ИСТИНА КОНЕЦ И ХозрасчетныйОбороты2.Субконто1 = ХозрасчетныйОбороты.Субконто1 И ХозрасчетныйОбороты2.Субконто2 = ХозрасчетныйОбороты.Субконто2 УПОРЯДОЧИТЬ ПО Регистратор УБЫВ) УПОРЯДОЧИТЬ ПО Регистратор УБЫВ Выполняется он уже минут 40. В чем может быть дело, подскажите! | |||
| 1
    
        Лефмихалыч 23.07.13✎ 21:30 | 
        потому что он ужасен. В нем нечего чинить, выкинь его целиком     | |||
| 2
    
        Koala 23.07.13✎ 21:33 | 
        Можешь что-то лучшее предложить?     | |||
| 3
    
        RomanYS 23.07.13✎ 21:34 | 
        (1) согласен
  (0) условия на субконто в параметры виртуальной таблицы и как-нибудь избавиться от коррелированного запроса | |||
| 4
    
        Koala 23.07.13✎ 21:35 | 
        И кстати, сам-то запрос отрабатывается за секунду (точнее не измерял, да и не надо). Тормозит только вывод результатов. 
  А их не так много: за месяц всего-лишь считаю. Так вот я и думаю - почему оно так? | |||
| 5
    
        Славен 23.07.13✎ 21:37 | 
        а это вот что: "ТОГДА ХозрасчетныйОбороты.СуммаОборотДт > 0"     | |||
| 6
    
        Славен 23.07.13✎ 21:39 | 
        я пилять вот этого как то не понял, может вечер переработал конечно, объясните мне что это означает в условии:
  КОГДА &ВидЗадолженности = 0 ТОГДА ХозрасчетныйОбороты.СуммаОборотДт > 0 ИЛИ ХозрасчетныйОбороты.СуммаОборотКт > 0 КОГДА &ВидЗадолженности = 1 ТОГДА ХозрасчетныйОбороты.СуммаОборотДт > 0 ИНАЧЕ ХозрасчетныйОбороты.СуммаОборотКт > 0 КОНЕЦ | |||
| 7
    
        Koala 23.07.13✎ 21:39 | 
        (5) Вообще-то один из вариантов отбора в секции "ГДЕ". Что тебя смущает?     | |||
| 8
    
        Славен 23.07.13✎ 21:41 | 
        все уже врубился, дощло     | |||
| 9
    
        Славен 23.07.13✎ 21:41 | 
        переклинило меня что-то     | |||
| 10
    
        Koala 23.07.13✎ 21:42 | 
        (3) засунуть условия в параметры виртуалки - согласен, попробую. А почему от коррелированного запроса надо отказываться?     | |||
| 11
    
        RomanYS 23.07.13✎ 21:47 | 
        (10) я думаю именно он тормозит, а "top 1" можно и группировкой с функцией максимум получить     | |||
| 12
    
        RomanYS 23.07.13✎ 21:50 | 
        КОГДА &ВидЗадолженности = 0 
  ТОГДА ХозрасчетныйОбороты.СуммаОборотДт > 0 ИЛИ ХозрасчетныйОбороты.СуммаОборотКт > 0 КОГДА &ВидЗадолженности = 1 ТОГДА ХозрасчетныйОбороты.СуммаОборотДт > 0 ИНАЧЕ ХозрасчетныйОбороты.СуммаОборотКт > 0 КОНЕЦ вроде можно упростить: (&ВидЗадолженности = 0 И ХозрасчетныйОбороты.СуммаОборот > 0) или (&ВидЗадолженности = 1 И ХозрасчетныйОбороты.СуммаОборот < 0) | |||
| 13
    
        Koala 23.07.13✎ 21:57 | 
        (12) попробую. (11) ф-ей МАКСИМУМ? Ето как?
  Просто коррелированный запрос я здесь замутил, чтоб получить дату задолженности, т.е. _первый_ док, у к-рого дебиторка >кредиторки (ну или наоборот). А МАКСИМУМ-то здесь при чем? | |||
| 14
    
        RomanYS 23.07.13✎ 22:06 | 
        (13) выбираешь данные во временную таблицу, индексируешь;
  вторым запросом группируешь по всем измерениям и Минимум(регистратор), индексируешь; третим запросом соединяешь первый и второй | |||
| 15
    
        RomanYS 23.07.13✎ 22:13 | 
        обязательно указать параметр субконто виртуальной таблицы, одно это в разы может ускорить     | |||
| 16
    
        Koala 23.07.13✎ 22:34 | 
        (15) Дык _не знаю я заранее_, какие у меня будут субконто, а в параметр "Субконто" виртуальной таблицы нельзя засовывать конструкцию из запроса, можно только СписокЗначений.     | |||
| 17
    
        RomanYS 23.07.13✎ 22:48 | 
        (16) субконто - это массив видов субконто, в твоем случае: контрагенты, договоры     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |