Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Inserir valores em uma StringGrid e depois somar


anabon

Pergunta

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 para o comentário
Compartilhar em outros sites

8 respostass a esta questão

Posts Recomendados

  • 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 para o comentário
Compartilhar em outros 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
Editado por anabon
Link para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,2k
×
×
  • Criar Novo...