Orçamento e itens que não existe no estoque...

Delphi

14/12/2005

OI... com muita luta e ajuda do colega Edilcimar conseguí montar uma função onde atualizo os íntes que saíram de um estoque...só que como mexo com uma oficina de informática, acontece de ter ualgum HD usado que não tem no estoque ( quem nunca correu atrás de um HD usado para akela máquininha velha surrada de trabalho ) aí criei uma opção de cadastro onde chamei de íten avulso onde posso colocar akela pessa usada que não está no estoque...más a função que tenho só atualiza os ítens do estoque ... ou seja vai dar erro quando pegar algum íten que num existe no estoque, tem como fazer a função ignorar o íten não exitente no estoque ? veja a função..

begin
  with BD_VENDA_ITENS do
    begin
    First;
    Try
    while not BD_VENDA_ITENS.eof do
      begin
      BD_ESTOQUE.Close;
      BD_ESTOQUE.SQL.Clear;
      BD_ESTOQUE.SQL.Add(´select * from  ESTOQUE where GS_EST_CODIGO=´+inttostr(BD_VENDA_ITENSGS_VEI_CODPROD.Value));
      BD_ESTOQUE.Open;
      BD_ESTOQUE.Edit;
      BD_ESTOQUEGS_EST_QNT.Value := BD_ESTOQUEGS_EST_QNT.Value - BD_VENDA_ITENSGS_VEI_QNT.Value;
      BD_ESTOQUE.Post;
      BD_VENDA_ITENS.next;
    end;
    DM1.IBTransaction1.CommitRetaining;
    except
    showmessage(´problema com o banco de dados´);
    DM1.IBTransaction1.rollback;
  end;
end;


a tabela BD_VENDA_ITENS é o que recebe os valores do estoque e os avulso...
Vlw e até mais...


Gigatel

Gigatel

Curtidas 0

Respostas

Zekas

Zekas

14/12/2005

Adicione um novo atributo em sua tabela (ex. fg_estoque) para saber se o item é para controle de estoque ou não. No seu select, inclua a verificação do valor do novo atributo incluso. Se for estoque, baixe o item, se não, não baixe.

Att.

Zekas


GOSTEI 0
Gigatel

Gigatel

14/12/2005

Adicione um novo atributo em sua tabela (ex. fg_estoque) para saber se o item é para controle de estoque ou não. No seu select, inclua a verificação do valor do novo atributo incluso. Se for estoque, baixe o item, se não, não baixe. Att. Zekas



OI blz ?.. na verdade estva pensado em algo mais simples ( se for ) o código acima exite um filtro na tabela acossiado por um código, pensei...quando o código for executado a tabela estoque num terá nada...logo aí poderia se criar uma condição ignorando a segunda estapa onde seria a subtração do campo...


GOSTEI 0
Okama

Okama

14/12/2005

Olá, utilize apenas uma chamada ao banco. Fazendo Select e Edit causa tráfego na rede e lentidão no sistema.

update TABELA 
  set tb_valor = tb_valor - baixa
where
  tb_codigo = codigo


BD_ESTOQUE.ExecSql retorna a quantidade de registros afetados, logo:

I := BD_ESTOQUE.ExecSql;

if I = 0 then 
  ..nenhum item atualizado
else
  ..atualizado item no estoque



GOSTEI 0
Gigatel

Gigatel

14/12/2005

Olá, utilize apenas uma chamada ao banco. Fazendo Select e Edit causa tráfego na rede e lentidão no sistema.
update TABELA 
  set tb_valor = tb_valor - baixa
where
  tb_codigo = codigo
BD_ESTOQUE.ExecSql retorna a quantidade de registros afetados, logo:
I := BD_ESTOQUE.ExecSql;

if I = 0 then 
  ..nenhum item atualizado
else
  ..atualizado item no estoque


Qunto mais idéia melhor, como isso ficaria na minha função acima ?...


GOSTEI 0
Marcio.theis

Marcio.theis

14/12/2005

Ou também:

with BD_VENDA_ITENS do
    begin
    First;
    Try
    while not BD_VENDA_ITENS.eof do
        begin
        BD_ESTOQUE.Close;
        BD_ESTOQUE.SQL.Clear;
        BD_ESTOQUE.SQL.Add(´select * from  ESTOQUE where GS_EST_CODIGO=´+inttostr(BD_VENDA_ITENSGS_VEI_CODPROD.Value));
        BD_ESTOQUE.Open;
        [b]if not BD_ESTOQUE.IsEmpty then[/b]
            begin
            BD_ESTOQUE.Edit;
            BD_ESTOQUEGS_EST_QNT.Value := BD_ESTOQUEGS_EST_QNT.Value - BD_VENDA_ITENSGS_VEI_QNT.Value;
            BD_ESTOQUE.Post;            
            end;
        BD_VENDA_ITENS.next;
        end;
    DM1.IBTransaction1.CommitRetaining;
    except
        showmessage(´problema com o banco de dados´);
        DM1.IBTransaction1.rollback;
        end;
    end; 



GOSTEI 0
Okama

Okama

14/12/2005

Var I:Integer;
begin 
  with BD_VENDA_ITENS do 
    begin 
    First; 
      while not eof do 
      begin 

      BD_ESTOQUE.Sql.Text := ´Update ESTOQUE set GS_EST_QNT = GS_EST_QNT -´+ FieldByName( GS_VEI_QNT ).AsString+´ where GS_EST_CODIGO = ´+FieldByName( GS_VEI_CODPROD ).AsString;

      I := BD_ESTOQUE.ExecSql;
      if I = 0 then
        Showmessage(´Registro não encontrado! Produto Avulso´)
      else 
        Showmessage(´Registro atualizado com Sucesso!´);
     
      BD_VENDA_ITENS.next; 
  end; 
end; 


Remova o ´showmessage´ e substitua por comandos caso queira controlar a atualização


GOSTEI 0
Gigatel

Gigatel

14/12/2005

Var I:Integer;
begin 
  with BD_VENDA_ITENS do 
    begin 
    First; 
      while not eof do 
      begin 

      BD_ESTOQUE.Sql.Text := ´Update ESTOQUE set GS_EST_QNT = GS_EST_QNT -´+ FieldByName( GS_VEI_QNT ).AsString+´ where GS_EST_CODIGO = ´+FieldByName( GS_VEI_CODPROD ).AsString;

      I := BD_ESTOQUE.ExecSql;
      if I = 0 then
        Showmessage(´Registro não encontrado! Produto Avulso´)
      else 
        Showmessage(´Registro atualizado com Sucesso!´);
     
      BD_VENDA_ITENS.next; 
  end; 
end; 
Remova o ´showmessage´ e substitua por comandos caso queira controlar a atualização


deu este erro

[Error] Unit39.pas(161): Undeclared identifier: ´GS_VEI_QNT´



o q será ?


GOSTEI 0
Gigatel

Gigatel

14/12/2005

O problema está na SQL ? está falando que num exite akele campo...más exite sim...


GOSTEI 0
POSTAR