Somar no QuickReport
Estou fazendo um relatório onde são listados duas colunas de valores numericos
Gostaria de somar o valor da coluna 1 com o valor da coluna 2 e mostar o valor na coluna 3.
Isso linha por linha, não quero um valor total no final.
Alguem pode dar uma ajuda?
Lucas Souza
Curtidas 0
Respostas
Douglas Fernandes
29/03/2010
No evento BeforePrint do QuickReport você pode fazer isto.
GOSTEI 0
Douglas Fernandes
29/03/2010
Cara segue um exemplo simplorio do que você possa fazer ai:
procedure TFrmTeste.DetailBand1BeforePrint(Sender: TQRCustomBand;var PrintBand: Boolean);
Var
Sum : Integer;
begin
Sum := QAux1.FieldByName('Valor1').AsInteger + QAux1.FieldByName('Valor2').AsInteger;
QRLabel2.Caption := IntToStr(Sum);
end;
procedure TFrmTeste.DetailBand1BeforePrint(Sender: TQRCustomBand;var PrintBand: Boolean);
Var
Sum : Integer;
begin
Sum := QAux1.FieldByName('Valor1').AsInteger + QAux1.FieldByName('Valor2').AsInteger;
QRLabel2.Caption := IntToStr(Sum);
end;
GOSTEI 0
Lucas Souza
29/03/2010
Douglas
QAux1 no seu exemplo se refere a quê? a query?
Se for a query dá erro se uso FieldByName.
Tentei fazer assim:
QRLabel12.Caption := dmGeral.QryQuantExamesE.FieldValues['campocoluna1'] + dmGeral.QryQuantExamesE.FieldValues['campocoluna2'];
Ele soma só o resultado da primeira linha e coloca esse resultado em todas as linhas.
GOSTEI 0
Robson Catunda
29/03/2010
Lucas.Dolci,...
Você pode fazer isso de três formas distintas:
1 - Criando em seu dataset um campo do tipo calculed ou um do tipo internalcalc, e no evento OnCalcField do dataset faz o cálculo,
dmGeral.QryQuantExamesE.FieldByName('totalcoluna3').asInteger := dmGeral.QryQuantExamesE.FieldByName('campocoluna1').asInteger + dmGeral.QryQuantExamesE.FieldByName('campocoluna2').asInteger;
2 - Criando um campo pra soma dentro da sql do dataset:
select compocoluna1,campocoluna2,(coalesce(campocoluna1,0)+coalesce(campocoluna2,0)) as totalcoluna3 from Exames
3 - Utilizando o componente QRExpr do próprio QuickReport.
Obs.: na opção 1 utilizei fieldbyname no lugar de fieldvalues para determinar valores nulos como zero, pois dará erro se pegar valor null. E na opção 2 o coalesce tem a mesma finalidade, ou seja, se coluna1 ou coluna2 forem null será considerado o valor como zero, pois de outra forma o sql ignora os calculos com valor null.
Você pode fazer isso de três formas distintas:
1 - Criando em seu dataset um campo do tipo calculed ou um do tipo internalcalc, e no evento OnCalcField do dataset faz o cálculo,
dmGeral.QryQuantExamesE.FieldByName('totalcoluna3').asInteger := dmGeral.QryQuantExamesE.FieldByName('campocoluna1').asInteger + dmGeral.QryQuantExamesE.FieldByName('campocoluna2').asInteger;
2 - Criando um campo pra soma dentro da sql do dataset:
select compocoluna1,campocoluna2,(coalesce(campocoluna1,0)+coalesce(campocoluna2,0)) as totalcoluna3 from Exames
3 - Utilizando o componente QRExpr do próprio QuickReport.
Obs.: na opção 1 utilizei fieldbyname no lugar de fieldvalues para determinar valores nulos como zero, pois dará erro se pegar valor null. E na opção 2 o coalesce tem a mesma finalidade, ou seja, se coluna1 ou coluna2 forem null será considerado o valor como zero, pois de outra forma o sql ignora os calculos com valor null.
GOSTEI 0
Lucas Souza
29/03/2010
Robson
Não consegui fazer do geito que você sugeriu, fiz da seguinte forma:
na banda detail:
procedure TqrExamesQuantidadeE.QRBand4BeforePrint(Sender: TQRCustomBand;
var PrintBand: Boolean);
begin
//var1 := 0;
QRLabel12.Caption := dmGeral.cdsQuantExamesE.FieldValues['PESO'] * dmGeral.cdsQuantExamesE.FieldValues['TOTAL'];
var1 := var1 + strtoint(QRLabel12.Caption);
//QRLabel13.Caption := inttostr(var1);
end; na banda page footer: QRLabel14.Caption := inttostr(var1); Moral da história: o QRLabel12 de cada linha pega a multiplicação do campo PESO e TOTAL, até aí tudo bem, depois soma tudo e mostra no QRLabel14. Soma direitinho sem problemas, mas quando peço para imprimir ou quanso salvo em PDF ele duplica o valor do QRLabel14, se o resoltado da soma é 1000, se imprimi sai 2000 e sem imprimo novamente imprime 4000, ele vai duplicando o campo QRLabel14 a cada impressão ou salvamento.
var PrintBand: Boolean);
begin
//var1 := 0;
QRLabel12.Caption := dmGeral.cdsQuantExamesE.FieldValues['PESO'] * dmGeral.cdsQuantExamesE.FieldValues['TOTAL'];
var1 := var1 + strtoint(QRLabel12.Caption);
//QRLabel13.Caption := inttostr(var1);
end; na banda page footer: QRLabel14.Caption := inttostr(var1); Moral da história: o QRLabel12 de cada linha pega a multiplicação do campo PESO e TOTAL, até aí tudo bem, depois soma tudo e mostra no QRLabel14. Soma direitinho sem problemas, mas quando peço para imprimir ou quanso salvo em PDF ele duplica o valor do QRLabel14, se o resoltado da soma é 1000, se imprimi sai 2000 e sem imprimo novamente imprime 4000, ele vai duplicando o campo QRLabel14 a cada impressão ou salvamento.
GOSTEI 0
Joao Silva
29/03/2010
SUM(coluna1) - SUM(coluna2)
GOSTEI 0