Gravar na tabela em modo de edição (ou algo assim)???
Caros
No código abaixo, como faço pra que o campo que adicionei aceit eo valor?
No sdsProduto adicionei um novo campo (PV).
Ao abrir o relatório, gera o erro:
Erro(s) encontrado(s):
sdsProduto: Dataset not in edit or insert mode
Obrigado!
No código abaixo, como faço pra que o campo que adicionei aceit eo valor?
procedure TDMForm.frxRelatorioBeforePrint(Sender: TfrxReportComponent);
var
PV : Double;
PC : Double;
Margem : Double;
begin
PC := sdsProduto.FieldByName('PRECO_CUSTO').AsFloat;
Margem := sdsProduto.FieldByName('MARGEM').AsFloat;
PV := (PC * Margem)/100 + PC;
sdsProduto.FieldByName('PV').Value := PV;
end;
No sdsProduto adicionei um novo campo (PV).
Ao abrir o relatório, gera o erro:
Erro(s) encontrado(s):
sdsProduto: Dataset not in edit or insert mode
Obrigado!
Elton Ésqui
Curtidas 0
Respostas
Wilson Junior
30/09/2010
Teste assim
Espero ter colaborado.
procedure TDMForm.frxRelatorioBeforePrint(Sender: TfrxReportComponent);
var
PV, PC, Margem: Double;
begin
PC := sdsProduto.FieldByName('PRECO_CUSTO').AsFloat;
Margem := sdsProduto.FieldByName('MARGEM').AsFloat;
PV := (PC * Margem)/100 + PC;
sdsProduto.Edit;
sdsProduto.FieldByName('PV').Value := PV;
sdsProduto.Post;
end;
Espero ter colaborado.
GOSTEI 0
Ricardo Araujo
30/09/2010
boa tarde,
nosso colegar já respondeu sua pergunta, esta correto o que ele fez.
nosso colegar já respondeu sua pergunta, esta correto o que ele fez.
GOSTEI 0
Eriley Barbosa
30/09/2010
Acho que não, pelo visto ele está tentando fazer este calculo, linha por linha da tabela, para mostrar no relatório.
Se for isso, deve criar um campo calculado e no seu evento onCalcfield, colocar o seu calculo inicial, ou ainda fazer no próprio SQL este calculo.
GOSTEI 0
Wilson Junior
30/09/2010
Existem diversas maneiras de se fazer. Estou seguindo apenas a linha de raciocínio do colega que perguntou.
GOSTEI 0
Elton Ésqui
30/09/2010
Opa
Então...o q preciso é o seguinte:
O campo que mostra o resultado da soma não existe, o que fiz foi calcular e por o resultado numa variável. Agora preciso somar todos esses resultados, como o Eriley comentou. Será exibido no relatório.
Olha o cód.
Então...o q preciso é o seguinte:
O campo que mostra o resultado da soma não existe, o que fiz foi calcular e por o resultado numa variável. Agora preciso somar todos esses resultados, como o Eriley comentou. Será exibido no relatório.
Olha o cód.
procedure TDMForm.frxRelatorioBeforePrint(Sender: TfrxReportComponent);
var
PV : Double;
PC : Double;
DifP : Double;
Margem : Double;
begin
PC := sdsProduto.FieldByName('PRECO_CUSTO').AsFloat;
Margem := sdsProduto.FieldByName('MARGEM').AsFloat;
PV := (PC * Margem)/100 + PC;
DifP := PV - PC;
{sdsProduto.Edit;
sdsProduto.FieldByName('PVENDA').Value := PV;
sdsProduto.Post;}
if PV = 0 then
begin
(frxRelatorio.FindObject('PV') as TfrxMemoView).Text := '-';
end
else
(frxRelatorio.FindObject('PV') as TfrxMemoView).Text := 'R$ ' + FloatToStr(PV);
if DifP = 0 then
begin
(frxRelatorio.FindObject('DifP') as TfrxMemoView).Text := '-';
end
else
(frxRelatorio.FindObject('DifP') as TfrxMemoView).Text := 'R$ ' + FloatToStr(DifP);
if PC = 0 then
begin
(frxRelatorio.FindObject('PRECO_CUSTO') as TfrxMemoView).Text := '-';
end
else
(frxRelatorio.FindObject('PRECO_CUSTO') as TfrxMemoView).Text := 'R$ ' + FloatToStr(PC);
end;
GOSTEI 0
Eriley Barbosa
30/09/2010
Sim, mas o código que passou gravara apenas uma linha e não todas as linhas para exibir no relatório, para isso precisaria de um Loop.
GOSTEI 0
Eriley Barbosa
30/09/2010
Você quer somar pv + difp + pc?
GOSTEI 0
Elton Ésqui
30/09/2010
No rel exibe os resultados...
Só preciso da soma...
Veja a imagem. Onde destquei de vermelho é o lugar da soma da coluna!
O valor do custo consigo somar pq existe no BD. O preço de venda obtive calculando com o percentual da mergem, que tb tem no BD. A diferença obtive subtarindo o PV - PC.
A soma desses dois não tenho no BD.
Só preciso da soma...
Veja a imagem. Onde destquei de vermelho é o lugar da soma da coluna!
O valor do custo consigo somar pq existe no BD. O preço de venda obtive calculando com o percentual da mergem, que tb tem no BD. A diferença obtive subtarindo o PV - PC.
A soma desses dois não tenho no BD.
GOSTEI 0
Eriley Barbosa
30/09/2010
Vamos seguir a seguinte linha, a cada vez que imprimir pv ou diferença, incrementa uma variavel com o valor impresso, como o text no relatório estara numa area que não repete, será impresso só uma vez, logo podemos colocar o incremento cada vez que um valor for diferente de zero, que apesar de estar no beforeprint sera impresso somente a soma total.
Opa
Então...o q preciso é o seguinte:
O campo que mostra o resultado da soma não existe, o que fiz foi calcular e por o resultado numa variável. Agora preciso somar todos esses resultados, como o Eriley comentou. Será exibido no relatório.
Olha o cód.
Então...o q preciso é o seguinte:
O campo que mostra o resultado da soma não existe, o que fiz foi calcular e por o resultado numa variável. Agora preciso somar todos esses resultados, como o Eriley comentou. Será exibido no relatório.
Olha o cód.
procedure TDMForm.frxRelatorioBeforePrint(Sender: TfrxReportComponent);
var
PV, totpv : Double;
PC, totpc : Double;
DifP, totdifp : Double;
Margem : Double;
begin
PC := sdsProduto.FieldByName('PRECO_CUSTO').AsFloat;
Margem := sdsProduto.FieldByName('MARGEM').AsFloat;
PV := (PC * Margem)/100 + PC;
DifP := PV - PC;
if PV = 0 then
(frxRelatorio.FindObject('PV') as TfrxMemoView).Text := '-'
else
begin
(frxRelatorio.FindObject('PV') as TfrxMemoView).Text := 'R$ ' + FloatToStr(PV);
totpv := totpv + pv;
end;
if DifP = 0 then
(frxRelatorio.FindObject('DifP') as TfrxMemoView).Text := '-'
else
begin
(frxRelatorio.FindObject('DifP') as TfrxMemoView).Text := 'R$ ' + FloatToStr(DifP);
totdifp := totdifp + DifP;
end;
if PC = 0 then
(frxRelatorio.FindObject('PRECO_CUSTO') as TfrxMemoView).Text := '-'
else
begin
(frxRelatorio.FindObject('PRECO_CUSTO') as TfrxMemoView).Text := 'R$ ' + FloatToStr(PC);
totpc := totpc + PC;
end;
frxRelatorio.FindObject('TOT_PV') as TfrxMemoView).Text := 'R$ ' + FloatToStr(totpv);
frxRelatorio.FindObject('TOT_DIFP') as TfrxMemoView).Text := 'R$ ' + FloatToStr(totdifp);
frxRelatorio.FindObject('TOT_PC') as TfrxMemoView).Text := 'R$ ' + FloatToStr(totpc);
end;
GOSTEI 0
Aroldo Zanela
30/09/2010
Colega,
Coloque uma banda do tipo sumário (BandType = rbSummary) e solte uma componente TQRExpr e na propriedade Expression coloque: sum(Nome_campo).
Formate a exibição de seus campos de valores com ###,###,##0.00 para melhorar a leitura do relatório.
GOSTEI 0
Eriley Barbosa
30/09/2010
Caro Aroldo a ferramenta de relatório utilizada é o FastReport e não o quickreport.
GOSTEI 0
Aroldo Zanela
30/09/2010
Colega,
Caro Aroldo a ferramenta de relatório utilizada é o FastReport e não o quickreport.
Obrigado pela correção.
Neste caso, adicione uma banda ReportSummry e com um componente "texto do sistema" efetue a parametrização para obter o resultado desejado.
GOSTEI 0
Elton Ésqui
30/09/2010
Galera
Desisti de fazer pelo cód delphi e passei pelo SQL mesmo
Valeu
Desisti de fazer pelo cód delphi e passei pelo SQL mesmo
SELECT P.CODIGO, P.NOME, P.PRECO_CUSTO, P.MARGEM, P.PRECO_CUSTO * (1 + (P.MARGEM / 100)) AS PRECO_VENDA, P.PRECO_CUSTO * (1 + (P.MARGEM / 100)) - (P.PRECO_CUSTO) AS DIF_PRECO FROM VRPROD P WHERE P.CODIGO BETWEEN 1 AND 9999 AND P.MARGEM IS NOT NULL AND P.PRECO_CUSTO IS NOT NULL AND P.MARGEM <> '0' AND P.PRECO_CUSTO <> '0' GROUP BY P.CODIGO, P.NOME, P.PRECO_CUSTO, P.MARGEM, PRECO_VENDA
Valeu
GOSTEI 0
Elton Ésqui
30/09/2010
Como faço pra encerrar esse tópíco?
GOSTEI 0
Wilson Junior
30/09/2010
Após um período ele irá lhe perguntar se o tópico está encerrado.
GOSTEI 0