Вход | Регистрация
 
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/


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