Tempo aproximado para leitura: 00:02:50 min
Ocorrência
No Planejamento de Atividades - PLATIV, ao tentar criar uma nova Ordem de Serviço o Sistema emite mensagem de erro de Banco de Dados informando value larger than specified precision allowed for this column.
Ambiente
TOTVS Agro - TOTVS Agro - Bioenergia - Planejamento de Atividades - PLATIV - Versão 12
Causa
O tamanho do atributo NO_OS - número da ordem de serviço na tabela de controle PA_OS_HE - Tabela cabeçalho da ordem de serviço é limitado a nove dígitos. Com isso, é necessário revisar se há lacunas entre as numerações das ordens.
Solução
Para solucionar a ocorrência, verificar o parâmetro da numeração de Ordem de Serviço, através da seção > PLATIV, entrada FG_NUMOS_AUT - Flag controlador de geração automática e busca do número da OS. Caso esteja com valor = 2, seguir os procedimentos abaixo:
1. Configure o parâmetro da seção PLATIV, entrada FG_PROC_LACUNA_OS com valor S;
2. Crie no Banco de Dados a procedure conforme instrução abaixo:
CREATE OR REPLACE PROCEDURE "PR_PLATIV_NUMOS" ( p_no_os OUT PA_OS_HE.NO_OS%TYPE ) IS
v_no_os_1 PA_OS_HE.NO_OS%TYPE;
v_no_os_2 PA_OS_HE.NO_OS%TYPE;
v_no_os_3 PA_OS_HE.NO_OS%TYPE;
v_no_os_4 PA_OS_HE.NO_OS%TYPE;
b_exit_proc boolean;
CURSOR PA_OS_HE_NO_OS IS
select NO_OS
from PA_OS_HE
where NO_OS <= 714763
order by NO_OS DESC;
CURSOR NO_OS_APTO IS
select distinct NO_OS from APT_MEC_OS where NO_OS = p_no_os
UNION
select distinct NO_OS from APT_MEC_DE where NO_OS = p_no_os and (FG_TP_APTO = 'D' or FG_TP_APTO = 'I' )
UNION
select distinct NO_OS from APT_INS_HE where NO_OS = p_no_os
UNION
select distinct NO_OS from APT_MAT_HE where NO_OS = p_no_os
UNION
select distinct NO_OS from APT_FORMIGA_HE where NO_OS = p_no_os
UNION
select distinct NO_OS from APT_PRODU where NO_OS = p_no_os
UNION
select distinct NO_OS from APT_MANU where NO_OS = p_no_os
UNION
select distinct NO_OS from APT_PLANT_HE where NO_OS = p_no_os
UNION
select distinct NO_OS from APT_CARG_MD where NO_OS = p_no_os
UNION
select distinct NO_OS from APT_CARG_MD_LOC where NO_OS = p_no_os
UNION
select distinct NO_OS from BOLRUR_DE where NO_OS = p_no_os
UNION
select distinct NO_OS from BOLTUR_DE where NO_OS = p_no_os;
BEGIN
b_exit_proc := FALSE;
OPEN PA_OS_HE_NO_OS;
FETCH PA_OS_HE_NO_OS INTO v_no_os_1;
IF NOT PA_OS_HE_NO_OS%NOTFOUND
THEN
LOOP
FETCH PA_OS_HE_NO_OS INTO v_no_os_2;
EXIT WHEN PA_OS_HE_NO_OS%NOTFOUND;
IF v_no_os_1 - v_no_os_2 > 1
THEN
v_no_os_3 := v_no_os_2;
LOOP
p_no_os := v_no_os_3 + 1;
OPEN NO_OS_APTO;
FETCH NO_OS_APTO INTO v_no_os_4;
EXIT WHEN (NO_OS_APTO%NOTFOUND or (p_no_os + 1) >= v_no_os_1);
CLOSE NO_OS_APTO;
v_no_os_3 := p_no_os;
END LOOP;
IF NO_OS_APTO%NOTFOUND and ((p_no_os+1) <= v_no_os_1)
THEN
b_exit_proc := TRUE;
ELSE
CLOSE NO_OS_APTO;
END IF;
END IF;
IF b_exit_proc
THEN
EXIT;
END IF;
v_no_os_1 := v_no_os_2;
END LOOP;
END IF;
CLOSE PA_OS_HE_NO_OS;
END PR_PLATIV_NUMOS;3. Proceda com a abertura de Ordem de Serviços novamente.
0 Comentários