Função para buscar informações do CNPJ em AdvPL

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:

zCCHRec – ver dados do CNPJ

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.

Dan Atilio (Daniel Atilio)
Especialista em Engenharia de Software pela FIB. Entusiasta de soluções Open Source. E blogueiro nas horas vagas.

Deixe uma resposta