![]() |
|
Ускорить запрос к регистру "Хозрасчетный.ДвиженияССубконто" | ☑ | ||
---|---|---|---|---|
0
Sevish
29.02.24
✎
06:13
|
Добрый день.
У меня в запросе два обращения к "Хозрасчетный.ДвиженияССубконто" через "ОБЪЕДИНИТЬ ВСЕ". Два - потому что условия у них разные и полностью эти условия не объединить. Вопрос № 1. Если я сначала сделаю выборку из "Хозрасчетный.ДвиженияССубконто" по общим условиям (период, организация, активность и т. п.) и помещу во временную таблицу, а затем уже из временной таблицы сделаю выборку по остальным условиям через "ОБЪЕДИНИТЬ ВСЕ" - станет быстрее или медленнее? Вопрос № 2. Существенно дольше выполняется запрос, если я кроме нужных субконто выбираю ещё и "Регистратор". На сколько я понимаю в этот момент выбираются ещё и все реквизиты регистратора. Зачем мне он нужен? Вывести в отчет, чтобы пользователь мог открыть документ. Как-то в этом случае можно ускорить выборку? Ведь по сути мне нужна только ссылка. Благодарю заранее! |
|||
1
Волшебник
29.02.24
✎
06:32
|
Наверное, будет быстрее.
Сделайте замер и доложите |
|||
2
Волшебник
29.02.24
✎
06:36
|
В чем бизнес-смысл Ваших запросов?
|
|||
3
Накомото
29.02.24
✎
07:06
|
(0) А почему вы не можете в запросе написать "...регистратор.ссылка" и получить в итоге только ссылку?
|
|||
4
Волшебник
29.02.24
✎
07:09
|
(3) поле "регистратор" уже содержит ссылку, так что Ваше предложение бессмысленно
|
|||
5
RomanYS
29.02.24
✎
08:26
|
(4) не бессмысленно, а вредно. Это же левое соединение со всеми возможными для регистратора таблицами
(2) присоединяюсь к вопросу |
|||
6
Eiffil123
29.02.24
✎
09:11
|
(0) "На сколько я понимаю в этот момент выбираются ещё и все реквизиты регистратора."
нет, это не так. Выбирается только ссылка на регистратор. На скорость выполнения запроса это не должно сильно влиять. А вот на скорость построения отчета может - если регистратор выводится в сам отчет, то после запроса еще выбираются все поля, которые используются для представления объекта (дата, номер и возможно еще что-то). Как вариант, попробуйте убрать вывод регистратора из самого отчета, но оставив его в запросе. И проверить скорость формирования |
|||
7
Волшебник
29.02.24
✎
09:12
|
(5) Согласен. Не просто бессмысленно, а даже вредно. Забанить его?
|
|||
8
АнализДанных
29.02.24
✎
09:34
|
(0) Можешь пример запроса показать ? без него тебе никто дельных советов не даст.
> если я кроме нужных субконто выбираю ещё и "Регистратор". > На сколько я понимаю в этот момент выбираются ещё и все реквизиты регистратора Ты замер делаешь до вывода данных на экран, т.е. замер заканчиваешь после строки "Запрос.Выполнить()" ? если да, то в представление ссылки у тебя не должны получаться подчиненные реквизиты регистратора. Очень мало информации, опиши задачу полностью, нужен текст запроса и где\как ты его выполняешь, просто в коде или это СКД ? |
|||
9
Sevish
29.02.24
✎
10:30
|
|ВЫБРАТЬ
| ФактБухгалтерия.Период, | ФактБухгалтерия.СубконтоКт3.УпрСтатьяБДР, | ФактБухгалтерия.ПодразделениеКт, | СУММА(0), | СУММА(ВЫБОР | КОГДА ГОД(ФактБухгалтерия.Период) >= &ГодБухДанных | ТОГДА ФактБухгалтерия.Сумма | ИНАЧЕ 0 | КОНЕЦ), | СУММА(0) |ИЗ | РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто( | &ДатаНач, | &ДатаКон, | Организация В (&Организация) | И Активность | И СчетКт В ИЕРАРХИИ (&СчетКт90011) | И СубконтоКт3.УпрСтатьяБДР В ИЕРАРХИИ (&Группа), | , | ) КАК ФактБухгалтерия | |СГРУППИРОВАТЬ ПО | ФактБухгалтерия.Период, | ФактБухгалтерия.СубконтоКт3.УпрСтатьяБДР, | ФактБухгалтерия.ПодразделениеКт | |ОБЪЕДИНИТЬ ВСЕ | |ВЫБРАТЬ | ФактБухгалтерия.Период, | ФактБухгалтерия.СубконтоДт1, | ФактБухгалтерия.ПодразделениеДт, | СУММА(0), | СУММА(ВЫБОР | КОГДА ГОД(ФактБухгалтерия.Период) >= &ГодБухДанных | ТОГДА ФактБухгалтерия.Сумма | ИНАЧЕ 0 | КОНЕЦ), | СУММА(0) |ИЗ | РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто( | &ДатаНач, | &ДатаКон, | Организация В (&Организация) | И Активность | И СчетДт В ИЕРАРХИИ (&СчетДт26) | И СубконтоДт1 В ИЕРАРХИИ (&Группа) | И ВЫБОР | КОГДА СчетКт В ИЕРАРХИИ (&СчетКт97) | ИЛИ СчетКт В ИЕРАРХИИ (&СчетКт02) | ИЛИ СчетКт В ИЕРАРХИИ (&СчетКт10) | ТОГДА ИСТИНА | ИНАЧЕ НЕ Регистратор ССЫЛКА Документ.РегламентнаяОперация | КОНЕЦ, | , | ) КАК ФактБухгалтерия | |СГРУППИРОВАТЬ ПО | ФактБухгалтерия.Период, | ФактБухгалтерия.СубконтоДт1, | ФактБухгалтерия.ПодразделениеДт | |ОБЪЕДИНИТЬ ВСЕ | |ВЫБРАТЬ | ФактБухгалтерия.Период, | ФактБухгалтерия.СубконтоДт1, | ФактБухгалтерия.ПодразделениеДт, | СУММА(0), | СУММА(ВЫБОР | КОГДА ГОД(ФактБухгалтерия.Период) >= &ГодБухДанных | ТОГДА ФактБухгалтерия.Сумма | ИНАЧЕ 0 | КОНЕЦ), | СУММА(0) |ИЗ | РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто( | &ДатаНач, | &ДатаКон, | Организация В (&Организация) | И Активность | И СчетДт В ИЕРАРХИИ (&СчетДт44) | И СубконтоДт1 В ИЕРАРХИИ (&Группа) | И НЕ Регистратор ССЫЛКА Документ.РегламентнаяОперация, | , | ) КАК ФактБухгалтерия | |СГРУППИРОВАТЬ ПО | ФактБухгалтерия.Период, | ФактБухгалтерия.СубконтоДт1, | ФактБухгалтерия.ПодразделениеДт |
|||
10
Sevish
29.02.24
✎
10:32
|
Это не СКД это просто запрос.
(6) Хороший совет! Подскажите, пожалуйста, а как тогда в отчет вывести так, чтобы не читалось? Мне нужно чтобы дважды нажать и открылся документ. |
|||
11
Sevish
29.02.24
✎
10:33
|
(8) в теории конечно можно все свести к одному запросу с очень большим условием, но тогда потеряется наглядность и кто-то следующий голову сломает разбираться почему какой-то документ не попал...
Поэтому я и подумал - вынести общие условия, получить временную таблицу и уже с ней работать. |
|||
12
Волшебник
29.02.24
✎
10:36
|
(9) Не знаю, может поможет... В параметрах виртуальных таблиц уберите В ИЕРАРХИИ, замените на "В"
В сам параметр передавайте список всех элементов, т.е. разверните иерархию заранее И СчетКт В ИЕРАРХИИ (&СчетКт90011)
И СубконтоКт3.УпрСтатьяБДР В ИЕРАРХИИ (&Группа), Кроме того, вот это условие "СубконтоКт3.УпрСтатьяБДР" будет жёстко тормозить. Сделайте статью субконтом. |
|||
13
Волшебник
29.02.24
✎
10:42
|
(9) Уберите ОБЪЕДИНИТЬ ВСЕ, разбейте на отдельные запросы. Задействуйте временные таблицы.
|
|||
14
Sevish
29.02.24
✎
11:13
|
(12) Вот, спасибо! Я в принципе уже пошел по другому пути: из-за перехода на 2.5.12 ERP ранее добавленные субконто на 90.03 и 90.02.1 придется удалить. Сделал регистр, куда транслирую нужную информацию при записи "РегистрБухгалтерии.Хозрасчетный". Но! Буду знать, что такая конструкция притормаживает.
(13) Вот. прям по сути. Я как чувствовал что тут можно оптимизироваться. Спасибо! PS: Производительность не замерял, достаточно что на пользовательском уровне очевидно, что формируется мееедленно :) |
|||
15
АнализДанных
29.02.24
✎
11:20
|
(9) Вопрос по "СубконтоКт3.УпрСтатьяБДР":
"СубконтоКт3" - это какой-то один тип ? или это разные типы объектов и у всех у них есть реквизит "УпрСтатьяБДР" ? Если один, то можно заменить на "ВЫРАЗИТЬ(СубконтоКт3 КАК Справочник.МойСправочник).УпрСтатьяБДР" |
|||
16
MaximSh
29.02.24
✎
11:22
|
(0) не плохо бы написать сколько выполняется запрос, сколько записей за период в регистре, сколько в итоговой выборке, наличие RLS (тормозит под ПолнымиПравами или только у пользователей)
|
|||
17
Dmitrii
гуру
29.02.24
✎
12:16
|
Таблица ДвиженияССубконто - самая тормозная.
Во-первых, перепишите на внутреннее соединение таблиц Хозрасчетный и Субконто. Во-вторых, в таблице Субконто используйте отбор по Вид, а так же ВЫРАЗИТЬ для поля Значение (как советуют в (15)). В-третьих, откажитесь от В ИЕРАРХИИ. Получите во временную таблицу список всех значений СубконтоКт3, у которых УпрСтатьяБДР В ИЕРАРХИИ (&Группа), а в самом запросе к таблице Субконто используйте условие (или внутреннее соединение) СубконтоКт3 = МояВременнаяТаблицаПредварительноПодготовленнаяПоСоветамФорумчанМисты.ЗначениеСубконто. Использование объединения - скользкий вопрос. Отказ от объединения может как ускорить так и затупить. |
|||
18
Волшебник
29.02.24
✎
12:35
|
(17) Отказ от объединения упростит работу оптимизатору запросов, это хорошо.
|
|||
19
Волшебник
29.02.24
✎
12:36
|
Можно ещё создать регистр накопления, замутить агрегаты. Чё полезли в бух.регистр за фактом и хотите скорости? Бух.регистр медленный. Таков его путь.
Заведите свои быстрые регистры |
|||
20
mr_K
29.02.24
✎
13:13
|
Немного оффтоп. Столкнулся еще с одним удивительным фактом. Если обращаться к вирт.таблице регистра бухгалтерии с периодичностью Регистратор, то нельзя установить отбор по полям регистратора, но это ладно. Не поддается пониманию тот факт, что если отбор по полям регистратора делаешь в ГДЕ, то это начинает работать в разы медленнее, чем без отбора. В ГДЕ прописываю корректно, через ВЫРАЗИТЬ :)
Разбираться почему так и что с этим делать не стал, для работы отчета 2 сек или 10 секунд - не принципиально, но сам факт немного поразил. |
|||
21
Волшебник
29.02.24
✎
13:22
|
(20) Для регистра бухгалтерии выполнить запрос за 10 сек — это прекрасный результат. Это как пробежать стометровку за 10 сек, рекорд мира.
|
|||
22
Dmitrii
гуру
29.02.24
✎
13:50
|
(20) Ничего удивительного.
Даже с использованием ВЫРАЗИТЬ рождаются левые соединения. Если перечень видов регистратора заранее известен, то в параметрах виртуальной таблицы пробовать установить отбор по условию "ССЫЛКА". Хотя целесообразность такого совета зависит от конкретного запроса и условий. Трудно давать конкретные советы, не видя сам запрос. Но по личному опыту могу сказать, что в 90% случаев, когда нужна периодичность регистра менее месяца (неделя, день, Регистратор и т.д.), запрос быстрее будет работать с первичными (физическими) таблицами движений, а не виртуальными таблицам регистров. И в особенности это правило касается регистра бухгалтерии. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |