|   |   | 
| 
 | Ускорить запрос к регистру "Хозрасчетный.ДвиженияССубконто" | ☑ | ||
|---|---|---|---|---|
| 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% случаев, когда нужна периодичность регистра менее месяца (неделя, день, Регистратор и т.д.), запрос быстрее будет работать с первичными (физическими) таблицами движений, а не виртуальными таблицам регистров. И в особенности это правило касается регистра бухгалтерии. | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |