Переключение на Главную Страницу Страницы: [1]  ОтправитьПечать
Горячая тема (более 10 ответов) Очень тормозит ТП (число прочтений - 2978 )
Bagirius
Full Member
***
Отсутствует



Сообщений: 135
Зарегистрирован: 19. Февраля 2008
Пол: Мужской
Очень тормозит ТП
10. Ноября 2010 :: 13:02
Печать  
Доброе время суток.
В прямых запросах не очень силен как и в ТП. Но что-то пытаюсь делать с помощью конструкторов и т.п.
Есть запрос, который очень сильно тормозит альтернативный журнал документов.

вот текст
ТекстЗапроса = "
                 |SELECT Журнал.IDDOC as [Док $Документ]
                 |      , Журнал.IDDOCDEF as Док_вид                  
                 |      , Журнал.DOCNO as Номер
                 |      , (Журнал.CLOSED & 1) as Проведен
                 |      , Журнал.ISMARK as ПометкаУдаления
                 |      , Журнал.DATE_TIME_IDDOC as ДатаВремяИдДок
                 |      , Журнал.DATE_TIME_IDDOC as ID
                 |FROM (SELECT Журнал.IDDOC as Документ
                 |      FROM $Документ.РасходнаяНакладнаяТ AS РасходнаяНакладнаяТ
                 |      FULL OUTER JOIN _1SJOURN AS Журнал ON РасходнаяНакладнаяТ.IDDOC = Журнал.IDDOC
                 |      FULL OUTER JOIN $Документ.РасходнаяБух AS РасходнаяБух ON РасходнаяБух.IDDOC = Журнал.IDDOC
                 |      FULL OUTER JOIN $ДокументСтроки.ВводДолгов AS ВводДолговСтроки ON ВводДолговСтроки.IDDOC = Журнал.IDDOC
                 |      WHERE " + ?(ПустоеЗначение(ВыбФирма) = 1, "", "(Журнал.$ОбщийРеквизит.Фирма = :ВыбФирма) AND ") + "
                 |            ((($РасходнаяНакладнаяТ.ПризнакНакладной = $Перечисление.ПризнакРасх.Продажа)
                 |            AND ($РасходнаяНакладнаяТ.Клиент = :ВыбКлиент))
                 |            OR
                 |            (($РасходнаяБух.ПризнакНакладной = $Перечисление.ПризнакРасхБух.РасходнаяБух)
                 |            AND ($РасходнаяБух.Клиент = :ВыбКлиент))
                 |            OR
                 |            ($ВводДолговСтроки.Клиент = :ВыбКлиент))
                 |      GROUP BY Журнал.IDDOC) as Подзапрос
                 |LEFT OUTER JOIN _1SJOURN AS Журнал ON (Подзапрос.Документ = Журнал.IDDOC)
           |";

Может кто посоветует, как можно ускорить (оптимизировать) мой запрос?
  
Наверх
ICQ  
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Очень тормозит ТП
Ответ #1 - 10. Ноября 2010 :: 13:28
Печать  
А какой журнал ты хочешь в итоге получить?
  
Наверх
 
IP записан
 
Leierkastenmann
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 114
Зарегистрирован: 30. Марта 2007
Re: Очень тормозит ТП
Ответ #2 - 10. Ноября 2010 :: 13:31
Печать  
Из написанного не очень понятно, что хочется получить.
Наличие OR в запросе может приводить к тормозам.
  
Наверх
 
IP записан
 
Bagirius
Full Member
***
Отсутствует



Сообщений: 135
Зарегистрирован: 19. Февраля 2008
Пол: Мужской
Re: Очень тормозит ТП
Ответ #3 - 10. Ноября 2010 :: 13:35
Печать  
Leierkastenmann писал(а) 10. Ноября 2010 :: 13:31:
Из написанного не очень понятно, что хочется получить.
Наличие OR в запросе может приводить к тормозам.

Три типа документов по определенному клиенту
  
Наверх
ICQ  
IP записан
 
Bagirius
Full Member
***
Отсутствует



Сообщений: 135
Зарегистрирован: 19. Февраля 2008
Пол: Мужской
Re: Очень тормозит ТП
Ответ #4 - 10. Ноября 2010 :: 13:37
Печать  
Два дока РасходнаяНакладнаяТ и РасходнаяБух, реквизит Клиент в шапке дока + у документов должен быть определенный признак, а тип дока ВводДолгов, клиент из ТЧ, т.е. если есть Клиент в ТЧ, то показать док ВводДолгов
  
Наверх
ICQ  
IP записан
 
Leierkastenmann
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 114
Зарегистрирован: 30. Марта 2007
Re: Очень тормозит ТП
Ответ #5 - 10. Ноября 2010 :: 13:38
Печать  
А случаем нет графы отбора, соответствующей клиенту?
  
Наверх
 
IP записан
 
Bagirius
Full Member
***
Отсутствует



Сообщений: 135
Зарегистрирован: 19. Февраля 2008
Пол: Мужской
Re: Очень тормозит ТП
Ответ #6 - 10. Ноября 2010 :: 13:41
Печать  
Leierkastenmann писал(а) 10. Ноября 2010 :: 13:38:
А случаем нет графы отбора, соответствующей клиенту?

Есть в конфигураторе графа отбора по клиенту для этих доков.
  
Наверх
ICQ  
IP записан
 
Leierkastenmann
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 114
Зарегистрирован: 30. Марта 2007
Re: Очень тормозит ТП
Ответ #7 - 10. Ноября 2010 :: 13:43
Печать  
Тогда выкинуть весь этот подзапрос страшный и заменить его на соединение с таблицей _1scrdoc, childid там это iddoc, parentval - клиент в виде строка 23, mdid - ид графы отбора.
  
Наверх
 
IP записан
 
Bagirius
Full Member
***
Отсутствует



Сообщений: 135
Зарегистрирован: 19. Февраля 2008
Пол: Мужской
Re: Очень тормозит ТП
Ответ #8 - 10. Ноября 2010 :: 13:50
Печать  
Leierkastenmann писал(а) 10. Ноября 2010 :: 13:43:
Тогда выкинуть весь этот подзапрос страшный и заменить его на соединение с таблицей _1scrdoc, childid там это iddoc, parentval - клиент в виде строка 23, mdid - ид графы отбора.


а вот как? не силен я в самостоятельном написании запросов, я все через конструктор делаю
  
Наверх
ICQ  
IP записан
 
Leierkastenmann
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 114
Зарегистрирован: 30. Марта 2007
Re: Очень тормозит ТП
Ответ #9 - 10. Ноября 2010 :: 13:55
Печать  
Как-то так
Код
Выбрать все
	ТекстЗапроса = "
	|SELECT Журнал.IDDOC as [Док $Документ]
	|	, Журнал.IDDOCDEF as Док_вид
	|	, Журнал.DOCNO as Номер
	|	, (Журнал.CLOSED & 1) as Проведен
	|	, Журнал.ISMARK as ПометкаУдаления
	|	, Журнал.DATE_TIME_IDDOC as ДатаВремяИдДок
	|	, Журнал.DATE_TIME_IDDOC as ID
	|FROM  _1SJOURN AS Журнал (nolock)
	|JOIN	_1SCRDOC as ГрафыОтбора (nolock)
	|ON		ГрафыОтбора.chilid = Журнал.iddoc
	|		and
	|		ГрафыОтбора.mdid = $ГрафаОтбора.Клиент
	|where	ГрафыОтбора.parentval = :ВыбКлиент*";
 



признаки расходных накладных я правда повыкидывал  Улыбка, а у на них нет графы отбора?
  
Наверх
 
IP записан
 
Anatol
Senior Member
****
Отсутствует


тыц, пыц, тыц!!!

Сообщений: 412
Зарегистрирован: 24. Апреля 2009
Re: Очень тормозит ТП
Ответ #10 - 10. Ноября 2010 :: 13:57
Печать  
и добавить условие по виду документов...
  
Наверх
wwwICQ  
IP записан
 
Leierkastenmann
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 114
Зарегистрирован: 30. Марта 2007
Re: Очень тормозит ТП
Ответ #11 - 10. Ноября 2010 :: 14:01
Печать  
Anatol писал(а) 10. Ноября 2010 :: 13:57:
и добавить условие по виду документов...


Если нужно, то можно и добавить.
  
Наверх
 
IP записан
 
Bagirius
Full Member
***
Отсутствует



Сообщений: 135
Зарегистрирован: 19. Февраля 2008
Пол: Мужской
Re: Очень тормозит ТП
Ответ #12 - 10. Ноября 2010 :: 14:10
Печать  
Leierkastenmann писал(а) 10. Ноября 2010 :: 13:55:
Как-то так
Код
Выбрать все
	ТекстЗапроса = "
	|SELECT Журнал.IDDOC as [Док $Документ]
	|	, Журнал.IDDOCDEF as Док_вид
	|	, Журнал.DOCNO as Номер
	|	, (Журнал.CLOSED & 1) as Проведен
	|	, Журнал.ISMARK as ПометкаУдаления
	|	, Журнал.DATE_TIME_IDDOC as ДатаВремяИдДок
	|	, Журнал.DATE_TIME_IDDOC as ID
	|FROM  _1SJOURN AS Журнал (nolock)
	|JOIN	_1SCRDOC as ГрафыОтбора (nolock)
	|ON		ГрафыОтбора.chilid = Журнал.iddoc
	|		and
	|		ГрафыОтбора.mdid = $ГрафаОтбора.Клиент
	|where	ГрафыОтбора.parentval = :ВыбКлиент*";
 



признаки расходных накладных я правда повыкидывал  Улыбка, а у на них нет графы отбора?


Спасибо, получилось!!! на счет признаков. Как их можно добавить?
У всех доков разные виды типов. Т.е. в одном - это одно перечисление, в другом - другой вид перечисления в третем вообще нет типа
  
Наверх
ICQ  
IP записан
 
Leierkastenmann
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 114
Зарегистрирован: 30. Марта 2007
Re: Очень тормозит ТП
Ответ #13 - 10. Ноября 2010 :: 14:19
Печать  
С условиями на вид документов почти все прелести графы отбора прахом пойдут...  Печаль
  
Наверх
 
IP записан
 
Bagirius
Full Member
***
Отсутствует



Сообщений: 135
Зарегистрирован: 19. Февраля 2008
Пол: Мужской
Re: Очень тормозит ТП
Ответ #14 - 10. Ноября 2010 :: 14:22
Печать  
Leierkastenmann писал(а) 10. Ноября 2010 :: 14:19:
С условиями на вид документов почти все прелести графы отбора прахом пойдут...  Печаль


Тогда лучше пусть быстрее работает Улыбка))
в принципе в моем случае, не много ненужных доков попадет, лучше я их запрещу открывать.
  
Наверх
ICQ  
IP записан
 
Bagirius
Full Member
***
Отсутствует



Сообщений: 135
Зарегистрирован: 19. Февраля 2008
Пол: Мужской
Re: Очень тормозит ТП
Ответ #15 - 10. Ноября 2010 :: 14:23
Печать  
Leierkastenmann - Спасибо большое!!! Летает просто супер. А страдали больше года ))))))))))))))))
  
Наверх
ICQ  
IP записан
 
Leierkastenmann
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 114
Зарегистрирован: 30. Марта 2007
Re: Очень тормозит ТП
Ответ #16 - 10. Ноября 2010 :: 14:59
Печать  
Можно еще так попробовать
Код
Выбрать все
	ТекстЗапроса = "
	|SELECT Журнал.IDDOC as [Док $Документ]
	|	, Журнал.IDDOCDEF as Док_вид
	|	, Журнал.DOCNO as Номер
	|	, (Журнал.CLOSED & 1) as Проведен
	|	, Журнал.ISMARK as ПометкаУдаления
	|	, Журнал.DATE_TIME_IDDOC as ДатаВремяИдДок
	|	, Журнал.DATE_TIME_IDDOC as ID
	|FROM  _1SJOURN AS Журнал (nolock)
	|JOIN	(
	|			select 	РасхНакл.iddoc as Документ
	|			from	$Документ.РасходнаяНакладная РасхНакл (nolock)
	|			where	$РасхНакл.ПризнакНакладной = $Перечисление.ПризнакРасх.Продажа
	|					and
	|					$РасхНакл.Клиент = :ВыбКлиент
	|
	|			union all
	|
	|			select 	РасхНаклБ.iddoc
	|			from	$Документ.РасходнаяБух  РасхНаклБ (nolock)
	|			where	$РасхНаклБ.ПризнакНакладной = $Перечисление.ПризнакРасхБух.РасходнаяБух
	|					and
	|					$РасхНаклБ.Клиент = :ВыбКлиент
	|
	|			union all
	|
	|			select 	ВводДолгов.iddoc
	|			from	$Документ.ВводДолгов ВводДолгов (nolock)
	|			join	_1scrdoc as ГрафыОтбора (nolock)
	|			on		ГрафыОтбора.chilid = ВводДолгов.iddoc
	|					and
	|					ГрафыОтбора.mdid = $ГрафаОтбора.Клиент
	|			where	ГрафыОтбора.parentval = :ВыбКлиент*
	|		) Документы
	|on		Документы.Документ = Журнал.iddoc";
 



А по расходным накладным точно нет граф отбора никаких по видам, пусть даже по разным, только бы в шапках не рыться...
  
Наверх
 
IP записан
 
Bagirius
Full Member
***
Отсутствует



Сообщений: 135
Зарегистрирован: 19. Февраля 2008
Пол: Мужской
Re: Очень тормозит ТП
Ответ #17 - 10. Ноября 2010 :: 15:39
Печать  
Leierkastenmann писал(а) 10. Ноября 2010 :: 14:59:
А по расходным накладным точно нет граф отбора никаких по видам, пусть даже по разным, только бы в шапках не рыться...


Можно сделать, это не проблема
  
Наверх
ICQ  
IP записан
 
Bagirius
Full Member
***
Отсутствует



Сообщений: 135
Зарегистрирован: 19. Февраля 2008
Пол: Мужской
Re: Очень тормозит ТП
Ответ #18 - 10. Ноября 2010 :: 15:44
Печать  
Сделал графу отбора по двум типам дока РасходнаяНакладнаяТ и РасходнаяБух тип как неопределенный.
По третьему доку ВводДолгов отбор не нужен, т.к. доки попадают из отбора по Клиенту
  
Наверх
ICQ  
IP записан
 
Leierkastenmann
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 114
Зарегистрирован: 30. Марта 2007
Re: Очень тормозит ТП
Ответ #19 - 11. Ноября 2010 :: 06:24
Печать  
Ну тогда так
Код
Выбрать все
	ТекстЗапроса = "
	|SELECT Журнал.IDDOC as [Док $Документ]
	|	, Журнал.IDDOCDEF as Док_вид
	|	, Журнал.DOCNO as Номер
	|	, (Журнал.CLOSED & 1) as Проведен
	|	, Журнал.ISMARK as ПометкаУдаления
	|	, Журнал.DATE_TIME_IDDOC as ДатаВремяИдДок
	|	, Журнал.DATE_TIME_IDDOC as ID
	|FROM  _1SJOURN AS Журнал (nolock)  
	|JOIN	(
	|			select 	РасхНакл.iddoc as Документ
	|			from	$Документ.РасходнаяНакладная РасхНакл (nolock)
	|			join	_1scrdoc as ГрафыОтбора (nolock)
	|			on		ГрафыОтбора1.chilid = РасхНакл.iddoc
	|					and
	|					ГрафыОтбора1.mdid = $ГрафаОтбора.Клиент
	|					and
	|					ГрафыОтбора1.parentval = :ВыбКлиент*
	|			join	_1scrdoc as ГрафыОтбора (nolock)
	|			on		ГрафыОтбора2.chilid = РасхНакл.iddoc
	|					and
	|					ГрафыОтбора2.mdid = $ГрафаОтбора.ВидРасходнойНакладной
	|					and
	|					ГрафыОтбора2.parentval = :ВидРасходнойНакладной*
	|
	|			union all
	|
	|			select 	РасхНаклБ.iddoc
	|			from	$Документ.РасходнаяБух  РасхНаклБ (nolock)
	|			join	_1scrdoc as ГрафыОтбора1 (nolock)
	|			on		ГрафыОтбора1.chilid = РасхНаклБ.iddoc
	|					and
	|					ГрафыОтбора1.mdid = $ГрафаОтбора.Клиент
	|					and
	|					ГрафыОтбора1.parentval = :ВыбКлиент*
	|			join	_1scrdoc as ГрафыОтбора2 (nolock)
	|			on		ГрафыОтбора2.chilid = РасхНаклБ.iddoc
	|					and
	|					ГрафыОтбора2.mdid = $ГрафаОтбора.ВидРасходнойНакладной
	|					and
	|					ГрафыОтбора2.parentval = :ВидРасходнойНакладнойБ*
	|
	|			union all
	|
	|			select 	ВводДолгов.iddoc
	|			from	$Документ.ВводДолгов ВводДолгов (nolock)
	|			join	_1scrdoc as ГрафыОтбора (nolock)
	|			on		ГрафыОтбора.chilid = ВводДолгов.iddoc
	|					and
	|					ГрафыОтбора.mdid = $ГрафаОтбора.Клиент
	|			where	ГрафыОтбора.parentval = :ВыбКлиент*  
	|		) Документы
	|on		Документы.Документ = Журнал.iddoc";
 



ВидРасходнойНакладной и ВидРасходнойНакладнойБ это нужные значения перечисления, я правда никогда не пробовал перечисления приводить к строке 23 в 1с++, если такой записью не приведет, то надо будет как-то иначе в запрос подпихнуть соответствующие строки.

Но графу отбора вы слегка поторопились добавлять  Улыбка Может вам бы и с шапками сгодился вариант, зависит от количества документов. Хотя если тормозило, то количество наверное немаленькое.
В общем у вас два варианта есть, можете оба попробовать и сделать вывод как в вашем случае будет лучше - запрос по шапкам или по графам отбора.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 
ОтправитьПечать