Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Горячая тема (более 10 ответов) Подготовленный запрос цены (число прочтений - 3676 )
mishav
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 8
Зарегистрирован: 26. Августа 2010
Подготовленный запрос цены
31. Августа 2010 :: 07:09
Печать  
Захотелось переписать запрос цены номенклатуры на подготовленный, ибо простой работает медленней стандартных средств 1С.
Код
Выбрать все
ТекстЗапроса = "DECLARE @Номенклатура char(9)
					|DECLARE @ТипЦен char(9)
					|DECLARE @Дата Date
					|SET @Номенклатура = ?
					|SET @ТипЦен = ?
					|SET @Дата = ?
					|SELECT $ПоследнееЗначение.Цены.Цена(СпрЦ.ID, @Дата) Цена
					|FROM
						|$Справочник.Номенклатура СпрН
					|LEFT JOIN
						|$Справочник.Цены СпрЦ ON СпрЦ.ParentExt = СпрН.ID AND
						|$СпрЦ.ТипЦен = @ТипЦен
					|WHERE СпрН.ID=@Номенклатура";
	Запрос.ДобПараметр(1, 14, 9, 0,"ТипЦен");            
	Запрос.ДобПараметр(1, 14, 9, 0,"Номенклатура");
	Запрос.ДобПараметр(1, 8, 8, 0,"ВыбДата");
	Запрос.Подготовить(ТекстЗапроса); 


При попытке выполнить запрос
Код
Выбрать все
              Запрос.УстПараметр(1, Константа.ОсновнойТипЦен);
			  Запрос.УстПараметр(2, СпрНоменклатура.ТекущийЭлемент());
			  Запрос.УстПараметр(3, ПолучитьДатуТА());
			  РезультатЗапроса = Запрос.ВыполнитьСкалярный(ТекстЗапроса); 


Выводит State HYC00, native 0, message [Microsoft][ODBC SQL Server Driver]Дополнительная возможность не реализована. Что с этим делать и как это можно обойти? Обработка во вложении
  

__________001.ert ( 58 KB | Загрузки )
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Подготовленный запрос цены
Ответ #1 - 31. Августа 2010 :: 07:31
Печать  
Вместо

Код
Выбрать все
					|SET @Номенклатура = ?
					|SET @ТипЦен = ?
					|SET @Дата = ?
 



Надо типцены поставить первым т.е вот так :
Код
Выбрать все
					|SET @ТипЦен = ?
					|SET @Номенклатура = ?
					|SET @Дата = ?
 




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


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Подготовленный запрос цены
Ответ #2 - 31. Августа 2010 :: 07:53
Печать  
Вот еще ошибка что такое за тип Date в sql
Код
Выбрать все
DECLARE @Дата Date 

  
Наверх
 
IP записан
 
mishav
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 8
Зарегистрирован: 26. Августа 2010
Re: Подготовленный запрос цены
Ответ #3 - 31. Августа 2010 :: 07:58
Печать  
Исправил. Да, действительно в MS SQL нет Date в отличии от MySQL. А как тогда "* 8  - SQL_TYPE_DATE " в MS SQL называется?
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Подготовленный запрос цены
Ответ #4 - 31. Августа 2010 :: 08:03
Печать  
mishav писал(а) 31. Августа 2010 :: 07:58:
Исправил. Да, действительно в MS SQL нет Date в отличии от MySQL. А как тогда "* 8  - SQL_TYPE_DATE " в MS SQL называется?


datatime

также посмотрите какой точно тип sql должен передаваться в $ПоследнееЗначение.Цены.Цена(СпрЦ.ID, @Дата)  (речь о @Дата )


  
Наверх
 
IP записан
 
mishav
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 8
Зарегистрирован: 26. Августа 2010
Re: Подготовленный запрос цены
Ответ #5 - 31. Августа 2010 :: 08:33
Печать  
Подсмотрел в Debug:
Код
Выбрать все
DECLARE @ТипЦен char(9)
DECLARE @Номенклатура char(9)
DECLARE @Дата datetime(8)
SET @ТипЦен = ?
SET @Номенклатура = ?
SET @Дата = ?
SELECT (
select top 1
cast(c324_vv.value as numeric(14, 2))
from
_1sconst as c324_vv (nolock)
where
c324_vv.id = 324 and
c324_vv.objid = СпрЦ.ID and
[b](c324_vv.date <= @Дата)[/b]
order by c324_vv.date desc, c324_vv.time desc, c324_vv.docid desc, c324_vv.row_id desc
) Цена
FROM
sc84 СпрН
LEFT JOIN
sc319 СпрЦ ON СпрЦ.ParentExt = СпрН.ID AND
СпрЦ.sp327 = @ТипЦен
WHERE СпрН.ID=@Номенклатура
 


Смотрим по SQL - это тип datetime(8) то есть строка вида 31.08.2010. Запрос.ПолучПараметр(3) отдает 31.08.2010
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Подготовленный запрос цены
Ответ #6 - 31. Августа 2010 :: 08:41
Печать  
mishav писал(а) 31. Августа 2010 :: 08:33:
Подсмотрел в Debug:
Код
Выбрать все
DECLARE @ТипЦен char(9)
DECLARE @Номенклатура char(9)
DECLARE @Дата datetime(8)
SET @ТипЦен = ?
SET @Номенклатура = ?
SET @Дата = ?
SELECT (
select top 1
cast(c324_vv.value as numeric(14, 2))
from
_1sconst as c324_vv (nolock)
where
c324_vv.id = 324 and
c324_vv.objid = СпрЦ.ID and
[b](c324_vv.date <= @Дата)[/b]
order by c324_vv.date desc, c324_vv.time desc, c324_vv.docid desc, c324_vv.row_id desc
) Цена
FROM
sc84 СпрН
LEFT JOIN
sc319 СпрЦ ON СпрЦ.ParentExt = СпрН.ID AND
СпрЦ.sp327 = @ТипЦен
WHERE СпрН.ID=@Номенклатура
 


Смотрим по SQL - это тип datetime(8) то есть строка вида 31.08.2010. Запрос.ПолучПараметр(3) отдает 31.08.2010

тогда вроде все должно работать

  
Наверх
 
IP записан
 
mishav
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 8
Зарегистрирован: 26. Августа 2010
Re: Подготовленный запрос цены
Ответ #7 - 31. Августа 2010 :: 13:11
Печать  
В общем разобрался - стал передавать char, а преобразовывать в datetime внутри запроса. Тогда все забегало. Для интересующихся прилагаю обработку
  

__________001_001.ert ( 58 KB | Загрузки )
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Подготовленный запрос цены
Ответ #8 - 31. Августа 2010 :: 15:19
Печать  
правильный ответ тут:
http://www.forum.mista.ru/topic.php?id=387555
  

1&&2&&3
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Подготовленный запрос цены
Ответ #9 - 31. Августа 2010 :: 15:22
Печать  
+
магическое число 17 в
ДобПараметр(1,10,17,0)
определяет какой тип данных будет биндить драйвер odbc
<17 - smalldatetime;
>=17 - datetime.
  

1&&2&&3
Наверх
 
IP записан
 
mishav
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 8
Зарегистрирован: 26. Августа 2010
Re: Подготовленный запрос цены
Ответ #10 - 31. Августа 2010 :: 16:37
Печать  
trad писал(а) 31. Августа 2010 :: 15:19:
правильный ответ тут:
http://www.forum.mista.ru/topic.php?id=387555

Круто. Проникся. Магическое число порадовало. Остался только дурацкий вопрос, что же такое тип 8 (SQL_DATE) и когда он используется
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Подготовленный запрос цены
Ответ #11 - 31. Августа 2010 :: 17:11
Печать  
mishav писал(а) 31. Августа 2010 :: 16:37:
что же такое тип 8 (SQL_DATE) и когда он используется

очевидно тогда, когда ODBC-источник поддерживает этот тип.
Например сервер MySQL.
  

1&&2&&3
Наверх
 
IP записан
 
mishav
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 8
Зарегистрирован: 26. Августа 2010
Re: Подготовленный запрос цены
Ответ #12 - 01. Сентября 2010 :: 10:30
Печать  
trad писал(а) 31. Августа 2010 :: 17:11:
очевидно тогда, когда ODBC-источник поддерживает этот тип.
Например сервер MySQL.

Понятно, спасибо.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать