/*================*/ /* Versão: 2.4.60 */ /*==============================================================*/ /* Trigger: TG_EXCLUIR_MOVTO_ESTOQUE */ /*==============================================================*/ SET TERM ^; ALTER TRIGGER TG_EXCLUIR_MOVTO_ESTOQUE ACTIVE BEFORE DELETE POSITION 0 AS DECLARE VARIABLE varSALDO_ANT NUMERIC(15,3); DECLARE VARIABLE varSALDO_ANT2 NUMERIC(15,3); DECLARE VARIABLE varCUSTO_ANT NUMERIC(15,5); DECLARE VARIABLE varSALDO_ANT_INI NUMERIC(15,3); DECLARE VARIABLE varSALDO_ANT_INI2 NUMERIC(15,3); DECLARE VARIABLE varCUSTO_ANT_INI NUMERIC(15,5); DECLARE VARIABLE varMES INTEGER; DECLARE VARIABLE varANO INTEGER; DECLARE VARIABLE varTIPO_OPER CHAR(1); DECLARE VARIABLE varTIPO_CTRL CHAR(1); DECLARE VARIABLE varQTD_MOV NUMERIC(15,3); DECLARE VARIABLE varVLR_LCTO NUMERIC(15,2); DECLARE VARIABLE varSOMA_E NUMERIC(15,3); DECLARE VARIABLE varSOMA_S NUMERIC(15,3); DECLARE VARIABLE varSOMA_E2 NUMERIC(15,3); DECLARE VARIABLE varSOMA_S2 NUMERIC(15,3); DECLARE VARIABLE varULT_CUSTO NUMERIC(15,5); DECLARE VARIABLE varCUSTO_NOVO NUMERIC(15,5); DECLARE VARIABLE varSALDO_ATUAL NUMERIC(15,3); DECLARE VARIABLE varSALDO_ATUAL2 NUMERIC(15,3); DECLARE VARIABLE varANO_REF SMALLINT; DECLARE VARIABLE varMES_REF SMALLINT; DECLARE VARIABLE varDIA_REF SMALLINT; DECLARE VARIABLE varSEQ_DIA SMALLINT; DECLARE VARIABLE varPRIM_REG SMALLINT; BEGIN SELECT SALDO_ANTERIOR, SALDO_ANTERIOR2, CUSTO_ANTERIOR FROM SALDO_PRODUTOS WHERE COD_EMPRESA = OLD.COD_EMPRESA AND COD_PRODUTO = OLD.COD_PRODUTO AND ANO_REF = OLD.ANO_REF AND MES_REF = OLD.MES_REF INTO :varSALDO_ANT, :varSALDO_ANT2, :varCUSTO_ANT; IF (varCUSTO_ANT IS NULL) THEN varCUSTO_ANT = 0.00; varSOMA_E = 0; varSOMA_S = 0; varSOMA_E2 = 0; varSOMA_S2 = 0; FOR SELECT TIPO_OPEREST, TIPO_CONTROL, QTD_MOV, VLR_CUSTO FROM MOVTO_ESTOQUE WHERE COD_EMPRESA = OLD.COD_EMPRESA AND COD_PRODUTO = OLD.COD_PRODUTO AND ANO_REF = OLD.ANO_REF AND MES_REF = OLD.MES_REF AND (DIA_REF < OLD.DIA_REF OR (DIA_REF = OLD.DIA_REF AND SEQ_DIA < OLD.SEQ_DIA)) ORDER BY MES_REF, DIA_REF, SEQ_DIA INTO :varTIPO_OPER, :varTIPO_CTRL, :varQTD_MOV, :varULT_CUSTO DO BEGIN IF ((varTIPO_OPER = 'E') AND (varTIPO_CTRL = 'Q')) THEN varSOMA_E = varSOMA_E + varQTD_MOV; IF ((varTIPO_OPER = 'S') AND (varTIPO_CTRL = 'Q')) THEN varSOMA_S = varSOMA_S + varQTD_MOV; IF ((varTIPO_OPER = 'E') AND (varTIPO_CTRL = 'F')) THEN varSOMA_E2 = varSOMA_E2 + varQTD_MOV; IF ((varTIPO_OPER = 'S') AND (varTIPO_CTRL = 'F')) THEN varSOMA_S2 = varSOMA_S2 + varQTD_MOV; END IF (varULT_CUSTO IS NULL) THEN varULT_CUSTO = varCUSTO_ANT; IF (varULT_CUSTO <= 0.00) THEN varULT_CUSTO = varCUSTO_ANT; varSALDO_ATUAL = (varSOMA_E - varSOMA_S) + varSALDO_ANT; varSALDO_ATUAL2 = (varSOMA_E2 - varSOMA_S2) + varSALDO_ANT2; varCUSTO_NOVO = varULT_CUSTO; IF (varSALDO_ATUAL IS NULL) THEN varSALDO_ATUAL = 0; IF (varSALDO_ATUAL2 IS NULL) THEN varSALDO_ATUAL2 = 0; IF ((OLD.TIPO_OPEREST = 'E') AND (OLD.TIPO_CONTROL = 'Q')) THEN BEGIN UPDATE SALDO_PRODUTOS SET QTD_ENTRADA = (QTD_ENTRADA - OLD.QTD_MOV), CUSTO_ATUAL = :varULT_CUSTO WHERE COD_EMPRESA = OLD.COD_EMPRESA AND COD_PRODUTO = OLD.COD_PRODUTO AND ANO_REF = OLD.ANO_REF AND MES_REF = OLD.MES_REF; END IF ((OLD.TIPO_OPEREST = 'E') AND (OLD.TIPO_CONTROL = 'F')) THEN BEGIN UPDATE SALDO_PRODUTOS SET QTD_ENTRADA2 = (QTD_ENTRADA2 - OLD.QTD_MOV) WHERE COD_EMPRESA = OLD.COD_EMPRESA AND COD_PRODUTO = OLD.COD_PRODUTO AND ANO_REF = OLD.ANO_REF AND MES_REF = OLD.MES_REF; END IF ((OLD.TIPO_OPEREST = 'S') AND (OLD.TIPO_CONTROL = 'Q')) THEN BEGIN UPDATE SALDO_PRODUTOS SET QTD_SAIDA = (QTD_SAIDA - OLD.QTD_MOV) WHERE COD_EMPRESA = OLD.COD_EMPRESA AND COD_PRODUTO = OLD.COD_PRODUTO AND ANO_REF = OLD.ANO_REF AND MES_REF = OLD.MES_REF; END IF ((OLD.TIPO_OPEREST = 'S') AND (OLD.TIPO_CONTROL = 'F')) THEN BEGIN UPDATE SALDO_PRODUTOS SET QTD_SAIDA2 = (QTD_SAIDA2 - OLD.QTD_MOV) WHERE COD_EMPRESA = OLD.COD_EMPRESA AND COD_PRODUTO = OLD.COD_PRODUTO AND ANO_REF = OLD.ANO_REF AND MES_REF = OLD.MES_REF; END varMES = OLD.MES_REF; varANO = OLD.ANO_REF; varCUSTO_ANT_INI = varCUSTO_ANT; varCUSTO_ANT = varULT_CUSTO; varSALDO_ANT_INI = varSALDO_ANT; varSALDO_ANT_INI2 = varSALDO_ANT2; varPRIM_REG = 0; FOR SELECT ANO_REF, MES_REF, DIA_REF, SEQ_DIA, TIPO_OPEREST, TIPO_CONTROL, QTD_MOV, VLR_LCTO FROM MOVTO_ESTOQUE WHERE COD_EMPRESA = OLD.COD_EMPRESA AND COD_PRODUTO = OLD.COD_PRODUTO AND ((ANO_REF = OLD.ANO_REF AND (MES_REF > OLD.MES_REF OR ((MES_REF = OLD.MES_REF) AND (DIA_REF > OLD.DIA_REF OR (DIA_REF = OLD.DIA_REF AND SEQ_DIA > OLD.SEQ_DIA))))) OR (ANO_REF > OLD.ANO_REF)) ORDER BY MES_REF, DIA_REF, SEQ_DIA INTO :varANO_REF, :varMES_REF, :varDIA_REF, :varSEQ_DIA, :varTIPO_OPER, :varTIPO_CTRL, :varQTD_MOV, :varVLR_LCTO DO BEGIN IF (varMES_REF > (OLD.MES_REF + 1)) THEN BEGIN IF (varPRIM_REG = 0) THEN BEGIN UPDATE SALDO_PRODUTOS SET CUSTO_ATUAL = :varCUSTO_NOVO WHERE COD_EMPRESA = OLD.COD_EMPRESA AND COD_PRODUTO = OLD.COD_PRODUTO AND ANO_REF = OLD.ANO_REF AND MES_REF = OLD.MES_REF; varPRIM_REG = 1; END varMES = OLD.MES_REF + 1; WHILE (varMES <= varMES_REF) DO BEGIN SELECT SALDO_FINAL, SALDO_FINAL2, CUSTO_ATUAL FROM SALDO_PRODUTOS WHERE COD_EMPRESA = OLD.COD_EMPRESA AND COD_PRODUTO = OLD.COD_PRODUTO AND ANO_REF = :varANO AND MES_REF = (:varMES - 1) INTO :varSALDO_ANT_INI, :varSALDO_ANT_INI2, :varCUSTO_ANT_INI; UPDATE SALDO_PRODUTOS SET CUSTO_ANTERIOR = :varCUSTO_ANT_INI, CUSTO_ATUAL = :varCUSTO_ANT_INI, SALDO_ANTERIOR = :varSALDO_ANT_INI, SALDO_ANTERIOR2 = :varSALDO_ANT_INI2 WHERE COD_EMPRESA = OLD.COD_EMPRESA AND COD_PRODUTO = OLD.COD_PRODUTO AND ANO_REF = :varANO AND MES_REF = :varMES; varMES = varMES + 1; varSALDO_ATUAL = varSALDO_ANT_INI; varULT_CUSTO = varCUSTO_ANT_INI; END END IF ((varTIPO_OPER = 'E') AND (varTIPO_CTRL = 'Q')) THEN varCUSTO_NOVO = ((varSALDO_ATUAL * varULT_CUSTO) + varVLR_LCTO) / (varSALDO_ATUAL + varQTD_MOV); IF ((varTIPO_OPER = 'E') AND (varTIPO_CTRL = 'F')) THEN varCUSTO_NOVO = varULT_CUSTO; IF (varTIPO_OPER = 'S') THEN varCUSTO_NOVO = varULT_CUSTO; varULT_CUSTO = varCUSTO_NOVO; UPDATE MOVTO_ESTOQUE SET VLR_CUSTO = :varCUSTO_NOVO WHERE COD_EMPRESA = OLD.COD_EMPRESA AND COD_PRODUTO = OLD.COD_PRODUTO AND ANO_REF = :varANO_REF AND MES_REF = :varMES_REF AND DIA_REF = :varDIA_REF AND SEQ_DIA = :varSEQ_DIA; IF (varMES < varMES_REF) THEN BEGIN UPDATE SALDO_PRODUTOS SET CUSTO_ANTERIOR = :varCUSTO_ANT, CUSTO_ATUAL = :varULT_CUSTO, SALDO_ANTERIOR = :varSALDO_ATUAL, SALDO_ANTERIOR2 = :varSALDO_ATUAL2 WHERE COD_EMPRESA = OLD.COD_EMPRESA AND COD_PRODUTO = OLD.COD_PRODUTO AND ANO_REF = :varANO_REF AND MES_REF = :varMES_REF; varCUSTO_ANT_INI = varCUSTO_ANT; varSALDO_ANT_INI = varSALDO_ANT; varSALDO_ANT_INI2 = varSALDO_ANT2; END IF ((varTIPO_OPER = 'E') AND (varTIPO_CTRL = 'Q')) THEN varSALDO_ATUAL = varSALDO_ATUAL + varQTD_MOV; IF ((varTIPO_OPER = 'S') AND (varTIPO_CTRL = 'Q')) THEN varSALDO_ATUAL = varSALDO_ATUAL - varQTD_MOV; IF ((varTIPO_OPER = 'E') AND (varTIPO_CTRL = 'F')) THEN varSALDO_ATUAL2 = varSALDO_ATUAL2 + varQTD_MOV; IF ((varTIPO_OPER = 'S') AND (varTIPO_CTRL = 'F')) THEN varSALDO_ATUAL2 = varSALDO_ATUAL2 - varQTD_MOV; varMES = varMES_REF; varANO = varANO_REF; varCUSTO_ANT = varCUSTO_NOVO; varSALDO_ANT = varSALDO_ATUAL; varSALDO_ANT2 = varSALDO_ATUAL2; varPRIM_REG = 1; END IF ((OLD.TIPO_OPEREST = 'E') AND (OLD.TIPO_CONTROL = 'Q')) THEN BEGIN UPDATE SALDO_PRODUTOS SET CUSTO_ATUAL = :varCUSTO_NOVO WHERE COD_EMPRESA = OLD.COD_EMPRESA AND COD_PRODUTO = OLD.COD_PRODUTO AND ANO_REF = :varANO AND MES_REF = :varMES; END SELECT SALDO_FINAL, SALDO_FINAL2, CUSTO_ATUAL FROM SALDO_PRODUTOS WHERE COD_EMPRESA = OLD.COD_EMPRESA AND COD_PRODUTO = OLD.COD_PRODUTO AND ANO_REF = :varANO AND MES_REF = :varMES INTO :varSALDO_ANT, :varSALDO_ANT2, :varCUSTO_ANT; varMES = varMES + 1; WHILE (varMES <= 12) DO BEGIN UPDATE SALDO_PRODUTOS SET CUSTO_ANTERIOR = :varCUSTO_ANT, CUSTO_ATUAL = :varCUSTO_ANT, SALDO_ANTERIOR = :varSALDO_ANT, SALDO_ANTERIOR2 = :varSALDO_ANT2 WHERE COD_EMPRESA = OLD.COD_EMPRESA AND COD_PRODUTO = OLD.COD_PRODUTO AND ANO_REF = :varANO AND MES_REF = :varMES; SELECT SALDO_FINAL, SALDO_FINAL2, CUSTO_ATUAL FROM SALDO_PRODUTOS WHERE COD_EMPRESA = OLD.COD_EMPRESA AND COD_PRODUTO = OLD.COD_PRODUTO AND ANO_REF = :varANO AND MES_REF = :varMES INTO :varSALDO_ANT, :varSALDO_ANT2, :varCUSTO_ANT; varMES = varMES + 1; END END^ SET TERM ;^ COMMIT WORK; /*==============================================================*/ /* Trigger: TG_INSERIR_MOVTO_ESTOQUE */ /*==============================================================*/ SET TERM ^; ALTER TRIGGER TG_INSERIR_MOVTO_ESTOQUE ACTIVE BEFORE INSERT POSITION 0 AS DECLARE VARIABLE varSALDO_ANT NUMERIC(15,3); DECLARE VARIABLE varSALDO_ANT2 NUMERIC(15,3); DECLARE VARIABLE varCUSTO_ANT NUMERIC(15,5); DECLARE VARIABLE varSALDO_ANT_INI NUMERIC(15,3); DECLARE VARIABLE varSALDO_ANT_INI2 NUMERIC(15,3); DECLARE VARIABLE varCUSTO_ANT_INI NUMERIC(15,5); DECLARE VARIABLE varMES INTEGER; DECLARE VARIABLE varANO INTEGER; DECLARE VARIABLE varINI INTEGER; DECLARE VARIABLE varTIPO_OPER CHAR(1); DECLARE VARIABLE varTIPO_CTRL CHAR(1); DECLARE VARIABLE varQTD_MOV NUMERIC(15,3); DECLARE VARIABLE varVLR_LCTO NUMERIC(15,2); DECLARE VARIABLE varSOMA_E NUMERIC(15,3); DECLARE VARIABLE varSOMA_S NUMERIC(15,3); DECLARE VARIABLE varSOMA_E2 NUMERIC(15,3); DECLARE VARIABLE varSOMA_S2 NUMERIC(15,3); DECLARE VARIABLE varULT_CUSTO NUMERIC(15,5); DECLARE VARIABLE varSALDO_ATUAL NUMERIC(15,3); DECLARE VARIABLE varSALDO_ATUAL2 NUMERIC(15,3); DECLARE VARIABLE varCUSTO_NOVO NUMERIC(15,5); DECLARE VARIABLE varANO_REF SMALLINT; DECLARE VARIABLE varMES_REF SMALLINT; DECLARE VARIABLE varDIA_REF SMALLINT; DECLARE VARIABLE varSEQ_DIA SMALLINT; BEGIN /* SELECIONA O SALDO E CUSTO ANTERIOR */ SELECT SALDO_ANTERIOR, SALDO_ANTERIOR2, CUSTO_ANTERIOR FROM SALDO_PRODUTOS WHERE COD_EMPRESA = NEW.COD_EMPRESA AND COD_PRODUTO = NEW.COD_PRODUTO AND ANO_REF = NEW.ANO_REF AND MES_REF = NEW.MES_REF INTO :varSALDO_ANT, :varSALDO_ANT2, :varCUSTO_ANT; /* SE NÃO EXISTIR, SERÁ GERADO AUTOMATICAMENTE PELA TRIGGER */ IF ((varSALDO_ANT IS NULL) AND (varSALDO_ANT2 IS NULL)) THEN BEGIN varSALDO_ANT = 0; varSALDO_ANT2 = 0; varCUSTO_ANT = 0; varMES = 1; WHILE (varMES <= 12) DO BEGIN INSERT INTO SALDO_PRODUTOS (COD_EMPRESA, COD_PRODUTO, ANO_REF, MES_REF, SALDO_ANTERIOR, QTD_ENTRADA, QTD_SAIDA, SALDO_ANTERIOR2, QTD_ENTRADA2, QTD_SAIDA2, CUSTO_ANTERIOR, CUSTO_ATUAL) VALUES (NEW.COD_EMPRESA, NEW.COD_PRODUTO, NEW.ANO_REF, :varMES,0,0,0,0,0,0,0,0); varMES = varMES + 1; END END /* PERCORRE O MOVIMENTO DO ESTOQUE PARA ACHAR O SALDO ATÉ O ULTIMA LANÇAMENTO */ varSOMA_E = 0; varSOMA_S = 0; FOR SELECT TIPO_OPEREST, TIPO_CONTROL, QTD_MOV, VLR_CUSTO FROM MOVTO_ESTOQUE WHERE COD_EMPRESA = NEW.COD_EMPRESA AND COD_PRODUTO = NEW.COD_PRODUTO AND ANO_REF = NEW.ANO_REF AND MES_REF = NEW.MES_REF AND (DIA_REF < NEW.DIA_REF OR (DIA_REF = NEW.DIA_REF AND SEQ_DIA < NEW.SEQ_DIA)) ORDER BY MES_REF, DIA_REF, SEQ_DIA INTO :varTIPO_OPER, :varTIPO_CTRL, :varQTD_MOV, :varULT_CUSTO DO BEGIN IF ((varTIPO_OPER = 'E') AND (varTIPO_CTRL = 'Q')) THEN varSOMA_E = varSOMA_E + varQTD_MOV; IF ((varTIPO_OPER = 'S') AND (varTIPO_CTRL = 'Q')) THEN varSOMA_S = varSOMA_S + varQTD_MOV; IF ((varTIPO_OPER = 'E') AND (varTIPO_CTRL = 'F')) THEN varSOMA_E2 = varSOMA_E2 + varQTD_MOV; IF ((varTIPO_OPER = 'S') AND (varTIPO_CTRL = 'F')) THEN varSOMA_S2 = varSOMA_S2 + varQTD_MOV; END IF (varSOMA_E IS NULL) THEN varSOMA_E = 0; IF (varSOMA_S IS NULL) THEN varSOMA_S = 0; IF (varSOMA_E2 IS NULL) THEN varSOMA_E2 = 0; IF (varSOMA_S2 IS NULL) THEN varSOMA_S2 = 0; /* APROVEITA O EMBALO E PEGA O CUSTO DO ULTIMA LANCAMENTYO ANTES DO ATUAL */ IF ((varULT_CUSTO IS NULL) OR (varULT_CUSTO = 0)) THEN varULT_CUSTO = varCUSTO_ANT; varSALDO_ATUAL = (varSOMA_E - varSOMA_S) + varSALDO_ANT; varSALDO_ATUAL2 = (varSOMA_E2 - varSOMA_S2) + varSALDO_ANT2; IF (varSALDO_ATUAL IS NULL) THEN varSALDO_ATUAL = varSALDO_ANT; IF (varSALDO_ATUAL2 IS NULL) THEN varSALDO_ATUAL2 = varSALDO_ANT2; /* CALCULA O NOVO CUSTO SE FOR ENTRADA, NA SAIDA MANTEM */ IF ((NEW.TIPO_OPEREST = 'E') AND (NEW.TIPO_CONTROL = 'Q')) THEN BEGIN IF ((varSALDO_ATUAL + NEW.QTD_MOV) = 0) THEN varCUSTO_NOVO = 0; ELSE BEGIN IF (varSALDO_ATUAL < 0) THEN varCUSTO_NOVO = 0; ELSE varCUSTO_NOVO = ((varSALDO_ATUAL * varULT_CUSTO) + NEW.VLR_LCTO) / (varSALDO_ATUAL + NEW.QTD_MOV); END IF (varCUSTO_NOVO = 0) THEN varCUSTO_NOVO = NEW.VLR_LCTO / NEW.QTD_MOV; IF (varCUSTO_NOVO = 0) THEN varCUSTO_NOVO = varULT_CUSTO; END ELSE varCUSTO_NOVO = varULT_CUSTO; IF (varCUSTO_NOVO < 0) THEN varCUSTO_NOVO = varCUSTO_NOVO * -1; NEW.VLR_CUSTO = varCUSTO_NOVO; /* ATUALIZA SE FOR ENTRADA OU SAIDA NO SALDO DO PRODUTO ATUAL */ IF ((NEW.TIPO_OPEREST = 'E') AND (NEW.TIPO_CONTROL = 'Q')) THEN BEGIN UPDATE SALDO_PRODUTOS SET QTD_ENTRADA = (QTD_ENTRADA + NEW.QTD_MOV), CUSTO_ATUAL = :varCUSTO_NOVO WHERE COD_EMPRESA = NEW.COD_EMPRESA AND COD_PRODUTO = NEW.COD_PRODUTO AND ANO_REF = NEW.ANO_REF AND MES_REF = NEW.MES_REF; varSALDO_ATUAL = varSALDO_ATUAL + NEW.QTD_MOV; END IF ((NEW.TIPO_OPEREST = 'E') AND (NEW.TIPO_CONTROL = 'F')) THEN BEGIN UPDATE SALDO_PRODUTOS SET QTD_ENTRADA2 = (QTD_ENTRADA2 + NEW.QTD_MOV) WHERE COD_EMPRESA = NEW.COD_EMPRESA AND COD_PRODUTO = NEW.COD_PRODUTO AND ANO_REF = NEW.ANO_REF AND MES_REF = NEW.MES_REF; varSALDO_ATUAL = varSALDO_ATUAL + NEW.QTD_MOV; END IF ((NEW.TIPO_OPEREST = 'S') AND (NEW.TIPO_CONTROL = 'Q')) THEN BEGIN UPDATE SALDO_PRODUTOS SET QTD_SAIDA = (QTD_SAIDA + NEW.QTD_MOV), CUSTO_ATUAL = :varCUSTO_NOVO WHERE COD_EMPRESA = NEW.COD_EMPRESA AND COD_PRODUTO = NEW.COD_PRODUTO AND ANO_REF = NEW.ANO_REF AND MES_REF = NEW.MES_REF; varSALDO_ATUAL = varSALDO_ATUAL - NEW.QTD_MOV; END IF ((NEW.TIPO_OPEREST = 'S') AND (NEW.TIPO_CONTROL = 'F')) THEN BEGIN UPDATE SALDO_PRODUTOS SET QTD_SAIDA = (QTD_SAIDA + NEW.QTD_MOV) WHERE COD_EMPRESA = NEW.COD_EMPRESA AND COD_PRODUTO = NEW.COD_PRODUTO AND ANO_REF = NEW.ANO_REF AND MES_REF = NEW.MES_REF; varSALDO_ATUAL = varSALDO_ATUAL - NEW.QTD_MOV; END varINI = 0; /* COMEÇA A PERCORRER OS REGISTROS SUPERIORES AO LANÇAMENTO ATUAL ATE O FINAL DO MES, E RECALCULAR OS CULSTOS */ FOR SELECT ANO_REF, MES_REF, DIA_REF, SEQ_DIA, TIPO_OPEREST, TIPO_CONTROL, QTD_MOV, VLR_LCTO FROM MOVTO_ESTOQUE WHERE COD_EMPRESA = NEW.COD_EMPRESA AND COD_PRODUTO = NEW.COD_PRODUTO AND (ANO_REF = NEW.ANO_REF AND MES_REF = NEW.MES_REF AND (DIA_REF > NEW.DIA_REF OR (DIA_REF = NEW.DIA_REF AND SEQ_DIA > NEW.SEQ_DIA))) ORDER BY ANO_REF, MES_REF, DIA_REF, SEQ_DIA INTO :varANO_REF, :varMES_REF, :varDIA_REF, :varSEQ_DIA, :varTIPO_OPER, :varTIPO_CTRL, :varQTD_MOV, :varVLR_LCTO DO BEGIN /* RECALCULA O NOVO CUSTO PARA O LANÇAMENTO SELECIONADO */ varULT_CUSTO = varCUSTO_NOVO; IF ((varTIPO_OPER = 'E') AND (varTIPO_CTRL = 'Q')) THEN BEGIN IF (((varSALDO_ATUAL + varQTD_MOV) = 0) OR (varSALDO_ATUAL < 0)) THEN varCUSTO_NOVO = varULT_CUSTO; ELSE varCUSTO_NOVO = ((varSALDO_ATUAL * varULT_CUSTO) + varVLR_LCTO) / (varSALDO_ATUAL + varQTD_MOV); END IF ((varTIPO_OPER = 'E') AND (varTIPO_CTRL = 'F')) THEN varCUSTO_NOVO = varULT_CUSTO; IF (varTIPO_OPER = 'S') THEN varCUSTO_NOVO = varULT_CUSTO; /* ATUALIZA O CUSTO MEDIO NO LANÇAMENTO DO MOVIMENTO ESTOQUE */ UPDATE MOVTO_ESTOQUE SET VLR_CUSTO = :varCUSTO_NOVO WHERE COD_EMPRESA = NEW.COD_EMPRESA AND COD_PRODUTO = NEW.COD_PRODUTO AND ANO_REF = :varANO_REF AND MES_REF = :varMES_REF AND DIA_REF = :varDIA_REF AND SEQ_DIA = :varSEQ_DIA; /* INCREMENTO DA VARIAVEL SALDO ATUAL COM O LANÇAMENTO SELECIONADO */ IF ((varTIPO_OPER = 'E') AND (varTIPO_CTRL = 'Q')) THEN varSALDO_ATUAL = varSALDO_ATUAL + varQTD_MOV; IF ((varTIPO_OPER = 'S') AND (varTIPO_CTRL = 'Q')) THEN varSALDO_ATUAL = varSALDO_ATUAL - varQTD_MOV; IF ((varTIPO_OPER = 'E') AND (varTIPO_CTRL = 'F')) THEN varSALDO_ATUAL2 = varSALDO_ATUAL2 + varQTD_MOV; IF ((varTIPO_OPER = 'S') AND (varTIPO_CTRL = 'F')) THEN varSALDO_ATUAL2 = varSALDO_ATUAL2 - varQTD_MOV; varINI = 1; END IF (varINI = 1) THEN BEGIN /* ATUALIZO O CUSTO DO MES DO MOVIMENTO */ UPDATE SALDO_PRODUTOS SET CUSTO_ATUAL = :varCUSTO_NOVO WHERE COD_EMPRESA = NEW.COD_EMPRESA AND COD_PRODUTO = NEW.COD_PRODUTO AND ANO_REF = NEW.ANO_REF AND MES_REF = NEW.MES_REF; END /* SELECIONA OS SALDO E CUSTOS ATUAIS PRA SEREM USADOS COMO ANTERIORES NO PROXIMO MES */ SELECT SALDO_FINAL, SALDO_FINAL2, CUSTO_ATUAL FROM SALDO_PRODUTOS WHERE COD_EMPRESA = NEW.COD_EMPRESA AND COD_PRODUTO = NEW.COD_PRODUTO AND ANO_REF = NEW.ANO_REF AND MES_REF = NEW.MES_REF INTO :varSALDO_ANT_INI, :varSALDO_ANT_INI2, :varCUSTO_ANT_INI; /* ================================================================================= */ /* VAI PERCOREER TODOS OS SALDOS ACIMA DO MES DE LANÇAMENTO RECELCULANDO O MOVIMENTO */ FOR SELECT ANO_REF, MES_REF FROM SALDO_PRODUTOS WHERE COD_EMPRESA = NEW.COD_EMPRESA AND COD_PRODUTO = NEW.COD_PRODUTO AND ((ANO_REF = NEW.ANO_REF AND MES_REF > NEW.MES_REF) OR (ANO_REF > NEW.ANO_REF)) ORDER BY ANO_REF, MES_REF INTO :varANO_REF, :varMES_REF DO BEGIN /* ATUALIZA O CUSTO E SALDO ANTERIOR DO MES SEGUINTE COMS OS DO ULTIMO MES */ UPDATE SALDO_PRODUTOS SET CUSTO_ANTERIOR = :varCUSTO_ANT_INI, SALDO_ANTERIOR = :varSALDO_ANT_INI, SALDO_ANTERIOR2 = :varSALDO_ANT_INI2 WHERE COD_EMPRESA = NEW.COD_EMPRESA AND COD_PRODUTO = NEW.COD_PRODUTO AND ANO_REF = :varANO_REF AND MES_REF = :varMES_REF; varSALDO_ATUAL = varSALDO_ANT_INI; varSALDO_ATUAL2 = varSALDO_ANT_INI2; varCUSTO_NOVO = varCUSTO_ANT_INI; varULT_CUSTO = varCUSTO_ANT_INI; /* SELECIONA O MOVIMENTO PARA O MES A ANO DO SALDO SELECIOANDO */ FOR SELECT DIA_REF, SEQ_DIA, TIPO_OPEREST, TIPO_CONTROL, QTD_MOV, VLR_LCTO FROM MOVTO_ESTOQUE WHERE COD_EMPRESA = NEW.COD_EMPRESA AND COD_PRODUTO = NEW.COD_PRODUTO AND ANO_REF = :varANO_REF AND MES_REF = :varMES_REF ORDER BY ANO_REF, MES_REF, DIA_REF, SEQ_DIA INTO :varDIA_REF, :varSEQ_DIA, :varTIPO_OPER, :varTIPO_CTRL, :varQTD_MOV, :varVLR_LCTO DO BEGIN /* RECALCULA O NOVO CUSTO PARA O LANÇAMENTO SELECIONADO */ IF ((varTIPO_OPER = 'E') AND (varTIPO_CTRL = 'Q')) THEN BEGIN IF (((varSALDO_ATUAL + varQTD_MOV) = 0) OR (varSALDO_ATUAL < 0)) THEN varCUSTO_NOVO = varULT_CUSTO; ELSE varCUSTO_NOVO = ((varSALDO_ATUAL * varULT_CUSTO) + varVLR_LCTO) / (varSALDO_ATUAL + varQTD_MOV); END IF ((varTIPO_OPER = 'E') AND (varTIPO_CTRL = 'F')) THEN varCUSTO_NOVO = varULT_CUSTO; IF (varTIPO_OPER = 'S') THEN varCUSTO_NOVO = varULT_CUSTO; varULT_CUSTO = varCUSTO_NOVO; /* ATUALIZA O CUSTO MEDIO NO LANÇAMENTO DO MOVIMENTO ESTOQUE */ UPDATE MOVTO_ESTOQUE SET VLR_CUSTO = :varCUSTO_NOVO WHERE COD_EMPRESA = NEW.COD_EMPRESA AND COD_PRODUTO = NEW.COD_PRODUTO AND ANO_REF = :varANO_REF AND MES_REF = :varMES_REF AND DIA_REF = :varDIA_REF AND SEQ_DIA = :varSEQ_DIA; /* INCREMENTO DA VARIAVEL SALDO ATUAL COM O LANÇAMENTO SELECIONADO */ IF ((varTIPO_OPER = 'E') AND (varTIPO_CTRL = 'Q')) THEN varSALDO_ATUAL = varSALDO_ATUAL + varQTD_MOV; IF ((varTIPO_OPER = 'S') AND (varTIPO_CTRL = 'Q')) THEN varSALDO_ATUAL = varSALDO_ATUAL - varQTD_MOV; END UPDATE SALDO_PRODUTOS SET CUSTO_ATUAL = :varCUSTO_NOVO WHERE COD_EMPRESA = NEW.COD_EMPRESA AND COD_PRODUTO = NEW.COD_PRODUTO AND ANO_REF = :varANO_REF AND MES_REF = :varMES_REF; /* SELECIONA OS SALDO E CUSTOS ATUAIS PRA SEREM USADOS COMO ANTERIORES NO PROXIMO MES */ SELECT SALDO_FINAL, SALDO_FINAL2, CUSTO_ATUAL FROM SALDO_PRODUTOS WHERE COD_EMPRESA = NEW.COD_EMPRESA AND COD_PRODUTO = NEW.COD_PRODUTO AND ANO_REF = :varANO_REF AND MES_REF = :varMES_REF INTO :varSALDO_ANT_INI, :varSALDO_ANT_INI2, :varCUSTO_ANT_INI; END END^ SET TERM ;^ COMMIT WORK; /*================*/ /* Versão: 2.4.65 */ /*==============================================================*/ /* Table: CTRL_CARGAS */ /*==============================================================*/ create table CTRL_CARGAS ( COD_CARGA INTEGER not null, DT_CARGA DATE, DESCRICAO VARCHAR(40), COD_TRANSP SMALLINT, QTD_LIMITE NUMERIC(12,3), QTD_LANCTO NUMERIC(12,3), constraint PK_CTRL_CARGAS primary key (COD_CARGA) ); COMMIT WORK; alter table CTRL_CARGAS add constraint FK_CTRL_CARGAS_TRANSP foreign key (COD_TRANSP) references TRANSPORTADORES(COD_TRANSP); COMMIT WORK; /*==============================================================*/ /* Table: ITENS_PEDIDO */ /*==============================================================*/ ALTER TABLE ITENS_PEDIDO ADD PESO_UNIT NUMERIC(12,3); COMMIT WORK; /*==============================================================*/ /* Table: PEDIDOS */ /*==============================================================*/ ALTER TABLE PEDIDOS ADD COD_CARGA INTEGER; COMMIT WORK; /*================*/ /* Versão: 2.4.65 */ /*==============================================================*/ /* Table: PARAMETROS */ /*==============================================================*/ INSERT INTO PARAMETROS (COD_PARAMETRO,SEQ_PARAM,NOME_PARAM,DESCR_PARAM,TIPO_PARAM,CLASS_PARAM,VALOR_PARAM) VALUES (1,77,'CRED_ABILITA_CALC_ACRES','Crediário: Abilita Cálculo de Acrescimos no Contas Receber','STRING','2','N'); INSERT INTO PARAMETROS (COD_PARAMETRO,SEQ_PARAM,NOME_PARAM,DESCR_PARAM,TIPO_PARAM,CLASS_PARAM) VALUES (1,78,'CRED_MESG_JUROS_MULTAS','Crediário: Mensagem Carnê referente Juras e Multas','STRING','2'); INSERT INTO PARAMETROS (COD_PARAMETRO,SEQ_PARAM,NOME_PARAM,DESCR_PARAM,TIPO_PARAM,CLASS_PARAM,VALOR_PARAM) VALUES (1,79,'CRED_TIPO_CALC_MULTA','Crediário: Tipo Calculo da Multa [% ou VALOR]','STRING','2','VALOR'); INSERT INTO PARAMETROS (COD_PARAMETRO,SEQ_PARAM,NOME_PARAM,DESCR_PARAM,TIPO_PARAM,CLASS_PARAM,VALOR_PARAM) VALUES (1,80,'CRED_VLR_MULTA_ATRAZO','Crediário: Valor da Multa por Atrazo no Pagamento','FLOAT','2','0'); INSERT INTO PARAMETROS (COD_PARAMETRO,SEQ_PARAM,NOME_PARAM,DESCR_PARAM,TIPO_PARAM,CLASS_PARAM,VALOR_PARAM) VALUES (1,81,'CRED_TIPO_CALC_JURO','Crediário: Tipo Calculo do Juro [% ou VALOR]','STRING','2','VALOR'); INSERT INTO PARAMETROS (COD_PARAMETRO,SEQ_PARAM,NOME_PARAM,DESCR_PARAM,TIPO_PARAM,CLASS_PARAM,VALOR_PARAM) VALUES (1,82,'CRED_VLR_JURO_DIA_ATRAZO','Crediário: Valor Diário de Juro por Atrazo de Pagamento','FLOAT','2','0'); INSERT INTO PARAMETROS (COD_PARAMETRO,SEQ_PARAM,NOME_PARAM,DESCR_PARAM,TIPO_PARAM,CLASS_PARAM,VALOR_PARAM) VALUES (1,83,'CRED_DIAS_ABONO_MULTA_VENCTO','Crediário: Dias de Abono Multa/Juro após o Vencimento','INTEGER','2','5'); COMMIT WORK; /*==============================================================*/ /* Table: DOCTOS_RECPAG */ /*==============================================================*/ ALTER TABLE DOCTOS_RECPAG ADD VLR_DESCTO NUMERIC(15,2); ALTER TABLE DOCTOS_RECPAG ADD VLR_A_ACRES NUMERIC(15,2); ALTER TABLE DOCTOS_RECPAG ADD VLR_A_RECPAG COMPUTED BY(VLR_ABERTO + VLR_A_ACRES); ALTER TABLE DOCTOS_RECPAG ADD VLR_RECPAG COMPUTED BY(VLR_DOC + VLR_ACRES - VLR_DESCTO); COMMIT WORK; UPDATE DOCTOS_RECPAG SET VLR_ACRES = 0 WHERE VLR_ACRES IS NULL; UPDATE DOCTOS_RECPAG SET VLR_A_ACRES = 0 WHERE VLR_A_ACRES IS NULL; UPDATE DOCTOS_RECPAG SET VLR_DESCTO = 0 WHERE VLR_DESCTO IS NULL; COMMIT WORK; /*==============================================================*/ /* Table: MOVTO_RECPAG */ /*==============================================================*/ ALTER TABLE MOVTO_RECPAG DROP VLR_ACRES; COMMIT WORK; /*================*/ /* Versão: 2.4.68 */ /*==============================================================*/ /* Table: PARAMETROS */ /*==============================================================*/ INSERT INTO PARAMETROS (COD_PARAMETRO,SEQ_PARAM,NOME_PARAM,DESCR_PARAM,TIPO_PARAM,CLASS_PARAM,VALOR_PARAM) VALUES (1,84,'CRED_CALC_JURO_MULTA_INISIS','Crediário: Calcula Multa/Juro ao Iniciar o Sistema','STRING','2','N'); INSERT INTO PARAMETROS (COD_PARAMETRO,SEQ_PARAM,NOME_PARAM,DESCR_PARAM,TIPO_PARAM,CLASS_PARAM,VALOR_PARAM) VALUES (1,85,'CRED_DATA_ULT_CALC_INISIS','Crediário: Data Último Cálculo Multa/Juros ao Iniciar','STRING','2','01/01/2009'); INSERT INTO PARAMETROS (COD_PARAMETRO,SEQ_PARAM,NOME_PARAM,DESCR_PARAM,TIPO_PARAM,CLASS_PARAM,VALOR_PARAM) VALUES (1,86,'TESTA_CONTAS_VENCIDAS_CF','Testar Contas Vencidas no Cupom Fiscal','STRING','5','N'); COMMIT WORK; /*================*/ /* Versão: 2.4.70 */ /*==============================================================*/ /* Table: CONFIG */ /*==============================================================*/ ALTER TABLE CONFIG ADD MOSTRA_ANIVER CHAR(1); ALTER TABLE CONFIG ADD MOSTRA_CTVENCE CHAR(1); COMMIT WORK; UPDATE CONFIG SET MOSTRA_ANIVER = 'N' WHERE MOSTRA_ANIVER IS NULL; UPDATE CONFIG SET MOSTRA_CTVENCE = 'N' WHERE MOSTRA_CTVENCE IS NULL; COMMIT WORK; /*================*/ /* Versão: 2.4.71 */ /*==============================================================*/ /* Table: PARAMETROS */ /*==============================================================*/ INSERT INTO PARAMETROS (COD_PARAMETRO,SEQ_PARAM,NOME_PARAM,DESCR_PARAM,TIPO_PARAM,CLASS_PARAM,VALOR_PARAM) VALUES (1,87,'ANO_BASE_COBRANCA','Cobrança: Ano Base para Geração de Nro dos Titulos','INTEGER','2','2008'); COMMIT WORK;