|
Долго открывается форма с динамическим списком Garykom, Мультук, АНДР, Dirk Diggler, H A D G E H O G s, Bigbro, Vostochnick, PR, denk32, Волшебник, RVN, Redaktor, yuri_k, X Leshiy, kapust, youalex, zippygrill, eddy_n, prokaznik, rudnitskij, Ненавижу 1С, arsik, Chameleon1980, Доминошник, , 1Сергей, Бычье сердце, Daniilvb, DiMel_77, craxx, Александр111, Timon1405, MWWRuza, DeeK, Чеширский, Ильф, FormatC, Prog_man, ЕRPe, ass1c, toypaul, Михаил_, zenik, orakool, boozin, mikecool, calmius, Vstur, Kobol, Crusher, Greeen, , vicof, Ватт, Somebody, PLUT, Fedor-1971, wolk, Шурик71, dergreche, runuts, serpentt, obs191, Alex33, elka302, DrZombi, sikuda, vis, GreenLab, maxar, d4rkmesa
| ☑ | ||
---|---|---|---|---|
0
Dirk Diggler
19.03.25
✎
17:14
|
Есть форма списка задач. На ней по сути всего 2 элемента, динамические списки - список ролей и список собственно задач.
Форма очень долго открывается, 7-9 секунд. Замер производительности ничего не показывает. Если быть точным, то показывает несколько секунд выполнения строки ФормаСпискаЗадач.Открыть(); Запросы динамических списков в консоли запросов работают быстро, 40-90 мс, но похоже, что тормоза все-таки из-за них, т.к. установка у обоих элементов Видимость = Ложь приводит к ускорению открытия формы до 1-2 секунд. Что можно сделать? |
|||
1
H A D G E H O G s
19.03.25
✎
17:20
|
1) Словить план запроса в профайлере
2) Убедиться, что отображение - Иерархический список, а не Дерево. |
|||
2
H A D G E H O G s
19.03.25
✎
17:20
|
Посмотреть в настройках наличие Группировок и Сортировок
|
|||
3
eddy_n
19.03.25
✎
22:00
|
Немного не в тему, но где же ещё. Зачем такой опус в типовом запросе УТ 11.4 в списка задач:
... ИЛИ ИСТИНА В (ВЫБРАТЬ ИСТИНА ИЗ РегистрСведений.ИсполнителиЗадач КАК ИсполнителиЗадач ГДЕ ЗадачаЗадачаИсполнителя.РольИсполнителя = ИсполнителиЗадач.РольИсполнителя И ЗадачаЗадачаИсполнителя.ОсновнойОбъектАдресации = ИсполнителиЗадач.ОсновнойОбъектАдресации И ЗадачаЗадачаИсполнителя.ДополнительныйОбъектАдресации = ИсполнителиЗадач.ДополнительныйОбъектАдресации И ИсполнителиЗадач.Исполнитель = &ВыбранныйИсполнитель)) |
|||
4
Garykom
гуру
19.03.25
✎
22:06
|
(3) Ты думаешь типовые одни сеньоры пишут?
|
|||
5
eddy_n
19.03.25
✎
23:40
|
(4) Думаю, это наигранная комбинация, домашняя заготовка, банальный шаблон, но лень да и времени нет ломать голову над этой приблудой.
|
|||
6
PR
20.03.25
✎
01:58
|
(3) А что непонятного?
Есть исполнитель в регистре сведений — хорошо, нет — плохо |
|||
7
Garykom
гуру
20.03.25
✎
02:26
|
(6) Непонятно почему так криво написано с подзапросом
Почему не использована ВТ и левое соединение - что шустрей Ибо вот этот подзапрос фактически будет исполняться в цикле для каждой строки основного запроса |
|||
8
PR
20.03.25
✎
02:42
|
(7) Потому что это коррелирующий запрос
Перед тем как выпендриваться про скорость, было бы неплохо посмотреть план запроса и немного в матчасть А потом уже, если вдруг окажется, что скуль не умеет в коррелирующие запросы, выпендриваться |
|||
9
DrZombi
гуру
20.03.25
✎
06:19
|
(0) Упрощайте свой запрос во списке, как вы все реализуете, все в ваших - "Мозгах" :)
А так, мало информации. Если Это PostgreSQL, то там есть пару команд, которые оный продукт уже не перемалывает, т.е. если вчера на SQL все было быстро, то сегодня увы надо переписывать :) |
|||
10
DrZombi
гуру
20.03.25
✎
06:20
|
(5) А все, придется теперь ломать голову, или ныть и стонать, как ТС в (0) :)
|
|||
11
DrZombi
гуру
20.03.25
✎
06:26
|
(0) Вот держите, ну а если не в тему, то надо детально спрашивать. А не как обычно - "В чем смысл вселенной и всего, всего..."
https://infostart.ru/1c/articles/1979106/ https://infostart.ru/1c/articles/1890717/ Вам раздел: 8.6. PostgreSQL https://its.1c.ru/db/v8312doc#bookmark:dev:TI000001291 https://its.1c.ru/db/metod8dev/content/4208/hdoc Рекомендация от ИТС. Оптимизация использования виртуальной таблицы СрезПоследних при работе с PostgreSQL Проблема При работе с PostgreSQL использование соединения с виртуальной таблицей СрезПоследних может приводить к существенному снижению производительности. Из-за ошибки оптимизатора может быть выбран неоптимальный план выполнения запроса. Решение Если в запросе используется соединение с виртуальной таблицей языка запросов "1С:Предприятия" СрезПоследних и запрос работает с неудовлетворительной производительностью, то рекомендуется вынести обращение к виртуальной таблице в отдельный запрос с сохранением результатов во временной таблице. ... и .т.д. Все по сути просто, и не очень :) |
|||
12
eddy_n
20.03.25
✎
07:32
|
(8) Учили же в первом классе - ходите и оглядывайтесь, если используете подзапросы.
|
|||
13
eddy_n
20.03.25
✎
07:34
|
(8) Что понимается под "коррелирующими" запросами? Не встречал пока в около-1с-пространстве такой терминологии.
|
|||
14
rsv
20.03.25
✎
07:50
|
(11) а почему все виртуальные таблички всех регистров предварительно не выгружать во временные перед соединениями ? Удобно, оптимизатору легче…. правда стоимость в два раза инфу дублировать но это так , мелочи :)
|
|||
15
Мультук
гуру
20.03.25
✎
08:24
|
(13)
1) Сколько помню, там еще в УТ 11.3 с задачами было "совсем страшно", они долго правили. 2) >>Не встречал пока в около-1с-пространстве такой терминологии Потому как такие запросы в 1С "низзя". Но если сильно хочется - то можно ваш пример) P.S. Это термин из "взрослого" sql Термин вполне себе существует, чего же его не использовать https://en.wikipedia.org/wiki/Correlated_subquery |
|||
16
DrZombi
гуру
20.03.25
✎
08:52
|
(14) Хороший вопрос, Почему? Я вот больше задаюсь вопросом, зачем PostgreSQL? Российского в нем столько же сколько российского в Alladin-е от 1С :)
|
|||
17
DiMel_77
20.03.25
✎
08:52
|
(13) В условиях запросов синтаксис 1С допускает использование "Коррелированного" запроса.
Например такой запрос будет с точки зрения 1С корректным: ВЫБРАТЬ Сотрудники.Ссылка КАК Ссылка, Сотрудники.ФизическоеЛицо В (ВЫБРАТЬ ФизическиеЛица.Ссылка КАК Ссылка ИЗ Справочник.ФизическиеЛица КАК ФизическиеЛица ГДЕ ФизическиеЛица.Пол = ЗНАЧЕНИЕ(Перечисление.ПолФизическогоЛица.Мужской)) КАК ЭтоМужчина ИЗ Справочник.Сотрудники КАК Сотрудники И неважно условие в секции ГДЕ или в строке выборки, но выполнение такого запроса - это по сути запрос в цикле для каждой строки выборки. Иногда это конечно полезно, но быстродействие таких запросов соответствующее. |
|||
18
Ненавижу 1С
гуру
20.03.25
✎
09:02
|
(7) левое соединение возможно даст задвоение строк (надо анализировать состав измерений)
|
|||
19
H A D G E H O G s
20.03.25
✎
10:24
|
(17) именно для динамического списка с динамическим чтением (когда задана основная таблица и стоит галочка), это охеренное решение, так как основная таблица читается порциями по 45 строк при скролле списка.
|
|||
20
Dirk Diggler
20.03.25
✎
10:53
|
(1) ну вообще оно именно дерево....
|
|||
21
Dirk Diggler
20.03.25
✎
10:58
|
(20) а, не, пардон, список с группировкой
|
|||
22
Dirk Diggler
20.03.25
✎
12:01
|
Запрос выглядит вот так. Часть полей я пробросил, чисто опытным путем выяснив, что тормозит весь список поле с ВЫБОР-КОГДА.
ВЫБРАТЬ .......... ЗадачаЗадачиПользователя.DX_ОбъектРезультат КАК DX_ОбъектРезультат, ВЫБОР КОГДА ЗадачаЗадачиПользователя.БизнесПроцесс ССЫЛКА БизнесПроцесс.DX_ОбработкаТикета ТОГДА ЕСТЬNULL(ВЫРАЗИТЬ(ЗадачаЗадачиПользователя.БизнесПроцесс КАК БизнесПроцесс.DX_ОбработкаТикета).Контрагент, ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)) КОГДА ЗадачаЗадачиПользователя.БизнесПроцесс ССЫЛКА БизнесПроцесс.DX_Закупка ТОГДА "Закупки" ИНАЧЕ ИСТИНА КОНЕЦ КАК ГруппировочноеПоле ИЗ Задача.ЗадачиПользователя КАК ЗадачаЗадачиПользователя ГДЕ (ЗадачаЗадачиПользователя.Исполнитель = &Исполнитель ИЛИ ЗадачаЗадачиПользователя.DX_РольИсполнителя В (ВЫБРАТЬ DX_РегистрАдресацииЗадач.DX_РольИсполнителя КАК DX_РольИсполнителя ИЗ РегистрСведений.DX_РегистрАдресацииЗадач КАК DX_РегистрАдресацииЗадач ГДЕ DX_РегистрАдресацииЗадач.Исполнитель = &Исполнитель И DX_РегистрАдресацииЗадач.DX_РольИсполнителя В (&ВыбранныеРоли))) И НЕ ЗадачаЗадачиПользователя.ПометкаУдаления Вопрос такой. Почему в консоли запросов это выполняется практически мгновенно, а при открытии управляемой формы - до 5-7 секунд? |
|||
23
eddy_n
20.03.25
✎
12:10
|
(22) В консоли - запрос голый, а форма может быть обременена не знамо чем.
|
|||
24
Dirk Diggler
20.03.25
✎
12:19
|
(23) ды в том и дело, что считай ничего в форме-то и нет...
|
|||
25
eddy_n
20.03.25
✎
12:28
|
(24) Чего-то явно не договариваешь. Подписка может какая сидит...
|
|||
26
Dirk Diggler
20.03.25
✎
12:42
|
(25) да ничего там особого нет.
похоже, это от платформы растет. Если переключить режим отображения динамического списка с "Дерево" в "Иерархический список", форма открывается в несколько раз быстрее, секунды за 1.5-2. минус, список теперь свернут... |
|||
27
Dirk Diggler
20.03.25
✎
12:54
|
Чё. За. Фигня...
Я отключил группировку у динамического списка. Но он все равно в форме выводится с группировкой по полю "Контрагент", в виде дерева или иерархического списка.... полез в настройки списка, установил группировку по другому полю(ТочкаМаршрута). а выводится все равно с группировкой по первоначальному "Контрагент". Все облазил, кэш чистил - не могу понять, откуда берется структура ДС? |
|||
28
H A D G E H O G s
20.03.25
✎
13:31
|
(27) Ну ты в конфигураторе сбрось группировку и в предприятии установи настройки формы по умолчанию
|
|||
29
Dirk Diggler
20.03.25
✎
13:39
|
(28) не совсем понял что за настройки по умолчанию. Вставил костыль - поскольку тормозит непосредственно при построении формы на клиенте, то элементу поставил вид отображение "списком", а потом уже после построения формы в ПриОткрытии()
в конце добавил: Элементы.СписокЗадач.НачальноеОтображениеДерева = НачальноеОтображениеДерева.РаскрыватьВсеУровни; Если не Элементы.СписокЗадач.ТекущиеДанные.РодительскаяГруппировкаСтроки = Неопределено Тогда Элементы.СписокЗадач.ТекущаяСтрока = Элементы.СписокЗадач.ТекущиеДанные.РодительскаяГруппировкаСтроки; КонецЕсли; Элементы.СписокЗадач.Отображение = ОтображениеТаблицы.Список; Элементы.СписокЗадач.Отображение = ОтображениеТаблицы.Дерево; Открывается за 1-2 секунды. Пойдет. |
|||
30
Garykom
гуру
20.03.25
✎
14:42
|
(29)А просто в начале ПриСозданииНаСервере видимость элемента ДС делать Ложь
И в конце ПриОткрытии = Истина Не поможет? |
|||
31
Dirk Diggler
20.03.25
✎
14:59
|
(30) Попробовал.
Да, плюс-минус тот же эффект. Вот так и оставлю. |
|||
32
PR
20.03.25
✎
16:02
|
(15) В 1С можно, но только в условиях
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |