Gedemin TLB.IGedemin.GetCurrRate

Материал из GedeminWiki
Перейти к: навигация, поиск

From Gedemin TLB.pas

 function  gsGetCurrRate2(ForDate: TDateTime; ValidDays: Integer; RegulatorKey: OleVariant; FromCurrKey: OleVariant; 
                            ToCurrKey: OleVariant; CrossCurrKey: OleVariant; Amount: Currency; 
                            ForceCross: WordBool; UseInverted: WordBool; RaiseException: WordBool): Double; safecall;

Unit: Gedemin TLB

Type: function

Visibility: public

Member Of: IGedemin

Описание

Пересчитывает указанную сумму из одной валюты в другую по курсу на заданную дату.

Параметры

ForDate
Дата или дата и время, на которую будет осуществлен пересчет.
ValidDays
Целочисленный параметр смысл которого, защититься от ситуаций, когда актуального курса нет в базе данных и запрос подхватывает устаревшие значения десятилетней давности. Может принимать следующие значения:
 * -1 -- в таблице курсов GD_CURRRATE ищется запись равная указанной дате или ближайшая к ней более ранняя. Так работает весь существующий код. 
 * 0 -- в таблице курсов ищется запись в точности соответствующая заданной дате (или дате и времени). 
 * Положительное число, большее 0 -- в таблице курсов ищется запись равная указанной дате или более ранняя, но такая, чтобы интервал между двумя датами не превышал указанное число дней.
RegulatorKey
Целочисленный идентификатор записи из таблицы GD_COMPANY, РУИД в строковом представлении или -1. Если параметр задан, то берется только курс, установленный указанным регулятором. Если не задан (значение -1), то сначала ищется курс, у которого поле gd_currrate.regulatorkey IS NULL, затем курс, установленный любым регулятором.
FromCurrKey
Исходная валюта, в которой выражено значение параметра Amount.
ToCurrKey
Валюта, в которую пересчитывается значение Amount.
CrossCurrKey
Валюта для расчета кросс-курса. Опциональный параметр.
Amount
Количество денежных единиц, выраженных в исходной валюте. Если Amount = 1, то функция вернет курс исходной валюты, выраженный в валюте пересчета.
ForceCross
Булевский параметр. Используется только если задан CrossCurrKey. При ForceCross = True всегда рассчитывается кросс-курс. Т.е. сначала сумма переводится из исходной валюты, в валюту кросс-курса, а затем полученное значение переводится в валюту пересчета. Если ForceCross = False, то система сначала попытается найти запись для прямой конвертации из исходной валюты в валюту пересчета и только при её отсутствии будет произведен пересчет через кросс-курс.
UseInverted
Булевский параметр. Если UseInverted = True и в базе данных нет записи для курса конвертации из исходной валюты в валюту пересчета, то система попытается найти и использовать обратный курс из валюты пересчета в исходную валюту. Если одновременно заданы параметры UseInverted = True, CrossCurrKey и ForceCross = False, и при этом система не может найти прямой курс для конвертаци из исходной валюты в валюту пересчета, то сначала будет предпринята попытка найти обратный курс и только при ее неудаче будет использован пересчет через кросс-курс.
RaiseException
Булевский параметр. Если RaiseException = False, то при возникновении ошибок функция вернет 0. Исключение генерироваться не будет.

Валюта может быть задана следующим образом:

  • целочисленным идентификатором записи из таблицы GD_CURR
  • РУИД-ом в строковом представлении
  • строковым кодом валюты (поле gd_curr.code). Регистр должен совпадать со значением в базе данных
  • "NCU" -- текущая национальная денежная единица (поле gd_curr.isncu = 1). Обязательно в верхнем регистре
  • -1 -- параметр не задан

Примеры использования

Option Explicit
Sub Macros356972760_735619482
 
  Dim D
  D = DateSerial(2017, 01, 17)
 
  ' Курс Доллара США в белорусских рублях
  MsgBox System.GetCurrRate(D, 31, -1, 200020, 200010, -1, 1, False, False, False)
 
  ' тоже самое, валюты задаются кодами
  MsgBox System.GetCurrRate(D, 31, -1, "USD", "BYN", -1, 1, False, False, False)
 
  ' тоже самое, валюты задаются кодами. Национальная денежная единица у нас BYN
  MsgBox System.GetCurrRate(D, 31, -1, "USD", "NCU", -1, 1, False, False, False)
 
  ' должно получиться тоже самое, так как кросс-курс не понадобится --
  ' в базе данных есть прямой курс
  MsgBox System.GetCurrRate(D, 31, -1, "USD", "NCU", "EUR", 1, False, False, False)
 
  ' рассчитано через кросс-курс
  MsgBox System.GetCurrRate(D, 31, -1, "USD", "EUR", "BYN", 1, True, False, False)
 
  ' должно получиться 0. такого курса в базе нет
  MsgBox System.GetCurrRate(D, 31, -1, "USD", "GBP", -1, 1, False, False, False)
 
  ' курс должен рассчитаться через кросс-курс
  MsgBox System.GetCurrRate(D, 31, -1, "USD", "GBP", "BYN", 1, False, True, False)
End Sub
Персональные инструменты
Пространства имён

Варианты
Действия
Навигация
Инструменты