С Новым Годом, АЛЛ! Помогите новичку! Есть простенький запрос типа:
|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, но как этим воспользоваться тямы не хватает...
Помогите, плз!
|