Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Особенности работы штатного запроса (число прочтений - 2701 )
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Особенности работы штатного запроса
06. Июня 2007 :: 06:21
Печать  
Вот наткнулся недавно на такую вот "фичу" штатного запроса, если, конечно, кто-то на этом форуме ещё испльзует штатный запрос  Подмигивание .
Дело в том, что, если в тексте запроса есть что-то типа такого:
Код
Выбрать все
Условие(Склад в спСкладов); 


то всё работает отлично (=быстро).
Если же в запросе поставить такое:
Код
Выбрать все
Условие(Склад в структ.спСкладов); 


где струк - Структура, то появляется следующий эффект: одинэсина сначала выполняет запрос по ВСЕМ складам, а потом уже устанавливает фильтр, что заметно затормаживает формирование отчета. Т.е. если написать запрос по типу 2, то будет не важно поставил ли ты в условие один склад или все склады, запрос будет выполнятся примерно одинаковое количество времени.
Пробывал также и вместо структуры использовать свой класс, где есть только одна экспортная переменная "спСкладов". Результат тот же.  Печаль
Т.е., я так понимаю, одинэсине в условие надо подсовывать "чистые переменные" (="без точек").
Тест-пример для ТиС в прикреплённом файле.

P.S. тестировалось на 25-м релизе. База ДБФ. Проверьте, пжлст, на SQL.
  

testZap.ert ( 35 KB | Загрузки )
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Особенности работы штатного запроса
Ответ #1 - 06. Июня 2007 :: 06:44
Печать  
Немного доработанный отчет из 0-го поста. Добавлено доказательство того, что условие "через точку" накладывается после выполнения всего запроса без условий.
  

testZap_001.ert ( 35 KB | Загрузки )
Наверх
 
IP записан
 
Igor-bts
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 103
Зарегистрирован: 14. Июля 2006
Re: Особенности работы штатного запроса
Ответ #2 - 06. Июня 2007 :: 14:06
Печать  
Sql так же работает.

У 1с был пример на ИТС, как правильно писать запросы.
Вариант с точкой был в несколько раз медленней чем без точки Улыбка
  
Наверх
ICQ  
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Особенности работы штатного запроса
Ответ #3 - 06. Июня 2007 :: 14:34
Печать  
Igor-bts писал(а) 06. Июня 2007 :: 14:06:
Sql так же работает.

У 1с был пример на ИТС, как правильно писать запросы.
Вариант с точкой был в несколько раз медленней чем без точки Улыбка

А можешь показать какой запрос он отправляет на сервер?
  
Наверх
 
IP записан
 
Igor-bts
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 103
Зарегистрирован: 14. Июля 2006
Re: Особенности работы штатного запроса
Ответ #4 - 07. Июня 2007 :: 07:41
Печать  
со структурой отправляет 3 запроса:
1) select SC1274.DESCR, SC1274.PARENTID,RG5302.SP5304,RG5302.SP5305,0,0,RG5302.SP5305, 0,RG5302.SP5303,RG5302.SP5305
from  RG5302(NOLOCK) left outer join SC1274(NOLOCK) on RG5302.SP5304=SC1274.ID
where PERIOD = ''20061201''
2) select SC1274.DESCR, SC1274.PARENTID,RA5302.SP5304,0,case when DEBKRED = 0 then RA5302.SP5305 else 0 end,case when DEBKRED = 1 then RA5302.SP5305 else 0 end,0, 0,RA5302.SP5303,RA5302.SP5305
from  _1SJOURN(NOLOCK) left outer join RA5302(NOLOCK) on _1SJOURN.IDDOC=RA5302.IDDOC left outer join SC1274(NOLOCK) on RA5302.SP5304=SC1274.ID
where _1SJOURN.RF5302 = 1 and _1SJOURN.DATE_TIME_IDDOC >= ''20070101     0     0   '' and _1SJOURN.DATE_TIME_IDDOC < ''20070607     1     0   '' and _1SJOURN.CLOSED&1 = 1
3)select SC1274.DESCR, SC1274.PARENTID,RG5302.SP5304,RG5302.SP5305,0,0,RG5302.SP5305, 0,RG5302.SP5303,RG5302.SP5305
from  RG5302(NOLOCK) left outer join SC1274(NOLOCK) on RG5302.SP5304=SC1274.ID
where PERIOD = ''20070601''
Вариант без структуры
1) select SC1274.DESCR, SC1274.PARENTID,RG5302.SP5304,RG5302.SP5305,0,0,RG5302.SP5305, 0,RG5302.SP5303,RG5302.SP5305
from  RG5302(NOLOCK) left outer join SC1274(NOLOCK) on RG5302.SP5304=SC1274.ID
where PERIOD = ''20061201''  and (((RG5302.SP5303 =''     1   '')) and ((RG5302.SP5304 =''     1   '')))
2)select SC1274.DESCR, SC1274.PARENTID,RA5302.SP5304,0,case when DEBKRED = 0 then RA5302.SP5305 else 0 end,case when DEBKRED = 1 then RA5302.SP5305 else 0 end,0, 0,RA5302.SP5303,RA5302.SP5305
from  _1SJOURN(NOLOCK) left outer join RA5302(NOLOCK) on _1SJOURN.IDDOC=RA5302.IDDOC left outer join SC1274(NOLOCK) on RA5302.SP5304=SC1274.ID
where _1SJOURN.RF5302 = 1 and _1SJOURN.DATE_TIME_IDDOC >= ''20070101     0     0   '' and _1SJOURN.DATE_TIME_IDDOC < ''20070607     1     0   '' and _1SJOURN.CLOSED&1 = 1 and (((RA5302.SP5303 =''     1   '')) and ((RA5302.SP5304 =''     1   '')))
3)select SC1274.DESCR, SC1274.PARENTID,RG5302.SP5304,RG5302.SP5305,0,0,RG5302.SP5305, 0,RG5302.SP5303,RG5302.SP5305
from  RG5302(NOLOCK) left outer join SC1274(NOLOCK) on RG5302.SP5304=SC1274.ID
where PERIOD = ''20070601''  and (((RG5302.SP5303 =''     1   '')) and ((RG5302.SP5304 =''     1   '')))

  
Наверх
ICQ  
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Особенности работы штатного запроса
Ответ #5 - 07. Июня 2007 :: 07:52
Печать  
Чё-т трудно читаемо...
А можешь отчет попроще прогнать? Что-то типа:
ТекстЗапроса = "
|Товар = Справочник.Номенклатура.ТекущийЭлемент;
|Условие(Товар в "+?(черезСтруктуру=1,"структ.","")+"спТовров);
|Группировка Товар;
|";
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Особенности работы штатного запроса
Ответ #6 - 20. Июня 2007 :: 14:12
Печать  
Цитата:
Вот наткнулся недавно на такую вот "фичу"


А в чем фича то?
В штатных запросах 1С допускается использовать выражения языка 1С.
Естественно, что эти выражения не участвуют в запросах
и обрабатываются уже потом.
А как иначе???
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Особенности работы штатного запроса
Ответ #7 - 25. Июня 2007 :: 08:16
Печать  
kiruha писал(а) 20. Июня 2007 :: 14:12:
Цитата:
Вот наткнулся недавно на такую вот "фичу"


А в чем фича то?
В штатных запросах 1С допускается использовать выражения языка 1С.
Естественно, что эти выражения не участвуют в запросах
и обрабатываются уже потом.
А как иначе???

А иначе так: просто передать в запрос ЗНАЧЕНИЯ, а не потом фильтровать результаты запроса.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать