Имя: Пароль:
1C
1С v8
Группировка объединения запросов
0 suvolod
 
30.05.12
14:17
Взял два регистра сведений: ЦеныАТТ и ЦеныНоменклатуры.
Объединяю их вот таким запросом:

ВЫБРАТЬ
   ЦеныАТТСрезПоследних.Номенклатура КАК Номенклатура,
   ЦеныАТТСрезПоследних.Цена КАК ЦенаАТТ,
   ЦеныАТТСрезПоследних.Склад КАК СкладАТТ,
   0 КАК ЦенаРозничная
ПОМЕСТИТЬ ВремТаб
ИЗ
   РегистрСведений.ЦеныАТТ.СрезПоследних КАК ЦеныАТТСрезПоследних

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
   ЦеныНоменклатурыСрезПоследних.Номенклатура,
   0,
   ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка),
   ЦеныНоменклатурыСрезПоследних.Цена
ИЗ
   РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ТипЦен = &Розничные) КАК ЦеныНоменклатурыСрезПоследних
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   ВремТаб.Номенклатура,
   ВремТаб.ЦенаРозничная КАК ЦенаРозничная,
   ВремТаб.ЦенаАТТ КАК ЦенаАТТ,
   ВремТаб.СкладАТТ КАК СкладАТТ
ИЗ
   ВремТаб КАК ВремТаб

Не могу понять, как мне потом их свернуть в полученной времтаб...
На выходе мне нужна табличка
------------------
Номенклатура, ЦенаАТТ, ЦенаРозничная  - и сгруппировать каждую такую строку в разрезе складов.
------------------

Из-за этих самых складов (точнее, их отсутствия в РС ЦеныНоменклатуры), свернуть по складам не получается. Возможно, здесь вообще объединение не нужно, но как тогда сделать правильно?
1 Wobland
 
30.05.12
14:19
(0) соединяй
2 suvolod
 
30.05.12
14:21
чтобы соединять, тогда надо будет добавлять в запрос справочник номенклатура. А я не хотел этого делать (мне нужна только та номенклатура, по которой есть либо ЦенаАТТ, либо Розничная). Можно, конечно, потом отсеить пустые записи через ГДЕ... но разве проще способа нет?
3 Wobland
 
30.05.12
14:22
(2) ну сам же всё знаешь ;)
4 bodri
 
30.05.12
14:23
вложенный запрос
5 suvolod
 
30.05.12
14:24
А вложенным как?
6 shuhard
 
30.05.12
14:26
(5) прям так окаймить скобками и сгруппировать
7 suvolod
 
30.05.12
14:28
это понятно, я смысла не понимаю.... фактически то-же самое будет, что и через ВремТаб, просто без создания этой самой времтаб. Т.е. цеплять третью таблицу (справочник номенклатура) и убирать лишние записи через ГДЕ все-равно придется.
8 Maxus43
 
30.05.12
14:28
(2) зачем справочник номенклатура? Полное соединение
9 ilya_i
 
30.05.12
14:29
а может внешнее соединение
10 suvolod
 
30.05.12
14:30
не догоняю.. но сейчас попробую. может озарит :)
11 shuhard
 
30.05.12
14:31
(7) окстись
12 Maxus43
 
30.05.12
14:31
ВЫБРАТЬ
   ЕСТЬNULL(ЦеныАТТ.Номенклатура, ЦеныНоменклатуры.Номенклатура) КАК Номенклатура,
   ЦеныАТТ.Цена КАК ЦенаАТТ,
   ЦеныНоменклатуры.Цена КАК ЦенаРозничная
ИЗ
   РегистрСведений.ЦеныАТТ КАК ЦеныАТТ
       ПОЛНОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
       ПО ЦеныАТТ.Номенклатура = ЦеныНоменклатуры.Номенклатура

всякие срезы и т.д. сам прикрутишь
13 Maxus43
 
30.05.12
14:35
(9) Ключевое слова ВНЕШНЕЕ можно не указывать вообще, оно повышает наглядность и удобочитаемость текста запроса (с)
14 suvolod
 
30.05.12
14:37
(12) Спасибо :)! Чтобы все понять, мне не хватало вот этой строчки:

ЕСТЬNULL(ЦеныАТТ.Номенклатура, ЦеныНоменклатуры.Номенклатура) КАК Номенклатура,


вроде и просто, и логично, а сам догнать не смог. В голове только два левых соединения к к справочнику номенклатуры мысли были, с дальнейшим отбором по ГДЕ. Еще раз спасибо!