[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