|
Запрос выполняется 4 часа. Как оптимизировать? | ☑ | ||
---|---|---|---|---|
0
imtade2
15.07.13
✎
19:07
|
ВЫБРАТЬ
ВложенныйЗапрос.Контрагент КАК Контрагент, ВложенныйЗапрос.ДатаСменыМанагера, КонтрагентыПериодическиеРеквизиты.Значение КАК Значение, ВложенныйЗапрос.Счет КАК Счет, ВложенныйЗапрос.ДатаСчета, ПокупателиОстаткиИОбороты.НеОплаченоРасход КАК НеОплаченоРасход, ПокупателиОстаткиИОбороты.НеОплаченоНачальныйОстаток КАК НеОплаченоНачальныйОстаток, ПокупателиОстаткиИОбороты.СЗ.СуммаВсего КАК СЗСуммаВсего, СчетЗаказТовары.НомерСтроки КАК НомерСтроки, СчетЗаказТовары.Товар, СчетЗаказТовары.Количество, СчетЗаказТовары.ЕдИзм, СчетЗаказТовары.Коэффициент, СчетЗаказТовары.Цена, СчетЗаказТовары.Сумма, СчетЗаказТовары.СтавкаНДС, СчетЗаказТовары.СуммаНДС, СчетЗаказТовары.Всего, 0 КАК УжеОплачено, 0 КАК Оплачено, 0 КАК ВсегоВЦенах, 0 КАК Маржа, СчетЗаказТовары.Спецификация, " " КАК ЕстьЦены ИЗ РегистрНакопления.Покупатели.ОстаткиИОбороты(&ДатаНач, &ДатаКон, , , ) КАК ПокупателиОстаткиИОбороты ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ КонтрагентыПериодическиеРеквизиты.Ссылка КАК Контрагент, МАКСИМУМ(КонтрагентыПериодическиеРеквизиты.Дата) КАК ДатаСменыМанагера, СчетЗаказ.Ссылка КАК Счет, СчетЗаказ.Дата КАК ДатаСчета ИЗ Справочник.Контрагенты.ПериодическиеРеквизиты КАК КонтрагентыПериодическиеРеквизиты ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.СчетЗаказ КАК СчетЗаказ ПО КонтрагентыПериодическиеРеквизиты.Дата <= СчетЗаказ.Дата ГДЕ (КонтрагентыПериодическиеРеквизиты.Ссылка В (&Контрагенты) ИЛИ &ВсеКонтрагенты) И КонтрагентыПериодическиеРеквизиты.Имя = "Менеджер" И (КонтрагентыПериодическиеРеквизиты.Значение В (&Менеджеры) ИЛИ &ВсеМенеджеры) СГРУППИРОВАТЬ ПО СчетЗаказ.Ссылка, КонтрагентыПериодическиеРеквизиты.Ссылка, СчетЗаказ.Дата) КАК ВложенныйЗапрос ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Контрагенты.ПериодическиеРеквизиты КАК КонтрагентыПериодическиеРеквизиты ПО (КонтрагентыПериодическиеРеквизиты.Ссылка = ВложенныйЗапрос.Контрагент) И (КонтрагентыПериодическиеРеквизиты.Дата = ВложенныйЗапрос.ДатаСменыМанагера) ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.СчетЗаказ.Товары КАК СчетЗаказТовары ПО ВложенныйЗапрос.Счет = СчетЗаказТовары.Ссылка ПО ПокупателиОстаткиИОбороты.СЗ = ВложенныйЗапрос.Счет ГДЕ КонтрагентыПериодическиеРеквизиты.Имя = "Менеджер" И ПокупателиОстаткиИОбороты.НеОплаченоРасход > 0 УПОРЯДОЧИТЬ ПО Значение, Контрагент, Счет, НомерСтроки ИТОГИ МАКСИМУМ(НеОплаченоРасход), МАКСИМУМ(НеОплаченоНачальныйОстаток), МАКСИМУМ(СЗСуммаВсего) ПО Значение, Контрагент, Счет |
|||
1
H A D G E H O G s
15.07.13
✎
19:08
|
Взять и переписать
|
|||
2
Armando
15.07.13
✎
19:12
|
соединение со вложенным запросом детектед
Для начала переписать с использованием временной таблицы. |
|||
3
H A D G E H O G s
15.07.13
✎
19:12
|
(0) СрезПоследних реализуй через ВТ-шечку.
|
|||
4
H A D G E H O G s
15.07.13
✎
19:13
|
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.СчетЗаказ КАК СчетЗаказ
ПО КонтрагентыПериодическиеРеквизиты.Дата <= СчетЗаказ.Дата Тоже херня. |
|||
5
Armando
15.07.13
✎
19:13
|
И не забывать эффективно использовать индексы
|
|||
6
ILM
гуру
15.07.13
✎
19:14
|
Сделай пакет:
1. Контрагент и периодические реквизиты в темп1 2. Счета и контрагенты в темп2 3. Обороты продаж с условиями в темп3 4. А вот тут выбирай все что нужно во временную таблицу темп 4 из 1-2-3. 5. Итоги и т.д. по темп4 Вангую будет 5 минут, или 2 секунды, если ограничишь число записей. |
|||
7
H A D G E H O G s
15.07.13
✎
19:14
|
ПО ПокупателиОстаткиИОбороты.СЗ = ВложенныйЗапрос.Счет
Воткнуть в параметры Виртуальной, из временной, предварительно созданной. |
|||
8
H A D G E H O G s
15.07.13
✎
19:15
|
(5) Бугага.
Спасибо, рассмешил. |
|||
9
Fragster
гуру
15.07.13
✎
19:15
|
переделать на построитель такие вещи:
(КонтрагентыПериодическиеРеквизиты.Ссылка В (&Контрагенты) ИЛИ &ВсеКонтрагенты) И КонтрагентыПериодическиеРеквизиты.Имя = "Менеджер" И (КонтрагентыПериодическиеРеквизиты.Значение В (&Менеджеры) ИЛИ &ВсеМенеджеры) |
|||
10
Fragster
гуру
15.07.13
✎
19:15
|
вообще (1) прав
|
|||
11
ILM
гуру
15.07.13
✎
19:17
|
Весь запрос напомнил мне Клиппер/ДБейс из 80-х, с их вечной INDEX ON и т.д.
|
|||
12
wertyu
15.07.13
✎
19:23
|
манагера надо вообще в документ
|
|||
13
H A D G E H O G s
15.07.13
✎
19:24
|
(9) Это как раз нормально
|
|||
14
Armando
15.07.13
✎
19:52
|
(8) поясни
|
|||
15
Лефмихалыч
15.07.13
✎
20:08
|
(0) соединения с вложенными запросами зело не рекомендуются до тех пор, пока экспериментально не доказано, что так быстрее
|
|||
16
ilya_i
15.07.13
✎
20:13
|
Справочник.Контрагенты.ПериодическиеРеквизиты КАК КонтрагентыПериодическиеРеквизиты
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.СчетЗаказ КАК СчетЗаказ ПО КонтрагентыПериодическиеРеквизиты.Дата <= СчетЗаказ.Дата |
|||
17
ilya_i
15.07.13
✎
20:13
|
явно не хватает соединения по контрагенту
|
|||
18
Inform
15.07.13
✎
20:45
|
Попробуй (отладить не на чем, проверить тоже, на свой страх и риск):
ВЫБРАТЬ КонтрагентыПериодическиеРеквизиты.Ссылка КАК Контрагент, КонтрагентыПериодическиеРеквизиты.Дата КАК Дата, КонтрагентыПериодическиеРеквизиты.Значение ПОМЕСТИТЬ ВТ_ДополнительныеРеквизитыКонтрагентов ИЗ Справочник.Контрагенты.ПериодическиеРеквизиты КАК КонтрагентыПериодическиеРеквизиты ГДЕ (КонтрагентыПериодическиеРеквизиты.Ссылка В (&Контрагенты) ИЛИ &ВсеКонтрагенты) И КонтрагентыПериодическиеРеквизиты.Имя = "Менеджер" И (КонтрагентыПериодическиеРеквизиты.Значение В (&Менеджеры) ИЛИ &ВсеМенеджеры) ИНДЕКСИРОВАТЬ ПО Контрагент, Дата ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ СчетЗаказ.Ссылка КАК Счет, СчетЗаказ.Дата КАК ДатаСчета, ВТ_ДополнительныеРеквизитыКонтрагентов.Контрагент КАК Контрагент, МАКСИМУМ(ВТ_ДополнительныеРеквизитыКонтрагентов.Дата) КАК ДатаСменыМенеджера, МАКСИМУМ(СчетЗаказ.СуммаВсего) КАК СуммаВсего ПОМЕСТИТЬ ВТ_ДатыСменыМенеджеров ИЗ Документ.СчетЗаказ КАК СчетЗаказ ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_ДополнительныеРеквизитыКонтрагентов КАК ВТ_ДополнительныеРеквизитыКонтрагентов ПО СчетЗаказ.Контрагент = ВТ_ДополнительныеРеквизитыКонтрагентов.Контрагент И СчетЗаказ.Дата >= ВТ_ДополнительныеРеквизитыКонтрагентов.Дата СГРУППИРОВАТЬ ПО СчетЗаказ.Ссылка, СчетЗаказ.Дата, ВТ_ДополнительныеРеквизитыКонтрагентов.Контрагент ИНДЕКСИРОВАТЬ ПО Контрагент, ДатаСменыМенеджера ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВТ_ДатыСменыМенеджеров.Счет КАК Счет, ВТ_ДатыСменыМенеджеров.ДатаСчета, ВТ_ДатыСменыМенеджеров.Контрагент КАК Контрагент, ВТ_ДатыСменыМенеджеров.ДатаСменыМенеджера, ВТ_ДополнительныеРеквизитыКонтрагентов.Значение КАК ТекущийМенеджер, ВТ_ДатыСменыМенеджеров.СуммаВсего ПОМЕСТИТЬ ВТ_ТекущиеМенеджерыПоКонтрагентам ИЗ ВТ_ДатыСменыМенеджеров КАК ВТ_ДатыСменыМенеджеров ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_ДополнительныеРеквизитыКонтрагентов КАК ВТ_ДополнительныеРеквизитыКонтрагентов ПО ВТ_ДатыСменыМенеджеров.Контрагент = ВТ_ДополнительныеРеквизитыКонтрагентов.Контрагент И ВТ_ДатыСменыМенеджеров.ДатаСменыМенеджера = ВТ_ДополнительныеРеквизитыКонтрагентов.Дата ИНДЕКСИРОВАТЬ ПО Счет, Контрагент ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ПокупателиОстаткиИОбороты.Контрагент, ПокупателиОстаткиИОбороты.СЗ, СУММА(ПокупателиОстаткиИОбороты.НеОплаченоРасход) КАК НеОплаченоРасход, СУММА(ПокупателиОстаткиИОбороты.НеОплаченоНачальныйОстаток) КАК НеОплаченоНачальныйОстаток ПОМЕСТИТЬ ВТ_ПокупателиОстаткиИОбороты ИЗ РегистрНакопления.Покупатели.ОстаткиИОбороты( &ДатаНач, &ДатаКон, , , (Контрагент, СЗ) В (ВЫБРАТЬ РАЗЛИЧНЫЕ ВТ_ТекущиеМенеджерыПоКонтрагентам.Контрагент, ВТ_ТекущиеМенеджерыПоКонтрагентам.Счет ИЗ ВТ_ТекущиеМенеджерыПоКонтрагентам)) КАК ПокупателиОстаткиИОбороты ГДЕ ПокупателиОстаткиИОбороты.НеОплаченоРасход > 0 СГРУППИРОВАТЬ ПО ПокупателиОстаткиИОбороты.СЗ, ПокупателиОстаткиИОбороты.Контрагент ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ СчетЗаказТовары.Ссылка, СчетЗаказТовары.НомерСтроки, СчетЗаказТовары.Товар, СчетЗаказТовары.Количество, СчетЗаказТовары.ЕдИзм, СчетЗаказТовары.Коэффициент, СчетЗаказТовары.Цена, СчетЗаказТовары.Сумма, СчетЗаказТовары.СтавкаНДС, СчетЗаказТовары.СуммаНДС, СчетЗаказТовары.Всего, СчетЗаказТовары.Спецификация ПОМЕСТИТЬ ВТ_ТоварыСчетовЗаказов ИЗ Документ.СчетЗаказ.Товары КАК СчетЗаказТовары ГДЕ СчетЗаказТовары.Ссылка В (ВЫБРАТЬ РАЗЛИЧНЫЕ ВТ_ТекущиеМенеджерыПоКонтрагентам.Счет ИЗ ВТ_ТекущиеМенеджерыПоКонтрагентам) ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВТ_ПокупателиОстаткиИОбороты.Контрагент, ВТ_ПокупателиОстаткиИОбороты.СЗ, ВТ_ПокупателиОстаткиИОбороты.НеОплаченоРасход, ВТ_ПокупателиОстаткиИОбороты.НеОплаченоНачальныйОстаток, ВТ_ТекущиеМенеджерыПоКонтрагентам.ДатаСчета, ВТ_ТекущиеМенеджерыПоКонтрагентам.ДатаСменыМенеджера, ВТ_ТекущиеМенеджерыПоКонтрагентам.ТекущийМенеджер, ВТ_ТекущиеМенеджерыПоКонтрагентам.СуммаВсего, ВТ_ТоварыСчетовЗаказов.Ссылка, ВТ_ТоварыСчетовЗаказов.НомерСтроки, ВТ_ТоварыСчетовЗаказов.Товар, ВТ_ТоварыСчетовЗаказов.Количество, ВТ_ТоварыСчетовЗаказов.ЕдИзм, ВТ_ТоварыСчетовЗаказов.Коэффициент, ВТ_ТоварыСчетовЗаказов.Цена, ВТ_ТоварыСчетовЗаказов.Сумма, ВТ_ТоварыСчетовЗаказов.СтавкаНДС, ВТ_ТоварыСчетовЗаказов.СуммаНДС, ВТ_ТоварыСчетовЗаказов.Всего, ВТ_ТоварыСчетовЗаказов.Спецификация ИЗ ВТ_ПокупателиОстаткиИОбороты КАК ВТ_ПокупателиОстаткиИОбороты ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_ТекущиеМенеджерыПоКонтрагентам КАК ВТ_ТекущиеМенеджерыПоКонтрагентам ПО ВТ_ПокупателиОстаткиИОбороты.СЗ = ВТ_ТекущиеМенеджерыПоКонтрагентам.Счет И ВТ_ПокупателиОстаткиИОбороты.Контрагент = ВТ_ТекущиеМенеджерыПоКонтрагентам.Контрагент ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_ТоварыСчетовЗаказов КАК ВТ_ТоварыСчетовЗаказов ПО ВТ_ПокупателиОстаткиИОбороты.СЗ = ВТ_ТоварыСчетовЗаказов.Ссылка |
|||
19
Inform
15.07.13
✎
20:46
|
+(18) добавь Индекс по полю Ссылка в пакет "ВТ_ТоварыСчетовЗаказов"
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |