Имя: Пароль:
1C
1С v8
Получение даты из числа
,
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
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.