Имя: Пароль:
1C
1C 7.7
v7: 1C++ Syntax error converting datetime from character string.
,
0 burrya
 
08.01.13
18:00
ТекстЗапросаЗаданийСМС = "
       |SELECT
       |     Спр.ID as [Задание $Справочник.ЗаданияНаОтправкуСМС]
       |FROM
       |    $Справочник.ЗаданияНаОтправкуСМС as Спр (nolock)
       |WHERE
       |     Спр.IsMark = 0 AND
       |     $Спр.ДатаОтправки BETWEEN :ДатаНачалаРаботыСистемы AND :ДатаОтправки~";
   ODBCRecordset.УстановитьТекстовыйПараметр("ДатаНачалаРаботыСистемы", Константа.ДатаНачала);
   ODBCRecordset.УстановитьТекстовыйПараметр("ДатаОтправки", ТекущаяДата());
   Задания = ODBCRecordset.ВыполнитьИнструкцию(ТекстЗапросаЗаданийСМС);
   Задания.ВыбратьСтроки();

Задания = ODBCRecordset.ВыполнитьИнструкцию(ТекстЗапросаЗаданийСМС);
{D:\TEST.ERT(17)}: State 22007, native 241, message [Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting datetime from character string.
1 Wobland
 
08.01.13
18:07
да что вы говорите?
2 КонецЦикла
 
08.01.13
18:07
Может надо применить convert?
А вообще поезг и изучение конфигурации помогут
3 viktor_vv
 
08.01.13
18:08
Если мне не изменяет память, то модификатор параметра в DateTime "~~".

$Спр.ДатаОтправки BETWEEN :ДатаНачалаРаботыСистемы~~ AND :ДатаОтправки~~";
4 Wobland
 
08.01.13
18:13
(3) изменяет
5 viktor_vv
 
08.01.13
18:22
(4) Ну таки в доке так и написано.

Дата
0: char(8) - каноническое представление даты;
1: char(9) - каноническое представление даты + символ “Z” (используется для
обозначения момента времени конца этой даты);
2: datetime.

Сейчас попробую.
6 Wobland
 
08.01.13
18:27
(5) документацию не читал, у меня работает так:
               |WHERE
               |             Жур.Date_Time_IDDoc BETWEEN :ДатаНачала AND :ДатаОкончания~
7 viktor_vv
 
08.01.13
18:30
(6) Так

Жур.Date_Time_IDDoc

тип char(23)

а унего реквизит с типом "дата" (я так подозреваю), в базе это DateTime.

Проверил (3), все работает.
8 burrya
 
08.01.13
18:51
таки да

ТекстЗапросаЗаданийСМС = "
       |SELECT
       |     Спр.ID as [Задание $Справочник.ЗаданияНаОтправкуСМС]
       |FROM
       |    $Справочник.ЗаданияНаОтправкуСМС as Спр (nolock)
       |WHERE
       |     Спр.IsMark = 0 AND
       |     $Спр.ДатаОтправки BETWEEN convert(datetime, :ДатаНачалаРаботыСистемы) AND convert(datetime, :ДатаОтправки)"

Работает
9 burrya
 
08.01.13
18:51
Всем спасибо.
10 КонецЦикла
 
08.01.13
22:39
молодец
11 trad
 
08.01.13
23:41
конверт то зачем?
в (3) правильный ответ
12 КонецЦикла
 
09.01.13
01:50
точно, на то как применил не посмотрел :)
13 КонецЦикла
 
09.01.13
02:11
(11) Хм... интеерсно... а ведь 1С не умеет хранить короткую дату, что у него там в справочнике за дата такая?
У меня всегда с ~ работало
14 trad
 
09.01.13
09:25
(13) а при чем тут короткая дата?
15 dk
 
09.01.13
09:29
Константа.ДатаНачала тип какой? Дата или строка?
16 trad
 
09.01.13
09:34
(13)"У меня всегда с ~ работало"
уверен? сильно сомневаюсь

Если текстовый параметр типа Дата, то:
1) при 0 модификаторе в текст будет вставлен литерал-строка 'ггггммдд', что при сравнении с полем типа datetime приведет к неявному преобразованию типа строки к datetime
2) при 2 модификаторе в текст будет вставлен литерал-дата {d 'гггг-мм-дд'}, что при сравнении с полем типа datetime приведет сравнению без каких-либо преобразований типов
3) при 1 модификаторе в текст будет вставлен литерал-строка 'ггггммддZ', что при сравнении с полем типа datetime приведет к попытке неявного преобразования типа, а это в свою очередь невозможно и приводит к ошибке: "Syntax error converting datetime from character string."
17 КонецЦикла
 
09.01.13
13:54
(16) Честно, даже полез проверять
Был SQL 2000, потом SQL 2005
В чужих отчетах две тильдочки, у меня - одна (допустим для регистров, позиции документов)
18 trad
 
09.01.13
14:08
(16) Ну так а позиция тут ни при чем - она везде строка. И первый модификатор как раз для сравнения с ней и придуман (как позиция конца даты)

В ветке речь про сравнение с реквизитом типа Дата (т.е. datetime)
19 trad
 
09.01.13
14:08
(18) к (17)
20 КонецЦикла
 
09.01.13
14:16
(18) Тьфу, ну бывает :)