/*==============================================================*/ /*==============================================================*/ /*============= A T E N Ç Ã O ===============*/ /*==============================================================*/ /* MUITO CUIDADO NESTA ALTERAÇÃO DE BASE, MEXE NAS ENTRADAS, */ /* E DEVE SER EXECUTADA EM ETADAS JUNTO COMO A FUNÇÃO NO SQL */ /* DO SISTEMA DE NOME: "Seq. Entradas 06/2007" */ /*==============================================================*/ /*==============================================================*/ /*================*/ /* Versão: 2.3.25 */ /*==============================================================*/ /*============= PRIMEIRA ETAPA ===============*/ /*==============================================================*/ /*==============================================================*/ /* Table: ITENS_ENTRADA */ /*==============================================================*/ ALTER TABLE ITENS_ENTRADA ADD SEQ_INCLUSAO INTEGER; COMMIT WORK; /*==============================================================*/ /* Table: PARCELAS_ENTRADAS */ /*==============================================================*/ ALTER TABLE PARCELAS_ENTRADAS ADD SEQ_INCLUSAO INTEGER; COMMIT WORK; DROP TRIGGER TG_UPDATE_ENTRADAS; DROP TRIGGER TG_EXCLUI_ENTRADAS; COMMIT WORK; /*==============================================================*/ /*============= SEGUNDA ETAPA ================*/ /*==============================================================*/ /* RODAR FUNÇÃO NO SISTEMA: "Seq. Entradas 06/2007" */ /*==============================================================*/ /*============= TERCEIRA ETAPA ===============*/ /*==============================================================*/ ALTER TABLE ITENS_ENTRADA DROP CONSTRAINT FK_ITENS_ENTRADA_ENTRADAS; ALTER TABLE ITENS_ENTRADA DROP CONSTRAINT FK_ITENS_ENTRA_ENTRADAS; ALTER TABLE ITENS_ENTRADA DROP CONSTRAINT PK_ITENS_ENTRADA; COMMIT WORK; ALTER TABLE PARCELAS_ENTRADAS DROP CONSTRAINT FK_PARCELAS_ENTRADAS_ENTRADAS; ALTER TABLE PARCELAS_ENTRADAS DROP CONSTRAINT PK_PARCELAS_ENTRADAS; COMMIT WORK; alter table PARCELAS_ENTRADAS drop COD_CLIENTE; alter table ITENS_ENTRADA drop COD_CLIENTE; COMMIT WORK; update RDB$RELATION_FIELDS set RDB$NULL_FLAG = 1 where (RDB$FIELD_NAME = 'SEQ_INCLUSAO') and (RDB$RELATION_NAME = 'ITENS_ENTRADA'); update RDB$RELATION_FIELDS set RDB$NULL_FLAG = 1 where (RDB$FIELD_NAME = 'SEQ_INCLUSAO') and (RDB$RELATION_NAME = 'PARCELAS_ENTRADAS'); update RDB$RELATION_FIELDS set RDB$NULL_FLAG = 1 where (RDB$FIELD_NAME = 'SEQ_INCLUSAO') and (RDB$RELATION_NAME = 'ENTRADAS'); COMMIT WORK; ALTER TABLE ENTRADAS DROP CONSTRAINT PK_ENTRADAS; COMMIT WORK; alter table ENTRADAS add constraint PK_ENTRADAS primary key (COD_EMPRESA,TIPO_CONTROL,SEQ_INCLUSAO,DOCUMENTO); COMMIT WORK; alter table PARCELAS_ENTRADAS add constraint PK_PARCELAS_ENTRADAS primary key (COD_EMPRESA,TIPO_CONTROL,SEQ_INCLUSAO,DOCUMENTO,SEQUENCIA); alter table PARCELAS_ENTRADAS add constraint FK_PARCELAS_ENTRA_ENTRADAS foreign key (COD_EMPRESA,TIPO_CONTROL,SEQ_INCLUSAO,DOCUMENTO) references ENTRADAS(COD_EMPRESA,TIPO_CONTROL,SEQ_INCLUSAO,DOCUMENTO); COMMIT WORK; alter table ITENS_ENTRADA add constraint PK_ITENS_ENTRADA primary key (COD_EMPRESA,TIPO_CONTROL,SEQ_INCLUSAO,DOCUMENTO,SEQUENCIA); alter table ITENS_ENTRADA add constraint FK_ITENS_ENTRA_ENTRADAS foreign key (COD_EMPRESA,TIPO_CONTROL,SEQ_INCLUSAO,DOCUMENTO) references ENTRADAS(COD_EMPRESA,TIPO_CONTROL,SEQ_INCLUSAO,DOCUMENTO); COMMIT WORK; /*==============================================================*/ /* Table: ENTRADAS */ /*==============================================================*/ ALTER TABLE ENTRADAS ADD CANCELADA CHAR(1); COMMIT WORK; UPDATE ENTRADAS SET CANCELADA = 'N'; COMMIT WORK; /*==============================================================*/ /* Trigger: TG_UPDATE_ENTRADAS */ /*==============================================================*/ SET TERM ^; CREATE TRIGGER TG_UPDATE_ENTRADAS FOR ENTRADAS BEFORE UPDATE POSITION 0 AS DECLARE VARIABLE varCOD_EMPRESA INTEGER; DECLARE VARIABLE varSEQ_INCLUSAO INTEGER; DECLARE VARIABLE varDOCUMENTO VARCHAR(20); DECLARE VARIABLE varVLR_RATEIO DECIMAL(15,2); DECLARE VARIABLE varVLR_ICMS DECIMAL(15,2); DECLARE VARIABLE varVLR_IPI DECIMAL(15,2); DECLARE VARIABLE varBASE_ICMS DECIMAL(15,2); DECLARE VARIABLE varRAT_ICMS DECIMAL(15,2); DECLARE VARIABLE varRAT_IPI DECIMAL(15,2); DECLARE VARIABLE varRAT_BASE_ICMS DECIMAL(15,2); DECLARE VARIABLE varSEQUENCIA INTEGER; DECLARE VARIABLE varVLT_TOTAL_ITEM DECIMAL(15,2); BEGIN /* = = Rateia Acrescimos e descontos entre os Itens de Entrada= =*/ IF ((NEW.VLR_TOTAL_MERC IS NOT NULL) AND (NEW.VLR_TOTAL_MERC > 0)) THEN BEGIN UPDATE ITENS_ENTRADA IET SET IET.RAT_VALOR = (NEW.VLR_FRETE * (IET.VLR_TOTAL_ITEM / NEW.VLR_TOTAL_MERC)) + (NEW.VLR_SEGURO * (IET.VLR_TOTAL_ITEM / NEW.VLR_TOTAL_MERC)) + (NEW.VLR_DESPESAS * (IET.VLR_TOTAL_ITEM / NEW.VLR_TOTAL_MERC)) - (NEW.VLR_DESCONTO * (IET.VLR_TOTAL_ITEM / NEW.VLR_TOTAL_MERC)) + (NEW.VLR_ACR_EXTRA * (IET.VLR_TOTAL_ITEM / NEW.VLR_TOTAL_MERC)) - (NEW.VLR_DESC_EXTRA * (IET.VLR_TOTAL_ITEM / NEW.VLR_TOTAL_MERC)) + (NEW.VLR_FRETE_CONH * (IET.VLR_TOTAL_ITEM / NEW.VLR_TOTAL_MERC)) WHERE IET.COD_EMPRESA = NEW.COD_EMPRESA AND IET.SEQ_INCLUSAO = NEW.SEQ_INCLUSAO AND IET.DOCUMENTO = NEW.DOCUMENTO AND IET.TIPO_CONTROL = NEW.TIPO_CONTROL; END /* = = Faz somatorios de valores dos Itens de Entrada e procura o primeiro item= =*/ SELECT IET.COD_EMPRESA, IET.SEQ_INCLUSAO, IET.DOCUMENTO, SUM(IET.RAT_VALOR), MIN(IET.SEQUENCIA), SUM(IET.BASE_ICMS), SUM(IET.VLR_ICMS), SUM(IET.VLR_IPI) FROM ITENS_ENTRADA IET WHERE IET.COD_EMPRESA = NEW.COD_EMPRESA AND IET.SEQ_INCLUSAO = NEW.SEQ_INCLUSAO AND IET.DOCUMENTO = NEW.DOCUMENTO AND IET.TIPO_CONTROL = NEW.TIPO_CONTROL GROUP BY IET.COD_EMPRESA, IET.SEQ_INCLUSAO, IET.DOCUMENTO INTO :varCOD_EMPRESA, :varSEQ_INCLUSAO, :varDOCUMENTO, :varVLR_RATEIO, :varSEQUENCIA, :varBASE_ICMS, :varVLR_ICMS, :varVLR_IPI; /* = = Calcula a diferenca entre a soma dos Itens de Entrada e o valores Totais na Entrada no Rateio e grava a diferenca no primeiro item de entrada = =*/ UPDATE ITENS_ENTRADA IET SET IET.RAT_VALOR = IET.RAT_VALOR - (:varVLR_RATEIO - (NEW.VLR_FRETE + NEW.VLR_SEGURO + NEW.VLR_DESPESAS + NEW.VLR_FRETE_CONH - NEW.VLR_DESCONTO + NEW.VLR_ACR_EXTRA - NEW.VLR_DESC_EXTRA)) WHERE IET.COD_EMPRESA = NEW.COD_EMPRESA AND IET.SEQ_INCLUSAO = NEW.SEQ_INCLUSAO AND IET.DOCUMENTO = NEW.DOCUMENTO AND IET.TIPO_CONTROL = NEW.TIPO_CONTROL AND IET.SEQUENCIA = :varSEQUENCIA; /* ========= TRATA ICMS ================================================================== */ /* = = Rateia Valores de Icms e Base Icms que alem dos Itens = =*/ IF ((varVLR_ICMS > 0) AND (varBASE_ICMS > 0)) THEN BEGIN UPDATE ITENS_ENTRADA IET SET IET.RAT_ICMS = (NEW.VLR_ICMS - :varVLR_ICMS) * (IET.VLR_ICMS / :varVLR_ICMS), IET.RAT_BASE_ICMS = (NEW.BASE_ICMS - :varBASE_ICMS) * (IET.BASE_ICMS / :varBASE_ICMS) WHERE IET.COD_EMPRESA = NEW.COD_EMPRESA AND IET.SEQ_INCLUSAO = NEW.SEQ_INCLUSAO AND IET.DOCUMENTO = NEW.DOCUMENTO AND IET.TIPO_CONTROL = NEW.TIPO_CONTROL AND IET.VLR_ICMS > 0; END /* = = Faz somatorio do Icms e Base Icms e procura o primeiro item com ICMS = =*/ SELECT IET.COD_EMPRESA, IET.SEQ_INCLUSAO, IET.DOCUMENTO, MIN(IET.SEQUENCIA), SUM(IET.RAT_ICMS), SUM(IET.RAT_BASE_ICMS) FROM ITENS_ENTRADA IET WHERE IET.COD_EMPRESA = NEW.COD_EMPRESA AND IET.SEQ_INCLUSAO = NEW.SEQ_INCLUSAO AND IET.DOCUMENTO = NEW.DOCUMENTO AND IET.TIPO_CONTROL = NEW.TIPO_CONTROL AND IET.VLR_ICMS > 0 GROUP BY IET.COD_EMPRESA, IET.SEQ_INCLUSAO, IET.DOCUMENTO INTO :varCOD_EMPRESA, :varSEQ_INCLUSAO, :varDOCUMENTO, :varSEQUENCIA, :varRAT_ICMS, :varRAT_BASE_ICMS; /* = = Grava a diferenca no primeiro item de entrada com ICMS= =*/ IF ((varVLR_ICMS > 0) AND (varBASE_ICMS > 0)) THEN BEGIN UPDATE ITENS_ENTRADA IET SET IET.RAT_ICMS = IET.RAT_ICMS + (NEW.VLR_ICMS - (:varRAT_ICMS + :varVLR_ICMS)), IET.RAT_BASE_ICMS = IET.RAT_BASE_ICMS + (NEW.BASE_ICMS - (:varRAT_BASE_ICMS + :varBASE_ICMS)) WHERE IET.COD_EMPRESA = NEW.COD_EMPRESA AND IET.SEQ_INCLUSAO = NEW.SEQ_INCLUSAO AND IET.DOCUMENTO = NEW.DOCUMENTO AND IET.TIPO_CONTROL = NEW.TIPO_CONTROL AND IET.SEQUENCIA = :varSEQUENCIA; END /* ============ TRATA IPI ============================================================= */ /* = = Rateia Valores de IPI que alem dos Itens = =*/ IF (varVLR_IPI > 0) THEN BEGIN UPDATE ITENS_ENTRADA IET SET IET.RAT_IPI = (NEW.VLR_IPI - :varVLR_IPI) * (IET.VLR_IPI / :varVLR_IPI) WHERE IET.COD_EMPRESA = NEW.COD_EMPRESA AND IET.SEQ_INCLUSAO = NEW.SEQ_INCLUSAO AND IET.DOCUMENTO = NEW.DOCUMENTO AND IET.TIPO_CONTROL = NEW.TIPO_CONTROL AND IET.VLR_IPI > 0; END /* = = Faz somatorio do IPI e procura o primeiro item com IPI = =*/ SELECT IET.COD_EMPRESA, IET.SEQ_INCLUSAO, IET.DOCUMENTO, MIN(IET.SEQUENCIA), SUM(IET.RAT_IPI) FROM ITENS_ENTRADA IET WHERE IET.COD_EMPRESA = NEW.COD_EMPRESA AND IET.SEQ_INCLUSAO = NEW.SEQ_INCLUSAO AND IET.DOCUMENTO = NEW.DOCUMENTO AND IET.TIPO_CONTROL = NEW.TIPO_CONTROL AND IET.VLR_IPI > 0 GROUP BY IET.COD_EMPRESA, IET.SEQ_INCLUSAO, IET.DOCUMENTO INTO :varCOD_EMPRESA, :varSEQ_INCLUSAO, :varDOCUMENTO, :varSEQUENCIA, :varRAT_IPI; /* = = Grava a diferenca no primeiro item de entrada com IPI = =*/ IF (varVLR_IPI > 0) THEN BEGIN UPDATE ITENS_ENTRADA IET SET IET.RAT_IPI = IET.RAT_IPI + (NEW.VLR_IPI - (:varRAT_IPI + :varVLR_IPI)) WHERE IET.COD_EMPRESA = NEW.COD_EMPRESA AND IET.SEQ_INCLUSAO = NEW.SEQ_INCLUSAO AND IET.DOCUMENTO = NEW.DOCUMENTO AND IET.TIPO_CONTROL = NEW.TIPO_CONTROL AND IET.SEQUENCIA = :varSEQUENCIA; END /* == TRATA SUBSTITUIÇÃO TRIBUTÁRIA */ IF (NEW.ICMS_SUBST > 0) THEN BEGIN /* = = Faz somatorios de valores dos Itens de Entrada que tem substituição e procura o primeiro item= =*/ SELECT IET.COD_EMPRESA, IET.SEQ_INCLUSAO, IET.DOCUMENTO, MIN(IET.SEQUENCIA), SUM(IET.VLR_TOTAL_ITEM) FROM ITENS_ENTRADA IET WHERE IET.COD_EMPRESA = NEW.COD_EMPRESA AND IET.SEQ_INCLUSAO = NEW.SEQ_INCLUSAO AND IET.DOCUMENTO = NEW.DOCUMENTO AND IET.TIPO_CONTROL = NEW.TIPO_CONTROL AND (IET.CST_TRIB = '10' OR IET.CST_TRIB = '30' OR IET.CST_TRIB = '60' OR IET.CST_TRIB = '70') GROUP BY IET.COD_EMPRESA, IET.SEQ_INCLUSAO, IET.DOCUMENTO INTO :varCOD_EMPRESA, :varSEQ_INCLUSAO, :varDOCUMENTO, :varSEQUENCIA, :varVLT_TOTAL_ITEM; /* == Passa todos os itens que tem susbstituição e rateia o valor da mesma*/ UPDATE ITENS_ENTRADA IET SET IET.RAT_ICMS_SUBST = (NEW.ICMS_SUBST * (IET.VLR_TOTAL_ITEM / :varVLT_TOTAL_ITEM)) WHERE IET.COD_EMPRESA = NEW.COD_EMPRESA AND IET.SEQ_INCLUSAO = NEW.SEQ_INCLUSAO AND IET.DOCUMENTO = NEW.DOCUMENTO AND IET.TIPO_CONTROL = NEW.TIPO_CONTROL AND (IET.CST_TRIB = '10' OR IET.CST_TRIB = '30' OR IET.CST_TRIB = '60' OR IET.CST_TRIB = '70'); END END^ SET TERM;^ COMMIT WORK; /*==============================================================*/ /* Trigger: TG_EXCLUI_ENTRADAS */ /*==============================================================*/ SET TERM ^; CREATE TRIGGER TG_EXCLUI_ENTRADAS FOR ENTRADAS ACTIVE BEFORE DELETE POSITION 0 AS BEGIN DELETE FROM parcelas_entradas WHERE COD_EMPRESA = OLD.COD_EMPRESA AND TIPO_CONTROL = OLD.TIPO_CONTROL AND SEQ_INCLUSAO = OLD.SEQ_INCLUSAO AND DOCUMENTO = OLD.DOCUMENTO; DELETE FROM itens_entrada WHERE COD_EMPRESA = OLD.COD_EMPRESA AND TIPO_CONTROL = OLD.TIPO_CONTROL AND SEQ_INCLUSAO = OLD.SEQ_INCLUSAO AND DOCUMENTO = OLD.DOCUMENTO; END^ SET TERM;^ COMMIT WORK;