Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема П.запрос по периодическим реквизитам из разных спр (число прочтений - 3041 )
Bess_Tolkovaia
Junior Member
**
Отсутствует


Натуральная блондинка,
1 штука

Сообщений: 89
Местоположение: Минск, РБ
Зарегистрирован: 26. Мая 2006
Пол: Женский
П.запрос по периодическим реквизитам из разных спр
26. Мая 2006 :: 11:50
Печать  
Есть у меня такая вот структура
В документе  табличная часть - товар, партия, количество
Товар и партия - справочники (вид не задан)
Партия, понятное дело, подченный Товару при любом виде Товар. Вариантов вида Товар на самом деле может быть 2 (например, номенклатура или материалы).
При проведении документа необходимо проверить состояние периодического реквизита Признак элемента Партия. (плюс еще и остатки....)
Хочется выбрать запросом, но те варианты, которые приходят в голову, настолько запутанные, что даже додумать до конца не получается. А хочется тем же запросом еще  и остатки получить... Подскажите, люди умные, в какую сторону думать....

Для начала я сделала запрос так:
Код
Выбрать все
|SELECT
|	ТЧД0.LINENO_ as НомСтр,
|	$ТЧД0.Товар as [ТоварДок $Справочник],
|	$ТЧД0.СН as [СНДок $Справочник],
|	$ТЧД0.Количество as Требуется,
|	COALESCE( $ПоследнееЗначение.Партии1.Сост(СпрСН1.ID, :ДатаСост, :ВремяСост),
|			  $ПоследнееЗначение.Партии.Сост(СпрСН.ID, :ДатаСост, :ВремяСост),
|			  $ПоследнееЗначение.Партии2.Сост(СпрСН2.ID, :ДатаСост, :ВремяСост)
|	) as [Признак $Перечисление.ПризнакГарантии]
|
|FROM
|	$ДокументСтроки.МойДокумент as ТЧД0 (NOLOCK)
|
|LEFT JOIN
|	$Справочник.Партии1 as СпрСН1 (nolock)
|	ON СпрСН1.id = $ТЧД0.СН
|
|LEFT JOIN
|	$Справочник.Партии2 as СпрСН2 (nolock)
|	ON СпрСН2.id = $ТЧД0.СН  
|
|LEFT JOIN
|	$Справочник.Партии as СпрСН (nolock)
|	ON СпрСН.id = $ТЧД0.СН
|
|where (ТЧД0.IDDOC = :ТекДок)
|";
 


Но в результирующей таблице колонка "Признак" пустая....  Нерешительный
« Последняя редакция: 26. Мая 2006 :: 12:57 - Bess_Tolkovaia »  
Наверх
ICQ  
IP записан
 
Quan
1c++ donor
1c++ power user
Отсутствует


I'm old, bald and ugly.

Сообщений: 273
Местоположение: Новосибирск -- Москва
Зарегистрирован: 20. Мая 2006
Пол: Мужской
Re: П.запрос по периодическим реквизитам из разных
Ответ #1 - 26. Мая 2006 :: 13:25
Печать  
С реквизитами неопределенного вида вообще тоскливо работать.
В данном случае - тоже через ж....
Режем строку ссылки на реквизит как рТип  LEFT(ХХХ,4) и рЗнач SUBSTRING(ХХХ,5,9)

А дальше в условии на _1sconst нечто вроде
where objid=рЗнач
AND (ртип='ААААА' AND id='BBBBB' OR ртип='CCCCC' AND id='DDDDD')
  

А для тех, кто не хотел учить SQL, господь сотворил курсоры
Наверх
 
IP записан
 
Bess_Tolkovaia
Junior Member
**
Отсутствует


Натуральная блондинка,
1 штука

Сообщений: 89
Местоположение: Минск, РБ
Зарегистрирован: 26. Мая 2006
Пол: Женский
Re: П.запрос по периодическим реквизитам из разных
Ответ #2 - 29. Мая 2006 :: 06:42
Печать  
Ой. Оказывается, запрос-то работает. Это просто не у всех элементов установлено значение реквизита....

Теперь осталось остатки "пришить" к нему же.
Проблема в том, что для тех элементов, для которых не задан признак, не возвращаются почему-то и остатки... Предполагаю, что как-то не так джойн происходит...
Код
Выбрать все
|SELECT
|	ТЧД0.LINENO_ as НомСтр,
|	$ТЧД0.Товар as [ТоварДок $Справочник],
|	$ТЧД0.СН as [СНДок $Справочник],
|	$ТЧД0.Количество as Требуется,
|	COALESCE( $ПоследнееЗначение.Партии1.Сост(СпрСН1.ID, :ДатаСост, :ВремяСост),
|			  $ПоследнееЗначение.Партии.Сост(СпрСН.ID, :ДатаСост, :ВремяСост)
|	) as [Признак $Перечисление.ПризнакСостояния],
|	IsNull(Рег.КоличествоОстаток,0) as Остаток
|
|FROM
|	$ДокументСтроки.МойДокумент as ТЧД0 (NOLOCK)
|
|LEFT JOIN
|	$Справочник.Партии1 as СпрСН1 (nolock)
|	ON $ТЧД0.СН = $ВидСправочника36.Партии1 + СпрСН1.id
|
|LEFT JOIN
|	$Справочник.Партии as СпрСН (nolock)
|	ON $ТЧД0.СН = $ВидСправочника36.Партии + СпрСН.id
|
|LEFT JOIN
|   $РегистрОстатки.ОстаткиСклад(:позДока~,
|		INNER JOIN $ДокументСтроки.МойДокумент as ТЧД (NOLOCK)
|			ON (Склад = $ВидСправочника36.МестаХранения + :СкладДока)
|			and (Товар = $ТЧД.Товар)
|			and (СН = $ТЧД.СН),
|			ТЧД.IDDOC = :ТекДок,,Количество) as Рег
|ON ((Рег.Склад = $ВидСправочника36.МестаХранения + :СкладДока)
|	and (Рег.Товар = $ТЧД0.Товар)
|	and (Рег.СН = $ТЧД0.СН)
|	)
|
|where (ТЧД0.IDDOC = :ТекДок)
|order by НомСтр

 

  
Наверх
ICQ  
IP записан
 
Bess_Tolkovaia
Junior Member
**
Отсутствует


Натуральная блондинка,
1 штука

Сообщений: 89
Местоположение: Минск, РБ
Зарегистрирован: 26. Мая 2006
Пол: Женский
Re: П.запрос по периодическим реквизитам из разных
Ответ #3 - 29. Мая 2006 :: 12:16
Печать  
Quan писал(а) 26. Мая 2006 :: 13:25:
С реквизитами неопределенного вида вообще тоскливо работать.
В данном случае - тоже через ж....
Режем строку ссылки на реквизит как рТип  LEFT(ХХХ,4) и рЗнач SUBSTRING(ХХХ,5,9)

А дальше в условии на _1sconst нечто вроде
where objid=рЗнач
AND (ртип='ААААА' AND id='BBBBB' OR ртип='CCCCC' AND id='DDDDD')


А можно ли рТип, определенную как описано выше, сравнивать с  $ВидСправочника36.<Вид справочника>?
Как оказалось, можно. Вот какой запрос в результате у меня получился, и работает (может, кому пригодиться)

Код
Выбрать все
| SELECT
|	ТЧД0.LINENO_ as НомСтр,
|	$ТЧД0.Товар as [Товар $Справочник],
|	$ТЧД0.СН as [СН $Справочник],
|	$ТЧД0.Количество as Требуется,
|	IsNull(Рег.КоличествоОстаток,0) as Остаток,
|
| 	[Признак $Перечисление.ПризнакПартии] = CASE LEFT($ТЧД0.Товар,4)
|		WHEN $ВидСправочника36.Материалы
|			THEN  $ПоследнееЗначение.Партии1.Сост(SUBSTRING($ТЧД0.СН,5,9), :ДатаСост, :ВремяСост)
|		WHEN $ВидСправочника36.Номенклатура
|			THEN  $ПоследнееЗначение.Партии.Сост(SUBSTRING($ТЧД0.СН,5,9),  :ДатаСост, :ВремяСост)
|	 ELSE 'Unknown'
|		END
|
|FROM
|		$ДокументСтроки.МойДокумент as ТЧД0 (NOLOCK)
|
|LEFT JOIN
|   $РегистрОстатки.ОстаткиСклад(:позДока~,
|		INNER JOIN $ДокументСтроки.МойДокумент as ТЧД (NOLOCK)
|			ON (Склад = $ВидСправочника36.МестаХранения + :СкладДока)
|			and (Товар = $ТЧД.Товар)
|			and (СН = $ТЧД.СН),
|			ТЧД.IDDOC = :ТекДок,,Количество) as Рег
|
|	ON ( (Рег.Товар = $ТЧД0.Товар) and (Рег.СН = $ТЧД0.СН)	)
|
|where (ТЧД0.IDDOC = :ТекДок)
|order by НомСтр

 



« Последняя редакция: 30. Мая 2006 :: 07:55 - Bess_Tolkovaia »  
Наверх
ICQ  
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать