[firebase-br] Ajuda sobre atualizacao

RedDevil reddevil em reddevil.eti.br
Qua Nov 2 03:29:24 -03 2005


ola Antonio,


Post By Antonio Reis Magalhães Júnior:
>[cut]
> Estou querendo realizar o seguinte: Quando dar entrada em um produto, automaticamente fazer a verificação na tabela de estoque_atual, se existir atualizar, se não incluir o produto com sua quantidade. 
> 
> Quando der saída subtrair do estoque_atual.

para fazer essa historia diretamente no banco, primeiro voce usa o 
IBExpert (ou a tua ferramenta administrativa favorita) para criar no teu 
banco essa Stored Procedure que eu estou colocando na roda ae abaixo...

e entao, quando voce for fazer uma movimentaçao no teu estoque, voce faz 
essa movimentaçao a mediante o uso dessa SP, passando para ela, como 
parametros, o codigo e o nome do produto, a quantidade que esta sendo 
movimentada e o tipo de movimento que voce esta fazendo: "E" para 
entrada ou "S" para saida de marcadoria...

/* ----------------- inicio da SP ---------------------- */
create procedure artemis (
pcod integer,
pnome varchar(50),
pqtde integer,
pmov char(1)
)
as
declare variable wexicod integer;
begin

if (:pmov = 'S') then /* saida de mercadoria */
begin

/* grava saida do produto */
insert into saida_estoque (cod, nome, qtde)
values (:pcod, :pnome, :pqtde);

/* atualiza estoque */
update estoque_atual ea
set ea.qtde = ea.qtde - :pqtde
where ea.cod = :pcod;

/* encerra a stored procedure */
exit;

end

else /* entrada de mercadoria */

begin

/* grava entrada do produto */
insert into entrada_estoque (cod, nome, qtde)
values (:pcod, :pnome, :pqtde);


/* verifica a existencia do produto no estoque */
select count(ea.cod) from estoque_atual ea
where ea.cod = :pcod
into :wexicod;

if (:wexicod <> 0) then /* produto existe no estoque */
begin

/* apenas atualiza estoque */
update estoque_atual ea
set ea.qtde = ea.qtde + :pqtde
where ea.cod = :pcod;

end

else /* produto nao existe no estoque */
begin

/* inclui o produto no estoque */
insert into estoque_atual (cod, nome, qtde)
values (:pcod, :pnome, :pqtde);

end

/* encerra a stored procedure */
exit;

end

end
/* -------------------- final da SP ----------------------- */


Post Scriptum: nesse exemplo, eu usei a quantidade que eh movimentada em 
sabor integer, mas se voce trabalha com quantidades que nao sejam sempre 
inteiras, altere o parametro "pqtde" para, por exemplo, numeric(10,2).

boa sorte, e qq coisa, falae...


[]s
força sempre.
ate +++

-- 
Luiz "RedDevil" Stefanski - Linux User #399026
http://www.RedDevil.eti.br - Delphi 4 Powered by IBObjects
exemplos e dicas sobre o IBObjects:
http://www.firebase.com.br/cgi-bin/firebase.cgi/dnld?ID=165
compilaçao/instalaçao do IBObjects sabor BPG:
http://www.firebase.com.br/cgi-bin/firebase.cgi/artigo?ID=630





Mais detalhes sobre a lista de discussão lista