|
Почему виснет запрос? | ☑ | ||
---|---|---|---|---|
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) субконто - это массив видов субконто, в твоем случае: контрагенты, договоры
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |