Base de conhecimento
Encontre respostas para suas dúvidas em quatro fontes de conhecimento diferentes ao mesmo tempo, simplificando o processo de pesquisa.

Agro - PIMS IND - MI - ORA-00904:”FREPROCOSPRPROTA”: invalid identifer

time.png Tempo aproximado para leitura: 00:01:30 min

Ocorrência
Os usuários do nosso PCM a partir do dia de 26/08/26, estão enfrentando problemas ao inserir rotas de manutenção e posterior aberturas de O.S para serviços programados em Rotas de Inspeção.

PCM.png

Ambiente
TOTVS Agro - TOTVS Agro - Bioenergia - Controle Manutenção Industrial - MI – Versão 12

Causa 
Falta de Script da função.

Solução
Segue o script:

CREATE OR REPLACE FUNCTION fReprocOsPrpRota( p_nEmp IN NUMBER,
                                      p_dData IN DATE,
                               p_sUsuario IN VARCHAR2,
                               p_sRota IN VARCHAR2 ) RETURN NUMBER IS

PRAGMA AUTONOMOUS_TRANSACTION;

nEmp      MCPEMPRE.emp_codemp%TYPE;
dData     DATE;
sUsuario  cacusuario.usu_login%type;

-- Valor de retorno -
   -- 0 - não houve ajuste, existe apontamento posterior a esta data -
   -- 1 - serviços ajustados -
   -- 9 - não houve nenhum processamento, nenhum serviço para reprocessar -
nRet      NUMBER(1);

-- identificar os serviços com data igual ou superior ao reprocessamento -
CURSOR cServ IS
   SELECT s.id_servrota
   FROM   MCPSERVROTA s,
           MCPPONTO p,
        MCPMIS m,
        MCPMODPERIOD d
   WHERE  s.id_ponto = p.id_ponto AND
           p.id_mis = m.id_mis AND
        s.mod_codmodper = d.mod_codmodper and
        m.emp_codemp = nEmp and
        --d.mod_lubri = '1' and
        nvl( p.pon_ativo, '0' ) = '1' and
        nvl( s.ser_ativo, '0' ) = '1' and
           ( ( m.mis_status = 'A' AND
                 m.mis_atuini <= dData AND
              m.mis_atufim >= dData ) OR
             m.mis_status = 'P' ) and
        INSTR( p_sRota, s.id_rota ) > 0 and
           nvl( s.ser_ult_proc, fSysdateLocal ) >= dData;
rServ cServ%ROWTYPE;

-- verificar se existe alguma OS de PRP gerada após a data de reprocessamento e -
-- que tenha algum apontamento -
CURSOR COS IS
   select o.emp_codemp,
           o.ord_codos
   from   mcpordem o,
           mcplubrif l,
           mcpmodperiod d,
           mcpinspeclub i,
          mcpinspecocorr c,
                   mcprotas r
   where  o.emp_codemp = l.emp_codemp and
           o.ord_codos = l.ord_codos and
        o.mod_codmodper = d.mod_codmodper and
           l.id_lubrif = i.id_lubrif(+) and
          i.id_insplub = c.id_insplub(+) and
                   r.mod_codmodper = o.mod_codmodper and
           o.emp_codemp = nemp and
           o.ord_dtexecprp >= ddata and
        instr( p_sRota, r.id_rota ) > 0 and
        --d.mod_lubri = '1' and
          ( l.res_codigo is not null or c.ins_valreal is not null );
rOs COS%ROWTYPE;

BEGIN

   nEmp := p_nEmp;
   dData := p_dData;
   sUsuario := p_sUsuario;

   nRet := 9;

   -- verificar se existem serviços gerados após a data solicitada -
   OPEN cServ;
      FETCH cServ INTO rServ;

     IF cServ%FOUND THEN

         -- verificar se existe apontamento em OSs de data superior ao reprocessamento -
            -- caso existam, não poderá haver reprocessamento -
            -- do contrário, as OSs deverão ser canceladas -
         OPEN COS;
            FETCH COS INTO rOs;

           IF COS%NOTFOUND THEN


            -- cancelar as OS de PRP posterior a data do processamento -
            UPDATE MCPORDEM SET
                    ord_status = '5',
                 ord_obs = 'CANCELADA DEVIDO SOLICITAÇÃO DE REPROCESSAMENTO'
            WHERE  emp_codemp = nEmp and
                    ord_tipo = 'P' AND
                 INSTR( p_sRota, id_rota ) > 0 and
                    ord_dtexecprp >= dData;

              -- atualizar a data dos serviços -
              UPDATE MCPSERVROTA SET
                   --ser_ult_proc = ser_ult_proc - ( TRUNC( ( ser_ult_proc - dData ) / NVL( ser_frequencia, 1 ) + 1, 0 ) * nvl( ser_frequencia, 1 ) )
                   ser_ult_proc = ser_ult_proc - ( TRUNC( ( ser_ult_proc - dData ) / decode( ser_frequencia, null, 1, 0, 1, ser_frequencia ) + 1, 0 ) * decode( ser_frequencia, null, 1, 0, 1, ser_frequencia ) )
             WHERE  ser_ult_proc >= dData AND
                    INSTR( p_sRota, id_rota ) > 0 and
                   id_servrota IN ( SELECT s.id_servrota
                                     FROM   MCPSERVROTA s,
                                        MCPPONTO p,
                                        MCPMIS m,
                                   MCPMODPERIOD d
                               WHERE  s.id_ponto = p.id_ponto AND
                                      s.mod_codmodper = d.mod_codmodper and
                                      p.tip_codigo is null and
                                        p.id_mis = m.id_mis AND
                                       m.emp_codemp = nEmp );

            -- ajustar a data do último processamento -
               UPDATE MCPCONFGERAL SET
                      con_ultproc = dData
               WHERE  emp_codemp = nEmp;

               pr_GravaLogDetalhe( 201, 'GERAÇÃO DE OS DE PRP POR ROTA',
                          'CANCELADAS OSS GERADAS NA DATA: '||to_char( dData, 'dd/mm/yyyy' )||' - ROTA(S): '||
                          p_sRota||' - PELO USUÁRIO: '||pk_SetaParametros.fGetUsuario  );

               COMMIT;

             -- valores ajustados para um novo processamento -
             nRet := 1;

           ELSE

              -- existe apontamento posterior a esta data -
              nRet := 0;

               pr_GravaLogDetalhe( 201, 'GERAÇÃO DE OS DE PRP POR ROTA',
                          'TENTATIVA MALSUCEDIDA DE GERAÇÃO DE OS DE PRP (EXISTEM APONTAMENTOS POSTERIORES) NA DATA: '||to_char( dData, 'dd/mm/yyyy' )||' - ROTA(S): '||
                          p_sRota||' - PELO USUÁRIO: '||pk_SetaParametros.fGetUsuario  );


           END IF;

         CLOSE COS;

      CLOSE cServ;

   END IF;

   RETURN nRet;

END;
 
Esse artigo foi útil?
Usuários que acharam isso útil: 0 de 0

0 Comentários

Por favor, entre para comentar.
X Fechar

Olá ,

Há pendência referente a um de seus produtos contratados para a empresa ().

Entre em contato com o Centro de Serviços TOTVS para tratativa.

Ligue! 4003-0015 opção 4 e 9 ou registre uma solicitação para CST – Cobrança – Verificação de pendências financeiras . clique aqui.

TOTVS

X Fechar

Olá ,

Seu contato não está cadastrado no Portal do Cliente como um perfil autorizado a solicitar consultoria telefônica.

Por gentileza, acione o administrador do Portal de sua empresa para: (1)configurar o seu acesso ou (2)buscar um perfil autorizado para registro desse atendimento.

Em caso de dúvidas sobre a identificação do contato administrador do Portal, ligue (11) 4003-0015, opção 7 e, em seguida, opção 4 para buscar o suporte com o time de Assessoria ao Portal do Cliente. . clique aqui.

TOTVS

X Fechar

Olá ,

Para o atendimento de "Consultoria Telefônica" você deverá estar de acordo com o Faturamento.

TOTVS

X Fechar

Olá,

Algo inesperado ocorreu, e o usuario nao foi reconhecido ou você nao se encontra logado

Por favor realize um novo login

Em caso de dúvidas, entre em contato com o administrador do Portal de Clientes de sua empresa para verificação do seu usuário, ou Centro de Serviços TOTVS.

Ligue! 4003-0015 opção 4 e 9 ou registre uma solicitação para CST – Cadastros . clique aqui.

TOTVS

Chat _

Preencha os campos abaixo para iniciar o atendimento:

Chat _