|   |   | 
| 
 | Оптимизация запроса ЗадачиМне в 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 | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |