Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Промлема с GROUP BY (число прочтений - 2593 )
sv_stas_sv
Junior Member
**
Отсутствует


1с++ lamer

Сообщений: 46
Зарегистрирован: 19. Июля 2006
Промлема с GROUP BY
28. Февраля 2008 :: 11:09
Печать  
День добрый!Есть такой запрос
     
ТекстЗапроса = "
     |SELECT
     |
     |";
     //Если Докум=1 Тогда
           ТекстЗапроса = ТекстЗапроса + "
           |  Жур.IDDoc as [Док $Документ.Реализация],
           |  Жур.DocNo as НомерДок,
           |  CAST(LEFT(Жур.Date_Time_IDDoc, 8) as DateTime) as ДатаДок,
           |";
     //КонецЕсли;
     ТекстЗапроса = ТекстЗапроса + "
     |  $ДокС.Номенклатура as [Номенклатура $Справочник.Номенклатура],
     |  $ДокС.Количество as Количество,
     |  $ДокС.Сумма as Сумма
     |FROM
     |  _1SJourn Жур
     |INNER JOIN
     | $Документ.Реализация as Док With (NOLOCK) ON Жур.IDDoc = Док.IDDoc
     |  AND $Док.КодОперации = :Статус
     |INNER JOIN 
     |  $ДокументСтроки.Реализация as ДокС With (NOLOCK) ON Жур.IDDoc = ДокС.IDDoc
     |  AND $ДокС.Количество>0
     |WHERE
     |  Жур.Date_Time_IDDoc BETWEEN :НачДата
     |  AND :КонДата~
     |  AND Жур.Closed & 1 = 1
     |"; 
     
     RS.Отладка(1);
     RS.УстановитьТекстовыйПараметр("НачДата",ВыбНачПериода);
     RS.УстановитьТекстовыйПараметр("КонДата",ВыбКонПериода);
     
     Если режП=3 Тогда
           
           RS.УстановитьТекстовыйПараметр("Статус",Перечисление.КодыОпераций.Продажа);
           
     Иначе
           
           RS.УстановитьТекстовыйПараметр("Статус",Перечисление.КодыОпераций.Заявка);
           ТекстЗапроса = ТекстЗапроса + "
           |AND $Док.ДатаОтгрузки <= :ДатаОтгрузки";
           
     КонецЕсли;      
     
     RS.УстановитьТекстовыйПараметр("ДатаОтгрузки",ДатаОтгрузки);
     
     Если ВыбНоменклатура.РазмерСписка()>0 Тогда 
           
           ТекстЗапроса = ТекстЗапроса + "
           |AND $ДокС.Номенклатура IN (SELECT Val FROM #Nom)";
           RS.УложитьСписокОбъектов(ВыбНоменклатура,"#Nom","Номенклатура");
           
     КонецЕсли; 
     
     Если ПустоеЗначение(ВыбТочныйВес)=0 Тогда
           
           ТекстЗапроса = ТекстЗапроса + "
           |AND $Док.ТочныйВес = :ТочныйВес";
           RS.УстановитьТекстовыйПараметр("ТочныйВес",ВыбТочныйВес);
           
     КонецЕсли;
     //группировка
                 ТекстЗапроса = ТекстЗапроса + "
                 |GROUP BY Жур.IDDoc
                 //|ORDER BU Жур.DocNo
                 |";
     
           ТЗ = RS.ВыполнитьИнструкцию(ТекстЗапроса);
       ТЗ.ВыбратьСтроку();

на SQL идет
SELECT


  Жур.IDDoc as [Док $Документ.Реализация],
  Жур.DocNo as НомерДок,
  CAST(LEFT(Жур.Date_Time_IDDoc, 8) as DateTime) as ДатаДок,

  ДокС.sp1599 as [Номенклатура $Справочник.Номенклатура],
  ДокС.sp1600 as Количество,
  ДокС.sp1604 as Сумма
FROM
  _1SJourn Жур
INNER JOIN
dh1611 as Док With (NOLOCK) ON Жур.IDDoc = Док.IDDoc
  AND Док.sp3338 = '   755   '
INNER JOIN 
  dt1611 as ДокС With (NOLOCK) ON Жур.IDDoc = ДокС.IDDoc
  AND ДокС.sp1600>0
WHERE
  Жур.Date_Time_IDDoc BETWEEN '20080201'
  AND '20080227Z'
  AND Жур.Closed & 1 = 1

AND Док.sp9267 <= '20080227'
GROUP BY Жур.IDDoc

ТЗ = RS.ВыполнитьИнструкцию(ТекстЗапроса);
{C:\DOCUMENTS AND SETTINGS\ADMIN\МОИ ДОКУМЕНТЫ\СЧЕТА ЗАЯВКИ_NEW.ERT(202)}: State 42000, native 8120, message [Microsoft][ODBC SQL Server Driver][SQL Server]Column 'Жур.DOCNO' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

Где ошибка?
  
Наверх
 
IP записан
 
Evgen
1c++ donor
Отсутствует



Сообщений: 33
Местоположение: Санкт-Петербург
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Промлема с GROUP BY
Ответ #1 - 28. Февраля 2008 :: 11:12
Печать  
Зачем у тебя GROUP BY если ты ничего не агрегируешь?
  
Наверх
IP записан
 
sv_stas_sv
Junior Member
**
Отсутствует


1с++ lamer

Сообщений: 46
Зарегистрирован: 19. Июля 2006
Re: Промлема с GROUP BY
Ответ #2 - 28. Февраля 2008 :: 11:24
Печать  
Мне нужна Группировка по документам
  
Наверх
 
IP записан
 
Evgen
1c++ donor
Отсутствует



Сообщений: 33
Местоположение: Санкт-Петербург
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Промлема с GROUP BY
Ответ #3 - 28. Февраля 2008 :: 11:31
Печать  
Group by это агрегатор если тебе нужно упорядочить по документам используй order by
И запрос строй к документу а приджойнивай _1SJourn
  
Наверх
IP записан
 
sv_stas_sv
Junior Member
**
Отсутствует


1с++ lamer

Сообщений: 46
Зарегистрирован: 19. Июля 2006
Re: Промлема с GROUP BY
Ответ #4 - 28. Февраля 2008 :: 11:41
Печать  
Мне нужно вот такой запрос

     ТекстЗапроса =
     "//{{ЗАПРОС(Сформировать)
     |Период с ВыбНачПериода по ВыбКонПериода;
     |Обрабатывать НеПомеченныеНаУдаление;
     |Фирма                          = Регистр.Заявки.Фирма;
     |Номенклатура                   = Регистр.Заявки.Номенклатура;
     |ОсновноеСвойство               = Регистр.Заявки.Номенклатура.ОсновноеСвойство;
     |ЗаявкаПокупателя               = Регистр.Заявки.ЗаявкаПокупателя;
     |ТочныйВес                      = Регистр.Заявки.ЗаявкаПокупателя.ТочныйВес;
     |ДОтгрузки                        = Регистр.Заявки.ЗаявкаПокупателя.ДатаОтгрузки;
     |ДатаЗаявки                        = Регистр.Заявки.ЗаявкаПокупателя.ДатаДок;
     |КоличествоРасход               = Регистр.Заявки.КоличествоРасход;
     |СтоимостьРасход                = Регистр.Заявки.СтоимостьРасход;
     |ТекущийДокумент                = Регистр.Заявки.ТекущийДокумент;
     |Функция КоличествоРасходНачОст = НачОст(КоличествоРасход);
     |Функция КоличествоРасходПриход = Приход(КоличествоРасход);
     |Функция КоличествоРасходРасход = Расход(КоличествоРасход);
       |Функция КоличествоРасходКонОст = КонОст(КоличествоРасход);
     |Группировка ЗаявкаПокупателя;";




привести к 1с++

  
Наверх
 
IP записан
 
sml
Full Member
***
Отсутствует


I Love 1С++!

Сообщений: 186
Зарегистрирован: 28. Февраля 2008
Re: Промлема с GROUP BY
Ответ #5 - 28. Февраля 2008 :: 13:14
Печать  
я так полагаю, что для колич-х полей надо применить функцию Sum(), а в Grop by должны быть перечислены все поля блока select, на которых нет функций.
  
Наверх
 
IP записан
 
pvase
God Member
*****
Отсутствует



Сообщений: 923
Местоположение: Киев
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Промлема с GROUP BY
Ответ #6 - 29. Февраля 2008 :: 13:17
Печать  
Если вам нужны данные из регистра - тогда запрос надо строить к регистру а не к документу. Если Нужно чтобы просто работал запрос в (0) в "GROUP BY" добавте:
Код
Выбрать все
	     |  Жур.IDDoc,
	     |  Жур.DocNo,
	     |  CAST(LEFT(Жур.Date_Time_IDDoc, 8) as DateTime),
	     |  $ДокС.Номенклатура 


А в SELECT-е добавте агрегацию вместо:
Код
Выбрать все
 |  $ДокС.Количество as Количество,
     |  $ДокС.Сумма as Сумма 


Код
Выбрать все
 |  SUM($ДокС.Количество) as Количество,
     |  SUM($ДокС.Сумма) as Сумма
 

  
Наверх
IP записан
 
sv_stas_sv
Junior Member
**
Отсутствует


1с++ lamer

Сообщений: 46
Зарегистрирован: 19. Июля 2006
Re: Промлема с GROUP BY
Ответ #7 - 01. Марта 2008 :: 16:43
Печать  
Спасибо за подсказку, будем разбираться Улыбка.....
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать