Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Горячая тема (более 10 ответов) Покритикуйте, пожалуйста запрос.... (число прочтений - 5957 )
Mikeware
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 262
Зарегистрирован: 27. Июля 2006
Пол: Мужской
Покритикуйте, пожалуйста запрос....
03. Мая 2007 :: 07:47
Печать  
Смысл - выдернуть недельные и месячные продажи по договору. Запрос работает. Скорость устраивает. Но так как я все еще начинающий, проверьте/прокритикуйте плз...
Код
Выбрать все
 |Select
 | Номенклатура [Номенклатура $Справочник.Номенклатура],
 | Sum(ПродажаМесяцКоличество) [ПродажаМесяцКоличество],
 | Sum(ПродажаНеделяКоличество) [ПродажаНеделяКоличество],
 | Sum(ПоследняяЦена)[ПоследняяЦена]
 |
 | from
 |(
  |Select
  |    РегПродажи.Номенклатура [Номенклатура],
  |    РегПродажи.ПродСтоимостьОборот [ ПродажаНеделяСумма],
  |    РегПродажи.КоличествоОборот [ПродажаНеделяКоличество],
  |		0 [ПродажаМесяцСумма],
  |		0 [ПродажаМесяцКоличество],
  |		0 [ПоследняяЦена]
  |
  |FROM
  |    $РегистрОбороты.Продажи(:МинусНеделя~,
  |:КонецПериода,
  |Период,
  |,
  |Договор=:ВыбДоговор,
  |(Номенклатура,Договор),
  | (ПродСтоимость,Количество)
  |) РегПродажи
  |Union All
  |Select
  |    РегПродажи.Номенклатура [Номенклатура],
  |     0 [ ПродажаНеделяСумма],
  |     0 [ПродажаНеделяКоличество],
  |		РегПродажи.ПродСтоимостьОборот [ПродажаМесяцСумма],
  |		РегПродажи.КоличествоОборот [ПродажаМесяцКоличество],
  |		0 [ПоследняяЦена]
  |
  |FROM
  |    $РегистрОбороты.Продажи(:МинусМесяц~,
  |:КонецПериода,
  |Период,
  |,
  |Договор=:ВыбДоговор,
  |(Номенклатура,Договор),
  | (ПродСтоимость,Количество)
  |) РегПродажи
  |Union All
  |Select distinct
  |    РегПродажи.Номенклатура [Номенклатура],
  |     0 [ПродажаНеделяСумма],
  |     0 [ПродажаНеделяКоличество],
  |		0 [ПродажаМесяцСумма],
  |		0 [ПродажаМесяцКоличество],
  |		(РегПродажи.ПродСтоимостьОборот)/(РегПродажи.КоличествоОборот) [ПоследняяЦена]
  |
  |FROM
  |    $РегистрОбороты.Продажи(:МинусМесяц~,
  |:КонецПериода,
  |Период,
  |,
  |Договор=:ВыбДоговор,
  |(Номенклатура,Договор),
  | (ПродСтоимость,Количество)
  |) РегПродажи
  |) as ПродажиПоДоговору
  |group by Номенклатура";

 

  
Наверх
ICQ  
IP записан
 
Mikeware
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 262
Зарегистрирован: 27. Июля 2006
Пол: Мужской
Re: Покритикуйте, пожалуйста запрос....
Ответ #1 - 03. Мая 2007 :: 08:19
Печать  
А как выдернуть группу номенклатуры, и базовую единицу номенклатуры? что-то не получается.
  
Наверх
ICQ  
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

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

+IMHO, выражению (РегПродажи.ПродСтоимостьОборот)/(РегПродажи.КоличествоОборот) не подходит алиас [ПоследняяЦена].  Нерешительный
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Покритикуйте, пожалуйста запрос....
Ответ #3 - 03. Мая 2007 :: 08:29
Печать  
Mikeware писал(а) 03. Мая 2007 :: 08:19:
А как выдернуть группу номенклатуры, и базовую единицу номенклатуры? что-то не получается.

Код
Выбрать все
SELECT
СпрНоменклатура.PARENTEXT [Группа $Справочник.Номенклатура],
$СпрНоменклатура.БазоваяЕдиница [БазоваяЕдиница $???.???],
...
) as ПродажиПоДоговору INNER JOIN $Справочник.Номенклатура AS СпрНоменклатура (nolock) ON ПродажиПоДоговору.Номенклатура = СпрНоменклатура.ID
group by ПродажиПоДоговору.Номенклатура 


  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
Mikeware
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 262
Зарегистрирован: 27. Июля 2006
Пол: Мужской
Re: Покритикуйте, пожалуйста запрос....
Ответ #4 - 03. Мая 2007 :: 08:39
Печать  
Спасибо - забыл в последнем из объединенных поменять перидичность - с Период на Документ
  
Наверх
ICQ  
IP записан
 
Mikeware
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 262
Зарегистрирован: 27. Июля 2006
Пол: Мужской
Re: Покритикуйте, пожалуйста запрос....
Ответ #5 - 03. Мая 2007 :: 08:42
Печать  
berezdetsky писал(а) 03. Мая 2007 :: 08:29:
Код
Выбрать все
SELECT
СпрНоменклатура.PARENTEXT [Группа $Справочник.Номенклатура],
$СпрНоменклатура.БазоваяЕдиница [БазоваяЕдиница $???.???],
...
) as ПродажиПоДоговору INNER JOIN $Справочник.Номенклатура AS СпрНоменклатура (nolock) ON ПродажиПоДоговору.Номенклатура = СпрНоменклатура.ID
group by ПродажиПоДоговору.Номенклатура 



Странно, почти слово в слово написал... Проверю сейчас. Еще раз спасибо
  
Наверх
ICQ  
IP записан
 
Mikeware
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 262
Зарегистрирован: 27. Июля 2006
Пол: Мужской
Re: Покритикуйте, пожалуйста запрос....
Ответ #6 - 03. Мая 2007 :: 14:36
Печать  
Нужен - то parentid (parentext - это владелец). Но тем не менее,
Column 'СпрНоменклатура.PARENTID' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
  
Наверх
ICQ  
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Покритикуйте, пожалуйста запрос....
Ответ #7 - 03. Мая 2007 :: 15:10
Печать  
Ага, торможу.. Печаль
Добавь СпрНоменклатура.PARENTID и  $СпрНоменклатура.БазоваяЕдиница в список group by.
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
Mikeware
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 262
Зарегистрирован: 27. Июля 2006
Пол: Мужской
Re: Покритикуйте, пожалуйста запрос....
Ответ #8 - 03. Мая 2007 :: 15:33
Печать  
Спасибо. Впрочем, я торможу не слабее. Ты прав, "последняя цена"  - не совсем подходящий алиас... Если поставки были по одной цене , или поставка была одна - все прекрасно. Если были поставки по разным ценам - цены -гыгыгы- суммируются.....
  
Наверх
ICQ  
IP записан
 
Mikeware
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 262
Зарегистрирован: 27. Июля 2006
Пол: Мужской
Re: Покритикуйте, пожалуйста запрос....
Ответ #9 - 04. Мая 2007 :: 05:47
Печать  
Может, кто наткнет на идею получения последней цены одним запросом?
  
Наверх
ICQ  
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Покритикуйте, пожалуйста запрос....
Ответ #10 - 04. Мая 2007 :: 09:20
Печать  
Mikeware писал(а) 04. Мая 2007 :: 05:47:
Может, кто наткнет на идею получения последней цены одним запросом?

Код
Выбрать все
|select distinct $Продажи.Номенклатура [Номенклатура $справочник.Номенклатура]
|    , (select top 1 $цены.ПродСтоимость / $цены.Количество
|	  from $регистр.Продажи цены (nolock)
|	  where $цены.Количество <> 0
|		and $цены.Номенклатура = $Продажи.Номенклатура
|		and цены.date_time_iddoc between :МинусМесяц~ and :КонецПериода
|		and $цены.Договор = :ВыбДоговор
|	  order by цены.date_time_iddoc desc) цена
|from $регистр.Продажи Продажи (nolock)
|where Продажи.date_time_iddoc between :МинусМесяц~ and :КонецПериода
|    and $Продажи.Договор = :ВыбДоговор 


Предполагается, что включена быстрая обработка движений.
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
Mikeware
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 262
Зарегистрирован: 27. Июля 2006
Пол: Мужской
Re: Покритикуйте, пожалуйста запрос....
Ответ #11 - 08. Мая 2007 :: 12:35
Печать  
berezdetsky писал(а) 04. Мая 2007 :: 09:20:
Код:

Забыл поблагодарить...
Код безусловно работает. Но по скорости - быстрее оказалось выгрузить все продажи за месяц, пробежаться по ТЗ, отметить последние и т.п....
Задумался. Неужели в кацапте и тому подобном - все только запросами?
  
Наверх
ICQ  
IP записан
 
Mikeware
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 262
Зарегистрирован: 27. Июля 2006
Пол: Мужской
Re: Покритикуйте, пожалуйста запрос....
Ответ #12 - 10. Мая 2007 :: 08:34
Печать  
Штатными средствами работает 3 минуты 30 секунд, прямым запросом - 30 секунд. Приятно...
  
Наверх
ICQ  
IP записан
 
Rem Ryahirev
YaBB Newbies
*
Отсутствует



Сообщений: 8
Местоположение: Барнаул
Зарегистрирован: 22. Марта 2007
Пол: Мужской
Re: Покритикуйте, пожалуйста запрос....
Ответ #13 - 11. Мая 2007 :: 20:51
Печать  
Да, а потом ты начнёшь в каждой реализации прямых запросов искать _разы_ ускорения... я думаю, что это зависимость... Смех
  
Наверх
ICQ  
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать