Trigger / Procedure, O q está de errado ?

20/12/2004

0

Olá!
Sou Desenv. D7 + Dbexpress+ IB/FB.
Tenho um tabela Mestre x Detalhe.
E desejaria fazer O seguinte:
Apos o AFTER INSERT da tabela MASTER, Ler os Itens da tabela detalhe
e atualizar o estoque.


Fiz alguns testes, a procedure LER_NFE_ITENS e ENTRADA_ESTOQUE é acessada mas o cadastro de produtos não é alterado.
já fiz de tudo, mas não consigo saber o porque disto.
Veja meus procedimentos abaixo.


A quem puder me ajudar, desde já meus agradecimentos.

ANT.CARLOS/SP



-----AFTER INSERT MASTER DETALHE--------

CREATE TRIGGER NFE_ENTRADA_AI FOR NFENTRADA
ACTIVE AFTER INSERT POSITION 0
AS
begin
Execute Procedure Ler_nfe_itens(New.codnfe,´I´,New.codforn,New.tipo_nota);
end


-----------------------------------------------------
CREATE PROCEDURE LER_NFE_ITENS (
P_CODNFE INTEGER,
P_OPCAO CHAR(1),
P_CODFORN SMALLINT,
P_TIPO_NOTA CHAR(1))
AS
DECLARE VARIABLE P_QTDE NUMERIC(12,2);
DECLARE VARIABLE P_CODPROD NUMERIC(12,2);
DECLARE VARIABLE P_QTDCNF NUMERIC(12,2);
DECLARE VARIABLE P_ATU_PRECO CHAR(1);
DECLARE VARIABLE P_PRECPRA NUMERIC(12,2);
DECLARE VARIABLE P_PRECUSTO NUMERIC(12,2);
DECLARE VARIABLE P_PREVENDA NUMERIC(12,2);
DECLARE VARIABLE P_VALOR NUMERIC(12,2);
begin
/* Procedure Text */
P_QTDCNF = 0;

IF (P_OPCAO = ´I´) Then Begin
/* Ler os itens da nota e baixo estoque */

FOR SELECT CODPROD,QTDE,ATU_PRECO,PRECO,CUSTO_MERC,
PRECO_VENDA,SUBTOTAL
FROM NFEITENS
WHERE CODNFE =:P_CODNFE
INTO P_CODPROD,P_QTDE,P_ATU_PRECO,P_PRECPRA,
P_PRECUSTO,P_PREVENDA,P_VALOR
DO Begin
IF (:P_TIPO_NOTA = ´I´) Then
P_QTDCNF =:P_QTDE;

Execute procedure Entrada_estoque
(:P_CODPROD,:P_QTDE,P_QTDCNF,´NFE´,P_ATU_PRECO,
P_PRECPRA,P_PRECUSTO,P_PREVENDA,:P_CODFORN,P_VALOR);
End
End
suspend;
end

--------------------------------------
CREATE PROCEDURE ENTRADA_ESTOQUE (
P_CODPROD VARCHAR(15),
P_QTDE NUMERIC(12,3),
P_QTDE_CNF NUMERIC(12,3),
P_OPCAO CHAR(3),
P_ATU_PRECO CHAR(1),
P_PRECPRA NUMERIC(12,2),
P_PRECUSTO NUMERIC(12,2),
P_PREVENDA NUMERIC(12,2),
P_CODFORN NUMERIC(12,2),
P_VALOR NUMERIC(12,2))
AS
begin
IF (:P_OPCAO = ´NFE´) Then Begin
/* Atualiza estoque de produtos */
/* Entrada via Nota Fiscal de entrada */
IF (:P_ATU_PRECO = ´T´) THEN BEGIN
UPDATE CADPROD
SET PRECOMPRA =:P_PRECPRA, PRECUSTO =:P_PRECUSTO,
PREVENDA =:P_PREVENDA, QTDE =(QTDE+:P_QTDE),
QTD_CNF =(QTD_CNF+:P_QTDE_CNF), CODFORN =:P_CODFORN,
DTATULZ =´NOW´,VRTOTNF=(VRTOTNF+:P_VALOR)
WHERE (CODPROD =:P_CODPROD);
END ELSE BEGIN
UPDATE CADPROD
SET PRECOMPRA=:P_PRECPRA,PRECUSTO=:P_PRECUSTO,
QTDE=QTDE+:P_QTDE),QTD_CNF=QTD_CNF+:P_QTDE_CNF),
CODFORN=:P_CODFORN,DTATULZ=´NOW´,
VRTOTNF= (VRTOTNF+:P_VALOR)
WHERE (CODPROD =:P_CODPROD);
End
End Else Begin
/* Procedure Text */
UPDATE Cadprod
SET QTDE = (QTDE+:P_QTDE),
QTD_CNF=(QTD_CNF+:P_QTDE_CNF),DTULTVD=´NOW´,
VRTOTNF=(VRTOTNF+:P_VALOR)
WHERE Codprod =:P_CODPROD;
End
suspend;
end
-------------------------------------


Ant.carlos/sp

Ant.carlos/sp

Responder

Posts

21/12/2004

Sremulador

voce esta dando o commit em sua aplicacao ?


Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar