#Implementando a Função u_getSM0EmpFilByCNPJ em TOTVS Protheus
Hoje vamos explorar uma função bastante útil desenvolvida em TLPP Protheus, chamada-se u_getSM0EmpFilByCNPJ.
Essa função é responsável por buscar o código da Empresa/Filial utilizando o CNPJ da empresa como parâmetro.
Vamos entender como ela funciona.
```tlpp
#include "totvs.ch"
function u_getSM0EmpFilByCNPJ(cCNPJ as character) as json
static oHashMapSM0EmpFilByCNPJ:=tHashMap():New() as object
local aFiliais as array
local aEmpresas as array
local aFWArrFilAtu as array
local cCodEmp as character
local cCodFil as character
local cEmpFil as character
local jEmpFil as json
local jGetEmpFil as json
local nFilAtu as numeric
local nFilial as numeric
local nFiliais as numeric
local nEmpresa as numeric
local nEmpresas as numeric
jEmpFil:=JSONObject():New()
jEmpFil["cEmpAnt"]:=cEmpAnt
jEmpFil["cFilAnt"]:=cFilAnt
begin sequence
cCNPJ:=allTrim(cCNPJ)
cCNPJ:=strTran(cCNPJ,"/","")
cCNPJ:=strTran(cCNPJ,".","")
cCNPJ:=strTran(cCNPJ,"-","")
if (empty(cCNPJ))
break
endif
if (oHashMapSM0EmpFilByCNPJ:Get(cCNPJ,@jGetEmpFil))
if (;
(valType(jGetEmpFil)=="J");
.and.;
(jEmpFil:HasProperty("cEmpAnt"));
.and.;
(jEmpFil:HasProperty("cFilAnt"));
)
jEmpFil["cEmpAnt"]:=jGetEmpFil["cEmpAnt"]
jEmpFil["cFilAnt"]:=jGetEmpFil["cFilAnt"]
break
endif
endif
aEmpresas:=aClone(FWAllCompany())
nEmpresas:=Len(aEmpresas)
for nEmpresa:=1 to nEmpresas
cCodEmp:=aEmpresas[nEmpresa]
aFiliais:=aClone(FWAllFilial(cCodEmp))
nFiliais:=Len(aFiliais)
for nFilial:=1 To nFiliais
cCodFil:=aFiliais[nFilial]
for nFilAtu:=1 to nFiliais
cEmpFil:=(cCodEmp+aFiliais[nFilAtu])
aFWArrFilAtu:=aClone(FWArrFilAtu(cCodFil,cEmpFil))
if (Empty(aFWArrFilAtu).or.Len(aFWArrFilAtu)<18)
//Não encontrou Empresa/Filial?
FWFreeArray(@aFWArrFilAtu)
loop
endif
if (cCNPJ==aFWArrFilAtu[18])
//Armazena em Cache
jGetEmpFil:=JSONObject():New()
jGetEmpFil["cEmpAnt"]:=aFWArrFilAtu[1]
jGetEmpFil["cFilAnt"]:=aFWArrFilAtu[2]
oHashMapSM0EmpFilByCNPJ:Set(cCNPJ,jGetEmpFil)
//Define o Retorno
jEmpFil["cEmpAnt"]:=jGetEmpFil["cEmpAnt"]
jEmpFil["cFilAnt"]:=jGetEmpFil["cFilAnt"]
break
endif
FWFreeArray(@aFWArrFilAtu)
next nFilAtu
next nFilial
FWFreeArray(@aFiliais)
next nEmpresa
end sequence
FWFreeArray(@aFiliais)
FWFreeArray(@aEmpresas)
FWFreeArray(@aFWArrFilAtu)
return(jEmpFil)
```
*Entendendo a Função
Entrada de Parâmetro:
A função recebe como parâmetro o CNPJ da empresa que você deseja obter o código da Empresa/Filial.
Tratamento do CNPJ:
O CNPJ passa por um processo de limpeza, removendo caracteres como "/", ".", e "-".
Cache de Resultados:
Utiliza um objeto tHashMap (oHashMapSM0EmpFilByCNPJ) para armazenar resultados previamente obtidos, evitando consultas repetidas.
Consulta e Armazenamento em Cache:
A função faz consultas utilizando a biblioteca FW (Framework) do TOTVS Protheus para obter informações sobre empresas e filiais.
Caso encontre o CNPJ desejado, os resultados são armazenados em cache para consultas futuras.
Retorno:
Retorna um objeto JSON contendo os códigos da Empresa e Filial correspondentes ao CNPJ informado.
*Utilização:
```tlpp
// Exemplo de Uso
local jResult as json
jResult := u_getSM0EmpFilByCNPJ("12345678901234")
```
*(sys.partitions)*
----
*O ChatGPT colaborou com esta publicação*
Comentários
Postar um comentário