Для учета продаж товаров и валюты используются итоги Реализация и Конвертация, драйверы которых основаны (обычно без каких-либо изменений в логике) на драйвере MarginTotalDriver. Этот драйвер всегда обрабатывает по две пары транзакций: приходную и расходную. По переменной количества эти пары всегда согласованы, а по суммам, как правило, расходятся.
Схема работа итога Реализации — приходование товара по себестоимости и следом сразу же расходование его по продажной стоимости. Разность между суммами расхода и прихода — это выручка от продажи товара. Вот так выглядят проводки по реализации:
Итог: Остатки товара |
Итог: Реализация |
Итог: Балансы контрагентов |
|
1. Приход (без указания сумм) |
− Количество, Без суммы |
+ Количество, Без суммы |
|
2. Расход (с указанием сумм) |
− Количество, − Сумма |
+ Сумма |
Для приходной пары проводок драйвер итога Остатки товара (работающий на базе FifoTotalDriver) рассчитывает сумму прихода, т. е. себестоимость по алгоритму FIFO. Драйвер Реализации копирует эту сумму в парную проводку. В расходной паре проводок суммы уже указаны: это стоимость товара при продаже. Расходные проводки списывают товар с Реализации и приходуют долг на Баланс контрагента, оставляя на Реализации разность между суммами прихода и расхода.
Итог Конвертации используется для согласования сумм при перемещении денег между счетами и при покупке/продаже валюты. Итог тоже обрабатывает по две пары транзакций за один шаг, и результат операций примерно такой же: на итоге оседает разница между суммами прихода и расхода. Вот схема проводок по Конвертации для перемещения денег между счетами:
Итог: Банковские счета |
Итог: Конвертация |
Итог: Банковские счета |
|
1. Приход (с указанием сумм) |
− Количество, − Сумма |
+ Количество, + Сумма |
|
2. Расход (без указания сумм) |
− Количество, Без суммы |
+ Количество, Без суммы |
В приходной проводке указывается сумма (денежный эквивалент суммы в валюте), в расходной — сумма не указывается. Драйвер счета-источника либо сообщает себестоимость партии валюты, либо использует указанный в проводке денежный эквивалент (если происходит списание со счета в минус и создается новая отрицательная партия со своей себестоимостью). Во второй паре проводок себестоимость может сообщить либо счет-получатель (если нужно закрыть отрицательную партию на этом счету), либо использует ту же самую себестоимость из приходной пары проводок. В наиболее частой ситуации, когда баланс обоих банковских счетов положительный, перенос денег со счета на счет не меняет себестоимость валюты: она переносится через итог Конвертации без изменений. Но в тех случаях, когда с той или другой стороны есть овердрафт, итог Конвертации выступает в качестве буфера, который согласует себестоимость партий.
Другая схема проводок по Конвертации используется при покупке/продаже валюты с баланса контрагента:
Итог: Банковские счета |
Итог: Конвертация |
Итог: Балансы контрагентов |
|
1. Приход (с указанием сумм) |
− Количество, − Сумма1 |
+ Количество, + Сумма1 |
|
2. Расход (с указанием сумм) |
− Количество, − Сумма2 |
+ Сумма2 |
Суммы, указанные в приходной паре проводок, как и в предыдущем случае, используются только в случае ухода счета в минус. Если баланс счета-источника положителен, драйвер счета-источника вместо Суммы1 подставит реальную себестоимость денежной партии. Как и в предыдущем случае, на итоге Конвертации осядет разница между суммами расхода и прихода, которую здесь можно интерпретировать как выручку (или потерю) при валютообменной операции.