/*=============================================================*/ /* I M P O R T A N T E */ /*-------------------------------------------------------------*/ /* LOGO APÓS RODAR ESTAS ALTERAÇÕES, EXECUTAR A FUNÇÃO */ /* DO SISTEMA "Colocação de Aliquotas Itens Cupom Fiscal" NA */ /* ABINHA DE SAÍDAS DENTRO DO ADMINISTRATIVO */ /*=============================================================*/ /* PARA RODAR NA TM */ /* UPDATE ITENS_NF SET COD_EMPRESA = 1 WHERE COD_EMPRESA = 4; UPDATE ITENS_NF SET COD_EMPRESA = 2 WHERE COD_EMPRESA = 5; UPDATE PARCELAS SET COD_EMPRESA = 1 WHERE COD_EMPRESA = 4; UPDATE PARCELAS SET COD_EMPRESA = 2 WHERE COD_EMPRESA = 5; UPDATE SERVICOS_NF SET COD_EMPRESA = 1 WHERE COD_EMPRESA = 4; UPDATE SERVICOS_NF SET COD_EMPRESA = 2 WHERE COD_EMPRESA = 5; UPDATE ALIQ_ICMSNF SET COD_EMPRESA = 1 WHERE COD_EMPRESA = 4; UPDATE ALIQ_ICMSNF SET COD_EMPRESA = 2 WHERE COD_EMPRESA = 5; UPDATE DESCAUX_NF SET COD_EMPRESA = 1 WHERE COD_EMPRESA = 4; UPDATE DESCAUX_NF SET COD_EMPRESA = 2 WHERE COD_EMPRESA = 5; UPDATE DESCCORPO_NF SET COD_EMPRESA = 1 WHERE COD_EMPRESA = 4; UPDATE DESCCORPO_NF SET COD_EMPRESA = 2 WHERE COD_EMPRESA = 5; UPDATE NOTAFISCAL_REF SET COD_EMPRESA = 1 WHERE COD_EMPRESA = 4; UPDATE NOTAFISCAL_REF SET COD_EMPRESA = 2 WHERE COD_EMPRESA = 5; UPDATE VOLUMES_NF SET COD_EMPRESA = 1 WHERE COD_EMPRESA = 4; UPDATE VOLUMES_NF SET COD_EMPRESA = 2 WHERE COD_EMPRESA = 5; UPDATE NOTAFISCAL SET COD_EMPRESA = 1 WHERE COD_EMPRESA = 4; UPDATE NOTAFISCAL SET COD_EMPRESA = 2 WHERE COD_EMPRESA = 5; */ /*================*/ /* Versão: 2.6.17 */ /*==============================================================*/ /* Table: NOTA_FISCAL E FOREING KEYS */ /*==============================================================*/ alter table ITENS_NF add constraint PK_ITENS_NF primary key (COD_EMPRESA,TIPO_CONTROL,MODELO_NF,SERIE_NF,NRO_NF,SEQUENCIA); COMMIT WORK; alter table PARCELAS add constraint PK_PARCELAS primary key (COD_EMPRESA,TIPO_CONTROL,MODELO_NF,SERIE_NF,NRO_NF,SEQ_PARCELAS); COMMIT WORK; alter table SERVICOS_NF add constraint PK_SERVICOS_NF primary key (COD_EMPRESA,TIPO_CONTROL,MODELO_NF,SERIE_NF,NRO_NF,SEQ_ITEN); COMMIT WORK; alter table ALIQ_ICMSNF add constraint PK_ALIQ_ICMSNF primary key (COD_EMPRESA,TIPO_CONTROL,MODELO_NF,SERIE_NF,NRO_NF,TIPO_VLR); COMMIT WORK; alter table DESCAUX_NF add constraint PK_DESCAUX_NF primary key (COD_EMPRESA,TIPO_CONTROL,MODELO_NF,SERIE_NF,NRO_NF,SEQUENCIA); COMMIT WORK; alter table DESCCORPO_NF add constraint PK_DESCCORPO_NF primary key (COD_EMPRESA,TIPO_CONTROL,MODELO_NF,SERIE_NF,NRO_NF,SEQUENCIA); COMMIT WORK; alter table NOTAFISCAL_REF add constraint PK_NOTAFISCAL_REF primary key (COD_EMPRESA,TIPO_CONTROL,MODELO_NF,SERIE_NF,NRO_NF); COMMIT WORK; alter table VOLUMES_NF add constraint PK_VOLUMES_NF primary key (COD_EMPRESA,TIPO_CONTROL,MODELO_NF,SERIE_NF,NRO_NF,SEQ_VOLUME); COMMIT WORK; ALTER TABLE NOTAFISCAL DROP CONSTRAINT PK_NOTAFISCAL; ALTER TABLE NOTAFISCAL DROP CONSTRAINT PK_NOTA_FISCAL; COMMIT WORK; alter table NOTAFISCAL add constraint PK_NOTA_FISCAL primary key (COD_EMPRESA,TIPO_CONTROL,MODELO_NF,SERIE_NF,NRO_NF); COMMIT WORK; alter table ITENS_NF add constraint FK_ITENS_NF_NOTA_FISCAL foreign key (COD_EMPRESA,TIPO_CONTROL,MODELO_NF,SERIE_NF,NRO_NF) references NOTAFISCAL(COD_EMPRESA,TIPO_CONTROL,MODELO_NF,SERIE_NF,NRO_NF); COMMIT WORK; alter table PARCELAS add constraint FK_PARCELAS_NF_NOTA_FISCAL foreign key (COD_EMPRESA,TIPO_CONTROL,MODELO_NF,SERIE_NF,NRO_NF) references NOTAFISCAL(COD_EMPRESA,TIPO_CONTROL,MODELO_NF,SERIE_NF,NRO_NF); COMMIT WORK; alter table SERVICOS_NF add constraint FK_SERVICOS_NF_NOTA_FISCAL foreign key (COD_EMPRESA,TIPO_CONTROL,MODELO_NF,SERIE_NF,NRO_NF) references NOTAFISCAL(COD_EMPRESA,TIPO_CONTROL,MODELO_NF,SERIE_NF,NRO_NF); COMMIT WORK; alter table ALIQ_ICMSNF add constraint FK_ALIQ_ICMSNF_NOTA_FISCAL foreign key (COD_EMPRESA,TIPO_CONTROL,MODELO_NF,SERIE_NF,NRO_NF) references NOTAFISCAL(COD_EMPRESA,TIPO_CONTROL,MODELO_NF,SERIE_NF,NRO_NF); COMMIT WORK; alter table DESCAUX_NF add constraint FK_DESCAUX_NF_NOTA_FISCAL foreign key (COD_EMPRESA,TIPO_CONTROL,MODELO_NF,SERIE_NF,NRO_NF) references NOTAFISCAL(COD_EMPRESA,TIPO_CONTROL,MODELO_NF,SERIE_NF,NRO_NF); COMMIT WORK; alter table DESCCORPO_NF add constraint FK_DESCCORPO_NF_NOTA_FISCAL foreign key (COD_EMPRESA,TIPO_CONTROL,MODELO_NF,SERIE_NF,NRO_NF) references NOTAFISCAL(COD_EMPRESA,TIPO_CONTROL,MODELO_NF,SERIE_NF,NRO_NF); COMMIT WORK; alter table NOTAFISCAL_REF add constraint FK_NFREF_NOTAFISCAL foreign key (COD_EMPRESA,TIPO_CONTROL,MODELO_NF,SERIE_NF,NRO_NF) references NOTAFISCAL(COD_EMPRESA,TIPO_CONTROL,MODELO_NF,SERIE_NF,NRO_NF); COMMIT WORK; alter table VOLUMES_NF add constraint FK_VOLUMES_NF_NOTAFISCAL foreign key (COD_EMPRESA,TIPO_CONTROL,MODELO_NF,SERIE_NF,NRO_NF) references NOTAFISCAL(COD_EMPRESA,TIPO_CONTROL,MODELO_NF,SERIE_NF,NRO_NF); COMMIT WORK; /*==============================================================*/ /* Table: PARAMETROS */ /*==============================================================*/ UPDATE PARAMETROS SET NOME_PARAM = 'SERIE_NF_MODELO1', DESCR_PARAM = 'Série Atual de Emissão de Nota Fiscal MODELO 01' WHERE SEQ_PARAM = 91; UPDATE PARAMETROS SET NOME_PARAM = 'SERIE_NF_ELETRONICA', DESCR_PARAM = 'Série Atual de Emissão de Nota Fiscal ELETRÔNICA' WHERE SEQ_PARAM = 93; UPDATE PARAMETROS SET NOME_PARAM = 'MODELO_NF_ATUAL', DESCR_PARAM = 'Modelo de Nota Fiscal usada Atual (01, 03, 55)' WHERE SEQ_PARAM = 94; UPDATE PARAMETROS SET NOME_PARAM = 'NRO_ULTNF_MODELO1', DESCR_PARAM = 'Número da Ultima Nota Fiscal MODELO 01' WHERE SEQ_PARAM = 1; INSERT INTO PARAMETROS (COD_PARAMETRO,SEQ_PARAM,NOME_PARAM,DESCR_PARAM,TIPO_PARAM,CLASS_PARAM,VALOR_PARAM) VALUES (1,117,'SERIE_NF_SERVICO','Série Atual de Emissão de Nota Fiscal SERVIÇO','INTEGER','4',''); INSERT INTO PARAMETROS (COD_PARAMETRO,SEQ_PARAM,NOME_PARAM,DESCR_PARAM,TIPO_PARAM,CLASS_PARAM,VALOR_PARAM) VALUES (1,118,'NRO_ULTNF_SERVICO','Número da Ultima Nota Fiscal SERVIÇO','INTEGER','4',''); INSERT INTO PARAMETROS (COD_PARAMETRO,SEQ_PARAM,NOME_PARAM,DESCR_PARAM,TIPO_PARAM,CLASS_PARAM,VALOR_PARAM) VALUES (1,119,'NRO_ULTNF_ELETRONICA','Número da Ultima Nota Fiscal ELETRÔNICA','INTEGER','4',''); COMMIT WORK; /*==============================================================*/ /* Trigger: TG_UPDATE_NOTAFISCAL */ /*==============================================================*/ SET TERM ^; ALTER TRIGGER TG_UPDATE_NOTAFISCAL ACTIVE BEFORE UPDATE POSITION 0 AS DECLARE VARIABLE varCOD_EMPRESA INTEGER; DECLARE VARIABLE varTIPO_CONTROL CHAR(1); DECLARE VARIABLE varSERIE_NF INTEGER; DECLARE VARIABLE varNRO_NF INTEGER; DECLARE VARIABLE varVLR_ITEM DECIMAL(15,2); DECLARE VARIABLE varBASE_ICMS DECIMAL(15,2); DECLARE VARIABLE varVLR_ICMS DECIMAL(15,2); DECLARE VARIABLE varBASE_ICMS3 DECIMAL(15,2); DECLARE VARIABLE varVLR_ICMS3 DECIMAL(15,2); DECLARE VARIABLE varVLR_IPI DECIMAL(15,2); DECLARE VARIABLE varBASE_ICMS2 DECIMAL(15,2); DECLARE VARIABLE varVLR_ICMS2 DECIMAL(15,2); DECLARE VARIABLE varVLR_SERV DECIMAL(15,2); DECLARE VARIABLE varVLR_CONFERE DECIMAL(15,2); DECLARE VARIABLE varVLR_CONFERE2 DECIMAL(15,2); DECLARE VARIABLE varVLR_DIF DECIMAL(15,2); DECLARE VARIABLE varBASE_SUBST DECIMAL(15,2); DECLARE VARIABLE varVLR_SUBST DECIMAL(15,2); DECLARE VARIABLE varTOTAL_FDSDA DECIMAL(15,2); DECLARE VARIABLE varVLR_FDSDA DECIMAL(15,2); DECLARE VARIABLE varSEQ_ITEM INTEGER; DECLARE VARIABLE varCFOP CHAR(6); DECLARE VARIABLE varPERC_BC_ICMS DECIMAL(15,2); DECLARE VARIABLE varPERC_ICMS DECIMAL(15,2); DECLARE VARIABLE varCST_ICMS CHAR(3); DECLARE VARIABLE varPERC_SUBST DECIMAL(15,2); DECLARE VARIABLE varPERC_MVA DECIMAL(15,2); DECLARE VARIABLE varAUX DECIMAL(15,2); DECLARE VARIABLE varBC_ICMS_FDSDA DECIMAL(15,2); DECLARE VARIABLE varVLR_ICMS_FDSDA DECIMAL(15,2); DECLARE VARIABLE varBC_SUBST_FDSDA DECIMAL(15,2); DECLARE VARIABLE varVLR_SUBST_FDSDA DECIMAL(15,2); DECLARE VARIABLE varPERC_BC_FDSDA DECIMAL(15,2); DECLARE VARIABLE varPERC_ICMS_FDSDA DECIMAL(15,2); DECLARE VARIABLE varPRIM_ITEM INTEGER; BEGIN /* SELEÇÃO DOS VALORES DOS ITENS DE PRODUTOS */ SELECT SUM(INF.VLR_TOTAL), SUM(INF.BASE_ICMS), SUM(INF.VLR_ICMS), SUM(INF.VLR_IPI), SUM(INF.BASE_ICMS_SUBST), SUM(INF.VLR_ICMS_SUBST), SUM(INF.RAT_FRETE + INF.RAT_DESPESAS + INF.RAT_SEGURO + INF.RAT_ACRES - INF.RAT_DESCTO) FROM ITENS_NF INF WHERE INF.COD_EMPRESA = NEW.COD_EMPRESA AND INF.SERIE_NF = NEW.SERIE_NF AND INF.MODELO_NF = NEW.MODELO_NF AND INF.NRO_NF = NEW.NRO_NF AND INF.TIPO_CONTROL = NEW.TIPO_CONTROL INTO :varVLR_ITEM, :varBASE_ICMS, :varVLR_ICMS, :varVLR_IPI, :varBASE_SUBST, :varVLR_SUBST, :varTOTAL_FDSDA; IF ((varTOTAL_FDSDA > 0) or (varTOTAL_FDSDA < 0)) THEN BEGIN varPERC_BC_FDSDA = 0; varPERC_ICMS_FDSDA = 0; IF (NEW.COD_ICMS_FDSDA > 0) THEN BEGIN SELECT ALQ.BASE_ICMS, ALQ.PERC_ICMS FROM ALIQ_ICMS ALQ WHERE ALQ.COD_ICMS = NEW.COD_ICMS_FDSDA INTO :varPERC_BC_FDSDA, :varPERC_ICMS_FDSDA; END FOR SELECT INF.SEQUENCIA, INF.CFOP, INF.PERC_BC_ICMS, INF.PERC_ICMS, INF.CST_ICMS, INF.PERC_SUBST, INF.PERC_MVA, INF.RAT_FRETE + INF.RAT_DESPESAS + INF.RAT_SEGURO + INF.RAT_ACRES - INF.RAT_DESCTO FROM ITENS_NF INF WHERE INF.COD_EMPRESA = NEW.COD_EMPRESA AND INF.SERIE_NF = NEW.SERIE_NF AND INF.MODELO_NF = NEW.MODELO_NF AND INF.NRO_NF = NEW.NRO_NF AND INF.TIPO_CONTROL = NEW.TIPO_CONTROL INTO :varSEQ_ITEM, :varCFOP, :varPERC_BC_ICMS, :varPERC_ICMS, :varCST_ICMS, :varPERC_SUBST, :varPERC_MVA, :varVLR_FDSDA DO BEGIN IF (NEW.COD_ICMS_FDSDA > 0) THEN BEGIN IF (varPERC_BC_FDSDA > 0) THEN varBC_ICMS_FDSDA = (varVLR_FDSDA * varPERC_BC_FDSDA) / 100; ELSE varBC_ICMS_FDSDA = 0; varVLR_ICMS_FDSDA = (varBC_ICMS_FDSDA * varPERC_ICMS_FDSDA) / 100; END ELSE BEGIN IF (varPERC_BC_ICMS > 0) THEN varBC_ICMS_FDSDA = (varVLR_FDSDA * varPERC_BC_ICMS) / 100; ELSE varBC_ICMS_FDSDA = 0; varVLR_ICMS_FDSDA = (varBC_ICMS_FDSDA * varPERC_ICMS) / 100; END varBC_SUBST_FDSDA = 0; varVLR_SUBST_FDSDA = 0; IF ((SUBSTR(varCST_ICMS,2,3) = '10') AND (SUBSTR(varCFOP,1,1) > 5)) THEN BEGIN varBC_SUBST_FDSDA = ((((varVLR_FDSDA * varPERC_MVA) / 100) + varVLR_FDSDA) * varPERC_BC_ICMS) / 100; varAUX = (varBC_SUBST_FDSDA * varPERC_SUBST) / 100; varVLR_SUBST_FDSDA = varAUX - varVLR_ICMS_FDSDA; END UPDATE ITENS_NF INF SET INF.BC_ICMS_FDSDA = :varBC_ICMS_FDSDA, INF.VLR_ICMS_FDSDA = :varVLR_ICMS_FDSDA, INF.BC_SUBST_FDSDA = :varBC_SUBST_FDSDA, INF.VLR_SUBST_FDSDA = :varVLR_SUBST_FDSDA WHERE INF.COD_EMPRESA = NEW.COD_EMPRESA AND INF.SERIE_NF = NEW.SERIE_NF AND INF.MODELO_NF = NEW.MODELO_NF AND INF.NRO_NF = NEW.NRO_NF AND INF.TIPO_CONTROL = NEW.TIPO_CONTROL AND INF.SEQUENCIA = :varSEQ_ITEM; END SELECT SUM(INF.BASE_ICMS + BC_ICMS_FDSDA), SUM(INF.VLR_ICMS + VLR_ICMS_FDSDA), SUM(INF.BASE_ICMS_SUBST + BC_SUBST_FDSDA), SUM(INF.VLR_ICMS_SUBST + VLR_SUBST_FDSDA) FROM ITENS_NF INF WHERE INF.COD_EMPRESA = NEW.COD_EMPRESA AND INF.SERIE_NF = NEW.SERIE_NF AND INF.MODELO_NF = NEW.MODELO_NF AND INF.NRO_NF = NEW.NRO_NF AND INF.TIPO_CONTROL = NEW.TIPO_CONTROL INTO :varBASE_ICMS, :varVLR_ICMS, :varBASE_SUBST, :varVLR_SUBST; END /* SELEÇÃO DOS VALORES DOS ITENS DE SERVICO */ SELECT SUM(SVF.VLR_TOTAL), SUM(SVF.BASE_ICMS), SUM(SVF.VLR_ICMS) FROM SERVICOS_NF SVF WHERE SVF.COD_EMPRESA = NEW.COD_EMPRESA AND SVF.SERIE_NF = NEW.SERIE_NF AND SVF.MODELO_NF = NEW.MODELO_NF AND SVF.NRO_NF = NEW.NRO_NF AND SVF.TIPO_CONTROL = NEW.TIPO_CONTROL INTO :varVLR_SERV, :varBASE_ICMS3, :varVLR_ICMS3; NEW.VLR_TOTAL = NEW.VLR_FRETE + NEW.VLR_SEGURO + NEW.VLR_OUTDESP + NEW.VLR_IPI + NEW.VLR_ACRES - NEW.VLR_DESC; IF (varVLR_SERV IS NULL) THEN varVLR_SERV = 0; IF (varBASE_ICMS3 IS NULL) THEN varBASE_ICMS3 = 0; IF (varVLR_ICMS3 IS NULL) THEN varVLR_ICMS3 = 0; IF (varVLR_ITEM IS NULL) THEN varVLR_ITEM = 0; IF (varBASE_ICMS IS NULL) THEN varBASE_ICMS = 0; IF (varVLR_ICMS IS NULL) THEN varVLR_ICMS = 0; IF (varVLR_IPI IS NULL) THEN varVLR_IPI = 0; IF (varBASE_SUBST IS NULL) THEN varBASE_SUBST = 0; IF (varVLR_SUBST IS NULL) THEN varVLR_SUBST = 0; NEW.VLR_PROD = :varVLR_ITEM; NEW.VLR_SERV = :varVLR_SERV; NEW.BASE_ICMS = :varBASE_ICMS + :varBASE_ICMS3; NEW.VLR_ICMS = :varVLR_ICMS + :varVLR_ICMS3; NEW.BASE_SUBST = :varBASE_SUBST; NEW.VLR_SUBST = :varVLR_SUBST; NEW.VLR_IPI = :varVLR_IPI; NEW.VLR_TOTAL = :varVLR_ITEM + :varVLR_SERV + NEW.VLR_FRETE + NEW.VLR_SEGURO + NEW.VLR_OUTDESP + NEW.VLR_IPI + NEW.VLR_ACRES - NEW.VLR_DESC; IF (varVLR_ITEM > 0) THEN BEGIN UPDATE ITENS_NF INF SET INF.VLR_RATEIO = (INF.VLR_TOTAL / :varVLR_ITEM) * (NEW.VLR_FRETE + NEW.VLR_SEGURO + NEW.VLR_OUTDESP + NEW.VLR_IPI + NEW.VLR_ACRES - NEW.VLR_DESC) WHERE INF.COD_EMPRESA = NEW.COD_EMPRESA AND INF.SERIE_NF = NEW.SERIE_NF AND INF.MODELO_NF = NEW.MODELO_NF AND INF.NRO_NF = NEW.NRO_NF AND INF.TIPO_CONTROL = NEW.TIPO_CONTROL; IF (NEW.VLR_FRETE > 0) THEN BEGIN UPDATE ITENS_NF INF SET INF.RAT_FRETE = (INF.VLR_TOTAL * NEW.VLR_FRETE) / :varVLR_ITEM WHERE INF.COD_EMPRESA = NEW.COD_EMPRESA AND INF.SERIE_NF = NEW.SERIE_NF AND INF.MODELO_NF = NEW.MODELO_NF AND INF.NRO_NF = NEW.NRO_NF AND INF.TIPO_CONTROL = NEW.TIPO_CONTROL; SELECT SUM(INF.RAT_FRETE), MIN(INF.SEQUENCIA) FROM ITENS_NF INF WHERE INF.COD_EMPRESA = NEW.COD_EMPRESA AND INF.SERIE_NF = NEW.SERIE_NF AND INF.MODELO_NF = NEW.MODELO_NF AND INF.NRO_NF = NEW.NRO_NF AND INF.TIPO_CONTROL = NEW.TIPO_CONTROL INTO :varVLR_CONFERE, :varPRIM_ITEM; IF (NEW.VLR_FRETE <> varVLR_CONFERE) THEN BEGIN varVLR_DIF = NEW.VLR_FRETE - varVLR_CONFERE; UPDATE ITENS_NF INF SET INF.RAT_FRETE = INF.RAT_FRETE + :varVLR_DIF WHERE INF.COD_EMPRESA = NEW.COD_EMPRESA AND INF.SERIE_NF = NEW.SERIE_NF AND INF.MODELO_NF = NEW.MODELO_NF AND INF.NRO_NF = NEW.NRO_NF AND INF.TIPO_CONTROL = NEW.TIPO_CONTROL AND INF.SEQUENCIA = :varPRIM_ITEM; END END IF (NEW.VLR_SEGURO > 0) THEN BEGIN UPDATE ITENS_NF INF SET INF.RAT_SEGURO = (INF.VLR_TOTAL * NEW.VLR_SEGURO) / :varVLR_ITEM WHERE INF.COD_EMPRESA = NEW.COD_EMPRESA AND INF.SERIE_NF = NEW.SERIE_NF AND INF.MODELO_NF = NEW.MODELO_NF AND INF.NRO_NF = NEW.NRO_NF AND INF.TIPO_CONTROL = NEW.TIPO_CONTROL; SELECT SUM(INF.RAT_SEGURO), MIN(INF.SEQUENCIA) FROM ITENS_NF INF WHERE INF.COD_EMPRESA = NEW.COD_EMPRESA AND INF.SERIE_NF = NEW.SERIE_NF AND INF.MODELO_NF = NEW.MODELO_NF AND INF.NRO_NF = NEW.NRO_NF AND INF.TIPO_CONTROL = NEW.TIPO_CONTROL INTO :varVLR_CONFERE, :varPRIM_ITEM; IF (NEW.VLR_SEGURO <> varVLR_CONFERE) THEN BEGIN varVLR_DIF = NEW.VLR_SEGURO - varVLR_CONFERE; UPDATE ITENS_NF INF SET INF.RAT_SEGURO = INF.RAT_SEGURO + :varVLR_DIF WHERE INF.COD_EMPRESA = NEW.COD_EMPRESA AND INF.SERIE_NF = NEW.SERIE_NF AND INF.MODELO_NF = NEW.MODELO_NF AND INF.NRO_NF = NEW.NRO_NF AND INF.TIPO_CONTROL = NEW.TIPO_CONTROL AND INF.SEQUENCIA = :varPRIM_ITEM; END END IF (NEW.VLR_OUTDESP > 0) THEN BEGIN UPDATE ITENS_NF INF SET INF.RAT_DESPESAS = (INF.VLR_TOTAL * NEW.VLR_OUTDESP) / :varVLR_ITEM WHERE INF.COD_EMPRESA = NEW.COD_EMPRESA AND INF.SERIE_NF = NEW.SERIE_NF AND INF.MODELO_NF = NEW.MODELO_NF AND INF.NRO_NF = NEW.NRO_NF AND INF.TIPO_CONTROL = NEW.TIPO_CONTROL; SELECT SUM(INF.RAT_DESPESAS), MIN(INF.SEQUENCIA) FROM ITENS_NF INF WHERE INF.COD_EMPRESA = NEW.COD_EMPRESA AND INF.SERIE_NF = NEW.SERIE_NF AND INF.MODELO_NF = NEW.MODELO_NF AND INF.NRO_NF = NEW.NRO_NF AND INF.TIPO_CONTROL = NEW.TIPO_CONTROL INTO :varVLR_CONFERE, :varPRIM_ITEM; IF (NEW.VLR_OUTDESP <> varVLR_CONFERE) THEN BEGIN varVLR_DIF = NEW.VLR_OUTDESP - varVLR_CONFERE; UPDATE ITENS_NF INF SET INF.RAT_DESPESAS = INF.RAT_DESPESAS + :varVLR_DIF WHERE INF.COD_EMPRESA = NEW.COD_EMPRESA AND INF.SERIE_NF = NEW.SERIE_NF AND INF.MODELO_NF = NEW.MODELO_NF AND INF.NRO_NF = NEW.NRO_NF AND INF.TIPO_CONTROL = NEW.TIPO_CONTROL AND INF.SEQUENCIA = :varPRIM_ITEM; END END IF (NEW.VLR_DESC > 0) THEN BEGIN UPDATE ITENS_NF INF SET INF.RAT_DESCTO = (INF.VLR_TOTAL * NEW.VLR_DESC) / :varVLR_ITEM WHERE INF.COD_EMPRESA = NEW.COD_EMPRESA AND INF.SERIE_NF = NEW.SERIE_NF AND INF.MODELO_NF = NEW.MODELO_NF AND INF.NRO_NF = NEW.NRO_NF AND INF.TIPO_CONTROL = NEW.TIPO_CONTROL; SELECT SUM(INF.RAT_DESCTO), MIN(INF.SEQUENCIA) FROM ITENS_NF INF WHERE INF.COD_EMPRESA = NEW.COD_EMPRESA AND INF.SERIE_NF = NEW.SERIE_NF AND INF.MODELO_NF = NEW.MODELO_NF AND INF.NRO_NF = NEW.NRO_NF AND INF.TIPO_CONTROL = NEW.TIPO_CONTROL INTO :varVLR_CONFERE, :varPRIM_ITEM; IF (NEW.VLR_DESC <> varVLR_CONFERE) THEN BEGIN varVLR_DIF = NEW.VLR_DESC - varVLR_CONFERE; UPDATE ITENS_NF INF SET INF.RAT_DESCTO = INF.RAT_DESCTO + :varVLR_DIF WHERE INF.COD_EMPRESA = NEW.COD_EMPRESA AND INF.SERIE_NF = NEW.SERIE_NF AND INF.MODELO_NF = NEW.MODELO_NF AND INF.NRO_NF = NEW.NRO_NF AND INF.TIPO_CONTROL = NEW.TIPO_CONTROL AND INF.SEQUENCIA = :varPRIM_ITEM; END END IF (NEW.VLR_ACRES > 0) THEN BEGIN UPDATE ITENS_NF INF SET INF.RAT_ACRES = (INF.VLR_TOTAL * NEW.VLR_ACRES) / :varVLR_ITEM WHERE INF.COD_EMPRESA = NEW.COD_EMPRESA AND INF.SERIE_NF = NEW.SERIE_NF AND INF.MODELO_NF = NEW.MODELO_NF AND INF.NRO_NF = NEW.NRO_NF AND INF.TIPO_CONTROL = NEW.TIPO_CONTROL; SELECT SUM(INF.RAT_ACRES), MIN(INF.SEQUENCIA) FROM ITENS_NF INF WHERE INF.COD_EMPRESA = NEW.COD_EMPRESA AND INF.SERIE_NF = NEW.SERIE_NF AND INF.MODELO_NF = NEW.MODELO_NF AND INF.NRO_NF = NEW.NRO_NF AND INF.TIPO_CONTROL = NEW.TIPO_CONTROL INTO :varVLR_CONFERE, :varPRIM_ITEM; IF (NEW.VLR_ACRES <> varVLR_CONFERE) THEN BEGIN varVLR_DIF = NEW.VLR_ACRES - varVLR_CONFERE; UPDATE ITENS_NF INF SET INF.RAT_ACRES = INF.RAT_ACRES + :varVLR_DIF WHERE INF.COD_EMPRESA = NEW.COD_EMPRESA AND INF.SERIE_NF = NEW.SERIE_NF AND INF.MODELO_NF = NEW.MODELO_NF AND INF.NRO_NF = NEW.NRO_NF AND INF.TIPO_CONTROL = NEW.TIPO_CONTROL AND INF.SEQUENCIA = :varPRIM_ITEM; END END END SELECT ANF.NRO_NF, SUM(ANF.BASE_ICMS), SUM(ANF.VLR_ICMS) FROM ALIQ_ICMSNF ANF WHERE ANF.COD_EMPRESA = NEW.COD_EMPRESA AND ANF.MODELO_NF = NEW.MODELO_NF AND ANF.SERIE_NF = NEW.SERIE_NF AND ANF.NRO_NF = NEW.NRO_NF AND ANF.TIPO_CONTROL = NEW.TIPO_CONTROL GROUP BY ANF.NRO_NF INTO :varNRO_NF, :varBASE_ICMS2, :varVLR_ICMS2; IF (:varBASE_ICMS2 IS NOT NULL) THEN BEGIN NEW.BASE_ICMS = NEW.BASE_ICMS + :varBASE_ICMS2; NEW.VLR_ICMS = NEW.VLR_ICMS + :varVLR_ICMS2; UPDATE ITENS_NF INF SET INF.RAT_BASE_ICMS = (:varBASE_ICMS2 * INF.VLR_TOTAL) / :varVLR_ITEM, INF.RAT_VLR_ICMS = (:varVLR_ICMS2 * INF.VLR_TOTAL) / :varVLR_ITEM WHERE INF.COD_EMPRESA = NEW.COD_EMPRESA AND INF.SERIE_NF = NEW.SERIE_NF AND INF.MODELO_NF = NEW.MODELO_NF AND INF.NRO_NF = NEW.NRO_NF AND INF.TIPO_CONTROL = NEW.TIPO_CONTROL; SELECT SUM(INF.RAT_BASE_ICMS), SUM(INF.RAT_VLR_ICMS), MIN(INF.SEQUENCIA) FROM ITENS_NF INF WHERE INF.COD_EMPRESA = NEW.COD_EMPRESA AND INF.SERIE_NF = NEW.SERIE_NF AND INF.MODELO_NF = NEW.MODELO_NF AND INF.NRO_NF = NEW.NRO_NF AND INF.TIPO_CONTROL = NEW.TIPO_CONTROL INTO :varVLR_CONFERE, :varVLR_CONFERE2, :varPRIM_ITEM; IF (varBASE_ICMS2 <> varVLR_CONFERE) THEN BEGIN varVLR_DIF = varBASE_ICMS2 - varVLR_CONFERE; UPDATE ITENS_NF INF SET INF.RAT_BASE_ICMS = INF.RAT_BASE_ICMS + :varVLR_DIF WHERE INF.COD_EMPRESA = NEW.COD_EMPRESA AND INF.SERIE_NF = NEW.SERIE_NF AND INF.MODELO_NF = NEW.MODELO_NF AND INF.NRO_NF = NEW.NRO_NF AND INF.TIPO_CONTROL = NEW.TIPO_CONTROL AND INF.SEQUENCIA = :varPRIM_ITEM; END IF (varVLR_ICMS2 <> varVLR_CONFERE2) THEN BEGIN varVLR_DIF = varVLR_ICMS2 - varVLR_CONFERE2; UPDATE ITENS_NF INF SET INF.RAT_VLR_ICMS = INF.RAT_VLR_ICMS + :varVLR_DIF WHERE INF.COD_EMPRESA = NEW.COD_EMPRESA AND INF.SERIE_NF = NEW.SERIE_NF AND INF.MODELO_NF = NEW.MODELO_NF AND INF.NRO_NF = NEW.NRO_NF AND INF.TIPO_CONTROL = NEW.TIPO_CONTROL AND INF.SEQUENCIA = :varPRIM_ITEM; END END IF (NEW.DESC_INSS = 'S') THEN NEW.VLR_TOTAL = NEW.VLR_TOTAL - NEW.VLR_INSS; IF (NEW.DESC_IRRF = 'S') THEN NEW.VLR_TOTAL = NEW.VLR_TOTAL - NEW.VLR_IRRF; IF (NEW.VLR_SUBST > 0) THEN NEW.VLR_TOTAL = NEW.VLR_TOTAL + NEW.VLR_SUBST; END^ SET TERM ;^ COMMIT WORK; /*=================*/ /* Versão: 2.6.17b */ /*==============================================================*/ /* Table: ITENS_ENTRADA */ /*==============================================================*/ ALTER TABLE ITENS_ENTRADA ADD BASE_IPI NUMERIC(18,2); ALTER TABLE ITENS_ENTRADA ADD RAT_BC_ICMS_SUBST NUMERIC(18,2); COMMIT WORK; UPDATE ITENS_ENTRADA SET BASE_IPI = (VLR_IPI * 100) / PERC_IPI WHERE BASE_IPI IS NULL AND PERC_IPI > 0; COMMIT WORK; /*==============================================================*/ /* 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 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); DECLARE VARIABLE varVLR_CONFERE DECIMAL(15,2); DECLARE VARIABLE varVLR_DIF DECIMAL(15,2); DECLARE VARIABLE varVLR_TOTAL_DESCTO DECIMAL(15,2); DECLARE VARIABLE varPRIM_ITEM 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.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 SUM(IET.RAT_FRETE), MIN(IET.SEQUENCIA) 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 :varVLR_CONFERE, :varPRIM_ITEM; 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.SEQUENCIA = :varPRIM_ITEM; 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 SUM(IET.RAT_SEGURO), MIN(IET.SEQUENCIA) 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 :varVLR_CONFERE, :varPRIM_ITEM; 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.SEQUENCIA = :varPRIM_ITEM; END END IF (NEW.VLR_DESPESAS > 0) THEN BEGIN UPDATE ITENS_ENTRADA IET SET IET.RAT_DESPESAS = (IET.VLR_TOTAL_ITEM * NEW.VLR_DESPESAS) / 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 SUM(IET.RAT_DESPESAS), MIN(IET.SEQUENCIA) 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 :varVLR_CONFERE, :varPRIM_ITEM; IF (NEW.VLR_DESPESAS <> varVLR_CONFERE) THEN BEGIN varVLR_DIF = NEW.VLR_DESPESAS - 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.SEQUENCIA = :varPRIM_ITEM; 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 SUM(IET.RAT_DESCTO), MIN(IET.SEQUENCIA) 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 :varVLR_CONFERE, :varPRIM_ITEM; 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.SEQUENCIA = :varPRIM_ITEM; END END 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; /* = = 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= =*/ 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; /* = = 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 = =*/ 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; 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_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 ELSE 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.RAT_BC_ICMS_SUBST = NEW.BASE_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.CST_TRIB = '10' OR IET.CST_TRIB = '30' OR IET.CST_TRIB = '60' OR IET.CST_TRIB = '70'); END END END^ SET TERM ;^ COMMIT WORK; UPDATE ENTRADAS SET ICMS_SUBST = ICMS_SUBST WHERE ICMS_SUBST > 0 AND DT_EMISSAO > '01/01/2011'; COMMIT WORK; /*==============================================================*/ /* Table: ITENS_CUPOM */ /*==============================================================*/ ALTER TABLE ITENS_CUPOM ADD ALIQ_TRIB CHAR(4); ALTER TABLE ITENS_CUPOM ADD PERC_BC_ICMS NUMERIC(9,4); COMMIT WORK; alter table ITENS_CUPOM drop PERC_DESCTO; ALTER TABLE ITENS_CUPOM ALTER COLUMN VLR_DESCTO TO RAT_DESCTO; COMMIT WORK; /*==============================================================*/ /* Trigger: TG_UPDATE_CUPOM_FISCAL */ /*==============================================================*/ SET TERM ^; CREATE TRIGGER TG_UPDATE_CUPOM_FISCAL FOR CUPOM_FISCAL BEFORE UPDATE POSITION 0 AS DECLARE VARIABLE varVLR_ITEM DECIMAL(15,2); DECLARE VARIABLE varVLR_CONFERE DECIMAL(15,2); DECLARE VARIABLE varVLR_DIF DECIMAL(15,2); DECLARE VARIABLE varPRIM_ITEM INTEGER; BEGIN SELECT SUM(ICF.VLR_VENDA) FROM ITENS_CUPOM ICF WHERE ICF.COD_EMPRESA = NEW.COD_EMPRESA AND ICF.COD_PARAMETRO = NEW.COD_PARAMETRO AND ICF.DT_EMISSAO = NEW.DT_EMISSAO AND ICF.NRO_CUPOM = NEW.NRO_CUPOM INTO :varVLR_ITEM; IF ((NEW.VLR_DESCTO > 0) AND (NEW.VLR_TOTAL > 0) AND (varVLR_ITEM > 0)) THEN BEGIN UPDATE ITENS_CUPOM ICF SET ICF.RAT_DESCTO = (ICF.VLR_VENDA * NEW.VLR_DESCTO) / :varVLR_ITEM WHERE ICF.COD_EMPRESA = NEW.COD_EMPRESA AND ICF.COD_PARAMETRO = NEW.COD_PARAMETRO AND ICF.DT_EMISSAO = NEW.DT_EMISSAO AND ICF.NRO_CUPOM = NEW.NRO_CUPOM; SELECT SUM(ICF.RAT_DESCTO), MIN(ICF.ITEN_CUPOM) FROM ITENS_CUPOM ICF WHERE ICF.COD_EMPRESA = NEW.COD_EMPRESA AND ICF.COD_PARAMETRO = NEW.COD_PARAMETRO AND ICF.DT_EMISSAO = NEW.DT_EMISSAO AND ICF.NRO_CUPOM = NEW.NRO_CUPOM INTO :varVLR_CONFERE, :varPRIM_ITEM; IF (NEW.VLR_DESCTO <> varVLR_CONFERE) THEN BEGIN varVLR_DIF = NEW.VLR_DESCTO - varVLR_CONFERE; UPDATE ITENS_CUPOM ICF SET ICF.RAT_DESCTO = ICF.RAT_DESCTO + :varVLR_DIF WHERE ICF.COD_EMPRESA = NEW.COD_EMPRESA AND ICF.COD_PARAMETRO = NEW.COD_PARAMETRO AND ICF.DT_EMISSAO = NEW.DT_EMISSAO AND ICF.NRO_CUPOM = NEW.NRO_CUPOM AND ICF.ITEN_CUPOM = :varPRIM_ITEM; END END END^ SET TERM ;^ COMMIT WORK; UPDATE CUPOM_FISCAL SET NRO_CUPOM = NRO_CUPOM WHERE DT_EMISSAO >= '01/01/2011'; COMMIT WORK; /*=============================================================*/ /* I M P O R T A N T E */ /*-------------------------------------------------------------*/ /* LOGO APÓS RODAR ESTAS ALTERAÇÕES, EXECUTAR A FUNÇÃO */ /* DO SISTEMA "Colocação de Aliquotas Itens Cupom Fiscal" NA */ /* ABINHA DE SAÍDAS DENTRO DO ADMINISTRATIVO */ /*=============================================================*/ COMMIT WORK;