Função foi desenvolvida para facilitar a consulta do CNPJ e ver seus dados para utilizar no AdvPL.
Essa função foi desenvolvida pelo Caio Henrique, sendo que nela você preenche via ParamBox o CNPJ desejado, e através disso é montado um arquivo do Excel com o resultado.
A função, utiliza o HttpGet para validar e buscar as informações, e assim retorna um JSON que é manipulado pelo programa.
Veja abaixo um print de resultado de execução:
Agora veja o código fonte desenvolvido:
#include 'protheus.ch'
/*/{Protheus.doc} zCCHRec
Retorna os dados básicos de um CNPJ a partir da Receita Federal
@author Caio César Henrique
@since 22/10/2019
@version 1.0
@type function
@example U_zCCHRec()
/*/
User Function zCCHRec()
/* Variáveis Locais */
Local aPergs := {}
Local aRetorn := {}
Local cLoad := "00001"
Local lCanSave := .T.
Local lUserSave := .T.
Local cTitulo := "TOTVS x Receita Federal"
Local bOk := {|| .T.}
Local aButtons := {}
Local lCentered := .T.
Local nPosx
Local nPosy
/* Variável Privada */
Private cCNPJ := Space(14)
/* Abro a empresa TESTE, caso faça uso via debug
Remover para utilizar dentro do Protheus*/
RpcSetEnv('99','01')
/* Adiciono a pergunta do Parambox */
aAdd(aPergs, {1, "CNPJ" , cCNPJ , "", ".T.", "", ".T.", 80, .F.})
/* Se a pergunta for confirmada */
If ParamBox(aPergs, cTitulo, aRetorn, bOk, aButtons, lCentered, nPosx,nPosy, /*oMainDlg*/ , cLoad, lCanSave, lUserSave)
cCNPJ := aRetorn[1]
/* Busca os dados com o CNPJ digitado */
BuscaDados(cCNPJ)
EndIf
Return ( Nil )
/*/{Protheus.doc} zCCHRec
Retorna os dados básicos de um CNPJ a partir da Receita Federal
@author Caio César Henrique
@since 22/10/2019
@version 1.0
@type function
@example U_zCCHRec()
/*/
Static Function BuscaDados(cCNPJ)
/* Variáveis Locais */
Local cJson := ""
Local cGetParms := ""
Local cHeaderGet := ""
Local nTimeOut := 200
Local aHeadStr := {"Content-Type: application/json"}
/* Variável Privada */
Private oObjJson := Nil
/* Utiliza HTTPGET para retornar os dados da Receita Federal */
cJson := HttpGet('https://www.receitaws.com.br/v1/cnpj/'+ cCNPJ, cGetParms, nTimeOut, aHeadStr, @cHeaderGet )
/* Transforma retorno do JSON em objeto estilo array */
If !FWJsonDeserialize(cJson,@oObjJson)
MsgStop("Ocorreu erro no processamento do Json")
Return
Else
/* Gera Excel */
GeraExcel(oObjJson)
EndIf
Return ( Nil )
/*/{Protheus.doc} zCCHRec
Retorna os dados básicos de um CNPJ a partir da Receita Federal
@author Caio César Henrique
@since 22/10/2019
@version 1.0
@type function
@example U_zCCHRec()
/*/
Static Function GeraExcel(oObjJson)
//Variáveis para Geração Excel
Local oFwMsEx := NIL
Local cArq := ""
Local cDir := GetSrvProfString("Startpath","")
Local cWorkSheet := oObjJson:CNPJ
Local cTable := "Informações de: "+oObjJson:FANTASIA
Local cDirTmp := GetTempPath()
Local cCadastro := "Relatório - Receita Federal"
/* Inicializa objeto do Excel */
oFwMsEx := FWMsExcel():New()
oFwMsEx:AddWorkSheet( cWorkSheet )
oFwMsEx:AddTable( cWorkSheet, cTable )
/* Define os cabeçalhos das colunas */
oFwMsEx:AddColumn( cWorkSheet, cTable , "Abertura" , 2,1)
oFwMsEx:AddColumn( cWorkSheet, cTable , "Bairro" , 2,1)
oFwMsEx:AddColumn( cWorkSheet, cTable , "Capital Social" , 2,3)
oFwMsEx:AddColumn( cWorkSheet, cTable , "CEP" , 2,1)
oFwMsEx:AddColumn( cWorkSheet, cTable , "Data Situação" , 2,1)
oFwMsEx:AddColumn( cWorkSheet, cTable , "Natureza Jurídica" , 2,1)
/* Alimenta com os itens */
oFwMsEx:AddRow( cWorkSheet, cTable, { oObjJson:ABERTURA ,;
oObjJson:BAIRRO ,;
oObjJson:CAPITAL_SOCIAL,;
oObjJson:CEP ,;
oObjJson:DATA_SITUACAO ,;
DecodeUTF8(oObjJson:NATUREZA_JURIDICA,"cp1252")})
/* Ativa o objeto */
oFwMsEx:Activate()
/* Cria XML temporário */
cArq := CriaTrab( Nil, .F. ) + ".xml"
/* Processo o Excel-XML */
MsgRun( "Gerando o arquivo, aguarde...", cCadastro, {|| oFwMsEx:GetXMLFile( cArq ) } )
/* Copia do servidor para a máquina do usuário e abre o Excel */
If __CopyFile( cArq, cDirTmp + cArq )
oExcelApp := MsExcel():New()
oExcelApp:WorkBooks:Open( cDirTmp + cArq )
oExcelApp:SetVisible(.T.)
oExcelApp:Destroy()
Else
MsgInfo( "Arquivo não copiado para temporário do usuário." )
Endif
Return ( Nil )
Bom pessoal, por hoje é só.
Abraços e até a próxima.
