masygreen писал(а):Подкоректирую вопрос .. а как вывести само поле группировки (в случае с groupBy Gr01:table01._NrecFPCO это table01._NrecFPCO)??
Код: Выделить всё
_loop table01
{
groupBy Gr01:table01._NrecFPCO
{
}
logstrtofile('c:\1.txt',table01._NrecFPCO+'--'+Gr01.grSum(table01._s02));
}
в файле получается 1) - двиг суммы т.е.
должно быть
Подр1 25
Подр2 10
Подр3 15
..
а выходит сдвиг
Подр1 10
Подр2 15
..
во-первых, в Вашем примере по Подр1 сумма должна быть не 25, а 35
во-вторых, полный код Вы так и не привели, по приведенным фрагментам предположу, что у Вас сдвигается не сумма, а подразделение, т.к. когда отработал GroupBy - текущее подразделение уже де-факто следующее, его Вы и выводите вместе с суммами по группе предыдущего!
masygreen писал(а):Повторюсь .. если возможно то кусок рабочего кода .. а то в хелпе только схемы ..
пожалуйста, причем не кусок, а целиком корректно работающий интерфейс:
Код: Выделить всё
//--------------------------------------------------------------------------------------------------
Interface DemoGroupBy;
//--------------------------------------------------------------------------------------------------
Table Struct DemoTab
(
a : word
, b : word
)
with index
(
iDemoTab01 = a
);
//--------------------------------------------------------------------------------------------------
Create View
from
DemoTab
;
//--------------------------------------------------------------------------------------------------
Procedure AddRecord(a, b:word);
{
DemoTab.a := a;
DemoTab.b := b;
if insert current DemoTab <> tsOk
message('Error: record not inserted');
}
//--------------------------------------------------------------------------------------------------
HandleEvent
cmInit:
{
MTClear(#DemoTab, mfNormal); // аналог delete all
AddRecord(100, 1);
AddRecord(100, 2);
AddRecord(100, 3);
AddRecord(500, 10);
AddRecord(500, 20);
AddRecord(999, 555);
_loop DemoTab
{
var aa: word;
groupBy Gr1: DemoTab.a
{
aa := DemoTab.a;
logstrtofile('c:\DemoGroupBy.txt', string(DemoTab.a) + ' ' + string(DemoTab.b));
}
logstrtofile('c:\DemoGroupBy.txt', 'сумма значений b при a =' + string(aa) + ' равна ' + Gr1.grSum(DemoTab.b));
}
abort;
}
end; // HandeEvent
End. // interface
а вот результат (c:\DemoGroupBy.txt):
Код: Выделить всё
100 1
100 2
100 3
сумма значений b при a =100 равна 6
500 10
500 20
сумма значений b при a =500 равна 30
999 555
сумма значений b при a =999 равна 555