Переключение на Главную Страницу Страницы: 1 ... 5 6 [7] 8  ОтправитьПечать
Очень популярная тема (более 25 ответов) Выборка остатков прямым запросом (число прочтений - 30542 )
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Выборка остатков прямым запросом
Ответ #90 - 23. Сентября 2010 :: 17:41
Печать  
Z1, открой для себя это Улыбка
  

1&&2&&3
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Выборка остатков прямым запросом
Ответ #91 - 24. Сентября 2010 :: 08:02
Печать  
немного реабилитировал стандартный сводный остаток.
Значения через две точки вычисляются хуже  ( медленнее ) чем через одну точку
т.е. вместо
);

гораздо лучше использовать
Рег = СоздатьОбъект("Регистр.ОстаткиТоваров");
........
Ост=Рег.СводныйОстаток(,,Спр.ТекущийЭлемент(),"ОстатокТовара");


Результаты
Стандартный Сводный остаток Рег через одну точку
Сред = 14.6282   15.408   17.542   12.961   12.73   16.192   14.767   15.605   13.319   12.494   15.264   

Стандартный Сводный остаток
Сред = 18.2442   16.436   16.956   22.22   23.782   22.733   13.698   18.524   17.791   15.778   14.524   

Прямой запрос  + Параметр + ПостроитьПараметры
Сред = 15.9765   17.087   22.121   18.286   16.598   16.208   15.575   12.524   12.728   13.298   15.34   




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


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Выборка остатков прямым запросом
Ответ #92 - 24. Сентября 2010 :: 08:17
Печать  
Также стандартный запрос
Код
Выбрать все
Процедура Сформировать111()
Ост=Рег.СводныйОстаток(,,КонктерЯч,"ОстатокТовара");
Сообщить("Рег.СводныйОстаток Ост = " + Ост);
КонецПроцедуры
 


генерит код sql
Цитата:
exec sp_executesql
N'Select SUM(SP102)
from RG99 (NOLOCK)
where PERIOD=''20101201'' and SP4021 = @P1
GROUP BY PERIOD,SP4021',
N'@P1 varchar(9)', '   5JKZZZ'


Может кто ответит
1. почему нет преобразования периода PERIOD к datetime
2.зачем здесь нужен GROUP BY PERIOD,SP4021
3. почему входном параметр объявлен как varchar(9) а не  char(9)
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Выборка остатков прямым запросом
Ответ #93 - 24. Сентября 2010 :: 08:36
Печать  
вот как работает 1с++
Код
Выбрать все
Процедура Сформировать3()
	стрдатыТА=строка(формат(НачМесяца(ПолучитьДатуТА()),"ДГГГГММДД"));
	стрдатыТА = " cast('" + стрдатыТА + "' as " +  ТипДата_sql  + "  )";
    глОстТовара = СоздатьОбъект("ODBCRecordset");
	глОстТовара.Отладка(1);
ТекстЗапроса = "
     |SELECT
     |	SUM($Рег.ОстатокТовара)
     |FROM
     |	$РегистрИтоги.ОстаткиТоваров Рег (NoLock)
     |WHERE
     |	Рег.PERIOD="+стрдатыТА+" AND
     |	$Рег.СклЯчейка = :Зн_Ячейки
     |";
	 глОстТовара.РежимRPC(1);
	глОстТовара.УстановитьТекстовыйПараметр("Зн_Ячейки", КонктерЯч);
     ост=глОстТовара.ВыполнитьСкалярный(ТекстЗапроса);
Сообщить("ост пр запрос  Ост = " + Ост);
КонецПроцедуры
 


при этом на sql подает код
Цитата:
{call sp_executesql(N'
SELECT
     SUM(Рег.sp102)
FROM
     rg99 Рег (NoLock)
WHERE
     Рег.PERIOD= cast(''20101201'' as  datetime   ) AND
     Рег.sp4021 = @Зн_Ячейки0
', N'@Зн_Ячейки0 char(9)'
,'   5JKZZZ')}
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Выборка остатков прямым запросом
Ответ #94 - 24. Сентября 2010 :: 09:43
Печать  
Z1 писал(а) 24. Сентября 2010 :: 08:17:
Может кто ответит
1. почему нет преобразования периода PERIOD к datetime
2.зачем здесь нужен GROUP BY PERIOD,SP4021
3. почему входном параметр объявлен как varchar(9) а не  char(9)

1. PERIOD уже datetime. А текстовый параметр здесь преобразовывать смысла нет.
2. Получи итог через виртуальную таблицу - там тоже будет GROUP BY.  Подмигивание
3. А почему бы нет? Разве что из эстетических соображений..

Z1 писал(а) 24. Сентября 2010 :: 08:36:
вот как работает 1с++
...
при этом на sql подает код

К.О. подсказывает, что именно так ты его и написал.  Смех
  

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


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Выборка остатков прямым запросом
Ответ #95 - 24. Сентября 2010 :: 10:02
Печать  
berezdetsky писал(а) 24. Сентября 2010 :: 09:43:
Z1 писал(а) 24. Сентября 2010 :: 08:17:
Может кто ответит
1. почему нет преобразования периода PERIOD к datetime
2.зачем здесь нужен GROUP BY PERIOD,SP4021
3. почему входном параметр объявлен как varchar(9) а не  char(9)

1. PERIOD уже datetime. А текстовый параметр здесь преобразовывать смысла нет.
2. Получи итог через виртуальную таблицу - там тоже будет GROUP BY.  Подмигивание
3. А почему бы нет? Разве что из эстетических соображений..

Z1 писал(а) 24. Сентября 2010 :: 08:36:
вот как работает 1с++
...
при этом на sql подает код

К.О. подсказывает, что именно так ты его и написал.  Смех


первый вопрос неправильно сформулирован
почему константу типа char '20101201' явно не преобразовали
к datetime. Ведь все равно будет неявное преобразование типов,
а этого надо избегать.


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


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Выборка остатков прямым запросом
Ответ #96 - 24. Сентября 2010 :: 10:03
Печать  
вопрос 2.
посмотрел в qa стоимость планов
когда есть group by стоимость = 6
когда нет  group by стоимость = 5
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Выборка остатков прямым запросом
Ответ #97 - 24. Сентября 2010 :: 10:11
Печать  
вопрос номер 3
как я понимаю при вызове процедуру
константа текстовая
'   5JKZZZ' с типом char(9)
будет преобразована к  varchar(9)
при этом левые пробелы обрежуться и мы получим на входе в процедуру '5JKZZZ' с varchar(9)
далее в условие where идет сравнение
колонки таблицы SP4021 с типом char(9) c константой
'5JKZZZ' с varchar(9)
sql  будет вынужден сделать неявное преобразование
и преобразовать константу '5JKZZZ' с varchar(9) к
char(9)  для чего необходимо снова дополнить
'5JKZZZ' ведущими пробелами и после чего снова получаем
'   5JKZZZ' с типом char(9)


Может такие преобразования и нужны когда длина переменной больше 100 ( экономим трафик)  но явно не для длины =  9.
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Выборка остатков прямым запросом
Ответ #98 - 24. Сентября 2010 :: 10:15
Печать  
Z1 писал(а) 24. Сентября 2010 :: 10:02:
первый вопрос неправильно сформулирован
почему константу типа char '20101201' явно не преобразовали
к datetime. Ведь все равно будет неявное преобразование типов,
а этого надо избегать.

Вопрос скорее религиозный. SQL Server сделает такое же преобразование, так зачем нажимать лишние кнопки?

Z1 писал(а) 24. Сентября 2010 :: 10:03:
вопрос 2.
посмотрел в qa стоимость планов
когда есть group by стоимость = 6
когда нет  group by стоимость = 5

Конечно, в этом частном случае без GROUP BY можно было бы обойтись.

Off: Стоимости разных запросов несопоставимы. Можно сравнивать только стоимости разных планов одного запроса.
  

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


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Выборка остатков прямым запросом
Ответ #99 - 24. Сентября 2010 :: 10:20
Печать  
berezdetsky писал(а) 24. Сентября 2010 :: 10:15:
Z1 писал(а) 24. Сентября 2010 :: 10:02:
первый вопрос неправильно сформулирован
почему константу типа char '20101201' явно не преобразовали
к datetime. Ведь все равно будет неявное преобразование типов,
а этого надо избегать.

Вопрос скорее религиозный. SQL Server сделает такое же преобразование, так зачем нажимать лишние кнопки?

Z1 писал(а) 24. Сентября 2010 :: 10:03:
вопрос 2.
посмотрел в qa стоимость планов
когда есть group by стоимость = 6
когда нет  group by стоимость = 5

Конечно, в этом частном случае без GROUP BY можно было бы обойтись.

Off: Стоимости разных запросов несопоставимы. Можно сравнивать только стоимости разных планов одного запроса.

1. про преобразование типов - ну если это вопрос религиозный
то обсуждать не будем все равно каждый будет придерживаться своей религии.

про стоимость запросов Вы конечно правы но эти два запроса практически идентичны и выполняют одну и ту же базовую операцию cluster index seek над одном и том же значении периода
и одном и том же доп условию по складской ячейке.
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Выборка остатков прямым запросом
Ответ #100 - 24. Сентября 2010 :: 10:20
Печать  
Z1 писал(а) 24. Сентября 2010 :: 10:11:
при этом левые пробелы обрежуться

Чёта ржу.  Смех
  

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


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Выборка остатков прямым запросом
Ответ #101 - 24. Сентября 2010 :: 10:25
Печать  
berezdetsky писал(а) 24. Сентября 2010 :: 10:20:
Z1 писал(а) 24. Сентября 2010 :: 10:11:
при этом левые пробелы обрежуться

Чёта ржу.  Смех

проверил.
да не обрезает но преобразовывать все равно будет
тогда это тоже вопрос религии
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Выборка остатков прямым запросом
Ответ #102 - 24. Сентября 2010 :: 11:13
Печать  
Z1 писал(а) 24. Сентября 2010 :: 10:25:
да не обрезает но преобразовывать все равно будет

Кстати да, если понимать BOL буквально, преобразование здесь должно быть. Но на практике его нет. Озадачен Почему - не знаю.
  

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


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Выборка остатков прямым запросом
Ответ #103 - 24. Сентября 2010 :: 11:20
Печать  
berezdetsky писал(а) 24. Сентября 2010 :: 11:13:
Z1 писал(а) 24. Сентября 2010 :: 10:25:
да не обрезает но преобразовывать все равно будет

Кстати да, если понимать BOL буквально, преобразование здесь должно быть. Но на практике его нет. Озадачен Почему - не знаю.

это Вы согласились по первому или по третьему вопросу?
  
Наверх
 
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Выборка остатков прямым запросом
Ответ #104 - 24. Сентября 2010 :: 11:22
Печать  
Эко зацепили высокие материи...
я правда так и не понял - по опыту тестов Параметризованный запрос медленнее обыкновенного?
  
Наверх
IP записан
 
Переключение на Главную Страницу Страницы: 1 ... 5 6 [7] 8 
ОтправитьПечать