Имя: Пароль:
1C
1C 7.7
v7: Сравнение дат в условии
0 iliapro
 
30.05.12
11:35
Досталась в наследство база. При решении задач наткнулся на следующее условие :

Если ДатаДок<'01.01.2004' Тогда

КонецЕсли;

и был удивлен, что при ДатаДок равном 01.05.12 условие считается верным.

Поскажите, что происходит при сравнении переменной типа Дата и значения '01.01.2004' ?
1 Злой Бобр
 
30.05.12
11:39
(0)
Если ДатаДок<Дата(2004,1,1) Тогда

КонецЕсли;
2 Ёпрст
 
30.05.12
11:41
>>>и был удивлен, что при ДатаДок равном 01.05.12 условие считается верным.

брехня.
Как ты это проверил ?
3 miki
 
30.05.12
11:42
(2)Может у него столетие начинается в 1905...
4 iliapro
 
30.05.12
11:43
(1) Код,естественно, именно так и исправил, просто для себя интересно каким образом внутри 1С происходит сравнение ...
(2) В отладчике трассировкой попал внутрь условия
5 Ёпрст
 
30.05.12
11:44
(3) ну, разве что так.
6 iliapro
 
30.05.12
11:44
(3) Столетие начинается в 1946 году
7 Ёпрст
 
30.05.12
11:45
(4) теперь выстави в Сервис-Параметры-число цифр в представлении года - 4  и посмотри, что за ДатаДок

поди 1912 ?
8 chief accountant
 
30.05.12
11:48
(6) если будешь продолжать работать с представлением даты "2" грабли ещё где-нибудь вылезут рано или поздно
9 iliapro
 
30.05.12
11:51
(7) Да нет 2012. Но теперь условие не выполняется, забавно.
10 Андрюха
 
30.05.12
11:54
У меня корректно отрабатывает дата в апострофах и при 2 и при 4 знаках в году.
11 1Сергей
 
30.05.12
12:06
(10)+1

'01.01.04' = 01.01.04
'01.01.2004' = 01.01.04
12 1Сергей
 
30.05.12
12:08
?(Дата("01.05.12")<'01.01.2004', "истоно, говорю вам", "лжоте, батенька") = лжоте, батенька
13 iliapro
 
30.05.12
12:23
(12)Провел опыт :
а)Условия:
Дата начала столетия : 1956
  Количество
?(Дата(1912,05,01)<'01.01.2004', "истоно, говорю вам", "лжоте, батенька") = "истоно, говорю вам"
14 iliapro
 
30.05.12
12:24
(12)Провел опыт :
а)Условия:
 Дата начала столетия : 1956
 Количество цифр в дате : 2
Получил :
?(Дата(1912,05,01)<'01.01.2004', "истоно, говорю вам", "лжоте, батенька") = "истоно, говорю вам"

б)Условия:
 Дата начала столетия : 1956
 Количество цифр в дате : 4
Получил :
?(Дата(1912,05,01)<'01.01.2004', "истоно, говорю вам", "лжоте, батенька") = "лжоте, батенька"
15 1Сергей
 
30.05.12
12:24
(13) дык, ты года полностью указал, тут дата начала столетия вообще ни при чем
16 Ёпрст
 
30.05.12
12:25
(14) врешь ведь
17 1Сергей
 
30.05.12
12:26
(14) чудиса
18 Ёпрст
 
30.05.12
12:27
(17) нет там чудес - наглое враньё.
19 iliapro
 
30.05.12
12:35
(14)(17)
Да нет не вру ...

Похоже что при количестве цифр в 2 преобразование в дату выражения '01.01.2004' = 01.01.2020,
хотя попробовал в отладчике, получил при количестве цифр в дате 2
'01.01.2012' = '01.01.12'
'01.01.12' = '01.01.12'
20 Ёпрст
 
30.05.12
12:36
(19) конечно не врешь - нагло п..шь.

Открой для себя Табло в предприятии - скриншот в студию.
21 Ёпрст
 
30.05.12
12:39
Если че, могу написать за тебя:



 ?(Дата(1912,05,01)<'01.01.2004', "истоно, говорю вам", "лжоте, батенька")  = истоно, говорю вам
 ?('01.05.1912'<'01.01.2004', "истоно, говорю вам", "лжоте, батенька")  = истоно, говорю вам
 ?(Дата(12,05,01)<'01.01.2004', "истоно, говорю вам", "лжоте, батенька")  = истоно, говорю вам
 ?('01.05.12'<'01.01.2004', "истоно, говорю вам", "лжоте, батенька") = лжоте, батенька
 '01.05.12' = 01.05.2012
 Дата(12,05,01) = 01.05.0012

Ну и соответственно ?(Дата(1912,05,01)<'01.01.2004', "истоно, говорю вам", "лжоте, батенька") = "лжоте, батенька" - наглое враньё
22 iliapro
 
30.05.12
12:44
(21) Пока пытался сделать скриншот, Вы уже написали.
Да действительно в Табло на предприятии происходит именно так как вы написали, но в отладчике происходит именно то, что я привел в (14).
23 iliapro
 
30.05.12
12:51
(21) Сейчас еще раз попытался в отладчике повторить, что получилось в (14) и ... действительно получается "лжоте, батенька", но ведь было же в первый раз, странно все это.
24 Ёпрст
 
30.05.12
12:53
(23) :)