Orçamento e itens que não existe no estoque...
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..
a tabela BD_VENDA_ITENS é o que recebe os valores do estoque e os avulso...
Vlw e até mais...
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
Curtidas 0
Respostas
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
Att.
Zekas
GOSTEI 0
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
14/12/2005
Olá, utilize apenas uma chamada ao banco. Fazendo Select e Edit causa tráfego na rede e lentidão no sistema.
BD_ESTOQUE.ExecSql retorna a quantidade de registros afetados, logo:
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
14/12/2005
Olá, utilize apenas uma chamada ao banco. Fazendo Select e Edit causa tráfego na rede e lentidão no sistema.
BD_ESTOQUE.ExecSql retorna a quantidade de registros afetados, logo:
update TABELA set tb_valor = tb_valor - baixa where tb_codigo = codigo
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
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
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
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;
deu este erro
[Error] Unit39.pas(161): Undeclared identifier: ´GS_VEI_QNT´
o q será ?
GOSTEI 0
Gigatel
14/12/2005
O problema está na SQL ? está falando que num exite akele campo...más exite sim...
GOSTEI 0