Имя: Пароль:
1C
1С v8
Арифметические операции с датами
,
0 Trance_1C
 
10.08.11
07:11
В одной подсистеме внедренной в типовую УПП, столкнулся с такими выражениями в коде:

Маркер = Строка(ТекущаяДатаНД + ВремяПовтора - '00010101000000' - '00010101000000')

здесь ТекущаяДатаНД и ВремяПовтора это даты.
естественно это не работает на платформе 8.1.15
Это что раньше было возможно, как такое вообще можно было написать?
1 Trance_1C
 
10.08.11
07:20
использовалось в этой нетленке:
Служба мгновенных сообщений 2 редакция...

http://serezhenko.narod.ru/v8/sms2/index.htm
2 popcorn
 
10.08.11
07:40
(0) А почему не работает? в 8.1.15 отменили арифметические операции с датой чтоли? Какую ошибку выдает? Подозреваю что ; в конце надо поставить.
3 Wobland
 
10.08.11
07:42
(2) у меня сложить не получилось. '00010101'+'00010101' преобразование к типу число не может быть выполнено. а вычитание проходит нормально ;)
4 forforumandspam
 
10.08.11
07:46
(3) Дату нельзя сложить с датой, только с числом.
5 ДенисЧ
 
10.08.11
07:48
(3) дату из даты вычитать можно. Складывать - нет смысла...
6 Trance_1C
 
10.08.11
07:49
Книга знаний: v8: Дата и время в 8.0

Дело в том что складывать даты нельзя, можно прибавлять и вычитать секунды, а в этой нетленке такой откровенный тупеж, и выглядит все так как будто у автора это работало, вот что самое поразительное :(
он там к пустым датам прибавляет даты, потом к ним же секунды...
7 Trance_1C
 
10.08.11
07:51
может на старой платформе работало?
на 8.0
8 Wobland
 
10.08.11
07:51
хм. а если вдруг надо прибавить один день и три часа? понятно, что можно +86400+3*3600... как-то не очень логично
9 popcorn
 
10.08.11
07:52
Наверное там скобок не хватает.

Маркер = Строка(ТекущаяДатаНД + ВремяПовтора - ('00010101000000' - '00010101000000'))
10 Wobland
 
10.08.11
07:55
а минус 0 там вообще к чему?
11 popcorn
 
10.08.11
07:56
(10) возможно там была другая дата в вычитаемом. Так хоть смысл есть
12 Trance_1C
 
10.08.11
07:57
(8) Все логично, в одном дне всегда 86400 секунд, и в одной неделе всегда 7 дней, а вот для добавления и вычитания месяца уже есть специальная функция ДобавитьМесяц()
13 Wobland
 
10.08.11
07:59
внезапно нашёл у себя 8.0 и эту же конфигурацию. Сделал ВнешнююОбработку1, в коде не искал. преобразование к числу...
14 Trance_1C
 
10.08.11
07:59
Вобщем понятно, не должны эти выражения рабоатать, буду переписывать, странно только, зачем релизить решение с таким ущербным кодом...
15 Wobland
 
10.08.11
07:59
Trance_1C, скажи, где увидел
16 Trance_1C
 
10.08.11
08:00
(13) глянь функцию смсПолучитьМаркер() в общем модуле смсОсновной
17 Trance_1C
 
10.08.11
08:01
смсПолучитьМаркер() - вызывается из общ. модуля смсСообщеня.смсСоздатьСообщенияОтслужбы()
18 Sammo
 
10.08.11
08:08
(9) Скорее
(ТекущаяДатаНД + (ВремяПовтора - '00010101000000') - '00010101000000')
Т.е. к текущей дате НД добавляем количество секунд во времени повтора
19 Wobland
 
10.08.11
08:10
(16) под паролем
20 Trance_1C
 
10.08.11
08:11
(18) код скопипастил как есть, понятно что логику нужно будет переписать, и я это конечно исправлю, просто эта нетленка давно уже распространяется в таком виде и что у всех работает? :)
21 Trance_1C
 
10.08.11
08:12
(19) да там какбэ модули скомпилированы немножко...
22 popcorn
 
10.08.11
08:19
(18) так не получится. ВремяПовтора - это число наверное. К числу нельзя прибавить дату.

(8) >>хм. а если вдруг надо прибавить один день и три часа?
Вот так: ТекущаяДата() + ('00010102030000' - '00010101000000')
23 Sammo
 
10.08.11
08:45
(22) Если бы было число, то проблем бы не было
+ в топике
"здесь ТекущаяДатаНД и ВремяПовтора это даты. "
24 popcorn
 
10.08.11
09:01
(23) тогда да, как в (18) лучше будет.
Если бы было число, проблема была бы тоже