Ir para conteúdo
Fórum Script Brasil
  • 0

Encrenca no Rave Reports


Gabriel Cabral

Pergunta

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;

Espero muito mesmo que possam me ajudar.

Muito obrigado.

Editado por Gabriel Cabral
Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

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);

Primeiro voce pode simplificar isso:

totalGeral := somaEntTot - somaSaiTot;

Então, cada DataText do Rave recebe um parâmetro, em que seu valor é calculado no Delphi..

Não estou com o Rave no momento, mas procure jogar o valor de cada variavel

somaEntDin, somaEntChe, somaEntPre, somaEntCar ... etc em um componente Label no Rave

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Então Jhonas... coloquei esse código aí que gera o relatório, só para mostrar como eu faço, se caso alguém quisesse ver para ajudar...

a questão que você me disse eu já faço... eu criei um label no rave para cada variavel que calcula a soma...

quanto a isso, tudo certo!

A questão é sobre o que eu falei do cartão... vamos supor que eu faça uma busca e o relatorio seja gerado assim:

___Data___ | _________Historico_________ | Valor Entrada | Valor Saída | Tipo de Pgto

06/08/2009 | PGTO CARTAO VISA___________|R$200,00____|__________|CARTÃO

06/08/2009 | PGTO CARTAO MASTERCARD____| ___________|R$40,00___ |CARTÃO

06/08/2009 | PGTO CARTAO MASTERCARD____|R$350,00____|__________|CARTÃO

06/08/2009 | PGTO CARTAO VISA___________| ___________| R$150,00__|CARTÃO

Então eu vou precisar de um label pra calcular a soma do registro que possui a substring VISA no campo CAIHIS [historico] e um outro label pra calcular a soma do registro que possui a substring MASTERCARD no campo CAIHIS [historico]

Neste caso vou precisar de dois labels... mas e se numa outra busca, só vier registros com VISA ??? Não vou precisar de um label.

E se vier registros com VISA, MASTERCARD, HIPERCARD, DINERS??? vou precisar de quatro labels...

e consequentemente, de 4 parametros..

Ou seja.. vai depender da busca... então não posso definir os parametros..

Como eu vou fazer???

Editado por Gabriel Cabral
Link para o comentário
Compartilhar em outros sites

  • 0

___Data___ | _________Historico_________ | Valor Entrada | Valor Saída | Tipo de Pgto

06/08/2009 | PGTO CARTAO VISA___________|R$200,00____|__________|CARTÃO

06/08/2009 | PGTO CARTAO MASTERCARD____| ___________|R$40,00___ |CARTÃO

06/08/2009 | PGTO CARTAO MASTERCARD____|R$350,00____|__________|CARTÃO

06/08/2009 | PGTO CARTAO VISA___________| ___________| R$150,00__|CARTÃO

Se esta saida for padrão ou seja se voce manter os campos que estão especificados ai... bastará montar a select para trazer todos os registros com cartões que tenham valores de entrada ou de saida ..

com relação ao calculo e a montagem deste relatorio, o ideal seria usar o evento OnNeedData do report pois daria para controlar individualmente cada registro

abraço

Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      651,9k
×
×
  • Criar Novo...