|
|
|
курсы валют и пересчет
|
|||
|---|---|---|---|
|
#18+
люди, памагити! есть журнал курсов рубля к валютам: USD EUR фунт и т.д. и есть журнал платежей во всех валютах из него (один в $, другой EUR, третий рубли и т.д.) Задача: получить на выходе USD эквивалент всех платежей. Рубль к доллару легко - журнал курсов дает прямой пересчет а как евро в доллар через него прогнать? можно сначала евро в руб, затем руб в долл - но тока функцией да? Или еще как можно? Кто пробовал, подскажите результаты изысков плиз!.. Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2004, 18:55 |
|
||
|
курсы валют и пересчет
|
|||
|---|---|---|---|
|
#18+
Для структуры(сделал предположение, что она такая) CURRENCY [id, name] - таблица валют, в запросе нету HISTORY[id, date, id_cur, rate] - история валют по датам PAYMENTS[id, date, id_cur, value] - платежи (валюта и значение) Параметры PaymentId - код платежа, CurId - код валюты, в которой надо получить стоимость платежа Код: plaintext 1. 2. 3. 4. 5. Примечание: Курс валюты должен существовать на дату совершения платежа, причем в поле [date] должна стоять дата без времени (для теста я поставил значение по умолчанию =Date(), если там со временем, то нужно поменять немного второе условие join'а ... ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2004, 20:21 |
|
||
|
курсы валют и пересчет
|
|||
|---|---|---|---|
|
#18+
Пардон, опечатался, надо Код: plaintext 1. 2. 3. 4. Отличаюся полями в первом условии join'а... На тестовом примере, причем, первый и второй запросы работали одинаково - совпали id'ы :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2004, 20:24 |
|
||
|
курсы валют и пересчет
|
|||
|---|---|---|---|
|
#18+
И еще одно прикольно - при попытке сохранить этот запрос (как и предыдущий), Access умирает наглухо минуты через полторы, после чего сообщает, что база поломалась, он сам поломался, а в поломаном состоянии он может послать всех, не посылать или самому послаться. Ну, еще предлагает бэкап базы сделать, после чего закрывается. Что-в оригинальной базе, что в забэкапленной - запрос пустой. А если не сохранять - нажать на воскл. знак - на ура спрашивает параметры и выдает нужный рез-т. Access 2002 SP2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2004, 20:47 |
|
||
|
курсы валют и пересчет
|
|||
|---|---|---|---|
|
#18+
Конечно, ГСА "можщно задвинул", как сказал бы Хрюн Моржевый, но проще было бы это пересчитать по кросс-курсу, а для этого лучше всего написать функцию и вставлять ее, ИМХО. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2004, 21:09 |
|
||
|
курсы валют и пересчет
|
|||
|---|---|---|---|
|
#18+
вот и у меня мысль в сторону функции.... люди! выписывал такую кто-нибудь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2004, 11:33 |
|
||
|
курсы валют и пересчет
|
|||
|---|---|---|---|
|
#18+
Стандартный подход - пересчет через основную(центральную) валюту. В данном случае удобнее чере рубль. У меня функция В проводке указана валюта и ID курса Курсов у одной валюты может быть несколько типов в день (Внутренний , ЦБ , ЦБ+1% и тд) Соотв выбирается самый свежий курс валюты к рублю того же типа , что и проводке. Пересчитываеш проводку в рубли , потом рубли по полученному курсу в другую валюту В результате могу получать отчеты отдельно по валютам или приведенные к любой конкретной валюте. Дальше идут проблеммы со списанием курсовой разницы , но это уже другая песня. ALTER FUNCTION dbo.GetCurKurs ( @KV_ID int, @Vlt_ID tinyint, @Doc_Data smalldatetime ) RETURNS smallmoney AS BEGIN DECLARE @KV_Kurs smallmoney DECLARE @VK_ID tinyint DECLARE @KV_Data smalldatetime --беру тип курса IF @KV_ID IS NULL SET @VK_ID=1 ELSE SELECT @VK_ID=VK_ID FROM KV_KursValut WHERE ID=@KV_ID --Беру наибольшую дату курса этого типа на дату -- тут конечно можно получше типа SELECT TOP1 ... Order By Data Desk переделывать лень SELECT @KV_Data=MAX(Data) FROM dbo.KV_KursValut WHERE Vlt_ID =@Vlt_ID AND VK_ID=@VK_ID AND Data < DATEADD(day, 1, @Doc_Data) --Беру курс эттого типа на эту дату SELECT @KV_Kurs=Kurs FROM dbo.KV_KursValut WHERE Vlt_ID =@Vlt_ID AND VK_ID=@VK_ID AND Data=@KV_Data RETURN @KV_Kurs END ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2004, 12:16 |
|
||
|
курсы валют и пересчет
|
|||
|---|---|---|---|
|
#18+
Вообще-то, при расчете кросс-курсов за основу берется именно USD и отсюда уже пляшуть. ;-) Если же мы берем за основ RUR, то формула выглядит, по меньшей мере странно, а именно: EUR/USD=(RUR/USD)/(RUR/EUR) Т.е. как видишь нужны обратные котировки. Если бухов устроит такой расчет, то можешь его использовать. А почитать про расчет кросс-курсов можно тут . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2004, 13:17 |
|
||
|
курсы валют и пересчет
|
|||
|---|---|---|---|
|
#18+
Я не разбираюсь в бухгалтерии, но мое знание арифметики говорит мне, что вместо (RUR/USD)/(RUR/EUR) можно написать (EUR/RUR)/(USD/RUR) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2004, 13:23 |
|
||
|
курсы валют и пересчет
|
|||
|---|---|---|---|
|
#18+
Саныч, оно бы и можно было так сделать, но только: 1) Есть курс покупки и есть курс продажи. 2) Из моей банковской практики могу сказать, что USD/RUR<=>1/(RUR/USD) (больше, меньше или равно). Причем чаще НЕ РАВНО, см. п.1. ;-)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2004, 13:38 |
|
||
|
курсы валют и пересчет
|
|||
|---|---|---|---|
|
#18+
1. Насчет курса покупки и курса продажи - это надо в любом случае учитывать, от переворачивания формулы это не зависит. 2. Насчет "не равно" - видимо, дело в точности расчетов и в округлении? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2004, 13:41 |
|
||
|
курсы валют и пересчет
|
|||
|---|---|---|---|
|
#18+
Зависит, Саныч, Зависит. EUR/RUR показывает сколько RUR дадут за 1 EUR. RUR/EUR показывает сколько EUR дадут за 1 RUR Т.е. беруться совсем разные курсы. Для Евросоюза и России даже курс EUR/RUR не будут равны между собой. Вообще это мы уже лезем в теорию валютных рынков. ;-) Можешь пройтись по ссылочке и немного посмотреть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2004, 13:47 |
|
||
|
курсы валют и пересчет
|
|||
|---|---|---|---|
|
#18+
Получается, что EUR/RUR и т.п. - это не операция деления, а некая функция, которая учитывает кроме этих двух параметров еще и другие, как-то покупка/продажа, место совершения сделки и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2004, 13:57 |
|
||
|
курсы валют и пересчет
|
|||
|---|---|---|---|
|
#18+
Райт, Саныч. Правильно. Это не деление - это курс, а это две разные веСЧи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2004, 14:03 |
|
||
|
курсы валют и пересчет
|
|||
|---|---|---|---|
|
#18+
А почему обозначается как деление? Вводит в заблуждение таких, как я, которые знают только арифметику. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2004, 14:08 |
|
||
|
курсы валют и пересчет
|
|||
|---|---|---|---|
|
#18+
))))) Саныч, веришь или нет - не знаю. Всегда и в универе так обозначали и на РБК так же. Видать так принято. ))))))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2004, 14:10 |
|
||
|
курсы валют и пересчет
|
|||
|---|---|---|---|
|
#18+
Понял. :^)))))))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2004, 14:12 |
|
||
|
курсы валют и пересчет
|
|||
|---|---|---|---|
|
#18+
не могу молчать - неймется to [TRoUbLEs] автор 1) Есть курс покупки и есть курс продажи. 2) Из моей банковской практики могу сказать, что USD/RUR<=>1/(RUR/USD) (больше, меньше или равно). Причем чаще НЕ РАВНО, см. п.1. ;-)) вопрос 1 нельзя ли пояснить как 1) связано с поставленным вопросом замечание 1 2) следует не из банковской практики, а из (машинной) арифметики PS IMHO, смысл кода [Гавриленко Сергей Алексеевич] в общем, в тему (хотя, на мой взгляд, тяжеловесен). Поскольку реализует стандартный треугольник со следующими замечаниями: а) имплицитная точность округления в обеих фазах приведения - в европе, например ее явно стандартизировали. б) для запрошенной задачи я бы переписал с учетом замены PARAMETERS PaymentId Long, CurId Long; на PARAMETERS PaymentId Long, ReportDate datetime; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2004, 18:43 |
|
||
|
курсы валют и пересчет
|
|||
|---|---|---|---|
|
#18+
To Victosha : Вы смотрите на проблему только с точки зрения математики и программирования, а жаль. :(( Что ж, попробую объяснить. 1) Если нам надо поменять Евро в баксы, но сделать это через рубли, то для начала нам надо продать евро за рубли, а потом за рубли купить доллары! Отсюда и два курса: покупки и продажи. Причем, я даже большее скажу, что для резидента, продающего евро это будет курс продажи, а для банка это будет курс покупки. Надеюсь, что хоть немного помог разобраться. Если интересует подробнее, то любая книга по валютным операциям вам в руки. 2) Машинная арифметика тут совершенно не причем. Если бы вы внимательно читали, то я в одном из постов уже объяснил, что USD/RUR - это не операция деления, а курс, а это две разные вещи. USD/RUR будет равно RUR/USD только в том случае, если валюты меняются одна на другую 1:1, т.е. за один бакс - один рубль, но и в одратном направлении должно быть также, т.е. за 1 рубль - 1 бакс. Так что про округление тут вообще не стоит говорить. ;-)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2004, 13:47 |
|
||
|
|

start [/forum/topic.php?fid=45&fpage=1694&tid=1677159]: |
0ms |
get settings: |
11ms |
get forum list: |
20ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
38ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
75ms |
get tp. blocked users: |
2ms |
| others: | 212ms |
| total: | 378ms |

| 0 / 0 |
