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 MC - CST - Captação de Entrada de Custos - ORA-00001: restrição exclusiva (PIMSMCPRD.PLC_ENTRADACST_UN) violada

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

Ocorrência
Ao tentar realizar a Captação de Entrada de Custos no módulo Processamento de Custos do Agro Multicultivo, o processamento é interrompido apresentando a seguinte mensagem de erro no log de execução: 

Captação não executada. Falha Captando Consumo de Insumos Agrícolas. Erro ORA-00001: restrição exclusiva (PIMSMCPRD.PLC_ENTRADACST_UN) violada , SQLCode: 1 , SQLNextException: java.sql.SQLIntegrityConstraintViolationException: ORA-00001: restrição exclusiva (PIMSMCPRD.PLC_ENTRADACST_UN) violada.

Ambiente
TOTVS Agro – TOTVS Agro – Multicultivos – Custos Agrícola  - CST – Versão 12

Causa 
O erro ocorre devido à duplicidade de lançamentos de insumos com a mesma combinação de chaves, inseridos por rotinas distintas de entrada de dados. As duplicidades podem ocorrer nas rotinas Aplicação de Insumo Nativa/Antiga AERM0002 / APAPLINSUMO e Apontamento Agrícola do tipo Insumo AERM0019 / AU_APTO_INS_LC_DE. Durante a captação, o Sistema tenta inserir os registros duplicados na tabela PLC_ENTRADACST, violando a restrição de chave única PLC_ENTRADACST_UN.

Solução
Para identificar e corrigir os registros duplicados e concluir a Captação de Entrada de Custos:

1. Identifique a Duplicidade no Banco de Dados;

Execute a consulta SQL abaixo no banco do PIMS MC para localizar exatamente os lançamentos que estão gerando a duplicidade de chaves no período desejado:

SQL:
WITH BASE AS (
  SELECT AP.ID_UNIDADEADM, AP.DT_OPERACAO, AP.ID_CCUSTO, AP.ID_OPERACAO, PS.ID_SAFRA, U3.ID_PERIODOSAFRA, APLC.ID_UPNIVEL3, APLC.ID_INSUMO, IM.ID_UNIMEDIDA, IM.CD_INT_ERP, IMCO.ID_COMPONENTE, IMCO.FG_TP_COMPONENTE, IMCO.ID_UNIMEDIDA ID_UNIMEDIDA_CO, IMCO.ID_CONTACUSTO, SUM(APLC.QT_CONS_TOTAL) QT_TOTAL, SUM(APLC.QT_CONS_TOTAL*APLC.QT_VALOR) QT_VALOR_TOTAL
  FROM APAPLINSUMO AP
  JOIN APAPLINS_INSLC APLC ON APLC.ID_APAPLINSUMO = AP.ID_APAPLINSUMO
  JOIN UPNIVEL3 U3 ON APLC.ID_UPNIVEL3 = U3.ID_UPNIVEL3
  JOIN PERIODOSAFRA PS ON U3.ID_PERIODOSAFRA = PS.ID_PERIODOSAFRA
  JOIN INSUMO IM ON APLC.ID_INSUMO = IM.ID_INSUMO
  LEFT OUTER JOIN (
    SELECT DISTINCT CM.ID_UNIDADEADM, INS.ID_INSUMO, CO.ID_COMPONENTE, CO.FG_TP_COMPONENTE, CO.ID_UNIMEDIDA, CO.ID_CONTACUSTO
    FROM INSUMO INS
    RIGHT JOIN COMPONENTE_MAT CM ON (LPAD(CM.CD_MATERIAL_INI, 30, '0') <= LPAD(INS.CD_INT_ERP, 30, '0') AND LPAD(CM.CD_MATERIAL_FIN, 30, '0') >= LPAD(INS.CD_INT_ERP, 30, '0'))
    LEFT JOIN COMPONENTE CO ON CM.ID_COMPONENTE = CO.ID_COMPONENTE
    WHERE CM.ID_UNIDADEADM = :ID_UNIDADEADM
  ) IMCO ON IM.ID_INSUMO = IMCO.ID_INSUMO
  WHERE AP.ID_UNIDADEADM = :ID_UNIDADEADM 
    AND (AP.DT_OPERACAO BETWEEN :DT_INICIO AND :DT_FIM)
  GROUP BY AP.ID_UNIDADEADM, AP.DT_OPERACAO, AP.ID_CCUSTO, AP.ID_OPERACAO, PS.ID_SAFRA, U3.ID_PERIODOSAFRA, APLC.ID_UPNIVEL3, APLC.ID_INSUMO, IM.ID_UNIMEDIDA, IM.CD_INT_ERP, IMCO.ID_COMPONENTE, IMCO.FG_TP_COMPONENTE, IMCO.ID_UNIMEDIDA, IMCO.ID_CONTACUSTO

  UNION ALL

  SELECT AP.ID_UNIDADEADM, AP.DT_OPERACAO, APLCDE.ID_CCUSTO, AP.ID_OPERACAO, PS.ID_SAFRA, U3.ID_PERIODOSAFRA, APLCDE.ID_UPNIVEL3, APLC.ID_INSUMO, IM.ID_UNIMEDIDA, IM.CD_INT_ERP, IMCO.ID_COMPONENTE, IMCO.FG_TP_COMPONENTE, IMCO.ID_UNIMEDIDA ID_UNIMEDIDA_CO, IMCO.ID_CONTACUSTO, SUM(COALESCE(APLCDE.QT_CONS_CONV, APLCDE.QT_CONS_TOTAL)) QT_TOTAL, SUM(COALESCE(APLCDE.QT_CONS_CONV, APLCDE.QT_CONS_TOTAL)*APLCDE.QT_VALOR) QT_VALOR_TOTAL
  FROM AU_APTO_INS_LC_DE APLCDE
  JOIN AU_APTO_INS_LC APLC ON (APLCDE.ID_AU_APTO_INS_LC = APLC.ID_AU_APTO_INS_LC)
  JOIN AU_APTO AP ON (APLC.ID_AU_APTO = AP.ID_AU_APTO)
  JOIN AU_APTO_INS AP_INS ON (AP_INS.ID_AU_APTO = AP.ID_AU_APTO AND APLC.ID_AU_APTO_INS = AP_INS.ID_AU_APTO_INS)
  JOIN UPNIVEL3 U3 ON APLCDE.ID_UPNIVEL3 = U3.ID_UPNIVEL3
  JOIN PERIODOSAFRA PS ON U3.ID_PERIODOSAFRA = PS.ID_PERIODOSAFRA
  JOIN INSUMO IM ON APLC.ID_INSUMO = IM.ID_INSUMO
  LEFT OUTER JOIN (
    SELECT DISTINCT CM.ID_UNIDADEADM, INS.ID_INSUMO, CO.ID_COMPONENTE, CO.FG_TP_COMPONENTE, CO.ID_UNIMEDIDA, CO.ID_CONTACUSTO
    FROM INSUMO INS
    RIGHT JOIN COMPONENTE_MAT CM ON (LPAD(CM.CD_MATERIAL_INI, 30, '0') <= LPAD(INS.CD_INT_ERP, 30, '0') AND LPAD(CM.CD_MATERIAL_FIN, 30, '0') >= LPAD(INS.CD_INT_ERP, 30, '0'))
    LEFT JOIN COMPONENTE CO ON CM.ID_COMPONENTE = CO.ID_COMPONENTE
    WHERE CM.ID_UNIDADEADM = :ID_UNIDADEADM
  ) IMCO ON IM.ID_INSUMO = IMCO.ID_INSUMO
  WHERE AP.ID_UNIDADEADM = :ID_UNIDADEADM 
    AND (AP.DT_OPERACAO BETWEEN :DT_INICIO AND :DT_FIM) 
    AND APLCDE.ID_CCUSTO IS NOT NULL 
    AND COALESCE(APLCDE.QT_CONS_CONV, APLCDE.QT_CONS_TOTAL) > 0
  GROUP BY AP.ID_UNIDADEADM, AP.DT_OPERACAO, APLCDE.ID_CCUSTO, AP.ID_OPERACAO, PS.ID_SAFRA, U3.ID_PERIODOSAFRA, APLCDE.ID_UPNIVEL3, APLC.ID_INSUMO, IM.ID_UNIMEDIDA, IM.CD_INT_ERP, IMCO.ID_COMPONENTE, IMCO.FG_TP_COMPONENTE, IMCO.ID_UNIMEDIDA, IMCO.ID_CONTACUSTO
), DUP AS (
  SELECT ID_UNIDADEADM, DT_OPERACAO, ID_CCUSTO, ID_OPERACAO, ID_SAFRA, ID_PERIODOSAFRA, ID_UPNIVEL3, ID_INSUMO, ID_COMPONENTE, ID_CONTACUSTO
  FROM BASE
  GROUP BY ID_UNIDADEADM, DT_OPERACAO, ID_CCUSTO, ID_OPERACAO, ID_SAFRA, ID_PERIODOSAFRA, ID_UPNIVEL3, ID_INSUMO, ID_COMPONENTE, ID_CONTACUSTO
  HAVING COUNT(*) > 1
)
SELECT B.DT_OPERACAO, U3.CD_UPNIVEL3, OP.CD_OPERACAO, IM.CD_INSUMO, IM.DE_INSUMO, CO.CD_COMPONENTE, B.QT_TOTAL
FROM BASE B
JOIN DUP D ON (D.ID_UNIDADEADM = B.ID_UNIDADEADM
           AND D.DT_OPERACAO = B.DT_OPERACAO
           AND D.ID_CCUSTO = B.ID_CCUSTO
           AND D.ID_OPERACAO = B.ID_OPERACAO
           AND D.ID_UPNIVEL3 = B.ID_UPNIVEL3
           AND D.ID_INSUMO = B.ID_INSUMO
           AND NVL(D.ID_COMPONENTE,-1) = NVL(B.ID_COMPONENTE,-1))
LEFT JOIN UPNIVEL3 U3 ON U3.ID_UPNIVEL3 = B.ID_UPNIVEL3
LEFT JOIN OPERACAO OP ON OP.ID_OPERACAO = B.ID_OPERACAO
LEFT JOIN INSUMO IM ON IM.ID_INSUMO = B.ID_INSUMO
LEFT JOIN COMPONENTE CO ON CO.ID_COMPONENTE = B.ID_COMPONENTE
ORDER BY B.DT_OPERACAO, U3.CD_UPNIVEL3, IM.CD_INSUMO;

2. Elimine o Registro em Duplicidade;

  • Avalie os registros retornados pela consulta;

  • Acesse no Sistema a rotina correspondente ao Apontamento Agrícola (Insumos) AERM0019 e também a rotina de Apontamento de Insumos - Nativa (caso utilize);

  • Localize o lançamento duplicado e realize a sua exclusão/cancelamento.

3. Reprocessando a Captação.

  • Acesse novamente a rotina de Captação de Entrada de Custos.

  • Execute o reprocessamento referente ao mês afetado.

  • Confirme que o processo foi concluído com sucesso sem apresentar erros de restrição exclusiva.

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 _