Имя: Пароль:
1C
 
СрезПоследних оптимизация запроса(динамический список)
,
0 prtx
 
23.11.17
17:18
Всем доброго времени суток.

Нужен совет гуру по запросам.

Описание ситуации: есть динамический список в котором отображаются остатки товаров на складе с ценами.
проблемы: при открытии формы с этим дс. форма открывается долго. т.е запрос долго шерстит бд. когда с таким дс работают более 3-4 человек одновременно очень грузит сервер.

что нужно: оптимизировать запрос. ломаю голову и немогу понять куда еще проще...

запрос
ВЫБРАТЬ
    СправочникКлючиАналитикиУчетаНоменклатуры.Ссылка КАК АналитикаУчетаНоменклатуры,
    ПРЕДСТАВЛЕНИЕ(СправочникКлючиАналитикиУчетаНоменклатуры.Номенклатура) КАК Номенклатура,
    ПРЕДСТАВЛЕНИЕ(СправочникКлючиАналитикиУчетаНоменклатуры.СерияНоменклатуры) КАК СерияНоменклатуры,
    ТоварыНаСкладахОстатки.КоличествоОстаток КАК Количество,
    РозничныеЦеныНоменклатурыСрезПоследних.Цена КАК Цена
ИЗ
    РегистрНакопления.ТоварыНаСкладах.Остатки(, Склад = &Склад) КАК ТоварыНаСкладахОстатки
        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.КлючиАналитикиУчетаНоменклатуры КАК СправочникКлючиАналитикиУчетаНоменклатуры
        ПО ТоварыНаСкладахОстатки.АналитикаУчетаНоменклатуры = СправочникКлючиАналитикиУчетаНоменклатуры.Ссылка
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РозничныеЦеныНоменклатуры.СрезПоследних(, Склад = &Склад) КАК РозничныеЦеныНоменклатурыСрезПоследних
        ПО ТоварыНаСкладахОстатки.АналитикаУчетаНоменклатуры = РозничныеЦеныНоменклатурыСрезПоследних.АналитикаУчетаНоменклатуры

методом тыка было выявлено, что проблема возникает при получении цены товара, ибо тотже запрос только без соединения с РозничныеЦеныНоменклатурыСрезПоследних.Цена летает - 0,17 секунды, а вот когда мы тяним из бд цену то запрос выполняется 16,5 секунд. разница примерно в 10 раз. это КАТАСТРОФА!

ЧТО ПОСОВЕТУЕТЕ?

1с 8.3 управляемые формы
1 DrShad
 
23.11.17
17:21
а справочник ключей зачем?
2 Buster007
 
23.11.17
17:24
РегистрНакопления.ТоварыНаСкладах.Остатки(, Склад = &Склад) КАК ТоварыНаСкладахОстатки
положить в вт
3 Timon1405
 
23.11.17
17:24
(1) для уменьшения количества измерений в регистрах накопления
4 prtx
 
23.11.17
17:24
(1) что бы избежать работы через "две точки".
5 prtx
 
23.11.17
17:25
(2) временная не катит т.к. динамический список. не можно.((
6 ИТ директор
 
23.11.17
17:28
(5) с какой-то версии уже можно...
1. Переписать запрос к ВТ среза на обычный запрос.
2. Положить его результат в ВТ, чтобы избежать соединения с подзапросом.
7 Buster007
 
23.11.17
17:34
(5) у меня можно
8 DrShad
 
23.11.17
17:34
(3) тогда бы с РС аналитики соединяли
9 prtx
 
23.11.17
17:34
(6) ага нашел. с 8,3,8 можно а у мну 8,3,7. ну попробуем, но а какже раньше работали?(
10 DrShad
 
23.11.17
17:35
у меня вот такой запрос работает на ура

ВЫБРАТЬ
    Товары.Ссылка КАК Ссылка,
    ХарактеристикиНоменклатуры.Ссылка КАК Характеристика,
    ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) КАК Остаток,
    ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0) КАК Цена
{ВЫБРАТЬ
    Ссылка.*,
    Характеристика.*,
    Остаток,
    Цена}
ИЗ
    Справочник.Номенклатура КАК Товары
        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ХарактеристикиНоменклатуры КАК ХарактеристикиНоменклатуры
        ПО Товары.Ссылка = ХарактеристикиНоменклатуры.Владелец
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки
        ПО Товары.Ссылка = ТоварыНаСкладахОстатки.Номенклатура
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, {(ТипЦен = &ВидЦен)}) КАК ЦеныНоменклатурыСрезПоследних
        ПО Товары.Ссылка = ЦеныНоменклатурыСрезПоследних.Номенклатура
{ГДЕ
    Товары.Ссылка.* КАК Номенклатура,
    ХарактеристикиНоменклатуры.Ссылка.* КАК Характеристика,
    (ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0)) КАК Остаток,
    (ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0)) КАК Цена}
11 Жан Пердежон
 
23.11.17
17:37
(6) херовенько так работали.
одну платформу обновить мало, возможно ещё и режим совместимости конфы менять придется
12 Михаил Козлов
 
23.11.17
17:51
Не понял зачем соединение РН ТоварыНаСкладах со справочником КлючиАналитикиУчетаНоменклатуры, если ключ аналитики уже в измерении регистра.
13 АнализДанных
 
23.11.17
18:02
(12) +1
(0) Если сделаешь, через временные таблицы, то добавь ещё отбор по этой ВТ в параметры виртуальной таблицы "цены":

РегистрСведений.РозничныеЦеныНоменклатуры.СрезПоследних(АналитикаУчетаНоменклатуры в (вт.АналитикаУчетаНоменклатуры), Склад = &Склад) КАК РозничныеЦеныНоменклатурыСрезПоследних
14 Мыш
 
23.11.17
18:05
(0) В принципе неправильный подход. Надо как 1С рекомендует. Оно сильно быстрее.
15 lodger
 
23.11.17
18:07
(12) +1
(13) где ему вт взять на 8.3.7?
(14) а как 1С рекомендует?
16 Мыш
 
23.11.17
18:13
(15) Руководство разработчика: 7.3.1.7. Дополнительная обработка данных, получаемых динамическим списком
17 h-sp
 
23.11.17
20:27
попробуйте у реквизита АналитикаУчетаНоменклатуры поставить галочку Индексирование
18 H A D G E H O G s
 
23.11.17
20:29
Итоги то у регистра сведений  включили?