Bom dia, pessoal... estou com um grande problema no Rave Reports e preciso muito da ajuda de vocês..
Espero que possam ler e tentar me ajudar...Vamos lá..
Eu tenho um relatório que contém as entradas e saídas de valores do caixa de um supermercado..
Uso uma TQuery ligada ao DataSetConnection do Rave para fazer a busca e gerar o relatório.
Para fazer as somas necessárias, eu utilizo parâmetros...Então, cada DataText do Rave recebe um parâmetro, em que seu valor é calculado no Delphi..
Até aí tudo bem...
Mas agora vem a encrenca... Eu preciso calcular a soma de cada cartão existente no resultado da busca que gerou o relatório..
Exemplo: Na tabela existem vários registro e alguns com o campo CAIHIS com valor "PGTO CARTAO VISA", outros com valor "PGTO CARTAO MASTERCARD" e assim por diante...
Se eu faço uma busca, gero um relatorio e nele aparecem registros apenas com "PGTO CARTAO VISA", vou precisar calcular a soma dos valores destes registros.
OU SEJA, NÃO POSSO CRIAR UM PARÂMETRO PARA O VALOR DE CADA CARTÃO, POIS NÃO SEI QUE CARTÕES SERÃO CADASTRADOS NO CAMPO CAIHIS DESTA TABELA. NÃO POSSO PRÉ-DETERMINAR QUANTOS DATATEXT TERÁ MEU RELATÓRIO, POIS VAI DEPENDER DO RESULTADO DA CONSULTA.
Como vou fazer, então, pra capturar cada diferente cartão, pegar seu valor, fazer a soma e jogar no relatório???
Só sei fazer isso com parâmetros, mas neste caso não estou vendo como.
Vou colocar aqui o código que uso para gerar um relatório..
procedure TfrmRelatorio.btnGerarRelClick(Sender: TObject);
var
somaEntDin, somaEntChe, somaEntPre, somaEntCar,
somaEntOut, somaEntAbe, somaEntSan, somaEntSup,
somaSaiDin, somaSaiChe, somaSaiPre, somaSaiCar,
somaSaiOut, somaSaiAbe, somaSaiSan, somaSaiSup,
somaEntTot, somaSaiTot, totalGeral,
i: integer;
begin
dm.RvPrjCaixa.SetParam('DataIni',txtDataIni.Text);
dm.RvPrjCaixa.SetParam('DataFin',txtDataFin.Text);
dm.RvPrjCaixa.SetParam('HoraIni',txtHoraIni.Text);
dm.RvPrjCaixa.SetParam('HoraFin',txtHoraFin.Text);
if txtNumCaixa.Text <> '' then
begin
with dm.QueryRelCaixa do
begin
Close;
SQL.Clear;
SQL.Add('SELECT * FROM ESTACAI.dbf');
SQL.Add('WHERE CAIDAT BETWEEN :DataI AND :DataF');
SQL.Add('AND CAIHOR BETWEEN :HoraI AND :HoraF');
SQL.Add('AND CAINCX = :Ncaixa');
SQL.Add('AND CAIFLA = ""');
ParamByName('DataI') .AsDateTime := StrToDateTime(txtDataIni.Text);
ParamByName('DataF') .AsDateTime := StrToDateTime(txtDataFin.Text);
ParamByName('HoraI') .AsString := txtHoraIni.Text;
ParamByName('HoraF') .AsString := txtHoraFin.Text;
ParamByName('Ncaixa').AsString := txtNumCaixa.Text;
Open;
// ########## ========== SOMAS SUBTOTAIS ========== ########## //
somaEntDin:=0; somaEntChe:=0; somaEntPre:=0; somaEntCar:=0;
somaEntOut:=0; somaEntAbe:=0; somaEntSan:=0; somaEntSup:=0;
somaSaiDin:=0; somaSaiChe:=0; somaSaiPre:=0; somaSaiCar:=0;
somaSaiOut:=0; somaSaiAbe:=0; somaSaiSan:=0; somaSaiSup:=0;
somaEntTot:=0; somaSaiTot:=0; totalGeral:=0;
dm.QueryRelCaixa.First;
For i:=0 to dm.QueryRelCaixa.recordCount-1 do
begin
if dm.QueryRelCaixa.FieldByName('CAIDIN').AsString = 'X' then
begin
somaEntDin := somaEntDin + dm.QueryRelCaixa.FieldByName('CAIENT').AsFloat;
somaSaiDin := somaSaiDin + dm.QueryRelCaixa.FieldByName('CAISAI').AsFloat;
end;
if dm.QueryRelCaixa.FieldByName('CAICHE').AsString = 'X' then
begin
somaEntChe := somaEntChe + dm.QueryRelCaixa.FieldByName('CAIENT').AsFloat;
somaSaiChe := somaSaiChe + dm.QueryRelCaixa.FieldByName('CAISAI').AsFloat;
end;
if dm.QueryRelCaixa.FieldByName('CAIPRE').AsString = 'X' then
begin
somaEntPre := somaEntPre + dm.QueryRelCaixa.FieldByName('CAIENT').AsFloat;
somaSaiPre := somaSaiPre + dm.QueryRelCaixa.FieldByName('CAISAI').AsFloat;
end;
if dm.QueryRelCaixa.FieldByName('CAICAR').AsString = 'X' then
begin
somaEntCar := somaEntCar + dm.QueryRelCaixa.FieldByName('CAIENT').AsFloat;
somaSaiCar := somaSaiCar + dm.QueryRelCaixa.FieldByName('CAISAI').AsFloat;
end;
if dm.QueryRelCaixa.FieldByName('CAIOUT').AsString = 'X' then
begin
somaEntOut := somaEntOut + dm.QueryRelCaixa.FieldByName('CAIENT').AsFloat;
somaSaiOut := somaSaiOut + dm.QueryRelCaixa.FieldByName('CAISAI').AsFloat;
end;
if dm.QueryRelCaixa.FieldByName('CAIABE').AsString = 'X' then
begin
somaEntAbe := somaEntAbe + dm.QueryRelCaixa.FieldByName('CAIENT').AsFloat;
somaSaiAbe := somaSaiAbe + dm.QueryRelCaixa.FieldByName('CAISAI').AsFloat;
end;
if dm.QueryRelCaixa.FieldByName('CAISAN').AsString = 'X' then
begin
somaEntSan := somaEntSan + dm.QueryRelCaixa.FieldByName('CAIENT').AsFloat;
somaSaiSan := somaSaiSan + dm.QueryRelCaixa.FieldByName('CAISAI').AsFloat;
end;
if dm.QueryRelCaixa.FieldByName('CAISUP').AsString = 'X' then
begin
somaEntSup := somaEntSup + dm.QueryRelCaixa.FieldByName('CAIENT').AsFloat;
somaSaiSup := somaSaiSup + dm.QueryRelCaixa.FieldByName('CAISAI').AsFloat;
end;
dm.QueryRelCaixa.Next;
end;
somaEntTot := somaEntDin + somaEntChe + somaEntPre + somaEntCar +
somaEntOut + somaEntAbe + somaEntSan + somaEntSup;
somaSaiTot := somaSaiDin + somaSaiChe + somaSaiPre + somaSaiCar +
somaSaiOut + somaSaiAbe + somaSaiSan + somaSaiSup;
totalGeral := (somaEntDin + somaEntChe + somaEntPre + somaEntCar +
somaEntOut + somaEntAbe + somaEntSan + somaEntSup) -
(somaSaiDin + somaSaiChe + somaSaiPre + somaSaiCar +
somaSaiOut + somaSaiAbe + somaSaiSan + somaSaiSup);
dm.RvPrjCaixa.SetParam('SomaEntDin',FloatToStr(somaEntDin));
dm.RvPrjCaixa.SetParam('SomaEntChe',FloatToStr(somaEntChe));
dm.RvPrjCaixa.SetParam('SomaEntPre',FloatToStr(somaEntPre));
dm.RvPrjCaixa.SetParam('SomaEntCar',FloatToStr(somaEntCar));
dm.RvPrjCaixa.SetParam('SomaEntOut',FloatToStr(somaEntOut));
dm.RvPrjCaixa.SetParam('SomaEntAbe',FloatToStr(somaEntAbe));
dm.RvPrjCaixa.SetParam('SomaEntSan',FloatToStr(somaEntSan));
dm.RvPrjCaixa.SetParam('SomaEntSup',FloatToStr(somaEntSup));
dm.RvPrjCaixa.SetParam('SomaSaiDin',FloatToStr(somaSaiDin));
dm.RvPrjCaixa.SetParam('SomaSaiChe',FloatToStr(somaSaiChe));
dm.RvPrjCaixa.SetParam('SomaSaiPre',FloatToStr(somaSaiPre));
dm.RvPrjCaixa.SetParam('SomaSaiCar',FloatToStr(somaSaiCar));
dm.RvPrjCaixa.SetParam('SomaSaiOut',FloatToStr(somaSaiOut));
dm.RvPrjCaixa.SetParam('SomaSaiAbe',FloatToStr(somaSaiAbe));
dm.RvPrjCaixa.SetParam('SomaSaiSan',FloatToStr(somaSaiSan));
dm.RvPrjCaixa.SetParam('SomaSaiSup',FloatToStr(somaSaiSup));
dm.RvPrjCaixa.SetParam('SomaEntTot',FloatToStr(somaEntTot));
dm.RvPrjCaixa.SetParam('SomaSaiTot',FloatToStr(somaSaiTot));
dm.RvPrjCaixa.SetParam('TotalGeral',FloatToStr(totalGeral));
// ########## ===================================== ########## //
end;
end;
end;
Pergunta
Gabriel Cabral
Bom dia, pessoal... estou com um grande problema no Rave Reports e preciso muito da ajuda de vocês..
Espero que possam ler e tentar me ajudar...Vamos lá..
Eu tenho um relatório que contém as entradas e saídas de valores do caixa de um supermercado..
Uso uma TQuery ligada ao DataSetConnection do Rave para fazer a busca e gerar o relatório.
Para fazer as somas necessárias, eu utilizo parâmetros...Então, cada DataText do Rave recebe um parâmetro, em que seu valor é calculado no Delphi..
Até aí tudo bem...
Mas agora vem a encrenca... Eu preciso calcular a soma de cada cartão existente no resultado da busca que gerou o relatório..
Exemplo: Na tabela existem vários registro e alguns com o campo CAIHIS com valor "PGTO CARTAO VISA", outros com valor "PGTO CARTAO MASTERCARD" e assim por diante...
Se eu faço uma busca, gero um relatorio e nele aparecem registros apenas com "PGTO CARTAO VISA", vou precisar calcular a soma dos valores destes registros.
OU SEJA, NÃO POSSO CRIAR UM PARÂMETRO PARA O VALOR DE CADA CARTÃO, POIS NÃO SEI QUE CARTÕES SERÃO CADASTRADOS NO CAMPO CAIHIS DESTA TABELA. NÃO POSSO PRÉ-DETERMINAR QUANTOS DATATEXT TERÁ MEU RELATÓRIO, POIS VAI DEPENDER DO RESULTADO DA CONSULTA.
Como vou fazer, então, pra capturar cada diferente cartão, pegar seu valor, fazer a soma e jogar no relatório???
Só sei fazer isso com parâmetros, mas neste caso não estou vendo como.
Vou colocar aqui o código que uso para gerar um relatório..
Espero muito mesmo que possam me ajudar.
Muito obrigado.
Editado por Gabriel CabralLink para o comentário
Compartilhar em outros sites
3 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.