Fórum Gravar na tabela em modo de edição (ou algo assim)??? #387623

30/09/2010

0

Caros

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

Elton Ésqui

Responder

Posts

30/09/2010

Wilson Junior

Teste assim
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.
Responder

Gostei + 0

30/09/2010

Ricardo Araujo

boa tarde,


nosso colegar já respondeu sua pergunta, esta correto o que ele fez.
Responder

Gostei + 0

30/09/2010

Eriley Barbosa

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.
Responder

Gostei + 0

30/09/2010

Wilson Junior

Existem diversas maneiras de se fazer. Estou seguindo apenas a linha de raciocínio do colega que perguntou.
Responder

Gostei + 0

30/09/2010

Elton Ésqui

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.

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;

Responder

Gostei + 0

30/09/2010

Eriley Barbosa

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.
Responder

Gostei + 0

30/09/2010

Eriley Barbosa

Você quer somar pv + difp + pc?
Responder

Gostei + 0

30/09/2010

Elton Ésqui

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.
Responder

Gostei + 0

30/09/2010

Eriley Barbosa

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.

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;

Responder

Gostei + 0

30/09/2010

Aroldo Zanela

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.
Responder

Gostei + 0

30/09/2010

Eriley Barbosa

Caro Aroldo a ferramenta de relatório utilizada é o FastReport e não o quickreport.
Responder

Gostei + 0

30/09/2010

Aroldo Zanela

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.
Responder

Gostei + 0

30/09/2010

Elton Ésqui

Galera

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
Responder

Gostei + 0

14/10/2010

Elton Ésqui

Como faço pra encerrar esse tópíco?
Responder

Gostei + 0

14/10/2010

Wilson Junior

Após um período ele irá lhe perguntar se o tópico está encerrado.
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar