anabon Posted February 6, 2012 Report Share Posted February 6, 2012 olá pessoal bom dia.... Mais uma x peço a ajuda de vocês... È o seguinte tenho um form com StringGrid, quero incluir dados com valores moentario nele e depois somar uma coluna .... Nada que achei até agora deu certo... o codigo que estou usando é :procedure TFormDisk_Entregas.cmdokClick(Sender: TObject);varValorTotal:Real;soma : integer;i: integer;beginIf (cont = 0) Thencont :=1elsecont:=cont+ 1;Grid_Entrega.RowCount:=cont+1;Grid_Entrega.cells[1,cont]:=txtdescricao.Text;Grid_Entrega.cells[2,cont]:=txtquant.Text;Grid_Entrega.cells[3,cont]:=txtvalor_un.Text;Grid_Entrega.cells[4,cont]:=txtvalor_tot.Text;for i:=1 to Grid_Entrega.RowCount -1 doValorTotal:= ValorTotal + strtofloat(Grid_Entrega.Cells[4,i]); txttotal.Text:=floattostr(ValorTotal);txtquant.Text := '';txtdescricao.Text := ''; //DBEditCod_Produto2.Text := '';end;Desde já agradeço que puder me ajudar!!!!! Forte Abraço!!! Quote Link to comment Share on other sites More sharing options...
0 Jhonas Posted February 6, 2012 Report Share Posted February 6, 2012 unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons, Grids; type TForm1 = class(TForm) StringGrid1: TStringGrid; BitBtn1: TBitBtn; txtdescricao: TEdit; txtquant: TEdit; txtvalor_un: TEdit; txtvalor_tot: TEdit; procedure BitBtn1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; cont : integer = 0; implementation {$R *.dfm} procedure TForm1.BitBtn1Click(Sender: TObject); var ValorTotal, SomaTotal: Real; i: integer; begin cont:=cont+ 1; StringGrid1.RowCount:=cont+1; StringGrid1.cells[1,cont]:= txtdescricao.Text; StringGrid1.cells[2,cont]:= txtquant.Text; StringGrid1.cells[3,cont]:= txtvalor_un.Text; ValorTotal := strtofloat(txtquant.Text) * strtofloat(txtvalor_un.Text); txtvalor_tot.Text:=floattostr(ValorTotal); StringGrid1.cells[4,cont]:= txtvalor_tot.Text; for i:=1 to StringGrid1.RowCount -1 do Somatotal:= Somatotal + strtofloat(StringGrid1.Cells[4,i]); StringGrid1.cells[5,cont]:= Formatfloat(',0.00',Somatotal); txtquant.Text := ''; txtdescricao.Text := ''; txtvalor_un.Text := ''; end; end.abraço Quote Link to comment Share on other sites More sharing options...
0 anabon Posted February 7, 2012 Author Report Share Posted February 7, 2012 (edited) Obrigada amigo pela ajuda ....mas continua dando erro....Convert error with message "R$10,00" Is not a valid floating point value.Process stoped use stepConverter de erro com a mensagem "R $ 10,00" não é um ponto flutuante válido value.Process parado passo utilização Edited February 7, 2012 by anabon Quote Link to comment Share on other sites More sharing options...
0 anabon Posted February 7, 2012 Author Report Share Posted February 7, 2012 analizei o codigo e fui por etapas e percebi que o erro não ta ao inserir os dados e sim ao somar quantidade * valor unitarios = total. tirei essa linha do codigo e ele funcionou; ValorTotal := strtofloat(txtquant.Text) * strtofloat(txtvalor_un.Text); Só que na 4 coluna onde era para aparecer o total aparece 0.00, logo não tem como somar o total geral... eu estou somando também esses valor no evento OnCalfields da tabela com o codigo: Table_Pedidovalor_tot.Value:=Table_Pedidoquantidade.Value*Table_Pedidovalor_un.Value; tentei tirar essa linha mas ai não funciona nem uma e nem outra.... Desde já agradeço quem puder me ajudar.... abraço.... segue abaixo como ficou meu codigo com a ajuda do amigo Jhonas procedure TFormDisk_Entregas.cmdokClick(Sender: TObject); var ValorTotal, SomaTotal: Real; i: integer; begin cont:=cont+ 1; Grid_Entrega.RowCount:=cont+1; Grid_Entrega.cells[1,cont]:= txtdescricao.Text; Grid_Entrega.cells[2,cont]:= txtquant.Text; Grid_Entrega.cells[3,cont]:= txtvalor_un.Text; Grid_Entrega.cells[4,cont]:= txtvalor_tot.Text; ValorTotal := strtofloat(txtquant.Text) * strtofloat(txtvalor_un.Text); txtvalor_tot.Text:=floattostr(ValorTotal); Grid_Entrega.cells[4,cont]:= txtvalor_tot.Text; for i:=1 to Grid_Entrega.RowCount -1 do Somatotal:= Somatotal + strtofloat(Grid_Entrega.Cells[4,i]); Grid_Entrega.cells[4,cont]:= Formatfloat(',0.00',Somatotal); txtquant.Text := ''; txtdescricao.Text := ''; txtvalor_un.Text := ''; end; Quote Link to comment Share on other sites More sharing options...
0 Jhonas Posted February 7, 2012 Report Share Posted February 7, 2012 Se voce entendeu o código, vai ver que voce deve digitar somente a descrição , quantidade e preço unitario e clicar no botãoo valor total aparece na coluna 4 e a somatoria de tudo na coluna 5 ... aqui não dá erro nenhumConvert error with message "R$10,00" Is not a valid floating point value.Process stoped use stepse voce estiver trazendo os dados de uma tabela e no campo voce guardou o valor como R$ 10,00, ocorera um erro: R$ 10,00 não é um ponto flutuante valido .... justamente por causa do "R$" onde deveria estar somente "10,00"observe que no código estamos usando apenas edits, então na hora de digitar os valores numericos, não pode ser digitado o R$abraço Quote Link to comment Share on other sites More sharing options...
0 anabon Posted February 7, 2012 Author Report Share Posted February 7, 2012 Se voce entendeu o código, vai ver que voce deve digitar somente a descrição , quantidade e preço unitario e clicar no botãoo valor total aparece na coluna 4 e a somatoria de tudo na coluna 5 ... aqui não dá erro nenhumConvert error with message "R$10,00" Is not a valid floating point value.Process stoped use stepse voce estiver trazendo os dados de uma tabela e no campo voce guardou o valor como R$ 10,00, ocorera um erro: R$ 10,00 não é um ponto flutuante valido .... justamente por causa do "R$" onde deveria estar somente "10,00"observe que no código estamos usando apenas edits, então na hora de digitar os valores numericos, não pode ser digitado o R$abraço Obrigada pela resposnta!!!! Entendi.... só que esse valor onde ta dando erro estou puxando da tabela e o campo ta em currency, na verdade é um lookup onde eu digito o codigo ele me responde descrição e valor unitario, o valor total é um campo calculado então também aparece R$..... Abraço Quote Link to comment Share on other sites More sharing options...
0 Jhonas Posted February 7, 2012 Report Share Posted February 7, 2012 na pratica, eu prefiro guardar o valor numerico e mostrar no grid o valor currency, ou seja, guardo na tabela o valor 10,00 e mostra no grid R$ 10,00 ... evita muitos problemas como esse.entretanto voce já sabe onde se encontra o erro .... outra forma de contornar isso seria, transformar currency em string e depois em floatprocedure TForm1.Button1Click(Sender: TObject); var valor : real; begin Edit1.Text := 'R$ 10,00'; Edit1.text := StringReplace(Edit1.text, 'R$','', [rfReplaceAll]); valor := strtofloat(trim(Edit1.Text)); showmessage(floattostr(valor)); end;veja tambem esse posthttps://www.scriptbrasil.com.br/forum/lofiv...hp/t126119.htmlabraço Quote Link to comment Share on other sites More sharing options...
0 anabon Posted February 8, 2012 Author Report Share Posted February 8, 2012 Mais uma vez muito obrigada..... deu certo..... a quem possa ajudar segue abaixo o codigo que deu certo pra mim.... procedure TFormDisk_Entregas.cmdokClick(Sender: TObject); varTexto: String; ValorTotal, SomaTotal: Real; i: integer; begin cont:=cont+ 1; Grid_Entrega.RowCount:=cont+1; Grid_Entrega.cells[1,cont]:= txtdescricao.Text; Grid_Entrega.cells[2,cont]:= txtquant.Text; Grid_Entrega.cells[3,cont]:= txtvalor_un.Text; Grid_Entrega.cells[4,cont]:= txtvalor_tot.Text; Valortotal := strtofloat(txtquant.Text) * strtofloat(txtvalor_un.Text); txtvalor_tot.Text:=floattostr(ValorTotal); Grid_Entrega.cells[4,cont]:= txtvalor_tot.Text; for i:=1 to Grid_Entrega.RowCount -1 do SomaTotal:= SomaTotal + strtofloat(Grid_Entrega.Cells[4,i]); txttotal.Text:= Formatfloat(',0.00',SomaTotal); txtproduto.Text := ''; txtquant.Text := ''; txtvalor_un.Text := ''; txtvalor_tot.Text := '';end; em algumas dbedit tive que fazer assim:procedure TFormDisk_Entregas.txtvalor_unChange(Sender: TObject);begintxtvalor_un.Text := FormatFloat( '#,##0.00' , Table_Pedidovalor_un.Value)end;procedure TFormDisk_Entregas.txtvalor_totChange(Sender: TObject);begintxtvalor_tot.Text:= Formatfloat(',0.00',Table_Pedidovalor_tot.Value);end;obs: Amigo Jhonas agradeço pela sua paciencia e ajuda.... Se alguém tiver algum link ou uma dica que possa me ajudar de como salvar tudo isso agora eu agradeço abraço... Quote Link to comment Share on other sites More sharing options...
0 Jhonas Posted February 8, 2012 Report Share Posted February 8, 2012 leia essas apostilashttp://mreis.info/FIJ/download/delphi5.pdfhttp://www.micropic.com.br/paginadecliente...de%20delphi.pdfabraço Quote Link to comment Share on other sites More sharing options...
Question
anabon
olá pessoal bom dia....
Mais uma x peço a ajuda de vocês...
È o seguinte tenho um form com StringGrid, quero incluir dados com valores moentario nele e depois somar uma coluna .... Nada que achei até agora deu certo... o codigo que estou usando é :
Desde já agradeço que puder me ajudar!!!!!
Forte Abraço!!!
Link to comment
Share on other sites
8 answers to this question
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.