Created
April 15, 2021 22:32
-
-
Save AndyDaSilva52/7bc192547904c3a8f538111ae0292123 to your computer and use it in GitHub Desktop.
#Mega #Tributos - NCM (Nomenclatura Comum do Mercosul) - Ajusta o NCM Pai (Sintético) em todos considerando o Extenso que coincidir mais próximo #MegaERP
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
declare | |
v_max_len_ncm_extenso integer; | |
v_achou_pai CHAR := 'N'; | |
v_pai_ncm_tab_in mgtrf.trf_ncm.ncm_tab_in_codigo%type; | |
v_pai_ncm_pad_in mgtrf.trf_ncm.ncm_pad_in_codigo%type; | |
v_pai_ncm_in mgtrf.trf_ncm.ncm_in_codigo%type; | |
v_pai_ncm_ext mgtrf.trf_ncm.ncm_st_extenso%type; | |
begin | |
begin | |
select max(length(ncm_st_extenso)) | |
into v_max_len_ncm_extenso | |
from mgtrf.trf_ncm; | |
end; | |
--dbms_output.put_line('max: '|| v_max_len_ncm_extenso); | |
for c_lengths in ( | |
select result len from ( | |
select rownum result from dual connect by level <= v_max_len_ncm_extenso -- max | |
) where result >= 0 -- min | |
order by 1 desc | |
) loop | |
--dbms_output.put_line('tamanho agora: ' || c_lengths.len); | |
for c_ncm_filho in ( | |
select | |
n.ncm_tab_in_codigo, n.ncm_pad_in_codigo, n.ncm_in_codigo, n.ncm_st_extenso, | |
n.pai_ncm_tab_in_codigo, n.pai_ncm_pad_in_codigo, n.pai_ncm_in_codigo, p.ncm_st_extenso pai_ncm_st_extenso | |
from mgtrf.trf_ncm n | |
left join mgtrf.trf_ncm p | |
on p.ncm_tab_in_codigo = n.pai_ncm_tab_in_codigo | |
and p.ncm_pad_in_codigo = n.pai_ncm_pad_in_codigo | |
and p.ncm_in_codigo = n.pai_ncm_in_codigo | |
where length(n.ncm_st_extenso) = c_lengths.len | |
) loop | |
--dbms_output.put_line('NCM: '|| c_ncm_filho.ncm_st_extenso || ' Pai: ' || c_ncm_filho.pai_ncm_st_extenso); | |
v_achou_pai := 'N'; -- se encontrou pai sintético | |
for c_all_lens in ( | |
select result len from ( | |
select rownum result from dual connect by level < c_lengths.len -- max | |
) where result >= 0 -- min | |
order by 1 desc | |
) loop | |
if v_achou_pai = 'S' then | |
continue; | |
end if; | |
begin -- procura pai mais próximo que seja sintético | |
select p.ncm_tab_in_codigo, p.ncm_pad_in_codigo, p.ncm_in_codigo, p.ncm_st_extenso | |
into v_pai_ncm_tab_in, v_pai_ncm_pad_in, v_pai_ncm_in, v_pai_ncm_ext | |
from mgtrf.trf_ncm p | |
where p.ncm_ch_tipo = 'S' -- Sintético | |
and p.ncm_st_extenso = substr(c_ncm_filho.ncm_st_extenso, 0, c_all_lens.len) | |
and p.ncm_st_extenso <> c_ncm_filho.ncm_st_extenso; | |
v_achou_pai := 'S'; | |
if v_achou_pai = 'S' then | |
if c_ncm_filho.pai_ncm_st_extenso <> v_pai_ncm_ext then | |
null; | |
--dbms_output.put_line('NCM Filho: '|| c_ncm_filho.ncm_st_extenso || ' NCM Pai Atual (Extenso):[' || c_ncm_filho.pai_ncm_st_extenso || '] NCM Pai Novo (Extenso):[' || v_pai_ncm_ext || ']'); | |
end if; | |
update mgtrf.trf_ncm | |
set | |
pai_ncm_tab_in_codigo = v_pai_ncm_tab_in, | |
pai_ncm_pad_in_codigo = v_pai_ncm_pad_in, | |
pai_ncm_in_codigo = v_pai_ncm_in | |
where | |
ncm_tab_in_codigo = c_ncm_filho.ncm_tab_in_codigo | |
and ncm_pad_in_codigo = c_ncm_filho.ncm_pad_in_codigo | |
and ncm_in_codigo = c_ncm_filho.ncm_in_codigo | |
; | |
end if; | |
exception | |
when no_data_found then | |
v_achou_pai := 'N'; | |
end; | |
end loop; | |
end loop; | |
end loop; | |
end; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
O script percorre todos os NCM's (seja sintético ou analítico para identificar o nível sintético mais próximo dentro do Código Extenso do NCM)
Ex:
NCM Filho (Extenso):
0804.40.00/01
NCM Pai (Extenso):
0804
O NCM
0804
é o nível sintético mais próximo dentro do Código Extenso0804.40.00/01