21 янв. 2017 г.

Новые поля в GD_CURRRATE и встроенная функция пересчета валюты

После деноминации курсы некоторых валют (в частности российского рубля) стали такими маленькими, что требуют хранения минимум 6-ти знаков после запятой. Для базы данных всё равно (домен dcurrrate у нас имеет точность до 10-ти знаков после запятой), но если такое значение где-то пройдет через тип Currency сохранятся только четыре знака, т.е. произойдет потеря точности. Мы добавили в таблицу GD_CURRRATE два поля amount и val. Где val -- это курс валюты за количество единиц amount. Теперь для российского рубля можно использовать amount=100 и четыре знака после запятой, как это делает наш Национальный Банк, когда публикует валютные сводки. При amount=1, val=coeff. Пересчет полей происходит на триггере. Весь старый код, который читает или изменяет только поле coeff сохранил свою работоспособность.

Попутно мы внесли следующие улучшения:

  • Для курса валюты можно указать кто его установил. Например, курс Национального банка, курс Валютно-фондовой биржи, курс банка Васи Пупкина и т.п.
  • Для курса можно указать не только дату, но и время, если курс меняется несколько раз в течение дня.

Для пересчета сумм из одной валюты в другую (в том числе и с использованием кросс-курса) в платформу добавлена функция System.GetCurrRate.

2 комментария:

Анонимный комментирует...

оБшипка"маДенькими"

Andrei комментирует...

Спасибо, поправили.

Отправить комментарий