Senhores, bom dia! Estou gerando um relatório que pega informações de uma tabela, e agrupa por local no relatório, estas informações são divididas em horários, por exemplo: Local 1 horario: 01:00 02:00 03:00 04:00 ...00:00 dia_1: 01 15 16 24 0 dia_2: 00 13 20 26 1 . . . dia_n:
Média: (total dos valores no horário / quant. dias); Até a parte de mostrar os valores por dia e horário agrupados por local sem problemas, usei o recursi TRLDetailGrid do Fortes Report, mas para somar estes valores e dividi-los pela quantidade de dias em uma banda tipo sumario, não achei recursos no Fortes, então a solução encontrada foi usar matriz e vetores, mas reconheço que não sou muito íntimo deste tipo de recurso, e apesar dos meus esforços, na última linha está acontecendo o erro "Invalid Pointer Operation". Segue o código da procedure para avaliação. Agradeço antecipadamente o auxílio recebido. procedure TfLstRelatPeriodo.rl1BeforePrint(Sender: TObject; var PrintIt: Boolean); var i, j, n: integer; mCont, mSoma: integer; mPont: array[0..23] of integer; mMatr: array of array of integer; begin mCont := StrToInt(FloatToStr(dmConsulta.cdsRelatPeriodo.RecordCount / 24)); dmConsulta.cdsRelatPeriodo.DisableControls; dmConsulta.cdsRelatPeriodo.First; SetLength(mMatr, mCont, 23); n := 1; for i:= 0 to mCont - 1 do for j:= 0 to 23 do begin dmConsulta.cdsRelatPeriodo.RecNo := n; mMatr[i,j] := dmConsulta.cdsRelatPeriodoAmbReg.Value; Inc(n); end; for i:= 0 to mCont- 1 do begin mSoma := 0; for j:= 0 to 23 do begin mSoma := mSoma + mMatr[i,j]; mPont[i] := mSoma ; end; end; rlbl1.Caption := FloatToStr(mPont[1] / mCont); rlbl2.Caption := FloatToStr(mPont[1] / mCont); rlbl3.Caption := FloatToStr(mPont[2] / mCont); rlbl4.Caption := FloatToStr(mPont[3] / mCont); rlbl5.Caption := FloatToStr(mPont[4] / mCont); rlbl6.Caption := FloatToStr(mPont[5] / mCont); rlbl7.Caption := FloatToStr(mPont[6] / mCont); rlbl8.Caption := FloatToStr(mPont[7] / mCont); rlbl9.Caption := FloatToStr(mPont[8] / mCont); rlbl10.Caption := FloatToStr(mPont[9] / mCont); rlbl11.Caption := FloatToStr(mPont[10] / mCont); rlbl12.Caption := FloatToStr(mPont[11] / mCont); rlbl13.Caption := FloatToStr(mPont[12] / mCont); rlbl14.Caption := FloatToStr(mPont[13] / mCont); rlbl15.Caption := FloatToStr(mPont[14] / mCont); rlbl16.Caption := FloatToStr(mPont[15] / mCont); rlbl17.Caption := FloatToStr(mPont[16] / mCont); rlbl18.Caption := FloatToStr(mPont[17] / mCont); rlbl19.Caption := FloatToStr(mPont[18] / mCont); rlbl20.Caption := FloatToStr(mPont[19] / mCont); rlbl21.Caption := FloatToStr(mPont[20] / mCont); rlbl22.Caption := FloatToStr(mPont[21] / mCont); rlbl23.Caption := FloatToStr(mPont[22] / mCont); rlbl24.Caption := FloatToStr(mPont[23] / mCont); dmConsulta.cdsRelatPeriodo.EnableControls; end; Fraterno abraço, Carlos