Имя: Пароль:
1C
1C 7.7
v7: Помогите с SQL
0 pofigos
 
07.08.12
18:07
Всех приветствую. Прошу помощи в создании запроса.

Есть такой запрос:


SELECT NullIf(Cast(Left(Реализация.DATE_TIME_IDDOC, 8) AS datetime), '17530101') Документ_дата
   , Реализация.IDDOCDEF [Документ_вид $ВидДокументаПредставление]
   , $Реализация.Накладная [Накладная $Справочник.Документы]
   , $Реализация.Товар [Товар $Справочник.ВидыТоваров]
   , $Реализация.Признак [Признак $Справочник.ТипыОпераций]
   , Sum($Реализация.Количество) СуммаКоличество
FROM $Регистр.Реализация AS Реализация With (NOLOCK)
WHERE (Cast(Left(Реализация.DATE_TIME_IDDOC, 8) AS datetime) >= :НачДата)
   AND (Cast(Left(Реализация.DATE_TIME_IDDOC, 8) AS datetime) <= :КонДата)
   AND ($Реализация.Товар IN (SELECT Val FROM #ГруппаТов))
GROUP BY Реализация.IDDOCDEF
   , Cast(Left(Реализация.DATE_TIME_IDDOC, 8) AS datetime)
   , $Реализация.Накладная
   , $Реализация.Товар
   , $Реализация.Признак
ORDER BY Cast(Left(Реализация.DATE_TIME_IDDOC, 8) AS datetime)
   , $Реализация.Накладная
   , $Реализация.Товар
   , $Реализация.Признак

По регистру нет поля МОЛ, который указывается по документу. Каким образом можно напрямую в запросе установить выборку по этому полю? Помогите советом, примером и что лучше всего конечно, часть кода под этот запрос.. не могу понять что к чему :(
Если брать в общем, тыкните куда следуют (на будущее так сказать)

Спасибо.
1 Ёпрст
 
07.08.12
18:14
разве что присоединять все типы документов, которые могут толкать этот регистр и брать через coalesce реквизит из шапки/тч дока
2 pofigos
 
07.08.12
18:44
(1) Можно подробнее про coalesce. Вернее как правильно присоединить. Есть 4 типа документа, двигающие регистр.
3 pofigos
 
07.08.12
18:45
(2) Забыл Вид документа определяю сразу в запросе, и на сколько понимаю, можно сразу передавать в условие при соединении, так?
4 ADirks
 
08.08.12
07:50
Кстати, можно чуть по-другому (без coalesce). Часто так делаю, когда надо несколько реквизитов из нескольких видов документов получать.

left join (
  select IDDoc, МОЛ from $Документ.Вид1
  union all
  select IDDoc, МОЛ from $Документ.Вид2
  union all
  select IDDoc, МОЛ from $Документ.ВидN
) Док on Док.IDDoc = Реализация.IDDoc
5 Ёпрст
 
08.08.12
09:03
(4) да, через юнион побыстрее будет
6 ADirks
 
08.08.12
12:10
Не, быстрее врядли будет - в итоге планы запросов скорее всего будут идентичны. Просто мне так больше нравится.
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан