Имя: Пароль:
   
1C
1С v8
Оптимизировать запрос ДС в Рознице
0 егаис
 
30.04.18
18:17
Форма подбора товаров, надо выводить остаток и цену.
После ТиИ работает быстро некоторое время, потом начинаются ужасные тормоза.  База на постгри
Можно ли ак-то оптимизировать запрос?

ВЫБРАТЬ РАЗРЕШЕННЫЕ
    ТоварыНаСкладахОстатки0.КоличествоОстаток - ТоварыНаСкладахОстатки0.РезервОстаток КАК Склад0,
    ЦеныНоменклатурыЗакупочная.Цена КАК ЦенаЗакупочная,
    ЦеныНоменклатурыРозничная.Цена КАК ЦенаРозничная,
    ВЫРАЗИТЬ((ЦеныНоменклатурыРозничная.Цена / ЦеныНоменклатурыЗакупочная.Цена - 1) * 100 КАК ЧИСЛО(15,2)) КАК ПроцентНаценки,
    СправочникНоменклатура.Ссылка КАК Номенклатура,
    СправочникНоменклатура.ВидНоменклатуры КАК ВидНоменклатуры,
    СправочникНоменклатура.Марка КАК Марка,
    СправочникНоменклатура.ТоварнаяКатегория КАК ТоварнаяКатегория,
    СправочникНоменклатура.ТипНоменклатуры КАК ТипНоменклатуры,
    СправочникНоменклатура.Родитель КАК Родитель,
    СправочникНоменклатура.ВидНоменклатуры.ИспользованиеХарактеристик КАК ИспользованиеХарактеристик,
    СправочникНоменклатура.ЭтоГруппа КАК ЭтоГруппа,
    СправочникНоменклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
    ВЫБОР
        КОГДА СправочникНоменклатура.ЭтоГруппа
            ТОГДА ВЫБОР
                    КОГДА СправочникНоменклатура.ПометкаУдаления
                        ТОГДА 7
                    ИНАЧЕ 6
                КОНЕЦ
        ИНАЧЕ ВЫБОР
                КОГДА СправочникНоменклатура.ПометкаУдаления
                    ТОГДА 1
                ИНАЧЕ 0
            КОНЕЦ + ВЫБОР
                КОГДА СправочникНоменклатура.ВидНоменклатуры.ИспользованиеХарактеристик = ЗНАЧЕНИЕ(Перечисление.ВариантыВеденияДополнительныхДанныхПоНоменклатуре.НеИспользовать)
                    ТОГДА 0
                ИНАЧЕ 2
            КОНЕЦ
    КОНЕЦ КАК ИндексКартинки,
    СправочникНоменклатура.КиЗГИСМ,
    СправочникНоменклатура.ПродукцияМаркируемаяДляГИСМ,
    СправочникНоменклатура.ОсобенностьУчета,
    СправочникНоменклатура.ДоговорПлатежногоАгента
ИЗ
    Справочник.Номенклатура КАК СправочникНоменклатура
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(&ДатаОстатка, Склад = &Склад0) КАК ТоварыНаСкладахОстатки0
            ПО СправочникНоменклатура.Ссылка = ТоварыНаСкладахОстатки0.Номенклатура
        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            ЦеныНоменклатуры.Номенклатура КАК Номенклатура,
            МАКСИМУМ(ЦеныНоменклатуры.Цена) КАК Цена
        ИЗ
            РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаОстатка, ВидЦены = &ВидЦеныРозничная) КАК ЦеныНоменклатуры
        
        СГРУППИРОВАТЬ ПО
            ЦеныНоменклатуры.Номенклатура) КАК ЦеныНоменклатурыРозничная
        ПО СправочникНоменклатура.Ссылка = ЦеныНоменклатурыРозничная.Номенклатура
{ГДЕ
    (СправочникНоменклатура.Ссылка В
            (ВЫБРАТЬ
                Сегменты.Номенклатура
            ИЗ
                РегистрСведений.НоменклатураСегмента КАК Сегменты
            ГДЕ
                Сегменты.Сегмент = &СегментНоменклатуры))}
1 2S
 
30.04.18
18:22
Запрос неполный. Порезано еще одно левое соединение похоже?
2 triviumfan
 
30.04.18
18:35
С виду криминального ничего нет. Может статистика кривая или индексы. Нужен план запроса.
3 mexanik_96
 
01.05.18
04:18
"Форма подбора товаров" - дин список?
4 DmVl76
 
02.05.18
10:18
(0) Статистика/индексы пересчитываются?

Можно попробовать список номенклатуры с наложенным фильтром  в ВТ, запросы к регистрам тоже убрать из левых соединений в ВТ с фильтром по номенклатуре в условиях виртуальной таблицы.