Страница 1 из 1

ГРУППИРОВКА???

Добавлено: 08 сен 2006, 11:28
Saltava
Кто-нить, расскажите, плиззз, про группировку в галке: есть ли она там вообще, как реализуется.
Зпасибо. :)

Добавлено: 08 сен 2006, 13:00
san
в 8-ке должны сделать

Добавлено: 16 сен 2006, 11:50
Den_Is
да сколько уже обещают эту восьмерку. ждать можно долго а работать надо уже сейчас. тоже сталкивался с этой проблеммой. приходится извращаться с временными таблицами.

Добавлено: 24 сен 2006, 03:12
Screw
Обленился я как-то искать временную таблицу и написал Иерархатор. Может и вам пригодится... Результат применения механизма построения составной иерархии можете увидеть в функции печати табелей учета рабочего времени, в табельных отчетах "Контроль сверхурочных работ" и "Баланс отработанного времени", в функции формирования бухсправок по результатам расчета зарплаты (с использованием ТХО).

файл 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
Файл ISummable.obj

Код: Выделить всё

//------------------------------------------------------------------------------
//                                                      (с) корпорация Галактика
// Галактика 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
Файл CompoundHierarchy.vih

Код: Выделить всё

//------------------------------------------------------------------------------
//                                                      (с) корпорация Галактика
// Галактика 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
[/quote]