Описание итогов хранится в схеме ядра базы данных в следующих таблицах:
•TOTALS – итоги;
•TOTAL_DIMENSIONS – измерения итогов;
•TOTAL_VARIABLES – переменные итогов;
•TOTAL_DRIVERS – драйверы итогов.
Модель данных выглядит следующим образом:
Прежде чем перейти к описанию итогов, еще раз остановимся на структуре их хранения (в первой главе она была подробно описана на примере). Каждый итог реализован с помощью пяти таблиц, две из которых оперативные, две аналитические и одна временная. В оперативные таблицы информация попадает сразу по факту записи движения в базу данных, в аналитические по результату расчета итогов. Различить таблицы можно по префиксам:
•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 – временная таблица, зарезервированная и используемая ядром при расчете итогов, не должна использоваться в прикладном коде.
В таблице TOTALS хранятся атрибуты, которые описывают итог и его таблицы в прикладной схеме базы данных:
•NAME – название итога, определяет название генерируемого класса;
•CAPTION – отображаемое в экранных формах название итога;
•BASE_TABLE_NAME – название оперативной детализированной (RM) таблицы итога в прикладной схеме базы данных.
При создании итога прикладной разработчик задает только одно общее название его таблиц в прикладной схеме базы данных – TABLE_NAME. На его основании добавлением соответствующего префикса будут автоматически определены названия всех пяти таблиц итога;
•IS_DOUBLE_ENTRY – флаг, указывающий балансовый ли итог. Если он установлен в значение true, при внесении изменений в этот итог будет применяется правило двойной записи;
•DRIVER_OBJ_ID (FK) – драйвер итога;
•HANDLER_OBJ_ID (FK) – обработчик событий для этого итога, создается при необходимости.
В таблице TOTAL_DIMENSIONS хранятся описания измерений итога – по сути, поля его таблиц:
•NAME – название измерения, определяет название свойства генерируемого класса;
•CAPTION – отображаемое в экранных формах название измерения;
•TOTAL_OBJ_ID (FK) – ссылка на итог, которому принадлежит измерение, заполняется автоматически;
•COLUMN_NAME – название поля таблицы в прикладной схеме базы данных;
•REF_DICT_OBJ_ID (FK) – ссылка на справочник, элементы которого являются измерением итога;
•IS_OPERATIONAL – флаг, указывающий является ли измерение оперативным. Если он установлен в значение true, при записи данных в таблицу итога значение измерения всегда будет заполнено. Для аналитического измерения (флаг установлен в значение false) значение может быть пропущено и заполнено только при расчете итогов.
В таблице 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) |
+ |
|
|
|
В результате заполнения всех обязательных атрибутов и свойств в прикладной схеме базы данных будут созданы пять новых таблиц TR_TABLE_NAME, TB_TABLE_NAME, TD_TABLE_NAME и TT_TABLE_NAME с обязательными полями, согласно приведенной выше таблице, плюс полями COLUMN_NAME измерений и переменных, которые будут использоваться для хранения данных нового итога.
Рассмотрим на примере создание итога "Остатки на складах". В результате описания атрибутов и свойств нового итога в схеме ядра, в прикладной схеме базы данных будут созданы 5 соответствующих таблиц:
|
В таблице TOTAL_DRIVERS хранятся описания драйверов итогов:
•NAME – название драйвера итога;
•DESCRIPTION – отображаемое в экранных формах название драйвера;
•HANDLER_OBJ_ID (FK) – обработчик драйвера.