Jump to content
Fórum Script Brasil
  • 0

(Resolvido) Inserir valores em uma StringGrid e depois somar


anabon

Question

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);

var

ValorTotal:Real;

soma : integer;

i: integer;

begin

If (cont = 0) Then

cont :=1

else

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;

for i:=1 to Grid_Entrega.RowCount -1 do

ValorTotal:= 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!!!

Link to comment
Share on other sites

8 answers to this question

Recommended Posts

  • 0

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

Link to comment
Share on other sites

  • 0

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 step
Converter de erro com a mensagem "R $ 10,00" não é um ponto flutuante válido value.Process parado passo utilização
Edited by anabon
Link to comment
Share on other sites

  • 0

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;

Link to comment
Share on other sites

  • 0

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ão

o valor total aparece na coluna 4 e a somatoria de tudo na coluna 5 ... aqui não dá erro nenhum

Convert error with message "R$10,00" Is not a valid floating point value.Process stoped use step

se 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

Link to comment
Share on other sites

  • 0
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ão

o valor total aparece na coluna 4 e a somatoria de tudo na coluna 5 ... aqui não dá erro nenhum

Convert error with message "R$10,00" Is not a valid floating point value.Process stoped use step

se 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

Link to comment
Share on other sites

  • 0

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 float

procedure 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 post

https://www.scriptbrasil.com.br/forum/lofiv...hp/t126119.html

abraço

Link to comment
Share on other sites

  • 0

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);

var

Texto: 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);

begin

txtvalor_un.Text := FormatFloat( '#,##0.00' , Table_Pedidovalor_un.Value)

end;

procedure TFormDisk_Entregas.txtvalor_totChange(Sender: TObject);

begin

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

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...