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

Orçamento


Mentow

Pergunta

Olá meu amigos, sou novo aqui no fórum. Eu estou desenvolvendo um formulário de orçamento onde estou utilizando 3 (três) tabelas do (tbOrcamentoPai, tbOrcamentoFilho e tbProdutos).

na tabela produtos tenho 4(quatro) campos relacionados a tabela de preço (Custo, Varejo, Atacado e Promoção)

Captura de Tela (9).png

 

minha intenção é a seguinte, quando eu mudar a o tipo de tabela no "ComboBox" os preços no "DBGrid" fossem alterados de acordo com seus valores na tabela produtos, eu consegui fazer essa alteração em apenas um campo através desse código 

  if (ComboBox1.ItemIndex = 0) then
  begin
    if tbProdutos.Locate('CODIGO', tbOrcamentoFilhoCODIGO.AsInteger,[]) then
    begin
      tbOrcamentoFilho.Edit;
      tbOrcamentoFilhoVALOR_UNIT.AsString :=  tbProdutosPRECO_CUSTO.AsString;
      tbOrcamentoFilho.Post;
      tbOrcamentoFilho.Refresh;
    end;
  end;

gostaria que me ajudassem a achar um modo em que essa alteração se aplique a todos os registos que constam no "DBGrid", desde já agradeço a todo.

 

boa noite!

 

Link para o comentário
Compartilhar em outros sites

10 respostass a esta questão

Posts Recomendados

  • 0

Amigo,não entendo muito mas talvez possa te dar uma ideia,beleza.

Você quer mudar somente os preços ?

Você pode trabalhar com comando sql,já pensou nisso?

Tipo : select campo from tabela;

E depois o resto você vai tratando ai como você quiser.

Espero que te de uma ideia.

Boa Sorte !

Link para o comentário
Compartilhar em outros sites

  • 0

olá amigo, seja bem vindo ao forum ....

o comando locate só é interessante quando voce usa tabelas pequenas ... em tabelas grandes isso causa demora na pesquisa

voce não especificou qual banco de dados está usando

pelo seu código devo supor que está usando o Paradox ( ele é muito bom para tabelas com poucos registros... para tabelas maiores prefira outro tipo de banco de dados, tipo ...Firebird, MYSQL, PostGree, Oracle..etc )   mas , como o nosso colega Seingalt propos, use o comando sql 

o relacionamento entre tabelas, faz com que, ao pesquisar determinado registro de uma tabela, os demais registros relacionados sejam mostrados tambem

exemplo:

ModeloRelacional_p2_03.jpg

se a pesquisa for pelo Código do Produto ( Tabela Produtos ) , automaticamente os registros da Tabela ( Dealhes do Produto ) e os registros da Tabela ( Pedidos ) serão mostrados em um DBGrid ou em campos separados ( Edits ) 

a mesma pesquisa poderia ser feita pelo campo Nome do Produto ( Tabela Produtos ), e os demais registros relacionados a esse campos seriam mostrados.

o comando de pesquisa não seria Locate mas Select ( usando o componente TQuery ou outro, dependendo do banco de dados usado ) 

exemplo:  Select * from Produtos where CódigoDoProduto = 12345 

esse comando agiliza muito a pesquisa na tabela

para saber como usar esse comando, veja os exemplos dos links

https://www.google.com.br/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=tquery delphi example

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Olá amigos, muito obrigado por responderem. eu uso Firebird como banco de dados, vou explicar melhor minha duvida.

esse código que mostrei ai esta fazendo a alteração correta, mas ele altera apenas uma linha do DBGrid

01.gif

e eu queria que ele fizesse essa alteração em todos os campos, para que o cliente não tenha que alterar de um em um, já pensou um orçamento com 100 itens o trabalho que não iria dar, então se alguém poder me ajudar ficarei muito grato.

 

Link para o comentário
Compartilhar em outros sites

  • 0

pelo exemplo que voce mostrou, parece que voce quer que os preços dos produtos, sejam alterados na medida que voce seleciona a opção no combobox ( Custo, Varejo, Atacado e Promoção )  

esses preços já estão na tabela ? ( tem um preço para cada opção do combobox ) ou é uma porcentagem que é dada ao preço, quando voce seleciona uma opção ?

  

Link para o comentário
Compartilhar em outros sites

  • 0

Sim, eles são tabelados na hora do cadastro como pode ver 

Captura de Tela (10).png

 

e no "ComboBox" eu faço a alteração de acordo com a tabela selecionada 

 

procedure TfmCadOrcamento.ComboBox1Change(Sender: TObject);
begin
  if (ComboBox1.ItemIndex = 0) then
  begin
    if (tbOrcaProd.Locate('CODIGO', tbOrcaFilhoCODIGO.AsInteger,[])) then
    begin
      tbOrcaFilho.Edit;
      tbOrcaFilhoVALOR_UNIT.AsString  :=  tbOrcaProdPRECO_CUSTO.AsString;
      tbOrcaFilhoVALOR_TOTAL.AsString :=  tbOrcaFilhoQTDA.AsString * tbOrcaFilhoVALOR_UNIT.NewValue;
      tbOrcaFilhoVALOR_TOTAL.AsString :=  FloatToStrF(StrToFloat(tbOrcaFilhoVALOR_TOTAL.AsString), ffNumber, 12, 2);
      tbOrcaFilho.Post;
    end;
  end;

  if (ComboBox1.ItemIndex = 1) then
  begin
    if (tbOrcaProd.Locate('CODIGO', tbOrcaFilhoCODIGO.Value,[])) then
    begin
      tbOrcaFilho.Edit;
      tbOrcaFilhoVALOR_UNIT.AsString  :=  tbOrcaProdPRECO_VAREJO.AsString;
      tbOrcaFilhoVALOR_TOTAL.AsString :=  tbOrcaFilhoQTDA.AsString * tbOrcaFilhoVALOR_UNIT.NewValue;
      tbOrcaFilhoVALOR_TOTAL.AsString :=  FloatToStrF(StrToFloat(tbOrcaFilhoVALOR_TOTAL.AsString), ffNumber, 12, 2);
      tbOrcaFilho.Post;
    end;
  end;

  if (ComboBox1.ItemIndex = 2) then
  begin
    if (tbOrcaProd.Locate('CODIGO', tbOrcaFilhoCODIGO.Value,[])) then
    begin
      tbOrcaFilho.Edit;
      tbOrcaFilhoVALOR_UNIT.AsString  :=  tbOrcaProdPRECO_ATACADO.AsString;
      tbOrcaFilhoVALOR_TOTAL.AsString :=  tbOrcaFilhoQTDA.AsString * tbOrcaFilhoVALOR_UNIT.NewValue;
      tbOrcaFilhoVALOR_TOTAL.AsString :=  FloatToStrF(StrToFloat(tbOrcaFilhoVALOR_TOTAL.AsString), ffNumber, 12, 2);
      tbOrcaFilho.Post;
    end;
  end;

  if (ComboBox1.ItemIndex = 3) then
  begin
    if (tbOrcaProd.Locate('CODIGO', tbOrcaFilhoCODIGO.Value,[])) then
    begin
      tbOrcaFilho.Edit;
      tbOrcaFilhoVALOR_UNIT.AsString  :=  tbOrcaProdPRECO_PROMOCAO.AsString;
      tbOrcaFilhoVALOR_TOTAL.AsString :=  tbOrcaFilhoQTDA.AsString * tbOrcaFilhoVALOR_UNIT.NewValue;
      tbOrcaFilhoVALOR_TOTAL.AsString :=  FloatToStrF(StrToFloat(tbOrcaFilhoVALOR_TOTAL.AsString), ffNumber, 12, 2);
      tbOrcaFilho.Post;
    end;
  end;
end;

Link para o comentário
Compartilhar em outros sites

  • 0

seu código seria reduzido a isso

procedure TForm1.ComboBox1Change(Sender: TObject);
begin

  IBQuery1.Active := false;
  IBQuery1.SQL.Clear;
  IBQuery1.SQL.Append('Select * from tbOrcaFilho where CODIGO = 1 and '+
                      ' TabeladePreço = ' + inttostr(ComboBox1.ItemIndex ));
  IBQuery1.Active := true;

end;

 

ou passando o valor do código por parametro 

procedure TForm1.ComboBox1Change(Sender: TObject);
begin

  IBQuery1.Active := false;
  IBQuery1.SQL.Clear;
  IBQuery1.SQL.Append('Select * from tbOrcaFilho where CODIGO = :COD and '+
                      ' TabeladePreço = ' + inttostr(ComboBox1.ItemIndex ));
  IBQuery1.Params[0].AsInteger := 1; ///  OU PODE PEGAR O VALOR DE UM EDIT
  IBQuery1.Active := true;

end;

Link para o comentário
Compartilhar em outros sites

  • 0

São essas as tabelas, o ruim é que to usando o componente Table ta paleta InterBase

Captura de Tela (11).png

E como pode ver não tenho uma tabala especifica para os preços, tenho os campos junto a tbOrcaProd (PRECO_CUSTO, PRECO_VAREJO, PRECO_ATACADO E PRECO_PROMOCAO)

e as tabelas estão no modo insert, e eu não sei trabalhar com query

até porque sou iniciante ainda 

Link para o comentário
Compartilhar em outros sites

  • 0

voce colocou um campo CODIGO para cada uma de suas tabelas... ou seja, pelo mesmo código voce pode trazer todos os registros relacionados de todas as tabelas

no entanto, voce deve mudar o componente de acesso a essas tabelas pelo componente IBQuery ....  como te mostrei no post anterior voce vai reduzir muito o código e vai agilizar a pesquisa

na sua tabela Produtos voce deve colocar mais um campo para controle ( TIPO_VENDA ) onde voce vai colocar o tipo ( Custo, Varejo, Atacado e Promoção ) ou ( 0,1,2,3 ) para que quando voce selecionar o tipo no combobox , voce passe o tipo como parametro para a pesquisa

exemplo

procedure TForm1.ComboBox1Change(Sender: TObject);
begin

  IBQuery1.Active := false;
  IBQuery1.SQL.Clear;
  IBQuery1.SQL.Append('Select * from tbOrcaFilho where CODIGO = :COD and TIPO_VENDA = ' + inttostr(ComboBox1.ItemIndex )); /// SE FOR NUMERO
  IBQuery1.Params[0].AsInteger := 1; /// VALOR DO CÓDIGO DO PRODUTO ... PODE SER PASSADO ATRAVES DE UM EDIT
  IBQuery1.Active := true;

end;

Depois que os registros estiverem selecionados, voce pode mostrar no Form através de DBedits ou em um DBgrid 

OBS: Select * from Tabela ( vai trazer todos os campos das tabelas )

Select nomecampo1, nomecampo2, nomecampo3 from tabela ( vai trazer apenas os nomes dos campos que voce especificar )

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,2k
    • Posts
      651,9k
×
×
  • Criar Novo...