Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Добавить интеллекта запросу: шапка или табл. часть (число прочтений - 1601 )
Kapet
Senior Member
****
Отсутствует


Ламер - вансист

Сообщений: 262
Местоположение: Ukraine, Kyiv
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Добавить интеллекта запросу: шапка или табл. часть
06. Января 2007 :: 12:11
Печать  
С Новым Годом, АЛЛ!
Помогите новичку!
Есть простенький запрос типа:

|SELECT
|      Журнал.IDDoc as [Док $Документ]
|,      Журнал.IDDocDef as Док_вид
|,      Контрагенты.ID as [Контрагент $Справочник.Контрагенты]
|FROM
|      _1SJourn as Журнал
|INNER JOIN
|      $Документ."+_ВидДокумента+" as Докум  With (NOLOCK) ON Журнал.IDDoc = Докум.IDDoc
|LEFT JOIN
|      $Справочник.Контрагенты as Контрагенты With (NOLOCK) ON ($Докум.Контрагент = Контрагенты.ID)
|WHERE
|      Журнал.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~

Сам оригинальный запрос конечно сложнее, но приводится упрощенный вариант для просьбы о помощи.
Оригинальный запрос строится по всем документам любого журнала, причем требуется в колонке Контрагент выводить или контрагента из шапки документа если таковой там есть, или контрагента из его табличной части если таковой есть там, или пустое значение если реквизит Контрагент как элемент справочника Контрагенты отсутствует в документе напроч.

Конечно, можно решить вопрос средствами самой 1С, но это, IMHO, не есть элегантно, и так будет только по причине моей узколобости.

Наивно предполагаю, что если Контрагент находится в табличной части, то запрос будет отличаться только строкой:

|INNER JOIN
|      $ДокументСтроки."+_ВидДокумента+" AS Докум  With (NOLOCK) ON Докум.IDDOC = Журнал.IDDOC

и вроде как-то надо применить Case When Then или Coalesce, но не могу сообразить как грамотно определить средствами T-SQL наличие или отсутствие или в шапке, или в табл. части документа требуемого реквизита.
Даже уже догадываюсь, что если шапка $Документ."+_ВидДокумента+" есть, допустим, таблица dh3210, то его табличная часть будет dt3210, а поле $Докум.Контрагент будет допустим sp3212, но как этим воспользоваться тямы не хватает...

Помогите, плз!
  
Наверх
ICQ  
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Добавить интеллекта запросу: шапка или табл. ч
Ответ #1 - 08. Января 2007 :: 10:16
Печать  
Наличие и расположение реквизита "Контрагент" следует определять с помощью объекта "Метаданные". И строить запрос на T-SQL уже исходя из полученной информации.

Цитата:
Оригинальный запрос строится по всем документам любого журнала

Состав полей, входящих в колонку журнала, можно получить аналогичным образом.
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
Kapet
Senior Member
****
Отсутствует


Ламер - вансист

Сообщений: 262
Местоположение: Ukraine, Kyiv
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Re: Добавить интеллекта запросу: шапка или табл. ч
Ответ #2 - 08. Января 2007 :: 18:10
Печать  
Метаданными вопрос давно решен. Думал, может можно как-то впихнуть условие в запрос для шустроты. Но на нет и суда нет, все равно спасибо!
  
Наверх
ICQ  
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать