|
Оптимизация запроса к регистру накопления | ☑ | ||
---|---|---|---|---|
0
kuznkv
03.07.15
✎
15:44
|
подскажите, как оптимизировать запрос, для того, чтобы он выполнялся не 1-2 минуты, а секунд 30
ВЫБРАТЬ РАЗЛИЧНЫЕ ВЫБОР КОГДА РасходныйОрдерНаТовары.ОтгрузкаПоЗаданиюНаПеревозку И НЕ &ОтображениеДеталей ТОГДА РасходныйОрдерНаТовары.ЗаданиеНаПеревозку ИНАЧЕ РасходныйОрдерНаТовары.Ссылка КОНЕЦ КАК Распоряжение, ВЫБОР КОГДА РасходныйОрдерНаТовары.ОтгрузкаПоЗаданиюНаПеревозку И НЕ &ОтображениеДеталей ТОГДА РасходныйОрдерНаТовары.ЗаданиеНаПеревозку.Дата ИНАЧЕ РасходныйОрдерНаТовары.Дата КОНЕЦ КАК Дата, ВЫБОР КОГДА РасходныйОрдерНаТовары.ОтгрузкаПоЗаданиюНаПеревозку И НЕ &ОтображениеДеталей ТОГДА РасходныйОрдерНаТовары.ЗаданиеНаПеревозку.ДатаВремяРейсаПланС ИНАЧЕ РасходныйОрдерНаТовары.ДатаОтгрузки КОНЕЦ КАК ДатаОтгрузки, ВЫБОР КОГДА РасходныйОрдерНаТовары.ОтгрузкаПоЗаданиюНаПеревозку И НЕ &ОтображениеДеталей ТОГДА РасходныйОрдерНаТовары.ЗаданиеНаПеревозку.Приоритет.Порядок ИНАЧЕ РасходныйОрдерНаТовары.Приоритет.Порядок КОНЕЦ КАК Приоритет, ВЫБОР КОГДА РасходныйОрдерНаТовары.ОтгрузкаПоЗаданиюНаПеревозку И НЕ &ОтображениеДеталей ТОГДА РасходныйОрдерНаТовары.ЗаданиеНаПеревозку.Приоритет ИНАЧЕ РасходныйОрдерНаТовары.Приоритет КОНЕЦ КАК ПриоритетСсылка, ВЫБОР КОГДА РасходныйОрдерНаТовары.ОтгрузкаПоЗаданиюНаПеревозку И НЕ &ОтображениеДеталей ТОГДА РасходныйОрдерНаТовары.ЗаданиеНаПеревозку.Номер ИНАЧЕ РасходныйОрдерНаТовары.Номер КОНЕЦ КАК Номер, ВЫБОР КОГДА РасходныйОрдерНаТовары.ОтгрузкаПоЗаданиюНаПеревозку И НЕ &ОтображениеДеталей ТОГДА ЗНАЧЕНИЕ(Справочник.СкладскиеЯчейки.ПустаяСсылка) ИНАЧЕ РасходныйОрдерНаТовары.ЗонаОтгрузки КОНЕЦ КАК ЗонаОтгрузки, ВЫБОР КОГДА РасходныйОрдерНаТовары.ОтгрузкаПоЗаданиюНаПеревозку И НЕ &ОтображениеДеталей ТОГДА ВЫРАЗИТЬ(РасходныйОрдерНаТовары.ЗаданиеНаПеревозку.ДополнительнаяИнформация КАК СТРОКА(100)) ИНАЧЕ ВЫРАЗИТЬ(РасходныйОрдерНаТовары.Комментарий КАК СТРОКА(100)) КОНЕЦ КАК Комментарий, РасходныйОрдерНаТовары.Распоряжение.Контрагент КАК Контрагент, РасходныйОрдерНаТовары.Распоряжение.ЗонаДоставки КАК ЗонаДоставки ПОМЕСТИТЬ РаспоряженияНаОтбор ИЗ Документ.РасходныйОрдерНаТовары КАК РасходныйОрдерНаТовары ГДЕ (НЕ &ОтображениеДеталей ИЛИ РасходныйОрдерНаТовары.ЗаданиеНаПеревозку = &ЗаданиеНаПеревозку) И РасходныйОрдерНаТовары.Склад = &Склад И РасходныйОрдерНаТовары.Помещение = &Помещение И РасходныйОрдерНаТовары.Проведен И РасходныйОрдерНаТовары.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыРасходныхОрдеров.КОтбору) И РасходныйОрдерНаТовары.ДатаОтгрузки >= &ДатаОтгрузки ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ОрдерНаПеремещениеТоваров.Ссылка, ОрдерНаПеремещениеТоваров.Дата, ОрдерНаПеремещениеТоваров.ДатаОтгрузки, ОрдерНаПеремещениеТоваров.Приоритет.Порядок, ОрдерНаПеремещениеТоваров.Приоритет, ОрдерНаПеремещениеТоваров.Номер, ОрдерНаПеремещениеТоваров.ЗонаОтгрузки, ВЫРАЗИТЬ(ОрдерНаПеремещениеТоваров.Комментарий КАК СТРОКА(100)), NULL, NULL ИЗ Документ.ОрдерНаПеремещениеТоваров КАК ОрдерНаПеремещениеТоваров ГДЕ НЕ &ОтображениеДеталей И ОрдерНаПеремещениеТоваров.Склад = &Склад И ОрдерНаПеремещениеТоваров.ПомещениеОтправитель = &Помещение И ОрдерНаПеремещениеТоваров.Проведен И ОрдерНаПеремещениеТоваров.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыОрдеровНаПеремещение.КОтбору) И ОрдерНаПеремещениеТоваров.ДатаОтгрузки >= &ДатаОтгрузки ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВЫБОР КОГДА НЕ &ОтображениеДеталей И ТоварыКОтборуОстатки.Распоряжение ССЫЛКА Документ.РасходныйОрдерНаТовары И ВЫРАЗИТЬ(ТоварыКОтборуОстатки.Распоряжение КАК Документ.РасходныйОрдерНаТовары).ОтгрузкаПоЗаданиюНаПеревозку ТОГДА ВЫРАЗИТЬ(ТоварыКОтборуОстатки.Распоряжение КАК Документ.РасходныйОрдерНаТовары).ЗаданиеНаПеревозку ИНАЧЕ ТоварыКОтборуОстатки.Распоряжение КОНЕЦ КАК Распоряжение, ТоварыКОтборуОстатки.Номенклатура, ТоварыКОтборуОстатки.Характеристика, ТоварыКОтборуОстатки.Серия, СУММА(ТоварыКОтборуОстатки.КОтборуОстаток) КАК КОтборуОстаток, СУММА(ТоварыКОтборуОстатки.ОтбираетсяОстаток) КАК ОтбираетсяОстаток, СУММА(ТоварыКОтборуОстатки.ОтобраноОстаток) КАК ОтобраноОстаток ПОМЕСТИТЬ ТоварыКОтборуОстатки ИЗ РегистрНакопления.ТоварыКОтбору.Остатки( , Распоряжение В (ВЫБРАТЬ РаспоряженияНаОтбор.Распоряжение ИЗ РаспоряженияНаОтбор КАК РаспоряженияНаОтбор)) КАК ТоварыКОтборуОстатки СГРУППИРОВАТЬ ПО ТоварыКОтборуОстатки.Серия, ТоварыКОтборуОстатки.Номенклатура, ТоварыКОтборуОстатки.Характеристика, ВЫБОР КОГДА НЕ &ОтображениеДеталей И ТоварыКОтборуОстатки.Распоряжение ССЫЛКА Документ.РасходныйОрдерНаТовары И ВЫРАЗИТЬ(ТоварыКОтборуОстатки.Распоряжение КАК Документ.РасходныйОрдерНаТовары).ОтгрузкаПоЗаданиюНаПеревозку ТОГДА ВЫРАЗИТЬ(ТоварыКОтборуОстатки.Распоряжение КАК Документ.РасходныйОрдерНаТовары).ЗаданиеНаПеревозку ИНАЧЕ ТоварыКОтборуОстатки.Распоряжение КОНЕЦ ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ОтборРазмещениеТоваровТоварыОтбор.Номенклатура, ОтборРазмещениеТоваровТоварыОтбор.Характеристика, ВЫБОР КОГДА ОтборРазмещениеТоваровТоварыОтбор.СтатусУказанияСерий В (6, 8, 10) ТОГДА ОтборРазмещениеТоваровТоварыОтбор.Серия ИНАЧЕ ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка) КОНЕЦ КАК Серия, СУММА(ОтборРазмещениеТоваровТоварыОтбор.Количество) КАК КоличествоПлан, СУММА(ОтборРазмещениеТоваровТоварыОтбор.КоличествоОтобрано) КАК КоличествоОтобрано, ВЫБОР КОГДА НЕ &ОтображениеДеталей И ОтборРазмещениеТоваровТоварыОтбор.Ссылка.Распоряжение ССЫЛКА Документ.РасходныйОрдерНаТовары И ВЫРАЗИТЬ(ОтборРазмещениеТоваровТоварыОтбор.Ссылка.Распоряжение КАК Документ.РасходныйОрдерНаТовары).ОтгрузкаПоЗаданиюНаПеревозку ТОГДА ВЫРАЗИТЬ(ОтборРазмещениеТоваровТоварыОтбор.Ссылка.Распоряжение КАК Документ.РасходныйОрдерНаТовары).ЗаданиеНаПеревозку ИНАЧЕ ОтборРазмещениеТоваровТоварыОтбор.Ссылка.Распоряжение КОНЕЦ КАК Распоряжение ПОМЕСТИТЬ ТоварыВЗаданиях ИЗ Документ.ОтборРазмещениеТоваров.ТоварыОтбор КАК ОтборРазмещениеТоваровТоварыОтбор ГДЕ (ОтборРазмещениеТоваровТоварыОтбор.Ссылка.Проведен И ОтборРазмещениеТоваровТоварыОтбор.Ссылка.Распоряжение В (ВЫБРАТЬ РаспоряженияНаОтбор.Распоряжение ИЗ РаспоряженияНаОтбор ГДЕ НЕ РаспоряженияНаОтбор.Распоряжение ССЫЛКА Документ.ЗаданиеНаПеревозку) ИЛИ НЕ &ОтображениеДеталей И ВЫРАЗИТЬ(ОтборРазмещениеТоваровТоварыОтбор.Ссылка.Распоряжение КАК Документ.РасходныйОрдерНаТовары).ЗаданиеНаПеревозку В (ВЫБРАТЬ РаспоряженияНаОтбор.Распоряжение ИЗ РаспоряженияНаОтбор КАК РаспоряженияНаОтбор ГДЕ РаспоряженияНаОтбор.Распоряжение ССЫЛКА Документ.ЗаданиеНаПеревозку)) СГРУППИРОВАТЬ ПО ОтборРазмещениеТоваровТоварыОтбор.Характеристика, ВЫБОР КОГДА ОтборРазмещениеТоваровТоварыОтбор.СтатусУказанияСерий В (6, 8, 10) ТОГДА ОтборРазмещениеТоваровТоварыОтбор.Серия ИНАЧЕ ЗНАЧЕНИЕ(Справочник.СерииНоменклатуры.ПустаяСсылка) КОНЕЦ, ОтборРазмещениеТоваровТоварыОтбор.Номенклатура, ВЫБОР КОГДА НЕ &ОтображениеДеталей И ОтборРазмещениеТоваровТоварыОтбор.Ссылка.Распоряжение ССЫЛКА Документ.РасходныйОрдерНаТовары И ВЫРАЗИТЬ(ОтборРазмещениеТоваровТоварыОтбор.Ссылка.Распоряжение КАК Документ.РасходныйОрдерНаТовары).ОтгрузкаПоЗаданиюНаПеревозку ТОГДА ВЫРАЗИТЬ(ОтборРазмещениеТоваровТоварыОтбор.Ссылка.Распоряжение КАК Документ.РасходныйОрдерНаТовары).ЗаданиеНаПеревозку ИНАЧЕ ОтборРазмещениеТоваровТоварыОтбор.Ссылка.Распоряжение КОНЕЦ ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ТоварыКОтборуОстатки.Распоряжение, ТоварыКОтборуОстатки.Номенклатура КАК Номенклатура, ТоварыКОтборуОстатки.Характеристика, ТоварыКОтборуОстатки.Серия, ТоварыКОтборуОстатки.КОтборуОстаток - ТоварыКОтборуОстатки.ОтобраноОстаток - ТоварыКОтборуОстатки.ОтбираетсяОстаток КАК Количество, ВЫБОР КОГДА ТоварыКОтборуОстатки.КОтборуОстаток <= ТоварыКОтборуОстатки.ОтобраноОстаток ТОГДА 0 КОГДА ТоварыКОтборуОстатки.КОтборуОстаток <= ТоварыКОтборуОстатки.ОтобраноОстаток + ТоварыКОтборуОстатки.ОтбираетсяОстаток ТОГДА 1 КОГДА ТоварыКОтборуОстатки.КОтборуОстаток <= ТоварыВЗаданиях.КоличествоПлан ТОГДА 2 ИНАЧЕ 100 КОНЕЦ КАК Состояние, РаспоряженияНаОтбор.ДатаОтгрузки, РаспоряженияНаОтбор.Приоритет ПОМЕСТИТЬ СостоянияПоОтбираемымТоварам ИЗ ТоварыКОтборуОстатки КАК ТоварыКОтборуОстатки ЛЕВОЕ СОЕДИНЕНИЕ ТоварыВЗаданиях КАК ТоварыВЗаданиях ПО ТоварыКОтборуОстатки.Распоряжение = ТоварыВЗаданиях.Распоряжение И ТоварыКОтборуОстатки.Номенклатура = ТоварыВЗаданиях.Номенклатура И ТоварыКОтборуОстатки.Характеристика = ТоварыВЗаданиях.Характеристика И ТоварыКОтборуОстатки.Серия = ТоварыВЗаданиях.Серия ПОЛНОЕ СОЕДИНЕНИЕ РаспоряженияНаОтбор КАК РаспоряженияНаОтбор ПО ТоварыКОтборуОстатки.Распоряжение = РаспоряженияНаОтбор.Распоряжение ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ СостоянияПоТоварам.Распоряжение, СостоянияПоТоварам.Номенклатура, СостоянияПоТоварам.Характеристика, СостоянияПоТоварам.Серия, СостоянияПоТоварам.Количество, СостоянияПоТоварам.Номенклатура.СкладскаяГруппа КАК СкладскаяГруппаНоменклатуры, СостоянияПоТоварам.ДатаОтгрузки КАК ДатаОтгрузки, СостоянияПоТоварам.Приоритет КАК Приоритет ПОМЕСТИТЬ ТаблицаНоменклатуры ИЗ СостоянияПоОтбираемымТоварам КАК СостоянияПоТоварам ГДЕ СостоянияПоТоварам.Состояние = 100 |
|||
1
John83
03.07.15
✎
15:48
|
проще по порядку смотреть, какой кусок выполняется дольше и над ним уже думать
|
|||
2
mikecool
03.07.15
✎
15:48
|
а почему 30, а не 5 секунд??
|
|||
3
Fragster
гуру
03.07.15
✎
15:50
|
скачать консоль, которая замеряет отдельные куски и посмотреть. например http://devtool1c.ucoz.ru/
|
|||
4
kuznkv
03.07.15
✎
15:51
|
John83 - код обращения к регистру накоплений. Именно в нем и затык происходит. По отдельности все запросы выполняются моментом. Даже блок запроса к регистру по одному документу летает.
|
|||
5
kuznkv
03.07.15
✎
15:51
|
mikecool - можно и 5. Даже наверное лучше 5 :)
|
|||
6
kuznkv
03.07.15
✎
15:52
|
Fragster - сейчас попробую
|
|||
7
John83
03.07.15
✎
15:57
|
(4) если речь идет про РегистрНакопления.ТоварыКОтбору.Остатки
то могу только посоветовать в параметрах ВТ по возможности сузить отбор по порядку реквизитов. Т.е. отобрать по первому измерению, потом по второму и т.д. Для примера ИЗ РегистрНакопления.ЗаказыПокупателей.Остатки(,Номенклатура в (&Номенклатура) и ХарактеристикаНоменклатуры В (&Характеристика)) отработает быстрее, чем просто ИЗ РегистрНакопления.ЗаказыПокупателей.Остатки(, ХарактеристикаНоменклатуры В (&Характеристика)) |
|||
8
kuznkv
03.07.15
✎
16:00
|
(7) у меня отбор идет уже по списку отобранных распоряжений. Т.е. номенклатура отбирается по условию вхождения в распоряжение(регистратор)
|
|||
9
John83
03.07.15
✎
16:02
|
(8) какова структура регистра?
|
|||
10
kuznkv
03.07.15
✎
16:07
|
(9) Измерения:
Распоряжения Номенклатура Характеристика Серия Ресурсы: КОтбору Отбирается Отобрано Реквизиты: СерияОтобрано Упаковка ОтобраноУпаковок |
|||
11
Marine Band
03.07.15
✎
16:11
|
РегистрНакопления.ТоварыКОтбору.Остатки(
, Распоряжение В (ВЫБРАТЬ РаспоряженияНаОтбор.Распоряжение ИЗ РаспоряженияНаОтбор КАК РаспоряженияНаОтбор)) Заменить на соединение. В запросе целый кладезь неоптимального программирования. |
|||
12
John83
03.07.15
✎
16:12
|
(10) попробуй при получении своих распоряжений поставить им индекс
PS можешь заодно сравнить с (11) |
|||
13
kuznkv
03.07.15
✎
16:14
|
(11) В тестовой базе я так и сделала. Запрос выполняется также. Это первое что я поменяла. :)
|
|||
14
kuznkv
03.07.15
✎
16:14
|
(12) Ок. Попробую добавить индекс
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |