Jump to content
Fivewin Brasil

Classe Sintegra


oribeiro

Recommended Posts

Pessoal, 

Na rotina do sintegra, o programa mostra todos os dados relacionado ao CNPJ na tela mas não está mais fazendo o download dos dados na variável ::cRetorno.

Alguém sabe como corrigir?

Parece que o erro está na instrução (((   ::cRetorno := oAct:Document:Body:InnerHtml   )))

Method Consulta() Class Sintegra
   Local oDlg, oAct
   Local nTimer
   If IsInternet() == .F.
      MsgStop("Sem conexão com a internet !")
      Return {}
   Else
      ::Clear()
   EndIf
   ::cRetorno  := ""
   ::cError    := ""
   ::lDownload := .F.
   ::lError    := .F.
   Define Dialog oDlg From 0,0 To 600,900 Pixel Title "[ ("+::cUF+") SINTEGRA - Consultando ] -> Você pode colar o <CNPJ> no campo com o botão direito do mouse." // Style WS_CAPTION
   oDlg:lHelpIcon:=.F.
   Activate Dialog oDlg NoWait Centered
   oAct:=TActivex():New(oDlg,"Shell.Explorer",00,0,900,600)
   oAct:bOnEvent := {|cEv|If(cEv=="DownloadComplete",::DownloadComplete( oAct ),Nil)}
   oAct:Silent   := .T.
   oAct:Navigate( ::cPost )
   oAct:SetFocus()
   nTimer:=Seconds()
   While !::lDownload
      If !IsWindowVisible( oDlg:hWnd )
         ::lDownload := .T.
         ::lError    := .T.
         ::cError    :=  "Consulta Cancelada !"
      ElseIf !IsInternet()
         ::lDownload := .T.
         ::lError    := .T.
         ::cError    := "Perda de conexao com a internet !"
      ElseIf( Seconds()-nTimer ) >= ::nTimeOut
         ::lDownload := .T.
         ::lError    := .T.
         ::cError    := "Tempo limite esgotado !"
      EndIf
      SysRefresh()
   End
   Try
      ::cRetorno := oAct:Document:Body:InnerHtml
   Catch oE
      ::lError := .T.
      ::cError := "Falha no recebimento dos dados!"
   End
   oDlg:End()
   SysRefresh()
   If ::lDownload .and. !::lError
      Return MontaSintegra(::cRetorno, ::aGru1, ::aGru2, ::cUF)
   Else
      MsgStop(::cError,"Atenção")
   EndIf
Return {}

 

Link to comment
Share on other sites

Me poste o seu método Consulta(), por favor.

Quero ver se há outra forma de fazer o download dos dados que aparecem no navegador para a variável cRetorno, (diferente de  ::cRetorno := oAct:Document:Body:InnerHtml), daí eu tratarei essa variável na função MontaSintegra.

Obrigado.

Link to comment
Share on other sites

METHOD Consulta( cCnpj, CUFFED ) CLASS Sintegra // modificado: 10/04/2015
	   LOCAL oDlgSint, oActiveX
   LOCAL nTimer
	   IF IsInternet()
	      ::Clear()
	   ELSE
	      MsgStop( "Não é Possível Encontrar os Dados no Sintegra !" +CRLF+CRLF+ ;
               "Aguarde a Conexão com a Internet.","Erro de Conexão")
	      RETURN {}
	   ENDIF
	   // Aqui, vir carregado com a UF do cliente para nao entrar nos botoes.
   ::nUF := ASCAN( ::aUfs, {|x| x == CUFFED } )
   ::cUF := ::aUfs[ ::nUF ]
	   IF EMPTY(::cUF)
	      ::nUF := 0
      
      DEFINE DIALOG oDlgUfs FROM 0,0 TO 255,500 PIXEL
	      oDlgUfs:lHelpIcon := .F.
        
      //@ 005,010 RADIO oUfs VAR ::nUF PROMPT ::aUfs[1] + "- ACre", ::aUfs[2] + "- Alagoas", ::aUfs[3] + "- Amazonas", ::aUfs[4] + "- Amapá", ::aUfs[5] + "- Bahia", ::aUfs[6] + "- Ceará", ::aUfs[7] + "- Distrito Federeal", ::aUfs[8] + "- Espírito Santo", ::aUfs[9] + "- Goiás" SIZE 70,10 PIXEL OF oDlgUfs
	      //@ 005,085 RADIOITEM ::aUfs[10] + "- Maranhão" RADIOMENU oUfs SIZE 70,10 PIXEL OF oDlgUfs
      //@ 015,085 RADIOITEM ::aUfs[11] + "- Minas Gerais" RADIOMENU oUfs SIZE 70,10 PIXEL OF oDlgUfs
      //@ 025,085 RADIOITEM ::aUfs[12] + "- Mato Grosso do Sul" RADIOMENU oUfs SIZE 72,10 PIXEL OF oDlgUfs
      //@ 035,085 RADIOITEM ::aUfs[13] + "- Mato Grosso" RADIOMENU oUfs SIZE 70,10 PIXEL OF oDlgUfs
      //@ 045,085 RADIOITEM ::aUfs[14] + "- Pará" RADIOMENU oUfs SIZE 70,10 PIXEL OF oDlgUfs
      //@ 055,085 RADIOITEM ::aUfs[15] + "- Paraíba" RADIOMENU oUfs SIZE 70,10 PIXEL OF oDlgUfs
      //@ 065,085 RADIOITEM ::aUfs[16] + "- Pernambuco" RADIOMENU oUfs SIZE 70,10 PIXEL OF oDlgUfs
      //@ 075,085 RADIOITEM ::aUfs[17] + "- Piauí" RADIOMENU oUfs SIZE 70,10 PIXEL OF oDlgUfs
      //@ 085,085 RADIOITEM ::aUfs[18] + "- Paraná" RADIOMENU oUfs SIZE 70,10 PIXEL OF oDlgUfs
	      //@ 005,160 RADIOITEM ::aUfs[19] + "- Rio de Janeiro" RADIOMENU oUfs SIZE 70,10 PIXEL OF oDlgUfs
      //@ 015,160 RADIOITEM ::aUfs[20] + "- Rio Grande do Norte" RADIOMENU oUfs SIZE 75,10 PIXEL OF oDlgUfs
      //@ 025,160 RADIOITEM ::aUfs[21] + "- Rôndonia" RADIOMENU oUfs SIZE 70,10 PIXEL OF oDlgUfs
      //@ 035,160 RADIOITEM ::aUfs[22] + "- Roraima" RADIOMENU oUfs SIZE 70,10 PIXEL OF oDlgUfs
      //@ 045,160 RADIOITEM ::aUfs[23] + "- Rio Grande do Sul" RADIOMENU oUfs SIZE 70,10 PIXEL OF oDlgUfs
      //@ 055,160 RADIOITEM ::aUfs[24] + "- Santa Catarina" RADIOMENU oUfs SIZE 70,10 PIXEL OF oDlgUfs
      //@ 065,160 RADIOITEM ::aUfs[25] + "- Sergipe" RADIOMENU oUfs SIZE 70,10 PIXEL OF oDlgUfs
      //@ 075,160 RADIOITEM ::aUfs[26] + "- São Paulo" RADIOMENU oUfs SIZE 70,10 PIXEL OF oDlgUfs
      //@ 085,160 RADIOITEM ::aUfs[27] + "- Tocantins" RADIOMENU oUfs SIZE 70,10 PIXEL OF oDlgUfs
	      //@ 100,160 BUTTON oBtnUfs PROMPT "Selecionar" SIZE 50,20 ACTION oDlgUfs:End() DEFAULT PIXEL OF oDlgUfs
	      ACTIVATE DIALOG oDlgUfs CENTERED
	      IF ::nUF == 0
         RETURN {}
      ENDIF
	      ::nUF := ASCAN( ::aUfs, {|x| x == CUFFED } )
	      ::cUF := ::aUfs[ ::nUF ]
	   ENDIF
	   // MOSTRA A TELA DO SINTEGRA DO SITE                // alt   larg
   DEFINE DIALOG oDlgSint FROM 0,0 TO 650, 850 PIXEL ; // 600 x 800 // era
          COLORS CLR_BLACK, CLR_WHITE
	   oDlgSint:lHelpIcon := .F.
	   ACTIVATE DIALOG oDlgSint NOWAIT CENTERED  // nao espera
	   oActiveX := TActivex():New( oDlgSint, "Shell.Explorer", 0, 0, 850, 650 )
	   oActivex:Silent := .T.  // Mudei em: 13/01/2016 - Erro de Script na pagina.
	   oActivex:SetFocus()
	   oActiveX:bOnEvent := {|cEv| IF( cEv == "DownloadComplete", ::DownloadComplete( oActiveX ), NIL ) }
	   oDlgSint:oClient = oActiveX
	   nTimer := Seconds()
	   // Desligado, usando comando novo do FWHX13.06
   // oActiveX:Do( "Navigate2", ::aUrls[ ::nUF ] )  // Versao: Alessandro
	   oActiveX:Navigate( ::aUrls[ ::nUF ] )
	   while oActiveX:Busy
      SysWait(0.2)
   ENDDO
	   oActiveXdo := oActiveX:Document()
	   IF ::cUF == "AC"
      oActiveXdo:All:Item("vNUMDOC",0):Value := cCnpj
      oActiveXdo:All:Item("cfield",0):Focus()
   ELSEIF ::cUF == "AL"
      oActiveXdo:All:Item("txt_CNPJ",0):Value := cCnpj
      oActiveXdo:All:Item("Submit",0):Focus()
      oActiveXdo:All:Item("Submit",0):Click()
   ELSEIF ::cUF == "AM"
      oActiveXdo:All:Item("cgc",0):Value := cCnpJ
      oActiveXdo:All:Item("captcha_code",0):Focus()
   ELSEIF ::cUF == "AP"
	      /*
      oActiveXdo:All:Item("j_id4:tipo",0):Value := "CNPJ"
	      oActiveXdo:All:Item("j_id4:txtcaptcha",0):Focus()
      */
	      oActiveXdo:All:Item("CADf_EmitirFic_CmpHumanoInst",0):Value := cCnpj
	   ELSEIF ::cUF == "BA"
      oActiveXdo:All:Item("txt_CNPJ",0):Value := cCnpj
      oActiveXdo:All:Item("Submit",0):Focus()
      oActiveXdo:All:Item("Submit",0):Click()
   ELSEIF ::cUF == "CE"
      oActiveXdo:All:Item("CGC",0):Value := cCnpj
      oActiveXdo:All:Item("B1",0):Focus()
      oActiveXdo:All:Item("B1",0):Click()
   ELSEIF ::cUF == "DF"
      oActiveXdo:All:Item("CGC",0):Value := cCnpj
      oActiveXdo:All:Item("B1",0):Focus()
      oActiveXdo:All:Item("B1",0):Click()
   ELSEIF ::cUF == "ES"
      oActiveXdo:All:Item("num_cnpj",0):Value := cCnpj
      oActiveXdo:All:Item("botao",0):Focus()
      oActiveXdo:All:Item("botao",0):Click()
   ELSEIF ::cUF == "GO"
      oActiveXdo:All:Item("tCNPJ",0):Value := cCnpj
      oActiveXdo:All:Item("btCGC",0):Focus()
   ELSEIF ::cUF == "MA"
      // não sei como pegar os campos e o botão
   ELSEIF ::cUF == "MG"  // MODIFICADO EM:  17/05/2016 - Joao Mudou em Minas.
      oActiveXdo:All:Item("identificadorCmbOpcao",0):Value := 2 //"Número do CNPJ"
      oActiveXdo:All:Item("filtro",0):Value := cCnpj
      oActiveXdo:All:Item("recaptcha_response_field",0):Focus()
   ELSEIF ::cUF == "MS"
      oActiveXdo:All:Item("CGC_CPF",0):Value := cCnpj
      oActiveXdo:All:Item("captchacode",0):Focus()
   ELSEIF ::cUF == "MT"
      oActiveXdo:All:Item("numero",0):Value := cCnpj
      oActiveXdo:All:Item("captchaDigitado",0):Focus()
   ELSEIF ::cUF == "PA"
      oActiveXdo:All:Item("CNPJ",0):Value := cCnpj
      oActiveXdo:All:Item("OP",0):Focus()
      oActiveXdo:All:Item("OP",0):Click()
   ELSEIF ::cUF == "PR"
      oActiveXdo:All:Item("data[Sintegra1][Cnpj]",0):Value := cCnpj
      oActiveXdo:All:Item("data[Sintegra1][CodImage]",0):Focus()
   ELSEIF ::cUF == "PB"
      // PB certificado de segurança mas é ir dando sim que funciona
      // não sei como pegar os campos e o botão
   ELSEIF ::cUF == "PE"
      // não sei como pegar os campos e o botão
   ELSEIF ::cUF == "PI"
      oActiveXdo:All:Item("txt_CNPJ",0):Value := cCnpj
      oActiveXdo:All:Item("Submit",0):Focus()
      oActiveXdo:All:Item("Submit",0):Click()
   ELSEIF ::cUF == "RJ"
      oActiveXdo:All:Item("CGC",0):Value := cCnpj
      // oActiveXdo:All:Item("cod_img",0):Focus()
      // oActiveXdo:All:Item("recaptcha_response_field",0):Focus()
      // Mudei em: 28/09/2015 Joao
     oActiveXdo:All:Item("CGC",0):Focus()
   ELSEIF ::cUF == "RN"
      oActiveXdo:All:Item("CGC",0):Value := cCnpj
      oActiveXdo:All:Item("B1",0):Focus()
      oActiveXdo:All:Item("B1",0):Click()
   ELSEIF ::cUF == "RS"
      // Modificado em: 29/09/2015 Joao
      oActiveXdo:All:Item("cgcmf",0):Value := cCnpj
      oActiveX:Silent := .T.
	   ELSEIF ::cUF == "RO"
      oActiveXdo:All:Item("NuDevedor",0):Value := cCnpj
      oActiveXdo:All:Item("recaptcha_response_field",0):Focus()
   ELSEIF ::cUF == "RR"
      oActiveXdo:All:Item("_CONINSESTG",0):Value := cCnpj
      oActiveXdo:All:Item("cfield",0):Focus()
   ELSEIF ::cUF == "SC"  // Mudow em: 10/04/2015
      oActiveXdo:All:Item("txt_CPFCNPJ",0):Value := cCnpj
      oActiveXdo:All:Item("txtCodigoCaptcha",0):Focus()
   ELSEIF ::cUF == "SE"
      oActiveXdo:All:Item("cdCnpj",0):Value := cCnpj
      oActiveXdo:All:Item("dsImagem",0):Focus()
   ELSEIF ::cUF == "SP"
	      // Sao Paulo parou... Parou porque???
	      oActiveXdo:All:Item("cnpj",0):Value := cCnpj
      oActiveXdo:All:Item("Key",0):Focus()
	   ELSEIF ::cUF == "TO"
      // não sei como pegar os campos e o botão
   ENDIF
	   while !::lDownload
	      IF !IsWindowVisible( oDlgSint:hWnd )
	         ::lDownload := .T.
         ::lError    := .T.
         ::cError    :=  "Consulta Cancelada!"
	      ELSEIF !IsInternet()
            
         ::lDownload := .T.
         ::lError    := .T.
         ::cError    := "Perda de Conexão com a Internet !"
	      ELSEIF ( Seconds() - nTimer ) >= ::nTimeOut
	         ::lDownload := .T.
         ::lError    := .T.
         ::cError    := "Tempo Limite Esgotado !"
	      ENDIF
	      SysRefresh()
	   ENDDO
	   // Se eu nao quero ver na Browse e sim na tela do Sintegra(2a. Tela).
   // Basta comentar abaixo -> //oDlgSint:End()
   // oDlgSint:End()
   SysRefresh()
	   // para ver a segunda tela do sintegra - Alessandro.
   //então comente essas linhas:
	   //oDlgSint:End() em consulta()
	   //oActived:oWnd:Hide() //em DownloadComplete()
	   ::lDownload := .T. // em DownloadComplete() e passe para .F.
	   // Alessandro
	   IF ::lDownload .AND. !::lError
	      RETURN ::MontaSintegra()
	   ELSE // VOLTANDO DO SITE DO SINTEGRA NO BOTAO [X]
	       // MsgStop("Não Foi Possível Encontrar os Dados no Sintegra !" + CRLF + CRLF + ::cError,"Erro de Pesquisa")
	       MsgInfo( OemToAnsi( "ATEN€ÇO USUµRIO:                " )+CRLF+ ;
                OemToAnsi( "CONSULTA DO SINTEGRA FINALIZADA." )+CRLF+ ;
                OemToAnsi( "TECLE <ENTER> PARA CONTINUAR... " ),      ;
                OemToAnsi( "CONSULTA DO SINTEGRA FINALIZADA." ) )
	       oDlgSint:End()
	       ::Clear()
	    ENDIF
	RETURN {}


Link to comment
Share on other sites

Boa noite. pelo que entendi. mudaram para o cadesp, então tem que mudar os retornos da pagina da variável ::aUrlRet, amanhã eu dou uma olhada. 

 

PS: Kapi comente essa duas linhas mudaram os gets da tela ai tem que descobrir novamente
        ELSEIF ::cUF == "SP"
            *oActiveXdo:All:Item("cnpj",0):Value := cCnpjCpf
            *oActiveXdo:All:Item("Key",0):Focus()
 

Link to comment
Share on other sites

Meus amigos, eu usava essa função para trazer os dados cadastrais para dentro do meu sistema através do CNPJ mas infelizmente não consigo mais. Tentei de tudo.

A minha versão dessa classe é antiga e não usa essas instruções [ :All:Item( ] mencinada por vocês.

Vocês podem postar a versão mais nova dessa classe Sintegra para eu trabalhar em cima dela? Estão conseguindo trazer os dados cadastrais para o sistema?

Obrigado.

Link to comment
Share on other sites

  • 4 weeks later...

João,

O site que acesso é:

http://pfeserv1.fazenda.sp.gov.br/sintegrapfe/consultaSintegraServlet

Mas não consigo mais pegar os dados de lá porque ele muda para (httpS), assim:

https://www.cadesp.fazenda.sp.gov.br/(S(edf0jgrankeeph55lttnft45))/Pages/Cadastro/Consultas/ConsultaPublica/ConsultaPublica.aspx

Eu vejo os dados na tela mas não consigo fazer o download automático das informações para dentro do meu cadastro.

Link to comment
Share on other sites

Personas, alguém consegue traduzir o que o mister José Quintas, quis dizer nesse tópico, falou, falou e não disse nada, sinceramente tenho dificuldades em entendê-lo.

Ele disse que se pode pegar os dados do cliente aqui com o certificado digital. mas os fontes dele estão incompletos ou eu não entendo bulhufas do que ele fala. kkkkkkkkkkkkkkkkkk.

 

http://www.pctoledo.com.br/forum/viewtopic.php?f=54&t=17004

Link to comment
Share on other sites

Fiz uma manobra ontem no método Consulta() da classe sintegra e está funcionando para São Paulo.

//----------------------------------------------------------------------------------------------------------------------//
Method Consulta() Class Sintegra
   Local oDlg, oAct
   Local nTimer
   Local aRetorno, xIE, xCGC, xNome, xEndereco, xNumero, xCompl, xCidade, xCEP, xEstado
   Private cSintegra := ""
   If IsInternet() == .F.
      MsgStop("Sem conexão com a internet !")
      Return {}
   Else
      ::Clear()
   EndIf
   ::cRetorno  := ""
   ::cError    := ""
   ::lDownload := .F.
   ::lError    := .F.
   Define Dialog oDlg From 0,0 To 600,900 Pixel Title "[ ("+::cUF+") SINTEGRA - Consultando ] -> Você pode colar o <CNPJ> no campo com o botão direito do mouse." // Style WS_CAPTION
   oDlg:lHelpIcon:=.F.
   Activate Dialog oDlg NoWait Centered
   oAct:=TActivex():New(oDlg,"Shell.Explorer",00,0,900,600)
   oAct:bOnEvent := {|cEv|If(cEv=="DownloadComplete",::DownloadComplete( oAct ),Nil)}
   oAct:Silent   := .T.
   oAct:Navigate( ::cPost )
   oAct:SetFocus()
   nTimer:=Seconds()
   While !::lDownload
      If !IsWindowVisible( oDlg:hWnd )
         ::lDownload := .T.
         ::lError    := .T.
         ::cError    :=  "Consulta Cancelada !"
      ElseIf !IsInternet()
         ::lDownload := .T.
         ::lError    := .T.
         ::cError    := "Perda de conexao com a internet !"
      ElseIf( Seconds()-nTimer ) >= ::nTimeOut
         ::lDownload := .T.
         ::lError    := .T.
         ::cError    := "Tempo limite esgotado !"
      EndIf
      SysRefresh()
   End
   Try
      ::cRetorno := oAct:Document:Body:InnerHtml
   Catch oE
      ::lError := .T.
      ::cError := "Falha no recebimento dos dados!"
   End
   oDlg:End()
   SysRefresh()
   If ::lDownload .and. !::lError
      Return MontaSintegra(::cRetorno, ::aGru1, ::aGru2, ::cUF)
   Elseif "CNPJ:"$cSintegra // OASYS 15/03/2018
      aRetorno  := {}
      cSintegra := Subst(cSintegra, At("IE:",  cSintegra), Len(cSintegra))
      cSintegra := Subst(cSintegra, At("left>",cSintegra)+5, Len(cSintegra))
      xIE       := Subst(cSintegra, 1, At("<",cSintegra)-1)
      cSintegra := Subst(cSintegra, At("CNPJ:",  cSintegra), Len(cSintegra))
      cSintegra := Subst(cSintegra, At("left>",cSintegra)+5, Len(cSintegra))
      xCGC      := Subst(cSintegra, 1, At("<",cSintegra)-1)
      cSintegra := Subst(cSintegra, At("Empresarial:", cSintegra), Len(cSintegra))
      cSintegra := Subst(cSintegra, At("left>",cSintegra)+5, Len(cSintegra))
      xAbrev    := xNome := Subst(cSintegra, 1, At("<",cSintegra)-1)
      cSintegra := Subst(cSintegra, At("Logradouro:", cSintegra), Len(cSintegra))
      cSintegra := Subst(cSintegra, At("left>",cSintegra)+5, Len(cSintegra))
      xEndereco := Subst(cSintegra, 1, At("<",cSintegra)-1)
      cSintegra := Subst(cSintegra, At("Nº:", cSintegra), Len(cSintegra))
      cSintegra := Subst(cSintegra, At("left>",cSintegra)+5, Len(cSintegra))
      xNumero   := Subst(cSintegra, 1, At("<",cSintegra)-1)
      cSintegra := Subst(cSintegra, At("CEP:", cSintegra), Len(cSintegra))
      cSintegra := Subst(cSintegra, At("left>",cSintegra)+5, Len(cSintegra))
      xCEP      := Subst(cSintegra, 1, At("<",cSintegra)-1)
      cSintegra := Subst(cSintegra, At("Bairro:", cSintegra), Len(cSintegra))
      cSintegra := Subst(cSintegra, At(">",cSintegra)+1, Len(cSintegra))
      xCompl    := Subst(cSintegra, 1, At("<",cSintegra)-1)
      cSintegra := Subst(cSintegra, At("Município:", cSintegra), Len(cSintegra))
      cSintegra := Subst(cSintegra, At("left>",cSintegra)+5, Len(cSintegra))
      xCidade   := Subst(cSintegra, 1, At("<",cSintegra)-1)
      cSintegra := Subst(cSintegra, At("UF:", cSintegra), Len(cSintegra))
      cSintegra := Subst(cSintegra, At(">",cSintegra)+1, Len(cSintegra))
      xEstado   := Subst(cSintegra, 1, At("<",cSintegra)-1)
      AAdd(aRetorno, StrNum(xCGC,.F.)) //  1 cnpj
      AAdd(aRetorno, xIE             ) //  2 ie
      AAdd(aRetorno, xNome           ) //  3 razao social
      AAdd(aRetorno, ""              ) //  4 tipo logradouro
      AAdd(aRetorno, xEndereco       ) //  5 logradouro
      AAdd(aRetorno, xNumero         ) //  6 numero
      AAdd(aRetorno, xCompl          ) //  7 bairro
      AAdd(aRetorno, ""              ) //  8 tipo bairro
      AAdd(aRetorno, xCidade         ) //  9 cidade
      AAdd(aRetorno, xEstado         ) // 10 estado
      AAdd(aRetorno, StrNum(xCEP,.F.)) // 11 cep
      Return( aRetorno )
   Else
//    MsgStop(::cError,"Atenção")
   EndIf
Return {}

 

Link to comment
Share on other sites

Oscar, gentileza me enviar a sua classe SINTEGRA.PRG completa, pois não está igual a minha. Pode ser? Obg. abs.

email:

kapiabafwh@gmail.com

ou

kapiabafwh@yahoo.com  

Erros:

Error: Unresolved external '_HB_FUN_MONTASINTEGRA' referenced from C:\PLENOCBX\SINTEGRA.OBJ
Error: Unresolved external '_HB_FUN_STRNUM' referenced from C:\PLENOCBX\SINTEGRA.OBJ
Error: Unable to perform link

Link to comment
Share on other sites

Segue a classe funcionando. Tem apenas uma função que gera um número randômico de arquivo que você deve substituir. Veja aí.

Uso-a assim:

   oSintegra := Sintegra():New( cEstado )
   aRetorno  := oSintegra:Consulta()
   If Len(aRetorno) > 0
      If     cEstado$"CE/ES/MA/PR/RJ/SP"
         xCGC      := Subst(aRetorno[1],1,8)+"/"+Subst(aRetorno[1],9,4)+"-"+Subst(aRetorno[1],13,2)
         xIE       := aRetorno[2]
         xAbrev    := aRetorno[3]
         xNome     := aRetorno[3]
         xEndereco := Alltrim(Alltrim(aRetorno[4])+" "+Alltrim(aRetorno[5])+", "+Alltrim(aRetorno[6]))
         xCompl    := Alltrim(Alltrim(aRetorno[8])+" "+Alltrim(aRetorno[7]))
         xCidade   := aRetorno[9]
         xEstado   := aRetorno[10]
         xCEP      := Subst(aRetorno[11],1,5)+"-"+Subst(aRetorno[11],6,3)
      ElseIf cEstado$"BA"
         xCGC      := Subst(aRetorno[1],1,8)+"/"+Subst(aRetorno[1],9,4)+"-"+Subst(aRetorno[1],13,2)
         xIE       := aRetorno[2]
         xAbrev    := aRetorno[4]
         xNome     := aRetorno[4]
         xEndereco := Alltrim(aRetorno[5])+" "+Alltrim(aRetorno[6])+", "+Alltrim(aRetorno[7])
         xCompl    := Alltrim(Alltrim(aRetorno[9])+" "+Alltrim(aRetorno[8]))
         xCidade   := aRetorno[11]
         xEstado   := aRetorno[10]
         xCEP      := Subst(aRetorno[12],1,5)+"-"+Subst(aRetorno[12],6,3)
      ElseIf cEstado$"MG"
         xCGC      := Subst(aRetorno[1],1,8)+"/"+Subst(aRetorno[1],9,4)+"-"+Subst(aRetorno[1],13,2)
         xIE       := aRetorno[2]
         xAbrev    := aRetorno[4]
         xNome     := aRetorno[4]
         xEndereco := Alltrim(aRetorno[11])+", "+Alltrim(aRetorno[12])+" "+Alltrim(aRetorno[13])
         xCompl    := Alltrim(aRetorno[9])
         xCidade   := aRetorno[8]
         xEstado   := aRetorno[3]
         xCEP      := Subst(aRetorno[6],1,5)+"-"+Subst(aRetorno[6],6,3)
      ElseIf cEstado$"SC"
         xCGC      := Subst(aRetorno[1],1,8)+"/"+Subst(aRetorno[1],9,4)+"-"+Subst(aRetorno[1],13,2)
         xIE       := aRetorno[2]
         xAbrev    := aRetorno[3]
         xNome     := aRetorno[3]
         xEndereco := Alltrim(aRetorno[4])+" "+Alltrim(aRetorno[5])+", "+Alltrim(aRetorno[6])
         xCompl    := Alltrim(Alltrim(aRetorno[8])+" "+Alltrim(aRetorno[7]))
         xCidade   := aRetorno[10]
         xEstado   := aRetorno[9]
         xCEP      := Subst(aRetorno[11],1,5)+"-"+Subst(aRetorno[11],6,3)
      EndIf

CLASSE:

//
// INICIO: Rotina para consultar SINTEGRA
//
/*********************************************************
 * Função      : Classe para abrir uma página da net e pegar os dados
 * Data        : Por : Alain/Rancharia
 * Revisado em : 25/07/2011 - 08:50:27 Por : Vagner Wirts
 * Como Usar :
   oSintegra := Sintegra():New(cUF) - Onde cUF = estado de consulta ex.: "SP"
   aRetorno  := oSintegra:Consulta()
   If Len(aRetorno) > 0
      MsgInfo("Consulta Executada com sucesso !","AVISO DE ALERTA")
      MsgArray(aRetorno)
   EndIf
   Return Nil
 * Comentário :
   //"GO" - não consegui abrir na mesma dialog
   //"MA" - Pega somente pela inscrição, ver como tratar
   //"MG" - Pega Exige um terceiro link, ver como tratar
   //"PA" - Pega somente pela inscrição, ver como tratar
   //"RN" - Pega somente pela inscrição, ver como tratar
   Ainda estão faltando alguns estados, pois não possuo informações para poder pegar o código fonte das páginas.
   Quanto aos estados acima, estarei pesquisando para ver como pegar, mas os estados de MA,PA e RN, parecem fácil de recuperar, apesar de possuir um 3º ítem. */
//----------------------------------------------------------------------------------------------------------------------//
Static Function GetSintegra(cUF); Retu( Sintegra():New(cUF))
//----------------------------------------------------------------------------------------------------------------------//
Static Function PegaSintegra(cHtml) ; Retu (MontaSintegra(cHtml))
//----------------------------------------------------------------------------------------------------------------------//
Class Sintegra
   Data nTimeOut  Init 240 // 4 minutos
   Data lDownload, lError, cError
   Data cRetorno
   Data aGru1,aGru2
   Data cUrl,cPost,cView
   Data cUF
   Method New(cUF) Constructor
   Method Consulta( cCGCorIE )
   Method DownloadComplete( oAct )
   Method Clear() INLINE DelUrlCache({::cPost,::cView})
EndClass
//----------------------------------------------------------------------------------------------------------------------//
Method New(cUF) Class Sintegra
   Local aUrls
   Default cUF := "SP"
   aUrls := PegaUrls(cUF)
   If Len(aUrls) == 0
       MsgStop("Não pude iniciar o portal do Sintegra.","Estado "+cUF+" Inválido.")
       Retu(.T.)
   Endif
   ::cUrl  := aUrls[1]
   ::cPost := ::cUrl+aUrls[2]
   ::cView := ::cUrl+aUrls[3]
   ::aGru1 := AClone(aUrls[4])
   ::aGru2 := AClone(aUrls[5])
   ::cUF   := cUF
Return Self
//----------------------------------------------------------------------------------------------------------------------//
Method Consulta() Class Sintegra
   Local oDlg, oAct
   Local nTimer
   Local aRetorno, xIE, xCGC, xNome, xEndereco, xNumero, xCompl, xCidade, xCEP, xEstado
   Private cSintegra := ""
   If IsInternet() == .F.
      MsgStop("Sem conexão com a internet !")
      Return {}
   Else
      ::Clear()
   EndIf
   ::cRetorno  := ""
   ::cError    := ""
   ::lDownload := .F.
   ::lError    := .F.
   Define Dialog oDlg From 0,0 To 600,900 Pixel Title "[ ("+::cUF+") SINTEGRA - Consultando ] -> Você pode colar o <CNPJ> no campo com o botão direito do mouse." // Style WS_CAPTION
   oDlg:lHelpIcon:=.F.
   Activate Dialog oDlg NoWait Centered
   oAct:=TActivex():New(oDlg,"Shell.Explorer",00,0,900,600)
   oAct:bOnEvent := {|cEv|If(cEv=="DownloadComplete",::DownloadComplete( oAct ),Nil)}
   oAct:Silent   := .T.
   oAct:Navigate( ::cPost )
   oAct:SetFocus()
   nTimer:=Seconds()
   While !::lDownload
      If !IsWindowVisible( oDlg:hWnd )
         ::lDownload := .T.
         ::lError    := .T.
         ::cError    :=  "Consulta Cancelada !"
      ElseIf !IsInternet()
         ::lDownload := .T.
         ::lError    := .T.
         ::cError    := "Perda de conexao com a internet !"
      ElseIf( Seconds()-nTimer ) >= ::nTimeOut
         ::lDownload := .T.
         ::lError    := .T.
         ::cError    := "Tempo limite esgotado !"
      EndIf
      SysRefresh()
   End
   Try
      ::cRetorno := oAct:Document:Body:InnerHtml
   Catch oE
      ::lError := .T.
      ::cError := "Falha no recebimento dos dados!"
   End
   oDlg:End()
   SysRefresh()
   If ::lDownload .and. !::lError
      Return MontaSintegra(::cRetorno, ::aGru1, ::aGru2, ::cUF)
   Elseif "CNPJ:"$cSintegra // OASYS 15/03/2018
      aRetorno  := {}
      cSintegra := Subst(cSintegra, At("IE:",  cSintegra), Len(cSintegra))
      cSintegra := Subst(cSintegra, At("left>",cSintegra)+5, Len(cSintegra))
      xIE       := Subst(cSintegra, 1, At("<",cSintegra)-1)
      cSintegra := Subst(cSintegra, At("CNPJ:",  cSintegra), Len(cSintegra))
      cSintegra := Subst(cSintegra, At("left>",cSintegra)+5, Len(cSintegra))
      xCGC      := Subst(cSintegra, 1, At("<",cSintegra)-1)
      cSintegra := Subst(cSintegra, At("Empresarial:", cSintegra), Len(cSintegra))
      cSintegra := Subst(cSintegra, At("left>",cSintegra)+5, Len(cSintegra))
      xAbrev    := xNome := Subst(cSintegra, 1, At("<",cSintegra)-1)
      cSintegra := Subst(cSintegra, At("Logradouro:", cSintegra), Len(cSintegra))
      cSintegra := Subst(cSintegra, At("left>",cSintegra)+5, Len(cSintegra))
      xEndereco := Subst(cSintegra, 1, At("<",cSintegra)-1)
      cSintegra := Subst(cSintegra, At("Nº:", cSintegra), Len(cSintegra))
      cSintegra := Subst(cSintegra, At("left>",cSintegra)+5, Len(cSintegra))
      xNumero   := Subst(cSintegra, 1, At("<",cSintegra)-1)
      cSintegra := Subst(cSintegra, At("CEP:", cSintegra), Len(cSintegra))
      cSintegra := Subst(cSintegra, At("left>",cSintegra)+5, Len(cSintegra))
      xCEP      := Subst(cSintegra, 1, At("<",cSintegra)-1)
      cSintegra := Subst(cSintegra, At("Bairro:", cSintegra), Len(cSintegra))
      cSintegra := Subst(cSintegra, At(">",cSintegra)+1, Len(cSintegra))
      xCompl    := Subst(cSintegra, 1, At("<",cSintegra)-1)
      cSintegra := Subst(cSintegra, At("Município:", cSintegra), Len(cSintegra))
      cSintegra := Subst(cSintegra, At("left>",cSintegra)+5, Len(cSintegra))
      xCidade   := Subst(cSintegra, 1, At("<",cSintegra)-1)
      cSintegra := Subst(cSintegra, At("UF:", cSintegra), Len(cSintegra))
      cSintegra := Subst(cSintegra, At(">",cSintegra)+1, Len(cSintegra))
      xEstado   := Subst(cSintegra, 1, At("<",cSintegra)-1)
      AAdd(aRetorno, StrNum(xCGC,.F.)) //  1 cnpj
      AAdd(aRetorno, xIE             ) //  2 ie
      AAdd(aRetorno, xNome           ) //  3 razao social
      AAdd(aRetorno, ""              ) //  4 tipo logradouro
      AAdd(aRetorno, xEndereco       ) //  5 logradouro
      AAdd(aRetorno, xNumero         ) //  6 numero
      AAdd(aRetorno, xCompl          ) //  7 bairro
      AAdd(aRetorno, ""              ) //  8 tipo bairro
      AAdd(aRetorno, xCidade         ) //  9 cidade
      AAdd(aRetorno, xEstado         ) // 10 estado
      AAdd(aRetorno, StrNum(xCEP,.F.)) // 11 cep
      Return( aRetorno )
   Else
//    MsgStop(::cError,"Atenção")
   EndIf
Return {}

//----------------------------------------------------------------------------------------------------------------------//
Method DownloadComplete( oAct ) Class Sintegra
   Local cFile := oaNetName("_","TXT") // 'Sintegra.txt'
   Local cHTTP := oAct:LocationURL
   LoGFile(cFile, {cHTTP})
   LoGFile(cFile, {::cView})
   TRY
      LoGFile(cFile, { oAct:Document:Body:InnerHtml } )
      ::cBody := oAct:Document:Body:InnerHtml
   Catch
   End
   If ( ::cView $ cHTTP ) .OR. ::cView == cHTTP
      If At( ::aGru1[1], oAct:Document:Body:InnerHtml) != 0
         oAct:oWnd:Hide()
         ::lDownload := .T.
      Endif
   ElseIf At( "não+foi+encontrado", cHTTP ) > 0
      ::cError    := "O CNPJ não foi encontrado na base do Sintegra."
      ::lError    := .T.
      ::lDownload := .T.
   ElseIf At( "incorreto", cHTTP ) > 0
      ::cError    := "O CNPJ não é valido !"
      ::lError    := .T.
      ::lDownload := .T.
   EndIf
   cSintegra := MemoRead( cFile )
   FErase( cFile )
Return Nil

//----------------------------------------------------------------------------------------------------------------------//
Function MontaSintegra(cSintegra ,aGru1, aGru2, cUf)
   Local cFile := oaNetName("_","TXT") // 'Sintegra.txt'
   Local cLine, nLine, nTotal
   Local aReto := {}
   Local cTexto
   Local nPos,nPo1
   Local nPegou:=0
   Default cUF := ""
   If ValType(cSintegra)=="U"
      Return Nil
   Endif
   While (nPos := At("<!--%",cSintegra)) > 0
      nPo1      := At("%-->",cSintegra)
      cTexto    := SubStr(cSintegra,nPos,(nPo1-nPos)+iif( cUF$"BA" , 4, 3))
      cSintegra := StrTran(cSintegra,cTexto,"")
   Enddo
   cSintegra := StrTran(cSintegra,"INFORMAÇÕES COMPLEMENTARES")
   cSintegra := StrTran(cSintegra,"ENDEREÇO DA EMPRESA")
   cSintegra := StripHTML( cSintegra )
   cSintegra := GroupBy(aGru1[1],aGru1[2],cSintegra,.F.,.F.)
   cSintegra := RemoveBlankLineNfe( cSintegra )
   nTotal := MLCount( cSintegra)
   MemoWrit( cFile, cSintegra )
   For  nLine := 1 To nTotal
      cLine := Alltrim(MemoLine(cSintegra,,nLine))
      If AsCan(aGru2,cLine) != 0
         cTexto := Alltrim(MemoLine(cSintegra,,++nLine))
         If AsCan(aGru2,cTexto) != 0
            //Caso não haja a informação
            cTexto := " "
            --nLine
         Endif
         If cTexto == "Data da Concessão da Inscrição:"
            //para o Caso do RJ
            cTexto := " "
            --nLine
         Endif
         If Left(cLine,10) == "Logradouro"
            //No Logradouro separa o tipo do endereco
            nPos := At(" ",cTexto)
            cNew := AllTrim(Left(cTexto,nPos))
            AaDd(aReto,cNew)
            cTexto := AlLTrim(Right(cTexto,Len(cTexto)-nPos))
         Endif
         AaDd(aReto,RemoveChar(cTexto,{[.],[-],[/],[:]}))
      Endif
   Next nLine
   FErase( cFile )
Retu(aReto)
//----------------------------------------------------------------------------------------------------------------------//
Static Function StripHTML( cHtml )
   Local cString:= RemoveChar( cHTML, {"&","amp;","nbsp;",'<!-- ',' -->','<--','-->','||','\/','<!--%','%-->',[/\]} )
   Local aMatch := HB_RegExAll("\<[^\>]*\>", cString)
   Aeval(aMatch,{|a|cString:=StrTran(cString,a[1])} )
Return cString
//----------------------------------------------------------------------------------------------------------------------//
Static Function DelUrlCache( aUrl )
Return AEval( aUrl, {|nX,nNum| DeleteUrlCacheEntry( aUrl[nNum] )} )
//----------------------------------------------------------------------------------------------------------------------//
Static Function GroupBy( cStart, cEnd, cString, lTags, lBreak )
   Local nBegin, nEnd
   Local cFound, nAT
   Default lTags:=.F., lBreak:=.F.
   nBegin := At( cStart, cString )
   If(nBegin == 0 ) ; Return "" ; EndIf
   If(lTags == .F.) ; nBegin += Len(cStart) ; EndIf
   If( cEnd != Nil )
      nEnd := At( cEnd, cString) // nEnd := At( cEnd, cString, nBegin ) -> tirei porque no Harbour não tem esse terceiro parâmetro
      If nEnd == 0
         Return ""
      Else
         nEnd := nEnd - nBegin
      EndIf
      If( lTags )
         nEnd += Len( cEnd )
      EndIf
   Else
      If lBreak
         nAt := At(CRLF,Substr(cString,nBegin,Len(cString)))
         If nAt > 0
            nEnd := nAt - 1
            If nEnd < Len(cString) ; nEnd := Len(cString)+1 ; Endif
         Else
            nEnd := Len( cString )
         EndIf
      Else
         nEnd := Len( cString )
      EndIf
   EndIf
   cFound := Substr( cString, nBegin, nEnd )
   If lBreak
      If lTags
         cFound:=StrTran(cFound,CRLF)
      Else
         If cEnd != Nil
            nAt := At(CRLF,cFound)
            If nAt > 0
               cFound := Left(cFound,nAT)
            EndIf
         Endif
      EndIf
   EndIf
Return cFound
//----------------------------------------------------------------------------------------------------------------------//
Static Function RemoveBlankLineNfe( cTexto )
   Local cTextoNew:=""
   Local nLines, cLine, nNum
   nLines   := MLCount( cTexto, 400)
   For  nNum := 0 To nLines
      cLine := Alltrim(MemoLine( cTexto, 400, nNum ))
      If !Empty(cLine)
         If cLine == "function ocultarExibir(idDaTabela)"
            nNum+=14
            Loop
         EndIf
         if cLine<>"Ativo".and.cLine<>"Baixado".and.cLine<>"Inativo"
            cTextoNew += cLine + If (nNum<nLines,CRLF,"")
         endif
      EndIf
   Next nNum
Return cTextoNew
//----------------------------------------------------------------------------------------------------------------------//
Static Function RemoveChar(cString,aChar)
   Aeval(aChar,{|cChar|cString:=StrTran(cString,cChar)})
Return(cString)
//----------------------------------------------------------------------------------------------------------------------//
Static Func PegaUrls(cUF) // Nem todos os campos do html são iguais então foi colocado em forma de array para que você possa identificá-los
   Local aRet := {}
   If     cUF == "AC" // http://sefaznet.ac.gov.br/sefazonline/servlet/hpfsincon
   aRet := {"http://sefaznet.ac.gov.br/sefazonline/servlet/hpfsincon",;
         "",;
         "result.asp",;
         {"IDENTIFICAÇÃO","Os dados acima são baseados em"},;
         {"CNPJ:",;
         "Inscrição Estadual:",;
         "Razão Social:",;
         "Logradouro:",;
         "Número:",;
         "Complemento:",;
         "Bairro:",;
         "UF:",;
         "Município:",;
         "CEP:",;
         "Telefone:",;
         "Atividade Econômica:",;
         "Situação Cadastral Atual:",;
         "Data desta Situação Cadastral:",;
         "Regime de Apuração de ICMS:" ;
         } ;
         }

   ElseIf cUF == "AL" // http://www.sefaz.al.gov.br/asp/sintegra/sintegra.asp?estado=AL
   aRet := {"http://www.sefaz.al.gov.br/asp/sintegra/",;
         "sintegra.asp?estado=AL",;
         "result.asp",;
         {"IDENTIFICAÇÃO","Os dados acima são baseados em"},;
         {"CNPJ:",;
         "Inscrição Estadual:",;
         "Razão Social:",;
         "Logradouro:",;
         "Número:",;
         "Complemento:",;
         "Bairro:",;
         "UF:",;
         "Município:",;
         "CEP:",;
         "Telefone:",;
         "Atividade Econômica:",;
         "Situação Cadastral Atual:",;
         "Data desta Situação Cadastral:",;
         "Regime de Apuração de ICMS:" ;
         } ;
         }

   ElseIf cUF == "AM" // http://www.sefaz.am.gov.br/sintegra/sintegra0.asp
   aRet := {"http://www.sefaz.am.gov.br/sintegra/",;
         "sintegra0.asp",;
         "result.asp",;
         {"IDENTIFICAÇÃO","Os dados acima são baseados em"},;
         {"CNPJ:",;
         "Inscrição Estadual:",;
         "Razão Social:",;
         "Logradouro:",;
         "Número:",;
         "Complemento:",;
         "Bairro:",;
         "UF:",;
         "Município:",;
         "CEP:",;
         "Telefone:",;
         "Atividade Econômica:",;
         "Situação Cadastral Atual:",;
         "Data desta Situação Cadastral:",;
         "Regime de Apuração de ICMS:" ;
         } ;
         }

   ElseIf cUF == "AP" // http://www.sintegra.ap.gov.br/
   aRet := {"http://www.sintegra.ap.gov.br/",;
         "",;
         "result.asp",;
         {"IDENTIFICAÇÃO","Os dados acima são baseados em"},;
         {"CNPJ:",;
         "Inscrição Estadual:",;
         "Razão Social:",;
         "Logradouro:",;
         "Número:",;
         "Complemento:",;
         "Bairro:",;
         "UF:",;
         "Município:",;
         "CEP:",;
         "Telefone:",;
         "Atividade Econômica:",;
         "Situação Cadastral Atual:",;
         "Data desta Situação Cadastral:",;
         "Regime de Apuração de ICMS:" ;
         } ;
         }

   ElseIf cUF == "BA" // (OK)http://www.sefaz.ba.gov.br/Sintegra/sintegra.asp?estado=BA
   aRet := {"http://www.sefaz.ba.gov.br/Sintegra/",;
         "sintegra.asp?estado=BA/",;
         "",;
         {"IDENTIFICAÇÃO","Os dados acima são baseados em"},;
         {,;
         "Data da Consulta:",;
         "Número da Consulta:",;
         "CNPJ:",;
         "Inscrição Estadual:",;
         "UF:",;
         "Razão Social:",;
         "Logradouro:",;
         "Número:",;
         "Complemento:",;
         "Bairro:",;
         "UF:",;
         "Município:",;
         "CEP:",;
         "Endereço Eletrônico:",;
         "Telefone:",;
         "Atividade Econômica:",;
         "Data da Inscrição Estadual:",;
         "Usuário SEPD :",;
         "Situação Cadastral Atual:",;
         "Data desta Situação Cadastral:",;
         "Condição:",;
         "Regime de Apuração de ICMS:";
         };
         }

   ElseIf cUF == "CE" // (OK) http://www.sefaz.ce.gov.br/Sintegra/Sintegra.Asp?estado=CE
   aRet := {"http://www.sefaz.ce.gov.br/content/aplicacao/internet/servicos_online/sintegra/",;
         "sintegra.asp?estado=ce",;
         "result.asp",;
         {"IDENTIFICAÇÃO","Os dados acima são baseados em"},;
         {"CNPJ:",;
         "Inscrição Estadual:",;
         "RazãoSocial:",;
         "Logradouro:",;
         "Número:",;
         "Complemento:",;
         "Bairro:",;
         "UF:",;
         "Município:",;
         "CEP:",;
         "Telefone:",;
         "CNAE Fiscal Primário:",;
         "Situação Cadastral Vigente:",;
         "Data da Situação Cadastral:",;
         "Regime de Recolhimento:" ;
         } ;
         }

   ElseIf cUF == "DF" // http://www.fazenda.df.gov.br/area.cfm?id_area=110
   aRet := {"http://www.fazenda.df.gov.br/",;
         "area.cfm?id_area=110",;
         "result.asp",;
         {"IDENTIFICAÇÃO","Os dados acima são baseados em"},;
         {"CNPJ:",;
         "Inscrição Estadual:",;
         "Razão Social :",;
         "Logradouro:",;
         "Número:",;
         "Complemento:",;
         "Bairro:",;
         "UF:",;
         "Município:",;
         "CEP:",;
         "Telefone:",;
         "Atividade Econômica:",;
         "Situação Cadastral Vigente:",;
         "Data da Situação Cadastral:",;
         "Regime de Apuração:" ;
         } ;
         }

   ElseIf cUF == "ES" // (OK) http://www.sintegra.es.gov.br/
   aRet := {"http://www.sintegra.es.gov.br/",;
         "",;
         "resultado.php",;
         {"IDENTIFICAÇÃO","Os dados acima são baseados em"},;
         {"CNPJ:",;
         "Inscrição Estadual:",;
         "Razão Social :",;
         "Logradouro:",;
         "Número:",;
         "Complemento:",;
         "Bairro:",;
         "UF:",;
         "Município:",;
         "CEP:",;
         "Telefone:",;
         "Atividade Econômica:",;
         "Situação Cadastral Vigente:",;
         "Data da Situação Cadastral:",;
         "Regime de Apuração:" ;
         } ;
         }

   ElseIf cUF == "FN"

   ElseIf cUF == "GO" // http://www.sefaz.go.gov.br/sintegra/sintegra.asp
   aRet := {"http://www.sefaz.go.gov.br/sintegra/",;
         "sintegra.asp",;
         "consultar.asp",;
         {"IDENTIFICAÇÃO","Os dados acima são baseados em"},;
         {"CGC/CNPJ:",;
         "Inscrição Estadual - CCE :",;
         "Nome / Razão Social:",;
         "Logradouro:",;
         "Número:",;
         "Complemento:",;
         "Bairro:",;
         "UF:",;
         "Município:",;
         "CEP:",;
         "Telefone:",;
         "Atividade Econômica:",;
         "Situação Cadastral Vigente:",;
         "Data da Situação Cadastral:",;
         "Regime de Apuração:" ;
         } ;
         }

   ElseIf cUF == "MA" // (OK) http://sistemas.sefaz.ma.gov.br/sintegra/jsp/consultaSintegra/consultaSintegraFiltro.jsf
   aRet := {"http://sistemas.sefaz.ma.gov.br/sintegra/jsp/consultaSintegra/",;
         "consultaSintegraFiltro.jsf",;
         "",;
         {"IDENTIFICAÇÃO","Os dados acima estão baseados em"},;
         {"CGC:",;
         "Inscrição Estadual:",;
         "Razão Social:",;
         "Logradouro:",;
         "Número:",;
         "Complemento:",;
         "Bairro:",;
         "UF:",;
         "Município:",;
         "CEP:",;
         "Telefone:",;
         "CNAE Principal:",;
         "Situação Cadastral Vigente:",;
         "Data desta Situação Cadastral:",;
         "Regime de Apuração:" ;
         } ;
         }

   ElseIf cUF == "MG" // (OK) http://consultasintegra.fazenda.mg.gov.br/
   aRet := {"http://consultasintegra.fazenda.mg.gov.br/sintegra/",;
         "",;
         "ctrl/SINTEGRA/SINTEGRA/CONSULTA_707",;
         {"Dados Principais",NIL},;
         {"CNPJ:",;
         "Inscrição Estadual:",;
         "Nome Empresarial:",;
         "Logradouro:",;
         "Número:",;
         "Complemento:",;
         "Bairro:",;
         "Município:",;
         "UF:",;
         "CEP:",;
         "Telefone:",;
         "Atividade Econômica:",;
         "CNAE-F Principal:",;
         "Situação Cadastral Atual:",;
         "Data da Inscrição Estadual:",;
         "Regime de Apuração de ICMS:",;
         "Regime de Apuração de ICMS:" ;
         } ;
         }

   ElseIf cUF == "MS"
   aRet := {"http://www1.sefaz.ms.gov.br/cadastro/",;
         "CadastroMsCCI.asp",;
         "ResultadoCCI.asp?INSCRICAO",;
         {"SECRETARIA DE ESTADO DE FAZENDA",NIL},;
         {"CNPJ",;
         "INSCRIÇÃO ESTADUAL",;
         "RAZÃO SOCIAL/NOME",;
         "LOGRADOURO",;
         "NÚMERO",;
         "COMPLEMENTO",;
         "BAIRRO",;
         "MUNICÍPIO",;
         "UF",;
         "CEP",;
         "Telefone:",;
         "DESCRIÇÃO DA ATIVIDADE ECONÔMICA",;
         "MOTIVO DA SITUAÇÃO CADASTRAL",;
         "DATA DA ÚLTIMA ATUALIZAÇÃO";
         } ;
         }

   ElseIf cUF == "MT" // http://www.sefaz.mt.gov.br/sid/consulta/infocadastral/consultar/publica
   aRet := {"http://www.sefaz.mt.gov.br/sid/consulta/infocadastral/consultar/publica",;
         "",;
         "",;
         {"IDENTIFICAÇÃO","Os dados acima são baseados"},;
         {"CNPJ:",;
         "Inscrição Estadual:",;
         "RazãoSocial/Nome:",;
         "Logradouro:",;
         "Número:",;
         "Complemento:",;
         "Bairro:",;
         "Município:",;
         "UF:",;
         "CEP:",;
         "Telefone:",;
         "AtividadeEconômica:",;
         "Situação Cadastral Vigente:",;
         "Data desta Situação Cadastral:",;
         "Regime de Apuração:" ;
         } ;
         }

   ElseIf cUF == "PA" // http://app.sefa.pa.gov.br/Sintegra/
   aRet := {"https://app.sefa.pa.gov.br/Sintegra/",;
         "",;
         "",;
         {"IDENTIFICAÇÃO","Os dados acima são baseados"},;
         {"CNPJ:",;
         "Inscrição Estadual:",;
         "Razão Social:",;
         "Logradouro:",;
         "Número:",;
         "Complemento:",;
         "Bairro:",;
         "Município:",;
         "UF:",;
         "CEP:",;
         "Telefone:",;
         "Atividade Econômica:",;
         "Situação Cadastral Atual:",;
         "Data desta Situação Cadastral:",;
         "Regime de Apuração de ICMS:" ;
         } ;
         }

   ElseIf cUF == "PB" // https://saplic.receita.pb.gov.br/sintegra/SINf_ConsultaSintegra.jsp
   aRet := {"https://saplic.receita.pb.gov.br/sintegra/",;
         "SINf_ConsultaSintegra.jsp",;
         "",;
         {"IDENTIFICAÇÃO","Os dados acima são baseados"},;
         {"CNPJ:",;
         "Inscrição Estadual:",;
         "Nome Empresarial:",;
         "Logradouro:",;
         "Número:",;
         "Complemento:",;
         "Bairro:",;
         "Município:",;
         "UF:",;
         "CEP:",;
         "Telefone:",;
         "Atividade Econômica Principal:",;
         "Situação Atual:",;
         "Data desta Situação Cadastral:",;
         "Regime de Apuração de ICMS:" ;
         } ;
         }

   ElseIf cUF == "PE" // http://www.sintegra.sefaz.pe.gov.br/
   aRet := {"http://www.sintegra.sefaz.pe.gov.br/",;
         "",;
         "",;
         {"IDENTIFICAÇÃO","Os dados acima são baseados"},;
         {"CNPJ:",;
         "Inscrição Estadual:",;
         "Nome Empresarial:",;
         "Logradouro:",;
         "Número:",;
         "Complemento:",;
         "Bairro:",;
         "Município:",;
         "UF:",;
         "CEP:",;
         "Telefone:",;
         "Atividade Econômica Principal:",;
         "Situação Atual:",;
         "Data desta Situação Cadastral:",;
         "Regime de Apuração de ICMS:" ;
         } ;
         }

   ElseIf cUF == "PI" // http://web.sintegra.sefaz.pi.gov.br/consulta_empresa_pesquisa.asp // http://www.sintegra.sefaz.pi.gov.br/#
   aRet := {"http://web.sintegra.sefaz.pi.gov.br/",;
         "consulta_empresa_pesquisa.asp",;
         "consulta_empresa_pesquisa.asp",;
         {"IDENTIFICAÇÃO","Os dados acima são baseados"},;
         {"CNPJ:",;
         "Inscrição Estadual:",;
         "Nome Empresarial:",;
         "Logradouro:",;
         "Número:",;
         "Complemento:",;
         "Bairro:",;
         "Município:",;
         "UF:",;
         "CEP:",;
         "Telefone:",;
         "Atividade Econômica Principal:",;
         "Situação Atual:",;
         "Data desta Situação Cadastral:",;
         "Regime de Apuração de ICMS:" ;
         } ;
         }

   ElseIf cUF == "PR"// (OK) http://www.sintegra.fazenda.pr.gov.br/sintegra/
   aRet := {"http://www.sintegra.fazenda.pr.gov.br/",;
         "sintegra/",;
         "sintegra/",;
         {"IDENTIFICAÇÃO","Os dados acima são baseados"},;
         {"CNPJ:",;
         "Inscrição Estadual:",;
         "Nome Empresarial:",;
         "Logradouro:",;
         "Número:",;
         "Complemento:",;
         "Bairro:",;
         "Município:",;
         "UF:",;
         "CEP:",;
         "Telefone:",;
         "Atividade Econômica Principal:",;
         "Situação Atual:",;
         "Data desta Situação Cadastral:",;
         "Regime de Apuração de ICMS:" ;
         } ;
         }

   ElseIf cUF == "RJ" // (OK) http://www.fazenda.rj.gov.br/projetoCPS/consulta.jsp
   aRet := {"http://www.fazenda.rj.gov.br/projetoCPS/",;
         "consulta.jsp;jsessionid=RqRCTtJRZc6Tt0LhXgZnKh1jt8JQLx1Lk2J8HJ7xKqJpGvhQ0W4q!-1007206184",;
         "cpsServlet",;
         {"IDENTIFICAÇÃO","Data da Consulta:"},;
         {"CNPJ:",;
         "Inscrição Estadual:",;
         "Razão Social:",;
         "Logradouro:",;
         "Número:",;
         "Complemento:",;
         "Bairro:",;
         "Município:",;
         "UF:",;
         "CEP:",;
         "Telefone:",;
         "Atividade Econômica:",;
         "Situação Cadastral Vigente:",;
         "Data desta Situação Cadastral:",;
         "Regime de Apuração de ICMS:" ;
         } ;
         }

   ElseIf cUF == "RN" // http://www.set.rn.gov.br/uvt/consultacontribuinte.aspx
   aRet := {"http://www.set.rn.gov.br/uvt/",;
         "consultacontribuinte.aspx",;
         "",;
         {"IDENTIFICAÇÃO","Os dados acima são baseados"},;
         {"CNPJ:",;
         "Inscrição Estadual:",;
         "Razão Social:",;
         "Logradouro:",;
         "Número:",;
         "Complemento:",;
         "Bairro:",;
         "Município:",;
         "UF:",;
         "CEP:",;
         "Telefone:",;
         "CNAE Fiscal Primário:",;
         "Situação Cadastral Atual:",;
         "Data da Situação Cadastral:",;
         "Regime de Pagamento:" ;
         } ;
         }

   ElseIf cUF == "RO" // http://www.sefin.ro.gov.br/sint_consul.asp
   aRet := {"http://portal.intranet.sefin.ro.gov.br/PortalContribuinte/",;
         "parametropublica.jsp",;
         "consultapublica.jsp",;
         {"IDENTIFICA",Nil},;
         {"C.P.F/C.N.P.J:",;
         "Inscrição Estadual:",;
         "Razão Social:",;
         "Endereço:",;
         "Número:",;
         "Complemento:",;
         "Bairro:",;
         "Município:",;
         "UF:",;
         "CEP:",;
         "Telefone:",;
         "Regime de Pagamento:",;
         "Situação Cadastral Vigente:",;
         "Data:",;
         "Regime de Apuração de ICMS:" ;
         } ;
         }

   ElseIf cUF == "RR"
   aRet := {"https://www.sefaz.rr.gov.br/sintegra/",;
        "servlet/hwsintco",;
        "servlet/hwsintpe?",;
        {".::IDENTIFICAÇÃO",nil},;
        {"CNPJ:",;
        "Inscrição Estadual",;
        "Razão Social:",;
        "Logradouro:",;
        "Número:",;
        "Complemento:",;
        "Bairro:",;
        "Município:",;
        "UF:",;
        "CEP:",;
        "Telefone:",;
        "Ativ. Enonômica:",;
        "Sit.Cad. Vigente:",;
        "Dta.Sit.Cadastral:";
        } ;
        }

   ElseIf cUF == "RS" // http://sintegra.sefaz.rs.gov.br/sef_root/inf/Sintegra_Entrada.asp
   aRet := {"http://sintegra.sefaz.rs.gov.br/sef_root/inf/",;
         "Sintegra_Entrada.asp",;
         "SEF_sintegra_1.asp",;
         {"IDENTIFICAÇÃO","Os dados acima estão baseados em informações"},;
         {"CPF/CNPJ:",;
         "Inscrição Estadual:",;
         "Nome/Razão Estadual:",;
         "Logradouro:",;
         "Número:",;
         "Complemento:",;
         "Bairro:",;
         "UF:",;
         "Município:",;
         "CEP:",;
         "Telefone:",;
         "CNAE-Fiscal Principal:",;
         "Situação Cadastral Atual:",;
         "Data desta Situação Cadastral:",;
         "Regime de Apuração de ICMS:" ;
         } ;
         }

   ElseIf cUF == "SC" // http://sistemas.sef.sc.gov.br/sintegra
   aRet := {"http://sistemas3.sef.sc.gov.br/sintegra/",;
         "consulta_empresa_pesquisa.aspx",;
         "consulta_empresa_pesquisa.aspx",;
         {"IDENTIFICAÇÃO","Os dados acima estão baseados em informações"},;
         {"CPF/CNPJ:",;
         "Inscrição Estadual:",;
         "Nome/Razão Estadual:",;
         "Logradouro:",;
         "Número:",;
         "Complemento:",;
         "Bairro:",;
         "Município:",;
         "UF:",;
         "CEP:",;
         "Telefone:",;
         "CNAE-Fiscal Principal:",;
         "Situação Cadastral Atual:",;
         "Data desta Situação Cadastral:",;
         "Regime de Apuração de ICMS:" ;
         } ;
         }

   ElseIf cUF == "SE" // https://security.sefaz.se.gov.br/SIC/sintegra/index.jsp
   aRet := {"https://security.sefaz.se.gov.br/SIC/sintegra/",;
         "index.jsp",;
         "",;
         {"IDENTIFICAÇÃO","Os dados acima estão baseados"},;
         {"CNPJ:",;
         "Inscrição Estadual:",;
         "Razão Social:",;
         "Logradouro:",;
         "Número:",;
         "Complemento:",;
         "Bairro:",;
         "Município:",;
         "UF:",;
         "CEP:",;
         "Telefone:",;
         "Atividade Econômica:",;
         "Situação Cadastral Vigente:",;
         "Data desta Situação Cadastral:",;
         "Regime de Apuração:" ;
         } ;
         }

   ElseIf cUF == "SP" // (OK) http://pfeserv1.fazenda.sp.gov.br/sintegrapfe/consultaSintegraServlet
   aRet := {"http://pfeserv1.fazenda.sp.gov.br/sintegrapfe/",;
         "consultaSintegraServlet",;
         "sintegra",;
         {"IDENTIFICAÇÃO","Os dados acima estão baseados"},;
         {"CNPJ:",;
         "Inscrição Estadual:",;
         "Razão Social:",;
         "Logradouro:",;
         "Número:",;
         "Complemento:",;
         "Bairro:",;
         "Município:",;
         "UF:",;
         "CEP:",;
         "Telefone:",;
         "Atividade Econômica:",;
         "Situação Cadastral Vigente:",;
         "Data desta Situação Cadastral:",;
         "Regime de Apuração:" ;
         } ;
         }

   ElseIf cUF == "TO" // http://sintegra.sefaz.to.gov.br/
   aRet := {"http://sintegra.sefaz.to.gov.br/",;
         "",;
         "",;
         {"IDENTIFICAÇÃO","Os dados acima estão baseados"},;
         {"CNPJ:",;
         "Inscrição Estadual:",;
         "Razão Social:",;
         "Logradouro:",;
         "Número:",;
         "Complemento:",;
         "Bairro:",;
         "Município:",;
         "UF:",;
         "CEP:",;
         "Telefone:",;
         "Atividade Econômica:",;
         "Situação Cadastral Vigente:",;
         "Data desta Situação Cadastral:",;
         "Regime de Apuração:" ;
         } ;
         }

   Else // SUFRAMA: https://wwws.suframa.gov.br/asp/sintegra_cadastro.asp // https://wwws.suframa.gov.br/asp/sintegra_cadastro_result.asp
   aRet := {"https://wwws.suframa.gov.br/asp/",;
         "sintegra_cadastro.asp",;
         "sintegra_cadastro_result.asp",;
         {"IDENTIFICAÇÃO","Os dados acima estão baseados"},;
         {"CGC:",;
         "Inscrição Estadual:",;
         "Razão Social:",;
         "Logradouro:",;
         "Número:",;
         "Complemento:",;
         "Bairro:",;
         "Município:",;
         "UF:",;
         "CEP:",;
         "Telefone:",;
         "Atividade Econômica:",;
         "Situação da Inscrição SUFRAMA:",;
         "Situação Cadastral:",;
         "Tipo(s) de Incentivo(s) para a região de domicílio da empresa :" ;
         } ;
         }
   Endif
Retu(aRet)
//----------------------------------------------------------------------------------------------------------------------//
DLL Static Function DeleteUrlCacheEntry(lpszUrlName AS STRING) AS LONG PASCAL FROM "DeleteUrlCacheEntryA" LIB "wininet.dll"
//----------------------------------------------------------------------------------------------------------------------//

 

Link to comment
Share on other sites

Oscar,

 

	 
	c.
Error: Unresolved external '_HB_FUN_MSGARRAY' referenced from C:\PLENOCBX\SINTEG
RA.OBJ
Error: Unresolved external '_HB_FUN_STRNUM' referenced from C:\PLENOCBX\SINTEGRA
.OBJ
Error: Unresolved external '_HB_FUN_OANETNAME' referenced from C:\PLENOCBX\SINTE
GRA.OBJ
Error: Unable to perform link
	

Link to comment
Share on other sites

*********************************************************************************************
FUNCTION StrNum(cVar , lPontos, nTam)  // Esta funcao retorna apenas os numeros da String
*********************************************************************************************
   Local cVar1 := ""
   Local nInd  := 0
   DEFAULT lPontos := .T.
   DEFAULT nTam    := 0
   For nInd=1 To Len(cVar)
      if Subst(cVar, nInd, 1)$("0123456789"+iif(lPontos,",.",""))
         cVar1 = cVar1 + Subst(cVar, nInd, 1)
      endif
   Next
   if nTam>0
      cVar1 := PadR(cVar1, nTam)
   endif
RETURN cVar1

*******************************************************************************************
function MsgArray(aArray, cMsg, cFile)
*******************************************************************************************
   Local   cText := ""
   Default cMsg  := ""
   Default cFile := ""
   Aeval(aArray, {|v| cText += cValToChar(v)+CRLF})
   if !Empty(cFile) // Grava a matriz num arquivo TEXTO
      MemoWrit(cFile, cText)
      if Empty(cMsg)
         cMsg  := "Arquivo gravado em "+cFile
      else
         cText := "Arquivo gravado em "+cFile + chr(13)+chr(13) + cText
      endif
   endif
   MsgInfo(cText, cMsg)
return Nil

FUNCTION OANETNAME() // Crie uma função para gerar um nome de arquivo randômico para que essa função possa ser utilizada por mais de um usuário simultaneamente.
Return ("SINTEGRA.TXT")

 

Link to comment
Share on other sites

Isso eu não consegui fazer, mas eu COPIEI o CNPJ na memória antes de chamara função e oriento o usuário a COLAR no campo. Super simples. Ninguém reclama.

   // Copia a CHAVE para o ClipBoard
   oClp:=TClipboard():New()
   oClp:Clear()
   oClp:SetText( cCNPJ )

Se alguém conseguir fazer isso na classe, por favor, poste aqui os ajustes. Acho que alguns poderão tirar proveito dessa rotina.

Fiz algo muito interessante com ela. Quando o usuário está na inclusão do cadastro de clientes, fornecedores, tranportadora, etc. Se ele chama essa rotina eu já trago os campos preenchidos no cadastro. 

Link to comment
Share on other sites

Eu não uso a flexdocs mas achei interessante a postagem sua postagem e implementei no meu sistema. Agora posso verificar se o cliente esta habilitado ou não já no envio. Não sei se tem a mesma validade do cadesp, mas pelo menos já te da um alerta.

veja o retorno que ele traz: 

<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><nfeResultMsg xmlns="http://www.portalfiscal.inf.br/nfe/wsdl/CadConsultaCadastro4"><retConsCad versao="2.00" xmlns="http://www.portalfiscal.inf.br/nfe"><infCons><verAplic>SP_NFE_PL009_V4</verAplic><cStat>111</cStat><xMotivo>Consulta cadastro com uma ocorrência</xMotivo><UF>SP</UF><CNPJ>48209381000140</CNPJ><dhCons>2018-03-16T16:14:46-03:00</dhCons><cUF>35</cUF><infCad><IE>110563922119</IE><CNPJ>48209381000140</CNPJ><UF>SP</UF><cSit>0</cSit><indCredNFe>0</indCredNFe><indCredCTe>4</indCredCTe><xNome>AMIR CEREAIS LTDA - ME</xNome><xRegApur>NORMAL - REGIME PERIÓDICO DE APURAÇÃO</xRegApur><CNAE>4712100</CNAE><dIniAtiv>1982-01-04</dIniAtiv><dUltSit>2008-02-29</dUltSit><ender><xLgr>RUA CATAO</xLgr><nro>914</nro><xBairro>V ROMANA</xBairro><cMun>3550308</cMun><xMun>SAO PAULO</xMun><CEP>05049000</CEP></ender></infCad></infCons></retConsCad></nfeResultMsg></soap:Body></soap:Envelope>

Abs

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...