ГРУППИРОВКА???
Добавлено: 08 сен 2006, 11:28
Кто-нить, расскажите, плиззз, про группировку в галке: есть ли она там вообще, как реализуется.
Зпасибо.
Зпасибо.
Обсуждение различных вопросов, связанных с сопровождением, администрированием и программированием
https://asu.tyumbit.ru/
Код: Выделить всё
//------------------------------------------------------------------------------
// (с) корпорация Галактика
// Галактика 7.12 - Заработная плата
// obj-интерфейс "Составная иерархия"
//------------------------------------------------------------------------------
/*
Наскучило раз за разом писать громоздкий код для группировки данных при
построении различного рода отчетов? Воспользуйтесь механизмом "составной
иерархии", позволяющим хранить и обходить (с сортировкой по определенному
пользователем ключу) иерархию зависимостей между различными уровнями
группировки исходных данных, а так же накапливать связанные с узлами иерархии
определяемую пользователем информацию (итоги).
*/
#ifndef _ICOMPOUNDHIERARCHY_OBJ_INCLUDED_
#define _ICOMPOUNDHIERARCHY_OBJ_INCLUDED_
#include ISummable.obj
#ifdef ComponentVersion
#component "z_zar"
#end
objinterface ICompoundHierarchy;
// на этапе обхода иерархии
// обработать сущность
event procedure ProcessEntity(Entity: comp; Code: word; Depth: integer);
// обработать элемент данных, привязанных к сущности
event procedure ProcessData(Entity: comp; Code: word; Depth: integer; Data: comp);
// обработать итоги, связанные с сущностью
event procedure ProcessTotal(Entity: comp; Code: word; Depth: integer; Total: ISummable);
// построение иерархии
// вставить узел в иерархию
function Ins(ParentNode: comp; Entity: comp; Code: word): comp;
// вернуть естественного родителя сущности
event function ParentOf(Entity: comp; Code: word): comp;
// вернуть ключевое значение сущности (для сортировки)
event function KeyOf(Entity: comp; Code: word): string;
// связать ссылку на данные с узлом иерархии
procedure InsData(Node: comp; Data: comp; Key: string);
// накопить информацию связанную с текущим узлом
procedure Accumulate(Sum: ISummable);
// выполнить обход иерархии в глубину
procedure LoopHierarchy(VisualHeader: string);
// вернуть nrec текущего узла
function GetCurrentNode: comp;
// вернуть накопленную информацию, ассоциированную с текущим узлом
function GetCurrentTotal: ISummable;
// очистить иерархию
procedure Clear;
end;
//------------------------------------------------------------------------------
// методы для выборки информации о состоянии стека обхода составной иерархии
//------------------------------------------------------------------------------
objinterface ICompoundHierarchyStack;
// сущность на уровне Depth
function GetEntity(Depth: integer; var Value: comp): boolean;
// код сущности на уровне Depth
function GetCode(Depth: integer; var Value: word): boolean;
// ассоциированные с сущностью уровня Depth итоги
function GetTotal(Depth: integer; var Value: ISummable): boolean;
// ссылка на узел составной иерархии на уровне Depth
function GetNode(Depth: integer; var Value: comp): boolean;
end;
// для поддержки итогов
objinterface ICompoundHierarchyTotals;
// произвести подсуммирование итогов от листьев к вышестоящим узлам и далее
// вверх по иерархии, но не выше глубины MinDepth
function GatherTotals(MinDepth: integer): boolean;
// (для поддержки хранимых вне иерархатора итогов)
// подсуммировать итоги находящегося на уровне Depth узла к итогам узла на
// уровне Depth - 1
event procedure OnSumUp(Depth: integer);
end;
#end
Код: Выделить всё
//------------------------------------------------------------------------------
// (с) корпорация Галактика
// Галактика 7.12 - Заработная плата
// Описание служебного obj-интерфейса, используемого построителем составной
// иерархии (ICompoundHierarchy) для накопления связанной с узлами иерархии
// суммарной информации
//------------------------------------------------------------------------------
#ifndef _ISUMMABLE_OBJ_INCLUDED_
#define _ISUMMABLE_OBJ_INCLUDED_
#ifdef ComponentVersion
#component "z_zar"
#end
objinterface ISummable; forward;
objinterface ISummable;
// выполнить сложение данных объекта с данными объекта Addend
procedure Add(Addend: ISummable);
// вернуть ссылку на чистый объект
function CreateEmpty: ISummable;
end;
#end
Код: Выделить всё
//------------------------------------------------------------------------------
// (с) корпорация Галактика
// Галактика 7.12 - Заработная плата
// декларация стандартной реализации obj-интерфейса "Составная иерархия"
//------------------------------------------------------------------------------
#ifndef _COMPOUNDHIERARCHY_VIH_INCLUDED_
#define _COMPOUNDHIERARCHY_VIH_INCLUDED_
#include ICompoundHierarchy.obj // декларация ICompoundHierarchy
#ifdef ComponentVersion
#component "z_zar"
#end
vipinterface CompoundHierarchy
implements ICompoundHierarchy, ICompoundHierarchyStack, ICompoundHierarchyTotals
#ifdef ATL51
licensed(free)
#end
;
#end