Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / [игнор отключен] [закрыт для гостей] / конвертаиция в число в 1С / 7 сообщений из 7, страница 1 из 1
14.12.2011, 17:53
    #37576046
_radomir_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
конвертаиция в число в 1С
Всем привет. Есть такой запрос в 1с
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
 переменая=56322.65;
	 
	ЗапросSQLВыб4="
					|SELECT     top 1 range , discount
					|FROM         discount_size
					|WHERE     (range < cast('"+переменая+"' as decimal(18,2)) ) 
					|order by range desc ";	
										

	ЗапросВыб4.CommandText = ЗапросSQLВыб4;                             
	Рез4=ЗапросВыб4.Execute();


Ругается
{ОбщийМодуль.ПроцедурыГКмастер(4803)}: Ошибка при вызове метода контекста (Execute): Произошла исключительная ситуация (Microsoft OLE DB Provider for SQL Server): Error converting data type varchar to numeric.
Рез4=ЗапросВыб4.Execute();
...
Рейтинг: 0 / 0
14.12.2011, 19:05
    #37576223
Программист 1с
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
конвертаиция в число в 1С
Глупый вопрос - а переменая=56322,65 - вот так?
...
Рейтинг: 0 / 0
14.12.2011, 19:06
    #37576230
Программист 1с
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
конвертаиция в число в 1С
точнее так:
cast(переменая)
...
Рейтинг: 0 / 0
15.12.2011, 09:17
    #37576780
XenoX
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
конвертаиция в число в 1С
используйте параметры ПАРАМЕТРЫ!
Код: sql
1.
2.
3.
4.
5.
6.
ЗапросSQLВыб4="
|SELECT     top 1 range , discount
|FROM discount_size
|WHERE     range < ?
|order by range desc
|"


Обратить внимание на ? это есть наш параметр.
Используется ADODB.Command
Код: sql
1.
2.
3.
4.
5.
ЗапросВыб4.CommandType = 1;
ЗапросВыб4.CommandText = ЗапросSQLВыб4;
ЗапросВыб4.Parameters.Refresh();
ЗапросВыб4.Parameters.Item(0).Value = 56322.65;
Рез4 = ЗапросВыб4.Execute();
...
Рейтинг: 0 / 0
15.12.2011, 15:22
    #37577832
_radomir_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
конвертаиция в число в 1С
XenoX, а вот в этом запросе как параметры передавать? пишет что
{ОбщийМодуль.ПроцедурыГКмастер(4863)}: Ошибка при вызове метода контекста (Item): Произошла исключительная ситуация (ADODB.Parameters): Не удается найти объект в семействе, соответствующий требуемому имени или порядковому номеру. ЗапросВыб4.Parameters.Item(1).Value = дисконт_сизе;


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
ЗапросSQLВыб5="
					|If Exists
					|(
					|SELECT     discount_size.discount, cards_discount.discount_size                      
					|FROM         discount_size Cross JOIN
					|                     cards_discount
					|where ( ? < ? ) 
					|)
					|return
					|ELSE 
					| IF EXISTS 
					|(
					|SELECT     cards_discount.discount_size, cards_discount.date_start, cards_discount.date_end, cards_discount.code_1c82                      
					|FROM cards_discount
					|where cards_discount.date_end is Null 
					|)
					|begin
					|update cards_discount SET date_end =CONVERT(DATETIME, '"+Формат(Дата(ДатаДока-1),"ДФ=yyyy-MM-dd")+"',102)
					|insert into cards_discount(date_start,code_1c82,discount_size,date_end) values(CONVERT(DATETIME, '"+Формат(Дата(ДатаДока),"ДФ=yyyy-MM-dd")+"',102), ? ,? , Null)
					|END";	
										

	ЗапросВыб5.CommandText = ЗапросSQLВыб5; 
	ЗапросВыб4.Parameters.Refresh();
	ЗапросВыб4.Parameters.Item(0).Value = дисконт;
	ЗапросВыб4.Parameters.Item(1).Value = дисконт_сизе;
	ЗапросВыб4.Parameters.Item(2).Value = коде_дисконт_1с82;
	ЗапросВыб4.Parameters.Item(3).Value = дисконт;

	Рез5=ЗапросВыб5.Execute();
...
Рейтинг: 0 / 0
15.12.2011, 17:34
    #37578284
XenoX
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
конвертаиция в число в 1С
1) Показите значение ваших переменных
2) оч. смущает конструкция
Код: sql
1.
where (? < ?)


3)
Код: sql
1.
CONVERT(DATETIME, '"+Формат(Дата(ДатаДока-1),"ДФ=yyyy-MM-dd")


Тоже спокойно можно заменить на параметры.

Ощущение такое, что запрос не может нормально подготовится, посему не создается нужное количество параметров.
...
Рейтинг: 0 / 0
16.12.2011, 12:02
    #37579340
_radomir_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
конвертаиция в число в 1С
XenoX,
первоначально запрос имел такой вид

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
ЗапросSQLВыб5="
					|If Exists
					|(
					|SELECT     discount_size.discount, cards_discount.discount_size                      
					|FROM         discount_size Cross JOIN
					|                     cards_discount
					|where ('"+дисконт+"' < '"+дисконт_сизе+"') 
					|)
					|return
					|ELSE 
					| IF EXISTS 
					|(
					|SELECT     cards_discount.discount_size, cards_discount.date_start, cards_discount.date_end, cards_discount.code_1c82                      
					|FROM cards_discount
					|where cards_discount.date_end is Null 
					|)
					|begin
					|update cards_discount SET date_end =CONVERT(DATETIME, '"+Формат(Дата(ДатаДока-1),"ДФ=yyyy-MM-dd")+"',102)
					|insert into cards_discount(date_start,code_1c82,discount_size,date_end) values(CONVERT(DATETIME, '"+Формат(Дата(ДатаДока),"ДФ=yyyy-MM-dd")+"',102),'"+коде_дисконт_1с82+"','"+дисконт+"', Null)
					|END";	

ЗапросВыб5.CommandText = ЗапросSQLВыб5; 		
Рез5=ЗапросВыб5.Execute();


Вы написали, что можно работать параметрами тоесть вместо where ('"+дисконт+"' < '"+дисконт_сизе+"') как я понял писать where (? < ?). Как в 1с в запросе sql использовать множество этих параметров?Значения дисконт и дисконт_сизе соответственно числовые.
...
Рейтинг: 0 / 0
Форумы / [игнор отключен] [закрыт для гостей] / конвертаиция в число в 1С / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]