Показать сообщение отдельно
Старый 29.09.2014, 16:11   #1  
Blog bot is offline
Blog bot
Участник
 
25,643 / 848 (80) +++++++
Регистрация: 28.10.2006
axforum blogs: TimeZone в Ax2009
Источник: http://axforum.info/forums/blog.php?b=8150
==============

Редкий случай, когда задачу на модификацию в Axapta поставили ДО вступления в силу очередного постановления правительства. Обычно задачу ставят спустя пол-года..год ПОСЛЕ ;). В данном случае, постановление о переводе часов на один час назад 26.10.2014 в 2 часа ночи. Ну, поскольку "ждать милостей от ..." не приходится, то решил разобраться самостоятельно

Импорт новых правил определения часовых поясов - это форма TimezonePatchImport. В ней выбирается файл XML, который формирует новую запись в таблице \System Documentation\Tables\TimeZonesRulesData.

Ага. И как должен выглядеть этот файл для новых правил? Ну, для начала надо понять назначение полей таблицы TimeZonesRulesData. Как оказалось, это не такая очевидная вещь :) Единственная ссылка, которую нашел

http://stackoverflow.com/questions/1...ersion/1293263

По этой ссылке (и после ряда экспериментов ;) ) разобрался в назначении полей

----------------------------------------------------------

Назначение полей таблицы \System Documentation\Tables\TimeZonesRulesData

RULEID - идентификатор записи. Фассетный код: первые 2 символа - значение поля TZENUM, далее 3 символа - порядковый номер
TZENUM: Внешний ключ ссылки на таблицу TIMEZONESLIST или значение Base Enum: \System Documentation\Enums\Timezone
YEAR: 0 если правило действует бессрочно или год применения правила
BIAS: сдвиг времени в минутах относительно времени UTC
DBIAS: периодический сдвиг DST (добавляется к BIAS для установки общего сдвига от UTC)

Поля D* - определят начальную дату и время для сдвига DST
Поле S* - определят конечную дату и время для сдвига DST

Смысл полей ясен из их имени, кроме полей *DAY

DDAY и SDAY - это номер недели в месяце (1-4, 5 = последняя неделя)

DDAYOFWEEK и SDAYOFWEEK - номер дня недели (0 = Воскресенье)

Необходимо либо задавать диапазон (как начальные, так и конечные даты), либо не задавать диапазон вообще.
Указать только начальную или только конечную дату - невозможно. Это будет расценено как отсутствие диапазона. Т.е. действует на весь год

----------------------------------------------------------

Вот по какой логике в поле с названием DAY записывается номер недели в месяце? "Загадочная датская душа", не иначе :D Или уже американская :cool:

Кстати, и файл XML за 2010..2011 года тоже "чудо чудное". Начало диапазона тогда задали в октябре, а окончание в мае. Ну, вероятно, спиной к монитору программировали :)

----------------------------------------------------------

Ну, тогда новый файл XML получается таким

PHP код:





61004
61
2014
-240
0
10
0
5
2
0
0
60
0
12
3
5
23
59
59
0



61005
61
2015
-180
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0



В принципе, можно сделать и одну запись, поставив в качестве даты окончания 2153 год. Но надо учитывать, что наше родное правительство в любой момент может выпустить очередное постановление о "самом правильном" распределении часовых поясов. О здоровье граждан они уже побеспокоились, следующее постановление замотивируют экономическим соображениями :D


Источник: http://axforum.info/forums/blog.php?b=8150
__________________
Расскажите о новых и интересных блогах по Microsoft Dynamics, напишите личное сообщение администратору.