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


1C *.*, ROR, Java - на
этом остановимся

Сообщений: 907
Местоположение: Москва
Зарегистрирован: 20. Октября 2006
Пол: Мужской
Двойная выборка из табличной части документов
04. Мая 2008 :: 13:25
Печать  
Сломал себе сегодня голову  Печаль

есть запрос

Код
Выбрать все
SELECT
		Номенклатура.code КодТовар,
                Номенклатура.descr Наименование,
		$ТабличныеЧастиПереоценок.Цена as ПоследняяЦена,
	        Подзапрос.ТипаВремя as ПоследняяПереоценка,
		ЗоныЦен.descr as Зона
FROM  $Справочник.Номенклатура as Номенклатура
LEFT OUTER JOIN (
	SELECT
		$ПереоценкаСтроки.Товар [ИДТовара],
		$ШапкаПереоценка.ЗонаЦен [ИДЗоныЦен],
		ПереоценкаСтроки.LINENO_ [НомерСтроки],
		ПереоценкаСтроки.IDDOC   ИДДокумента,
        	MAX(Журнал.DATE_TIME_IDDOC) as ТипаВремя
	FROM
		$ДокументСтроки.Переоценка  AS ПереоценкаСтроки (NOLOCK)
	INNER JOIN
		_1SJOURN AS Журнал (NOLOCK) ON (ПереоценкаСтроки.IDDOC = Журнал.IDDOC)
	INNER JOIN
		$Документ.Переоценка ШапкаПереоценка ON (ШапкаПереоценка.IDDOC = ПереоценкаСтроки.IDDOC)
	WHERE
		(Журнал.closed = 5) and ($ШапкаПереоценка.КатегорияЦен = :ОсновнаяКатегорияЦен)
	GROUP BY
		$ПереоценкаСтроки.Товар,
		$ШапкаПереоценка.ЗонаЦен,
		ПереоценкаСтроки.LINENO_,
		ПереоценкаСтроки.IDDOC

) as Подзапрос ON (Номенклатура.ID = Подзапрос.ИДТовара)
INNER JOIN
	$Справочник.ЗонаЦен as ЗоныЦен ON (ЗоныЦен.ID = Подзапрос.ИДЗоныЦен)
INNER JOIN
	$ДокументСтроки.Переоценка as ТабличныеЧастиПереоценок (NOLOCK) ON
		(ТабличныеЧастиПереоценок.iddoc = Подзапрос.ИДДокумента) and (ТабличныеЧастиПереоценок.LINENO_ = Подзапрос.НомерСтроки)
WHERE
   (Номенклатура.isfolder = 2) and
   (Номенклатура.ismark = 0 )

 



Как бы в принципе запрос работает и выдает неоходимые данные (последний ценообразующий документ на товар)
есть несколько маленьких моментов

1. Enterprise Mamager в разделе показывает что процесс блокирует сам себя и поэтому запрос выполняется довольно долго -  что то я видимо нахимичил с повторной выборкой их ТЧ Переоценок.

2. План выполнения запроса полказывает что самым узким местом оказалось условие isClosed у журнала

3. А также меня не покидает чувство что запрос не оптимизирован  Печаль

Просьба: Пните пожалуйста в нужном направлении  Круглые глаза
  

бизнес-процесс как техническое задание прекрасно, только у бизнеса нет процессов; у бизнеса есть желание выжить
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Двойная выборка из табличной части документов
Ответ #1 - 04. Мая 2008 :: 13:47
Печать  
я бы порекомендовал внести условие WHERE  в соединение:
Код
Выбрать все
INNER JOIN
		_1SJOURN AS Журнал (NOLOCK) ON (ПереоценкаСтроки.IDDOC = Журнал.IDDOC) 


дополнить до вида
Код
Выбрать все
INNER JOIN
		_1SJOURN AS Журнал (NOLOCK) ON (ПереоценкаСтроки.IDDOC = Журнал.IDDOC) and (Журнал.closed = 5) 


ну и соответственно:
Код
Выбрать все
INNER JOIN
		$Документ.Переоценка ШапкаПереоценка ON (ШапкаПереоценка.IDDOC = ПереоценкаСтроки.IDDOC) and ($ШапкаПереоценка.КатегорияЦен = :ОсновнаяКатегорияЦен) 


условие
Код
Выбрать все
WHERE
		(Журнал.closed = 5) and ($ШапкаПереоценка.КатегорияЦен = :ОсновнаяКатегорияЦен) 


убрать
  
Наверх
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать