Имя: Пароль:
1C
1С v8
Ускорить запрос к регистру "Хозрасчетный.ДвиженияССубконто"
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 АнализДанных
 
naïve
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 АнализДанных
 
naïve
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% случаев, когда нужна периодичность регистра менее месяца (неделя, день, Регистратор и т.д.), запрос быстрее будет работать с первичными (физическими) таблицами движений, а не виртуальными таблицам регистров. И в особенности это правило касается регистра бухгалтерии.