/*==============================================================*/ /* Table: EMPRESAS */ /*==============================================================*/ ALTER TABLE EMPRESAS ADD CAMINHO_LOGO VARCHAR(100); COMMIT WORK; /*==============================================================*/ /* Table: OPER_FISCAL */ /*==============================================================*/ ALTER TABLE OPER_FISCAL ADD TIPO_OPER CHAR(1); COMMIT WORK; /*==============================================================*/ /* Table: ITENS_ENTRADA */ /*==============================================================*/ ALTER TABLE ITENS_ENTRADA ADD RAT_IPI NUMERIC(15,2); COMMIT WORK; /*==============================================================*/ /* Table: ENTRADAS */ /*==============================================================*/ SET TERM ^; ALTER TRIGGER TG_UPDATE_ENTRADAS ACTIVE BEFORE UPDATE POSITION 0 AS DECLARE VARIABLE varCOD_EMPRESA INTEGER; DECLARE VARIABLE varCOD_CLIENTE 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; 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.COD_CLIENTE = NEW.COD_CLIENTE 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.COD_CLIENTE, 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.COD_CLIENTE = NEW.COD_CLIENTE AND IET.DOCUMENTO = NEW.DOCUMENTO AND IET.TIPO_CONTROL = NEW.TIPO_CONTROL GROUP BY IET.COD_EMPRESA, IET.COD_CLIENTE, IET.DOCUMENTO INTO :varCOD_EMPRESA, :varCOD_CLIENTE, :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.COD_CLIENTE = NEW.COD_CLIENTE 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.COD_CLIENTE = NEW.COD_CLIENTE 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.COD_CLIENTE, 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.COD_CLIENTE = NEW.COD_CLIENTE AND IET.DOCUMENTO = NEW.DOCUMENTO AND IET.TIPO_CONTROL = NEW.TIPO_CONTROL AND IET.VLR_ICMS > 0 GROUP BY IET.COD_EMPRESA, IET.COD_CLIENTE, IET.DOCUMENTO INTO :varCOD_EMPRESA, :varCOD_CLIENTE, :varDOCUMENTO, :varSEQUENCIA, :varRAT_ICMS, varRAT_BASE_ICMS; /* = = Grava a diferenca no primeiro item de entrada com ICMS= =*/ 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.COD_CLIENTE = NEW.COD_CLIENTE AND IET.DOCUMENTO = NEW.DOCUMENTO AND IET.TIPO_CONTROL = NEW.TIPO_CONTROL AND IET.SEQUENCIA = :varSEQUENCIA; /* ============ 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.COD_CLIENTE = NEW.COD_CLIENTE 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.COD_CLIENTE, IET.DOCUMENTO, MIN(IET.SEQUENCIA), SUM(IET.RAT_IPI) FROM ITENS_ENTRADA IET WHERE IET.COD_EMPRESA = NEW.COD_EMPRESA AND IET.COD_CLIENTE = NEW.COD_CLIENTE AND IET.DOCUMENTO = NEW.DOCUMENTO AND IET.TIPO_CONTROL = NEW.TIPO_CONTROL AND IET.VLR_IPI > 0 GROUP BY IET.COD_EMPRESA, IET.COD_CLIENTE, IET.DOCUMENTO INTO :varCOD_EMPRESA, :varCOD_CLIENTE, :varDOCUMENTO, :varSEQUENCIA, :varRAT_IPI; /* = = Grava a diferenca no primeiro item de entrada com IPI = =*/ 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.COD_CLIENTE = NEW.COD_CLIENTE AND IET.DOCUMENTO = NEW.DOCUMENTO AND IET.TIPO_CONTROL = NEW.TIPO_CONTROL AND IET.SEQUENCIA = :varSEQUENCIA; END^ SET TERM ;^ COMMIT WORK;