Имя: Пароль:
1C
 
Как ускорить выполнение запроса
0 nikoslav
 
22.08.19
16:47
Как ускорить выполнение этого запроса?

    "ВЫБРАТЬ
    |    ПартииТоваровНаСкладахОстатки.Номенклатура,
    |    ПартииТоваровНаСкладахОстатки.Склад,
    |    ПартииТоваровНаСкладахОстатки.СерияНоменклатуры,
    |    ПартииТоваровНаСкладахОстатки.ДокументОприходования,
    |    ПартииТоваровНаСкладахОстатки.Качество,
    |    ПартииТоваровНаСкладахОстатки.СтатусПартии
    |ПОМЕСТИТЬ ВТ_МинусоваяНоменклатура
    |ИЗ
    |    РегистрНакопления.ПартииТоваровНаСкладах.Остатки(&Дата1, Склад В ИЕРАРХИИ (&Склады)) КАК ПартииТоваровНаСкладахОстатки
    |ГДЕ
    |    ВЫБОР
    |            КОГДА &ВыбНоменкл <> НЕОПРЕДЕЛЕНО
    |                ТОГДА ПартииТоваровНаСкладахОстатки.Номенклатура В ИЕРАРХИИ (&ВыбНоменкл)
    |            ИНАЧЕ ИСТИНА
    |        КОНЕЦ
    |    И (ПартииТоваровНаСкладахОстатки.КоличествоОстаток < 0
    |            ИЛИ ПартииТоваровНаСкладахОстатки.СтоимостьОстаток < 0)
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |    ПартииТоваровНаСкладахОстатки.Номенклатура.Код КАК Код,
    |    ПартииТоваровНаСкладахОстатки.Номенклатура,
    |    ПартииТоваровНаСкладахОстатки.Склад,
    |    ПартииТоваровНаСкладахОстатки.ХарактеристикаНоменклатуры,
    |    ПартииТоваровНаСкладахОстатки.СерияНоменклатуры,
    |    ПартииТоваровНаСкладахОстатки.ДокументОприходования,
    |    ПартииТоваровНаСкладахОстатки.ДокументОприходования.Дата КАК ДатаДокОприходования,
    |    ПартииТоваровНаСкладахОстатки.СтатусПартии,
    |    ПартииТоваровНаСкладахОстатки.Заказ,
    |    ПартииТоваровНаСкладахОстатки.Качество,
    |    ПартииТоваровНаСкладахОстатки.КоличествоОстаток КАК КоличествоОстаток,
    |    ПартииТоваровНаСкладахОстатки.СтоимостьОстаток
    |ИЗ
    |    РегистрНакопления.ПартииТоваровНаСкладах.Остатки(
    |            &Дата1,
    |            Склад В ИЕРАРХИИ (&Склады)
    |                И Номенклатура В
    |                    (ВЫБРАТЬ
    |                        ВТ_МинусоваяНоменклатура.Номенклатура
    |                    ИЗ
    |                        ВТ_МинусоваяНоменклатура КАК ВТ_МинусоваяНоменклатура)) КАК ПартииТоваровНаСкладахОстатки
    |
    |УПОРЯДОЧИТЬ ПО
    |    Код,
    |    КоличествоОстаток,
    |    ДатаДокОприходования";
1 mikecool
 
22.08.19
16:47
посмотреть план запроса, подумать над ним ))
2 mikecool
 
22.08.19
16:48
в первом запросе условие на номенклатуру внести в параметры вирт таблицы
3 mikecool
 
22.08.19
16:48
а зачем склад в иерархии?
4 mikecool
 
22.08.19
16:49
и зачем второй запрос?
5 unregistered
 
22.08.19
17:00
(4) Запросы разворачивают остатки по регистру в разрезе различных измерений. Во втором запросе добавляется "Заказ". Может быть они таким образом ловят развал по заказам?.... Не знаю.
6 dezss
 
22.08.19
17:03
Может еще от ИЛИ в первом попробовать избавиться?
7 Aleksandr N
 
22.08.19
17:07
(6) НЕ (НЕ ПартииТоваровНаСкладахОстатки.КоличествоОстаток < 0
И НЕ ПартииТоваровНаСкладахОстатки.СтоимостьОстаток < 0)
Так?
:-)
8 dezss
 
22.08.19
17:11
(7) Отличный вариант)))
9 timurhv
 
22.08.19
17:40
(0) Покажите структуру регистра по измерениям: ПартииТоваровНаСкладах
10 timurhv
 
22.08.19
17:47
(0), (9) Отрабатывает долго именно первый пакет?
11 unenu
 
22.08.19
17:50
извюавится от условия Склад В ИЕРАРХИИ (&Склады)

примерно так

ВЫБРАТЬ РАЗРЕШЕННЫЕ
    ТаблСклады.Ссылка КАК СкладОтбора
ПОМЕСТИТЬ ВтСклады
{ВЫБРАТЬ
    СкладОтбора.*}
ИЗ
    Справочник.Склады КАК ТаблСклады
ГДЕ
    НЕ ТаблСклады.ЭтоГруппа
        И ТаблСклады.Склад В ИЕРАРХИИ (&Склады)
{ГДЕ
    ТаблСклады.Ссылка.* КАК СкладОтбора}

ИНДЕКСИРОВАТЬ ПО
    СкладОтбора

....
    РегистрНакопления.ПартииТоваровНаСкладах.Остатки(&Дата1,
                И Склад В
                    (ВЫБРАТЬ
                        СкладОтбора.СкладОтбора
                    ИЗ
                        СкладОтбора))

поле именно СкладОтбора в ВТ, т.е. отличное от Склад, тогда, если это запрос в СКД, то она(СКД)
не будет генерить отборы в Иерархии.

Даже если это не СКД, то именно такой подход даст результат. остальные напильники играют меньшую роль
12 unenu
 
22.08.19
17:55
уточню

И Склад В
БРАТЬ
       ВтСклады.СкладОтбора
           ИЗ
          ВтСклады

условие с иерархия сама по себе зло, а на талицах в сотни миллионов - зло абсолютное.
проверено именно на таких таблицах.

жаль, что в типовых не используют этот простой прием хотя бы в отчетах на СКД - это дало бы огромный прирос
производительности. Некоторые топовые отчеты УТ 11 в расширении модифицировал подобным образом и ок.
13 timurhv
 
22.08.19
17:56
(11) Это все ничто, если номенклатура стоит выше склада и не передается параметров в запрос.
14 unenu
 
22.08.19
17:57
ктати ПартииТоваровНаСкладахОстатки.Номенклатура В ИЕРАРХИИ (&ВыбНоменкл)  

условие на ВТ посадить также, иначе толку не будет.
15 unenu
 
22.08.19
18:01
(13) в праметрах вируталлной или в ГДЕ не столь важно
важно что бы не было ИЕРАРХИЙ в условиях

возьмите консоль, планы запросов, замеры, виртуальную таблицу в пару сотен миллионов строк
и потом приходите со своим ничто еще.

миф о строгой необходимости толкать условия в параметры виртуальной таблицы - лишь миф методистов.

как его развенчать я вам сказал возьмите ....
16 timurhv
 
22.08.19
18:02
(15) рука-лицо
17 timurhv
 
22.08.19
18:04
(15) если вы не передаете в параметры виртуальной таблицы номенклатуру, а передаете только склад, то у вас не используется кластерный индекс. Тогда да, без разницы указать в параметрах склад или в ГДЕ.
18 unenu
 
22.08.19
18:07
(17) примерно это я имел ввиду когда резюмировал

"остальные напильники играют меньшую роль"

важно устранить главную причину тормозов, а когда слон пал, то тогда можно пнуть и моську)
19 timurhv
 
22.08.19
18:12
(18) Что больше дает тормозов уже зависит от количества номенклатуры в справочнике и складов.
AdBlock убивает бесплатный контент. 1Сергей