Описание итогов хранится в схеме ядра базы данных в следующих таблицах:

TOTALS – итоги;

TOTAL_DIMENSIONS – измерения итогов;

TOTAL_VARIABLES – переменные итогов;

TOTAL_DRIVERS – драйверы итогов.

Модель данных выглядит следующим образом:

Totals_Tables

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

TB_tablename оперативная сводная таблица (balance table), в которой для каждого набора измерений хранится только один набор сводных значений переменных;

TR_tablename оперативная детализированная таблица (transactions table), в которой хранятся все движения. Просуммировав их переменные для определенного набора измерений можно получить сводное значение, которое хранится в TB_tablename;

TD_tablename аналитическая детализированная таблица (detailed transactions table), в которой хранятся те же движения, что и в TR_tablename, только уже рассчитанные. Заполняется по результату расчета итогов;

TT_tablename аналитическая сводная таблица (detailed transactions balance table), в которой для каждого набора измерений хранится только один набор сводных значений переменных из таблицы TD_tablename, не используется в прикладном коде;

TM_tablename временная таблица, зарезервированная и используемая ядром при расчете итогов, не должна использоваться в прикладном коде.

table В таблице TOTALS хранятся атрибуты, которые описывают итог и его таблицы в прикладной схеме базы данных:

NAME – название итога, определяет название генерируемого класса;

CAPTION – отображаемое в экранных формах название итога;

BASE_TABLE_NAME – название оперативной детализированной (RM) таблицы итога в прикладной схеме базы данных.
При создании итога прикладной разработчик задает только одно общее название его таблиц в прикладной схеме базы данных – TABLE_NAME. На его основании добавлением соответствующего префикса будут автоматически определены названия всех пяти таблиц итога;

IS_DOUBLE_ENTRY – флаг, указывающий балансовый ли итог. Если он установлен в значение true, при внесении изменений в этот итог будет применяется правило двойной записи;

DRIVER_OBJ_ID (FK) – драйвер итога;

HANDLER_OBJ_ID (FK) – обработчик событий для этого итога, создается при необходимости.

table В таблице TOTAL_DIMENSIONS хранятся описания измерений итога – по сути, поля его таблиц:

NAME – название измерения, определяет название свойства генерируемого класса;

CAPTION – отображаемое в экранных формах название измерения;

TOTAL_OBJ_ID (FK)ссылка на итог, которому принадлежит измерение, заполняется автоматически;

COLUMN_NAME – название поля таблицы в прикладной схеме базы данных;

REF_DICT_OBJ_ID (FK) – ссылка на справочник, элементы которого являются измерением итога;

IS_OPERATIONAL – флаг, указывающий является ли измерение оперативным. Если он установлен в значение true, при записи данных в таблицу итога значение измерения всегда будет заполнено. Для аналитического измерения (флаг установлен в значение false) значение может быть пропущено и заполнено только при расчете итогов.

table В таблице TOTAL_VARIABLES хранятся описания переменных итога –  по сути, поля его таблиц:

NAME – название переменной, определяет название свойства генерируемого класса;

CAPTION – отображаемое в экранных формах название переменной;

TOTAL_OBJ_ID (FK)ссылка на итог, которому принадлежит переменная, заполняется автоматически;

COLUMN_NAME – название поля таблицы в прикладной схеме базы данных;

IS_OPERATIONAL – флаг, указывающий является ли переменная оперативной. Если он установлен в значение true, при записи данных в таблицу итога значение переменной всегда будет заполнено. Для аналитической переменной (флаг установлен в значение false) значение может быть пропущено и заполнено только при расчете итогов.

Все создаваемые переменные итогов имеют тип decimal.

Кроме измерений и переменных, описываемых прикладным разработчиком, у каждого итога существуют еще и предопределенные разработчиками системы свойства:

DELTA_NO – номер движения;

DELTA_SUB_NO – дополнительный номер движения, используется при записи рассчитанных движений, которые могут быть разбиты на несколько составляющих;

PAIR_TOTAL_ID (FK) – ссылка на другой итог, в который было внесено изменение этим же движением в случае применения правила двойной записи;

HANDLER_TOTAL_OBJ_ID (FK) – обработчик проведения, который сгенерировал это движение;

VERSION_ID (FK) – версия обработчика проведения;

LOT_NO – номер партии, формируется на основании даты проведения документа, номера документа и номер движения;

DOCUMENT_ID (FK) – ссылка на документ, породивший движение;

DT_PROCESS – дата проведения этого документа.

В приведенной ниже таблице указано вхождение описанных предопределенных свойств в таблицы итога в прикладной схеме базы данных:

поле таблицы

вхождение поля в таблицы итога

TR

TB

TD

TT

DELTA_NO

+

 

+

 

DELTA_SUB_NO

 

 

+

 

LOT_NO

 

 

+

+

DOCUMENT_ID (FK)

+

 

+

 

DT_PROCESS

+

 

+

 

PAIR_TOTAL_ID (FK)

+

 

+

 

HANDLER_TOTAL_OBJ_ID (FK)

+

 

 

 

VERSION_ID (FK)

+

 

 

 

output В результате заполнения всех обязательных атрибутов и свойств в прикладной схеме базы данных будут созданы пять новых таблиц TR_TABLE_NAME, TB_TABLE_NAME, TD_TABLE_NAME и TT_TABLE_NAME с обязательными полями, согласно приведенной выше таблице, плюс полями COLUMN_NAME измерений и переменных, которые будут использоваться для хранения данных нового итога.

35_example

Рассмотрим на примере создание итога "Остатки на складах".

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

Totals_Example1

 

Totals_Example2

table В таблице TOTAL_DRIVERS хранятся описания драйверов итогов:

NAME – название драйвера итога;

DESCRIPTION – отображаемое в экранных формах название драйвера;

HANDLER_OBJ_ID (FK) – обработчик драйвера.