Имя: Пароль:
1C
1С v8
Оптимизация запроса ЗадачиМне в 1С ДО
0 zippygrill
 
02.08.23
13:58
Привет,
Подскажите, пжста, на ваш взгляд какие у запроса узкие моменты ( ниже запрос только на стороне sql ) и как его оптимизировать?
Запрос выводит список задач пользователя и в него я подключил новую область делегирования "ПроцессыИЗадачиКассовыеДокументы" путем условия запроса


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


сам запрос 1с целиком


ВЫБРАТЬ
    ЗадачаИсполнителя.Ссылка КАК Ссылка,
    ЗадачаИсполнителя.Дата КАК Дата,
    ЗадачаИсполнителя.БизнесПроцесс КАК БизнесПроцесс,
    ЗадачаИсполнителя.ТочкаМаршрута КАК ТочкаМаршрута,
    ЗадачаИсполнителя.Наименование КАК Наименование,
    ЗадачаИсполнителя.Выполнена КАК Выполнена,
    ЗадачаИсполнителя.СрокИсполнения КАК СрокИсполнения,
    ВЫБОР
        КОГДА НЕ &ИспользоватьДатуИВремяВСрокахЗадач
                И ЗадачаИсполнителя.СрокИсполнения <> ДАТАВРЕМЯ(1, 1, 1)
            ТОГДА КОНЕЦПЕРИОДА(ЗадачаИсполнителя.СрокИсполнения, ДЕНЬ)
        ИНАЧЕ ЗадачаИсполнителя.СрокИсполнения
    КОНЕЦ КАК СрокИсполненияДляОтображенияВСписке,
    ЗадачаИсполнителя.ПредметСтрокой КАК ПредметСтрокой,
    ЗадачаИсполнителя.Автор КАК Автор,
    ЗадачаИсполнителя.ПринятаКИсполнению КАК ПринятаКИсполнению,
    ВЫБОР
        КОГДА ЗадачаИсполнителя.Важность = ЗНАЧЕНИЕ(Перечисление.ВариантыВажностиЗадачи.Низкая)
            ТОГДА 0
        КОГДА ЗадачаИсполнителя.Важность = ЗНАЧЕНИЕ(Перечисление.ВариантыВажностиЗадачи.Высокая)
            ТОГДА 2
        ИНАЧЕ 1
    КОНЕЦ КАК ВажностьКартинка,
    ВЫБОР
        КОГДА ЗадачаИсполнителя.Проект = ЗНАЧЕНИЕ(Справочник.Проекты.ПустаяСсылка)
            ТОГДА &ИмяГруппыБезПроекта
        ИНАЧЕ ЗадачаИсполнителя.Проект
    КОНЕЦ КАК Проект,
    ЕСТЬNULL(ФлагиОбъектов.Флаг, ЗНАЧЕНИЕ(Перечисление.ФлагиОбъектов.ПустаяСсылка)) КАК Флаг,
    ВЫБОР
        КОГДА ФлагиОбъектов.Флаг = ЗНАЧЕНИЕ(Перечисление.ФлагиОбъектов.Красный)
            ТОГДА 1
        КОГДА ФлагиОбъектов.Флаг = ЗНАЧЕНИЕ(Перечисление.ФлагиОбъектов.Синий)
            ТОГДА 2
        КОГДА ФлагиОбъектов.Флаг = ЗНАЧЕНИЕ(Перечисление.ФлагиОбъектов.Желтый)
            ТОГДА 3
        КОГДА ФлагиОбъектов.Флаг = ЗНАЧЕНИЕ(Перечисление.ФлагиОбъектов.Зеленый)
            ТОГДА 4
        КОГДА ФлагиОбъектов.Флаг = ЗНАЧЕНИЕ(Перечисление.ФлагиОбъектов.Оранжевый)
            ТОГДА 5
        КОГДА ФлагиОбъектов.Флаг = ЗНАЧЕНИЕ(Перечисление.ФлагиОбъектов.Лиловый)
            ТОГДА 6
        ИНАЧЕ 0
    КОНЕЦ КАК НомерФлага,
    ЗадачаИсполнителя.Исполнитель КАК Исполнитель,
    ВЫБОР
        КОГДА ЗадачиДляВыполнения.СостояниеВыполнения = ЗНАЧЕНИЕ(Перечисление.СостоянияЗадачДляВыполнения.ВыполнениеОтменено)
            ТОГДА 9
        КОГДА РезультатыВыполненияПроцессовИЗадач.Результат = ЗНАЧЕНИЕ(Перечисление.ВариантыВыполненияПроцессовИЗадач.Положительно)
            ТОГДА 7
        КОГДА РезультатыВыполненияПроцессовИЗадач.Результат = ЗНАЧЕНИЕ(Перечисление.ВариантыВыполненияПроцессовИЗадач.ПоложительноСЗамечаниями)
            ТОГДА 6
        КОГДА РезультатыВыполненияПроцессовИЗадач.Результат = ЗНАЧЕНИЕ(Перечисление.ВариантыВыполненияПроцессовИЗадач.Отрицательно)
            ТОГДА 5
        КОГДА ЗадачаИсполнителя.Выполнена = ИСТИНА
            ТОГДА 4
        ИНАЧЕ -1
    КОНЕЦ КАК РезультатЗавершения,
    ВЫБОР
        КОГДА КешИнформацииОбОбъектах.СостояниеКонтроля = ЗНАЧЕНИЕ(Перечисление.СостоянияКонтроля.НаКонтроле)
            ТОГДА ВЫБОР
                    КОГДА КешИнформацииОбОбъектах.СрокИсполнения = ДАТАВРЕМЯ(1, 1, 1)
                            ИЛИ КешИнформацииОбОбъектах.СрокИсполнения >= &ТекущаяДата
                        ТОГДА 1
                    ИНАЧЕ 3
                КОНЕЦ
        КОГДА КешИнформацииОбОбъектах.СостояниеКонтроля = ЗНАЧЕНИЕ(Перечисление.СостоянияКонтроля.СнятсКонтроля)
            ТОГДА 4
        КОГДА КешИнформацииОбОбъектах.СостояниеКонтроля = ЗНАЧЕНИЕ(Перечисление.СостоянияКонтроля.НаКонтролеНесколько)
            ТОГДА ВЫБОР
                    КОГДА КешИнформацииОбОбъектах.СрокИсполнения = ДАТАВРЕМЯ(1, 1, 1)
                            ИЛИ КешИнформацииОбОбъектах.СрокИсполнения >= &ТекущаяДата
                        ТОГДА 5
                    КОГДА КешИнформацииОбОбъектах.СрокИсполненияОбщий = ДАТАВРЕМЯ(1, 1, 1)
                            ИЛИ КешИнформацииОбОбъектах.СрокИсполненияОбщий >= &ТекущаяДата
                        ТОГДА 8
                    ИНАЧЕ 6
                КОНЕЦ
        КОГДА КешИнформацииОбОбъектах.СостояниеКонтроля = ЗНАЧЕНИЕ(Перечисление.СостоянияКонтроля.СнятсКонтроляНесколько)
            ТОГДА 7
        КОГДА КешИнформацииОбОбъектах.СостояниеКонтроля = ЗНАЧЕНИЕ(Перечисление.СостоянияКонтроля.СмешанноНесколько)
            ТОГДА ВЫБОР
                    КОГДА КешИнформацииОбОбъектах.СрокИсполнения = ДАТАВРЕМЯ(1, 1, 1)
                            ИЛИ КешИнформацииОбОбъектах.СрокИсполнения >= &ТекущаяДата
                        ТОГДА 9
                    ИНАЧЕ 10
                КОНЕЦ
        ИНАЧЕ 0
    КОНЕЦ КАК СостояниеКонтроля,
    ВЫБОР
        КОГДА ЗадачаИсполнителя.ТекущийИсполнитель = &ТекущийПользователь
            ТОГДА -1
        КОГДА МоиРоли.РольИсполнителя ЕСТЬ NULL
            ТОГДА 3
        ИНАЧЕ 4
    КОНЕЦ КАК Картинка,
    ЗадачаИсполнителя.ДатаИсполнения КАК ДатаИсполнения,
    ЗадачиДляВыполнения.СостояниеВыполнения КАК СостояниеВыполнения,
    ПредметыЗадач.Предмет КАК Предмет,
    ЕСТЬNULL(ПредметыЗадач.Предмет, &СтрокаБезПредмета) КАК ПредметЗаголовок,
    ВЫБОР
        КОГДА ЗадачиСПодзадачами.Задача ЕСТЬ NULL
            ТОГДА ЛОЖЬ
        ИНАЧЕ ИСТИНА
    КОНЕЦ КАК ЕстьПодзадачи,
    ПредметыЗадач.Предмет.ДатаРегистрации КАК ДатаРегистрации
ИЗ
    Задача.ЗадачаИсполнителя КАК ЗадачаИсполнителя
        ЛЕВОЕ СОЕДИНЕНИЕ Задача.ЗадачаИсполнителя.Предметы КАК ПредметыЗадач
        ПО ЗадачаИсполнителя.Ссылка = ПредметыЗадач.Ссылка
            И (ПредметыЗадач.РольПредмета = ЗНАЧЕНИЕ(Перечисление.РолиПредметов.Основной))
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ФлагиОбъектов КАК ФлагиОбъектов
        ПО ЗадачаИсполнителя.Ссылка = ФлагиОбъектов.Объект
            И (ФлагиОбъектов.Пользователь = &ТекущийПользователь)
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РезультатыВыполненияПроцессовИЗадач КАК РезультатыВыполненияПроцессовИЗадач
        ПО ЗадачаИсполнителя.Ссылка = РезультатыВыполненияПроцессовИЗадач.Объект
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КешИнформацииОбОбъектах КАК КешИнформацииОбОбъектах
        ПО ЗадачаИсполнителя.Ссылка = КешИнформацииОбОбъектах.Объект
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗадачиДляВыполнения КАК ЗадачиДляВыполнения
        ПО ЗадачаИсполнителя.Ссылка = ЗадачиДляВыполнения.Задача
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ИсполнителиЗадач КАК МоиРоли
        ПО ЗадачаИсполнителя.ТекущийИсполнитель = МоиРоли.РольИсполнителя
            И (МоиРоли.Исполнитель = &ТекущийПользователь)
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗадачиСПодзадачами КАК ЗадачиСПодзадачами
        ПО ЗадачаИсполнителя.Ссылка = ЗадачиСПодзадачами.Задача
ГДЕ
    ЗадачаИсполнителя.СостояниеБизнесПроцесса = ЗНАЧЕНИЕ(Перечисление.СостоянияБизнесПроцессов.Активен)
    И ЕСТЬNULL(ЗадачиДляВыполнения.СостояниеВыполнения, НЕОПРЕДЕЛЕНО) <> ЗНАЧЕНИЕ(Перечисление.СостоянияЗадачДляВыполнения.ГотоваКВыполнению)
    И НЕ ЗадачаИсполнителя.ПометкаУдаления
    И НЕ ЗадачаИсполнителя.ИсключенаИзПроцесса
    И (ИСТИНА В
                (ВЫБРАТЬ ПЕРВЫЕ 1
                    ИСТИНА
                ИЗ
                    РегистрСведений.ИсполнителиРолейИДелегаты КАК ИсполнителиРолейИДелегаты
                ГДЕ
                    ИсполнителиРолейИДелегаты.РольПользователь = ЗадачаИсполнителя.ТекущийИсполнитель
                    И ИсполнителиРолейИДелегаты.ИсполнительДелегат = &ТекущийПользователь
                    И ИсполнителиРолейИДелегаты.ИмяОбластиДелегирования В ("", "ПроцессыИЗадачи"))
            ИЛИ ИСТИНА В
                    (ВЫБРАТЬ ПЕРВЫЕ 1
                        ИСТИНА
                    ИЗ
                        РегистрСведений.ИсполнителиРолейИДелегаты КАК ИсполнителиРолейИДелегаты
                    ГДЕ
                        ИсполнителиРолейИДелегаты.РольПользователь = ЗадачаИсполнителя.ТекущийИсполнитель
                        И ИсполнителиРолейИДелегаты.ИсполнительДелегат = &ТекущийПользователь
                        И ИсполнителиРолейИДелегаты.ИмяОбластиДелегирования В ("", "ПроцессыИЗадачиКассовыеДокументы"))
                И ПредметыЗадач.Предмет.ВидДокумента В (&ВидПредмета_КассовыеДокументы))

{ГДЕ
    (ЗадачаИсполнителя.Выполнена = &Выполнена) КАК Поле2,
    (ЗадачаИсполнителя.СрокИсполнения < &ДатаДляОтображенияПросроченных
            И ЗадачаИсполнителя.СрокИсполнения > ДАТАВРЕМЯ(1, 1, 1)) КАК Поле4,
    (КОНЕЦПЕРИОДА(ПредметыЗадач.Предмет.ДатаРегистрации, ДЕНЬ) = КОНЕЦПЕРИОДА(&ДатаРегистрации, ДЕНЬ)) КАК Поле6,
    (ЗадачаИсполнителя.ПринятаКИсполнению = &ОтображатьСтарыеЗадачи) КАК Поле8}
1 zippygrill
 
02.08.23
14:00
Подозрение падает на условие
И ПредметыЗадач.Предмет.ВидДокумента В (&ВидПредмета_КассовыеДокументы))

Вполне вероятно что на стороне скуля ПредметыЗадач.Предмет начинает соединятся с каждым внутренним документом..
2 zippygrill
 
02.08.23
14:11
запрос на стороне скуля

(P1 varbinary(16),@P2 numeric(10),@P3 varbinary(16),@P4 numeric(10),@P5 numeric(10),@P6 varbinary(16),@P7 numeric(10),@P8 varbinary(16),@P9 numeric(10),P10 varbinary(16),P11 numeric(10),P12 varbinary(16),P13 numeric(10),P14 varbinary(16),P15 numeric(10),P16 varbinary(16),P17 numeric(10),P18 numeric(10),P19 varbinary(16),@P20 numeric(10),@P21 varbinary(16),@P22 numeric(10),@P23 varbinary(16),@P24 numeric(10),@P25 varbinary(16),@P26 numeric(10),@P27 numeric(10),@P28 numeric(10),@P29 varbinary(16),@P30 datetime2(3),@P31 datetime2(3),@P32 numeric(10),@P33 numeric(10),@P34 varbinary(16),@P35 numeric(10),@P36 varbinary(16),@P37 datetime2(3),@P38 datetime2(3),@P39 numeric(10),@P40 datetime2(3),@P41 datetime2(3),@P42 numeric(10),@P43 numeric(10),@P44 varbinary(16),@P45 numeric(10),@P46 varbinary(16),@P47 datetime2(3),@P48 datetime2(3),@P49 numeric(10),@P50 numeric(10),@P51 numeric(10),@P52 varbinary(16),@P53 numeric(10),@P54 numeric(10),@P55 numeric(10),@P56 nvarchar(4000),@P57 nvarchar(4000),@P58 varbinary(16),@P59 numeric(10),@P60 varbinary(16),@P61 numeric(10),@P62 varbinary(16),@P63 numeric(10),@P64 numeric(10),@P65 numeric(10),@P66 varbinary(16),@P67 numeric(10),@P68 numeric(10),@P69 numeric(10),@P70 numeric(10),@P71 numeric(10),@P72 varbinary(16),@P73 varbinary(16),@P74 numeric(10),@P75 varbinary(16),@P76 nvarchar(4000),@P77 nvarchar(4000),@P78 numeric(10),@P79 varbinary(16),@P80 nvarchar(4000),@P81 nvarchar(4000),@P82 varbinary(16),@P83 varbinary(16),@P84 varbinary(16),@P85 varbinary(16),@P86 varbinary(16),@P87 varbinary(16))SELECT TOP 30 T1._IDRRef, T1._Date_Time, T1._BusinessProcess_TYPE, T1._BusinessProcess_RTRef, T1._BusinessProcess_RRRef, T1._Point_TYPE, T1._Point_RTRef, T1._Point_RRRef, T1._Name, T1._Executed, T1._Fld14247, T1._Fld14247, T1._Fld14232RRef, T1._Fld14242, CASE WHEN (T1._Fld14233RRef = P1) THEN @P2 WHEN (T1._Fld14233RRef = @P3) THEN @P4 ELSE @P5 END, ISNULL(T3._Fld8138RRef,0x00000000000000000000000000000000), CASE WHEN (T3._Fld8138RRef = @P6) THEN @P7 WHEN (T3._Fld8138RRef = @P8) THEN @P9 WHEN (T3._Fld8138RRef = P10) THEN P11 WHEN (T3._Fld8138RRef = P12) THEN P13 WHEN (T3._Fld8138RRef = P14) THEN P15 WHEN (T3._Fld8138RRef = P16) THEN P17 ELSE P18 END, T1._Fld14254RRef, CASE WHEN (T6._Fld4068RRef = P19) THEN @P20 WHEN (T4._Fld6311RRef = @P21) THEN @P22 WHEN (T4._Fld6311RRef = @P23) THEN @P24 WHEN (T4._Fld6311RRef = @P25) THEN @P26 WHEN T1._Executed = 0x01 THEN @P27 ELSE -@P28 END, CASE WHEN (T5._Fld4532RRef = @P29) THEN CASE WHEN (T5._Fld4534 = @P30) OR (T5._Fld4534 >= @P31) THEN @P32 ELSE @P33 END WHEN (T5._Fld4532RRef = @P34) THEN @P35 WHEN (T5._Fld4532RRef = @P36) THEN CASE WHEN (T5._Fld4534 = @P37) OR (T5._Fld4534 >= @P38) THEN @P39 WHEN (T5._Fld4535 = @P40) OR (T5._Fld4535 >= @P41) THEN @P42 ELSE @P43 END WHEN (T5._Fld4532RRef = @P44) THEN @P45 WHEN (T5._Fld4532RRef = @P46) THEN CASE WHEN (T5._Fld4534 = @P47) OR (T5._Fld4534 >= @P48) THEN @P49 ELSE @P50 END ELSE @P51 END, CASE WHEN (T1._Fld14252_TYPE = 0x08 AND T1._Fld14252_RTRef = 0x000000B6 AND T1._Fld14252_RRRef = @P52) THEN -@P53 WHEN (T7._Fld4358RRef IS NULL) THEN @P54 ELSE @P55 END, T6._Fld4068RRef, T2._Fld14267_TYPE, T2._Fld14267_RTRef, T2._Fld14267_RRRef, CASE WHEN T2._Fld14267_TYPE IS NULL THEN 0x05 ELSE T2._Fld14267_TYPE END, CASE WHEN T2._Fld14267_TYPE IS NULL THEN @P56 ELSE CASE WHEN T2._Fld14267_TYPE IS NOT NULL THEN @P57 END END, CASE WHEN T2._Fld14267_TYPE IS NULL THEN 0x00000000 ELSE T2._Fld14267_RTRef END, CASE WHEN T2._Fld14267_TYPE IS NULL THEN 0x00000000000000000000000000000000 ELSE T2._Fld14267_RRRef END, CASE WHEN (T8._Fld4074RRef IS NULL) THEN 0x00 ELSE 0x01 END, (T9.Fld8704_), T13._Fld10603 FROM dbo._Task791 T1 LEFT OUTER JOIN dbo._Task791_VT14263 T2 ON ((T1._IDRRef = T2._Task791_IDRRef) AND (T2._Fld14265RRef = @P58)) AND (T2._Fld814 = @P59) LEFT OUTER JOIN dbo._InfoRg8135 T3 ON (((0x08 = T3._Fld8136_TYPE AND 0x00000317 = T3._Fld8136_RTRef AND T1._IDRRef = T3._Fld8136_RRRef) AND (T3._Fld8137RRef = @P60)) AND (T3._Fld814 = @P61)) AND ((T3._Fld8137RRef = @P62)) LEFT OUTER JOIN dbo._InfoRg6309 T4 ON ((0x08 = T4._Fld6310_TYPE AND 0x00000317 = T4._Fld6310_RTRef AND T1._IDRRef = T4._Fld6310_RRRef)) AND (T4._Fld814 = @P63) LEFT OUTER JOIN dbo._InfoRg4518 T5 ON ((0x08 = T5._Fld4519_TYPE AND 0x00000317 = T5._Fld4519_RTRef AND T1._IDRRef = T5._Fld4519_RRRef)) AND (T5._Fld814 = @P64) LEFT OUTER JOIN dbo._InfoRg4062 T6 ON ((T1._IDRRef = T6._Fld4063RRef)) AND (T6._Fld814 = @P65) LEFT OUTER JOIN dbo._InfoRg4356 T7 ON ((T1._Fld14252_TYPE = 0x08 AND T1._Fld14252_RTRef = 0x000000B5 AND T1._Fld14252_RRRef = T7._Fld4358RRef) AND (T7._Fld4359RRef = @P66)) AND (T7._Fld814 = @P67) LEFT OUTER JOIN dbo._InfoRg4073 T8 ON ((T1._IDRRef = T8._Fld4074RRef)) AND (T8._Fld814 = @P68) LEFT OUTER JOIN (SELECT T10._IDRRef AS IDRRef, T10._Fld8704 AS Fld8704_, T10._Fld8698RRef AS Fld8698RRef, T10._Fld814 AS Fld814_ FROM dbo._Reference75 T10 WHERE ((EXISTS(SELECT 1 FROM (SELECT 1 AS SDBL_DUMMY) SDBL_DUAL INNER JOIN dbo._InfoRg3748 T11 ON (0x08 = T11._Fld3749_TYPE AND 0x0000004B = T11._Fld3749_RTRef AND T10._IDRRef = T11._Fld3749_RRRef) INNER JOIN dbo._InfoRg5866 T12 ON (T11._Fld3750RRef = T12._Fld5867RRef) WHERE (((T11._Fld814 = 0.0)) AND (T12._Fld814 = 0.0)) AND ((T12._Fld5868RRef = 0x80E7005056A654AB11EC9B86276174A5) AND (T11._Fld3753 = 0x00))))) AND (T10._Fld814 = @P69)) T9 ON T2._Fld14267_TYPE = 0x08 AND T2._Fld14267_RTRef = 0x0000004B AND T2._Fld14267_RRRef = T9.IDRRef LEFT OUTER JOIN dbo._Reference182 T13 ON (T1._Fld14232RRef = T13._IDRRef) AND (T13._Fld814 = @P70) WHERE ((T1._Fld814 = @P71)) AND ((T1._Fld14246RRef = @P72) AND (((CASE WHEN T6._Fld4068RRef IS NULL THEN 0x01 ELSE 0x08 END <> 0x08 OR ISNULL(T6._Fld4068RRef,0x00000000000000000000000000000000) <> @P73))) AND (T1._Marked = 0x00) AND (T1._Fld14238 = 0x00) AND (EXISTS(SELECT 0x01 AS Q_001_F_000_ FROM dbo._InfoRg4369 T14 WHERE ((T14._Fld814 = @P74)) AND ((T14._Fld4371_TYPE = T1._Fld14252_TYPE AND T14._Fld4371_RTRef = T1._Fld14252_RTRef AND T14._Fld4371_RRRef = T1._Fld14252_RRRef) AND (T14._Fld4370RRef = @P75) AND (T14._Fld4374 IN (@P76, @P77)))) OR EXISTS(SELECT 0x01 AS Q_002_F_000_ FROM dbo._InfoRg4369 T15 WHERE ((T15._Fld814 = @P78)) AND ((T15._Fld4371_TYPE = T1._Fld14252_TYPE AND T15._Fld4371_RTRef = T1._Fld14252_RTRef AND T15._Fld4371_RRRef = T1._Fld14252_RRRef) AND (T15._Fld4370RRef = @P79) AND (T15._Fld4374 IN (@P80, @P81)))) AND ((T9.Fld8698RRef) IN (@P82, @P83, @P84, @P85, @P86, @P87)))) ORDER BY (T1._IDRRef), (T2._Fld14267_TYPE), (T2._Fld14267_RTRef), (T2._Fld14267_RRRef)
3 dmt
 
02.08.23
14:36
(2) только обфускации не хватает
4 dmt
 
02.08.23
14:37
(1) если это понятно, можно закомментить условие и проверить результат
5 cuberboy
 
02.08.23
14:37
(2) ещё чуть чуть и ты увидишь план и места где тормозит
6 cuberboy
 
02.08.23
14:39
И (ИСТИНА В
                (ВЫБРАТЬ ПЕРВЫЕ 1
                    ИСТИНА
                ИЗ
                    РегистрСведений.ИсполнителиРолейИДелегаты КАК ИсполнителиРолейИДелегаты
                ГДЕ
                    ИсполнителиРолейИДелегаты.РольПользователь = ЗадачаИсполнителя.ТекущийИсполнитель
                    И ИсполнителиРолейИДелегаты.ИсполнительДелегат = &ТекущийПользователь
                    И ИсполнителиРолейИДелегаты.ИмяОбластиДелегирования В ("", "ПроцессыИЗадачи"))
            ИЛИ ИСТИНА В
                    (ВЫБРАТЬ ПЕРВЫЕ 1
                        ИСТИНА
                    ИЗ
                        РегистрСведений.ИсполнителиРолейИДелегаты КАК ИсполнителиРолейИДелегаты



интересно при истине в первом условие - второе будет проверятся?
7 zippygrill
 
02.08.23
14:44
(6) не будет, тк у польователя будет стоять либо одну область, либо другую
8 zippygrill
 
02.08.23
14:45
(5) доступ к инструментам анализа у меня нет. Можно подробнее?
9 H A D G E H O G s
 
02.08.23
14:50
В ДО, в задачах исполнителя недаром есть реквизит ПредметСтрокой
Ибо реквизит Предмет имеет тип
СправочникСсылка.ТемыОбсуждений,
СправочникСсылка.Контрагенты,
СправочникСсылка.Проекты,
ДокументСсылка.ВходящееПисьмо,
ДокументСсылка.ИсходящееПисьмо,
СправочникСсылка.Файлы,
СправочникСсылка.ВходящиеДокументы,
СправочникСсылка.ВнутренниеДокументы,
СправочникСсылка.СообщенияОбсуждений,
СправочникСсылка.ИсходящиеДокументы,
СправочникСсылка.Мероприятия,
СправочникСсылка.ПроектныеЗадачи

А ты к нему через точку лезешь.
10 zippygrill
 
02.08.23
14:51
(4) да, так оно и есть:
* с этим условием - Выполение запроса: 0:00:58.547, получение данных: 0:00:00.000, получение данных ВТ: 0:00:00.000, серверный вызов: 0:00:58.656, передача данных на клиент: 0:00:00.359
* без этого условия - Выполение запроса: 0:00:00.016, получение данных: 0:00:00.000, получение данных ВТ: 0:00:00.000, серверный вызов: 0:00:00.140, передача данных на клиент: 0:00:00.303

Ок, теперь оптимизировать это условие можно например таким образом:
во временную таблицу получить все предметы и уж потом в условии сослатся на нее?
11 zippygrill
 
02.08.23
14:52
(9) да есть такое, но пока не вижу как оно мне может пригодится что отбора предметов с определенным типом документа
12 dmt
 
02.08.23
14:53
(10) можно попробовать
ВЫРАЗИТЬ(ПредметыЗадач.Предмет КАК ССЫЛКА -ЗДЕСЬ ТИП-).ВидДокумента
13 zippygrill
 
02.08.23
14:55
(12) пробовал - конструктор ругается что Несовместимые типы
14 zippygrill
 
02.08.23
14:55
(13)
ВЫРАЗИТЬ(ПредметыЗадач.Предмет КАК Справочник.ВидыВнутреннихДокументов).ВидДокумента В (&ВидПредмета_КассовыеДокументы)
15 H A D G E H O G s
 
02.08.23
14:56
(11) В таких случаях запрос нужно делать через менеджер ВТ. В промежуточный результат нужно вытащить максимально отобранную таблицу ЗадачиИсполнителя, кодом пройтись по ее строкам, собрав массивы различных типов значений "Предмет" в соответствие, для них, для каждого массива, запросами (либо еще оптимальнее одним динамически собранным запросом) получить даты и засунуть в ВТ для дальнейшего выполнения основного запроса.
16 H A D G E H O G s
 
02.08.23
14:57
(14) У справочника ВидыВнутреннихДокументов нет реквизита ВидДокумента
17 zippygrill
 
02.08.23
14:58
(15) условие упрощается тем что нужно только 1 тип анализировать
(16) точно, там ВнутренниеДокументы
18 zippygrill
 
02.08.23
15:04
Выразить особого прироста не выдал
Выполение запроса: 0:00:53.921, получение данных: 0:00:00.000, получение данных ВТ: 0:00:00.000, серверный вызов: 0:00:54.062, передача данных на клиент: 0:00:00.313
19 H A D G E H O G s
 
02.08.23
15:08
(18) Ну ты же по всему тексту запроса заменил, ведь да?
20 H A D G E H O G s
 
02.08.23
15:09
А вообще правильный ответ в (5).
21 zippygrill
 
02.08.23
15:13
(19) единственное место это только в условие вроде
22 zippygrill
 
02.08.23
15:14
(20) у меня нет доступа к инструментам анализа.
23 H A D G E H O G s
 
02.08.23
15:17
(22) "Задача нерешаема, хорошего вам дня."
24 H A D G E H O G s
 
02.08.23
15:18
(21)

  ИНАЧЕ ИСТИНА
    КОНЕЦ КАК ЕстьПодзадачи,
    ПредметыЗадач.Предмет.ДатаРегистрации КАК ДатаРегистрации
ИЗ
    Задача.ЗадачаИсполнителя КАК ЗадачаИсполнителя
25 zippygrill
 
02.08.23
15:35
(24) тут не надо выразить, тк возможно будут задачи из другой области делегирования ( ПроцессыИЗадачи )
26 zippygrill
 
02.08.23
15:35
(23) запросить могу, но что конкретно попросить у коллег из инфра
27 H A D G E H O G s
 
02.08.23
16:05
(26) Доступ к ms sql profiler с правами ALTER TRACE
28 H A D G E H O G s
 
02.08.23
16:05
(25) Ради интереса, убери это поле из запроса и посмотри на текст SQL
29 zippygrill
 
02.08.23
16:16
(28)
Убрал поле ДатаРегистрации из запроса и в условии оставил так:
ВЫРАЗИТЬ(ПредметыЗадач.Предмет КАК Справочник.ВнутренниеДокументы).ВидДокумента В (&ВидПредмета_КассовыеДокументы)

Статистика:
Выполение запроса: 0:00:25.187, получение данных: 0:00:00.000, получение данных ВТ: 0:00:00.000, серверный вызов: 0:00:25.281, передача данных на клиент: 0:00:00.274
30 Garykom
 
02.08.23
16:22
(0) Не пробовал использовать ВТ?

Или типовые функции из ДО
Они там должны быть
31 zippygrill
 
02.08.23
17:06
С использованием ВТ тоже не оч заметно

И ВЫРАЗИТЬ(ПредметыЗадач.Предмет КАК Справочник.ВнутренниеДокументы) В (ВЫБРАТЬ ПредметыКассовыхДокументов.Предмет Из ВТ_ПредметыКассовыхДокументов КАК ПредметыКассовыхДокументов)

Выполение запроса: 0:00:44.843, получение данных: 0:00:00.000, получение данных ВТ: 0:00:00.000, серверный вызов: 0:00:45.047, передача данных на клиент: 0:00:00.538
32 Garykom
 
02.08.23
17:12
ВЫБОР
        КОГДА ФлагиОбъектов.Флаг = ЗНАЧЕНИЕ(Перечисление.ФлагиОбъектов.Красный)
            ТОГДА 1
        КОГДА ФлагиОбъектов.Флаг = ЗНАЧЕНИЕ(Перечисление.ФлагиОбъектов.Синий)
            ТОГДА 2
        КОГДА ФлагиОбъектов.Флаг = ЗНАЧЕНИЕ(Перечисление.ФлагиОбъектов.Желтый)
            ТОГДА 3
        КОГДА ФлагиОбъектов.Флаг = ЗНАЧЕНИЕ(Перечисление.ФлагиОбъектов.Зеленый)
            ТОГДА 4
        КОГДА ФлагиОбъектов.Флаг = ЗНАЧЕНИЕ(Перечисление.ФлагиОбъектов.Оранжевый)
            ТОГДА 5
        КОГДА ФлагиОбъектов.Флаг = ЗНАЧЕНИЕ(Перечисление.ФлагиОбъектов.Лиловый)
            ТОГДА 6
        ИНАЧЕ 0
    КОНЕЦ КАК НомерФлага,

скажи нафига так извращаться с case?

когда можно ТЗ замен передать как ВТ и соединить с ней???
33 Garykom
 
02.08.23
17:13
Имхо кривой запутанный запрос
Переписать нафиг
34 zippygrill
 
02.08.23
17:13
(32) +- типовых запросов 1с
35 Garykom
 
02.08.23
17:14
(34) а если у тебя этих флагов будет пара сотен что делать?
36 Garykom
 
02.08.23
17:15
(35)+ Ты знаешь что у программиста есть только "0, 1 и МНОГО"
Ладно еще 2 поля сделать но если их 3 и более то делают список/табличку
37 zippygrill
 
02.08.23
17:26
(35)
вернемся к этому запросу лет через 100))

пеоеделал запроса через Объединить все, вроде предварительно есть прирост. Осталось сгруппировать результат..
https://pastecode.io/s/y3nxz3mt


Выполение запроса: 0:00:00.766, получение данных: 0:00:00.000, получение данных ВТ: 0:00:00.000, серверный вызов: 0:00:00.890, передача данных на клиент: 0:00:00.385