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