Gedemin TLB.IGedemin.GetCurrRate
Материал из GedeminWiki
(Различия между версиями)
SYSDBA (обсуждение | вклад) |
SYSDBA (обсуждение | вклад) (→Примеры использования) |
||
| (не показаны 8 промежуточных версий 1 участника) | |||
| Строка 1: | Строка 1: | ||
| − | {{MethodDef_Template|unit={{#explode:{{PAGENAME}}|.|0}}|visibility=public|class={{#explode:{{PAGENAME}}|.|1}}|src=function gsGetCurrRate2(ForDate: TDateTime; RegulatorKey: OleVariant; FromCurrKey: OleVariant; | + | {{MethodDef_Template|unit={{#explode:{{PAGENAME}}|.|0}}|visibility=public|class={{#explode:{{PAGENAME}}|.|1}}|src=function gsGetCurrRate2(ForDate: TDateTime; ValidDays: Integer; RegulatorKey: OleVariant; FromCurrKey: OleVariant; |
ToCurrKey: OleVariant; CrossCurrKey: OleVariant; Amount: Currency; | ToCurrKey: OleVariant; CrossCurrKey: OleVariant; Amount: Currency; | ||
ForceCross: WordBool; UseInverted: WordBool; RaiseException: WordBool): Double; safecall;}} | ForceCross: WordBool; UseInverted: WordBool; RaiseException: WordBool): Double; safecall;}} | ||
| Строка 7: | Строка 7: | ||
===Параметры=== | ===Параметры=== | ||
| − | ;ForDate: Дата или дата и время, на которую будет осуществлен пересчет. | + | ;ForDate: Дата или дата и время, на которую будет осуществлен пересчет. |
| + | ;ValidDays: Целочисленный параметр смысл которого, защититься от ситуаций, когда актуального курса нет в базе данных и запрос подхватывает устаревшие значения десятилетней давности. Может принимать следующие значения: | ||
| + | * -1 -- в таблице курсов [[GD_CURRRATE]] ищется запись равная указанной дате или ближайшая к ней более ранняя. Так работает весь существующий код. | ||
| + | * 0 -- в таблице курсов ищется запись в точности соответствующая заданной дате (или дате и времени). | ||
| + | * Положительное число, большее 0 -- в таблице курсов ищется запись равная указанной дате или более ранняя, но такая, чтобы интервал между двумя датами не превышал указанное число дней. | ||
;RegulatorKey: Целочисленный идентификатор записи из таблицы [[GD_COMPANY]], РУИД в строковом представлении или -1. Если параметр задан, то берется '''только''' курс, установленный указанным регулятором. Если не задан (значение -1), то сначала ищется курс, у которого поле '''gd_currrate.regulatorkey IS NULL''', затем курс, установленный любым регулятором. | ;RegulatorKey: Целочисленный идентификатор записи из таблицы [[GD_COMPANY]], РУИД в строковом представлении или -1. Если параметр задан, то берется '''только''' курс, установленный указанным регулятором. Если не задан (значение -1), то сначала ищется курс, у которого поле '''gd_currrate.regulatorkey IS NULL''', затем курс, установленный любым регулятором. | ||
;FromCurrKey: Исходная валюта, в которой выражено значение параметра '''Amount'''. | ;FromCurrKey: Исходная валюта, в которой выражено значение параметра '''Amount'''. | ||
| Строка 29: | Строка 33: | ||
<syntaxhighlight lang="vbnet"> | <syntaxhighlight lang="vbnet"> | ||
Option Explicit | Option Explicit | ||
| − | Sub | + | 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 | End Sub | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Текущая версия на 15:41, 25 января 2017
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