Драйвер MarginTotalDriver

Для учета продаж товаров и валюты используются итоги Реализация и Конвертация, драйверы которых основаны (обычно без каких-либо изменений в логике) на драйвере MarginTotalDriver. Этот драйвер всегда обрабатывает по две пары транзакций: приходную и расходную. По переменной количества эти пары всегда согласованы, а по суммам, как правило, расходятся.

Схема работа итога Реализации — приходование товара по себестоимости и следом сразу же расходование его по продажной стоимости. Разность между суммами расхода и прихода — это выручка от продажи товара. Вот так выглядят проводки по реализации:


Итог: Остатки товара

Итог: Реализация

Итог: Балансы контрагентов

1. Приход (без указания сумм)

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

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


2. Расход (с указанием сумм)


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

+ Сумма

Для приходной пары проводок драйвер итога Остатки товара (работающий на базе FifoTotalDriver) рассчитывает сумму прихода, т. е. себестоимость по алгоритму FIFO. Драйвер Реализации копирует эту сумму в парную проводку. В расходной паре проводок суммы уже указаны: это стоимость товара при продаже. Расходные проводки списывают товар с Реализации и приходуют долг на Баланс контрагента, оставляя на Реализации разность между суммами прихода и расхода.

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


Итог: Банковские счета

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

Итог: Банковские счета

1. Приход (с указанием сумм)

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

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


2. Расход (без указания сумм)


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

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

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

Другая схема проводок по Конвертации используется при покупке/продаже валюты с баланса контрагента:


Итог: Банковские счета

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

Итог: Балансы контрагентов

1. Приход (с указанием сумм)

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

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


2. Расход (с указанием сумм)


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

+ Сумма2

Суммы, указанные в приходной паре проводок, как и в предыдущем случае, используются только в случае ухода счета в минус. Если баланс счета-источника положителен, драйвер счета-источника вместо Суммы1 подставит реальную себестоимость денежной партии. Как и в предыдущем случае, на итоге Конвертации осядет разница между суммами расхода и прихода, которую здесь можно интерпретировать как выручку (или потерю) при валютообменной операции.