Имя: Пароль:
1C
1С v8
Предложите способ увеличения быстродействия следующего куска кода.
,
0 narayanan
 
24.07.19
18:15
День добрый, на работе поступила такая задача. Подскажите с какой стороны к ней подступиться?

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

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

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

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

Если данный запрос выполняет ограниченное кол-во пользователей, то можно повысить их приоритет(и не только), используя регулятор ресурсов ms sql

Обслуживание итогов + обслуживание СУБД
&Период не должен быть МоментомВремени + (3)  
http://catalog.mista.ru/public/975144/
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший