/*================*/ /* Versão: 3.51 */ /*==============================================================*/ /* Table: NOTA_FISCAL */ /*==============================================================*/ ALTER TABLE NOTA_FISCAL ADD CHAVE_NFE VARCHAR(50); ALTER TABLE NOTA_FISCAL ADD PROTOCOLO_NFE VARCHAR(20); ALTER TABLE NOTA_FISCAL ADD RECIBO_NFE VARCHAR(20); ALTER TABLE NOTA_FISCAL ADD OPCAO_NF CHAR(2); ALTER TABLE NOTA_FISCAL ADD REF_NRONF VARCHAR(50); ALTER TABLE NOTA_FISCAL ADD REF_TIPONF CHAR(3); ALTER TABLE NOTA_FISCAL ADD REF_AAMM CHAR(4); ALTER TABLE NOTA_FISCAL ADD REF_MODELO CHAR(2); ALTER TABLE NOTA_FISCAL ADD REF_SERIE VARCHAR(5); COMMIT WORK; ALTER TRIGGER TG_UPDATE_NOTAFISCAL INACTIVE; COMMIT WORK; UPDATE NOTA_FISCAL SET OPCAO_NF = 'NO' WHERE OPCAO_NF IS NULL; COMMIT WORK; ALTER TRIGGER TG_UPDATE_NOTAFISCAL ACTIVE; COMMIT WORK; /*==============================================================*/ /* Table: PARAMETROS */ /*==============================================================*/ INSERT INTO PARAMETROS (COD_PARAMETRO,SEQ_PARAM,NOME_PARAM,DESCR_PARAM,TIPO_PARAM,CLASS_PARAM,VALOR_PARAM) VALUES (1,45,'NRO_MODELO_NF','Modelo de Nota Fiscal de Saída (01) NF ou (55) NFe','STRING','2','01'); INSERT INTO PARAMETROS (COD_PARAMETRO,SEQ_PARAM,NOME_PARAM,DESCR_PARAM,TIPO_PARAM,CLASS_PARAM,VALOR_PARAM) VALUES (2,45,'NRO_MODELO_NF','Modelo de Nota Fiscal de Saída (01) NF ou (55) NFe','STRING','2','01'); INSERT INTO PARAMETROS (COD_PARAMETRO,SEQ_PARAM,NOME_PARAM,DESCR_PARAM,TIPO_PARAM,CLASS_PARAM,VALOR_PARAM) VALUES (3,45,'NRO_MODELO_NF','Modelo de Nota Fiscal de Saída (01) NF ou (55) NFe','STRING','2','01'); INSERT INTO PARAMETROS (COD_PARAMETRO,SEQ_PARAM,NOME_PARAM,DESCR_PARAM,TIPO_PARAM,CLASS_PARAM,VALOR_PARAM) VALUES (4,45,'NRO_MODELO_NF','Modelo de Nota Fiscal de Saída (01) NF ou (55) NFe','STRING','2','01'); INSERT INTO PARAMETROS (COD_PARAMETRO,SEQ_PARAM,NOME_PARAM,DESCR_PARAM,TIPO_PARAM,CLASS_PARAM,VALOR_PARAM) VALUES (5,45,'NRO_MODELO_NF','Modelo de Nota Fiscal de Saída (01) NF ou (55) NFe','STRING','2','01'); COMMIT WORK; /*==============================================================*/ /* Table: CIDADES */ /*==============================================================*/ ALTER TABLE CIDADES ADD CEP VARCHAR(10); COMMIT WORK; /*==============================================================*/ /* Table: PESSOAS_FJ */ /*==============================================================*/ ALTER TABLE PESSOAS_FJ ALTER COLUMN NUMERO TYPE VARCHAR(15); COMMIT WORK; /*==============================================================*/ /* Table: EMPRESAS */ /*==============================================================*/ ALTER TABLE EMPRESAS ALTER COLUMN NUMERO TYPE VARCHAR(15); COMMIT WORK; /*==============================================================*/ /* Table: PAR_NFE */ /*==============================================================*/ create table PAR_NFE ( COD_EMPRESA SMALLINT not null, NRO_CERTIFICADO VARCHAR(60), PATH_SALVAR_NFE VARCHAR(100), ARQUIVO_DANFE VARCHAR(100), LOGO_EMP_DANFE VARCHAR(100), TIPO_IMP_DANFE VARCHAR(10), PATH_DANFE_PDF VARCHAR(80), TIPO_AMBIENTE VARCHAR(15), FORMA_LOGO CHAR(3), CASAS_QTD_PROD SMALLINT, CASAS_VLR_PROD SMALLINT, MRG_SUPERIOR FLOAT, MRG_INFERIOR FLOAT, MRG_ESQUERDA FLOAT, MRG_DIREITA FLOAT, TIPO_DANFE CHAR(2), FORMATO_DANFE CHAR(1), EMAIL_SERVIDOR VARCHAR(50), EMAIL_PORTA VARCHAR(10), EMAIL_USER VARCHAR(75), EMAIL_SENHA VARCHAR(25), EMAIL_SSL CHAR(1), EMAIL_TITULO VARCHAR(100), EMAIL_MESG VARCHAR(5000), EMAIL_AUTO CHAR(1), constraint PK_PAR_NFE primary key (COD_EMPRESA) ); /*==============================================================*/ /* Table: EMPRESAS */ /*==============================================================*/ ALTER TABLE EMPRESAS ADD EMAIL_ENV_NFE VARCHAR(100); ALTER TABLE EMPRESAS ADD EMAIL_REC_NFE VARCHAR(100); COMMIT WORK; alter table PAR_NFE add constraint FK_PAR_NFE_EMPRESAS foreign key (COD_EMPRESA) references EMPRESAS(COD_EMPRESA); COMMIT WORK; /*==============================================================*/ /* Table: OPER_FISCAL */ /*==============================================================*/ alter table OPER_FISCAL add CFOP CHAR(6); alter table OPER_FISCAL add TIPO_OPER CHAR(1); COMMIT WORK; UPDATE OPER_FISCAL SET CFOP = COD_OPEFISC WHERE CFOP IS NULL; COMMIT WORK; ALTER TABLE ENTRADAS ADD DESCR_OPERACAO VARCHAR(120); ALTER TABLE NOTA_FISCAL ALTER COLUMN DESC_OPERACAO TO DESCR_OPERACAO; ALTER TABLE NOTA_FISCAL ALTER COLUMN DESCR_OPERACAO TYPE VARCHAR (120) CHARACTER SET ISO8859_1; COMMIT WORK; ALTER TABLE NOTA_FISCAL DROP CONSTRAINT FK_NOTA_FISCAL_OPER_FISCAL; ALTER TABLE NOTA_FISCAL ALTER COLUMN COD_OPEFISC TO CFOP; COMMIT WORK; ALTER TABLE ITENS_NF ADD COD_OPEFISC SMALLINT; ALTER TABLE ITENS_NF ADD CFOP CHAR(6); COMMIT WORK; ALTER TABLE ENTRADAS DROP CONSTRAINT FK_ENTRADAS_OPER_FISCAL; ALTER TABLE ENTRADAS ALTER COLUMN COD_OPEFISC TO CFOP; ALTER TABLE ENTRADAS ADD COD_OPE_MOD SMALLINT; ALTER TABLE ENTRADAS ADD COD_OPE_CONH SMALLINT; COMMIT WORK; ALTER TABLE ITENS_ENTRADA ADD COD_OPEFISC SMALLINT; ALTER TABLE ITENS_ENTRADA ADD CFOP CHAR(6); COMMIT WORK; ALTER TABLE OPER_FISCAL DROP CONSTRAINT PK_OPER_FISCAL; ALTER TABLE OPER_FISCAL DROP COD_OPEFISC; ALTER TABLE OPER_FISCAL ADD COD_OPEFISC SMALLINT NOT NULL; COMMIT WORK; CREATE GENERATOR GEN_OPER_FISCAL; COMMIT WORK; UPDATE OPER_FISCAL SET COD_OPEFISC = GEN_ID(GEN_OPER_FISCAL, 1); COMMIT WORK; alter table OPER_FISCAL add constraint PK_OPER_FISCAL primary key (COD_OPEFISC); COMMIT WORK; alter table OPER_FISCAL add constraint PK_OPER_FISCAL primary key (COD_OPEFISC); COMMIT WORK; ALTER TRIGGER TG_UPDATE_NOTAFISCAL INACTIVE; COMMIT WORK; ALTER TABLE NOTA_FISCAL ADD DESCR_CFOP VARCHAR(25); UPDATE NOTA_FISCAL SET DESCR_CFOP = CFOP WHERE DESCR_CFOP IS NULL; COMMIT WORK; ALTER TRIGGER TG_UPDATE_NOTAFISCAL ACTIVE; COMMIT WORK; UPDATE ITENS_NF INF SET INF.CFOP = (SELECT NF.CFOP FROM NOTA_FISCAL NF WHERE NF.COD_EMPRESA = INF.COD_EMPRESA AND NF.SERIE_NF = INF.SERIE_NF AND NF.MODELO_NF = INF.MODELO_NF AND NF.TIPO_CONTROL = INF.TIPO_CONTROL AND NF.NRO_NF = INF.NRO_NF); COMMIT WORK; UPDATE ITENS_NF INF SET INF.COD_OPEFISC = (SELECT OP.COD_OPEFISC FROM OPER_FISCAL OP WHERE OP.CFOP = INF.CFOP); COMMIT WORK; alter table ITENS_NF add constraint FK_ITENS_NF_OPER_FISCAL foreign key (COD_OPEFISC) references OPER_FISCAL(COD_OPEFISC); COMMIT WORK; UPDATE ITENS_ENTRADA IET SET IET.CFOP = (SELECT ET.CFOP FROM ENTRADAS ET WHERE ET.COD_EMPRESA = IET.COD_EMPRESA AND ET.SEQ_INCLUSAO = IET.SEQ_INCLUSAO AND ET.TIPO_CONTROL = IET.TIPO_CONTROL AND ET.DOCUMENTO = IET.DOCUMENTO); COMMIT WORK; UPDATE ITENS_ENTRADA IET SET IET.COD_OPEFISC = (SELECT OP.COD_OPEFISC FROM OPER_FISCAL OP WHERE OP.CFOP = IET.CFOP); COMMIT WORK; ALTER TRIGGER TG_UPDATE_ENTRADAS INACTIVE; COMMIT WORK; UPDATE ENTRADAS ET SET ET.DESCR_OPERACAO = (SELECT OP.DESCRICAO FROM OPER_FISCAL OP WHERE OP.CFOP = ET.CFOP) WHERE ET.DESCR_OPERACAO IS NULL; COMMIT WORK; UPDATE ENTRADAS ET SET ET.COD_OPE_CONH = (SELECT OP.COD_OPEFISC FROM ENTRADAS ET2 INNER JOIN OPER_FISCAL OP ON (ET2.CFOP = OP.CFOP) WHERE ET2.COD_EMPRESA = ET.COD_EMPRESA AND ET2.SEQ_INCLUSAO = ET.SEQ_INCLUSAO AND ET2.TIPO_CONTROL = ET.TIPO_CONTROL AND ET2.DOCUMENTO = ET.DOCUMENTO) WHERE ET.MODELO_DOC = '08'; COMMIT WORK; UPDATE ENTRADAS ET SET ET.COD_OPE_MOD = (SELECT OP.COD_OPEFISC FROM ENTRADAS ET2 INNER JOIN OPER_FISCAL OP ON (ET2.CFOP = OP.CFOP) WHERE ET2.COD_EMPRESA = ET.COD_EMPRESA AND ET2.SEQ_INCLUSAO = ET.SEQ_INCLUSAO AND ET2.TIPO_CONTROL = ET.TIPO_CONTROL AND ET2.DOCUMENTO = ET.DOCUMENTO) WHERE ET.MODELO_DOC = '06' OR ET.MODELO_DOC = '22'; COMMIT WORK; UPDATE ITENS_ENTRADA IET SET IET.COD_OPEFISC = (SELECT OP.COD_OPEFISC FROM OPER_FISCAL OP WHERE OP.CFOP = IET.CFOP); COMMIT WORK; ALTER TRIGGER TG_UPDATE_ENTRADAS ACTIVE; COMMIT WORK; alter table ENTRADAS add constraint FK_ENTRADAS_OPER_FISCAL_MOD foreign key (COD_OPE_MOD) references OPER_FISCAL(COD_OPEFISC); alter table ENTRADAS add constraint FK_ENTRADAS_OPER_FISCAL_CONH foreign key (COD_OPE_CONH) references OPER_FISCAL(COD_OPEFISC); alter table ITENS_ENTRADA add constraint FK_ITENS_ENTRADA_OPER_FISCAL foreign key (COD_OPEFISC) references OPER_FISCAL(COD_OPEFISC); COMMIT WORK; /*==============================================================*/ /* Table: ENTRADAS */ /*==============================================================*/ update RDB$RELATION_FIELDS set RDB$NULL_FLAG = NULL where (RDB$FIELD_NAME = 'CFOP') and (RDB$RELATION_NAME = 'ENTRADAS'); COMMIT WORK; /*==============================================================*/ /* Table: ITENS_NF */ /*==============================================================*/ ALTER TABLE ITENS_NF ADD RAT_FRETE NUMERIC(15,2); ALTER TABLE ITENS_NF ADD RAT_DESPESAS NUMERIC(15,2); ALTER TABLE ITENS_NF ADD RAT_SEGURO NUMERIC(15,2); ALTER TABLE ITENS_NF ADD RAT_DESCTO NUMERIC(15,2); ALTER TABLE ITENS_NF ADD RAT_ACRES NUMERIC(15,2); ALTER TABLE ITENS_NF ADD RAT_BASE_ICMS NUMERIC(15,2); ALTER TABLE ITENS_NF ADD RAT_VLR_ICMS NUMERIC(15,2); ALTER TABLE ITENS_NF ADD PERC_BC_ICMS NUMERIC(9,4); ALTER TABLE ITENS_NF ADD BC_ICMS_FDSDA NUMERIC(15,2); ALTER TABLE ITENS_NF ADD VLR_ICMS_FDSDA NUMERIC(15,2); ALTER TABLE ITENS_NF ADD BC_ICMS_SUBST NUMERIC(15,2); ALTER TABLE ITENS_NF ADD VLR_ICMS_SUBST NUMERIC(15,2); COMMIT WORK; UPDATE ITENS_NF SET RAT_FRETE = 0 WHERE RAT_FRETE IS NULL; UPDATE ITENS_NF SET RAT_DESPESAS = 0 WHERE RAT_DESPESAS IS NULL; UPDATE ITENS_NF SET RAT_SEGURO = 0 WHERE RAT_SEGURO IS NULL; UPDATE ITENS_NF SET RAT_DESCTO = 0 WHERE RAT_DESCTO IS NULL; UPDATE ITENS_NF SET RAT_ACRES = 0 WHERE RAT_ACRES IS NULL; UPDATE ITENS_NF SET RAT_BASE_ICMS = 0 WHERE RAT_BASE_ICMS IS NULL; UPDATE ITENS_NF SET RAT_VLR_ICMS = 0 WHERE RAT_VLR_ICMS IS NULL; UPDATE ITENS_NF SET BC_ICMS_FDSDA = 0 WHERE RAT_VLR_ICMS IS NULL; UPDATE ITENS_NF SET VLR_ICMS_FDSDA = 0 WHERE RAT_VLR_ICMS IS NULL; COMMIT WORK; UPDATE ITENS_NF INF SET INF.PERC_BC_ICMS = (SELECT ALQ.BASE_ICMS FROM ALIQ_ICMS ALQ WHERE ALQ.COD_ICMS = INF.COD_ICMS) WHERE INF.PERC_BC_ICMS IS NULL; COMMIT WORK; UPDATE ITENS_NF SET BC_ICMS_SUBST = 0 WHERE BC_ICMS_SUBST IS NULL; UPDATE ITENS_NF SET VLR_ICMS_SUBST = 0 WHERE VLR_ICMS_SUBST IS NULL; COMMIT WORK; /*==============================================================*/ /* Table: ITENS_ENTRADA */ /*==============================================================*/ ALTER TABLE ITENS_ENTRADA ADD RAT_FRETE NUMERIC(15,2); ALTER TABLE ITENS_ENTRADA ADD RAT_DESPESAS NUMERIC(15,2); ALTER TABLE ITENS_ENTRADA ADD RAT_SEGURO NUMERIC(15,2); ALTER TABLE ITENS_ENTRADA ADD RAT_DESCTO NUMERIC(15,2); ALTER TABLE ITENS_ENTRADA ADD RAT_BC_ICMS_SUBST NUMERIC(15,2); COMMIT WORK; UPDATE ITENS_ENTRADA SET RAT_FRETE = 0 WHERE RAT_FRETE IS NULL; UPDATE ITENS_ENTRADA SET RAT_DESPESAS = 0 WHERE RAT_DESPESAS IS NULL; UPDATE ITENS_ENTRADA SET RAT_SEGURO = 0 WHERE RAT_SEGURO IS NULL; UPDATE ITENS_ENTRADA SET RAT_DESCTO = 0 WHERE RAT_DESCTO IS NULL; UPDATE ITENS_ENTRADA SET RAT_BC_ICMS_SUBST = 0 WHERE RAT_DESCTO IS NULL; COMMIT WORK; /*==============================================================*/ /* Table: ENTRADAS */ /*==============================================================*/ ALTER TABLE ENTRADAS ADD OPCAO_NF CHAR(2); COMMIT WORK; ALTER TRIGGER TG_UPDATE_ENTRADAS INACTIVE; UPDATE ENTRADAS SET OPCAO_NF = 'NO' WHERE OPCAO_NF IS NULL; UPDATE ENTRADAS SET ICMS_SUBST = 0 WHERE ICMS_SUBST IS NULL; UPDATE ENTRADAS SET BASE_ICMS_SUBST = 0 WHERE BASE_ICMS_SUBST IS NULL; ALTER TRIGGER TG_UPDATE_ENTRADAS ACTIVE; COMMIT WORK; /*==============================================================*/ /* Table: FORNECEDOR_PRODUTO */ /*==============================================================*/ ALTER TABLE FORNECEDOR_PRODUTO ADD COD_PRODFOR VARCHAR(20); ALTER TABLE FORNECEDOR_PRODUTO ADD DESCR_PRODFOR VARCHAR(80); COMMIT WORK; /*==============================================================*/ /* Table: PARAMETROS */ /*==============================================================*/ INSERT INTO PARAMETROS (COD_PARAMETRO,SEQ_PARAM,NOME_PARAM,DESCR_PARAM,TIPO_PARAM,CLASS_PARAM,VALOR_PARAM) VALUES (1,46,'CAMINHO_ARQ_XML_ENTRADA','Entradas: Caminho Arquivos XML de Notas de Compra','STRING','7','C:\'); COMMIT WORK; /*==============================================================*/ /* Table: ENTRADAS */ /*==============================================================*/ ALTER TABLE ENTRADAS ADD CAMINHO_XML VARCHAR(100); 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 varNRO_NF INTEGER; DECLARE VARIABLE varSERIE_NF CHAR(3); DECLARE VARIABLE varVLR_TOTAL DECIMAL(15,2); DECLARE VARIABLE varBASE_ICMS DECIMAL(15,2); DECLARE VARIABLE varVLR_ICMS DECIMAL(15,2); DECLARE VARIABLE varBASE_ICMS_SUBST DECIMAL(15,2); DECLARE VARIABLE varVLR_ICMS_SUBST DECIMAL(15,2); DECLARE VARIABLE varVLR_IPI DECIMAL(15,2); DECLARE VARIABLE varBASE_ICMS2 DECIMAL(15,2); DECLARE VARIABLE varVLR_SERVICO DECIMAL(15,2); DECLARE VARIABLE varVLR_PRODUTO DECIMAL(15,2); DECLARE VARIABLE varVLR_FRETE DECIMAL(15,2); DECLARE VARIABLE varVLR_SEGURO DECIMAL(15,2); DECLARE VARIABLE varVLR_OUT_DESP DECIMAL(15,2); DECLARE VARIABLE varVLR_DESCTO DECIMAL(15,2); DECLARE VARIABLE varVLR_ACRES DECIMAL(15,2); DECLARE VARIABLE varVLR_ITENS DECIMAL(15,2); DECLARE VARIABLE varVLR_CONFERE DECIMAL(15,2); DECLARE VARIABLE varVLR_DIF DECIMAL(15,2); DECLARE VARIABLE varTOTAL_FDSDA DECIMAL(15,2); DECLARE VARIABLE varSEQ_ITEM INTEGER; DECLARE VARIABLE varPERC_BC_ICMS DECIMAL(9,4); DECLARE VARIABLE varPERC_ICMS DECIMAL(9,4); DECLARE VARIABLE varVLR_FDSDA DECIMAL(15,2); DECLARE VARIABLE varBC_ICMS_FDSDA DECIMAL(15,2); DECLARE VARIABLE varVLR_ICMS_FDSDA DECIMAL(15,2); 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.BC_ICMS_SUBST), SUM(INF.VLR_ICMS_SUBST) FROM ITENS_NF INF WHERE INF.COD_EMPRESA = NEW.COD_EMPRESA AND INF.NRO_NF = NEW.NRO_NF AND INF.TIPO_CONTROL = NEW.TIPO_CONTROL AND INF.SERIE_NF = NEW.SERIE_NF AND INF.MODELO_NF = NEW.MODELO_NF AND INF.TIPO_ITEM = 'MERC' INTO :varVLR_PRODUTO, :varBASE_ICMS, :varVLR_ICMS, :varVLR_IPI, :varBASE_ICMS_SUBST, :varVLR_ICMS_SUBST; IF (:varVLR_PRODUTO IS NOT NULL) THEN NEW.VLR_PROD = :varVLR_PRODUTO; IF (:varBASE_ICMS IS NOT NULL) THEN NEW.BASE_ICMS = :varBASE_ICMS; IF (:varVLR_ICMS IS NOT NULL) THEN NEW.VLR_ICMS = :varVLR_ICMS; IF (:varVLR_IPI IS NOT NULL) THEN NEW.VLR_IPI = :varVLR_IPI; IF (:varBASE_ICMS_SUBST IS NOT NULL) THEN NEW.BASE_SUBST = :varBASE_ICMS_SUBST; IF (:varVLR_ICMS_SUBST IS NOT NULL) THEN NEW.VLR_SUBST = :varVLR_ICMS_SUBST; /* SELEÇÃO DOS VALORES DOS ITENS DE SERVICO */ SELECT SUM(INF.VLR_TOTAL), SUM(INF.BASE_ICMS), SUM(INF.VLR_ICMS) FROM ITENS_NF INF WHERE INF.COD_EMPRESA = NEW.COD_EMPRESA AND INF.NRO_NF = NEW.NRO_NF AND INF.TIPO_CONTROL = NEW.TIPO_CONTROL AND INF.SERIE_NF = NEW.SERIE_NF AND INF.MODELO_NF = NEW.MODELO_NF AND INF.TIPO_ITEM = 'SERV' INTO :varVLR_SERVICO, :varBASE_ICMS, :varVLR_ICMS; IF (:varVLR_SERVICO IS NOT NULL) THEN NEW.VLR_SERV = :varVLR_SERVICO; IF (:varBASE_ICMS IS NOT NULL) THEN NEW.BASE_ICMS = NEW.BASE_ICMS + :varBASE_ICMS; IF (:varVLR_ICMS IS NOT NULL) THEN NEW.VLR_ICMS = NEW.VLR_ICMS + :varVLR_ICMS; NEW.VLR_TOTAL = NEW.VLR_FRETE + NEW.VLR_SEGURO + NEW.VLR_OUTDESP + NEW.VLR_IPI + NEW.VLR_ACRES - NEW.VLR_DESC; IF (varVLR_PRODUTO IS NOT NULL) THEN BEGIN UPDATE ITENS_NF INF SET INF.VLR_RATEIO = (INF.VLR_TOTAL / :varVLR_PRODUTO) * (NEW.VLR_TOTAL) WHERE INF.COD_EMPRESA = NEW.COD_EMPRESA AND INF.NRO_NF = NEW.NRO_NF AND INF.TIPO_CONTROL = NEW.TIPO_CONTROL AND INF.SERIE_NF = NEW.SERIE_NF AND INF.MODELO_NF = NEW.MODELO_NF AND INF.TIPO_ITEM = 'MERC'; NEW.VLR_TOTAL = NEW.VLR_TOTAL + NEW.VLR_PROD; END IF (varVLR_SERVICO IS NOT NULL) THEN NEW.VLR_TOTAL = NEW.VLR_TOTAL + NEW.VLR_SERV; varVLR_ITENS = NEW.VLR_PROD + NEW.VLR_SERV; IF (varVLR_ITENS > 0) then BEGIN IF (NEW.VLR_FRETE > 0) THEN BEGIN UPDATE ITENS_NF INF SET INF.RAT_FRETE = (INF.VLR_TOTAL * NEW.VLR_FRETE) / :varVLR_ITENS WHERE INF.COD_EMPRESA = NEW.COD_EMPRESA AND INF.SERIE_NF = NEW.SERIE_NF AND INF.NRO_NF = NEW.NRO_NF AND INF.MODELO_NF = NEW.MODELO_NF AND INF.TIPO_CONTROL = NEW.TIPO_CONTROL AND (INF.TIPO_ITEM = 'SERV' OR INF.TIPO_ITEM = 'MERC'); SELECT SUM(INF.RAT_FRETE), MIN(INF.SEQ_ITEM) FROM ITENS_NF INF WHERE INF.COD_EMPRESA = NEW.COD_EMPRESA AND INF.SERIE_NF = NEW.SERIE_NF AND INF.NRO_NF = NEW.NRO_NF AND INF.MODELO_NF = NEW.MODELO_NF AND INF.TIPO_CONTROL = NEW.TIPO_CONTROL AND (INF.TIPO_ITEM = 'SERV' OR INF.TIPO_ITEM = 'MERC') INTO :varVLR_CONFERE, :varSEQ_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.NRO_NF = NEW.NRO_NF AND INF.MODELO_NF = NEW.MODELO_NF AND INF.TIPO_CONTROL = NEW.TIPO_CONTROL AND (INF.TIPO_ITEM = 'SERV' OR INF.TIPO_ITEM = 'MERC') AND INF.SEQ_ITEM = :varSEQ_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_ITENS WHERE INF.COD_EMPRESA = NEW.COD_EMPRESA AND INF.SERIE_NF = NEW.SERIE_NF AND INF.NRO_NF = NEW.NRO_NF AND INF.MODELO_NF = NEW.MODELO_NF AND INF.TIPO_CONTROL = NEW.TIPO_CONTROL AND (INF.TIPO_ITEM = 'SERV' OR INF.TIPO_ITEM = 'MERC'); SELECT SUM(INF.RAT_SEGURO), MIN(INF.SEQ_ITEM) FROM ITENS_NF INF WHERE INF.COD_EMPRESA = NEW.COD_EMPRESA AND INF.SERIE_NF = NEW.SERIE_NF AND INF.NRO_NF = NEW.NRO_NF AND INF.MODELO_NF = NEW.MODELO_NF AND INF.TIPO_CONTROL = NEW.TIPO_CONTROL AND (INF.TIPO_ITEM = 'SERV' OR INF.TIPO_ITEM = 'MERC') INTO :varVLR_CONFERE, :varSEQ_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.NRO_NF = NEW.NRO_NF AND INF.MODELO_NF = NEW.MODELO_NF AND INF.TIPO_CONTROL = NEW.TIPO_CONTROL AND (INF.TIPO_ITEM = 'SERV' OR INF.TIPO_ITEM = 'MERC') AND INF.SEQ_ITEM = :varSEQ_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_ITENS WHERE INF.COD_EMPRESA = NEW.COD_EMPRESA AND INF.SERIE_NF = NEW.SERIE_NF AND INF.NRO_NF = NEW.NRO_NF AND INF.MODELO_NF = NEW.MODELO_NF AND INF.TIPO_CONTROL = NEW.TIPO_CONTROL AND (INF.TIPO_ITEM = 'SERV' OR INF.TIPO_ITEM = 'MERC'); SELECT SUM(INF.RAT_DESPESAS), MIN(INF.SEQ_ITEM) FROM ITENS_NF INF WHERE INF.COD_EMPRESA = NEW.COD_EMPRESA AND INF.SERIE_NF = NEW.SERIE_NF AND INF.NRO_NF = NEW.NRO_NF AND INF.MODELO_NF = NEW.MODELO_NF AND INF.TIPO_CONTROL = NEW.TIPO_CONTROL AND (INF.TIPO_ITEM = 'SERV' OR INF.TIPO_ITEM = 'MERC') INTO :varVLR_CONFERE, :varSEQ_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.NRO_NF = NEW.NRO_NF AND INF.MODELO_NF = NEW.MODELO_NF AND INF.TIPO_CONTROL = NEW.TIPO_CONTROL AND (INF.TIPO_ITEM = 'SERV' OR INF.TIPO_ITEM = 'MERC') AND INF.SEQ_ITEM = :varSEQ_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_ITENS WHERE INF.COD_EMPRESA = NEW.COD_EMPRESA AND INF.SERIE_NF = NEW.SERIE_NF AND INF.NRO_NF = NEW.NRO_NF AND INF.MODELO_NF = NEW.MODELO_NF AND INF.TIPO_CONTROL = NEW.TIPO_CONTROL AND (INF.TIPO_ITEM = 'SERV' OR INF.TIPO_ITEM = 'MERC'); SELECT SUM(INF.RAT_DESCTO), MIN(INF.SEQ_ITEM) FROM ITENS_NF INF WHERE INF.COD_EMPRESA = NEW.COD_EMPRESA AND INF.SERIE_NF = NEW.SERIE_NF AND INF.NRO_NF = NEW.NRO_NF AND INF.MODELO_NF = NEW.MODELO_NF AND INF.TIPO_CONTROL = NEW.TIPO_CONTROL AND (INF.TIPO_ITEM = 'SERV' OR INF.TIPO_ITEM = 'MERC') INTO :varVLR_CONFERE, :varSEQ_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.NRO_NF = NEW.NRO_NF AND INF.MODELO_NF = NEW.MODELO_NF AND INF.TIPO_CONTROL = NEW.TIPO_CONTROL AND (INF.TIPO_ITEM = 'SERV' OR INF.TIPO_ITEM = 'MERC') AND INF.SEQ_ITEM = :varSEQ_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_ITENS WHERE INF.COD_EMPRESA = NEW.COD_EMPRESA AND INF.SERIE_NF = NEW.SERIE_NF AND INF.NRO_NF = NEW.NRO_NF AND INF.MODELO_NF = NEW.MODELO_NF AND INF.TIPO_CONTROL = NEW.TIPO_CONTROL AND (INF.TIPO_ITEM = 'SERV' OR INF.TIPO_ITEM = 'MERC'); SELECT SUM(INF.RAT_ACRES), MIN(INF.SEQ_ITEM) FROM ITENS_NF INF WHERE INF.COD_EMPRESA = NEW.COD_EMPRESA AND INF.SERIE_NF = NEW.SERIE_NF AND INF.NRO_NF = NEW.NRO_NF AND INF.MODELO_NF = NEW.MODELO_NF AND INF.TIPO_CONTROL = NEW.TIPO_CONTROL AND (INF.TIPO_ITEM = 'SERV' OR INF.TIPO_ITEM = 'MERC') INTO :varVLR_CONFERE, :varSEQ_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.NRO_NF = NEW.NRO_NF AND INF.MODELO_NF = NEW.MODELO_NF AND INF.TIPO_CONTROL = NEW.TIPO_CONTROL AND (INF.TIPO_ITEM = 'SERV' OR INF.TIPO_ITEM = 'MERC') AND INF.SEQ_ITEM = :varSEQ_ITEM; END END END SELECT 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.NRO_NF = NEW.NRO_NF AND INF.TIPO_CONTROL = NEW.TIPO_CONTROL AND INF.SERIE_NF = NEW.SERIE_NF AND INF.MODELO_NF = NEW.MODELO_NF AND (INF.TIPO_ITEM = 'SERV' OR INF.TIPO_ITEM = 'MERC') INTO :varTOTAL_FDSDA; IF (varTOTAL_FDSDA > 0) THEN BEGIN FOR SELECT INF.SEQ_ITEM, INF.PERC_BC_ICMS, INF.PERC_ICMS, 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 AND (INF.TIPO_ITEM = 'SERV' OR INF.TIPO_ITEM = 'MERC') AND INF.BASE_ICMS > 0 INTO :varSEQ_ITEM, :varPERC_BC_ICMS, :varPERC_ICMS, :varVLR_FDSDA DO 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; UPDATE ITENS_NF INF SET INF.BC_ICMS_FDSDA = :varBC_ICMS_FDSDA, INF.VLR_ICMS_FDSDA = :varVLR_ICMS_FDSDA WHERE INF.COD_EMPRESA = NEW.COD_EMPRESA AND INF.SERIE_NF = NEW.SERIE_NF AND INF.NRO_NF = NEW.NRO_NF AND INF.MODELO_NF = NEW.MODELO_NF AND INF.TIPO_CONTROL = NEW.TIPO_CONTROL AND INF.SEQ_ITEM = :varSEQ_ITEM; END SELECT SUM(BC_ICMS_FDSDA), SUM(VLR_ICMS_FDSDA) FROM ITENS_NF INF WHERE INF.COD_EMPRESA = NEW.COD_EMPRESA AND INF.SERIE_NF = NEW.SERIE_NF AND INF.NRO_NF = NEW.NRO_NF AND INF.MODELO_NF = NEW.MODELO_NF AND INF.TIPO_CONTROL = NEW.TIPO_CONTROL INTO :varBASE_ICMS, :varVLR_ICMS; IF (:varBASE_ICMS IS NOT NULL) THEN NEW.BASE_ICMS = NEW.BASE_ICMS + :varBASE_ICMS; IF (:varVLR_ICMS IS NOT NULL) THEN NEW.VLR_ICMS = NEW.VLR_ICMS + :varVLR_ICMS; 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; END^ SET TERM ;^ COMMIT WORK; /*==============================================================*/ /* Trigger: TG_UPDATE_NOTAFISCAL */ /*==============================================================*/ 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 varVLR_CONFERE DECIMAL(15,2); DECLARE VARIABLE varVLR_DIF DECIMAL(15,2); DECLARE VARIABLE varVLR_TOTAL_DESCTO 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; 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) 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; 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 = 1; 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) 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; 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 = 1; 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) 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; 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.SEQ_ITEM = 1; 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) 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; 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 = 1; 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; /* = = Rateia Valores de Icms e Base Icms que alem dos Itens = =*/ 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.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; /* == 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'); /* = = 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_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 :varDOCUMENTO, :varSEQUENCIA, :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 = :varSEQUENCIA; END END^ SET TERM ;^ COMMIT WORK; /*==============================================================*/ /* Table: ENTRADAS */ /*==============================================================*/ UPDATE ENTRADAS SET TIPO_CONTROL = 'Q' WHERE TIPO_CONTROL = 'Q' AND DT_CHEGADA >= '01/01/2010'; COMMIT WORK; /*==============================================================*/ /* Table: NOTA_FISCAL */ /*==============================================================*/ UPDATE NOTA_FISCAL SET TIPO_CONTROL = 'Q' WHERE TIPO_CONTROL = 'Q' AND DT_EMISSAO >= '01/01/2010'; COMMIT WORK; /*================*/ /* Versão: 3.52 */ /*==============================================================*/ /* Table: ENTRADAS */ /*==============================================================*/ ALTER TABLE ITENS_ENTRADA ADD COD_IPI SMALLINT; ALTER TABLE ITENS_ENTRADA ADD PERC_IPI NUMERIC(9,2); ALTER TABLE ITENS_ENTRADA ADD BASE_IPI NUMERIC(15,2); ALTER TABLE ITENS_ENTRADA ADD CST_IPI CHAR(2); COMMIT WORK; ALTER TABLE ITENS_ENTRADA ALTER COLUMN TEM_PIS TO SUBST_PIS_COFINS; ALTER TABLE ITENS_ENTRADA DROP TEM_COFINS; COMMIT WORK; /*==============================================================*/ /* Table: PRODUTOS */ /*==============================================================*/ UPDATE PRODUTOS SET SUBST_PIS_COFINS = SUBST_TRIB_PIS WHERE SUBST_PIS_COFINS IS NULL; COMMIT WORK; alter table PRODUTOS drop SUBST_TRIB_PIS; alter table PRODUTOS drop SUBST_TRIB_COFINS; COMMIT WORK; /*==============================================================*/ /* Table: FORNECEDOR_PRODUTO */ /*==============================================================*/ ALTER TABLE FORNECEDOR_PRODUTO ADD VLR_ULTCMV NUMERIC(18,7); COMMIT WORK; /*================*/ /* Versão: 3.53 */ /*==============================================================*/ /* Table: CUPOM_FISCAL */ /*==============================================================*/ ALTER TABLE CUPOM_FISCAL ADD NOME_PESSOA VARCHAR(50); COMMIT WORK; DECLARE EXTERNAL FUNCTION substr CSTRING(255), SMALLINT, SMALLINT RETURNS CSTRING(255) FREE_IT ENTRY_POINT 'IB_UDF_substr' MODULE_NAME 'ib_udf'; COMMIT WORK;