|
Получение даты из числа | ☑ | ||
---|---|---|---|---|
0
web_profiler
07.01.14
✎
21:17
|
Ситуация такая: есть обработочка на 7.7, которая грузит из ДБФ-ки данные. Пишу точно такую же на 8.
Суть проблемы: в ДБФ-ке есть поле с типом число = 2456654, в 7.7 из него получается дата (Дата1 = Дата(ДБФ.NOST)), которое равно 27.12.13 В 8 - ВСЕ не ТАК !!! Вылетаю по ошибке - преобраз.. знач.. к дате Как быть? |
|||
1
AcaGost
07.01.14
✎
21:19
|
Дели на Годы, месяцы, дни, часы минуты секунды
|
|||
2
web_profiler
07.01.14
✎
21:24
|
(1) а как из этой х... узнать что где?
|
|||
3
Vexcel
07.01.14
✎
21:25
|
(2) Может это число - дата в секундах или миллисекундах?
|
|||
4
web_profiler
07.01.14
✎
21:27
|
да я так тоже думаю, только какая начальная дата в 7.7?
думаю так: в 8 в отладчике отнять от 27.12.13 это число |
|||
5
web_profiler
07.01.14
✎
21:32
|
диб...я семерка
В 8 Дата(2013,12,27)-(2456654*86400) = 01.01.0001 0:00:00 |
|||
6
AcaGost
07.01.14
✎
21:33
|
(2) 1 мин = 60 сек
1час = 3600 сек 1 день = 86400 сек ...................... Делишь вначале на количество секунд в году (Учитывай количество високосных) Из остатка находишь месяц И.Т.Д. |
|||
7
web_profiler
07.01.14
✎
21:36
|
В 8 Дата(2013,12,27)-(2456654*86400) = 01.01.0001 0:00:00
В 8 Дата(1,1,1) + (2456654*86400) = 04.02.6727 0:00:00 Че за фигня? |
|||
8
AcaGost
07.01.14
✎
21:38
|
(7) 2456654/86400 - количество дней
|
|||
9
web_profiler
07.01.14
✎
21:40
|
(7) и че с этими днями делать 28,43349537037037?
|
|||
10
web_profiler
07.01.14
✎
21:40
|
(8)
|
|||
11
AcaGost
07.01.14
✎
21:43
|
(10) В году 365 дней
Плюс количество високосных Подсчитай количество лет |
|||
12
web_profiler
07.01.14
✎
21:46
|
(11) ничего не понятно
|
|||
13
web_profiler
07.01.14
✎
21:46
|
че на че делить?
|
|||
14
kumena
07.01.14
✎
22:02
|
"да я так тоже думаю, только какая начальная дата в 7.7?"
там скорее всего 14.. какой то год, от которого считает скуль. делать надо сразу нормально. в дбф есть тип дата, 1с сама его преобразует в свою дату. |
|||
15
Torquader
07.01.14
✎
22:08
|
(8) А какого мы делим ?
В семёрке дата измеряется в днях, в восьмёрке - в секундах, то есть это значение нужно УМНОЖИТЬ на количество секунд в дне и получим дату - по идее - должно сработать. (Собственно, в семёрке дата - это vtDate из Variant только без дробной части) |
|||
16
Фокусник
07.01.14
✎
22:13
|
(15) ТС как раз умножает, см.(7)
|
|||
17
web_profiler
07.01.14
✎
22:25
|
гуглю уже правила преобразования типов в 7.7
|
|||
18
web_profiler
07.01.14
✎
22:26
|
вот бы залезть в платформу 7.7 и посмотреть, как это у них получилось так?
Число('27.12.13') = 2456654 |
|||
19
web_profiler
07.01.14
✎
22:28
|
и че за "Человек" придумал такое веселое правило, а еще один, очень "УМНЫЙ" человек - выгружает даты по этому правилу
|
|||
20
web_profiler
07.01.14
✎
22:30
|
еще мысли, у кого-то будут?
|
|||
21
web_profiler
07.01.14
✎
22:36
|
Вот чего нашел, но ничего так и не понял
http://club-1c.com/topic/374-как-преобразуется-переменная-типа-дата-в-тип-чи/ |
|||
22
web_profiler
07.01.14
✎
23:04
|
Так как все перестали помогать - секрет вам не расскрою. А я все-таки эту цифру с 7.7 преобразовал в дату 8
|
|||
23
Torquader
07.01.14
✎
23:10
|
Прикольно:
лд='00.00.00'; Сообщить(Строка(лд+1)); Получаем: 12.31.-71 Чего-то они там "намудрили". |
|||
24
web_profiler
07.01.14
✎
23:18
|
решение есть, получено опытным путем, вычислений. Вкл. мозг и лог.мышление
|
|||
25
Torquader
07.01.14
✎
23:18
|
Попробуйте к дате '00.00.00' поприбавлять числа - поймёте, что у программистов, создавших 1С 7.7 руки ... ну в общем - понятно откуда.
|
|||
26
Torquader
07.01.14
✎
23:23
|
(22) Ну чего мучатся, берём, скажем 01-01-2001 года - переводим в число - получаем "базис".
Теперь нужно из нашего числа вычесть "базис", умножить полученную разность на 86400 и добавить в дате 01-01-2001 в восьмёрке. |
|||
27
web_profiler
07.01.14
✎
23:26
|
Где ж ты раньше был? Часа 2 назад, я уже сам к этому дошел
|
|||
28
web_profiler
07.01.14
✎
23:27
|
2001 год - немного не корректно, а вдруг дата меньше 2001 года зашита. Брать за основу 0001год
|
|||
29
web_profiler
07.01.14
✎
23:28
|
в 7.7 это 1721426
|
|||
30
Torquader
07.01.14
✎
23:28
|
(27) По красной площади гулял.
|
|||
31
Torquader
07.01.14
✎
23:29
|
(29) первый год брать опасно, так как нужно делать предположение о типе календаря (григорианский или юлианский).
Потом - у тебя же учёт, а не история. |
|||
32
web_profiler
07.01.14
✎
23:30
|
несколько дат проверял - у меня все сходится. Ладно, можно взять либо скуль дату либо 1900
|
|||
33
web_profiler
07.01.14
✎
23:30
|
лучше 1900 год
|
|||
34
Torquader
07.01.14
✎
23:31
|
Вообще - врёт 1С.
Если рассматривать 2456654 как число дней, то получается: 26.08.-4703, как ни странно. |
|||
35
Torquader
07.01.14
✎
23:31
|
(33) Можно, если там даты рождения людей закодированы.
|
|||
36
web_profiler
07.01.14
✎
23:32
|
(34) да, вообще какой-то диб..зм. Зачем, вообще, дату в число превращать????
|
|||
37
web_profiler
07.01.14
✎
23:33
|
Ладно, на сегодня борьба с 1С закончена. Завтра будет новый "БОЙ"
|
|||
38
Torquader
07.01.14
✎
23:34
|
(36) Дата в dbf-файле пишется строкой.
Кто-то решил сэкономить место. Хотя, более вероятно, что кто-то просто неправильно задал тип поля, а уже "умная" 1С прекрасно преобразовала (причём, как туда, так и обратно), и "горе-программист" не узнал, что он "птица с железным клювом". |
|||
39
web_profiler
07.01.14
✎
23:35
|
Да, спасибо за участие. Одному как-то грустно бороться с 1С, г...кодирами
|
|||
40
ДенисЧ
08.01.14
✎
00:42
|
(39) Главное, "кодирами" не борисьюююю
|
|||
41
Тот же
08.01.14
✎
01:12
|
Сделай в загружаемом dbf_файле поле с типом DATA. И поправь обработку загрузки в dbf.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |