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