Soma no FastReport no código do componente
Pessoal,
Ajudem-me, por favor.
Estou compilando o código abaixo no componente do FastReport, porém apresenta o erro:
'''' is not a valid floating point value
Ajudem-me, por favor.
Estou compilando o código abaixo no componente do FastReport, porém apresenta o erro:
'''' is not a valid floating point value
procedure Memo11OnBeforePrint(Sender: TfrxComponent);
var
resultado, total, total_fat : double;
begin
total := StrToFloat(fdsRelatTOTAL_FAT.Value);
total_fat := StrToFloat(Memo12.Value);
resultado := total / total_fat;
Memo11.Text := FloatToStr(resultado);
end;
Elton Ésqui
Curtidas 0
Respostas
Marcos Oliveira
04/09/2013
Elton,
Porque você não insere um componente "Texto do Sistema" e faz a função dentro dele? Você pode criar uma função personalizada, além das básicas de agregação.
Att,
Marcos
Porque você não insere um componente "Texto do Sistema" e faz a função dentro dele? Você pode criar uma função personalizada, além das básicas de agregação.
Att,
Marcos
GOSTEI 0
Elton Ésqui
04/09/2013
Bem que eu tentei passar pelo frxRelatorioGetValue, mas como o total do campo é o mesmo então não deu muito certo.
O relatório deve ser assim:
Neste caso, para obter o % deveria pegar o valor 950,00 e dividir pelo total. E os demais a mesma coisa.
O relatório deve ser assim:
Cli---Nome-----Total------Part.% 01----Joao-----950,00-----32,76% 02----José-----750,00-----25.86% 03----Maria----650,00-----22.41% 04----Pedro----550,00-----18.97% Total---------2900,00-----------
Neste caso, para obter o % deveria pegar o valor 950,00 e dividir pelo total. E os demais a mesma coisa.
GOSTEI 0
Marcos Oliveira
04/09/2013
Elton, porque você já não faz a conta antes de imprimir, e só vincula as porcentagens no FastReport?
GOSTEI 0
Elton Ésqui
04/09/2013
Eu tentei isso no BeforePrint, igual lá no primeiro post.
Mas deu algum erro.
Mas deu algum erro.
GOSTEI 0
Marcos Oliveira
04/09/2013
Eu quis dizer pra você criar um campo com as porcentagens, já calculadas, gravar tudo antes de chamar o relatório e depois vincular esse campo no Fast Report.
GOSTEI 0
Elton Ésqui
04/09/2013
Havia feito assim também, mas não sei se essa lógica está muito coerente.
procedure TDMForm.frxRelatorioGetValue(const VarName: string; var Value: Variant);
var
total, total_fat, resultado : Double;
begin
total_fat := sdsRelat.FieldByName('TOTAL_FAT').AsFloat;
total := 0;
while not sdsRelat.Eof do
begin
total := total + sdsRelat.FieldByName('TOTAL_FAT').AsFloat;
sdsRelat.Next;
resultado := total_fat / total;
end;
if CompareText(VarName, 'Acumulado') = 0 then
begin
Value := FormatFloat('#,##0', resultado);
end;
end;
GOSTEI 0
Elton Ésqui
04/09/2013
Não está dando certo porque estou somando o total de cada registro direto no SQL?
Seria melhor fazer a consulta normal e depois somar com o código acima?
Seria melhor fazer a consulta normal e depois somar com o código acima?
SELECT
C.CODIGO,
C.NOME,
SUM(N.TOTAL) AS TOTAL_FAT
FROM
NRNOTA N
INNER JOIN VRNATU OP ON (N.NATU_OPE = OP.CODIGO)
INNER JOIN VRCLIE C ON (N.CLIENTE = C.CODIGO)
WHERE
N.DATA_EMI BETWEEN :DATAINI AND :DATAFIN AND
N.ORIG_NOTA IN ('1','2') AND
N.FLAG_EMI = 1 AND
OP.MOVIMENTO = 'S'
GROUP BY
C.CODIGO,
C.NOME
ORDER BY TOTAL_FAT DESC
GOSTEI 0
Elton Ésqui
04/09/2013
O intuito disso tudo é realizar a Curva ABC da seleção.
Alguém teria alguma ideia?
Alguém teria alguma ideia?
GOSTEI 0