Имя: Пароль:
1C
1С v8
Долго выполняется простой запрос
,
0 Eastert
 
09.04.18
14:20
В УТ 11.1 минут 5 выполняется вот такой простой запрос к регистру накопления

    Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
    Запрос.УстановитьПараметр("ВидДвижения",  ВидДвиженияНакопления.Приход);

    Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1
                    |    СебестоимостьТоваров.Период,
                    |    СебестоимостьТоваров.Количество,
                    |    СебестоимостьТоваров.Стоимость
                    |ИЗ
                    |    РегистрНакопления.СебестоимостьТоваров КАК СебестоимостьТоваров
                    |ГДЕ
                    |    СебестоимостьТоваров.АналитикаУчетаНоменклатуры.Номенклатура = &Номенклатура
                    |    И СебестоимостьТоваров.ВидДвижения = &ВидДвижения
                    |
                    |УПОРЯДОЧИТЬ ПО
                    |    СебестоимостьТоваров.Период УБЫВ";

    РезультатСебестоимость = Запрос.Выполнить().Выгрузить();
1 Малыш Джон
 
09.04.18
14:21
А "простой" и не значит ведь "быстрый"
2 Redkiy
 
09.04.18
14:23
За запрос к физической таблице РН на руки отрубать. По локоть.
3 VS-1976
 
09.04.18
14:23
Соединение всего РегистрНакопления.СебестоимостьТоваров с номенклатурой, потом фильтрация и сортировка...
PS: Руки долой
4 systemstopper
 
09.04.18
14:24
(2) дооо, конечно-конечно...бред не несите
5 Eastert
 
09.04.18
14:24
Как надо? примерно на словах скажите
6 VS-1976
 
09.04.18
14:24
(2) Дело не в физической таблице
7 unregistered
 
09.04.18
14:25
(2) Голову включи, прежде чем руки рудить.
Если автору нужен Период, то какой ему смысл делать запрос к виртуальной таблице с Периодичностью Запись? Какой прирост это даст?
8 Джинн
 
09.04.18
14:26
(7) Да не факт, что ему период как раз и нужен.
9 VS-1976
 
09.04.18
14:27
(5) Нужно найти все значения из справочника АналитикаУчетаНоменклатуры с присутствием данной номенклатуры
= &Номенклатура
Далее соединить результат с РегистрНакопления.СебестоимостьТоваров
ПО СебестоимостьТоваров.АналитикаУчетаНоменклатуры = втАналитикаУчетаНоменклатуры.Ссылка
И СебестоимостьТоваров.ВидДвижения = &ВидДвижения
10 Eastert
 
09.04.18
14:27
Все я понял, выполняется быстро если это  

    СебестоимостьТоваров.АналитикаУчетаНоменклатуры.Номенклатура = &Номенклатура

заменить на это

    СебестоимостьТоваров.АналитикаУчетаНоменклатуры = &АналитикаУчетаНоменклатуры
11 systemstopper
 
09.04.18
14:27
(0) Чуваг без плана запроса и стоимости его операторов говорить не о чем. Вангую что у тебя основные тормоза идут на сортировке, ну и обращение через точку СебестоимостьТоваров.АналитикаУчетаНоменклатуры.Номенклатура вызывает соедиение с кучей таблиц
12 Eastert
 
09.04.18
14:27
(10) Хотя для этого надо и аналитику получать, но думаю всяко быстрее чем первые запрос
13 Малыш Джон
 
09.04.18
14:27
(5) 1) обращайся к виртуальной таблице, а не к самомУ РН. судя по "СебестоимостьТоваров.ВидДвижения = &ВидДвижения" тебе подойдут Обороты
2) накладывай условия в параметрах виртуальной таблицы, а не в условиях запроса
3) избавься от "АналитикаУчетаНоменклатуры.Номенклатура".
14 Borteg
 
09.04.18
14:27
(0) Заменить  СебестоимостьТоваров.АналитикаУчетаНоменклатуры.Номенклатура = &Номенклатура
На сначала поиск аналитики , а потом поиск по этой аналитики.
15 Borteg
 
09.04.18
14:28
(10) в правильную сторону смотришь)
16 unregistered
 
09.04.18
14:30
(8) >> не факт, что ему период как раз и нужен.

Конечно не факт.
Но он по нему еще и сортирует потом. Думаешь просто так?
17 Джинн
 
09.04.18
14:32
(16) Да все возможно. Я бы на всякий случай уточнил этот момент.
18 Eastert
 
09.04.18
14:34
(17) Период нужен
19 Eastert
 
09.04.18
14:34
Но я уже разобрался, всем спасибо
20 Eastert
 
09.04.18
14:34
(18) Но я уже разобрался, всем спасибо
21 Мыш
 
09.04.18
14:39
Внутреннее соединение с регистром АналитикаУчетаНоменклатуры
22 VS-1976
 
09.04.18
14:41
(21) Малыш проф не пригоден :)
23 Вафель
 
09.04.18
14:46
Может по периоду отбор все-таки нужен?
24 rs_trade
 
09.04.18
14:50
(2) Можно узнать почему?
25 Вафель
 
09.04.18
14:52
(24) Его так в детстве учили. А по другому он не знает
26 Мыш
 
09.04.18
14:56
(22) Это о чём?
27 Быдло замкадное
 
09.04.18
15:06
Вот так 1С делает аналитики что бы повысить производительность, а по факту программисты ее понижают.
Ведь будь Измерение Номенклатура вопросов у автора не возникло бы.
28 Мыш
 
09.04.18
15:12
(27) Так есть измерение. Только в другом регистре. И сделано там специально для производительности.
29 ildary
 
09.04.18
15:12
(27) Виновата ли 1С, что программисты не поняли замысла с аналитикой?
30 Мыш
 
09.04.18
15:16
(29) 1С виновата в отсутствии документации к программным интерфейсам. Разжевать и принести на блюдечке с каемочкой.
31 VS-1976
 
09.04.18
15:20
(26) Внутреннее соединение с регистром АналитикаУчетаНоменклатуры

Если РегистрНакопления.СебестоимостьТоваров

Внутреннее соединение с регистром АналитикаУчетаНоменклатуры

То кол ( 1 )

Если регистр АналитикаУчетаНоменклатуры

Внутреннее соединение РегистрНакопления.СебестоимостьТоваров

То 2 :)
32 Мыш
 
09.04.18
15:46
(31) Ошибка у вас.
33 VS-1976
 
09.04.18
16:05
(32) Зачем лишнее соединение вообще? (10) давно он сам дал ответ что ему нужно
34 Вафель
 
09.04.18
16:07
(30) 1с  виновата в том, что не может составные индексы и поэтому городит велосипеды из регистров сведений
35 Мыш
 
09.04.18
16:17
(33) Соединение для ускорения отбора по ключу аналитики. Типовой механизм последних конфигураций.
36 toypaul
 
гуру
09.04.18
16:17
нифига запрос непростой. потому что условие не попадает в индекс. если бы попадало, тогда да
37 Мыш
 
09.04.18
16:18
(36) Регистр сведений проиндексирован. Условие попадает в индекс.
38 toypaul
 
гуру
09.04.18
16:22
ну видимо СКЛ так не считает коли запрос 5 мин выполняется
39 Мыш
 
09.04.18
16:24
(38) В его варианте - да, 5 минут. Я же предложил типовой механизм, который значительно быстрее.
40 youalex
 
09.04.18
16:26
(38) потому что .АналитикаУчетаНоменклатуры.Номенклатура - неявное соединение со справочником, а не с регистром. А в регистре ресурс Аналитика - проиндексирован.
Собственно, о чём писали в (34)