Имя: Пароль:
1C
1С v8
Неопределено, долго работает запрос
, ,
0 AntonU
 
29.08.19
12:50
Запрос=Новый Запрос;
Запрос.Текст="ВЫБРАТЬ
                 |    ПриходнаяНакладная.Ссылка
                 |ИЗ
                 |    Документ.ПриходнаяНакладная КАК ПриходнаяНакладная
                 |ГДЕ
                 |    ПриходнаяНакладная.Дата МЕЖДУ &Дата1 И &Дата2
                 |    И НЕ ПриходнаяНакладная.ПометкаУдаления
                 |    И ПриходнаяНакладная.ДокументДоп = Неопределено";

Долго работает запрос, можно ли его ускорить? Проблема в "Неопределено" ?
ДокументДоп - составного типа
1 RomanYS
 
29.08.19
12:52
долго это сколько?
С условием и без
2 sqr4
 
29.08.19
12:53
(0) и тип документДоп скажи
3 AntonU
 
29.08.19
12:56
(0) ДокументДоп - имеет составной тип:
ДокументСсылка.Документ1, ДокументСсылка.Документ2, ДокументСсылка.Документ3, ДокументСсылка.Документ4, ДокументСсылка.Документ5
4 AntonU
 
29.08.19
13:13
(1) Долго - это 97% от работы всей процедуры.
Если заменить
И ПриходнаяНакладная.ДокументДоп = Неопределено

На

И ПриходнаяНакладная.ДокументДоп Есть NULL

То работает очень быстро, но неправильно
5 Timon1405
 
29.08.19
13:18
переписать на объединение всех типов не вариант?
6 GedKo
 
29.08.19
13:20
а если будет не неопределено, а пустая ссылка?

зы. просто добавить реквизит булево ЗаполненДопДокумент сложно?
или регистр ПриходныеНакладныеБезДопДокументов?
7 RomanYS
 
29.08.19
13:23
(4) тогда уж
ПриходнаяНакладная.ДокументДоп.Ссылка Есть NULL

но это как раз должно быть очень медленно

97% - это ни о чём не говорит, если в остальной части нет обращений к данным
8 karabas11
 
29.08.19
13:25
ДокументДоп индексирвано?
9 hhhh
 
29.08.19
13:28
(4) Запрос.Текст="ВЫБРАТЬ
                 |    ПриходнаяНакладная.Ссылка,
                |    ПриходнаяНакладная.ПометкаУдаления,
                |    ПриходнаяНакладная.ДокументДоп
ПОМЕСТИТЬ ПрихНакладная
                 |ИЗ
                 |    Документ.ПриходнаяНакладная КАК ПриходнаяНакладная
                 |ГДЕ
                 |    ПриходнаяНакладная.Дата МЕЖДУ &Дата1 И &Дата2
                 |;

|ВЫБРАТЬ
                 |    ПрихНакладная.Ссылка

                 |ИЗ
                 |    ПрихНакладная КАК ПрихНакладная
                 |ГДЕ
                 |    НЕ ПрихНакладная.ПометкаУдаления
                 |    И ПрихНакладная.ДокументДоп = Неопределено";


так попробуйте
10 Йохохо
 
29.08.19
13:31
+ (9) или так, интересно
Запрос.Текст="ВЫБРАТЬ
                 |    ПриходнаяНакладная.Ссылка
                 |ИЗ
                 |    Документ.ПриходнаяНакладная КАК ПриходнаяНакладная
                 |ГДЕ
                 |    ПриходнаяНакладная.Дата МЕЖДУ &Дата1 И &Дата2
                 |    И НЕ ПриходнаяНакладная.ПометкаУдаления
                 | СГРУППИРОВАТЬ ПО ПриходнаяНакладная.Ссылка
                 | ИМЕЮЩИЕ
                 |    ПриходнаяНакладная.ДокументДоп = Неопределено"
11 hhhh
 
29.08.19
13:35
(4) но обычно так и есть. запрос всегда занимает 97% от процедуры. Если там 2 запроса, то примерно по 48% каждый, и так далее.
12 RomanYS
 
29.08.19
13:44
(4) озвучь уже время. Хотя бы порядок - секунды- десятки секунд - минуты
13 FIXXXL
 
29.08.19
13:49
(12) и нет ли проброса данных сервер-клиент? ну там ТЧ обработки какой-нибудь...
14 dezss
 
29.08.19
14:07
(4) А в чем неправильность?
15 RomanYS
 
29.08.19
14:14
(14) очевидно результат пустой.
16 palsergeich
 
29.08.19
14:22
(0) Не следует делать условия на поля составных типов.
17 palsergeich
 
29.08.19
14:23
(16) Ой, я ошипся, это не тот случай.
18 palsergeich
 
29.08.19
14:25
Конкретно в этом случае скорее всего непопадание в индекс и скан таблицы или ведро нестед лупсов, там как оптимизатор решит.
Нет покрывающего индекса на поля
Ссылка
Дата
ПометкаУдаления
ДокументДоп
19 Timon1405
 
29.08.19
14:27
(18) а если бы был, он бы помог в случае
|    И НЕ ПриходнаяНакладная.ПометкаУдаления  ?
20 dezss
 
29.08.19
14:36
(15) Ну это не совсем очевидно)))

А если сделать так?
ВЫБРАТЬ
ПриходнаяНакладная.Ссылка,
ТипЗначения(ПриходнаяНакладная.ДокументДоп) Как Тип
Поместить ВТ
ИЗ
Документ.ПриходнаяНакладная КАК ПриходнаяНакладная
ГДЕ
ПриходнаяНакладная.Дата МЕЖДУ &Дата1 И &Дата2
И НЕ ПриходнаяНакладная.ПометкаУдаления

ИНДЕКСИРОВАТЬ ПО
    Тип

Ну а следующим запросом уже выбрать необходимое?
21 НЕА123
 
29.08.19
14:40
(0)
условие сделать первым в ГДЕ

ПриходнаяНакладная.ДокументДоп = Неопределено
22 dezss
 
29.08.19
14:40
(21) на порядок условий вообще пофиг...
23 dezss
 
29.08.19
14:43
(20) блин....по типу нельзяиндексировать