Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Предложите способ увеличения быстродействия следующего куска кода.

Предложите способ увеличения быстродействия следующего куска кода.
Я
   narayanan
 
24.07.19 - 18:15
День добрый, на работе поступила такая задача. Подскажите с какой стороны к ней подступиться?

Запрос=Новый Запрос;
Запрос.Текст="ВЫБРАТЬ
|
ХозрасчетныйОстатки.Субконто1 КАК Субконто1,
|
ХозрасчетныйОстатки.Субконто2 КАК Субконто2,
|
ХозрасчетныйОстатки.СуммаОстаток КАК СуммаОстаток
|ИЗ
|
РегистрБухгалтерии.Хозрасчетный.Остатки(&Период, Счет.Код = ""60.01"", ,
Организация = &Организация) КАК ХозрасчетныйОстатки";
Запрос.УстановитьПараметр("Организация",Организация);
Выборка=Запрос.Выполнить().Выгрузить();
 
 
   lodger
 
1 - 24.07.19 - 18:19
убрать ".Выгрузить();"
работать с выборкой.
   Пузан
 
2 - 24.07.19 - 18:23
Счет передать как параметр, но не код, а ссылку, которую получить через предопределенный элемент плана счетов.
   Пузан
 
3 - 24.07.19 - 18:24
Т.е. "... Счет = &Счет..." или "... Счет = ЗНАЧЕНИЕ(ПланыСчетов.НужныйПланСчетов.НужныйСчет)..."
   RomanYS
 
4 - 24.07.19 - 18:24
Обязательно указать параметр вид субконто
   PiotrLoginov
 
5 - 24.07.19 - 18:24
цитировать, так всё. а то может сложиться впечатление, что значение параметра Период устанавливать мы не будем.
   Пузан
 
6 - 24.07.19 - 18:26
(4) Это если планируется получить конкретный вид субконто, то да.
   Buster007
 
7 - 24.07.19 - 18:29
(0) а зачем тебе тут что-то оптимизировать? Чем не устраивает?
   narayanan
 
8 - 24.07.19 - 18:38
(1)
Да согласен, Пока Выборка.Следующий - так лучше
   narayanan
 
9 - 24.07.19 - 18:38
(2)
Да тоже об этом подумал, что передача счета через параметр будет правильнее
   narayanan
 
10 - 24.07.19 - 18:40
(4) спасибо
   H A D G E H O G s
 
11 - 24.07.19 - 18:40
Никак.
   Вафель
 
12 - 24.07.19 - 18:41
(1) выборка ничуть не лучше.
все это пережитки старых лет
   narayanan
 
13 - 24.07.19 - 18:41
(5) Да, параметр период так же надо указывать
   H A D G E H O G s
 
14 - 24.07.19 - 18:44
Как только мы получаем неоперативные остатки в разрезе Субконто, мы идем еще в 2 таблицы  - Движений и ЗначенийСубконто и наш план запроса превращается в какашку.
   narayanan
 
15 - 24.07.19 - 18:47
(14) Возможно это так и есть, тут я вам доверяю больше чем своему опыту.
Но тут в запросе мы не уточняем про неоперативные остатки, поэтому речь идет в целом об оптимизации запроса)
   ДенисЧ
 
16 - 24.07.19 - 19:12
Ctrl-A, Del, Ctrl-S, F7
   novichok79
 
17 - 24.07.19 - 19:18
(0) я бы шел так:

1) установить видысубконто, чтобы субконто1 и субкотно2 всегда были чем-то одним.
2) убрать Счет.Код и заменить на предопределенный элемент в запросе
3) Выборка=Запрос.Выполнить().Выгрузить() заменил бы на Выборка=Запрос.Выполнить().Выбрать()
   novichok79
 
18 - 24.07.19 - 19:19
пересчет итогов разумеется может помочь еще
   novichok79
 
19 - 24.07.19 - 19:24
а вынести в память таблицы, добавить железа на сервер, и т д
   H A D G E H O G s
 
20 - 24.07.19 - 19:25
Ничего не поможет.
   H A D G E H O G s
 
21 - 24.07.19 - 19:29
Как только мы выбираем остатки по высокооборотистым счетам 40.01, 60.01, 62.01, НА ДАТУ, запрос забивает на некластерный индекс с отбором по счету по таблице движений и использует кластерный индекс без отбора по счету, так как ему нужна сумма оборотов, которой нет в некластерном индексе - тоесть, запрос выбирает движения по всем счетам.
   novichok79
 
22 - 24.07.19 - 19:30
(21) вот это уровень знаний, круто.
   narayanan
 
23 - 24.07.19 - 19:33
(21) Очень глубокие знания работы запроса, еще раз спасибо!
   mistеr
 
24 - 24.07.19 - 20:40
(21) Ты забыл добавить "когда оптимизатор ошибается, опираясь на неактуальную статистику".
   mistеr
 
25 - 24.07.19 - 20:41
(24) И еще "кроме тех случаев, когда план-какашка действительно лучший".
   Волшебник
 
26 - 24.07.19 - 22:37
Нужно сделать запрос к регистру накопления Взаиморасчеты
   lodger
 
27 - 24.07.19 - 22:41
(26) а если стоит задача сверить РН взаиморасчеты и счет 60.01?
   Волшебник
 
28 - 24.07.19 - 22:49
(27) Тогда не стояло бы задачи ускорить. Регистры бухгалтерия — сущность неторопливая. Они нужны для богатства аналитики, развёрнутого учёта. Они не могут работать быстро.
   palsergeich
 
29 - 24.07.19 - 23:14
(24) Сколько и чем статистику не актуализируй - результат один, полная Ж. Спасибо поел уже.
(28) Все это богатство аналитики вполне себе реализуется и на оборотных РН, смотри ЕРП ббюджетирование например.
Просто архитектурно сделать 2 таблицы было красиво, а о том, что записей могут быть миллионы - тогда никто не подумал. Вроде в 15 релизе они что то да поправили в этом плане, сцдя по анансу или индекс или еще поле в таблицу добавили, сам еще не смотрел
   breezee
 
30 - 25.07.19 - 07:46
(0) Распечатать ведомость по взаиморасчетам после закрытия месяца и смотреть на бумаге. Быстрее запроса будет)
 
 Рекламное место пустует
   rphosts
 
31 - 25.07.19 - 07:49
(12) нет, это зависит от того сколько выгребается и сколько рамы.
   rphosts
 
32 - 25.07.19 - 07:51
(24) структура ИБ важнее статистики, а тут всё именно в структуру упирается
   Вадя
 
33 - 25.07.19 - 08:19
Все, что насоветовали предыдущие ораторы - наведение внешнего лоска на запрос и на параметры, придание нетленке товарного вида (актуально для Нерезиновска).
Единственный способ ускорить работу - выбирать данные частями.
Правильный ответ - использовать отборы по Субконто.
   Rovan
 
34 - 25.07.19 - 10:06
(0) мои 5 копеек:

Запрос=Новый Запрос( ТУТ ТЕКСТ ЗАПРОСА);
   Glup0sti
 
35 - 25.07.19 - 11:07
если работает медленно при отсутствии конкуренции за ресурсы:
Что говорит замер по поводу Выполнить() и Выгрузить()? Какая из этих операций дороже?
Если Выполнить() - если СУБД ms sql, включить параллелизм + надо все равно взглянуть на план запроса...да и чтобы опровергнуть (21)
Если Выгрузить() - каталог временных файлов пользователя службы 1С на быстрый диск

По крайней мере стоит попробовать максимально загрузить железо распараллеливанием: выбрать всех контрагентов(Субконто1), стартануть N потоков, закидывая свою порцию контрагентов отбором для этого запроса в этом потоке + обработать, результат собрать вместе.

Если данный запрос выполняет ограниченное кол-во пользователей, то можно повысить их приоритет(и не только), используя регулятор ресурсов ms sql
Обслуживание итогов + обслуживание СУБД
&Период не должен быть МоментомВремени + (3)  
http://catalog.mista.ru/public/975144/


Список тем форума
Рекламное место пустует  Рекламное место пустует
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.