Olá Pessoal,

 

Estou com um problema aqui que começou após criar umas Procedures e Triggers
para controle de Estoque.

 

Criei uma tabela de movimentação de produtos e nela as triggers de
atualização de estoque na tabela do produto. 

Para gravar a movimentação do produto uso uma SP que passado um pedido como
parâmetro lança todos os itens do mesmo na tabela de movimentação

Funcionou tudo certo como eu desejava porem a tabela de movimentação do
produto começou a corromper.

Se alguém poder me ajudar serei muito grato.

 

 

/***************************************************************************
***/

/****                          Stored Procedures
****/

/***************************************************************************
***/

 

CREATE PROCEDURE SP_EXTB_COMPRA (

    NR_DOC VARCHAR(10),

    COD_FORN VARCHAR(5))

AS

BEGIN

  EXIT;

END^

 

 

CREATE PROCEDURE SP_EXTB_LOTE (

    COD_EMP INTEGER,

    COD_LOTE VARCHAR(6))

AS

BEGIN

  EXIT;

END^

 

 

CREATE PROCEDURE SP_EXTB_VENDA (

    COD_EMP INTEGER,

    COD_PED INTEGER)

AS

BEGIN

  EXIT;

END^

 

 

CREATE PROCEDURE SP_MOVB_COMPRA (

    NR_DOC VARCHAR(10),

    COD_FORN VARCHAR(5))

AS

BEGIN

  EXIT;

END^

 

 

CREATE PROCEDURE SP_MOVB_LOTE (

    COD_EMP INTEGER,

    COD_LOTE VARCHAR(6))

AS

BEGIN

  EXIT;

END^

 

 

CREATE PROCEDURE SP_MOVB_VENDA (

    COD_EMP INTEGER,

    COD_PED INTEGER)

AS

BEGIN

  EXIT;

END^

 

 

 

SET TERM ; ^

 

 

/***************************************************************************
***/

/****                                Tables
****/

/***************************************************************************
***/

 

 

 

CREATE TABLE MOV_B (

    COD_MPROD  INTEGER NOT NULL,

    COD_PROD   VARCHAR(5) NOT NULL,

    TELA       CHAR(1) NOT NULL,

    DATA_MOVI  TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,

    QTD_MOV    NUMERIC(12,3) DEFAULT 0 NOT NULL,

    COD_EMP    INTEGER NOT NULL,

    COD_PED    INTEGER,

    COD_FORN   VARCHAR(5),

    NR_DOC     VARCHAR(10),

    NR_PRO     VARCHAR(6),

    COD_DEV    VARCHAR(5),

    TIPO_SAI   CHAR(1),

    COD_LOTE   VARCHAR(6)

);

 

 

 

 

 

/***************************************************************************
***/

/****                         Triggers for tables
****/

/***************************************************************************
***/

 

 

 

/* Trigger: TG_ADD_ESTOQUE */

CREATE TRIGGER TG_ADD_ESTOQUE FOR MOV_B

ACTIVE BEFORE INSERT POSITION 0

AS

declare variable VQTDE NUMERIC(12,3);

begin

  /* Adiciona Movimento ao estoque */

  IF(NEW.TIPO_SAI = 'S') THEN

    VQTDE = -NEW.QTD_MOV;

  ELSE IF(NEW.TIPO_SAI = 'E') THEN

    VQTDE = +NEW.QTD_MOV;

 

  IF ((NEW.TIPO_SAI = 'S') OR (NEW.TIPO_SAI = 'E'))  THEN

    UPDATE EST_PROD SET

       QTD_ATU_B = QTD_ATU_B + :VQTDE

       WHERE COD_PROD = NEW.COD_PROD;

end

^

 

 

/* Trigger: TG_REM_ESTOQUE */

CREATE TRIGGER TG_REM_ESTOQUE FOR MOV_B

ACTIVE AFTER DELETE POSITION 0

AS

declare variable VQTDE NUMERIC(12,3);

begin

  /* Adiciona Movimento ao estoque */

  IF(OLD.TIPO_SAI = 'S') THEN

    VQTDE = +OLD.QTD_MOV;

  ELSE IF(OLD.TIPO_SAI = 'E') THEN

    VQTDE = -OLD.QTD_MOV;

 

  IF ((OLD.TIPO_SAI = 'S') OR (OLD.TIPO_SAI = 'E'))  THEN

    UPDATE EST_PROD SET

       QTD_ATU_B = QTD_ATU_B + :VQTDE

       WHERE COD_PROD = OLD.COD_PROD;

end

^

 

 

SET TERM ; ^

 

 

 

/***************************************************************************
***/

/****                          Stored Procedures
****/

/***************************************************************************
***/

 

 

SET TERM ^ ;

 

ALTER PROCEDURE SP_EXTB_COMPRA (

    NR_DOC VARCHAR(10),

    COD_FORN VARCHAR(5))

AS

BEGIN

 

/* Deleta Movimento de Venda */

 

DELETE FROM MOV_B

  WHERE NR_DOC = :NR_DOC AND COD_FORN = :COD_FORN AND TELA = 'C';

 

END

^

 

ALTER PROCEDURE SP_EXTB_LOTE (

    COD_EMP INTEGER,

    COD_LOTE VARCHAR(6))

AS

BEGIN

 

/* Deleta Movimento de Lote */

 

DELETE FROM MOV_B

  WHERE COD_EMP = :COD_EMP AND COD_LOTE = :COD_LOTE AND TELA = 'L';

 

END

^

 

ALTER PROCEDURE SP_EXTB_VENDA (

    COD_EMP INTEGER,

    COD_PED INTEGER)

AS

BEGIN

 

/* Deleta Movimento de Venda */

 

DELETE FROM MOV_B

  WHERE COD_EMP = :COD_EMP AND COD_PED = :COD_PED AND TELA = 'V';

 

END

^

 

ALTER PROCEDURE SP_MOVB_COMPRA (

    NR_DOC VARCHAR(10),

    COD_FORN VARCHAR(5))

AS

BEGIN

 

/* Deleta Movimento de Venda */

 

DELETE FROM MOV_B

  WHERE NR_DOC = :NR_DOC AND COD_FORN = :COD_FORN AND TELA = 'C';

 

/* Inclui Movimento de Venda */

 

INSERT INTO MOV_B

  (COD_MPROD, COD_PROD, TELA, DATA_MOVI, QTD_MOV, COD_EMP, NR_DOC, COD_FORN,
TIPO_SAI)

SELECT GEN_ID (GEN_MOV_B, 1), ITN.COD_PROD, 'C', CURRENT_TIMESTAMP,
ITN.QTD_02, CAB.COD_EMP, ITN.NR_DOC, ITN.COD_FORN, IIF(CFO.TIPO_E_S = '1',
'E', iif(CFO.TIPO_E_S = '2', 'S', 'N'))

  FROM ENT_ITN ITN

     LEFT OUTER JOIN ENT_CAB CAB ON (CAB.NR_DOC = ITN.NR_DOC AND
CAB.COD_FORN = ITN.COD_FORN)

     LEFT OUTER JOIN CFOP CFO ON (CFO.CFOP = CAB.CFOP)

  WHERE ITN.NR_DOC = :NR_DOC AND ITN.COD_FORN = :COD_FORN;

 

END

^

 

ALTER PROCEDURE SP_MOVB_LOTE (

    COD_EMP INTEGER,

    COD_LOTE VARCHAR(6))

AS

BEGIN

 

/* Deleta Movimento de Lote */

 

DELETE FROM MOV_B

  WHERE COD_EMP = :COD_EMP AND COD_LOTE = :COD_LOTE AND TELA = 'L';

 

/* Inclui Movimento de Lote */

 

INSERT INTO MOV_B

  (COD_MPROD, COD_PROD, TELA, DATA_MOVI, QTD_MOV, COD_EMP, COD_LOTE,
TIPO_SAI)

SELECT GEN_ID (GEN_MOV_B, 1), ITN.COD_PROD, 'L', CURRENT_TIMESTAMP, ITN.QTD,
ITN.COD_EMP, ITN.COD_LOTE, CAB.TIPO

  FROM LOTE_ITN ITN

     LEFT OUTER JOIN LOTE_CAB CAB ON (CAB.COD_EMP = ITN.COD_EMP AND
CAB.COD_LOTE = ITN.COD_LOTE)

  WHERE ITN.COD_EMP = :COD_EMP AND ITN.COD_LOTE = :COD_LOTE;

 

END

^

 

ALTER PROCEDURE SP_MOVB_VENDA (

    COD_EMP INTEGER,

    COD_PED INTEGER)

AS

BEGIN

 

/* Deleta Movimento de Venda */

 

DELETE FROM MOV_B

  WHERE COD_EMP = :COD_EMP AND COD_PED = :COD_PED AND TELA = 'V';

 

/* Inclui Movimento de Venda */

 

INSERT INTO MOV_B

  (COD_MPROD, COD_PROD, TELA, DATA_MOVI, QTD_MOV, COD_EMP, COD_PED,
TIPO_SAI)

SELECT GEN_ID (GEN_MOV_B, 1), ITN.COD_PROD, 'V', CURRENT_TIMESTAMP,
ITN.QTD_01, ITN.COD_EMP, ITN.COD_PED, IIF(CFO.TIPO_E_S = '1', 'E',
iif(CFO.TIPO_E_S = '2', 'S', 'N'))

  FROM SAI_ITN ITN

     LEFT OUTER JOIN SAI_CAB CAB ON (CAB.COD_EMP = ITN.COD_EMP AND
CAB.COD_PED = ITN.COD_PED)

     LEFT OUTER JOIN CFOP CFO ON (CFO.CFOP = CAB.CFOP)

 

  WHERE ITN.COD_EMP = :COD_EMP AND ITN.COD_PED = :COD_PED;

 

END

^

 

 

SET TERM ; ^



[As partes desta mensagem que não continham texto foram removidas]

Responder a