powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / курсы валют и пересчет
20 сообщений из 20, страница 1 из 1
курсы валют и пересчет
    #32376337
Alexus12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
люди, памагити!
есть журнал курсов рубля к валютам: USD EUR фунт и т.д.
и есть журнал платежей во всех валютах из него (один в $, другой EUR, третий рубли и т.д.)
Задача: получить на выходе USD эквивалент всех платежей.

Рубль к доллару легко - журнал курсов дает прямой пересчет
а как евро в доллар через него прогнать?
можно сначала евро в руб, затем руб в долл - но тока функцией да?

Или еще как можно?
Кто пробовал, подскажите результаты изысков плиз!..
Спасибо!
...
Рейтинг: 0 / 0
курсы валют и пересчет
    #32376401
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для структуры(сделал предположение, что она такая)
CURRENCY [id, name] - таблица валют, в запросе нету
HISTORY[id, date, id_cur, rate] - история валют по датам
PAYMENTS[id, date, id_cur, value] - платежи (валюта и значение)

Параметры
PaymentId - код платежа,
CurId - код валюты, в которой надо получить стоимость платежа
Код: plaintext
1.
2.
3.
4.
5.
PARAMETERS PaymentId Long, CurId Long;

select  [rr].rub_rate / [cr].rate
from (SELECT (HISTORY.rate * PAYMENTS.value) as rub_rate
FROM HISTORY INNER JOIN PAYMENTS ON (HISTORY.id = PAYMENTS.id) AND (HISTORY.date = PAYMENTS.date)
WHERE (((PAYMENTS.id)=[PaymentId]))) as rr, (select rate from history where id_cur = CurId) as cr


Примечание:
Курс валюты должен существовать на дату совершения платежа, причем в поле [date] должна стоять дата без времени (для теста я поставил значение по умолчанию =Date(), если там со временем, то нужно поменять немного второе условие join'а ... )
...
Рейтинг: 0 / 0
курсы валют и пересчет
    #32376403
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пардон, опечатался, надо
Код: plaintext
1.
2.
3.
4.
PARAMETERS PaymentId Long, CurId Long;
SELECT [rr].rub_rate/[cr].rate AS Expr1
FROM [SELECT (HISTORY.rate * PAYMENTS.value) as rub_rate
FROM HISTORY INNER JOIN PAYMENTS ON (HISTORY.id_cur = PAYMENTS.id_cur) AND (HISTORY.date = PAYMENTS.date)
WHERE (((PAYMENTS.id)=[PaymentId]))]. AS rr, [select rate from history where id_cur = CurId]. AS cr;

Отличаюся полями в первом условии join'а...
На тестовом примере, причем, первый и второй запросы работали одинаково - совпали id'ы :)
...
Рейтинг: 0 / 0
курсы валют и пересчет
    #32376415
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И еще одно прикольно - при попытке сохранить этот запрос (как и предыдущий), Access умирает наглухо минуты через полторы, после чего сообщает, что база поломалась, он сам поломался, а в поломаном состоянии он может послать всех, не посылать или самому послаться. Ну, еще предлагает бэкап базы сделать, после чего закрывается.

Что-в оригинальной базе, что в забэкапленной - запрос пустой.
А если не сохранять - нажать на воскл. знак - на ура спрашивает параметры и выдает нужный рез-т.

Access 2002 SP2
...
Рейтинг: 0 / 0
курсы валют и пересчет
    #32376427
TRoUbLEs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Конечно, ГСА "можщно задвинул", как сказал бы Хрюн Моржевый, но проще было бы это пересчитать по кросс-курсу, а для этого лучше всего написать функцию и вставлять ее, ИМХО.
...
Рейтинг: 0 / 0
курсы валют и пересчет
    #32376768
Alexus12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот и у меня мысль в сторону функции....
люди!
выписывал такую кто-нибудь?
...
Рейтинг: 0 / 0
курсы валют и пересчет
    #32376861
Фотография Latuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Стандартный подход - пересчет через основную(центральную) валюту.
В данном случае удобнее чере рубль.

У меня функция
В проводке указана валюта и 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
...
Рейтинг: 0 / 0
курсы валют и пересчет
    #32376995
TRoUbLEs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вообще-то, при расчете кросс-курсов за основу берется именно USD и отсюда уже пляшуть. ;-) Если же мы берем за основ RUR, то формула выглядит, по меньшей мере странно, а именно:
EUR/USD=(RUR/USD)/(RUR/EUR)
Т.е. как видишь нужны обратные котировки. Если бухов устроит такой расчет, то можешь его использовать.
А почитать про расчет кросс-курсов можно тут .
...
Рейтинг: 0 / 0
курсы валют и пересчет
    #32377007
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Я не разбираюсь в бухгалтерии, но мое знание арифметики говорит мне, что вместо

(RUR/USD)/(RUR/EUR)

можно написать

(EUR/RUR)/(USD/RUR)
...
Рейтинг: 0 / 0
курсы валют и пересчет
    #32377036
TRoUbLEs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Саныч, оно бы и можно было так сделать, но только:
1) Есть курс покупки и есть курс продажи.
2) Из моей банковской практики могу сказать, что USD/RUR<=>1/(RUR/USD) (больше, меньше или равно). Причем чаще НЕ РАВНО, см. п.1. ;-))
...
Рейтинг: 0 / 0
курсы валют и пересчет
    #32377042
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
1. Насчет курса покупки и курса продажи - это надо в любом случае учитывать, от переворачивания формулы это не зависит.

2. Насчет "не равно" - видимо, дело в точности расчетов и в округлении?
...
Рейтинг: 0 / 0
курсы валют и пересчет
    #32377054
TRoUbLEs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Зависит, Саныч, Зависит.
EUR/RUR показывает сколько RUR дадут за 1 EUR.
RUR/EUR показывает сколько EUR дадут за 1 RUR
Т.е. беруться совсем разные курсы. Для Евросоюза и России даже курс EUR/RUR не будут равны между собой.
Вообще это мы уже лезем в теорию валютных рынков. ;-) Можешь пройтись по ссылочке и немного посмотреть.
...
Рейтинг: 0 / 0
курсы валют и пересчет
    #32377073
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Получается, что EUR/RUR и т.п. - это не операция деления, а некая функция, которая учитывает кроме этих двух параметров еще и другие, как-то покупка/продажа, место совершения сделки и т.д.
...
Рейтинг: 0 / 0
курсы валют и пересчет
    #32377086
TRoUbLEs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Райт, Саныч. Правильно. Это не деление - это курс, а это две разные веСЧи.
...
Рейтинг: 0 / 0
курсы валют и пересчет
    #32377094
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
А почему обозначается как деление? Вводит в заблуждение таких, как я, которые знают только арифметику.
...
Рейтинг: 0 / 0
курсы валют и пересчет
    #32377098
TRoUbLEs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
)))))
Саныч, веришь или нет - не знаю. Всегда и в универе так обозначали и на РБК так же. Видать так принято. )))))))
...
Рейтинг: 0 / 0
курсы валют и пересчет
    #32377104
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Понял. :^))))))))
...
Рейтинг: 0 / 0
курсы валют и пересчет
    #32379021
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не могу молчать - неймется

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;
...
Рейтинг: 0 / 0
курсы валют и пересчет
    #32379248
TRoUbLEs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
To Victosha :
Вы смотрите на проблему только с точки зрения математики и программирования, а жаль. :(( Что ж, попробую объяснить.
1) Если нам надо поменять Евро в баксы, но сделать это через рубли, то для начала нам надо продать евро за рубли, а потом за рубли купить доллары! Отсюда и два курса: покупки и продажи. Причем, я даже большее скажу, что для резидента, продающего евро это будет курс продажи, а для банка это будет курс покупки. Надеюсь, что хоть немного помог разобраться. Если интересует подробнее, то любая книга по валютным операциям вам в руки.
2) Машинная арифметика тут совершенно не причем. Если бы вы внимательно читали, то я в одном из постов уже объяснил, что USD/RUR - это не операция деления, а курс, а это две разные вещи. USD/RUR будет равно RUR/USD только в том случае, если валюты меняются одна на другую 1:1, т.е. за один бакс - один рубль, но и в одратном направлении должно быть также, т.е. за 1 рубль - 1 бакс. Так что про округление тут вообще не стоит говорить. ;-))
...
Рейтинг: 0 / 0
курсы валют и пересчет
    #32379450
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
To [TRoUbLEs]
я прочитал то, ЧТО ВЫ написали.
успехов в разнообразной деятельности, как бы Вы ее не называли.
И всяческой прочей удачи
Виктоша
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / курсы валют и пересчет
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]