3. TssComplexDataStorage

Предки: TssRootComplexDataStorage -> TssDataStorage .

Класс расширяет функциональность TssDataStorage, позволяя сохранять дополнительно:

При разбивке на группы данные на основе значений указанного поля (полей) разбиваются на группы (поддерживается многоуровневая группировка). При этом записи упорядочиваются согласно их принадлежности к группам. При построении записей в дерево записи упорядочиваются в порядке прямого обхода дерева.

Некоторые свойства TssComplexDataStorage:

СвойствоТипОписание
GroupKind[]TssGroupKindТип записи (см. ниже)
GroupLevel[]IntegerУровень группировки записи
RecordStatus[]TssRecordStatusИнформация об изменении записи
NodeStatus[]TssNodeStatusПризнак узла дерева – открыт/закрыт
TreeChildCount[]IntegerПризнак узла дерева – количество непосредственных подчиненных записей
TreeIsLastChild[]BooleanПризнак, что это последняя подчиненная запись внутри текущего узла
TreeLevel[]IntegerУровень вложенности в дерево для данной записи
TreeParentRecNo[]IntegerНомер родительской записи
TreeCycled[]BooleanПризнак, что для данной записи обнаружено зацикливание в дереве
TreeBroken[]BooleanПризнак, что для данной записи должна быть родительская запись, но она не найдена по значению внешнего ключа.
HaveTreeCyclesBooleanПризнак наличия зацикленных записей
HaveTreeBreaksBooleanПризнак наличия записей с ненайденными родительскими записями.
HaveGroupsBooleanДанные формировались с группами
HaveTreeBooleanДанные формировались в виде дерева
MaxGroupLevelIntegerКоличество уровней групп

При разбивке на группы и/или при наличии агрегатных функций в целом по всем записям, в TssComplexDataStorage помимо записей с данными присутствуют служебные записи, разбивающие данные на группы и, если указано, содержащие результаты агрегатных функций. Тип каждой записи указан в свойстве GroupKind[]. Варианты значений:

Общая схема группировки записей (если есть группировка уровня n):

LevelKindComment
0HeaderЗаголовок для total group, если есть total funcs
1..nHeaderЗаголовки групп от 1-го до n-го уровня
0RegularОбычные записи, будут обязательно (так как от них формируется заголовок и подвал группы)
n..kFooterПодвалы групп от n-го до k-го уровня (1<=k<=n), если есть функции для подвала (то есть подвалы не обязательны)
k..nHeaderЗаголовки групп от k-го до n-го уровня
0RegularОбычные записи, будут обязательно (так как от них формируется заголовок и подвал группы)
n..kFooterПодвалы групп от n-го до k-го уровня (1<=k<=n), если есть функции для подвала (то есть подвалы не обязательны)
...
0FooterПодвал для total group, если есть total funcs