Расчетом итогов занимается калькулятор итогов при участии драйверов итогов. Драйверы отвечают за расчет транзакций каждый своего итога, а процесс в целом координируется калькулятором. Калькулятор определяет интервал расчета и создает по экземпляру драйвера на каждый итог в системе (в расчете участвуют только итоги с двойной записью). Перед стартом расчета каждый драйвер загружает свое состояние на начало периода. Что такое состояние — зависит от конкретного драйвера (например, для драйвера FIFO состояние — это список имеющихся партий).
Во время расчета калькулятор итога параллельно загружает транзакции всех итогов, формирует из них пары и группирует в пакеты по документам. Документы обрабатываются последовательно в порядке, определяемом датой проведения. Загруженные транзакции передаются на обработку драйверам итогов, причем транзакции оперативных итогов просто копируются (поскольку в их случае расчет не требуется), а транзакции аналитических итогов сначала обрабатываются методами CalculateIncomes/CalculateOutcomes своих драйверов.
С определенной периодичностью калькулятор итогов сохраняет рассчитанные транзакции в таблицы полных транзакций и обновляет значения рассчитанных пределов итогов. При аварийной остановке расчета итогов повторный запуск может продолжить расчет с того места, где были установлены последние пределы расчета.
Любой драйвер может быть назначен нескольким итогам одновременно. Задача прикладного разработчика состоит в том, чтобы подобрать для итога один из драйверов стандартной конфигурации или реализовать собственный на основе базовых классов. В оперативных итогах, данные которых не требуют расчета, используется драйвер Default (идентификатор 7471).
Список всех драйверов итогов можно найти в справочнике "Total drivers":
Окно справочника разделено на две части: слева отображается дерево групп драйверов итогов, справа — список драйверов выбранной слева группы.
Записи справочника можно фильтровать по Названию драйвера (Name) и Тегам (Tag).
Открыть скрипт выбранного драйвера итогов в форме редактирования можно прямо из списковой формы справочника, выбрав пункт Edit script в контекстном меню.
Драйвер итогов обладает следующими свойствами:
•Name — название драйвера;
•Description — описание драйвера;
•Base class — базовый класс драйвера. Выбирается исходя из специфики итога, для расчета аналитических данных которого используется драйвер. Существуют следующие базовые классы:
▪DefaultTotalDriver — используется по умолчанию для итогов, в которых расчет данных не требуется;
▪FifoTotalDriver — реализует расчет себестоимости по методу FIFO (первый пришел — первый ушел). Соответственно используется для драйверов итогов, аналитической переменной которых является себестоимость;
▪MoneyTotalDriver — разновидность класса FifoTotalDriver, у которого вместо переменной Quantity используется переменная CurrencyAmount. Используется для драйверов итогов, аналитической переменной которых являются наличные денежные средства;
▪CashlessMoneyTotalDriver — разновидность MoneyTotalDriver, который может уходить в минус. Используется для драйверов итогов, аналитической переменной которых являются безналичные денежные средства;
▪MarginTotalDriver — базовый класс для драйверов итогов реализации (товаров или услуг) и конвертации (валют);
▪CurrencyExchangeTotalDriver — базовый класс для драйвера обмена валюты.
•Script — ссылка на скрипт. При создании нового драйвера итога скрипт создается автоматически при его сохранении. Нажатие на ссылку Click here to edit the script... при создании нового драйвера итогов приведет к сохранению драйвера и его перезагрузке, затем откроется форма редактирования скрипта;
•Folder — группа, которой принадлежит драйвер;
•Metadata tags — теги, используемые для описания функционала драйвера;
•Developer's comments — комментарии прикладного разработчика.