Ограничимся пока неформальным изложением DSL-языка виртуальных итогов. Приведем полностью текст виртуального итога, упомянутого в прошлом разделе и разберем его составные части:
// dimensions and variables total Convertation: Amount value CostItemID: 81 |
В первую очередь описываются измерения (dim) и переменные (var): сначала служебное имя, затем в скобках справочник или документ (только для измерений) и, наконец, локализованные названия, перечисленные через запятую. Переменных и измерений может быть сколько угодно, но на практике чаще всего в виртуальных итогах используется четыре-пять измерений и одна-две переменные. Если измерение виртуального итога ссылается на документ, нужно указать имя документа с суффиксом Document:
dim IncomeDocumentID (PurchaseDocument): en(Income document), ru(Приходный документ) |
Во втором разделе описываются вычисляемые группы (group). В каждой группе для каждой переменной виртуального итога нужно перечислить источники данных. Источниками данных могут быть итоги (total) или другие вычисляемые группы (group). На источники данных можно накладывать фильтр (filter): так, в нашем примере по статье затрат мы можем судить, к доходам или расходам нужно отнести ту или иную проводку.
Обратите внимание на вычисляемую группу Outcome. В ней переменная Amount получает данные из двух итогов: из Затрат и Конвертации. Измерения итога Затраты (AgentID, CostItemID) автоматически отображаются на одноименные измерения виртуального итога. Однако в итоге Конвертация этих измерений нет: при конвертации валюты никакие контрагенты и статьи затрат не задействованы. Чтобы в нашем отчете курсовая разница показывалась как отдельная статья затрат, нужно явно указать код статьи затрат для всех проводок по итогу Конвертация. Для этого используется отображение измерения на значение (value):
value CostItemID: 81 |
Есть еще одна ситуация, когда может потребоваться отображение измерения: нужное измерение в итоге-источнике данных есть, но называется по-другому. Или нужного измерения нет, но есть ссылающийся на него справочник. В этих случаях можно воспользоваться отображением измерения на другое измерение (dim):
dim OfficeID: StoreID.OfficeID |
В нашем простом виртуальном итоге необходимости для таких отображений нет.