Tempo aproximado para leitura: 00:02:00 min
Ocorrência
Ao tentar gerar o relatório abaixo, o sistema apresenta um erro crítico. O processo é interrompido com o seguinte pop-up de exceção do banco de dados: Invalid field name. ORA-00904: "FTEMPOMINEXECCHKLISTPONTOMIS": invalid identifier.
Caminho do relatório: 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 erro ocorre devido à falta de script de função (function) no banco de dados. O relatório tenta invocar a função fTempoMinExecChkListPontoMis, mas como ela não existe ou não está compilada, o Oracle retorna a mensagem de identificador inválido.
Solução
Para solucionar o problema, é necessário executar o script abaixo na base de dados para realizar a criação da função faltante:
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
nTempoCentTot := round((rO.nMinutos/60),2); -- Tempo decimal total
nTempoCentMis := round(((nTempoCentTot / rL.nPontoTot) * rT.nPontoMis),2); -- Tempo decimal do mis
nRet := round((nTempoCentMis * 0.6),2)*100; -- Tempo relógio mis
end if;
close cT;
end if;
close cL;
end if;
close cO;
end if;
return nRet;
end;
/
0 Comentários