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


I Love YaBB 2!

Сообщений: 27
Зарегистрирован: 13. Марта 2007
Помогите с сортировкой в прямом запросе
13. Марта 2007 :: 17:15
Печать  
Скажите, плиз а как в прямом запросе, отсортировать товар по количеству а затем по сумме по убыванию, а склады (это вложенная группировка) -  по сумме затем по количеству по возрастанию. Аналог запроса в 1С: 
 
     " 
     |Период с ВыбНачПериода по ВыбКонПериода; 
     |Товар = Регистр.Остатки.Товар.ТекущийЭлемент; 
     |Склад = Регистр.Остатки.Склад.ТекущийЭлемент; 
     |Количество = Регистр.Остатки.Количество; 
     |СуммаСНДС = Регистр.Остатки.СуммаСНДС; 
     |Функция КоличествоРасход = Расход(Количество); 
     |Функция СуммаСНДСРасход = Расход(СуммаСНДС); 
     |Группировка Товар упорядочить по КоличествоРасход, СуммаСНДСРасход; 
     |Группировка Склад упорядочить по СуммаСНДСРасход, КоличествоРасход; 
     |" 
Чтобы выбрать товар по убыванию при раскрытии группировки напишем 
Пока Запрос.Группировка("товар",-1)=1 Цикл 
... 
КонецЦикла 
 
Хочу тоже самое реализовать на 1С++.
  
Наверх
 
IP записан
 
lustin
1c++ power user
Отсутствует


1C *.*, ROR, Java - на
этом остановимся

Сообщений: 907
Местоположение: Москва
Зарегистрирован: 20. Октября 2006
Пол: Мужской
Re: Помогите с сортировкой в прямом запросе
Ответ #1 - 13. Марта 2007 :: 20:53
Печать  
А сортировка в SQL запросах вроде так делается

Order by
       <КолонкаСортировки1> ASC, - по возрастанию
       <КолонкаСортировки2> DESC, - по убыванию

Как себя поведет T-SQL, при разных типах колонок вот в чем вопрос Улыбка

По крайней мере ошибок синтаксических не выдает
     
  

бизнес-процесс как техническое задание прекрасно, только у бизнеса нет процессов; у бизнеса есть желание выжить
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
alex_gol
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 27
Зарегистрирован: 13. Марта 2007
Re: Помогите с сортировкой в прямом запросе
Ответ #2 - 13. Марта 2007 :: 22:59
Печать  
В том-то и дело, что нельзя отсортировать просто по количеству или просто по сумме, результат будет не верным. Нужно именно по  группировкам, чтобы внутри них можно было обойти в разных направлениях.
Надо придумать какие-то доп. столбцы в запросе и сортировать по ним.
Думаю, что нужно получить столбец, в котором напротив товара будет итог по этому товару, не зависимо от того, есть ли детализация по складу или нет. Что-то наподобие этого:

Товар         Склад            Количество        КоличествоТовараВсего
                       
Товар1                                               8                                            8
Товар1         Склад1                          3                                             8
Товар1         Склад2                          5                                             8
Товар2                                               9                                             9
Товар2         Склад1                          1                                             9
Товар2         Склад2                          6                                             9
Товар2         Склад3                          2                                             9


Аналогично проделать по сумме, и сортировка по этим столбцам даст нужный результат.
А как это реализовать на 1С++?

Вот запрос, который я строю:

SELECT
     $Рег.Товар as [Товар $Справочник.Номенклатура],
     GROUPING ($Рег.Товар) as ИтогПоТовару,
     $Рег.Магазин as [Магазин $Справочник.Магазины],
     GROUPING ($Рег.Магазин) as ИтогПоМагазину
     ,SUM($Рег.Количество) as  Количество
     ,SUM($Рег.СуммаБезНДС) as  СуммаБезНДС
     ,SUM($Рег.СуммаСНДС) as  СуммаСНДС
     ,SUM($Рег.НДС) as  НДС
     ,SUM($Рег.Доход) as  Доход
     ,SUM($Рег.СуммаБезСкидки) as  СуммаБезСкидки
     ,SUM($Рег.Скидка) as  Скидка
FROM
     $Регистр.Остатки as Рег
INNER JOIN
     _1Sjourn as Жур ON Жур.IDDoc = Рег.IDDoc
WHERE
  Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~
     AND
     Рег.DEBKRED=1
GROUP BY
     $Рег.Товар,
     $Рег.Магазин
     WITH ROLLUP
ORDER BY
     ИтогПоТовару DESC,
     $Рег.Товар,
     ИтогПоМагазину DESC,
     $Рег.Магазин

А вот как получить нужные мне дополнительные столбцы я не знаю.
« Последняя редакция: 14. Марта 2007 :: 02:04 - alex_gol »  
Наверх
 
IP записан
 
alex_gol
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 27
Зарегистрирован: 13. Марта 2007
Re: Помогите с сортировкой в прямом запросе
Ответ #3 - 27. Марта 2007 :: 00:29
Печать  
На оригинальность не претендую, но вдруг кому-то понадобится.
Вот так я решил для себя эту задачу:

SELECT
    $Рег.Товар as [Товар $Справочник.Номенклатура],
    GROUPING ($Рег.Товар) as ИтогПоТовару,
    $Рег.Магазин as [Магазин $Справочник.Магазины],
    GROUPING ($Рег.Магазин) as ИтогПоМагазину
    ,SUM($Рег.Количество) as  Количество
    ,MAX(Подзапрос.КоличествоПоТовару) as  КоличествоПоТовару
FROM
    $Регистр.Остатки as Рег
INNER JOIN  
    _1Sjourn as Жур ON Жур.IDDoc = Рег.IDDoc
LEFT OUTER JOIN
(
SELECT
    $Рег.Товар as Товар ,
    ,SUM($Рег.Количество) as  КоличествоПоТовару
FROM
    $Регистр.Остатки as Рег
INNER JOIN  
    _1Sjourn as Жур ON Жур.IDDoc = Рег.IDDoc
WHERE
  Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~
    AND
    Рег.DEBKRED=1
GROUP BY
    $Рег.Товар
WITH ROLLUP
) as Подзапрос  ON  $Рег.Товар=Подзапрос.Товар
WHERE
  Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~
    AND
    Рег.DEBKRED=1
GROUP BY  
    $Рег.Товар,
    $Рег.Магазин
    WITH ROLLUP
ORDER BY
    ИтогПоТовару DESC,
    КоличествоПоТовару DESC,
    $Рег.Товар,
    ИтогПоМагазину DESC,
    $Рег.Магазин


Таким же образом можно сделать и по сумме. При большем количестве группировок во вложенном запросе их будет всегда на одну меньше, чем в основном.
У кого есть идеи получше прошу написать.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать