Драйвер CurrencyExchangeTotalDriver

Этот драйвер используется только для операций обмена валюты с сохранением себестоимости валюты. Он похож на упрощенный драйвер MarginTotalDriver: так же работает с двумя парами проводок за раз, только не требует списания количества в ноль и полностью игнорирует несовпадающие измерения. Это позволяет оприходовать на итог доллары, а списать с него, скажем, евро. В простом случае схема проводок на итоге Обмен валюты выглядит так:


Итог: Банковский счет ($)

Итог: Обмен валюты

Итог: Банковский счет (€)

1. Приход (с суммами)

− Количество$, − Сумма

+ Количество$, + Сумма


2. Расход (без сумм)


− Количество€, Без суммы

+ Количество€, Без суммы

Здесь Количество$ — количество долларов, Количество€ — соответственно, евро (числа, естественно, не совпадают). В первой проводке указывается сумма (себестоимость в валюте учета), которая нужна только тогда, когда счет-источник уходит в минус. В обычной ситуации, если баланс счета-источника положителен, драйвер Банковского счета сообщает себестоимость этой партии валюты. Если списываемые со счета-источника деньги относятся к нескольким разным партиям с разной стоимостью — проводка расслаивается, и аналогично ей расслаивается приходная проводка на итоге Обмен валюты. Если проводка на счете-получателе расслаивается, то так же точно расслаивается парная ей проводка Обмена валюты.

На счете-получателе тоже может быть отрицательный баланс, из-за чего себестоимость валюты во второй паре проводок частично или полностью будет взята со счета-получателя (чтобы закрыть в ноль отрицательную партию). В этом случае итог Обмена валюты во второй паре проводок использует именно эту себестоимость, а разность осядет на итоге Обмен валюты.

Чаще всего эту разность удобнее учитывать на итоге Конвертации — там же, где прибыли и убытки от всех остальных операций с валютой. Добиться этого легко, если вторую пару проводок прогнать через Конвертацию:


Итог: Банковский счет ($)

Итог: Обмен валюты

Итог: Конвертация

Итог: Банковский счет (€)

1. Приход (с суммами)

− Количество$, − Сумма

+ Количество$, + Сумма



2. Расход (без сумм)


− Количество€, Без суммы

+ Количество€, Без суммы


3. Конвертация (без сумм)



− Количество€, Без суммы

+ Количество€, Без суммы

Разность себестоимости партий валют осядет на Конвертации, а на итоге Обмен валюты дельта останется нулевой.