Tempo aproximado para leitura: 00:01:40 min
Ocorrência
No módulo Manutenção de Frota, ao tentar inserir um Apontamento de Abastecimento é apresentada a mensagem Falha na inserção do Apontamento de Abastecimento, Detalhes, Detalhe: DAO Runtime Insert Exception: null.
Ambiente
TOTVS Agro – TOTVS Agro – Bioenergia – Manutenção de Frota – A partir da versão 12.1.23
Causa
Esse incidente ocorre, pois a partir da versão 12.1.23 houve uma alteração no cadastro do consumo médio, onde o consumo mínimo precisa ser maior do que 0.
Solução
Para solucionar essa ocorrência, realize os seguintes passos:
1. Acesse o banco que está ocasionando a mensagem de erro. Caso o ambiente esteja no Cloud da TOTVS, realize a abertura de um ticket;
2. Execute o comando abaixo:
SQL Server:
DECLARE @cCONSMEDIO CURSOR;
DECLARE @ID_CONSMEDIO NUMERIC(38);
DECLARE @QT_CONS_MEDIO NUMERIC(5,2);
DECLARE @VALOR VARCHAR(200);
DECLARE @PAR_VALOR NUMERIC(6,2);
DECLARE @MD_CONS_MIN NUMERIC(6,2);
DECLARE @MD_CONS_MAX NUMERIC(6,2);
BEGIN
SET @cCONSMEDIO = CURSOR FOR SELECT ID_CONSMEDIO, QT_CONS_MEDIO FROM CONSMEDIO WHERE MD_CONS_MIN IS NULL OR MD_CONS_MIN = 0 OR MD_CONS_MAX IS NULL OR MD_CONS_MAX = 0;
OPEN @cCONSMEDIO;
FETCH NEXT FROM @cCONSMEDIO INTO @ID_CONSMEDIO, @QT_CONS_MEDIO;
SET @PAR_VALOR = CONVERT(NUMERIC(6,2), REPLACE('999,00', ',', '.'));
WHILE @@FETCH_STATUS = 0
BEGIN
IF @PAR_VALOR > 9999.99
SET @PAR_VALOR = 9999.99;
IF (@QT_CONS_MEDIO - ((@QT_CONS_MEDIO * @PAR_VALOR) / 100)) > 9999.99
SET @MD_CONS_MIN = 9999.99
ELSE
SET @MD_CONS_MIN = (@QT_CONS_MEDIO - ((@QT_CONS_MEDIO * @PAR_VALOR) / 100));
IF (@QT_CONS_MEDIO + ((@QT_CONS_MEDIO * @PAR_VALOR) / 100)) > 9999.99
SET @MD_CONS_MAX = 9999.99;
ELSE
SET @MD_CONS_MAX = (@QT_CONS_MEDIO + ((@QT_CONS_MEDIO * @PAR_VALOR) / 100));
IF @MD_CONS_MIN < 0.1
SET @MD_CONS_MIN = 0.1;
IF @MD_CONS_MAX < 0.1
SET @MD_CONS_MAX = 0.1;
IF @MD_CONS_MIN > 9999.99
SET @MD_CONS_MIN = 9999.99;
IF @MD_CONS_MAX > 9999.99
SET @MD_CONS_MAX = 9999.99;
BEGIN TRANSACTION
UPDATE CONSMEDIO
SET PC_CONS_MIN = @PAR_VALOR,
PC_CONS_MAX = @PAR_VALOR,
MD_CONS_MIN = @MD_CONS_MIN,
MD_CONS_MAX = @MD_CONS_MAX
WHERE ID_CONSMEDIO = @ID_CONSMEDIO;
COMMIT;
FETCH NEXT FROM @cCONSMEDIO INTO @ID_CONSMEDIO, @QT_CONS_MEDIO;
END;
CLOSE @cCONSMEDIO;
DEALLOCATE @cCONSMEDIO;
END;
Oracle:
DECLARE
CURSOR cCONSMEDIO IS SELECT ID_CONSMEDIO, QT_CONS_MEDIO FROM CONSMEDIO WHERE MD_CONS_MIN IS NULL AND MD_CONS_MAX IS NULL AND PC_CONS_MIN IS NULL AND PC_CONS_MAX IS NULL;
rCONSMEDIO cCONSMEDIO%ROWTYPE;
sVALOR VARCHAR2(200);
nPAR_VALOR NUMBER;
nMD_CONS_MIN NUMBER;
nMD_CONS_MAX NUMBER;
BEGIN
OPEN cCONSMEDIO;
SELECT VALOR INTO sVALOR FROM PRXPARAMETER WHERE CONTEXT_APL = 'PIMSGRAOS.MANUTENCAO' AND NAME_PARAMETER = 'PERCENTUAL_TOLERANCIA';
nPAR_VALOR := ROUND(TO_NUMBER(REPLACE(sVALOR, ',', '.')),2);
LOOP
FETCH cCONSMEDIO
INTO rCONSMEDIO;
EXIT WHEN cCONSMEDIO%NOTFOUND;
IF nPAR_VALOR > 9999.99 THEN
nPAR_VALOR := 9999.99;
END IF;
IF ROUND((rCONSMEDIO.QT_CONS_MEDIO - ((rCONSMEDIO.QT_CONS_MEDIO * nPAR_VALOR) / 100)), 2) > 9999.99 THEN
nMD_CONS_MIN := 9999.99;
ELSE
nMD_CONS_MIN := ROUND((rCONSMEDIO.QT_CONS_MEDIO - ((rCONSMEDIO.QT_CONS_MEDIO * nPAR_VALOR) / 100)), 2);
END IF;
IF ROUND((rCONSMEDIO.QT_CONS_MEDIO + ((rCONSMEDIO.QT_CONS_MEDIO * nPAR_VALOR) / 100)), 2) > 9999.99 THEN
nMD_CONS_MAX := 9999.99;
ELSE
nMD_CONS_MAX := ROUND((rCONSMEDIO.QT_CONS_MEDIO + ((rCONSMEDIO.QT_CONS_MEDIO * nPAR_VALOR) / 100)), 2);
END IF;
IF nMD_CONS_MIN < 0.1 THEN
nMD_CONS_MIN := 0.1;
END IF;
IF nMD_CONS_MIN > 9999.99 THEN
nMD_CONS_MIN := 9999.99;
END IF;
IF nMD_CONS_MAX < 0.1 THEN
nMD_CONS_MAX := 0.1;
END IF;
IF nMD_CONS_MAX > 9999.99 THEN
nMD_CONS_MAX := 9999.99;
END IF;
UPDATE CONSMEDIO
SET PC_CONS_MIN = ROUND(nPAR_VALOR, 2),
PC_CONS_MAX = ROUND(nPAR_VALOR, 2),
MD_CONS_MIN = ROUND(nMD_CONS_MIN, 2),
MD_CONS_MAX = ROUND(nMD_CONS_MAX, 2)
WHERE ID_CONSMEDIO = rCONSMEDIO.ID_CONSMEDIO;
COMMIT;
END LOOP;
CLOSE cCONSMEDIO;
END;
0 Comentários