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.