Кто-нить, расскажите, плиззз, про группировку в галке: есть ли она там вообще, как реализуется.
Зпасибо.
ГРУППИРОВКА???
Модераторы: m0p3e, edward_K, Модераторы
ГРУППИРОВКА???
Viva la resistans
-
- Слесарь-системщик
- Сообщения: 304
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: р.Беларусь, Унитарное предприятие "ТОП СОФТ"
- Контактная информация:
Обленился я как-то искать временную таблицу и написал Иерархатор. Может и вам пригодится... Результат применения механизма построения составной иерархии можете увидеть в функции печати табелей учета рабочего времени, в табельных отчетах "Контроль сверхурочных работ" и "Баланс отработанного времени", в функции формирования бухсправок по результатам расчета зарплаты (с использованием ТХО).
файл ICompoundHierarchy.obj
Файл ISummable.obj
Файл CompoundHierarchy.vih
[/quote]
файл ICompoundHierarchy.obj
Код: Выделить всё
//------------------------------------------------------------------------------
// (с) корпорация Галактика
// Галактика 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
Виталий