|
Оптимизация запроса | ☑ | ||
---|---|---|---|---|
0
Domanoff26
10.10.11
✎
15:55
|
вроде регистр один и условия не сложные, а работает долго что посоветуете по оптимизации?
"ВЫБРАТЬ | УчетТоваровОстатки.Номенклатура, | УчетТоваровОстатки.ХарактеристикаНоменклатуры, | УчетТоваровОстатки.СерияНоменклатуры, | УчетТоваровОстатки.Заказ, | УчетТоваровОстатки.Размещение, | СУММА(УчетТоваровОстатки.КоличествоОстаток) КАК ОстатокВЗ |ПОМЕСТИТЬ ВТ_ВнутренниеЗаказы |ИЗ | РегистрНакопления.УчетТоваров.Остатки( | &МоментВремени, | Заказ ССЫЛКА Документ.ВнутреннийЗаказ | И Заказ.Заказчик = &Объект | И Заказ.РазделКВ = &РазделКВ | И (НЕ Размещение ССЫЛКА Справочник.Пользователи) | И (НЕ Размещение ССЫЛКА Справочник.ФизическиеЛица)) КАК УчетТоваровОстатки | |СГРУППИРОВАТЬ ПО | УчетТоваровОстатки.Номенклатура, | УчетТоваровОстатки.Заказ, | УчетТоваровОстатки.Размещение, | УчетТоваровОстатки.ХарактеристикаНоменклатуры, | УчетТоваровОстатки.СерияНоменклатуры |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | УчетТоваровОстатки.Номенклатура, | УчетТоваровОстатки.ХарактеристикаНоменклатуры, | УчетТоваровОстатки.СерияНоменклатуры, | УчетТоваровОстатки.Заказ, | УчетТоваровОстатки.Размещение, | СУММА(УчетТоваровОстатки.КоличествоОстаток) КАК ОстатокВРезерве |ПОМЕСТИТЬ ВТ_ВрезервеНаСкладах |ИЗ | РегистрНакопления.УчетТоваров.Остатки( | &МоментВремени, | Заказ ССЫЛКА Документ.ВнутреннийЗаказ | И Заказ.Заказчик = &Объект | И Заказ.РазделКВ = &РазделКВ | И Размещение ССЫЛКА Справочник.Склады | И Размещение = &Склад) КАК УчетТоваровОстатки | |СГРУППИРОВАТЬ ПО | УчетТоваровОстатки.Номенклатура, | УчетТоваровОстатки.Заказ, | УчетТоваровОстатки.Размещение, | УчетТоваровОстатки.ХарактеристикаНоменклатуры, | УчетТоваровОстатки.СерияНоменклатуры |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | УчетТоваровОстатки.Номенклатура, | УчетТоваровОстатки.ХарактеристикаНоменклатуры, | УчетТоваровОстатки.СерияНоменклатуры, | УчетТоваровОстатки.Заказ, | УчетТоваровОстатки.Размещение, | СУММА(УчетТоваровОстатки.КоличествоОстаток) КАК СвободныйОстаток |ПОМЕСТИТЬ ВТ_СвободныйОстаток |ИЗ | РегистрНакопления.УчетТоваров.Остатки( | &МоментВремени, | Заказ = НЕОПРЕДЕЛЕНО | И Номенклатура.СК_НеРезервироватьПодКВ = ИСТИНА | И Размещение = &Склад) КАК УчетТоваровОстатки | |СГРУППИРОВАТЬ ПО | УчетТоваровОстатки.Номенклатура, | УчетТоваровОстатки.Заказ, | УчетТоваровОстатки.Размещение, | УчетТоваровОстатки.ХарактеристикаНоменклатуры, | УчетТоваровОстатки.СерияНоменклатуры |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ЛистыПодбораОстатки.Склад, | ЛистыПодбораОстатки.Объект, | ЛистыПодбораОстатки.РазделКВ, | ЛистыПодбораОстатки.Номенклатура, | СУММА(ЛистыПодбораОстатки.КоличествоОстаток) КАК ОстатокЛП |ПОМЕСТИТЬ ВТ_ЛистыПодбора |ИЗ | РегистрНакопления.ЛистыПодбора.Остатки( | &МоментВремени, | Склад = &Склад | И Объект = &Объект | И РазделКВ = &РазделКВ) КАК ЛистыПодбораОстатки | |СГРУППИРОВАТЬ ПО | ЛистыПодбораОстатки.Объект, | ЛистыПодбораОстатки.РазделКВ, | ЛистыПодбораОстатки.Номенклатура, | ЛистыПодбораОстатки.Склад |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | СтрокиКВ.Объект, | СтрокиКВ.РазделКВ, | СтрокиКВ.Номенклатура, | СтрокиКВ.ЕдиницаИзмерения, | СУММА(СтрокиКВ.УтвержденоГИП) КАК УтвержденоГИП |ПОМЕСТИТЬ ВТ_СтрокиКВ |ИЗ | РегистрСведений.СтрокиКВ КАК СтрокиКВ |ГДЕ | СтрокиКВ.Объект = &Объект | И СтрокиКВ.РазделКВ = &РазделКВ | |СГРУППИРОВАТЬ ПО | СтрокиКВ.Объект, | СтрокиКВ.РазделКВ, | СтрокиКВ.Номенклатура, | СтрокиКВ.ЕдиницаИзмерения |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ВТ_СтрокиКВ.Номенклатура, | ВТ_СтрокиКВ.ЕдиницаИзмерения, | ВТ_СтрокиКВ.РазделКВ, | ЕСТЬNULL(ВТ_ЛистыПодбора.ОстатокЛП, 0) * ЕСТЬNULL(ВТ_СтрокиКВ.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент / ВТ_СтрокиКВ.ЕдиницаИзмерения.Коэффициент, 1) КАК Заказано, | ЕСТЬNULL(ВТ_ВнутренниеЗаказы.ОстатокВЗ, 0) * ЕСТЬNULL(ВТ_СтрокиКВ.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент / ВТ_СтрокиКВ.ЕдиницаИзмерения.Коэффициент, 1) КАК НаЗаказе, | ЕСТЬNULL(ВТ_ВрезервеНаСкладах.ОстатокВРезерве, 0) * ЕСТЬNULL(ВТ_СтрокиКВ.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент / ВТ_СтрокиКВ.ЕдиницаИзмерения.Коэффициент, 1) КАК Резерв, | ЕСТЬNULL(ВТ_СвободныйОстаток.СвободныйОстаток, 0) * ЕСТЬNULL(ВТ_СтрокиКВ.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент / ВТ_СтрокиКВ.ЕдиницаИзмерения.Коэффициент, 1) КАК СвободныйОстаток |ИЗ | ВТ_СтрокиКВ КАК ВТ_СтрокиКВ | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ВнутренниеЗаказы КАК ВТ_ВнутренниеЗаказы | ПО ВТ_СтрокиКВ.Номенклатура = ВТ_ВнутренниеЗаказы.Номенклатура | И ВТ_СтрокиКВ.РазделКВ = ВТ_ВнутренниеЗаказы.Заказ.РазделКВ | И ВТ_СтрокиКВ.Объект = ВТ_ВнутренниеЗаказы.Заказ.Заказчик | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ВрезервеНаСкладах КАК ВТ_ВрезервеНаСкладах | ПО ВТ_СтрокиКВ.Объект = ВТ_ВрезервеНаСкладах.Заказ.Заказчик | И ВТ_СтрокиКВ.РазделКВ = ВТ_ВрезервеНаСкладах.Заказ.РазделКВ | И ВТ_СтрокиКВ.Номенклатура = ВТ_ВрезервеНаСкладах.Номенклатура | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ЛистыПодбора КАК ВТ_ЛистыПодбора | ПО ВТ_СтрокиКВ.Объект = ВТ_ЛистыПодбора.Объект | И ВТ_СтрокиКВ.РазделКВ = ВТ_ЛистыПодбора.РазделКВ | И ВТ_СтрокиКВ.Номенклатура = ВТ_ЛистыПодбора.Номенклатура | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_СвободныйОстаток КАК ВТ_СвободныйОстаток | ПО ВТ_СтрокиКВ.Номенклатура = ВТ_СвободныйОстаток.Номенклатура" |
|||
1
zak555
10.10.11
✎
15:56
|
Заказ ССЫЛКА Документ.ВнутреннийЗаказ
| И Заказ.Заказчик = &Объект | И Заказ.РазделКВ = &РазделКВ | И (НЕ Размещение ССЫЛКА Справочник.Пользователи) | И (НЕ Размещение ССЫЛКА Справочник.ФизическиеЛица)) КАК УчетТоваровОстатки что это ? |
|||
2
Широкий
10.10.11
✎
15:57
|
| Заказ ССЫЛКА Документ.ВнутреннийЗаказ
| И Заказ.Заказчик = &Объект | И Заказ.РазделКВ = &РазделКВ а где "Выразить"? |
|||
3
Ненавижу 1С
гуру
10.10.11
✎
15:58
|
да... дали возможность писать пакетные запросы...
|
|||
4
unregistered
10.10.11
✎
15:58
|
Зачем столько группировок? Виртуальные таблицы выдают данные уже сгруппированными по измерениям. Собственно они по другому и не умеют.
|
|||
5
Domanoff26
10.10.11
✎
16:01
|
(1) размещение только определенного типа, как то подругому можно?
(2) а как конкретно? |
|||
6
Широкий
10.10.11
✎
16:04
|
Выразить(Заказ КАК Документ.ВнутреннийЗаказ).Заказчик=&Объект
|
|||
7
Широкий
10.10.11
✎
16:05
|
С временными таблицами реально перебор
|
|||
8
Axel2009
10.10.11
✎
16:05
|
(0) а какой запрос тормозит то?
|
|||
9
unregistered
10.10.11
✎
16:07
|
Для всех таблиц Остатки можно сделать отбор по Номенклатуре из СтрокиКВ. Если сделать запрос к СтрокиКВ первым в пакете, то во всех остальных можно использовать условие в параметрах таблиц типа Номенклатура В (ВЫБРАТЬ РАЗЛИЧНЫЕ ВТ_СтрокиКВ.Номенклатура ИЗ ВТ_СтрокиКВ КАК ВТ_СтрокиКВ).
|
|||
10
fimanich
10.10.11
✎
16:13
|
(0) когда создаешь временные таблицы, с которыми потом соединение будет, то используй "ИНДЕКСИРОВАТЬ ПО" для тех полей, по которым будет соединение
|
|||
11
Amiralnar
10.10.11
✎
16:13
|
Поля для соединений нужно получить сразу. Уточнение поля в условии соединения плохо влияет на время выполнения запроса.
Не ясно, сколько остатков лежит на регистрах накопления - отсюда не ясно, являются ли они трудными для получения. |
|||
12
Amiralnar
10.10.11
✎
16:14
|
(10) Да, самое главное - индексировать. Забыл.
|
|||
13
Axel2009
10.10.11
✎
16:37
|
РегистрНакопления.УчетТоваров.Остатки используется 3 раза. переделать на 1. и 3 колонки через ВЫБОР считать.
|
|||
14
Domanoff26
11.10.11
✎
13:13
|
(13) но параметры виртуальной таблицы работают быстрее же чем выбор когда...
|
|||
15
Axel2009
11.10.11
✎
14:15
|
(14) если в итоге 3 запроса суммарно возвращают все записи, то проще 1 раз получить все и просуммировать так как нужно.
|
|||
16
Domanoff26
11.10.11
✎
16:50
|
еще вопрос, а вот будет быстрее работать если не в запросе обращаться к реквизитам объекта-измерения, а уже в СКД? и если использовать эти объекты в группировках?
|
|||
17
unregistered
11.10.11
✎
17:13
|
(16) Вряд ли. Ради интереса можно в консоли СКД посмотреть и сравнить текс исходного запроса в схеме с текстом запроса в макете компоновки данных.
|
|||
18
Amiralnar
12.10.11
✎
10:40
|
А что, (9), (10), (11) не помогло?
СКД обрабатывается сервером 1С. Работает медленнее, чем обрабтка на СУБД. |
|||
19
Axel2009
12.10.11
✎
10:44
|
(18) в каком месте медленнее и на сколько?
|
|||
20
Defender aka LINN
12.10.11
✎
10:47
|
(16) Запрос СКД, по-твоему, их откуда-то из другого места получит? К (17) тот же вопрос.
|
|||
21
unregistered
12.10.11
✎
11:08
|
(20) >> Запрос СКД, по-твоему, их откуда-то из другого места получит?
Я собственно про то и написал в (17), что "вряд ли". |
|||
22
Amiralnar
12.10.11
✎
11:09
|
(19) В ряде случаев, будет происходить получение объекта при разыменовывании реквизита.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |