Вопрос про группировку

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Ответить
Atim
Сообщения: 19
Зарегистрирован: 01 окт 2007, 08:41
Откуда: Магнитогорск

Вопрос про группировку

Сообщение Atim »

Нужно организовать группировку по 2 уровням Подразделения->МОЛ
и посчитать итоговые суммы Имеется след. временная таблица

table struct SFO_KMol
(
PodrN:string,
MolN:string,
NumTr:string,
FIO:string,
TabNum:string,
NameMC:string,
barMc:string,
PriceM:double,
Edz_mc:string,
Kolmc:double,
DateEk:string,
SrokSl:string,
Date_Vb:string
)
with index
(
SFO_KMOL01=PodrN+MolN,
);

Как правильно организовать циклы и посчитать итоговые суммы (по подразделениям и Мол) в Slk отчете?
k_vit
Постоянный обитатель
Сообщения: 143
Зарегистрирован: 09 авг 2006, 16:40
Откуда: Россия, Тюмень, ОАО "Сибирский Научно-Аналитический Центр"

Сообщение k_vit »

Слишком много строк пишете во временную таблицу, лучше писать ссылки на Мол и Подр.

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

table struct SFO_KMol 
( 
  Podr  :comp, 
  Mol    :comp
 .....
)
with index
(
  SFO_KMOL01 = Podr+Mol
);
и написать напрмер ф-ию для группировки

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

.function InsMol(cPodr, cMol : comp; ...........) : boolean;
begin

 if _VIEW_.GetFirst SFO_KMol where ((cPodr == SFO_KMol.Podr and
                                                        cMol  == SFO_KMol.Mol)) <> tsOk then {
     // Тут вставляете все поля в SFO_KMol  
     InsMol := _VIEW_.insert current SFO_KMol = tsOk;
  }  else {
    //.. тут суммы сворачиваете
     InsMol := _VIEW_.update current SFO_KMol = tsOk;
  }
end.
Atim
Сообщения: 19
Зарегистрирован: 01 окт 2007, 08:41
Откуда: Магнитогорск

Сообщение Atim »

В slk-отчете пишу следующий код, группировка отрабатывает

.Var
OldPodr:string;
OldMol:string;
.EndVar
.begin
OldMol:='';
OldPodr:='';
Oitog:=0;
end.

.{Table 'v_SfoKMol' by Sfo_Kmol.PodrN,Sfo_Kmol.MolN;
.{?Internal; (OldPodr<>v_SfoKmol.Sfo_kmol.PodrN)
.begin
OldPodr:=v_SfoKmol.Sfo_kmol.PodrN;
OldMol:=v_SfoKmol.Sfo_kmol.MolN;
Set vp_SfoKmol.v_podr:=v_SfoKmol.Sfo_kmol.PodrN;
vp_SfoKmol.GetFirst Sfo_Kmol;
end.
.Fields
v_SfoKmol.Sfo_kmol.PodrN
v_SfoKmol.Sfo_kmol.MolN
.EndFields
Подразделение: ^
МОЛ: ^
.}
.begin
Oitog:=Oitog+v_SfoKmol.Sfo_Kmol.Kolmc; // общая сумма по отчету
end.
.{?Internal; (OldMol<>v_SfoKmol.Sfo_kmol.MolN) // если 2 МОЛа на 1 подразделении
.begin
ItogKolM:=0;
OldMol:=v_SfoKmol.Sfo_kmol.MolN;
Set vm_SfoKmol.v_Mol:=v_SfoKmol.Sfo_kmol.MolN;
vm_SfoKmol.GetFirst Sfo_Kmol;
end.
.Fields
v_SfoKmol.Sfo_kmol.MolN
.EndFields
МОЛ: ^
.}
.begin
Cnt := Cnt + 1; // счетчик
end.
.Fields
Cnt
v_SfoKmol.Sfo_Kmol.NumTr
v_SfoKmol.Sfo_Kmol.Fio
v_SfoKmol.Sfo_Kmol.tabNum
v_SfoKmol.Sfo_Kmol.NameMc
v_SfoKmol.Sfo_Kmol.barMc
v_SfoKmol.Sfo_Kmol.PriceM
v_SfoKmol.Sfo_Kmol.Edz_mc
v_SfoKmol.Sfo_Kmol.Kolmc
v_SfoKmol.Sfo_Kmol.dateEk
v_SfoKmol.Sfo_Kmol.SrokSl
v_SfoKmol.Sfo_Kmol.Date_Vb
.endFields
^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^
.}

Как посчитать итоговые суммы по МОЛ. по подразделению ?
Atim
Сообщения: 19
Зарегистрирован: 01 окт 2007, 08:41
Откуда: Магнитогорск

Сообщение Atim »

Спасибо всем Сгрупировал и посчитал Итоги по МОЛ и подразделениям
Ответить