Доброго времени суток.
Я думал, что я нашел багу обнаружив, что отчеты считаются по текущему курсу и в следствии чего значения по ним "едут". А тут оказывается - это замысел разработчиков. Ну допустим в этом есть определенный резон, но я пожалуй опишу и свое видение данного вопроса.
Начну с того, что мне не часто приходится платить в иностранной валюте - за 2021 год такое было в августе (ввиду чего я собственно подвох не сразу заметил). Но это не значит, что на это можно/нужно закрыть глаза. И здесь я скорее согласен с комментариями выше, что в долгосрочном разрезе, для анализа расходов, привязываться к текущему курсу валют - в корне не верный подход. Отчеты получаются некорректные.
Очевидным решением, описанным выше, было бы хранить курс валют по датам и опираться на них при расчете транзакций. Но на сколько я понял - это реализовывать не планируется в виду того, что размер базы увеличится. Далее могут начаться проблемы с синхронизацией больших файлов и т.п. нюансы. Сложно судить на сколько в реальности база увеличится, если скажем оперировать одной валютой, но допустим тут есть свой смысл.
Так же можно использовать тип операции перевод, но это несколько ломает логику ведения бюджета в разных счетах и на выходе получится жутко не удобно.
Тем не менее, на сколько я могу судить, в программе уже реализован функционал редактирования курса валюты для конкретной транзакции. Более того, каждая такая транзакция (с отредактированным курсом), в своих свойствах, автоматически считает правильную сумму затрат для выбранной там валюты по заданному курсу. Тут, кстати, логично валюту устанавливать той, что является основной для пользователя.
Мое предложение состоит в том, чтобы при построении отчетов, если ручной курс задан для транзакции, учитывать нужно значение полученное там. Для транзакций, где это не настроено - рассчитывать по умолчанию.
Да, все это несколько неповоротливо и нужно вручную каждую транзакцию редактировать - зато хоть как-то управляемо и экономно с точки зрения занимаемого места. Плюс доработка в программе не выглядит громоздкой/масштабной.
Кстати, если не для этого, то для чего данный функционал вообще имеется в программе?
ПРИМЕР:
У меня есть 2 счета:
НАЛИЧНЫЕ. В настройках данного счета указан Рубль в качестве валюты.
НАЛИЧНЫЕ ($). В настройках данного счета указан Доллар в качестве валюты.
06.08.2021: Я сделал перевод на сумму 59974 руб. между счетами НАЛИЧНЫЕ -> НАЛИЧНЫЕ ($) и в итоге получил 811$. Получается банк, где я менял валюту, рассчитал меня по курсу 811/59974=0,0135225264. Это значение я и указал в настройках перевода. Да, данный курс отличается от курса ЦБ, но это и логично - банки на таких конвертациях и зарабатывают.
10.08.2021: Я совершил транзакцию (не перевод) и потратил 10$ со счета НАЛИЧНЫЕ ($). В настройках транзакции я выставляю:
Валюта = Рубль
Курс =73,5078 (это как раз курс ЦБ)
Автоматически подсчитанная сумма в заданной валюте = 142,02 руб.
11.08.2021: Я совершил транзакцию (не перевод) и потратил 5$ со счета НАЛИЧНЫЕ ($). В настройках транзакции я выставляю:
Валюта = Рубль
Курс =73,5962 (это как раз курс ЦБ)
Автоматически подсчитанная сумма в заданной валюте = 367,98 руб.
...
При построении отчетов, учитывая "отредактированные" транзакции в счетах с валютой отличной от основной для пользователя, мы будем получать точные цифры - всегда отражающие действительность за прошедший период времени.
В итоге:
а) Не придется хранить курсы валют по всем дням, а база, в свою очередь, не будет увеличиваться "просто так".
б) Процесс станет управляемым.
в) Отчеты за предыдущие периоды будут выглядеть корректно. И это самое важное.
Надеюсь описанное мною выше, будет иметь отклик, т.к. программа мне нравится, но я бы хотел получать корректные отчеты за прошедшие периоды.
Спасибо.