Rl Group do Fortes Report agrupando de maneira estranha o primeiro registro do relatório no Delphi Xe2

Delphi

Firebird

23/04/2016

Bem eu preciso fazer um relatório onde os filtros são montados em tempo de execução, dentre eles são
-->Município: Inicial/Final, Omitir, Selecionados e todos eles
-->Estado: Inicial/Final, Omitir, Selecionados e todos eles
-->Rota: Inicial/Final, Omitir, Selecionados e todos eles
-->Endereço: Com ou Sem
-->Mostrar: Razao Social ou Nome Fantasia
-->Status: Aberto, Fechado e Todos
-->Agrupar: Municipio, Rota e Estado
O problema está no agrupar do relatório no qual eu estou fazendo no Fortes Report com o componente Rl Group, se eu escolher para pesquisar todos ou omitir, ele pesquisa sem erro nenhum, porém se eu escolher por seleção ou inicial/final, ele agrupa um filtro separado e depois em baixo o mesmo filtro da maneira certa, e segue tudo correto até o fim do relatório, eu gostaria muuiiiito que vocês me ajudassem pois já estou com esse serviço atrasado e estou quase ficando louco... segue o select da classe DAO do relatório e o evento before print.

---------CLASSE DAO----------
pPersistencia.IniciaTransacao;
pPersistencia.Query.SQL.Add('SELECT');
pPersistencia.Query.SQL.Add(' clt.cod_cli,');
pPersistencia.Query.SQL.Add(' clt.estres_cli,');
pPersistencia.Query.SQL.Add(' clt.cidres_cli,');
pPersistencia.Query.SQL.Add(' clt.cod_con,');
pPersistencia.Query.SQL.Add(' clt.nascimento_cli,');
pPersistencia.Query.SQL.Add(' clt.datacadastro_cli,');
pPersistencia.Query.SQL.Add(' clt.celular_cli,');

if pRELATORIO.FiltroEndereco = 0 then
begin
pPersistencia.Query.SQL.Add(' clt.baires_cli,');
pPersistencia.Query.SQL.Add(' clt.endres_cli,');
end;

case pRELATORIO.Agrupar of
0: // Municipio
begin
pPersistencia.Query.SQL.Add(' cid.descricao,');
end;

1: // Rota
begin
pPersistencia.Query.SQL.Add(' r.nome_rota,');
end;

2: // Estado
begin
pPersistencia.Query.SQL.Add(' es.cod_est,');
end;

end;

if pRELATORIO.FiltroNome = 0 then
begin
pPersistencia.Query.SQL.Add(' clt.nome_cli,');
end
else
begin
pPersistencia.Query.SQL.Add(' clt.nome_fantasia,');
end;

pPersistencia.Query.SQL.Add(' es.nome_est,');

pPersistencia.Query.SQL.Add(' r.cod_rota,');

pPersistencia.Query.SQL.Add(' cid.codigo_municipio');

pPersistencia.Query.SQL.Add('FROM cliente clt');

pPersistencia.Query.SQL.Add(' INNER JOIN municipios cid');
pPersistencia.Query.SQL.Add('ON clt.codigo_ibge = cid.codigo_municipio');

pPersistencia.Query.SQL.Add(' LEFT JOIN rotas r');
pPersistencia.Query.SQL.Add('ON clt.rota_cli = r.cod_rota');

pPersistencia.Query.SQL.Add(' INNER JOIN estados es');
pPersistencia.Query.SQL.Add('ON clt.estres_cli = es.sigla_est');

pPersistencia.Query.SQL.Add('WHERE 0=0');

case pRELATORIO.TipoFiltroMunicipio of

0: // Inicial/Final
begin
pPersistencia.Query.SQL.Add(' AND cid.codigo_municipio BETWEEN :pCIDINI AND :pCIDFIN');
pPersistencia.setParametro('pCIDINI',
(Copy(pRELATORIO.FiltroMunicipio[0], 1, Pos(',', pRELATORIO.FiltroMunicipio[0]) - 1)));
pPersistencia.setParametro('pCIDFIN', pRELATORIO.FiltroMunicipio[1]);
end;

1: // Por Seleção
begin
pPersistencia.Query.SQL.Add(' AND cid.codigo_municipio IN (' + pRELATORIO.FiltroMunicipio.Text + ')');
end;

2: // Omitir
begin
pPersistencia.Query.SQL.Add(' AND cid.codigo_municipio NOT IN (' + pRELATORIO.FiltroMunicipio.Text + ')');
end;

end;

case pRELATORIO.TipoFiltroRota of
0: // Inicial/Final
begin
pPersistencia.Query.SQL.Add(' AND r.cod_rota BETWEEN :pROTAINI AND :pROTAFIN');
pPersistencia.setParametro('pROTAINI',
(Copy(pRELATORIO.FiltroRota[0], 1, Pos(',', pRELATORIO.FiltroRota[0]) - 1)));
pPersistencia.setParametro('pROTAFIN', pRELATORIO.FiltroRota[1]);
end;

1: // Por Seleção
begin
pPersistencia.Query.SQL.Add(' AND r.cod_rota IN (' + pRELATORIO.FiltroRota.Text + ')');
end;

2: // Omitir
begin
pPersistencia.Query.SQL.Add(' AND r.cod_rota NOT IN (' + pRELATORIO.FiltroRota.Text + ')');
end;
end;

case pRELATORIO.TipoFiltroEstado of
0: // Inicial/Final
begin
pPersistencia.Query.SQL.Add(' AND es.cod_est BETWEEN :pESTINI AND :pESTFIN');
pPersistencia.setParametro('pESTINI',
(Copy(pRELATORIO.FiltroEstado[0], 1, Pos(',', pRELATORIO.FiltroEstado[0]) - 1)));
pPersistencia.setParametro('pESTFIN', pRELATORIO.FiltroEstado[1]);
end;

1: // Por Seleção
begin
pPersistencia.Query.SQL.Add(' AND es.cod_est IN (' + pRELATORIO.FiltroEstado.Text + ')');
end;

2: // Omitir
begin
pPersistencia.Query.SQL.Add(' AND es.cod_est NOT IN (' + pRELATORIO.FiltroEstado.Text + ')');
end;
end;

case pRELATORIO.Status_Clt of
0:
begin
pPersistencia.Query.SQL.Add(' AND clt.ativo_cli =' + QuotedStr('N'));
end;
1:
begin
pPersistencia.Query.SQL.Add(' AND clt.ativo_cli =' + QuotedStr('S'));
end;
end;


case pRELATORIO.Agrupar of

0: // Municipio
begin
pPersistencia.Query.SQL.Add(' ORDER BY cid.descricao ASC,');
end;

1: // Rota
begin
pPersistencia.Query.SQL.Add(' ORDER BY r.cod_rota ASC,');
end;

2: // Estado
begin
pPersistencia.Query.SQL.Add(' ORDER BY es.cod_est ASC,');
end;

end;

if pRELATORIO.OrdernarPorNomeOrCodigo = 0 then
begin

if pRELATORIO.FiltroNome = 0 then
begin
pPersistencia.Query.SQL.Add(' clt.nome_cli');
end
else
begin
pPersistencia.Query.SQL.Add(' clt.nome_fantasia');
end;

end
else
begin
pPersistencia.Query.SQL.Add(' clt.cod_cli');
end;

pPersistencia.Query.Open;

pPersistencia.Transacao.CommitRetaining;

Result := True;
(PS- A SET PARAMETRO É UM PARAM BY NAME COM OVERLOAD DE VÁRIOS TIPOS PRIMITOS)


--------------EVENTO BEFORE PRINT NA CLASSE DO RELATORIO-----------

case FRelatorio.Agrupar of
0: // Municipio
begin
RLGroup.DataFields := 'codigo_municipio';
RLDBTextGroup.DataField := 'descricao';
RLLabelUF.Visible := False;
RLDBTextUF.Visible := False;
end;

1: // Rota
begin
RLGroup.DataFields := 'cod_rota';
RLDBTextGroup.DataField := 'nome_rota';
end;

2: // Estado
begin
RLGroup.DataFields := 'cod_est';
RLDBTextGroup.DataField := 'nome_est';
RLLabelUF.Visible := False;
end;
end;


Ah sim, o banco de dados é firebird 2.1
Danillo Fernandes

Danillo Fernandes

Curtidas 0

Respostas

Danillo Fernandes

Danillo Fernandes

23/04/2016

Alguém?!
GOSTEI 0
POSTAR