Имя: Пароль:
1C
1C 7.7
v7: Прямой запрос
0 Dolly_EV
 
08.10.12
13:31
Есть вот такой запрос
       ТекстЗапросаОбороты = "
       |ВЫБРАТЬ
       |  $СпрАлк.ВидПродукции КАК [ВидАП $Справочник.алкВидыПродукции],
       |  РегАлкОО.Номенклатура КАК [Номенклатура $Справочник.Номенклатура],
       |  РегАлкОО.ТекущийДокумент КАК [ТекДок $Документ],
       |  РегАлкОО.ВидДокумента КАК [ТекДок_вид $ВидДокумента],
       |  СУММА(РегАлкОО.КоличествоПриход) КАК КолПрих,
       |  СУММА(РегАлкОО.КоличествоРасход) КАК КолРасх
       |ИЗ
       |  $РегистрОбороты.ДвиженияАлкоголя(:лНачДата,:лКонДата~,ДОКУМЕНТ,
       |                                (Фирма=:лФирма И 1=1 И 4=4),
       |                                (Номенклатура),
       |                                (Количество)) КАК РегАлкОО
       |ВНУТРЕННЕЕ СОЕДИНЕНИЕ
       | Справочник.АлкНоменклатура КАК СпрАлк $nolock
       |ПО
       | РегАлкОО.Номенклатура=$СпрАлк.Товар
       |ГДЕ
       |  (2=2)
       |СГРУППИРОВАТЬ
       | $СпрАлк.ВидПродукции,РегАлкОО.Номенклатура,РегАлкОО.ТекущийДокумент,РегАлкОО.ВидДокумента
       |УПОРЯДОЧИТЬ
       | $СпрАлк.ВидПродукции,РегАлкОО.Номенклатура,РегАлкОО.ТекущийДокумент";

Как правильно к нему приджойнить вот это?

       |  $РегАлк.КодОперации КАК [КодОпер $Перечисление.КодыОпераций],
       |  $РегАлк.ЛицензияНаша КАК [ЛицНаша $Справочник.алкСобственныеЛицензии],
       |  $РегАлк.Лицензия КАК [ЛицКонтр $Справочник.Лицензии]
       
       |ЛЕВОЕ СОЕДИНЕНИЕ
       | Регистр.ДвиженияАлкоголя КАК РегАлк $nolock
       |ПО
       | РегАлкОО.ТекущийДокумент=$РегАлк.ТекущийДокумент

До СГРУППИРОВАТЬ оно было вместе...
1 Mikeware
 
08.10.12
13:34
Оберни в еще один запрос.
ну и упорячивание - в конец итогового запроса...
2 Dolly_EV
 
08.10.12
13:40
(1) "Оберни в еще один запрос. " - вот здесь и не выходит каменный цветок (-: Можно на этом примере наглядно?
3 Mikeware
 
08.10.12
13:49
ВЫБРАТЬ
...
ИЗ
(Выбрать
...
)блабла
левое соединение.... =блабла.ТекущийДокумент
упорядочить по ...
4 Dolly_EV
 
08.10.12
13:59
|ИЗ
       |(ВЫБРАТЬ
       |  $РегАлк.КодОперации КАК [КодОпер $Перечисление.КодыОпераций],
       |  $РегАлк.ЛицензияНаша КАК [ЛицНаша $Справочник.алкСобственныеЛицензии],
       |  $РегАлк.Лицензия КАК [ЛицКонтр $Справочник.Лицензии]
       | ИЗ
       | Регистр.ДвиженияАлкоголя) КАК РегАлк $nolock
       |ЛЕВОЕ СОЕДИНЕНИЕ
       | $РегистрОбороты.ДвиженияАлкоголя(:лНачДата,:лКонДата~,ДОКУМЕНТ,
       |                                (Фирма=:лФирма И 1=1 И 4=4),
       |                                (Номенклатура),
       |                                (Количество)) КАК РегАлкОО
       |
       |ПО
       | РегАлкОО.ТекущийДокумент=$РегАлк.ТекущийДокумент


Ругается: State 42000, native 4104, message [Microsoft][ODBC SQL Server Driver][SQL Server]The multi-part identifier "РегАлк.SP48469" could not be bound.
5 Mikeware
 
08.10.12
14:18
(4) ну и посмотри препроцессированный текст
6 Dolly_EV
 
08.10.12
14:25
(5) там много букв, не осиливаю :(-
7 Ёпрст
 
08.10.12
14:49
(0) дык
$РегАлк.КодОперации,$РегАлк.ЛицензияНаша,$РегАлк.Лицензия

воткни в сгруппировать, или в селекте возьми максимум, если не хочешь группировать по ним
8 Dolly_EV
 
08.10.12
14:50
(7) это реквизиты регистра, не надо мне по ним группировку
9 Ёпрст
 
08.10.12
14:53
(8) тогда так:

селект
   max($РегАлк.КодОперации) КАК [КодОпер $Перечисление.КодыОпераций],
10 Dolly_EV
 
08.10.12
14:54
(9) и дальше - не вложенный запрос, а просто ЛЕВОЕ СОЕДИНЕНИЕ?
11 Ёпрст
 
08.10.12
14:56
да
12 Ёпрст
 
08.10.12
14:56
всё тоже самое, как и было до сгруппировать.. просто при сгруппировать, ты поля в максимум задвигаешь..
13 Ёпрст
 
08.10.12
14:56
по которым не хочешь делать группировку.
14 Ёпрст
 
08.10.12
14:57
или, делаешь вложенный запрос с группировать и к нему уже левое соединение ..
15 Dolly_EV
 
08.10.12
14:59
Вариант с max ругается: Incorrect syntax near 'MAX'.
16 Dolly_EV
 
08.10.12
15:02
Б..ь! запятую забыл.. Все, взлетел ковер-самолет!)) Ёпрст! в который раз ты меня выручаешь! СПАСИБО!
Вот так взлетело:
       ТекстЗапросаОбороты = "
       |ВЫБРАТЬ
       |  $СпрАлк.ВидПродукции КАК [ВидАП $Справочник.алкВидыПродукции],
       |  РегАлкОО.Номенклатура КАК [Номенклатура $Справочник.Номенклатура],
       |  РегАлкОО.ТекущийДокумент КАК [ТекДок $Документ],
       |  РегАлкОО.ВидДокумента КАК [ТекДок_вид $ВидДокумента],
       |  СУММА(РегАлкОО.КоличествоПриход) КАК КолПрих,
       |  СУММА(РегАлкОО.КоличествоРасход) КАК КолРасх,
       |  МАКСИМУМ($РегАлк.КодОперации) КАК [КодОпер $Перечисление.КодыОпераций],
       |  МАКСИМУМ($РегАлк.ЛицензияНаша) КАК [ЛицНаша $Справочник.алкСобственныеЛицензии],
       |  МАКСИМУМ($РегАлк.Лицензия) КАК [ЛицКонтр $Справочник.Лицензии]
       | ИЗ
       | $РегистрОбороты.ДвиженияАлкоголя(:лНачДата,:лКонДата~,ДОКУМЕНТ,
       |                                (Фирма=:лФирма И 1=1 И 4=4),
       |                                (Номенклатура),
       |                                (Количество)) КАК РегАлкОО
       |ЛЕВОЕ СОЕДИНЕНИЕ
       | Регистр.ДвиженияАлкоголя КАК РегАлк $nolock
       |ПО
       | РегАлкОО.ТекущийДокумент=$РегАлк.ТекущийДокумент
       |ВНУТРЕННЕЕ СОЕДИНЕНИЕ
       | Справочник.АлкНоменклатура КАК СпрАлк $nolock
       |ПО
       | РегАлкОО.Номенклатура=$СпрАлк.Товар
       |ГДЕ
       |  (2=2)
       |СГРУППИРОВАТЬ
       | $СпрАлк.ВидПродукции,РегАлкОО.Номенклатура,РегАлкОО.ТекущийДокумент,РегАлкОО.ВидДокумента
       |УПОРЯДОЧИТЬ
       | $СпрАлк.ВидПродукции,РегАлкОО.Номенклатура,РегАлкОО.ТекущийДокумент";

Но как через вложенный запрос - так и не понял (
17 Ёпрст
 
08.10.12
15:07
типа того


выбрать
 таб.Номенклатурка [....]
 ........
 РегАлк.Код
из
(  //тут вложенный запросец с группировать:
   выбрать
       номенклатурка
       .......
       из $РегистрОбороты.ДвиженияАлкоголя
    внутреннее соединение ...
  сгруппировать по .....
  ) как Таб

левое соединение Регистр.ДвиженияАлкоголя КАК РегАлк По РегАлк.Номенклатура = Таб.Номенклатурка
18 Ёпрст
 
08.10.12
15:07
только типизацию убери из вложенного запроса
19 Dolly_EV
 
08.10.12
15:12
(17) ааа, эвон как.. а я пихал в группируемый, ясно. Но в-принципе, если агрегатная МАКСИМУМ позволяет обойти ограничение на присутствие в СГРУППИРОВАТЬ всех полей, то и так нормально
Закон Брукера: Даже маленькая практика стоит большой теории.