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

Somar Qrexpr No Quickreport


Eder

Pergunta

Ola...

Pessoal...eu tenho estes dois qrexpr do quick report

qrexp1 com esta expressão abaixo:

(SUM(query1.peso) * 1000) / SUM(query1.FreteKelTotal)

qrexp2 com esta expressão abaixo:

(SUM(query1.peso) * 1000) / SUM(query1.FreteRed)

até aqui tudo bem...eles me trazem o valor esperado

o problema é agora...

eu preciso diminuir o valor do qrexp2 - o valor do qrexp1

Tentei assim na expressão:

sum(qrexpr2) - sum(qrexpr1)

mas o resultado sai em branco

alguém poderia me ajudar??

Grato

Link para o comentário
Compartilhar em outros sites

7 respostass a esta questão

Posts Recomendados

  • 0

Caso você ainda não tenha resolvido o problema ...

sum(qrexpr2) - sum(qrexpr1)
Eder, que eu saiba não dá mesmo. Quando preciso de algo parecido, coloco um QRLabel na banda em que esse resultado deve ser impresso e no OnBeforePrint da banda faço o somatório. Seria assim:
procedure ....BeforePrint(Sender: TQRCustomBand; var PrintBand: Boolean);
begin
  QRLabel1.Caption := FormatFloat('#,##0.00', QRExpr2.Value.dblResult -QRExpr1.Value.dblResult);
end;

Link para o comentário
Compartilhar em outros sites

  • 0
fiz do seu jeito mas o resultado da 0,00

fiz assim coloquei no qrexpr1=expression=20

e qrexpr2=expression=30

diminuindo deveria dar 10

não é??

Utilizando o exemplo que postei anteriormente, pergunto:

- o compenente QRLabel1 está na mesma banda que os QRExpr? se não estiver, deverá estar.

- indiferente ao somatório das expressões, na banda em que os QRExpr estão, eles imprimindo o valor esperado?

é um pouco difícil dar outros palpites sem ter a real ideia de como você estruturou seu relatório (bandas que utiliza, localização dos componentes nestas bandas, ...)

Link para o comentário
Compartilhar em outros sites

  • 0
o compenente QRLabel1 está na mesma banda que os QRExpr? se não estiver, deverá estar.

sim esta...estou apenas estudando este componente..aprendendo a utiliza-lo

eu mudei o seu codigo coloquei ao invés do DBLResult coloquei INTResult ficando assim:

QRLabel2.Caption := FormatFloat('#,##0.00', QRExpr2.Value.INTResult -QRExpr1.Value.INTResult);

ai deu certo...mas somente com numeros inteiros...se eu usar o 50,30 ai da erro....(hehehe não é inteiro né??)

SERÁ PORQUE O DBL não da certo né???

t+

:rolleyes:

Link para o comentário
Compartilhar em outros sites

  • 0

amigo..a solução já achei fiz assim:

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

Qrctrls, QuickRpt, ExtCtrls, StdCtrls;

type

TForm1 = class(TForm)

QuickRep1: TQuickRep;

QRBand1: TQRBand;

QRLabel1: TQRLabel;

QRExpr1: TQRExpr;

QRExpr2: TQRExpr;

Button1: TButton;

procedure QRLabel1Print(sender: TObject; var Value: String);

procedure Button1Click(Sender: TObject);

procedure QRExpr1Print(sender: TObject; var Value: String);

procedure QRExpr2Print(sender: TObject; var Value: String);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

Teste : real; //variavel

Teste1: real; //variavel

implementation

{$R *.DFM}

procedure TForm1.QRLabel1Print(sender: TObject; var Value: String);

begin

value := floattostr(teste + teste1); //PEGA O VALOR DO QREXP1 + QREXP2

end;

procedure TForm1.Button1Click(Sender: TObject);

begin

QUICKREP1.Prepare; //PREPARA.

QUICKREP1.Preview; //MOSTRA

end;

procedure TForm1.QRExpr1Print(sender: TObject; var Value: String);

begin

teste := strtofloat(value); //PEGA O VALOR DO QREXPR1

end;

procedure TForm1.QRExpr2Print(sender: TObject; var Value: String);

begin

teste1 := strtofloat(value); //PEGA O VALOR DO QREXPR2

end;

end.

Amigão..muito Grato pela Ajuda.

t+

:D

Link para o comentário
Compartilhar em outros sites

  • 0
amigão..beleza...carinha...fiz do seu jeito mas o resultado da 0,00

fiz assim coloquei no qrexpr1=expression=20

e qrexpr2=expression=30

diminuindo deveria dar 10

não é??

Estive averiguando a situação.

É interessante observar que há uma propriedade Kind (QRExpr.Value.Kind) que indica o tipo do resultado da expression (é somente leitura). No exemplo acima, você coloca em cada expression um valor inteiro; Embora eu acredite que ao utilizar a propriedade QRExpr.Value.dblValue deveria haver no método Get desta propriedade a devida conversão, o que ocorre na prática (acompanhe em depuração - debug) é que esta propriedade prossui um valor "bisonho" quando o valor da expressão é inteiro.

Então, para não ter qualquer problema desse tipo, quando o resultado esperado é float, aconselho a multiplicar a expressão por 1.0. Isto fará com que o resultado seja um float e contornará este problema.

Utilizando sua situação, a expressão ficaria assim:

qrexp1 com esta expressão abaixo:

(SUM(query1.peso) * 1000) / SUM(query1.FreteKelTotal) *1.0

qrexp2 com esta expressão abaixo:

(SUM(query1.peso) * 1000) / SUM(query1.FreteRed) *1.0

Por favor, teste novamente com a primeira solução que lhe dei e verifique se estou correto no que digo (em meu teste ficou ok).

p.s. o fato se repetiu no D3 com versão 2.0g do Quick Report e no D7 com a versão 3.5.0

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,3k
    • Posts
      652,3k
×
×
  • Criar Novo...