Имя: Пароль:
1C
 
Как ускорить выполнение запроса?
0 Энштейн 1С
 
02.09.19
11:27
Данный запрос выдернут из большого запроса, потому что именно он выполняется дольше всех других запросов. Прошу указать что необходимо исправить чтобы ускорить выполнение запроса?

ВЫБРАТЬ
    ГрафикиРаботыПоВидамВремени.Дата КАК Период,
    ГрафикиРаботыПоВидамВремени.ГрафикРаботы.Ссылка КАК Сотрудник,
    СУММА(ГрафикиРаботыПоВидамВремени.ОсновноеЗначение) КАК ЧасовЯвки

ИЗ
    РегистрСведений.ГрафикиРаботыПоВидамВремени КАК ГрафикиРаботыПоВидамВремени
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РабочееВремяРаботников КАК РабочееВремяРаботников
        ПО ГрафикиРаботыПоВидамВремени.ГрафикРаботы.Ссылка = РабочееВремяРаботников.Сотрудник
            И ГрафикиРаботыПоВидамВремени.Дата = РабочееВремяРаботников.Период
ГДЕ
    ГрафикиРаботыПоВидамВремени.Дата МЕЖДУ &НачалоПериода И &КонецПериода
    И ГрафикиРаботыПоВидамВремени.ГрафикРаботы.Организация = &Организация
    И ГрафикиРаботыПоВидамВремени.ГрафикРаботы.Ссылка В
            (ВЫБРАТЬ
                Т.Сотрудник
            ИЗ
                ВТСотрудникиПодразделения КАК Т)
    И ГрафикиРаботыПоВидамВремени.ВидУчетаВремени = ЗНАЧЕНИЕ(Перечисление.ВидыУчетаВремени.ПоЧасам)
    И ГрафикиРаботыПоВидамВремени.План = ЛОЖЬ

СГРУППИРОВАТЬ ПО
    ГрафикиРаботыПоВидамВремени.Дата,
    ГрафикиРаботыПоВидамВремени.ГрафикРаботы.Ссылка
1 Энштейн 1С
 
02.09.19
11:28
(0) + Конфигурация ЗУП 2.5 КОРП сильно доработанная
2 novichok79
 
02.09.19
11:29
вот это

    ГрафикиРаботыПоВидамВремени.Дата МЕЖДУ &НачалоПериода И &КонецПериода
    И ГрафикиРаботыПоВидамВремени.ГрафикРаботы.Организация = &Организация

во внутреннее соединение
3 aleks_default
 
02.09.19
11:29
"ГрафикиРаботыПоВидамВремени.ГрафикРаботы.Ссылка КАК Сотрудник" График работы это у вас сотрудник?
4 novichok79
 
02.09.19
11:30
вот это

            (ВЫБРАТЬ
                Т.Сотрудник
            ИЗ
                ВТСотрудникиПодразделения КАК Т)

в отдельный вложенный запрос
5 bolobol
 
02.09.19
11:30
.ГрафикРаботы.Ссылка = РабочееВремяРаботников.Сотрудник

.ГрафикРаботы.Организация = &Организация

.ГрафикРаботы.Ссылка В

Двойные точки - сомнительны
Индексирование по соединяемым реквизитам
6 aleks_default
 
02.09.19
11:31
надо вот так.
ГрафикиРаботыПоВидамВремени.ГрафикРаботы.Ссылка.Ссылка
7 такт
 
02.09.19
11:32
РегистрСведений.ГрафикиРаботыПоВидамВремени  - в ВТ с полями ГрафикРаботы.Организация и ГрафикРаботы.Ссылка
8 bolobol
 
02.09.19
11:32
+(6) И чем больше ".Ссылка.Ссылка" - тем быстрее! Только запрос ли...
9 novichok79
 
02.09.19
11:33
план запроса в студию, что уж там
10 Вафель
 
02.09.19
11:34
(2) Разницы нет
11 bolobol
 
02.09.19
11:36
(10) Есть, насколько помню. <> и Между мимо индексов идут, их в соединения не ставят
12 novichok79
 
02.09.19
11:44
почему бы вот это

ГДЕ
    ГрафикиРаботыПоВидамВремени.Дата МЕЖДУ &НачалоПериода И &КонецПериода
    И ГрафикиРаботыПоВидамВремени.ГрафикРаботы.Организация = &Организация
    И ГрафикиРаботыПоВидамВремени.ГрафикРаботы.Ссылка В
            (ВЫБРАТЬ
                Т.Сотрудник
            ИЗ
                ВТСотрудникиПодразделения КАК Т)
    И ГрафикиРаботыПоВидамВремени.ВидУчетаВремени = ЗНАЧЕНИЕ(Перечисление.ВидыУчетаВремени.ПоЧасам)
    И ГрафикиРаботыПоВидамВремени.План = ЛОЖЬ

не вынести в отдельную ВТ
а потом делать внутреннее соединение чисто по сотруднику?
13 timurhv
 
02.09.19
11:46
(0) Измерение "ГрафикРаботы" - составной, выражайте как ссылку сотрудника.
"ПО ВЫРАЗИТЬ(ГрафикиРаботыПоВидамВремени.ГрафикРаботы КАК ...) = РабочееВремяРаботников.Сотрудник"
"Дата" находится в измерении  5-ой строчкой, у вас пропущены:
Месяц
План
ВидУчетаВремени
14 timurhv
 
02.09.19
11:53
ВЫБРАТЬ
    ГрафикиРаботыПоВидамВремени.Дата КАК Период,
    ВЫРАЗИТЬ(ГрафикиРаботыПоВидамВремени.ГрафикРаботы КАК Справочник.Сотрудники) КАК Сотрудник,
    СУММА(ГрафикиРаботыПоВидамВремени.ОсновноеЗначение) КАК ЧасовЯвки

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

СГРУППИРОВАТЬ ПО
    ГрафикиРаботыПоВидамВремени.Дата,
    ВЫРАЗИТЬ(ГрафикиРаботыПоВидамВремени.ГрафикРаботы КАК Справочник.Сотрудники)
15 timurhv
 
02.09.19
11:56
(14) еще наверное добавить:
И ГрафикиРаботыПоВидамВремени.Месяц = НачалоПериода(РабочееВремяРаботников.Период, Месяц)
16 Энштейн 1С
 
02.09.19
12:13
(14) Выдает следующую ошибку:

{ВнешняяОбработка.Запросник.Форма.Форма.Форма(758)}: Ошибка при вызове метода контекста (Выполнить): {(15, 7)}: Таблица не найдена "Справочник.Сотрудники"
И <<?>>ВЫРАЗИТЬ(ГрафикиРаботыПоВидамВремени.ГрафикРаботы КАК Справочник.Сотрудники).Организация = &Организация
17 timurhv
 
02.09.19
12:15
(16) я писал вслепую, укажите название справочника как в метаданных.
18 bolobol
 
02.09.19
12:33
(14) А ВЫРАЗИТЬ в соединении сервер не положит?
19 timurhv
 
02.09.19
12:46
(18) да, возможно будет лишним.
20 bolobol
 
02.09.19
12:53
(19) По идее, 1С должна бы построить всего одно соединение к нужной таблице, но на практике получается, что без ВЫРАЗИТЬ - до пары порядков быстрее запросится.
21 xXeNoNx
 
02.09.19
13:13
(0) а что ВР, сказал по этому поводу?
22 bolobol
 
02.09.19
13:32
(21) В топике всего 20 сообщений. Уверен, что сам не разберёшься?
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.