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

Responder a