Ir ao conteúdo
  • Cadastre-se
Entre para seguir isso  
julianopompilio

[Resolvido] Atualizar estoques

Recommended Posts

Olá pessoal...Estou fazendo um sistema onde gerencie toda a materia prima que será utilizada para fazer um alto-falante.Para isso criei a ficha tecnica do produto.(alto-falante e o que compõe ele)

tenho o cadastro de produto acabado,cadastro de materia-prima e por ultimo tenho a Ficha Técnica que é o produto acabado com os itens(no caso materia-prima).Quando for solicitado uma Ordem de Serviço de um alto-falante,ao fechar esta ordem, o sistema deverá atualizar o estoque de produto acabado

e retirar a materia-prima que contem nesse produto(que está na Ficha Técnica).

Consegui aumentar o estoque do acabado...mas não to conseguindo baixar o estoque das matérias-primas.

Detalhe: Uso o Firebird 2.1 e fiz uma trigger no After Insert da Ordem de Serviço.

Fiz assim:


CREATE trigger ti_item_ordem for item_ordem
active after insert position 0
AS
BEGIN
/* REALIZA A ENTRADA NO ESTOQUE DO alto-falante*/
UPDATE PRODUTO
SET PRO_QTDE = (PRO_QTDE + NEW.ITEM_QTDE)
WHERE PRO_COD = NEW.PRO_COD ;
/*baixar materia prima*/
EXECUTE PROCEDURE sp_bx_estoque_materia(NEW.PRO_COD);
END

A trigger esta ok....mas a procedure para baixar a materia prima nao funciona.

olha ó codigo da Procedure. :confused:


CREATE PROCEDURE SP_BX_ESTOQUE_MATERIA (pro_cod integer)
as
declare variable item_qtde integer;
BEGIN
FOR
SELECT ITEM_FICHA.ITEM_QTDE FROM ITEM_FICHA,FICHA_TECNICA
WHERE ITEM_FICHA.FICH_COD = FICHA_TECNICA.FICH_COD AND
FICHA_TECNICA.PRO_COD = :PRO_COD
INTO :ITEM_QTDE
DO
BEGIN
UPDATE PRODUTO
SET PRODUTO.PRO_QTDE = PRODUTO.PRO_QTDE - (SELECT ITEM_FICHA.ITEM_QTDE FROM ITEM_FICHA,FICHA_TECNICA
WHERE ITEM_FICHA.FICH_COD = FICHA_TECNICA.FICH_COD AND
FICHA_TECNICA.PRO_COD = :PRO_COD);
END
SUSPEND;
END

Na verdade a lógica é simples...mas não consigo implementar.

Logica é:Ao fechar a ordem de serviço,eu irei atualizar o estoque dos auto- falantes e abater os itens relacionados a ele que esta na Ficha Técnica.

Por favor quem tiver uma forma melhor posta aee...

Me ajudem aee por favor. :eek:

valeuuuuuu.....

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, não sei do Firebird, mas o SQL Server e também o MySQL são Case Sensitive, se tu cria uma procedure sp_atualiza_estoque, é diferente de outra SP_ATUALIZA_ESTOQUE, não sei se vai rolar

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ja resolvi..na verdade nao era questao de case sensitive....a trigger nao estava chamando a mesma...criei em formato de procedure e ai deu certo..quando funcionou deu errado no funcionamento mas era por que eu estava fazendo a procedure errada. logo abaixo a correta.

 CREATE PROCEDURE SP_BX_ESTOQUE_MATERIA (
numero_os integer)
as
declare variable cod_acabado integer;
declare variable qtde_ordem integer;
declare variable qtde_ficha integer;
declare variable mat_cod integer;
BEGIN
FOR
--IREI PEGAR O CODIGO DO PRODUTO(ACABADO) QUE ESTA NA ORDEM DE SERVIÇO E ARMAZENAR
--NA VARIAVEL
SELECT ITEM_ORDEM.PRO_COD,ITEM_ORDEM.ITEM_QTDE
FROM ITEM_ORDEM
WHERE ITEM_ORDEM.OS_COD = :NUMERO_OS --PARAMETRO
INTO :COD_ACABADO,
:QTDE_ORDEM
DO
--AGORA IREI PERCORRER DESCONTAR O ITEM RELACIONADO NA VARIAVEL (COD_ACABADO)
BEGIN
/* REALIZA A ENTRADA NO ESTOQUE DO PRODUTO ACABADO*/
UPDATE PRODUTO
SET PRO_QTDE = (PRO_QTDE + :QTDE_ORDEM)
WHERE PRO_COD = :COD_ACABADO ;
--AGORA IREI PERCORRER OS ITENS RELACIONADO A COD_ACABADO E DESCONTA-LOS
--PARA ISSO TERIA QUE IR LA NA FICHA VER O CODIGO DO COD_ACABADO E BAIXAR OS ITENS
FOR
SELECT ITEM_FICHA.MAT_COD, ITEM_FICHA.ITEM_QTDE
FROM ITEM_FICHA,FICHA_TECNICA
WHERE ITEM_FICHA.FICH_COD = FICHA_TECNICA.FICH_COD AND
FICHA_TECNICA.PRO_COD = :COD_ACABADO
INTO :MAT_COD,
:QTDE_FICHA
--FAZER O DESCONTO DENTRO DO LOOP
DO BEGIN
--A CADA ITEM QUE ELE ENCONTRA ELE JA VAI BAIXANDO E RETORNA (LOOP)
UPDATE PRODUTO
SET PRODUTO.PRO_QTDE = PRODUTO.PRO_QTDE - :QTDE_FICHA
WHERE PRODUTO.PRO_COD = :MAT_COD;
END
END
END

Mas mesmo assim valeu ai pela a dica...

Valeu!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caso o autor do tópico necessite, o mesmo será reaberto, para isso deverá entrar em contato com a moderação solicitando o desbloqueio.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Visitante
Este tópico está impedido de receber novos posts.
Entre para seguir isso  





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×