Имя: Пароль:
1C
1C 7.7
v7: 1с++ Как проверить вхождение даты в диапазон?
,
0 palpetrovich
 
06.05.16
14:25
ДатаИзв - реквизит Документа Извещение, тип - дата

SELECT
    Док.ИдДокумента [Док $Документ.Извещение]
    ,Док.ДатаИзв Дата1
    ,CAST(Док.ДатаИзв as DateTime) Дата2
FROM Документ,Извещение Док (nolock)
WHERE 1 = 1
    AND CAST(Док.ДатаИзв as DateTime) BETWEEN :НачДата AND :КонДата~

ругается:    [SQL Server]Conversion failed when converting date and/or time from characr string.

наверное правильно ругается, ибо:
// Дата1 - 01.12.12
// Дата2 - 01.12.12
// НачДата - '20160501'
// КонДата~ - '20160531Z'

Научите ка надо пожалста :)
1 palpetrovich
 
06.05.16
14:30
+(0) на
Док.ДатаИзв BETWEEN :НачДата AND :КонДата~
тоже ругается
2 Mikeware
 
06.05.16
14:33
ну так модификатор у конечной даты убери
3 mikecool
 
06.05.16
14:34
проверь - чего у тебя каст возвращает в скуле
может в дату не кастует
4 palpetrovich
 
06.05.16
14:39
(2)  так это все из-за него?
(3) вроде без "~ " работает, правда КонДата длязапроса на день увеличивать прийдется
5 palpetrovich
 
06.05.16
14:39
спасибо :)
6 palpetrovich
 
06.05.16
14:46
а еще, как в запросе сделать "ключ"? типа:
SELECT
    (Док.Чтото+'_'+Док.Счемто) as ключ
7 mikecool
 
06.05.16
14:48
(6) кастануть в строку и сложить
8 Mikeware
 
06.05.16
14:56
(4) ну у тебя модификатор превращает дату в строку. потому, что предназначен для поиска в DateTimeIddoc
9 Mikeware
 
06.05.16
14:57
(6) так и сделать.
можно кастануть, можно - если это числа - умножать. если даты, то складывать там...
10 palpetrovich
 
06.05.16
14:59
(7)(8) а как?, че-т не попаду...
CAST(Док.Клиент as Str)
CAST(Док.Клиент as String)
что там для строки предусмотрено? вемсто String, Str
11 Mikeware
 
06.05.16
15:02
(10) char? varchar
12 palpetrovich
 
06.05.16
15:06
(11) а, спасибо
13 Mikeware
 
06.05.16
15:08
(12) открой для себя BOL :-)
14 ADirks
 
06.05.16
15:14
вообще-то в данном случае надо писать
Док.ДатаИзв BETWEEN :НачДата~~ AND :КонДата~~

вариант
Док.ДатаИзв BETWEEN :НачДата AND :КонДата
тоже работает, но имеет место неявное преобразование типа (char(8) --> DateTime)
15 palpetrovich
 
06.05.16
15:17
(13) обязательно! :)
(14) хм, так тоже работает. А что значит ~~ ? (2 шт)
16 Mikeware
 
06.05.16
15:25
(15) В тексте запроса модификаторы обозначаются символами “~” или “*” после имени
параметра. Количество символов “~” после имени параметра определяет номер
модификатора. Если после имени параметра не указан модификатор, то номер
модификатора равен 0. Так как типом «Неопределенный» (char(23)) можно выразить
любой тип 1С, для этого существует специальный модификатор, обозначаемый
символом “*”, который определен для любого передаваемого типа 1С. Его номер 20.
Модификаторы определены для следующих типов 1С:
Строка
0: char() - строка как есть;
1: char(23) - должна быть передана позиция документа, из которой будет
сформирована строка в формате date_time_iddoc;
Дата
0: char(8) - каноническое представление даты;
1: char(9) - каноническое представление даты + символ “Z” (используется для
обозначения момента времени конца этой даты);
2: datetime.
Агрегатные типы (Перечисление, Справочник, Документ, ВидРасчета, Счет)
        0: char(9) - внутренний идентификатор объекта (короткая строка 6+3);
        1: char(13) - внутренний идентификатор объекта с видом (длинная строка 4+6
+3);
        2: char(15) - внутренний идентификатор объекта с видом и типом (2+4+6+3)
(на самом деле такой тип нигде в 1С не используется, модификатор существует
исключительно для обратной совместимости);
ВидРасчета
Кроме 0 и 1, которые работают как для всех агрегатных типов, 2-й определен особо:
2: Зависит от формата ИБ.
SQL: int - идентификатор вида расчета;
DBF: char(4) - 36-й идентификатор вида расчета;

Примеры:

Передано значение типа число
:ФлагУчастияВРасчетах = 1
:ФлагУчастияВРасчетах * = 'N                     1'

Передано значение типа дата
:ДатаНачала = '20030613'
:ДатаКонца ~ = '20030613Z'
:ДатаКонца ~~ = {d '2003-06-13'}

Передано значение типа Справочник.Контрагенты
:Контрагент = '    H6   '
:Контрагент ~ = '  1W    H6   '
:Контрагент * = 'B1  1W    H6           '
17 palpetrovich
 
06.05.16
15:28
(16)  пасиб, будкм думать :)
18 Mikeware
 
06.05.16
15:33
(17) а тебя алс-ка то 1с++ есть?
19 palpetrovich
 
06.05.16
15:46
(18) дома есть, на работе нет
если не считать того алса где УстановитьТекстовыйПараметр, ВыполнитьИнструкцию....
20 Mikeware
 
06.05.16
15:48
(19)
"гиви, ти арбюзы любишь?
- кюшать да, а так - нэт"
©
21 palpetrovich
 
06.05.16
16:06
"думать, думаь - трусить надо!!" ©  :)
22 с2д
 
09.05.16
11:59
Боже! Какая некрофилия! Предлагали сдать тестовое задание по _этому_, ушёл не доделав. Убила сама мысль, что придётся несколько лет писать под системой сдохшей ещё в 2009 году.
Люди с УП и СКД работать будут, а тут несколько лет полной профессиональной деградации.
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.