/*===============*/ /* Versão: 2.06 */ /*==============================================================*/ /* Trigger: TG_UPDATE_ENTRADAS */ /*==============================================================*/ SET TERM ^; ALTER TRIGGER TG_UPDATE_ENTRADAS ACTIVE BEFORE UPDATE POSITION 0 AS DECLARE VARIABLE varCOD_EMPRESA INTEGER; DECLARE VARIABLE varSEQ_INCLUSAO INTEGER; DECLARE VARIABLE varDOCUMENTO VARCHAR(20); DECLARE VARIABLE varVLT_TOTAL_ITEM DECIMAL(15,2); DECLARE VARIABLE varVLR_RATEIO DECIMAL(15,2); DECLARE VARIABLE varVLR_ICMS DECIMAL(15,2); DECLARE VARIABLE varBASE_ICMS DECIMAL(15,2); DECLARE VARIABLE varRAT_ICMS DECIMAL(15,2); DECLARE VARIABLE varRAT_BASE_ICMS DECIMAL(15,2); DECLARE VARIABLE varRAT_ICMS_SUBST DECIMAL(15,2); DECLARE VARIABLE varRAT_BC_ICMS_SUBST DECIMAL(15,2); DECLARE VARIABLE varSEQUENCIA INTEGER; DECLARE VARIABLE varPRIMEIRO INTEGER; DECLARE VARIABLE varVLR_CONFERE DECIMAL(15,2); DECLARE VARIABLE varVLR_DIF DECIMAL(15,2); DECLARE VARIABLE varVLR_TOTAL_DESCTO DECIMAL(15,2); DECLARE VARIABLE varVLR_TOTAL_ACRES DECIMAL(15,2); /* = = Rateia Acrescimos e descontos entre os Itens de Entrada= =*/ BEGIN 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; UPDATE ITENS_ENTRADA IET SET IET.RAT_FRETE = 0, IET.RAT_SEGURO = 0, IET.RAT_DESPESAS = 0, IET.RAT_DESCTO = 0 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; IF (NEW.VLR_FRETE > 0) THEN BEGIN UPDATE ITENS_ENTRADA IET SET IET.RAT_FRETE = (IET.VLR_TOTAL_ITEM * NEW.VLR_FRETE) / 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; SELECT MIN(IET.SEQ_ITEM), SUM(IET.RAT_FRETE) 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 INTO :varPRIMEIRO, :varVLR_CONFERE; IF (NEW.VLR_FRETE <> varVLR_CONFERE) THEN BEGIN varVLR_DIF = NEW.VLR_FRETE - varVLR_CONFERE; UPDATE ITENS_ENTRADA IET SET IET.RAT_FRETE = IET.RAT_FRETE + :varVLR_DIF 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.SEQ_ITEM = :varPRIMEIRO; END END IF (NEW.VLR_SEGURO > 0) THEN BEGIN UPDATE ITENS_ENTRADA IET SET IET.RAT_SEGURO = (IET.VLR_TOTAL_ITEM * NEW.VLR_SEGURO) / 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; SELECT MIN(IET.SEQ_ITEM), SUM(IET.RAT_SEGURO) 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 INTO :varPRIMEIRO, :varVLR_CONFERE; IF (NEW.VLR_SEGURO <> varVLR_CONFERE) THEN BEGIN varVLR_DIF = NEW.VLR_SEGURO - varVLR_CONFERE; UPDATE ITENS_ENTRADA IET SET IET.RAT_SEGURO = IET.RAT_SEGURO + :varVLR_DIF 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.SEQ_ITEM = :varPRIMEIRO; END END varVLR_TOTAL_ACRES = NEW.VLR_DESPESAS + NEW.VLR_ACR_EXTRA; IF (varVLR_TOTAL_ACRES > 0) THEN BEGIN UPDATE ITENS_ENTRADA IET SET IET.RAT_DESPESAS = (IET.VLR_TOTAL_ITEM * :varVLR_TOTAL_ACRES) / 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; SELECT MIN(IET.SEQ_ITEM), SUM(IET.RAT_DESPESAS) 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 INTO :varPRIMEIRO, :varVLR_CONFERE; IF (varVLR_TOTAL_ACRES <> varVLR_CONFERE) THEN BEGIN varVLR_DIF = varVLR_TOTAL_ACRES - varVLR_CONFERE; UPDATE ITENS_ENTRADA IET SET IET.RAT_DESPESAS = IET.RAT_DESPESAS + :varVLR_DIF 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.SEQ_ITEM = :varPRIMEIRO; END END varVLR_TOTAL_DESCTO = NEW.VLR_DESCONTO + NEW.VLR_DESC_EXTRA; IF (varVLR_TOTAL_DESCTO > 0) THEN BEGIN UPDATE ITENS_ENTRADA IET SET IET.RAT_DESCTO = (IET.VLR_TOTAL_ITEM * :varVLR_TOTAL_DESCTO) / 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; SELECT MIN(IET.SEQ_ITEM), SUM(IET.RAT_DESCTO) 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 INTO :varPRIMEIRO, :varVLR_CONFERE; IF (varVLR_TOTAL_DESCTO <> varVLR_CONFERE) THEN BEGIN varVLR_DIF = varVLR_TOTAL_DESCTO - varVLR_CONFERE; UPDATE ITENS_ENTRADA IET SET IET.RAT_DESCTO = IET.RAT_DESCTO + :varVLR_DIF 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.SEQ_ITEM = :varPRIMEIRO; END END END /* = = Faz somatorios de valores dos Itens de Entrada e procura o primeiro item= =*/ SELECT IET.DOCUMENTO, SUM(IET.RAT_VALOR), MIN(IET.SEQ_ITEM), SUM(IET.BASE_ICMS), SUM(IET.VLR_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 GROUP BY IET.DOCUMENTO INTO :varDOCUMENTO, :varVLR_RATEIO, :varSEQUENCIA, :varBASE_ICMS, :varVLR_ICMS; /* = = 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.SEQ_ITEM = :varSEQUENCIA; IF (varVLR_ICMS > 0) THEN BEGIN /* = = Rateia Valores de Icms que alem dos Itens = =*/ UPDATE ITENS_ENTRADA IET SET IET.RAT_ICMS = (NEW.VLR_ICMS - :varVLR_ICMS) * (IET.VLR_ICMS / :varVLR_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 IF (varBASE_ICMS > 0) THEN BEGIN /* = = Rateia Valores de Base Icms que alem dos Itens = =*/ UPDATE ITENS_ENTRADA IET SET 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.DOCUMENTO, MIN(IET.SEQ_ITEM), 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.DOCUMENTO INTO :varDOCUMENTO, :varSEQUENCIA, :varRAT_ICMS, :varRAT_BASE_ICMS; IF (varRAT_ICMS IS NOT NULL) THEN BEGIN /* = = 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.SEQ_INCLUSAO = NEW.SEQ_INCLUSAO AND IET.DOCUMENTO = NEW.DOCUMENTO AND IET.TIPO_CONTROL = NEW.TIPO_CONTROL AND IET.SEQ_ITEM = :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 */ SELECT 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.DOCUMENTO INTO :varVLT_TOTAL_ITEM; IF (varVLT_TOTAL_ITEM > 0) THEN BEGIN /* == 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))/*, IET.RAT_BC_ICMS_SUBST = (NEW.BASE_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 /* = = Faz somatorio do Icms e Base Icms e procura o primeiro item com ICMS = =*/ SELECT MIN(IET.SEQ_ITEM), SUM(IET.RAT_ICMS_SUBST), SUM(IET.RAT_BC_ICMS_SUBST) 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.RAT_ICMS_SUBST > 0 AND (IET.CST_TRIB = '10' OR IET.CST_TRIB = '30' OR IET.CST_TRIB = '60' OR IET.CST_TRIB = '70') GROUP BY IET.DOCUMENTO INTO :varPRIMEIRO, :varRAT_ICMS_SUBST, :varRAT_BC_ICMS_SUBST; /* = = Grava a diferenca no primeiro item de entrada com ICMS= =*/ UPDATE ITENS_ENTRADA IET SET IET.RAT_ICMS_SUBST = IET.RAT_ICMS_SUBST + (NEW.ICMS_SUBST - :varRAT_ICMS_SUBST)/*, IET.RAT_BC_ICMS_SUBST = IET.RAT_BC_ICMS_SUBST + (NEW.BASE_ICMS_SUBST - :varRAT_BC_ICMS_SUBST)*/ 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.SEQ_ITEM = :varPRIMEIRO; END END^ SET TERM ;^ COMMIT WORK; /*==============*/ /* Versão: 2.10 */ /*==============================================================*/ /* Table: ALIQ_OPER_FISCAL */ /*==============================================================*/ create table ALIQ_OPER_FISCAL ( COD_ICMS SMALLINT not null, FORA_ESTADO CHAR(1) not null, ENTRADA_SAIDA CHAR(1) not null, COD_OPEFISC SMALLINT not null, TIPO_OPERACAO CHAR(1), CFOP CHAR(6), constraint PK_ALIQ_OPER_FISCAL primary key (COD_ICMS, FORA_ESTADO, ENTRADA_SAIDA, COD_OPEFISC) ); alter table ALIQ_OPER_FISCAL add constraint FK_ALIQOPERFISC_ALIQICMS foreign key (COD_ICMS) references ALIQ_ICMS (COD_ICMS); alter table ALIQ_OPER_FISCAL add constraint FK_ALIQOPERFISC_OPERFISCAL foreign key (COD_OPEFISC) references OPER_FISCAL (COD_OPEFISC); COMMIT WORK; /*==============================================================*/ /* Table: NOTA_FISCAL */ /*==============================================================*/ ALTER TABLE NOTA_FISCAL ADD OPERACAO CHAR(1); ALTER TABLE NOTA_FISCAL ADD TIPO_OPERACAO CHAR(1); COMMIT WORK; ALTER TRIGGER TG_UPDATE_NOTAFISCAL INACTIVE; UPDATE NOTA_FISCAL SET OPERACAO = 'S' WHERE OPERACAO IS NULL; UPDATE NOTA_FISCAL SET TIPO_OPERACAO = 'V' WHERE TIPO_OPERACAO IS NULL; ALTER TRIGGER TG_UPDATE_NOTAFISCAL ACTIVE; COMMIT WORK; /*==============*/ /* Versão: 2.11 */ /*==============================================================*/ /* Table: NOTA_FISCAL */ /*==============================================================*/ ALTER TABLE NOTA_FISCAL ADD NRO_FATURA INTEGER; COMMIT WORK; /*==============================================================*/ /* Table: OPER_FISCAL */ /*==============================================================*/ ALTER TABLE OPER_FISCAL ADD COD_CSOSN SMALLINT; COMMIT WORK; /*==============*/ /* Versão: 2.12 */ /*==============================================================*/ /* Table: ACERTO_FATURA */ /*==============================================================*/ ALTER TABLE ACERTO_FATURA ALTER COLUMN FEITO_CUPOM TO FEITO_DOCTO; ALTER TABLE ACERTO_FATURA ALTER COLUMN FEITO_DOCTO TYPE CHAR (2) CHARACTER SET ISO8859_1; COMMIT WORK; UPDATE ACERTO_FATURA SET FEITO_DOCTO = 'CF' WHERE FEITO_DOCTO = 'S'; COMMIT WORK;