Tempo aproximado para leitura: 00:01:30 min
Ocorrência
Ao tentar emitir ou carregar o relatório no módulo de Manutenção Industrial - MI, o Sistema é interrompido por uma exceção de banco de dados, exibindo a seguinte mensagem de erro em um pop-up:Invalid field name. ORA-00904: "FTEMPOMINEXECCHKLISTPONTOMIS": invalid identifier.
Caminho do relatório afetado:Relatórios Gerenciais ➔ Preventiva/Preditiva ➔ Relatórios de Checklist ➔ Comparativo de Rotas Previstas x Realizadas.
Ambiente
TOTVS Agro - TOTVS Agro - Bioenergia - Controle Manutenção Industrial - MI - Versão 12
Causa
Esse incidente ocorre devido à ausência ou falta de atualização da função de script (function) de banco de dados chamada fTempoMinExecChkListPontoMis. Como o relatório tenta invocar esse identificador e não o encontra no banco, o Oracle retorna o erro ORA-00904.
Solução
Para solucionar o problema, é necessário executar o script em anexo na base de dados para realizar a criação/atualização da função de script faltante.
Script de Correção (PL/SQL):
CREATE OR REPLACE FUNCTION fTempoMinExecChkListPontoMis(
p_empresa IN NUMBER,
p_nos IN NUMBER,
p_nidMis IN NUMBER,
p_Status IN VARCHAR2
) RETURN NUMBER IS
nRet NUMBER(15,2) := 0;
nTempoCentTot NUMBER(15,2) := 0;
nTempoCentMis NUMBER(15,2) := 0;
CURSOR cO IS
-- Totaliza o tempo apontado para a OS
SELECT NVL(SUM(g.mog_minuto), 0) nMinutos
FROM mcpordem o, mcpmogasta g
WHERE o.emp_codemp = g.emp_codemp
AND o.ord_codos = g.ord_codos
AND o.emp_codemp = p_empresa
AND o.ord_codos = p_nos;
rO cO%ROWTYPE;
CURSOR cL IS
-- Totaliza a quantidade de pontos
SELECT NVL(COUNT(*), 1) nPontoTot
FROM mcplubrif
WHERE emp_codemp = p_empresa
AND ord_codos = p_nos;
rL cL%ROWTYPE;
CURSOR cT IS
-- Totaliza a quantidade de pontos do MIS para fazer o rateio dos minutos apontados de forma proporcional
SELECT NVL(COUNT(*), 1) nPontoMis
FROM mcplubrif
WHERE emp_codemp = p_empresa
AND ord_codos = p_nos
AND id_mis = p_nidMis;
rT cT%ROWTYPE;
BEGIN
-- Só irá retornar o tempo se a OS estiver com o status executada/encerrada
IF p_Status = '4' THEN
OPEN cO;
FETCH cO INTO rO;
IF cO%FOUND THEN
OPEN cL;
FETCH cL INTO rL;
IF cL%FOUND THEN
OPEN cT;
FETCH cT INTO rT;
IF cT%FOUND THEN
-- Tempo decimal total
nTempoCentTot := ROUND((rO.nMinutos / 60), 2);
-- Tempo decimal do mis
nTempoCentMis := ROUND(((nTempoCentTot / rL.nPontoTot) * rT.nPontoMis), 2);
-- Tempo relógio mis
nRet := ROUND((nTempoCentMis * 0.6), 2) * 100;
END IF;
CLOSE cT;
END IF;
CLOSE cL;
END IF;
CLOSE cO;
END IF;
RETURN nRet;
END;
/
0 Comentários