Clipper On Line • Ver Tópico - Consulta optante do simples online
Página 1 de 24

Consulta optante do simples online

MensagemEnviado: 19 Fev 2016 15:44
por Daniel
Ola pessoal, gostaria da ajuda de vocês para tentar fazer esta consulta, só falta enviar os dados para o site,
tentei mais não estou conseguindo

#include "minigui.ch"
#include "directry.ch"
#include "Fileio.ch"
#include "xhb.ch"
**********************************************
FUNCTION Main()
   Public cUrl := "http://www8.receita.fazenda.gov.br/simplesnacional/aplicacoes/atbhe/consultaoptantes.app/consultaropcao.aspx?"
   Public cUrlC:= "http://www8.receita.fazenda.gov.br/simplesnacional/aplicacoes/atbhe/consultaoptantes.app/Captcha/Inicializa.ashx"
   Public cCaptcha, cCnpj, cStringCookie, cViewState, cEeventValidation, cHiddenField

   LOAD WINDOW F_Simples
   Captcha()
   F_Simples.Center
   F_Simples.Activate

***********************************************
Function Consulta()
   cCaptcha:= F_Simples.text_2.Value
   cCnpj   := Tira_Mascara(F_Simples.text_1.value)

   oHttp:=TipClientHttp():new( cURL )
   oHttp:open()
   cHtml := oHttp:readAll()
   oHttp:close()
   memowrit('site.txt', cHtml)
   nIni:= At('id="__VIEWSTATE" value=',  cHtml) + 24
   cHtml1:= SubStr( cHtml, nIni)
   nFim:= At(' />', cHtml1) - 1
   cViewState:= SubStr(cHtml, nIni, nFim)

   nIni1:= At('id="__EVENTVALIDATION" value="',  cHtml) + 30
   cHtml1:= SubStr( cHtml, nIni1)
   nFim1:= At(' />', cHtml1) - 1
   cEeventValidation:= SubStr(cHtml, nIni1, nFim1)

   nIni2:= At('ctl00$ContentPlaceHolderConteudo$',  cHtml) + 33
   cHtml1:= SubStr( cHtml, nIni2)
   nFim2:= At('" type="text"', cHtml1) - 1
   cHiddenField:= SubStr(cHtml, nIni2, nFim2)

    cRet:= MicrosoftPost()
    F_Simples.Edit_1.Value:= cRet
    Return Nil

***************************************
Function Captcha()

   oHttp:=TipClientHttp():new( cURLc )
   oHttp:open()
   cHtml := oHttp:readAll()
   oHttp:close()
   memowrit('sitec.txt', cHtml)
   nIni1:= At('"Token":',  cHtml) + 7
   nFim1:= At('","Dados"', cHtml) - nIni1
   cStringCookie:= SubStr(cHtml, nIni1, nFim1)
   nIni:= At('Dados":"',  cHtml) + 8
   nFim:= At('","ContentType"', cHtml) - nIni
   txt_file:=fcreate("captcha.png", 0)
   if (!(ferror() = 0))
      MsgInfo("Erro de criacao do arquivo TESTE.TXT ::> " + ;
      Str(ferror(), 3, 0))
      quit
   endif
   cFile:= SubStr(cHtml, nIni, nFim)
   cFile:= hb_base64Decode(cFile, "image/png")
   fwrite(txt_file, cFile)
   fclose(txt_file)
   SetProperty ('F_Simples', 'image_1', 'Picture', 'Captcha.png')
   Return Nil

***************************************
Function Tira_Mascara(arg)
Local arg1:= "", x

   For x:= 1 To Len(arg)
      If SubStr(arg, x, 1) != "/"
         If SubStr(arg, x, 1) != "."
            If SubStr(arg, x, 1) != "-"
               If SubStr(arg, x, 1) != "("
                  If SubStr(arg, x, 1) != ")"
                     If SubStr(arg, x, 1) != " "
                        arg1+= SubStr(arg, x, 1)
                     EndIf
                  EndIf
               EndIf
            EndIf
         EndIf
      EndIF
   Next x
   Return(AllTrim(arg1))

***************************************
Function TrocaUtf8(cTexto)

cTexto := StrTran( cTexto, "/", "%2F" )
cTexto := StrTran( cTexto, "=", "%3D" )

Return cTexto
***************************************
Function MicrosoftPost()
   LOCAL oServer, cRetorno := "*ERRO*", cMsgErro:= ''

   cParm:= [__EVENTTARGET%3D&] + ;
           [__EVENTARGUMENT%3D&] + ;
           [__VIEWSTATE%3D] +  TrocaUtf8(cViewState) + ;
           [&__EVENTVALIDATION%3D] + TrocaUtf8(cEeventValidation) + ;
           [&ctl00%24ContentPlaceHolderConteudo%24] + cHiddenField + [%3D] + cCnpj + ;
           [&ctl00%24ContentPlaceHolderConteudo%24HiddenField1%2F] + cHiddenField + ;
           [&ctl00%24ContentPlaceHolderConteudo%24hddServidorCaptcha%3D] + 'pro' + ;
           [&ctl00%24ContentPlaceHolderConteudo%24txtTexto_captcha_serpro_gov_br%3D] + cCaptcha + ;
           [&ctl00%24ContentPlaceHolderConteudo%24btnConfirmar%3D] + 'Consultar'

   TRY
      oServer:= win_OleCreateObject( "MSXML2.ServerXMLHTTP.5.0")
   CATCH
      cMsgErro:= "Serviço não mapeado"
      RETURN(cMsgErro)
   END
   TRY
       oServer:Open( "POST", cUrl , .F. )
       oServer:SetRequestHeader("Content-Type", "application/x-www-form-urlencoded")
      oServer:SetRequestHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8")
        oServer:SetRequestHeader("Accept-Encoding", "gzip, deflate" )
        oServer:SetRequestHeader("Accept-Language", "pt-BR,pt;q=0.8,en-US;q=0.5,en;q=0.3")
        oServer:SetRequestHeader("Connection", "keep-alive")
        oServer:SetRequestHeader("Cookie", "captcha_token=" +  cStringCookie)
        oServer:SetRequestHeader("Host", "www8.receita.fazenda.gov.br")
//       oServer:SetRequestHeader("Referer", "http://www8.receita.fazenda.gov.br/SimplesNacional/Aplicacoes/ATBHE/ConsultaOptantes.app/ConsultarOpcao.aspx")
        oServer:SetRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.152 Safari/537.36")
   CATCH
        RETURN('Erro no open')
   END
   TRY
   //msgInfo(cUrl+cParm)
      oServer:send(cParm)
      oServer:WaitForResponse( 500 )
   CATCH
      cMsgErro:= "Erro ao criar"
      RETURN(cMsgErro )
   END
   cRetorno:= (oServer:ResponseText() + cMsgErro)
   HB_MemoWrit("Reposta.txt", cRetorno, .f. )
     RETURN(cRetorno)
/*
parte do site pelo firebug
Accept
text/html,application/xhtml+xml,application/xml;q=0.9,* /*;q=0.8
Accept-Encoding
gzip, deflate
Accept-Language
pt-BR,pt;q=0.8,en-US;q=0.5,en;q=0.3
Connection
keep-alive
Content-Type
application/x-www-form-urlencoded
Cookie
captcha_token=45615119762207542432998174142126158180112212181911714386
Host
www8.receita.fazenda.gov.br
Referer
http://www8.receita.fazenda.gov.br/simplesnacional/aplicacoes/atbhe/consultaoptantes.app/consultaropcao
.aspx?__EVENTTARGET=&__EVENTARGUMENT=&__VIEWSTATE=%2FwEPDwUKLTI4MDEzODYyMg9kFgJmD2QWAgIDD2QWAgICD2QW
AgIDD2QWBAIBD2QWAgIDDw8WAh4RQ29udHJvbFRvVmFsaWRhdGUFEjYzNTkxMzI1NzgwNDY5MzQ4OGRkAgMPDxYCHgdWaXNpYmxl
aGQWCAITD2QWBAIDDzwrABEBARAWABYAFgBkAgcPPCsAEQEBEBYAFgAWAGQCGQ9kFgICAw88KwARAQEQFgAWABYAZAIfD2QWAgID
DzwrABEBARAWABYAFgBkAiUPZBYCAgMPPCsAEQEBEBYAFgAWAGQYBQU7Y3RsMDAkQ29udGVudFBsYWNlSG9sZGVyQ29udGV1ZG8k
Z3JkUGVyaW9kb3NBbnRlcmlvcmVzU0lNRUkPZ2QFOmN0bDAwJENvbnRlbnRQbGFjZUhvbGRlckNvbnRldWRvJGdyZEFnZW5kYW1l
bnRvc09wY2FvU2luYWMPZ2QFOWN0bDAwJENvbnRlbnRQbGFjZUhvbGRlckNvbnRldWRvJEdyaWRWaWV3T3Bjb2VzQW50ZXJpb3Jl
cw9nZAUyY3RsMDAkQ29udGVudFBsYWNlSG9sZGVyQ29udGV1ZG8kZ3JkRXZlbnRvc0Z1dHVyb3MPZ2QFN2N0bDAwJENvbnRlbnRQ
bGFjZUhvbGRlckNvbnRldWRvJGdyZEV2ZW50b3NGdXR1cm9zU2ltZWkPZ2T920T0GuCQkl8xdxBEk0zVBiLNY06JbOckBYKTOSNRsQ
%3D%3D&__EVENTVALIDATION=%2FwEWBgLc6fWoAgL89J3qBALm7oLoAQK03OyQCwKI9eioCgLDwpOgAaQZXvAsQIyYcxZ4x%2FcSIf5qFytGdIkWWT
%2BCwr38M2bm&ctl00%24ContentPlaceHolderConteudo%24635913257804693488=02351488000127&ctl00%24ContentPlaceHolderConteudo
%24HiddenField1=635913257804693488&ctl00%24ContentPlaceHolderConteudo%24hddServidorCaptcha=pro&ctl00
%24ContentPlaceHolderConteudo%24txtTexto_captcha_serpro_gov_br=uztgyg&ctl00%24ContentPlaceHolderConteudo
%24btnConfirmar=Consultar
User-Agent
Mozilla/5.0 (Windows NT 10.0; rv:44.0) Gecko/20100101 Firefox/44.0

RETURN( NIL ) */


*HMGS-MINIGUI-IDE Two-Way Form Designer Generated Code
*OPEN SOURCE PROJECT 2005-2015 Walter Formigoni http://sourceforge.net/projects/hmgs-minigui/

DEFINE WINDOW TEMPLATE AT 198 , 274 WIDTH 597 HEIGHT 300 TITLE 'Consulta Optante do Simples' MAIN

     DEFINE LABEL Label_1
            ROW    10
            COL    30
            WIDTH  40
            HEIGHT 15
            VALUE "CNPJ"
     END LABEL

     DEFINE TEXTBOX Text_1
            ROW    30
            COL    30
            WIDTH  160
            HEIGHT 30
            FONTNAME 'Arial'
            FONTSIZE 12
            INPUTMASK "99.999.999/9999-99"
     END TEXTBOX

     DEFINE LABEL Label_2
            ROW    10
            COL    200
            WIDTH  55
            HEIGHT 15
            VALUE "Captcha"
     END LABEL

     DEFINE TEXTBOX Text_2
            ROW    30
            COL    200
            WIDTH  120
            HEIGHT 30
            FONTNAME 'Arial'
            FONTSIZE 12
            MAXLENGTH 6
     END TEXTBOX

     DEFINE IMAGE Image_1
            ROW    30
            COL    330
            WIDTH  180
            HEIGHT 50
     END IMAGE

     DEFINE EDITBOX Edit_1
            ROW    100
            COL    20
            WIDTH  550
            HEIGHT 140
            VALUE ''
            FONTNAME 'Arial'
            MAXLENGTH  NIL
     END EDITBOX

     DEFINE BUTTON Button_1
            ROW    70
            COL    160
            WIDTH  100
            HEIGHT 28
            CAPTION "Consultar"
            FONTNAME 'Arial'
            ACTION { || Consulta()}
     END BUTTON

END WINDOW

Consulta optante do simples online

MensagemEnviado: 26 Fev 2016 12:33
por Daniel
Ufa ate que fim funcionou

Consulta optante do simples online

MensagemEnviado: 26 Fev 2016 17:23
por HASA
:-o
Olá Daniel, fiquei interessado por sua pesquisa, o fonte apresentado aqui está ok.
:)Pos
HASA

Consulta optante do simples online

MensagemEnviado: 26 Fev 2016 19:55
por JoséQuintas
Interessante.
Pelo que entendi, o link de consulta recebe a foto codificada e mais o texto digitado.
O truque é trocar a foto por outra já conhecida, com texto digitado já conhecido.

Consulta optante do simples online

MensagemEnviado: 27 Fev 2016 21:26
por Daniel
Hasa
nao o apresentado ai estava case proto, agora terminei ele,
e estou tentando a consulta do cnpj, este esta mais dificil pois tem que pegar os cookies

Consulta optante do simples online

MensagemEnviado: 01 Mar 2016 08:45
por fladimir
Daniel não entendi...

Vc postou um código com uma dificuldade depois relatou q funcionou...

Qual era o problema então?

Consulta optante do simples online

MensagemEnviado: 02 Mar 2016 11:05
por Daniel
Fladimir o erro era no script de envio estava usando variável tipo texto
ai troquei para vetor ai funcionou

Consulta optante do simples online

MensagemEnviado: 02 Mar 2016 13:37
por Wanderlei
OI Daniel, posta o exemplo corrigido aqui

Consulta optante do simples online

MensagemEnviado: 02 Mar 2016 17:28
por HASA
:))
Wanderlei o post está acima ok. Ainda não testei, mas... acho que é este com o SIMPLES.RAR
:)Pos
HASA

Consulta optante do simples online

MensagemEnviado: 02 Mar 2016 22:18
por fladimir
HASA ... o RAR contém os EXE funcionais... a questão é sobre a correção no código... o Daniel respondeu acima... agora tem q testar a resposta.

Consulta optante do simples online

MensagemEnviado: 03 Mar 2016 11:12
por HASA
:-O
Vixi, então aguardo também... estou na correria com outras obrigações e por isso nem abri o RAR.
:-o
HASA

Consulta optante do simples online

MensagemEnviado: 11 Mar 2016 23:53
por fladimir
????

Consulta optante do simples online

MensagemEnviado: 22 Mar 2016 16:05
por Daniel
Ola depois de alguns teste parece que esta funcionando blz
só a consulta do Cnpj que enrosca de vezes em quanto
segue os arquivos fontes

Consulta optante do simples online

MensagemEnviado: 26 Abr 2016 11:07
por Wanderlei
Bom Dia Daniel,
Consegui colocar sua função dentro do meu sistema para pegar os dados da empresa, será que vc consegui fazer este mesmo esquema para pegar os dados pelo CPF?

Consulta optante do simples online

MensagemEnviado: 26 Abr 2016 11:17
por janio
Wanderlei,

Vc pode disponibilizar como vc fez?

Como vc pegou os dados no .html?

Vc usa MiniGUI ou HwGUI? Se hwgui, como vc fez pra exibir o captcha (.png)?

Janio

Consulta optante do simples online

MensagemEnviado: 26 Abr 2016 17:36
por Daniel
Wanderlei

o cpf so retorna o nome e a situação que o cpf esta
se servir assim posso ver como funciona

Consulta optante do simples online

MensagemEnviado: 27 Abr 2016 10:59
por Wanderlei
ConsultaCnpjSite.prg
Exemplo de consulta pelo cnpj no site da receita, contribuição do Daniel.
(10.91 KiB) Baixado 307 vezes
Daniel servi sim, é justamente o que eu quero.

Janio eu utilizo a Hwgui

Consulta optante do simples online

MensagemEnviado: 28 Abr 2016 08:35
por janio
Deu certo, Wanderlei! E ficou muito bom ;-*

O inconveniente eh essa dependência da freeImage.dll! Pq a hwgui não exibe imagens .png?

Outro fato tbm eh na consulta não retornar o CGF da empresa... :'(

Janio

Consulta optante do simples online

MensagemEnviado: 28 Abr 2016 17:34
por Daniel
Vanderlei o jeito que achei so foi com a data de nascimento junto
que o da receita federal

Consulta optante do simples online

MensagemEnviado: 28 Abr 2016 22:20
por fladimir
Da pra usar a dll do FSist, é paga mas o valor é muito em conta e sem limite de uso na tua carteira de clientes.

Tem pra CPF, CNPJ e XML

ai vc integra com teu sistema.

Consulta optante do simples online

MensagemEnviado: 29 Abr 2016 07:53
por Wanderlei
Obrigado Daniel, com isso vai ficar faltando apenas para xml sem certificado.

Consulta optante do simples online

MensagemEnviado: 29 Abr 2016 12:04
por janio
Meu sonho de consumo:

Baixar xml de nfe sem certificado direto do meu próprio sistema!
;-* ;-* ;-* ;-* ;-* ;-* ;-*

Janio

Consulta optante do simples online

MensagemEnviado: 29 Abr 2016 13:16
por Itamar M. Lins Jr.
Ola!
O xharbour compila essas linhas com a função at() sem erro ?
if ( nPos := at( "<b>", cLine, nPos ) ) # 0

Com o Harbour 3.4 não vai.
ConsultaCnpjSite.prg(188) Error E0021  Incorrect number of arguments in AT
Passed: 3, expected: 2


Saudações,
Itamar M. Lins Jr.

Consulta optante do simples online

MensagemEnviado: 29 Abr 2016 14:30
por janio
O xHarbour eu não sei, mas o Harbour3.2 que eu uso, sim!

Compilou sem problema!

Janio

Consulta optante do simples online

MensagemEnviado: 29 Abr 2016 15:31
por Itamar M. Lins Jr.
Ola!
A função at() foi alterada.
Tem 3 funções at()´s
2015-10-21 19:26 UTC+0200 Przemyslaw Czerpak (druzus/at/poczta.onet.pl)
  * contrib/hbfoxpro/hbfoxpro.hbx
  * contrib/hbfoxpro/occurs.prg
    + added FoxPro compatible At() function with 3-rd <nOccurrence>
      parameter:
            fox_At( <cSubstr>, <cString>, <nOccurrence> ) -> <nPos>

  * contrib/hbfoxpro/hbfoxpro.ch
    + added PP rule for At() with FoxPro like 3 parameters,
      please remember that such At() extension is not compatible with
      xHarbour one so do not include hbcompat.ch or xhb.ch - they
      redefines At() with 3 or more parameters to xHarbour compatible
      function: hb_At()


At(),hb_At(),Fox_At()
Não sei se a mensagem do Harbour 3.4 está equivocada ou é uma medida de segurança, pois no clipper at() só pega 2 parâmetros.

Saudações,
Itamar M. Lins Jr.

Consulta optante do simples online

MensagemEnviado: 29 Abr 2016 15:33
por Itamar M. Lins Jr.
Bom, de qualquer forma fiz umas mudanças aqui e está rodando sem problemas no harbour 3.4 com Hwgui 2.19.

Saudações,
Itamar M. Lins Jr.

Consulta optante do simples online

MensagemEnviado: 29 Abr 2016 19:51
por janio
Itamar,

A hwgui 2.19 exibe imagem .png ou vc teve que usar a freeimage.dll tbm?

Janio

Consulta optante do simples online

MensagemEnviado: 29 Abr 2016 22:42
por Wanderlei
Daniel funcionou bem, muito obrigado.

Esta é outra contribuição do Daniel, Pega o nome pelo CPF no site da receita.

Janio infelizmente não sei se hwgui tem como mostrar imagem png, eu utilizo o xHarbour 123 + Bcc7 + Hwgui 2.17, para resolver o problema da dependência da freeimage.dll eu fiz uma função para baixar do meu ftp a dll.

Consulta_Cpf_Site.prg
(6.57 KiB) Baixado 195 vezes

Consulta optante do simples online

MensagemEnviado: 29 Abr 2016 22:45
por Wanderlei
Pessoal agora só falta uma função para baixar o xml do site sem o certificado, porque com o certificado eu utilizo o ACBR para baixar.

Daniel sem querer abusar, mas se vc tiver alguma coisa assim posta aqui, toda contribuição será muito bem vinda.

Consulta optante do simples online

MensagemEnviado: 30 Abr 2016 09:16
por janio
Da pra usar a dll do FSist, é paga mas o valor é muito em conta e sem limite de uso na tua carteira de clientes.

Tem pra CPF, CNPJ e XML

ai vc integra com teu sistema.


Eu até tinha interesse em adquirir a dll da fSist, mas o cara aumentou o preço em 42,85% de janeiro pra cá na compra da dll, e aumentou em 52,94% o preço da atualização! Em tempos de crise o cara praticar uns aumentos desses...

Em Janeiro/2016
A licença para uso da DLL de Download de XML de NFe sem limite de downloads com digitação manual de captcha é R$ 350,00

Você poderá baixar as atualizações que eu tiver em até 1 ano sem custo, depois de 1 ano caso deseje atualizar R$ 85,00. O valor da atualização será corrigido proporcionalmente ao valor da DLL.


Em Abril/2016
A licença para uso da DLL de Download de XML de NFe sem limite de downloads com digitação manual de captcha é R$ 500,00

Você poderá baixar as atualizações que eu tiver em até 1 ano sem custo, depois de 1 ano caso deseje atualizar R$ 125,00. O valor da atualização será corrigido proporcionalmente ao valor da DLL.

Consulta optante do simples online

MensagemEnviado: 30 Abr 2016 17:34
por fladimir
Então tem 2 caminhos, usar a solução do Daniel para CPF e CNPJ e alterar tb para Baixar XML q seria o mesmo principio, pq o q o FSIST faz é trabalhar o HTML gerando o XML

O outro seria via Dlls do FSIST.

Eu fiz via FSIST e já estou com o BaixarXML ok os outros não parei pra implementar ainda, apesar de ter comprado as dlls, talvez nem use pra CPF e CNPJ as dlls já q temos nativos graças as contribuições dos colegas.

Como disse o Wanderlei se alguém tiver para Baixar o XML e puder contribuir melhor q ter q adquirir a DLL.

[]´s

Consulta optante do simples online

MensagemEnviado: 30 Abr 2016 17:49
por fladimir

Consulta optante do simples online

MensagemEnviado: 30 Abr 2016 19:42
por janio
Beleza Fladimir!

Eu tentei mim cadastrar no Fórum do FiveWin mas ele so aceita cadastro de quem comprar o fivewin. Não consegui mim cadastrar para fazer algumas perguntas!

Jânio

PS: Sera se o Daniel não estaria disposto a desenvolver isso pra gente não??? Juntaria aqueles que tivessem interesse e racharíamos o valor que ele porventura cobrasse!

Consulta optante do simples online

MensagemEnviado: 30 Abr 2016 19:50
por fladimir
Olha... no meu ponto de vista já ta mais de 50% caminhado...

Faltaria a interpretação do HTML e montar o XML...

Tem um projeto aberto chamado RecuperaNFe q tem essa interpretação do HTML e montagem do XML

Mas pessoal acho q estamos desviando do tópico... apesar de ter relação...

Talvez tenhamos q abrir outro tópico para o assunto...

[]´s

Consulta optante do simples online

MensagemEnviado: 02 Mai 2016 07:10
por Wanderlei
oi pessoal, acho que pagar foge um pouco ao principal fundamento do forum que é compartilhar conhecimento, eu mesmo não cobro para contribuir com a nossa comunidade só se a pessoa quiser algo bem especifico.

Amigo Daniel você que domina essa questão de html podeira nos ajudar com essa pesquisa?

Agora se alguem quiser comprar do Lailton e compartilhar aqui posso adaptar de Five para Hwgui.

Consulta optante do simples online

MensagemEnviado: 02 Mai 2016 07:44
por Toledo
Amigos, se alguém puder postar um demo (exemplo) que faça a consulta completa da NFe e copie o HTML da página de consulta, depois eu posso tentar converter o HMTL em XML.

Mas eu precisava de um demo que eu possa compilar para fazer testes.

Abraços,

Consulta optante do simples online

MensagemEnviado: 02 Mai 2016 08:30
por janio
Esse eh um recurso (download) que facilita muuuuito o lançamento de entrada de notas fiscais! Atualmente tenho apenas a leitura do xml, mas não a baixa. Mesmo assim qndo por algum motivo não esta funcionando... o usuário fica p* da vida de tão acostumado que está de pegar a 'molezinha' hahah!

Colocando então essa baixa do xml dentro do próprio sistema... o usuário vai ficar babando!

Daniel, ajude-nos!
:* :*

Toledo, obrigado pela dispnibilidade!
:xau :xau

Janio

Consulta optante do simples online

MensagemEnviado: 03 Mai 2016 14:36
por Daniel
A sobre consulta da nfe.
Eu consegui pegar os dados do site da receita mais tem que montar o xml.
pois ele nao vem com a assinatura digita seria so download mesmo e com certificado

Consulta optante do simples online

MensagemEnviado: 03 Mai 2016 15:12
por janio
Daniel,

O Toledo monta o xml!

Janio

Consulta optante do simples online

MensagemEnviado: 03 Mai 2016 17:55
por Wanderlei
Blz Daniel, vai servir, é apenas para dar entrada na nota, ai se o Rocinha puder montar o xml fico grato senão dou um jeito aqui.

Consulta optante do simples online

MensagemEnviado: 06 Mai 2016 10:16
por Daniel
Ola
Aqui esta o retorno do site da receita em html da Nfe

A parte com certificado esta case pronta

Consulta optante do simples online

MensagemEnviado: 06 Mai 2016 11:35
por Wanderlei
Daniel, como podemos fazer para pegar as outras abas, tipo produtos...

Consulta optante do simples online

MensagemEnviado: 06 Mai 2016 12:03
por Daniel
Wanderlei
e só você abrir ele no editor de texto

Consulta optante do simples online

MensagemEnviado: 06 Mai 2016 13:41
por Wanderlei
Rsrs, blz, eu não tinha visto, valeu mesmo, agora só falta a função para baixar ele.

Toledo você pode analisar esse retorno para montar o xml.

Consulta optante do simples online

MensagemEnviado: 06 Mai 2016 20:17
por Toledo
Wanderlei escreveu:Toledo você pode analisar esse retorno para montar o xml.

Seria possível postar um demo de como copiar este HTML com os dados da NFe?

Ai assim posso incluir no código a opção para gerar o xML.

Abraços,

Consulta optante do simples online

MensagemEnviado: 09 Mai 2016 09:44
por Daniel
Aqui esta ele para teste
Este abaixa o xml sem valor fiscal
estou tentando fazer com certificado

Consulta optante do simples online

MensagemEnviado: 09 Mai 2016 15:24
por Wanderlei
Oi Daniel, não consegui usar o exe e está dando erro no GET, segue o erro que ocorreu aqui.

Date: 05/09/16 Time: 13:46:59<BR>
Time from start: 0 days 0 hours 1 mins 26 secs<BR>
Error BASE/1108 Argument error: AT</p><BR>
Called from AT(0)
<BR>
Called from CONSULTA1(192)
<BR>
Called from (b)MAIN(64)
<BR>
Called from _DOCONTROLEVENTPROCEDURE(1670)
<BR>
Called from EVENTS(1583)
<BR>
Called from DOMESSAGELOOP(0)
<BR>
Called from _ACTIVATEWINDOW(1388)
<BR>
Called from DOMETHOD(4682)
<BR>
Called from MAIN(35)
<BR>
<BR>

Consulta optante do simples online

MensagemEnviado: 09 Mai 2016 17:51
por Daniel
Wanderlei se deu erro no GET e erro com a internet ou no site da receita
como o retorno ficou vazio deu este erro

eu abaixei o exemplo aqui e não deu este erro

Consulta optante do simples online

MensagemEnviado: 10 Mai 2016 08:43
por rubens
Bom dia...

Aqui deu 'Erro na Conexão com o Site'
Executei como administrador e também deu erro...

Rubens

Consulta optante do simples online

MensagemEnviado: 10 Mai 2016 10:19
por Daniel
Rubens

tem ora que o site do receita fica fora do ar ou demora responder, voce pode verificar direto que o site deve estar fora do ar
Nos teste aqui ocorreu muito disto

Consulta optante do simples online

MensagemEnviado: 10 Mai 2016 10:28
por Wanderlei
Não consegui fazer a consulta aqui, mas um amigo executou lá de boa, ai tentei em outro lugar mas deu o mesmo erro que aqui.

Consulta optante do simples online

MensagemEnviado: 11 Mai 2016 08:41
por Daniel
Wanderlei
testa este com timeout maior
Pois aqui não da erro

Consulta optante do simples online

MensagemEnviado: 11 Mai 2016 13:50
por Wanderlei
Boa Tarde Daniel, não sei o que está havendo, porque aqui comigo não funciona e testei em casa que outra rede e tambem não funcionou, será que tem alguma coisa no windows 10 para mudar?

Consulta optante do simples online

MensagemEnviado: 11 Mai 2016 14:37
por Daniel
Wanderlei
Pode ate ser, mais eu testo e crio ele no Windows 10.
Talvez seja o local que você esta instalando, ou antivírus ou firewall bloqueando

Consulta optante do simples online

MensagemEnviado: 11 Mai 2016 18:03
por Daniel
Este erro ocorre no windows10 64 bits
acho que arrumei testem

Consulta optante do simples online

MensagemEnviado: 12 Mai 2016 07:05
por Wanderlei
Bom dia Daniel, funcionou, agora só falta você postar o fonte com a correção. :D

Consulta optante do simples online

MensagemEnviado: 13 Mai 2016 16:13
por Wanderlei
Oi Daniel, posta a alteração aqui, funcionou bem nas maquinas com windows 10.

Toledo tem como vc converter o resultado da consulta em xml?

Consulta optante do simples online

MensagemEnviado: 13 Mai 2016 17:12
por Toledo
Wanderlei escreveu:Toledo tem como vc converter o resultado da consulta em xml?

Sim, vou esperar a atualização do Daniel, ai vou tentar fazer a conversão do HTML para xML.

Abraços,

Consulta optante do simples online

MensagemEnviado: 13 Mai 2016 17:28
por Daniel
Segue os fontes com a alteração

Consulta optante do simples online

MensagemEnviado: 13 Mai 2016 20:18
por Wanderlei
Valeu Daniel.

Consulta optante do simples online

MensagemEnviado: 16 Mai 2016 15:06
por Daniel
Ola
segue o programa da consulta e baixa do xml da nfe com certificado
para teste

Consulta optante do simples online

MensagemEnviado: 17 Mai 2016 07:00
por Wanderlei
Bom dia Daniel,
ele consegui pegar o certificado, monta o html mas o xml ele não consegui renomear e o conteudo é o mesmo do html, ele não conseguiu fazer o download do xml da NFe.

Consulta optante do simples online

MensagemEnviado: 17 Mai 2016 08:55
por Daniel
Bom dia Wanderlei
Esqueci de testar no windows10 64
segue ele de novo

Consulta optante do simples online

MensagemEnviado: 17 Mai 2016 11:37
por Wanderlei
Oi Daniel, agora o nome do arquivo ficou blz, mas o conteudo do xml ainda é o do html.

ConsultaNfeCert.png

Consulta optante do simples online

MensagemEnviado: 17 Mai 2016 12:06
por Daniel
Wanderlei
coloca o conteúdo do arquivo xml para eu dar olhada
qual e o erro de retorno. Pois aqui deu certo sem erro
tem ora que ele não abaixa, tenho que melhorar a resposta de erro do site
da receita

Consulta optante do simples online

MensagemEnviado: 17 Mai 2016 15:43
por Wanderlei
Oi Daniel, coloquei dentro do rar.
resulta_xml.rar
(12.14 KiB) Baixado 138 vezes

Consulta optante do simples online

MensagemEnviado: 17 Mai 2016 17:57
por Daniel
Wanderlei
o download não foi feito por este erro

<span id="ctl00_ContentPlaceHolder1_lblResultadoConsulta">O CNPJ ou CPF do certificado não está autorizado a fazer o download do documento.</span>

tenho que arrumar melhor a resposta do site, ja estou vendo isto

Consulta optante do simples online

MensagemEnviado: 20 Mai 2016 10:53
por Wanderlei
Bom dia Daniel, tem como vc postar o fonte da consulta com certificado para windows10 64?
Outra coisa Daniel, seria possivel baixar também a NFCe?

Amigo Pctoledo quando puder analisa o retorno para montar o xml da NFe.

Desde já agradeço a todos pela atenção e colaboração.

Assim que eu tiver tudo montado vou postar na seção de DownLoad.

Consulta optante do simples online

MensagemEnviado: 20 Mai 2016 12:52
por Daniel
Wanderlei

a nfce acho que não.
Pois ele e de cada estado seria difícil de fazer

A consulta com certificado ficou funcionando??

Consulta optante do simples online

MensagemEnviado: 21 Mai 2016 13:05
por Wanderlei
Boa Tarde Daniel, a consulta com cert sim está funcionando, posta o fonte com o ajuste para o win10 64 que vou tentar montar ele no sistema mesmo para exibir a nota e depois que o toledo fizer a montagem do xml ai vou montar em exemplo completo para comunidade xHarbour.

Consulta optante do simples online

MensagemEnviado: 30 Mai 2016 07:52
por Wanderlei
Bom dia Daniel, quando vc puder coloca aqui os fontes da consulta com certificado.

Oi Toledo, será que vc vai ter como fazer a função para montar o xml da NFe?

Consulta optante do simples online

MensagemEnviado: 30 Mai 2016 08:19
por Toledo
Wanderlei escreveu:Oi Toledo, será que vc vai ter como fazer a função para montar o xml da NFe?

Sim, já comecei a fazer alguma coisa, mas faltou tempo... vou ver se esta semana eu termino.

Abraços,

Consulta optante do simples online

MensagemEnviado: 30 Mai 2016 09:00
por Daniel
Ola
segue os fontes

Consulta optante do simples online

MensagemEnviado: 08 Jun 2016 09:55
por rubens
Toledo...

Vê se arquivo pode te ajudar em alguma coisa... tá em pascal....

Rubens

HTMLtoXML.prg
(25.02 KiB) Baixado 157 vezes

Consulta optante do simples online

MensagemEnviado: 08 Jun 2016 19:42
por fladimir
Outra ideia seria pegar do projeto hbNFe e fazer o inverso, tipo lá gera o XML então se analisar lá quem sabe pode ajudar tb.

[]´s

Consulta optante do simples online

MensagemEnviado: 24 Jun 2016 13:51
por Wanderlei
Oi Toledo, se vc quiser compartilhar o que já tem, talvez possamos ajudar o finalizar a montagem do xml da NFe.

Consulta optante do simples online

MensagemEnviado: 24 Jun 2016 17:42
por ciacpd
Olá Pessoal,
Realizei pequenas alterações para compatibilizar com xharbour e FiveWin a consulta simples.
Deve ser criada uma dialog com os recursos informados ou então criar com o @Say/Get
Linkar a hbcc.lib
// -------------------------------------------------------------------------- //
// Arquivo.....: ConsultaNfe.prg
// Criado em...: 02/05/2016 as 10:41:18
// Projeto.....: Consulta Simples
// Programador.: Daniel Denobie - denobie@hotmail.com
// Alterado por: Daniel Segura Fernandes ciacpd@hotmail.com
// Objetivo....: Compatibilizar com FiveWin xHarbour
// -------------------------------------------------------------------------- //
#include "FiveWin.ch"
#include "directry.ch"
#include "Fileio.ch"
#include "tip.ch"

#define _MSXML2_ServerXMLHTTP        'MSXML2.ServerXMLHTTP.5.0'

// -------------------------------------------------------------------------- //
FUNCTION Busca_NFe_Portal()
   
   Private cUrl := "http://www.nfe.fazenda.gov.br/portal/consulta.aspx?tipoConsulta=completa&tipoConteudo=XbSeqxE8pl8="
   Private cUrl1:= "http://www.nfe.fazenda.gov.br/portal/consultaCompleta.aspx?tipoConteudo=XbSeqxE8pl8="
   Private cUrl2:= 'http://www.nfe.fazenda.gov.br/portal/consultaCompleta.aspx?tipoConteudo=XbSeqxE8pl8%3d'

   Private oImgCaptcha, oCaptcha, cCaptcha:=space(6), oChave, cChave:=space(44),;
           cStringCookie, cViewState, cViewStateGenerator, cEeventValidation, cHiddenToken, cCodigo, cHtml
   Private cHiddenSom, oDlg, oServer

   Consulta()
   
   Define Dialog oDlg Resource 'GERNFE'

   Redefine Get oCaptcha Var cCaptcha ID 4001 Of oDlg
   Redefine Get oChave   Var cChave   ID 4002 Of oDlg

   Redefine Image oImgCaptcha FILENAME "captcha.png" ID 4004 Of oDlg Adjust

   Redefine BtnBmp ID 4005 Resource 'REFRESH16' Of oDlg Action Captcha(cHtml) //ImageNFE( oDlg, cCaptcha )
   Redefine Button ID 4003                      Of oDlg Action ( oDlg:End() )

   oDlg:lHelpIcon:=.f.
   Activate Dialog oDlg Centered On Init Captcha(cHtml) // ImageNFE( oDlg, cCaptcha )
   
   If ! Consulta1(cChave, cCaptcha)
      nmsgbox('Ocorreu um ERRO na consulta.', xSWH+' Informa.')
      return .f.
   Else
      nmsgbox('Consulta realizada com sucesso.', xSWH+' Informa.')
   EndIf

Return .t.
// -------------------------------------------------------------------------- //
Function Consulta()
   mensagem("Criando a conecção com o partal da NFe. Aguarde!!!")
   Try
      oServer:= CreateObject( _MSXML2_ServerXMLHTTP )
   Catch
      MsgInfo('Erro na Criação do Serviço', xSWH+' Informa.')
      mensagem("")
      Return .f.
   End
   Try
      oServer:Open( "GET", cUrl, .f. )
      oServer:SetRequestHeader( "Content-Type", "application/x-www-form-urlencoded" )
      oServer:SetRequestHeader( "Connection", "keep-alive" )
      oServer:Send()
      oServer:WaitForResponse( 10000 )
   Catch
      MsgInfo('Erro na Conexão com o Site', xSWH+' Informa.')
      mensagem("")
      Return .f.
   End
   cHtml:= oServer:ResponseBody
   cStringCookie:= oServer:getResponseHeader("Set-Cookie")
   mensagem('')
   MemoWrit("html_nfei.txt", cHtml)
   nInie   := At('id="ctl00_ContentPlaceHolder1_lblMensagemErro">',  cHtml) + 47
   If nInie > 47
      cHtml1  := SubStr( cHtml, nInie)
      nFime   := At('</span>', cHtml1) - 1
      cMsgErro:= SubStr(cHtml, nInie, nFime)
      If ! Empty(cMsgErro)
         MsgInfo(cMsgErro, 'Erro no Site ' + cUrl)
         Return .f.
      EndIf
   EndIf
   nIni  := At('id="__VIEWSTATE" value=',  cHtml) + 24
   cHtml1:= SubStr( cHtml, nIni)
   nFim  := At('" />', cHtml1) - 1
   cViewState:= SubStr(cHtml, nIni, nFim)

   nIni1 := At('id="__EVENTVALIDATION" value="',  cHtml) + 30
   cHtml1:= SubStr( cHtml, nIni1)
   nFim1 := At('" />', cHtml1) - 1
   cEeventValidation:= SubStr(cHtml, nIni1, nFim1)

   nIni2 := At('id="__VIEWSTATEGENERATOR" value="',  cHtml) + 33
   cHtml1:= SubStr( cHtml, nIni2)
   nFim2 := At('" />', cHtml1) - 1
   cViewStateGenerator:= SubStr(cHtml, nIni2, nFim2)

   nIni3 := At('id="ctl00_ContentPlaceHolder1_token" value="',  cHtml) + 44
   cHtml1:= SubStr( cHtml, nIni3)
   nFim3 := At('" />', cHtml1) - 1
   cHiddenToken:= SubStr(cHtml, nIni3, nFim3)

   nIni4 := At('id="ctl00_ContentPlaceHolder1_captchaSom" value="',  cHtml) + 49
   cHtml1:= SubStr( cHtml, nIni4)
   nFim4 := At('" />', cHtml1) - 1
   cHiddenSom:= SubStr(cHtml, nIni4, nFim4)

   memowrit( 'html_nfef.txt' , cHtml )
   
   If ! Captcha(cHtml)
      Return .F.
   EndIf

Return .t.
// -------------------------------------------------------------------------- //
Function Captcha(cHtml)
   nIni  := At('data:image/png;base64,',  cHtml) + 22
   cHtml1:= SubStr(cHtml, nIni)
   nFim  := At('" style="border-width:0px;" />', cHtml1) - 2
   cFile:= SubStr(cHtml, nIni, nFim)
   txt_file:=fcreate("captcha.png", 0)
   If (!(ferror() = 0))
      MsgInfo("Erro de criacao do arquivo de imagem " + Str(ferror(), 3, 0))
      Return .f.
   EndIf
   cCodigo:= SubStr(cHtml, nIni, nFim)
   If Empty(cCodigo)
      MsgInfo("Erro de criacao do arquivo de imagem")
      Return .f.
   EndIf
   cDecoded      := HB_B64DECODE( cCodigo )
   FWrite(txt_file , cDecoded)
   FClose(txt_file)
   if valtype('oImgCaptcha') == 'O'
      cImgCaptcha:='captcha.png'
      oImgCaptcha:Hide()
      oImgCaptcha:LoadBmp( cImgCaptcha )
      oImgCaptcha:Show()
      oImgCaptcha:Refresh( .t. )
   endif
   sysrefresh()
   
Return .T.
// -------------------------------------------------------------------------- //
Function Consulta1(cChave, cCaptcha)
   Local oInternet, cParm, cRet:= cHtml:= ''

   If ! DigitoChave(cChave)
      Return Nil
   EndIf

   cParm:= { { "__EVENTARGUMENT", "" },;
             { "__EVENTTARGET", "" },;
             { "__EVENTVALIDATION", cEeventValidation },;
             { "__VIEWSTATE", cviewState },;
             { "__VIEWSTATEGENERATOR", cViewStateGenerator },;
             { "ctl00$ContentPlaceHolder1$btnConsultar", "Continuar" },;
             { "ctl00$ContentPlaceHolder1$captchaSom", cHiddenSom},;
             { "ctl00$ContentPlaceHolder1$token", cHiddenToken },;
             { "ctl00$ContentPlaceHolder1$txtCaptcha", cCaptcha },;
             { "ctl00$ContentPlaceHolder1$txtChaveAcessoCompleta", cChave },;
             { "ctl00$txtPalavraChave", "" },;
             { "hiddenInputToUpdateATBuffer_CommonToolkitScripts", "1"}}
   Try
      oInternet:= TIPClientHTTP():New(cUrl, .f.)
   Catch
      MsgInfo('Erro na Criação do Serviço')
      Return .f.
   End
   oInternet:SetCookie(cStringCookie)
   If oInternet:Open()
      If oInternet:POST(cParm)
         cRet:=oInternet:ReadAll()
      Else
          msgInfo('Erro no Post ' + cUrl , xSWH+' Informa.')
          Return .F.
      EndIf
   Else
      msgInfo('Erro na Conexão', xSWH+' Informa.')
      Return .f.
   EndIf
   oInternet:Close()
   If At('id="ctl00_ContentPlaceHolder1_bltMensagensErro" class="listaErro">', cRet) > 0
      cPart:= Substr(cRet, (At('id="ctl00_ContentPlaceHolder1_bltMensagensErro" class="listaErro">', cRet) + 66))
      cPart:= Substr(cPart, (At('<li>', cPart) + 4))
      MsgInfo(Troca_Acento(SubStr(cPart, 1, (At('</li>', cPart) - 1))))
      Return .f.
   EndIf
   Try
      oInternet:= TIPClientHTTP():New(cUrl1, .f.)
      oInternet:nConnTimeout:= 10000
   Catch
      MsgInfo('Erro na Criação do Serviço', xSWH+' Informa.')
      Return .f.
   End
   oInternet:SetCookie(cStringCookie)
   If oInternet:Open()
      cHtml:=oInternet:ReadAll()
      cStringCookie:= oInternet:GetCookies()
   Else
      msgInfo('Erro na Conexão')
      Return .f.
   EndIf
   oInternet:Close()
   MemoWrit('result.htm', cHtml, .f.)

   If At('id="ctl00_ContentPlaceHolder1_lblResultadoConsulta">', cHtml) > 0
      cPart:= Substr(cHtml, (At('id="ctl00_ContentPlaceHolder1_lblResultadoConsulta">', cHtml) + 52))
      MsgInfo(SubStr(cPart, 1, (At('</span>', cPart) - 1)))
      Return .f.
   EndIf
   //eleminas partes não usadas
   If ! Empty(cHtml)
      nIni1  := At('<html><link ',  cHtml)
      cParte := SubStr(cHtml, nIni1)
      nIni1  := At('<div id="ctl00_ContentPlaceHolder1_divBotoesConsulta"',  cParte)
      cParte1:= SubStr(cParte, 1, nIni1 - 1)
      nFim1  := At('</form>', cParte1)
      cFile  := SubStr(cParte1, nFim1)
      MemoWrit('resulta.htm', cFile, .f.)
   Else
      Return .f.
   EndIf
   sysrefresh()
   Shellexecute( , "open" , 'resulta.htm' )
Return .T.
// -------------------------------------------------------------------------- //
Function DigitoChave(CodigoChave)
   Local indice:= '4329876543298765432987654329876543298765432'
   Local digito
   nSoma:= 0
   For contador:= 1 to 43
       nSoma+= (Val(SubStr(CodigoChave, contador, 1)) * Val(SubStr(indice, contador, 1)))
   Next
   digito:= (nSoma % 11)
   If digito == 0 .Or. digito == 1
      digito := 0
   Else
      digito := (11 - digito)
   EndIf
   If SubStr(CodigoChave, 44, 1) != LTrim(Str(digito, 1))
      MsgStop('Código da Chave Errado....', 'Aviso do Sistema')
      Return .f.
   EndIf
Return .t.
// -------------------------------------------------------------------------- //
Function Troca_Acento(cTexto)
   cTexto := StrTran( cTexto, "&#243;", "ó" )
   cTexto := StrTran( cTexto, "&#225;", "á" )
Return cTexto
// -------------------------------------------------------------------------- //


Consulta optante do simples online

MensagemEnviado: 27 Jul 2016 07:35
por Wanderlei
Oi Toledo, vc conseguiu terminar a montagem do xml da NF-e?

Consulta optante do simples online

MensagemEnviado: 27 Jul 2016 08:26
por Toledo
Amigos, faltou tempo mesmo, mas esta semana eu posto o código pronto.

Abraços,

Consulta optante do simples online

MensagemEnviado: 04 Ago 2016 11:48
por Toledo
Amigos, desculpe a demora, mas segue um demo de como importar o xML da NFe usando como base a página de consulta completa da SEFAZ.

Bom, como existe vários tipos de NFe, este demo importa o básico, então dependendo da NFe pode não funcionar corretamente.

Algumas TAGs também não foram incluídas neste demo (IPI, verAplic, infAdFisco, SignatureValue, KeyInfo, etc), ou por falta de exemplo ou por não ser apresentado na consulta da SEFAZ, então tem que ser implementado caso a caso.

Então façam testes com este demo, e se o xML não for importado corretamente, poste aqui a Chave da NFe para que eu possa fazer um teste.

Uma dica: para verificar se o xML foi importado corretamente, abrir o xML usando o Navegador de Internet (IE, Firefox, Chrome,etc), se o arquivo tiver algum problema, a estrutura do xML não será apresentada corretamente.

Abraços,

Consulta optante do simples online

MensagemEnviado: 04 Ago 2016 13:57
por rubens
:{ :{ :{ :{
:)) :)) :)) :))
:|< :|< :|< :|<

É claro que não poderíamos esperar menos do MESTRE !!!
Muito obrigado Toledo...
Para fim funcionou perfeitamente...
Agora é só implementar...

Os smilies representam exatamente como estou me sentindo... kkkk Estava num problemão...

Valeu... Obrigado...

Rubens

Consulta optante do simples online

MensagemEnviado: 08 Ago 2016 07:14
por Wanderlei
Toledo ficou ótimo a rotina, meus agradecimentos a você e ao Daniel por ter tido a gentileza de iniciar esta função, obrigado.

Consulta optante do simples online

MensagemEnviado: 11 Ago 2016 16:12
por Kapiaba
xmlnfe.png


Excelente idéia, thanks.

Consulta optante do simples online

MensagemEnviado: 16 Set 2016 14:23
por Poka
Olá a todos

Toledo, implementei a rotina no meu sistema e ficou muito bom, parabéns e obrigado por disponibilizar.
Uma dúvida, ao baixar uma nota de compra, parece que não está trazendo os valores de icms, icmsst dos itens, tem como implementar?

Obrigado

Poka

Consulta optante do simples online

MensagemEnviado: 16 Set 2016 14:29
por Toledo
Amigo, poste aqui a Chave da NFe ou envie por MP (Mensagem Privada) para mim, para que eu possa fazer um teste.

Abraços,

Consulta optante do simples online

MensagemEnviado: 18 Set 2016 10:53
por Poka
Olá Toledo

segue duas chaves

a diferença é só nos itens.
tem com cst 010 e cst 020

35160848709125000111550000000064431106954701

35160916888303000122550010001419571742957058

Obrigado

Poka

Consulta optante do simples online

MensagemEnviado: 04 Nov 2016 11:52
por rubens
Olá...

Estou com um problema para baixar no Server 2008. Dá a mensagem de
'Erro na Conexão com o Site'


Já baixei a segurança, consigo acessar internet n servidor, mas nao abre a conexão via Classe...
Alguém tem alguma dica...?´

E o problema é no windows server mesmo...
O meu servidor que é igualzinho funciona, em outro cliente com o server 2008 também...

Obg

Rubens

Consulta optante do simples online

MensagemEnviado: 06 Nov 2016 23:36
por fladimir
utilzo a Dll pra importar mas vou migrar para esta rotina por ficar mais direto e não depender de mais um componente de terceiros..

mas ao importar uma chave utilizando a Dll e com a rotina percebi algumas leves diferenças, 3 na verdade, 2 já corrigi 1 não entendi muito a lógica...

Qdo importo uma chave via Dll na TAG PIS e COFINS vem PISOutr e COFINSOutr sendo q o correto é PISAliq e COFINSAliq... ok só alterar e lá tb pra vir as tags dos percentuais pCOFINS e pPIS tem q trocar onde esta Aliquota (%) para Aliquota...

Fora isto preciso na TAG "transp" colocar a subTAG "veicTransp" q não tem e dentro dela "placa" e "UF"

Tentei adicionar as linhas abaixo

*   Conteudo elementos da Matriz = {VALOR_TAG,TAG,TAG_PAI,Elemento_Final_TAG_PAI,LABEL_HTML,TAM_LABEL}

   AADD(aTransp,{{"","modFrete","transp",14,"Modalidade do Frete",1},; //1-
                 {"","CNPJ","transporta",8,"CNPJ",0},; //2-
                 {"","CPF","",0,"CPF",0},; //3-
                 {"","xNome","",0,"Razão Social / Nome",0},; //4-
                 {"","IE","",0,"Inscrição Estadual",0},; //5-
                 {"","xEnder","",0,"Endereço Completo",0},; //6-
                 {"","xMun","",0,"Município",0},; //7-
                 {"","UF","",0,"UF",0},; //8-
                 {"","placa","veicTransp",7,"Placa",0},; //9-       ADICIONEI ESSAS 2 LINHAS
                 {"","UF","",0,"UF",0},; //9-                                 MAS NAO RESOLVEU
                 {"","qVol","vol",14,"Quantidade",0},; //9-
                 {"","esp","",0,"Espécie",0},; //10-
                 {"","marca","",0,"Marca dos Volumes",0},; //11-
                 {"","nVol","",0,"Volume",0},; //12-
                 {"","pesoL","",0,"Peso Líquido",0},; //13-
                 {"","pesoB","",0,"Peso Bruto",0}}) //14-


Alguém saberia?
mas não não fecha

Consulta optante do simples online

MensagemEnviado: 07 Nov 2016 11:10
por Daniel
Ola

*   Conteudo elementos da Matriz = {VALOR_TAG,TAG,TAG_PAI,Elemento_Final_TAG_PAI,LABEL_HTML,TAM_LABEL}

   AADD(aTransp,{{"","modFrete","transp",17,"Modalidade do Frete",1},; //1-
                 {"","CNPJ","transporta",8,"CNPJ",0},; //2-
                 {"","CPF","",0,"CPF",0},; //3-
                 {"","xNome","",0,"Razão Social / Nome",0},; //4-
                 {"","IE","",0,"Inscrição Estadual",0},; //5-
                 {"","xEnder","",0,"Endereço Completo",0},; //6-
                 {"","xMun","",0,"Município",0},; //7-
                 {"","UF","",0,"UF",0},; //8-
                 {"",'placa','veicTransp',11,'Placa',0},; //9-
                 {"","UF","",0,"UF",0},; //10-
                 {"","RNTC","",0,"RNTC",0},; //11-
                 {"","qVol","vol",17,"Quantidade",0},; //12-
                 {"","esp","",0,"Espécie",0},; //13-
                 {"","marca","",0,"Marca dos Volumes",0},; //14-
                 {"","nVol","",0,"Volume",0},; //15-
                 {"","pesoL","",0,"Peso Líquido",0},; //16-
                 {"","pesoB","",0,"Peso Bruto",0}}) //17-

Consulta optante do simples online

MensagemEnviado: 07 Nov 2016 12:10
por fladimir
Vlw Daniel

obrigado.

Consulta optante do simples online

MensagemEnviado: 08 Nov 2016 11:55
por rubens
Daniel...

Será que podia dar uma olhadinha também no valor...?
Quando o valor ultrapassa 1000 ele tá gerando a mascara errado:
Tipo assim: 1000 - deveria gerar no xml 1000,00 e tá gerando 1.000.00 aí o sistema de importação interpreta como 1.00, posso aqui no sistema de importação mas acho que se corrigisse na hora de gerar o xml ficaria melhor...
Veja na linha 09 vProd, deveria ter gerado 3600.00 e gerou 3.600.00
<cProd>0034.0009</cProd>
<xProd>TELHA GALVALUME OND/TRAP.(0.43MM) ML</xProd>
<NCM>73089090</NCM>
<EXTIPI>01</EXTIPI>
<CFOP>5401</CFOP>
<uCom>ML</uCom>
<qCom>200.0000</qCom>
<vUnCom>18.0000000000</vUnCom>
<vProd>3.600.00</vProd>
<uTrib>ML</uTrib>
<qTrib>200.0000</qTrib>
<vUnTrib>18.0000000000</vUnTrib>
<indTot>1</indTot>

Obg...

Rubens

Consulta optante do simples online

MensagemEnviado: 08 Nov 2016 13:09
por rubens
Achei uma solução parcial,

if _tag=="det"

  cPar_:=StrTran(cParte,Chr(13)+Chr(10),"")
  cPar_:=StrTran(cPar_,Chr(160),"")
 
  For p_=1 to Len(aDet)
 
    For i=1 to Len(aDet[p_])
   
      nIni:=AT(aDet[p_,i,3],cPar_)
     
      if nIni>0
        c_span:=SubStr(cPar_, nIni)
        nIni:=AT('<span>',c_span)+6
        nTamTag:=AT('</span>',c_span)-nIni
        c_tag:=alltrim(SubStr(c_span,nIni,nTamTag))
       
        if aDet[p_,i,4]!=0
          if aDet[p_,i,4]>0
            c_tag:=left(c_tag,aDet[p_,i,4])
          else
            c_tag:=alltrim(SubStr(c_tag,Abs(aDet[p_,i,4])+1))
            c_tag:=alltrim(StrTran(c_tag,"-",""))
          endif
        endif

          ****************************************************************************************       
    * Acrescentado
    If i=12 .and. At( '.', c_Tag ) > 0 .and. At( ',', c_Tag ) > 0
           c_tag := StrTran( c_tag, '.','' )
       EndIf
          ****************************************************************************************
       
        aDet[p_,i,1]:=StrTran(c_tag,",",".")
       
      endif
     
    Next
   
    For i=1 to Len(aICMS[p_])
      nIni:=AT(aICMS[p_,i,3],cPar_)
      if nIni>0
        c_span:=SubStr(cPar_, nIni)
        nIni:=AT('<span>',c_span)+6
        nTamTag:=AT('</span>',c_span)-nIni
        c_tag:=alltrim(SubStr(c_span,nIni,nTamTag))
        if aICMS[p_,i,4]!=0
          if aICMS[p_,i,4]>0
            c_tag:=left(c_tag,aICMS[p_,i,4])
          else
            c_tag:=alltrim(SubStr(c_tag,Abs(aICMS[p_,i,4])+1))
            c_tag:=alltrim(StrTran(c_tag,"-",""))
          endif
        endif
       
        ****************************************************************************************
        * Acrescentado
          If i=13 .and. At( '.', c_Tag ) > 0 .and. At( ',', c_Tag ) > 0
           c_tag := StrTran( c_tag, '.','' )
        EndIf
        ****************************************************************************************
       
        aICMS[p_,i,1]:=StrTran(c_tag,",",".")
      endif
    Next
   
    nIni:=AT('<legend class="toggle">PIS</legend>',cPar_)
    if nIni>0
      cPar_:=SubStr(cPar_,nIni)
      For i=1 to Len(aPIS[p_])
        nIni:=AT(aPIS[p_,i,3],cPar_)
        if nIni>0
          c_span:=SubStr(cPar_, nIni)
          nIni:=AT('<span>',c_span)+6
          nTamTag:=AT('</span>',c_span)-nIni
          c_tag:=alltrim(SubStr(c_span,nIni,nTamTag))
          if aPIS[p_,i,4]!=0
            if aPIS[p_,i,4]>0
              c_tag:=left(c_tag,aPIS[p_,i,4])
            else
              c_tag:=alltrim(SubStr(c_tag,Abs(aPIS[p_,i,4])+1))
              c_tag:=alltrim(StrTran(c_tag,"-",""))
            endif
          endif
         
          ****************************************************************************************
          * Acrescentado
          If i=4 .and. At( '.', c_Tag ) > 0 .and. At( ',', c_Tag ) > 0
              c_tag := StrTran( c_tag, '.','' )
     EndIf
          ****************************************************************************************
         
          aPIS[p_,i,1]:=StrTran(c_tag,",",".")
        endif
      Next
    endif
   
    nIni:=AT('<legend class="toggle">COFINS</legend>',cPar_)
    if nIni>0
      cPar_:=SubStr(cPar_,nIni)
      For i=1 to Len(aCOFINS[p_])
        nIni:=AT(aCOFINS[p_,i,3],cPar_)
        if nIni>0
          c_span:=SubStr(cPar_, nIni)
          nIni:=AT('<span>',c_span)+6
          nTamTag:=AT('</span>',c_span)-nIni
          c_tag:=alltrim(SubStr(c_span,nIni,nTamTag))
          if aCOFINS[p_,i,4]!=0
            if aCOFINS[p_,i,4]>0
              c_tag:=left(c_tag,aCOFINS[p_,i,4])
            else
              c_tag:=alltrim(SubStr(c_tag,Abs(aCOFINS[p_,i,4])+1))
              c_tag:=alltrim(StrTran(c_tag,"-",""))
            endif
          endif

          ****************************************************************************************
          * Acrescentado
          If i=4 .and. At( '.', c_Tag ) > 0 .and. At( ',', c_Tag ) > 0
              c_tag := StrTran( c_tag, '.','' )
    EndIf         
          ****************************************************************************************         

          aCOFINS[p_,i,1]:=StrTran(c_tag,",",".")
         
        endif
      Next
    endif
    nIni:=AT('<td class="fixo-prod-serv-numero"><span>',cPar_)
    cPar_:=SubStr(cPar_,nIni+35)
  Next
endif


Dentro de <Det> faz uma verificação com a posição dentro do vetor e se a tag tem '.' e ',' se tiver remove o '.'
Não consegui verificar o PIsoutr e Cofinsoutr.

Rubens

Consulta optante do simples online

MensagemEnviado: 08 Nov 2016 16:50
por Daniel
Ola
Aqui esta ele melhorado um pouco, pois o Toledo fez um otimo trabalho
arrumado o decimal, colocado o ipi

Consulta optante do simples online

MensagemEnviado: 08 Nov 2016 17:22
por rubens
Daniel...

Beleza... resolveu sim o problema dos decimais no pis e cofins também...
Ficou um porém que eu já tinha percebido.. No Grupo Det se você usar o StrTran em todos os elementos do vetor, ele vai pegar também a descrição do produto, dessa forma acho que pode descaracterizar alguma descrição de produto, por isso eu tinha usado o StrTran somente no elemento 12 que é o vProd. Se isso não for problema para o usuário, tá perfeito. No meu caso foi o usuário que percebeu e reclamou que o produto que veio na nota/danfe como "TELHA GALVALUME OND/TRAP.(0,43MM) ML" se transformou em "TELHA GALVALUME OND/TRAP(0.43MM) ML". Como falei, se isso não fizer diferença para o cliente, fica do jeito que você fez mesmo, é só um alerta... Agora se fizer, do jeito que fiz no post anterior resolve. Na realidade mesclei as alterações que você fez com a minha e para mim tá jóia...
Valeu, obrigado...

Rubens

Consulta optante do simples online

MensagemEnviado: 09 Nov 2016 20:04
por Wanderlei
Rubens ou Daniel, tem como vocês colocarem ai para pegar o lote dos produtos.

Consulta optante do simples online

MensagemEnviado: 09 Nov 2016 21:08
por fladimir
Tem que ter uma chave na qual referencie 1Xml que tenha lotes como modelo para ser importados

Consulta optante do simples online

MensagemEnviado: 11 Nov 2016 12:29
por Wanderlei
Chave com produtos que tem lotes: 31150201206820000369550030033360011033360018

Consulta optante do simples online

MensagemEnviado: 13 Nov 2016 16:32
por fladimir
Analisando essa chave e comparando baixando com a Dll q tenho e a rotina q peguei aki com os colegas faltaria a parte q o Wanderei mencionou q não parece ser complicado da pra basear na parte q pega a cobrança e títulos/valores

Fora isto notei q via Dll nos produtos criam as tags (vou me referir ao item 1 da chave passada)

<nItemPed> // acredito q é o nr do item no pedido junto ao fabricante/fornecedor
251046
<med>  // Parte q o Wanderlei mencionou dos lotes, então 1 item da nota pode ter N Lotes pelo q entendi.
   <nLote>
      BKGSK94
   <qLote>
       1.0000
   <dFab>
      2014-05-01
   <dVal>
      2017-05-31
    <vPMC>
       14.11
...
<imposto>
...


Agora fora isto notei algumas questões... exemplo

TAG Emitente

na consulta era R PE JOAO PIO 155, 120 L01/14, 0

Ai veio:
<xLgr>
  R. PE JOAO PIO 155
<nro>
   Q20
<xCpl>
   L01/14


TAG Destinatário
faltou <cPais>

Os itens acima ok entendi e podemos resolver mais tranquilamente, agora o q não entendo muito é a parte abaixo sobre impostos exemplo no item 01 da chave em questão tem as seguintes diferenças q identifiquei para Impostos ICMS/PIS/COFINS

veio na tag Imposto, informações abaixo ok coincidentes.
<ICMS>
  <ICMS60>
     <orig>
         2
      <CST>
         60


Agora as demais não localizei nem na consulta nem no xml baixado via Dll
<modBC>3
<vBC>30,61
<pICMS>18.0000
<vICMS>5.51
<vBCST>13.69
<vICMSST>0.61


Somente as abaixo: ( via Dll )
<vBCSTRet>13.69
<vICMSSTRet>0.61


PIS e COFINS estão trazendo valores de vBC pPIS vPIS pCOFINS vCOFINS e via Dll vem somente conforme abaixo:
<PIS>
  <PISNT>
    <CST>
        04
<COFINS>
   <COFINSNT>
      <CST>
         04


Via Consulta Portal Governo tem a tag
<infAdProd> 
NEGAT MONIT PZ 28 D DESC 3,00% r$ 0,32 PF 10.61 BCST 13,69 ST 0.61 PMC 14.11

Consulta optante do simples online

MensagemEnviado: 14 Nov 2016 00:06
por fladimir
Com relação a consultar de CPF as de vcs estão funcionando?

A minha de CNPJ esta Ok... a de CPF mudou a URL para https mas mesmo mudando não esta abrindo a pagina, alguém poderia postar um exemplo para eu comparar?

Consulta optante do simples online

MensagemEnviado: 14 Nov 2016 10:01
por Wanderlei
eu parei de usar a pesquisa por CPF desde que o site mudou.

Consulta optante do simples online

MensagemEnviado: 14 Nov 2016 12:51
por Daniel
Ola
Consulta do Cpf arrumado, o site da receita esta meio lento

//=========================================================================
//
// Arquivo.....: Cpf.prg
// Criado em...: 27/04/2016 as 13:27:12
//
// Projeto.....: Consulta Simples
//
// Programador.: Daniel Denobie - denobie@hotmail.com
//
//=========================================================================

#include "minigui.ch"
#include "directry.ch"
#include "Fileio.ch"
#include "tip.ch"
#include "xhb.ch"
**********************************************
FUNCTION Main()

   Public cUrl := 'https://cedente.sicoobpr.com.br/archa-server-cobranca/jsp/login.jsf'
   Public cUrlC:= "https://www.receita.fazenda.gov.br/Aplicacoes/SSL/ATCTA/CPF/captcha/gerarCaptcha.asp"
   Public cUrl1:= "https://www.receita.fazenda.gov.br/Aplicacoes/SSL/ATCTA/cpf/ConsultaPublicaExibir.asp"
   Public cCaptcha, cCnpj, cStringCookie, cDataN

   Set Navigation Extended
   Set Date British
   Set Epoch to 2000
   Set Century On

   LOAD WINDOW F_Cpf

   If ! Consulta()
      Quit
   EndIf

   F_Cpf.Center
   F_Cpf.Activate
   Return Nil

***********************************************
Function Consulta()

   Try
     oServer:= win_OleCreateObject( "MSXML2.ServerXMLHTTP.6.0")
   Catch
      MsgInfo("Serviço não mapeado")
      Return Nil
   End Try
   oServer:setOption('2', '13056')
   try
      oServer:Open( "GET", cUrl, .f. )
   Catch
      MsgInfo('Erro na Conexão')
   End
   oServer:SetRequestHeader("Content-Type", "application/x-www-form-urlencoded" )
   oServer:SetRequestHeader("Connection", "keep-alive" )
   oServer:Send()
   oServer:WaitForResponse( 150000 )
   c:=oServer:getResponseHeader("Set-Cookie")
   cStringCookie:= Substr(c, 1, At(';', c) -1)
   cHtml:= oServer:ResponseBody
   memowrit('Site.txt', cHtml)

   If ! Captcha()
      Return .F.
   EndIf

   Return .t.

***************************************
Function Captcha()

   Try
     oServer:= win_OleCreateObject( "MSXML2.ServerXMLHTTP.6.0")
   Catch
      MsgInfo("Serviço não mapeado")
      Return Nil
   End Try
   oServer:setOption('2', '13056')
   try
      oServer:Open( "GET", cUrlc, .t. )
   Catch
      MsgInfo('Erro na Conexão')
   End
   oServer:SetRequestHeader("Content-Type", "application/x-www-form-urlencoded" )
   oServer:SetRequestHeader("Connection", "keep-alive" )
   oServer:Send()
   oServer:WaitForResponse( 150000 )
   c:=oServer:getResponseHeader("Set-Cookie")
   cStringCookie:= Substr(c, 1, At(';', c) -1)
   cHtml:= oServer:ResponseBody
   memowrit('Captcha.png', cHtml)
   SetProperty ('F_Cpf', 'image_1', 'Picture', 'Captcha.png')
   Return .T.

*******************************************************
Function Consulta1(cCnpj, cCaptcha, cDataN)
Local oUrl, oInternet
Local cData, cRet:= ''

   cParm:= "txtTexto_captcha_serpro_gov_br=" + cCaptcha + ;
           "&tempTxtCPF=" + cCNPJ + ;
           "&tempTxtNascimento=" + StrTran(DToC(cDataN), '/', '%2F') + ;
           "&temptxtToken_captcha_serpro_gov_br=" + '' + ;
           "&temptxtTexto_captcha_serpro_gov_br=" + cCaptcha

   Try
     oServer:= win_OleCreateObject( "MSXML2.ServerXMLHTTP.5.0")
   Catch
      MsgInfo("Serviço não mapeado")
      Return Nil
   End
   Try
        oServer:Open( "POST", cUrl1, .f. )
   Catch
      MsgInfo('Erro na Conexão')
   End
   oServer:SetRequestHeader("Content-Type", "application/x-www-form-urlencoded")
   oServer:SetRequestHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8")
   oServer:SetRequestHeader("Cookie", cStringCookie)
   oServer:Send(cParm)
   oServer:WaitForResponse( 10000 )
   cRet:= oServer:ResponseBody
   nIni  := At('<form id', cRet)
   nFim  := At('</form>', cRet) + 7
   cTexto:= '<!DOCTYPE html>' + Chr(10) + chr(13)
   cTexto+=   '<html lang="pt-br">' + chr(10) + Chr(13)
   cTexto+= SubStr(cRet, nIni, nFim) + '</html>'
   memowrit('resulta.htm', ctexto)
   oObject := F_Cpf.Test.Object
   oObject:Navigate(GetStartUpFolder() + "\resulta.htm")

Consulta optante do simples online

MensagemEnviado: 14 Nov 2016 15:19
por fladimir
Show de Bola, o CPF deu certo.

Vlw

Consulta optante do simples online

MensagemEnviado: 16 Nov 2016 22:26
por Daniel
Colocado a tag dos lotes e arrumado pis confins icms

****************************************************
* Desenvolvido com base no projeto criado por Daniel Denobie - denobie@hotmail.com
* http://www.pctoledo.com.br/forum/viewtopic.php?f=4&t=16972
****************************************************

#include <minigui.ch>
#include <hbcompat.ch>

DECLARE WINDOW principal

Procedure Main()
   Public cUrl := "http://www.nfe.fazenda.gov.br/portal/consulta.aspx?tipoConsulta=completa&tipoConteudo=XbSeqxE8pl8="
   Public cUrl1:= "http://www.nfe.fazenda.gov.br/portal/consultaCompleta.aspx?tipoConteudo=XbSeqxE8pl8="
   Public cUrl2:= 'http://www.nfe.fazenda.gov.br/portal/consultaCompleta.aspx?tipoConteudo=XbSeqxE8pl8%3d'

   Public cCaptcha, cCnpj, cStringCookie, cViewState, cEeventValidation, cHiddenToken, cCodigo, cViewStateGenerator
   Public cHiddenSom, cChave

   SET NAVIGATION EXTENDED
   SET LANGUAGE TO PORTUGUESE

   Load Window principal

   principal.Button_1.Enabled:=.F.
   AtualizaImagem()

   On Key escape Of principal Action Sair()

   Center Window principal
   Activate Window principal
Return

***************************************************
Function AtualizaImagem()

   Try
      oServer:= win_OleCreateObject( "MSXML2.ServerXMLHTTP.5.0")
   Catch
      MsgInfo('Erro na Criação do Serviço')
      Return .f.
   End
   Try
      oServer:Open( "GET", cUrl, .f. )
      oServer:SetRequestHeader( "Content-Type", "application/x-www-form-urlencoded" )
      oServer:SetRequestHeader( "Connection", "keep-alive" )
      oServer:Send()
      oServer:WaitForResponse( 10000 )
   Catch
      MsgInfo('Erro na Conexão com o Site')
      Return .f.
   End
   cHtml:= oServer:ResponseBody
   cStringCookie:= oServer:getResponseHeader("Set-Cookie")

   nInie   := At('id="ctl00_ContentPlaceHolder1_lblMensagemErro">',  cHtml) + 47
   If nInie > 47
      cHtml1  := SubStr( cHtml, nInie)
      nFime   := At('</span>', cHtml1) - 1
      cMsgErro:= SubStr(cHtml, nInie, nFime)
      If ! Empty(cMsgErro)
         MsgInfo(cMsgErro, 'Erro no Site ' + cUrl)
         Return .f.
      EndIf
   EndIf
   nIni  := At('id="__VIEWSTATE" value=',  cHtml) + 24
   cHtml1:= SubStr( cHtml, nIni)
   nFim  := At('" />', cHtml1) - 1
   cViewState:= SubStr(cHtml, nIni, nFim)

   nIni1 := At('id="__EVENTVALIDATION" value="',  cHtml) + 30
   cHtml1:= SubStr( cHtml, nIni1)
   nFim1 := At('" />', cHtml1) - 1
   cEeventValidation:= SubStr(cHtml, nIni1, nFim1)

   nIni2 := At('id="__VIEWSTATEGENERATOR" value="',  cHtml) + 33
   cHtml1:= SubStr( cHtml, nIni2)
   nFim2 := At('" />', cHtml1) - 1
   cViewStateGenerator:= SubStr(cHtml, nIni2, nFim2)

   nIni3 := At('id="ctl00_ContentPlaceHolder1_token" value="',  cHtml) + 44
   cHtml1:= SubStr( cHtml, nIni3)
   nFim3 := At('" />', cHtml1) - 1
   cHiddenToken:= SubStr(cHtml, nIni3, nFim3)

   nIni4 := At('id="ctl00_ContentPlaceHolder1_captchaSom" value="',  cHtml) + 49
   cHtml1:= SubStr( cHtml, nIni4)
   nFim4 := At('" />', cHtml1) - 1
   cHiddenSom:= SubStr(cHtml, nIni4, nFim4)

   nIni  := At('data:image/png;base64,',  cHtml) + 22
   cHtml1:= SubStr(cHtml, nIni)
   nFim  := At('" style="border-width:0px;" />', cHtml1) - 2
   cFile:= SubStr(cHtml, nIni, nFim)
   txt_file:=fcreate("captcha.png", 0)
   If (!(ferror() = 0))
      MsgInfo("Erro de criacao do arquivo de imagem " + Str(ferror(), 3, 0))
      Return .f.
   EndIf

   cCodigo:= SubStr(cHtml, nIni, nFim)
   If Empty(cCodigo)
      MsgInfo("Erro de criacao do arquivo de imagem")
      Return .f.
   EndIf
   cFile:= hb_base64Decode(cFile, cCodigo)
   FWrite(txt_file, cFile)
   FClose(txt_file)
   SetProperty ('principal', 'oImg_captcha', 'Picture', 'Captcha.png')
   principal.Button_1.Enabled:=.T.

Return .t.

***************************************************
Function Continuar()
Local oInternet, cParm, cRet:= cHtml:= '', cCaptcha:=principal.oTxt_captcha.Value
Private cChave:=principal.oChaveNFe.Value, cVersao:="", ctpAmb:="", cverAplic:="", cdhRecbto:="", cnProt:="", cdigVal:="", ccStat:="", cxMotivo:=""
Private cinfCpl:="", cinfAdFisco:="", cDiscAdicional:=""
Private aIde:={}, aEmit:={}, aDest:={}, aDet:={}, aICMS:={}, aIPI:={}, aPIS:={}, aCOFINS:={}, aTotais:={}, aTransp:={}, aCobr:={}
Private aMedicamentos:= {}

*   Conteudo elementos da Matriz = {VALOR_TAG,TAG,TAG_PAI,Elemento_Final_TAG_PAI,LABEL_HTML,TAM_LABEL}
* TAM_LABEL se ZERO pega tudo, se MAIOR que ZERO pega o tamanho no início e se MENOR que ZERO exclui o tamanho no início e pega o restante

   AADD(aIde,{{"","cUF","ide",21,"Chave de Acesso",2},; //1- tratamento especial
              {"","cNF","",0,"Número",0},; //2- tratamento especial
              {"","natOp","",0,"Natureza da Operação",0},; //3-
              {"","indPag","",0,"Forma de Pagamento",1},; //4-
              {"","mod","",0,"Modelo",0},; //5-
              {"","serie","",0,"Série",0},; //6-
              {"","nNF","",0,"Número",0},; //7-
              {"","dhEmi","",0,"Data de Emissão",0},; //8- tratamento especial
              {"","dhSaiEnt","",0,"Entrada",0},; //9- tratamento especial
              {"","tpNF","",0,"Tipo da Operação",1},; //10-
              {"","idDest","",0,"Destino da operação",1},; //11-
              {"","cMunFG","",0,"Município da Ocorrência do Fato Gerador do ICMS",0},; //12-
              {"","tpImp","",0,"Formato de Impressão DANFE",1},; //13- tratamento especial
              {"","tpEmis","",0,"Tipo de Emissão",1},; //14-
              {"","cDV","",0,"Chave de Acesso",0},; //15- tratamento especial
              {"","tpAmb","",0,"Ambiente de autorização:",0},; //16- tratamento especial
              {"","finNFe","",0,"Finalidade",1},; //17-
              {"","indFinal","",0,"Consumidor final",1},; //18-
              {"","indPres","",0,"Presença do Comprador",1},; //19-
              {"","procEmi","",0,"Processo",1},; //20-
              {"","verProc","",0,"Versão do Processo",0}}) //21-

   AADD(aEmit,{{"","CNPJ","emit",20,"CNPJ",0},; //1- tratamento especial
              {"","CPF","",0,"CPF",0},; //2-
              {"","xNome","",0,"Nome / Razão Social",0},; //3-
              {"","xFant","",0,"Nome Fantasia",0},; //4-
              {"","xLgr","enderEmit",15,"Endereço",0},; //5- tratamento especial
              {"","nro","",0,"Endereço",0},; //6- tratamento especial
              {"","xCpl","",0,"Endereço",0},; //7- tratamento especial
              {"","xBairro","",0,"Bairro / Distrito",0},; //8-
              {"","cMun","",0,"Município",7},; //9-
              {"","xMun","",0,"Município",-10},; //10-
              {"","UF","",0,"UF",0},; //11-
              {"","CEP","",0,"CEP",0},; //12- tratamento especial
              {"","cPais","",0,"País",4},; //13-
              {"","xPais","",0,"País",-7},; //14-
              {"","fone","",0,"Telefone",0},; //15- tratamento especial
              {"","IE","",0,"Inscrição Estadual",0},; //16-
              {"","IEST","",0,"Inscrição Estadual do Substituto Tributário",0},; //17-
              {"","IM","",0,"Inscrição Municipal",0},; //18-
              {"","CNAE","",0,"CNAE Fiscal",0},; //19-
              {"","CRT","",0,"Código de Regime Tributário",1}}) //20-

   AADD(aDest,{{"","CNPJ","dest",20,"CNPJ",0},; //1-
              {"","CPF","",0,"CPF",0},; //2-
              {"","idEstrangeiro","",0,"",0},; //3-
              {"","xNome","",0,"Nome / Razão Social",0},; //4-
              {"","xLgr","enderDest",15,"Endereço",0},; //5- tratamento especial
              {"","nro","",0,"Endereço",0},; //6- tratamento especial
              {"","xCpl","",0,"Endereço",0},; //7- tratamento especial
              {"","xBairro","",0,"Bairro / Distrito",0},; //8-
              {"","cMun","",0,"Município",7},; //9-
              {"","xMun","",0,"Município",-10},; //10-
              {"","UF","",0,"UF",0},; //11-
              {"","CEP","",0,"CEP",0},; //12- tratamento especial
              {"","cPais","",0,"País",4},; //13-
              {"","xPais","",0,"País",-7},; //14-
              {"","fone","",0,"Telefone",0},; //15- tratamento especial
              {"","indIEDest","",0,"Indicador IE",2},; //16- tratamento especial
              {"","IE","",0,"Inscrição Estadual",0},; //17-
              {"","ISUF","",0,"Inscrição SUFRAMA",0},; //18-
              {"","IM","",0,"IM",0},; //19-
              {"","email","",0,"E-mail",0}}) //20-

*   Conteudo elementos da Matriz = {VALOR_TAG,TAG,LABEL_HTML}

   AADD(aTotais,{{"0.00","vBC","Base de Cálculo ICMS"},; //1-
                 {"0.00","vICMS","Valor do ICMS"},; //2-
                 {"0.00","vICMSDeson","Valor do ICMS Desonerado"},; //3-
                 {"0.00","vFCPUFDest","Valor Total ICMS FCP"},; //4-
                 {"0.00","vBCST","Base de Cálculo ICMS ST"},; //5-
                 {"0.00","vST","Valor ICMS Substituição"},; //6-
                 {"0.00","vProd","Valor Total dos Produtos"},; //7-
                 {"0.00","vFrete","Valor do Frete"},; //8-
                 {"0.00","vSeg","Valor do Seguro"},; //9-
                 {"0.00","vDesc","Valor Total dos Descontos"},; //10-
                 {"0.00","vII","Valor Total do II"},; //11-
                 {"0.00","vIPI","Valor Total do IPI"},; //12-
                 {"0.00","vPIS","Valor do PIS"},; //13-
                 {"0.00","vCOFINS","Valor da COFINS"},; //14-
                 {"0.00","vOutro","Outras Despesas Acessórias"},; //15-
                 {"0.00","vNF","Valor Total da NFe"}}) //16-

*   Conteudo elementos da Matriz = {VALOR_TAG,TAG,TAG_PAI,Elemento_Final_TAG_PAI,LABEL_HTML,TAM_LABEL}

   AADD(aTransp,{{"","modFrete","transp",17,"Modalidade do Frete",1},; //1-
                 {"","CNPJ","transporta",8,"CNPJ",0},; //2-
                 {"","CPF","",0,"CPF",0},; //3-
                 {"","xNome","",0,"Razão Social / Nome",0},; //4-
                 {"","IE","",0,"Inscrição Estadual",0},; //5-
                 {"","xEnder","",0,"Endereço Completo",0},; //6-
                 {"","xMun","",0,"Município",0},; //7-
                 {"","UF","",0,"UF",0},; //8-
                 {"",'placa','veicTransp',11,'Placa',0},; //9-
                 {"","UF","",0,"UF",0},; //10-
                 {"","RNTC","",0,"RNTC",0},; //11-
                 {"","qVol","vol",17,"Quantidade",0},; //12-
                 {"","esp","",0,"Espécie",0},; //13-
                 {"","marca","",0,"Marca dos Volumes",0},; //14-
                 {"","nVol","",0,"Volume",0},; //15-
                 {"","pesoL","",0,"Peso Líquido",0},; //16-
                 {"","pesoB","",0,"Peso Bruto",0}}) //17-

*   Conteudo elementos da Matriz = {VALOR_TAG,TAG}

   AADD(aCobr,{{"","nDup"},; //1-
               {"","dVenc"},; //2-
               {"","vDup"},; //3-
               {"","nDup"},; //4-
               {"","dVenc"},; //5-
               {"","vDup"},; //6-
               {"","nDup"},; //7-
               {"","dVenc"},; //8-
               {"","vDup"},; //9-
               {"","nDup"},; //10-
               {"","dVenc"},; //11-
               {"","vDup"},; //12-
               {"","nDup"},; //13-
               {"","dVenc"},; //14-
               {"","vDup"},; //15-
               {"","nDup"},; //16-
               {"","dVenc"},; //17-
               {"","vDup"},; //18-
               {"","nDup"},; //19-
               {"","dVenc"},; //20-
               {"","vDup"},; //21-
               {"","nDup"},; //22-
               {"","dVenc"},; //23-
               {"","vDup"},; //24-
               {"","nDup"},; //25-
               {"","dVenc"},; //26-
               {"","vDup"},; //27-
               {"","nDup"},; //28-
               {"","dVenc"},; //29-
               {"","vDup"}}) //30-

   If ! DigitoChave(cChave)
      Return Nil
   EndIf

   cParm:= { { "__EVENTARGUMENT", "" },;
             { "__EVENTTARGET", "" },;
             { "__EVENTVALIDATION", cEeventValidation },;
             { "__VIEWSTATE", cviewState },;
             { "__VIEWSTATEGENERATOR", cViewStateGenerator },;
             { "ctl00$ContentPlaceHolder1$btnConsultar", "Continuar" },;
             { "ctl00$ContentPlaceHolder1$captchaSom", cHiddenSom},;
             { "ctl00$ContentPlaceHolder1$token", cHiddenToken },;
             { "ctl00$ContentPlaceHolder1$txtCaptcha", cCaptcha },;
             { "ctl00$ContentPlaceHolder1$txtChaveAcessoCompleta", cChave },;
             { "ctl00$txtPalavraChave", "" },;
             { "hiddenInputToUpdateATBuffer_CommonToolkitScripts", "1"}}

   Try
      oInternet:= TIPClientHTTP():New(cUrl, .f.)
   Catch
      MsgInfo('Erro na Criação do Serviço')
      Return .f.
   End
   oInternet:SetCookie(cStringCookie)
   If oInternet:Open()
      If oInternet:POST(cParm)
         cRet:=oInternet:ReadAll()
      Else
         msgInfo('Erro no Post ' + cUrl, 'Aviso do Sistema')
         Return .F.
      EndIf
   Else
      msgInfo('Erro na Conexão')
      Return .f.
   EndIf
   oInternet:Close()

   If At('id="ctl00_ContentPlaceHolder1_bltMensagensErro" class="listaErro">', cRet) > 0
      cPart:= Substr(cRet, (At('id="ctl00_ContentPlaceHolder1_bltMensagensErro" class="listaErro">', cRet) + 66))
      cPart:= Substr(cPart, (At('<li>', cPart) + 4))
      MsgInfo(Troca_Acento(SubStr(cPart, 1, (At('</li>', cPart) - 1))))
      Return .f.
   EndIf

   Try
      oInternet:= TIPClientHTTP():New(cUrl1, .f.)
      oInternet:nConnTimeout:= 10000
   Catch
      MsgInfo('Erro na Criação do Serviço')
      Return .f.
   End
   oInternet:SetCookie(cStringCookie)
   If oInternet:Open()
      cHtml:=oInternet:ReadAll()
      cStringCookie:= oInternet:GetCookies()
   Else
      msgInfo('Erro na Conexão')
      Return .f.
   EndIf
   oInternet:Close()

   If At('id="ctl00_ContentPlaceHolder1_lblResultadoConsulta">', cHtml) > 0
      cPart:= Substr(cHtml, (At('id="ctl00_ContentPlaceHolder1_lblResultadoConsulta">', cHtml) + 52))
      MsgInfo(SubStr(cPart, 1, (At('</span>', cPart) - 1)))
      Return .f.
   EndIf

   If ! Empty(cHtml)
      nIni  := At('<html><link ',  cHtml)
      cParte:= SubStr(cHtml, nIni)
      nIni  := At('<div id="ctl00_ContentPlaceHolder1_divBotoesConsulta"',  cParte)
      cParte:= SubStr(cParte, 1, nIni - 1)
      nFim  := At('</form>', cParte)
      cFile := SubStr(cParte, nFim)
//memowrit('site.txt',cfile)
      nIni   := RAt('fixo-prod-serv-numero',cFile)
      c_span := SubStr(cFile, nIni)
      nIni   := AT('<span>',c_span)+6
      nTamTag:= AT('</span>',c_span)-nIni
      nTotPro:= Val(alltrim(SubStr(c_span,nIni,nTamTag)))

*   Conteudo elementos da Matriz = {VALOR_TAG,TAG,LABEL_HTML,TAM_LABEL}
      For p_=1 to nTotPro
        AADD(aDet,{{"","cProd","Código do Produto",0},; //1-
              {"","cEAN","Código EAN Comercial",0},; //2-
              {"","xProd","fixo-prod-serv-descricao",0},; //3-
              {"","NCM","Código NCM",0},; //4-
              {"","NVE","",0},; //5-
              {"","CEST","Código CEST",0},; //6-
              {"","EXTIPI","Código EX da TIPI",0},; //7-
              {"","CFOP","CFOP",0},; //8-
              {"","uCom","Unidade Comercial",0},; //9-
              {"","qCom","Quantidade Comercial",0},; //10-
              {"","vUnCom","Valor unitário de comercialização",0},; //11-
              {"","vProd","fixo-prod-serv-vb",0},; //12-
              {"","cEANTrib","Código EAN Tributável",0},; //13-
              {"","uTrib","Unidade Tributável",0},; //14-
              {"","qTrib","Quantidade Tributável",0},; //15-
              {"","vUnTrib","Valor unitário de tributação",0},; //16-
              {"","vFrete","Valor Total do Frete",0},; //17-
              {"","vSeg","Valor do Seguro",0},; //18-
              {"","vDesc","Valor do Desconto",0},; //19-
              {"","vOutro","Outras Despesas Acessórias",0},; //20-
              {"","indTot","Indicador de Composição do Valor Total da NF-e",1},; //21-
              {"","nItemPed","Item do pedido de compra",0}}) //22-

        AADD(aMedicamentos, {{"","Lote",'Nro. do Lote', 0},; //1-
                               {"","qLote",'Quantidade de produtos no lote', 0},; //2-
                             {"","dFab",'Data de fabricaçã', 0},; //3-
                             {"","dVal",'Data de validade', 0},;  //4-
                             {"","vPMC",'Preço Máximo Consumido', 0},; //5-
                             {"","infAdProd",'Descrição', 0}}) //6-

        AADD(aICMS,{{"","orig","Origem da Mercadoria",1},; //1- ICMS Normal e  ST
               {"","CST","Tributação do ICMS",2},; //2-
               {"","CSOSN","Código de Situação da Operação",3},; //3-
               {"","modBC","Modalidade Definição da BC do ICMS",1},; //4-
               {"","pRedBC","Percentual Redução de BC do ICMS",0},; //5-
               {"","vBC","Base de Cálculo",0},; //6-
               {"","pICMS","Alíquota",0},; //7-
               {"","vICMS","Valor",0},; //8-
               {"","vICMSDeson","",0},; //9-
               {"","motDesICMS","",0},; //10-
               {"","modBCST","Modalidade de determinação da BC do ICMS ST",1},; //11-
               {"","pMVAST","Percentual Margem Valor Adicionado do ICMS ST",0},; //12-
               {"","pRedBCST","Percentual da Redução de BC do ICMS ST",0},; //13-
               {"","vBCST","Valor da BC do ICMS ST",0},; //14-
               {"","pICMSST","Alíquota do imposto do ICMS ST",0},; //15-
               {"","vICMSST","Valor do ICMS ST",0},; //16-
               {"","vBCSTRet","Valor da BC do ICMS ST retido",0},; //17-
               {"","vICMSSTRet","Valor do ICMS ST retido",0},; //18-
               {"","vICMSOp","",0},; //19-
               {"","pDif","",0},; //20-
               {"","vICMSDif","",0},; //21-
               {"","pCredSN","Alíquota aplicável de cálculo do crédito",0},; //22-
               {"","vCredICMSSN","Valor crédito do ICMS",0}}) //23-

        AADD(aIPI,{{"","cEnq","Código de Enquadramento", 3},;
                {"","CST","CST", 2},; //1-
              {"","vBC","Base de Cálculo", 0},; //2-
              {"","pIPI","Alíquota", 0},; //3-
              {"","vIPI","Valor IPI", 0},; //4-
              {"","qBCProd","", 0},; //5-
              {"","vAliqProd","", 0}}) //6-

        AADD(aPIS,{{"","CST","CST",2},; //1-
              {"","vBC","Base de Cálculo",0},; //2-
              {"","pPIS","Alíquota",0},; //3-
              {"","vPIS","Valor",0},; //4-
              {"","qBCProd","",0},; //5-
              {"","vAliqProd","",0}}) //6-

        AADD(aCOFINS,{{"","CST","CST",2},; //1-
                 {"","vBC","Base de Cálculo",0},; //2-vBC
                 {"","pCOFINS","Alíquota",0},; //3-
                 {"","vCOFINS","Valor",0},; //4-
                 {"","qBCProd","",0},; //5-
                 {"","vAliqProd","",0}}) //6-

      Next

      nIni   := At('<div class="GeralXslt"',cFile)
      cParte := SubStr(cFile, nIni)
      nIni   := At('<div id="Emitente"',cParte)
      cParte := SubStr(cParte, 1, nIni - 1)  //ide
      GeraTag("ide",cParte)

      nIni   := At('<div id="Emitente"',cFile)
      cParte := SubStr(cFile, nIni)
      nIni   := At('</div>',cParte)
      cParte  := SubStr(cParte, 1, nIni - 1)  //emit
      GeraTag("emit",cParte)

      nIni   := At('<div id="DestRem"',cFile)
      cParte := SubStr(cFile, nIni)
      nIni   := At('</div>',cParte)
      cParte := SubStr(cParte, 1, nIni - 1)  //dest
      GeraTag("dest",cParte)

      nIni   := At('<td class="fixo-prod-serv-numero"><span>', cFile)
      cParte := SubStr(cFile, nIni)
      nIni   := At('</body></html>', cParte)
      cParte := SubStr(cParte, 1, nIni - 1)  //det
      GeraTag("det", cParte)

      nIni   := At('<legend class="titulo-aba">Totais</legend>',cFile)
      cParte := SubStr(cFile, nIni+42)
      nIni   := At('<div id="aba_nft_5"',cParte)
      cParte := SubStr(cParte, 1, nIni - 1)  //totais
      GeraTag("totais",cParte)

      nIni   := At('Dados do Transporte</legend>',cFile)
      cParte := SubStr(cFile, nIni+29)
      nIni   := At('<div id="Cobranca"',cParte)
      cParte := SubStr(cParte, 1, nIni - 1)  //transp
      GeraTag("transp",cParte)

      nIni   := At('<legend>Duplicatas</legend><table',cFile)
      if nIni>0
        cParte := SubStr(cFile, nIni)
        nIni   := At('</table>',cParte)
        cParte := SubStr(cParte, 1, nIni - 1)  //cobr
        GeraTag("cobr",cParte)
      endif

      GravaXML()

   Else
      msgInfo('Erro ao ler retorno da Consulta')
      Return .f.
   EndIf

Return Nil

***************************************
Function DigitoChave(CodigoChave)
Local indice:= '4329876543298765432987654329876543298765432'
Local digito

   nSoma:= 0
   For contador:= 1 to 43
      nSoma+= (Val(SubStr(CodigoChave, contador, 1)) * Val(SubStr(indice, contador, 1)))
   Next

   digito:= (nSoma % 11)
   If digito == 0 .Or. digito == 1
      digito:= 0
   Else
      digito:= (11 - digito)
   EndIf
   If SubStr(CodigoChave, 44, 1) != LTrim(Str(digito, 1))
      MsgStop('Código da Chave Errado....', 'Aviso do Sistema')
      principal.oChaveNFe.SetFocus
      Return .f.
   EndIf
Return .t.

**************************************
Function Troca_Acento(cTexto)

   cTexto := StrTran( cTexto, "&#243;", "ó" )
   cTexto := StrTran( cTexto, "&#225;", "á" )

Return cTexto

***************************************************
Function Limpar()
principal.oChaveNFe.Value:=SPACE(44)
principal.oTxt_captcha.Value:=SPACE(6)
principal.oChaveNFe.SetFocus
Return Nil

***************************************************
Function Sair()
principal.release
Return Nil

***************************************************
Function GeraTag(_tag, cParte)

if _tag=="ide"
  cPar_:= StrTran(cFile,Chr(13)+Chr(10),"")
  cPar_:= StrTran(cPar_,Chr(160),"")
  nIni := At('<legend>Informações Complementares de Interesse do Contribuinte</legend>', cPar_)
  if nIni>0
    c_span:=SubStr(cPar_, nIni+70)
    nIni:=AT('<div style="word-wrap: break-word">',c_span)
    c_span:=SubStr(c_span, nIni+35)
    nIni:=AT('</div></span>',c_span)
    cinfCpl:=alltrim(SubStr(c_span,1,nIni-1))
  endif

  cPar_:=StrTran(cParte,Chr(13)+Chr(10),"")
  cPar_:=StrTran(cPar_,Chr(160),"")

  nIni:=AT('Situação Atual:',cPar_)
  c_span:=SubStr(cPar_, nIni+15)
  nIni:=AT('(Ambiente de autorização:',c_span)
  cxMotivo:=alltrim(SubStr(c_span,1,nIni-1))
  if "AUTORIZADA" $ cxMotivo
    ccStat:="100"
    cxMotivo:="Autorizado o uso da NF-e"
  endif
  if "CANCELADA" $ cxMotivo
    ccStat:="101"
    cxMotivo:="Cancelamento de NF-e homologado"
  endif

  nIni:=AT('Data Inclusão AN</label></td></tr><tr><td><span>',cPar_)
  c_span:=SubStr(cPar_, nIni+50)
  nIni:=AT('<span>',c_span)+6
  nTamTag:=AT('<input',c_span)-nIni
  cnProt:=alltrim(SubStr(c_span,nIni,nTamTag))
  c_span:=SubStr(c_span, nIni+nTamTag)
  nIni:=AT('<span>',c_span)+6
  c_span:=SubStr(c_span,nIni)
  nTamTag:=AT('</span>',c_span)-1  //nIni
  cdhRecbto:=alltrim(SubStr(c_span,1,nTamTag))
  cdhRecbto:=SubStr(cdhRecbto,7,4)+"-"+SubStr(cdhRecbto,4,2)+"-"+left(cdhRecbto,2)+"T"+Right(cdhRecbto,14)
  nIni:=AT('<i>Digest</i> Value da NF-e',cPar_)
  c_span:=SubStr(cPar_, nIni+20)
  nIni:=AT('<span>',c_span)+6
  nTamTag:=AT('</span>',c_span)-nIni
  cdigVal:=alltrim(SubStr(c_span,nIni,nTamTag))

  nIni:=AT('Versão XML',cParte)
  c_span:=SubStr(cParte, nIni)
  nIni:=AT('<span>',c_span)+6
  nTamTag:=AT('</span>',c_span)-nIni
  cVersao:=alltrim(SubStr(c_span,nIni,nTamTag))
  For i:= 1 to Len(aIde[1])
    cPar_:= cParte
    if i == 12
      cPar_:= cFile
    endif
    if i == 13
      cPar_:= cFile
    endif
    nIni  := AT(aIde[1,i,5],cPar_)
    c_span:= SubStr(cPar_, nIni)
    if i != 16
      nIni   :=AT('<span>', c_span) + 6
      nTamTag:= AT('</span>', c_span) - nIni
      c_tag  := alltrim(SubStr(c_span, nIni, nTamTag))
    else
      nIni := AT('</legend>', c_span)
      c_tag:= alltrim(SubStr(c_span, 1, nIni - 1))
      if AT('produção', c_tag) > 0
        c_tag:= "1"
      else
        c_tag:= "2"
      endif
      ctpAmb:= c_tag
    endif
    if i==2
       c_tag:= SubStr(cChave, 36, 8)
      //c_tag:= StrZero(Val(c_tag), 9)
    endif
    if i==8 .or. i==9
      if !Empt(c_tag)
        c_tag:=SubStr(c_tag,7,4)+"-"+SubStr(c_tag,4,2)+"-"+left(c_tag,2)+"T"+SubStr(c_tag,12)
      endif
    endif
    if i==15
      c_tag:=right(c_tag,1)
    endif
    if aIde[1,i,6]!=0
      if aIde[1,i,6]>0
        c_tag:=left(c_tag,aIde[1,i,6])
      else
        c_tag:=SubStr(c_tag,Abs(aIde[1,i,6])+1)
      endif
    endif
    aIde[1,i,1]:=c_tag
  Next
endif

if _tag == "emit"
  For i=1 to Len(aEmit[1])
    cPar_:=StrTran(cParte,Chr(13)+Chr(10),"")
    cPar_:=StrTran(cPar_,Chr(160),"")
    nIni:=AT(aEmit[1,i,5],cPar_)
    if nIni>0
      c_span:=SubStr(cPar_, nIni)
      nIni:=AT('<span>',c_span)+6
      nTamTag:=AT('</span>',c_span)-nIni
      c_tag:=alltrim(SubStr(c_span,nIni,nTamTag))
      if i>=1 .and. i<=2
        c_tag:=StrTran(c_tag,".","")
        c_tag:=StrTran(c_tag,"/","")
        c_tag:=StrTran(c_tag,"-","")
      endif
      if i>=5 .and. i<=7
        nIni:= AT(",",c_tag)
        if i == 5
          c_tag:= Left(c_tag,nIni-1)
        elseif i == 6
          c_tag:= AllTrim(SubStr(c_tag, nIni + 1))
          nIni := AT(" ", c_tag)
          if nIni > 0
            c_tag:= Left(c_tag, nIni - 1)
          endif
        else
          c_tag:= AllTrim(SubStr(c_tag, nIni + 1))
          nIni := AT(" ", c_tag)
          if nIni>0
            c_tag:= alltrim(SubStr(c_tag, nIni + 1))
          else
            c_tag:= ""
          endif
        endif
      endif
      if i==12
        c_tag:=StrTran(c_tag,"-","")
      endif
      if i==15
        c_tag:= StrTran(c_tag,"(","")
        c_tag:= StrTran(c_tag,")","")
        c_tag:= StrTran(c_tag,"-","")
      endif
      if aEmit[1, i, 6] != 0
        if aEmit[1, i, 6] > 0
          c_tag:= left(c_tag,aEmit[1, i, 6])
        else
          c_tag:= alltrim(SubStr(c_tag, Abs(aEmit[1, i, 6]) + 1))
          c_tag:= alltrim(StrTran(c_tag, "-", ""))
        endif
      endif
      aEmit[1, i, 1]:= c_tag
    endif
  Next
endif

if _tag == "dest"
  For i=1 to Len(aDest[1])
    cPar_:= StrTran(cParte, Chr(13) + Chr(10), "")
    cPar_:= StrTran(cPar_, Chr(160), "")
    nIni := AT(aDest[1, i, 5], cPar_)
    if nIni > 0
      c_span := SubStr(cPar_, nIni)
      nIni   := AT('<span>',c_span)+6
      nTamTag:= AT('</span>',c_span)-nIni
      c_tag  := AllTrim(SubStr(c_span, nIni, nTamTag))
      if i >= 1 .and. i <= 2
        c_tag:= StrTran(c_tag, ".", "")
        c_tag:= StrTran(c_tag, "/", "")
        c_tag:= StrTran(c_tag, "-", "")
      endif
      If i >= 5 .and. i <= 7
        nIni:= AT(",", c_tag)
        if i == 5
          c_tag:= Left(c_tag,nIni-1)
        elseif i == 6
          c_tag:= AllTrim(SubStr(c_tag, nIni + 1))
          nIni := AT(" ", c_tag)
          if nIni > 0
            c_tag:= Left(c_tag, nIni - 1)
          endif
        else
          c_tag:= AllTrim(SubStr(c_tag, nIni + 1))
          nIni := AT(" ", c_tag)
          if nIni > 0
            c_tag:= alltrim(SubStr(c_tag, nIni + 1))
          else
            c_tag:= ""
          endif
        endif
      EndIf
      if i == 12
        c_tag:= StrTran(c_tag, "-", "")
      endif
      if i==15
        c_tag:= StrTran(c_tag, "(", "")
        c_tag:= StrTran(c_tag, ")", "")
        c_tag:= StrTran(c_tag, "-", "")
      endif
      if i==16
        c_tag:= alltrim(Str(Val(c_tag)))
      endif
      if aDest[1, i, 6] != 0
        if aDest[1, i, 6] > 0
          c_tag:= left(c_tag, aDest[1, i, 6])
        else
          c_tag:= alltrim(SubStr(c_tag, Abs(aDest[1,i,6]) + 1))
          c_tag:= alltrim(StrTran(c_tag, "-", ""))
        endif
      endif
      aDest[1, i, 1]:= c_tag
    endif
  Next
endif

if _tag == "det"
   cPar_ := StrTran(cParte, Chr(13) + Chr(10), "")
   cPar_ := StrTran(cPar_, Chr(160), "")
   For p_:= 1 to Len(aDet)
      For i:= 1 to Len(aDet[p_])
         nIni:= At(aDet[p_, i, 3], cPar_)
         if nIni > 0
              c_span := SubStr(cPar_, nIni)
              nIni   := At('<span>',c_span)+6
              nTamTag:= At('</span>',c_span)-nIni
              c_tag  := AllTrim(SubStr(c_span,nIni,nTamTag))
              if aDet[p_, i, 4] != 0
                if aDet[p_, i, 4] > 0
                  c_tag:= left(c_tag, aDet[p_, i, 4])
                else
                  c_tag:= alltrim(SubStr(c_tag, Abs(aDet[p_, i, 4]) + 1))
                  c_tag:= alltrim(StrTran(c_tag, "-", ""))
                endif
              endif
              If i != 3
                   c_tag:= StrTran(c_tag, ".",  "")
                 c_tag:= StrTran(c_tag, ",", ".")
              endIf
              aDet[p_, i, 1]:= c_tag
         endif
       Next

      For i:= 1 To Len(aICMS[p_])
         nIni:= At(aICMS[p_, i, 3], cPar_)
         if nIni > 0
            c_span := SubStr(cPar_, nIni)
            nIni   := At('<span>', c_span) + 6
            nTamTag:= At('</span>', c_span) - nIni
            c_tag  := AllTrim(SubStr(c_span, nIni, nTamTag))
              If aICMS[p_, i, 4] != 0
                if aICMS[p_, i, 4] > 0
                  c_tag:= Left(c_tag, aICMS[p_, i, 4])
                else
                  c_tag:= AllTrim(SubStr(c_tag, Abs(aICMS[p_, i, 4]) + 1))
                  c_tag:= AllTrim(StrTran(c_tag, "-", ""))
                endif
              endif
              c_tag:= StrTran(c_tag, ".",  "")
              c_tag:= StrTran(c_tag, ",", ".")
              aICMS[p_, i, 1]:= c_tag
         endif
       Next

    nIni:= AT('<legend>Imposto Sobre Produtos Industrializados</legend>', cPar_)
    if nIni > 0
      cPar_:= SubStr(cPar_, nIni)
      For i:= 1 To Len(aIPI[p_])
        nIni:= AT(aIPI[p_, i, 3], cPar_)
        if nIni > 0
          c_span := SubStr(cPar_, nIni)
          nIni   := AT('<span>', c_span) + 6
          nTamTag:= AT('</span>', c_span) - nIni
          c_tag  := AllTrim(SubStr(c_span, nIni, nTamTag))
          if aIPI[p_, i, 4] != 0
            if aIPI[p_, i, 4] > 0
              c_tag:= Left(c_tag, aIPI[p_, i, 4])
            else
              c_tag:= Alltrim(SubStr(c_tag, Abs(aIPI[p_, i, 4]) + 1))
              c_tag:= Alltrim(StrTran(c_tag, "-", ""))
            endif
          endif
          c_tag:= StrTran(c_tag, ".", "")
          c_tag:= StrTran(c_tag, ",", ".")
          aIPI[p_, i, 1]:= c_tag
        endif
      Next
    endif

    nIni:= At('<legend class="toggle">PIS</legend>', cPar_)
    if nIni > 0
      cPar_:= SubStr(cPar_, nIni)
      For i:= 1 to Len(aPIS[p_])
        nFim:= At('<td class="fixo-prod-serv-numero"><span>', cPar_)
        cPar1_:= SubStr(cPar_, 1, nFim)
        nIni:= AT(aPIS[p_, i, 3], cPar1_)
        if nIni > 0
          c_span := SubStr(cPar1_, nIni)
          nIni   := At('<span>', c_span) + 6
          nTamTag:= At('</span>', c_span) - nIni
          c_tag  := AllTrim(SubStr(c_span, nIni, nTamTag))
          if aPIS[p_,i,4] != 0
            if aPIS[p_,i,4] > 0
              c_tag:= Left(c_tag,aPIS[p_,i,4])
            else
              c_tag:= AllTrim(SubStr(c_tag, Abs(aPIS[p_, i, 4]) + 1))
              c_tag:= AllTrim(StrTran(c_tag, "-", ""))
            endif
          endif
          c_tag:= StrTran(c_tag, ".",  "")
          c_tag:= StrTran(c_tag, ",", ".")
          aPIS[p_, i, 1]:= c_tag
        endif
      Next
    endif

    nIni:= AT('<legend class="toggle">COFINS</legend>', cPar_)
    if nIni > 0
      cPar_:= SubStr(cPar_, nIni)
      For i:= 1 to Len(aCOFINS[p_])
         nFim  := At('<td class="fixo-prod-serv-numero">', cPar_)
         cPar1_:= SubStr(cPar_, 1, nFim)
         nIni  := AT(aCOFINS[p_, i, 3], cPar1_)
        if nIni > 0
          c_span := SubStr(cPar1_, nIni)
          nIni   := AT('<span>', c_span) + 6
          nTamTag:= AT('</span>', c_span) - nIni
          c_tag:=alltrim(SubStr(c_span, nIni, nTamTag))
          if aCOFINS[p_, i, 4] != 0
            if aCOFINS[p_, i, 4] > 0
              c_tag:= left(c_tag, aCOFINS[p_, i, 4])
            else
              c_tag:= alltrim(SubStr(c_tag, Abs(aCOFINS[p_, i, 4]) + 1))
              c_tag:= alltrim(StrTran(c_tag, "-", ""))
            endif
          endif
          c_tag:= StrTran(c_tag, ".",  "")
          c_tag:= StrTran(c_tag, ",", ".")
          aCOFINS[p_, i, 1]:= c_tag
        endif
      Next
    endif

   nIni:= At('<legend>Detalhamento específico dos medicamentos</legend>', cPar_)
    if nIni > 0
      cPar_:=SubStr(cPar_, nIni)
      For i:= 1 to Len(aMedicamentos[p_])
        nIni:= AT(aMedicamentos[p_, i, 3], cPar_)
        if nIni > 0
          c_span := SubStr(cPar_, nIni)
          nIni   := At('<span>', c_span) + 6
          nTamTag:= At('</span>', c_span) - nIni
          c_tag  := AllTrim(SubStr(c_span, nIni, nTamTag))
          if aMedicamentos[p_,i,4] != 0
            if aMedicamentos[p_,i,4] > 0
              c_tag:= Left(c_tag,aMedicamentos[p_,i,4])
            else
              c_tag:= AllTrim(SubStr(c_tag, Abs(aMedicamentos[p_, i, 4]) + 1))
              c_tag:= AllTrim(StrTran(c_tag, "-", ""))
            endif
          endif
          If i != 6
             c_tag:= StrTran(c_tag, ".",  "")
             c_tag:= StrTran(c_tag, ",", ".")
          endif
          if StrZero(i, 2) $ "-03-04"
              c_tag:=SubStr(c_tag,7,4)+"-"+SubStr(c_tag,4,2)+"-"+left(c_tag,2)
          endif
          aMedicamentos[p_, i, 1]:= c_tag
        endif
      Next
    endif
    nIni  := At('<td class="fixo-prod-serv-numero"><span>', cPar_)
    cPar_ := SubStr(cPar_, nIni)
  Next
endif

if _tag=="totais"
  For i=1 to Len(aTotais[1])
    cPar_:=StrTran(cParte,Chr(13)+Chr(10),"")
    cPar_:=StrTran(cPar_,Chr(160),"")
    nIni:=AT(aTotais[1,i,3],cPar_)
    if nIni>0
      c_span:=SubStr(cPar_, nIni)
      nIni:=AT('<span>',c_span)+6
      nTamTag:=AT('</span>',c_span)-nIni
      c_tag:=alltrim(SubStr(c_span,nIni,nTamTag))
      c_tag:=StrTran(c_tag,".","")
      c_tag:=StrTran(c_tag,",",".")
      aTotais[1,i,1]:=c_tag
    endif
  Next
endif

if _tag=="transp"
  For i=1 to Len(aTransp[1])
    cPar_:=StrTran(cParte,Chr(13)+Chr(10),"")
    cPar_:=StrTran(cPar_,Chr(160),"")
    nIni:=AT(aTransp[1,i,5],cPar_)
    if nIni>0
      c_span:=SubStr(cPar_, nIni)
      nIni:=AT('<span>',c_span)+6
      nTamTag:=AT('</span>',c_span)-nIni
      c_tag:=alltrim(SubStr(c_span,nIni,nTamTag))
      if i>=2 .and. i<=3
        c_tag:=StrTran(c_tag,".","")
        c_tag:=StrTran(c_tag,"/","")
        c_tag:=StrTran(c_tag,"-","")
      endif
      if aTransp[1,i,6]!=0
        if aTransp[1,i,6]>0
          c_tag:=left(c_tag,aTransp[1,i,6])
        else
          c_tag:=alltrim(SubStr(c_tag,Abs(aTransp[1,i,6])+1))
          c_tag:=alltrim(StrTran(c_tag,"-",""))
        endif
      endif
      aTransp[1,i,1]:=c_tag
    endif
  Next
endif

if _tag=="cobr"
  cPar_:=StrTran(cParte,Chr(13)+Chr(10),"")
  cPar_:=StrTran(cPar_,Chr(160),"")
  For i=1 to Len(aCobr[1])
    nIni:=AT('<span>',cPar_)
    if nIni>0
      cPar_:=SubStr(cPar_, nIni+6)
      nTamTag:=AT('</span>',cPar_)-1
      c_tag:=alltrim(SubStr(cPar_,1,nTamTag))
      c_tag:=StrTran(c_tag,".","")
      c_tag:=StrTran(c_tag,",",".")
      if StrZero(i,2) $ "-02-05-08-11-14-17-20-23-26-29"
        c_tag:=SubStr(c_tag,7,4)+"-"+SubStr(c_tag,4,2)+"-"+left(c_tag,2)
      endif
      aCobr[1,i,1]:=c_tag
    else
      Exit
    endif
  Next
endif

return Nil

***************************************************
Function GravaXML()
Local cXML:='<?xml version="1.0" encoding="UTF-8"?><nfeProc versao="'+cVersao+'" xmlns="http://www.portalfiscal.inf.br/nfe"><NFe xmlns="http://www.portalfiscal.inf.br/nfe"><infNFe versao="'+cVersao+'" Id="NFe'+cChave+'">'
cTagPai:=""
nFimTagPai:=0
For i=1 to Len(aIde[1])
  if !Empt(aIde[1,i,3])
    nFimTagPai:=aIde[1,i,4]
    cTagPai+="|"+StrZero(nFimTagPai,2)+aIde[1,i,3]
    cXML+='<'+aIde[1,i,3]+'>'
  endif
  if !Empt(aIde[1,i,1])
    cXML+='<'+aIde[1,i,2]+'>'+aIde[1,i,1]+'</'+aIde[1,i,2]+'>'
  endif
  if i==nFimTagPai
    nIni:=RAT("|",cTagPai)
    cTag:=Substr(cTagPai,nIni+1)
    cXML+='</'+SubStr(cTag,3)+'>'
    cTagPai:=SubStr(cTagPai,1,nIni-1)
    if nIni>1
      nIni:=RAT("|",cTagPai)
      nFimTagPai:=Val(Substr(cTagPai,nIni+1,2))
    else
      nFimTagPai:=0
    endif
  endif
Next
For i=1 to Len(aEmit[1])
  if !Empt(aEmit[1,i,3])
    nFimTagPai:=aEmit[1,i,4]
    cTagPai+="|"+StrZero(nFimTagPai,2)+aEmit[1,i,3]
    cXML+='<'+aEmit[1,i,3]+'>'
  endif
  if !Empt(aEmit[1,i,1])
    cXML+='<'+aEmit[1,i,2]+'>'+aEmit[1,i,1]+'</'+aEmit[1,i,2]+'>'
  endif
  if i==nFimTagPai
    nIni:=RAT("|",cTagPai)
    cTag:=Substr(cTagPai,nIni+1)
    cXML+='</'+SubStr(cTag,3)+'>'
    cTagPai:=SubStr(cTagPai,1,nIni-1)
    if nIni>1
      nIni:=RAT("|",cTagPai)
      nFimTagPai:=Val(Substr(cTagPai,nIni+1,2))
    else
      nFimTagPai:=0
    endif
  endif
Next
For i=1 to Len(aDest[1])
  if !Empt(aDest[1,i,3])
    nFimTagPai:=aDest[1,i,4]
    cTagPai+="|"+StrZero(nFimTagPai,2)+aDest[1,i,3]
    cXML+='<'+aDest[1,i,3]+'>'
  endif
  if !Empt(aDest[1,i,1])
    cXML+='<'+aDest[1,i,2]+'>'+aDest[1,i,1]+'</'+aDest[1,i,2]+'>'
  endif
  if i==nFimTagPai
    nIni:=RAT("|",cTagPai)
    cTag:=Substr(cTagPai,nIni+1)
    cXML+='</'+SubStr(cTag,3)+'>'
    cTagPai:=SubStr(cTagPai,1,nIni-1)
    if nIni>1
      nIni:=RAT("|",cTagPai)
      nFimTagPai:=Val(Substr(cTagPai,nIni+1,2))
    else
      nFimTagPai:=0
    endif
  endif
Next

For p_=1 to Len(aDet)
  cXML+='<det nItem="'+alltrim(Str(p_))+'"><prod>'
  For i=1 to Len(aDet[p_])
    if !Empt(aDet[p_,i,1])
      cXML+='<'+aDet[p_,i,2]+'>'+aDet[p_,i,1]+'</'+aDet[p_,i,2]+'>'
    endif
  Next

  lpoemTag:= .F.
  For i:= 1 to Len(aMedicamentos[p_])
    if i == 1
      if ! Empty(aMedicamentos[p_,i,1])
        cXML+= '<med><nLote>' + aMedicamentos[p_,i,1] + '</nLote>'
        lpoemTag:=.T.
      endif
    Else
      if ! Empt(aMedicamentos[p_,i,1])
         If i == 6
             cDiscAdicional:= '<'+aMedicamentos[p_,i,2]+'>'+ aMedicamentos[p_,i,1] + '</'+aMedicamentos[p_,i,2]+'>'
         Else
             cXML+='<'+aMedicamentos[p_,i,2]+'>'+ aMedicamentos[p_,i,1] + '</'+aMedicamentos[p_,i,2]+'>'
         Endif
      endif
    EndIf
  Next
  if lpoemTag
    cXML+='</med>'
  endif
  cXML+= '</prod><imposto><ICMS>'
  cTag_:='ICMS'
  For i:= 1 to Len(aICMS[p_])
    if i == 1
      if ! Empty(aICMS[p_, 2, 1])
        cTag_+= aICMS[p_, 2, 1]
      else
        cTag_+= 'SN' + aICMS[p_, 3, 1]
      endif
      cXML+= '<' + cTag_ + '>'
    endif
    if !Empty(aICMS[p_, i, 1])
       If aICMS[p_, 2, 1] == '00'
          If StrZero(i, 2) $ "-01-02-04-06-07-08"
            cXML+= '<' + aICMS[p_, i, 2] + '>' + aICMS[p_, i, 1] + '</' + aICMS[p_, i, 2] + '>'
         EndIf
      ElseIf aICMS[p_, 2, 1] == '10'
         If StrZero(i, 2) $ "-01-02-04-06-07-08-11-12-13-14-15-16"
            cXml+= '<' + aICMS[p_, i, 2] + '>' + aICMS[p_, i, 1] + '</' + aICMS[p_, i, 2] + '>'
         EndIf
      ElseIf aICMS[p_, 2, 1] == '20'
         If StrZero(i, 2) $ "-01-02-04-05-06-07-08-09-10"
            cXml+= '<' + aICMS[p_, i, 2] + '>' + aICMS[p_, i, 1] + '</' + aICMS[p_, i, 2] + '>'
         EndIf
      ElseIf aICMS[p_, 2, 1] == '30'
         If StrZero(i, 2) $ "-01-02-11-12-13-14-15-16-09-10"
            cXml+= '<' + aICMS[p_, i, 2] + '>' + aICMS[p_, i, 1] + '</' + aICMS[p_, i, 2] + '>'
         EndIf
      ElseIf aICMS[p_, 2, 1] == '40' .Or. aICMS[p_, 2, 1] == '41' .Or. aICMS[p_, 2, 1] == '50'
         If StrZero(i, 2) $ "-01-02-09-10"
            cXml+= '<' + aICMS[p_, i, 2] + '>' + aICMS[p_, i, 1] + '</' + aICMS[p_, i, 2] + '>'
         EndIf
      ElseIf aICMS[p_, 2, 1] == '51'
         If StrZero(i, 2) $ "-01-02-04-05-06-07-08-19-20-21"
            cXml+= '<' + aICMS[p_, i, 2] + '>' + aICMS[p_, i, 1] + '</' + aICMS[p_, i, 2] + '>'
         EndIf
      ElseIf aICMS[p_, 2, 1] == '60'
         If StrZero(i, 2) $ "-01-02-17-18"
            cXml+= '<' + aICMS[p_, i, 2] + '>' + aICMS[p_, i, 1] + '</' + aICMS[p_, i, 2] + '>'
         EndIf
      ElseIf aICMS[p_, 2, 1] == '70'
         If StrZero(i, 2) $ "-01-02-04-05-06-07-08-09-10-11-12-13-14-15-16"
            cXml+= '<' + aICMS[p_, i, 2] + '>' + aICMS[p_, i, 1] + '</' + aICMS[p_, i, 2] + '>'
         EndIf
      ElseIf aICMS[p_, 2, 1] == '90'
         If StrZero(i, 2) $ "-01-02-04-05-06-07-08-11-12-13-14-15-16"
            cXml+= '<' + aICMS[p_, i, 2] + '>' + aICMS[p_, i, 1] + '</' + aICMS[p_, i, 2] + '>'
         EndIf
      Else
         cXml+= '<' + aICMS[p_, i, 2] + '>' + aICMS[p_, i, 1] + '</' + aICMS[p_, i, 2] + '>'
      EndIf
    endif
  Next
  cXML+='</'+cTag_+'></ICMS>'

  lpoemTag:= .F.
  For i:= 1 to Len(aIPI[p_])
    if i == 1
      if ! Empty(aIPI[p_,i,1])
        cXML+= '<IPI><cEnq>' + aIPI[p_,i,1] + '</cEnq><IPITrib>'
        lpoemTag:=.T.
      endif
    Else
      if ! Empt(aIPI[p_,i,1])
        cXML+='<'+aIPI[p_,i,2]+'>'+ aIPI[p_,i,1] + '</'+aIPI[p_,i,2]+'>'
      endif
    EndIf
  Next
  if lpoemTag
    cXML+='</IPITrib></IPI>'
  endif

  lpoemTag:= .F.
  For i:= 1 to Len(aPIS[p_])
    if i == 1
      if ! Empty(aPIS[p_, i, 1])
        If Val(aPIS[p_, 1, 1]) >= 1 .And. Val(aPIS[p_, 1, 1]) <= 2
            cXML+= '<PIS><PISAliq>'
        ElseIf Val(aPIS[p_, 1, 1]) == 3
            cXML+= '<PIS><PISQte>'
        ElseIf Val(aPIS[p_, 1, 1]) >= 4 .And. Val(aPIS[p_, 1, 1]) <= 9
          cXML+= '<PIS><PISNT>'
        ElseIf Val(aPIS[p_, 1, 1]) >= 49 .And. Val(aPIS[p_, 1, 1]) <= 99
          cXML+= '<PIS><PISOutr>'
        EndIf
        lpoemTag:= .T.
      endif
    endif
    if ! Empty(aPIS[p_, i, 1])
      cXML+= '<' + aPIS[p_,i,2] + '>' + aPIS[p_,i,1] + '</' + aPIS[p_,i,2] + '>'
    endif
  Next
  if lpoemTag
     If Val(aPIS[p_, 1, 1]) >= 1 .And. Val(aPIS[p_, 1, 1]) <= 2
         cXML+= '</PISAliq></PIS>'
     ElseIf Val(aPIS[p_, 1, 1]) == 3
         cXML+= '</PISQte></PIS>'
     ElseIf Val(aPIS[p_, 1, 1]) >= 4 .And. Val(aPIS[p_, 1, 1]) <= 9
       cXML+= '</PISNT></PIS>'
     ElseIf Val(aPIS[p_, 1, 1]) >= 49 .And. Val(aPIS[p_, 1, 1]) <= 99
        cXML+= '</PISOutr></PIS>'
     EndIf
  endif
  lpoemTag:=.F.
  For i=1 to Len(aCOFINS[p_])
    if i==1
      if !Empt(aCOFINS[p_,i,1])
         If Val(aPIS[p_, 1, 1]) >= 1 .And. Val(aPIS[p_, 1, 1]) <= 2
           cXML+= '<COFINS><COFINSAliq>'
         ElseIf Val(aPIS[p_, 1, 1]) == 3
            cXML+= '<COFINS><COFINSQte>'
         ElseIf Val(aPIS[p_, 1, 1]) >= 4 .And. Val(aPIS[p_, 1, 1]) <= 9
          cXML+= '<COFINS><COFINSNT>'
         ElseIf Val(aPIS[p_, 1, 1]) >= 49 .And. Val(aPIS[p_, 1, 1]) <= 99
           cXML+= '<COFINS><COFINSOutr>'
         EndIf
        lpoemTag:=.T.
      endif
    endif
    if !Empt(aCOFINS[p_,i,1])
      cXML+= '<' + aCOFINS[p_, i, 2] + '>' + aCOFINS[p_, i, 1] + '</' + aCOFINS[p_, i, 2] + '>'
    endif
  Next
  if lpoemTag
    If Val(aPIS[p_, 1, 1]) >= 1 .And. Val(aPIS[p_, 1, 1]) <= 2
           cXML+= '</COFINSAliq></COFINS>'
         ElseIf Val(aPIS[p_, 1, 1]) == 3
            cXML+= '</COFINSQte></COFINS>'
         ElseIf Val(aPIS[p_, 1, 1]) >= 4 .And. Val(aPIS[p_, 1, 1]) <= 9
          cXML+= '</COFINSNT></COFINS>'
         ElseIf Val(aPIS[p_, 1, 1]) >= 49 .And. Val(aPIS[p_, 1, 1]) <= 99
           cXML+= '</COFINSOutr></COFINS>'
         EndIf
  endif
  cXML+= '</imposto>'
  If ! Empty(cDiscAdicional)
     cXml+= cDiscAdicional
  EndIf
  cXML+= '</det>'
Next
cXML+='<total><ICMSTot>'
For i=1 to Len(aTotais[1])
  if !Empt(aTotais[1,i,1])
    cXML+='<'+aTotais[1,i,2]+'>'+aTotais[1,i,1]+'</'+aTotais[1,i,2]+'>'
  endif
Next
cXML+='</ICMSTot></total>'
For i=1 to Len(aTransp[1])
  if !Empt(aTransp[1,i,3])
    nFimTagPai:=aTransp[1,i,4]
    cTagPai+="|"+StrZero(nFimTagPai,2)+aTransp[1,i,3]
    cXML+='<'+aTransp[1,i,3]+'>'
  endif
  if !Empt(aTransp[1,i,1])
    cXML+='<'+aTransp[1,i,2]+'>'+aTransp[1,i,1]+'</'+aTransp[1,i,2]+'>'
  endif
  if i==nFimTagPai
    nIni:=RAT("|",cTagPai)
    cTag:=Substr(cTagPai,nIni+1)
    cXML+='</'+SubStr(cTag,3)+'>'
    cTagPai:=SubStr(cTagPai,1,nIni-1)
    if nIni>1
      nIni:=RAT("|",cTagPai)
      nFimTagPai:=Val(Substr(cTagPai,nIni+1,2))
    else
      nFimTagPai:=0
    endif
    if SubStr(cTag,3)=="vol"
      cXML+='</transp>'
    endif
  endif
Next
if !Empt(aCobr[1,1,1])
  cXML+='<cobr>'
  For i=1 to Len(aCobr[1])
    if !Empt(aCobr[1,i,1])
      if StrZero(i,2) $ "-01-04-07-10-13-16-19-22-25-28"
        if i>2
          cXML+='</dup>'
        endif
        cXML+='<dup>'
      endif
      cXML+='<'+aCobr[1,i,2]+'>'+aCobr[1,i,1]+'</'+aCobr[1,i,2]+'>'
    endif
  Next
  cXML+='</dup></cobr>'
endif
if !Empt(cinfCpl) .or. !Empt(cinfAdFisco)
  cXML+='<infAdic>'
  if !Empt(cinfAdFisco)
    cXML+='<infAdFisco>'+cinfAdFisco+'</infAdFisco>'
  endif
  if !Empt(cinfCpl)
    cXML+='<infCpl>'+cinfCpl+'</infCpl>'
  endif
  cXML+='</infAdic>'
endif
cXML+='</infNFe>'
cXML+='<Signature xmlns="http://www.w3.org/2000/09/xmldsig#"><SignedInfo><CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/><SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" />'
cXML+='<Reference URI="#NFe'+cChave+'">'
cXML+='<Transforms><Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" /><Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" /></Transforms><DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />'
cXML+='<DigestValue>'+cdigVal+'</DigestValue></Reference></SignedInfo><SignatureValue></SignatureValue><KeyInfo></KeyInfo></Signature></NFe>'
cXML+='<protNFe versao="'+cVersao+'"><infProt>'
cXML+='<tpAmb>'+ctpAmb+'</tpAmb><verAplic>'+cverAplic+'</verAplic><chNFe>'+cChave+'</chNFe><dhRecbto>'+cdhRecbto+'</dhRecbto>'
cXML+='<nProt>'+cnProt+'</nProt><digVal>'+cdigVal+'</digVal><cStat>'+ccStat+'</cStat><xMotivo>'+cxMotivo+'</xMotivo>'
cXML+='</infProt></protNFe></nfeProc>'

cArqXml:=cChave+"-nfe.xml"
cIniFolder:=DiskName()+":\"+CurDir()+"\"
cArqXml:=PutFile ( {{'Arquivos xML','*.xml'}} , "Gravar Arquivo xML" , cIniFolder ,, cArqXml )

nArqHandle := FCREATE(cArqXml, 0 )
FWRITE(nArqHandle,cXML)
FCLOSE(nArqHandle)
MsgInfo("xML criado com sucesso!")
return Nil


Consulta optante do simples online

MensagemEnviado: 16 Nov 2016 23:41
por fladimir
Agradecemos Daniel,

A nível de testes, com a chave q o Wandereli disponibiliou, meus resultados foram os seguintes:

não vieram os lotes
não apareceu a Informação Adicional por Produto (InfAdProd)
PIS e o COFINS ok corrigidos
TAG Imposto parcialmente corrigida, faltou mostrar relativo a base e ICMS Retidos.
<vBCSTRet>13.69
<vICMSSTRet>0.61


Abaixo figura do XML q baixo via Dll q estou usando de base para comparação.

Consulta optante do simples online

MensagemEnviado: 17 Nov 2016 07:07
por Daniel
Aqui no meu teste deu correto

Consulta optante do simples online

MensagemEnviado: 18 Nov 2016 16:06
por Wanderlei
Valeu Daniel, coloquei aqui e baixou os lotes... :-Y

Consulta optante do simples online

MensagemEnviado: 24 Nov 2016 01:24
por fladimir
Refiz o processo e deu certo, devo ter deixado passar algo desapercebido, obrigado pela força.

Consulta optante do simples online

MensagemEnviado: 09 Dez 2016 12:16
por fladimir
Bom dia...

Esta ocorrendo algo estranho, vejam se entendem...

Ao lançar a entrada o sistema busca via código aki definido o xml ara importar, o primeiro item esta correto xml com DANFE, a partir do segundo item a ordem esta diferente do XML em relação ao DANFE e a partir do Nono item fica completamente estranho.

Item 2 diferente.png
Item 02 diferente no xml em relação ao DANFE


Item 9 em diante estranho.png
A partir do Item 9 fica estranho.


Segue chave da Nota: 35161157407397000158550010003616391617727938

Consulta optante do simples online

MensagemEnviado: 10 Dez 2016 19:14
por Daniel
Arrumei mais um pouco
pela a ultima chave esta bom agora

Consulta optante do simples online

MensagemEnviado: 10 Dez 2016 22:15
por fladimir
:{ :)Pos

Vlw Daniel

Consulta optante do simples online

MensagemEnviado: 11 Dez 2016 08:07
por rubens
Bom dia...

Vocês resolvem essa parada aí, uai... !!! E você para de achar erros Fladimir !!!! tá até parecendo JAVA... todo dia que entro aqui tem uma versão nova....
:)Pos
É lógico que é brincadeira... continua achando os erros e o Daniel corrigindo e nós usufruindo....
Corrigindo aqui...

Valeu, obrigado...

Rubens

Consulta optante do simples online

MensagemEnviado: 11 Dez 2016 12:55
por fladimir
kkkk

Só o Daniel e o Toledo pra entender a rotina... eu até q tento mas me perco... ai posto aki se o Daniel tiver misericórdia de nós ou alguma outra alma q entenda mais da rotina dele nos ajuda se não tamo "frito"... kkk

Mas tamo ai... eu tenho a Dll em paralelo para comparar, mas agora com esta ultima modificação praticamente não vejo diferença da Dll, nas chaves q temos testado.

[]´s

Consulta optante do simples online

MensagemEnviado: 14 Dez 2016 12:31
por JoséQuintas
Pessoal, usem compilação -w3 -es2.

Baixei essa última rotina.
É uma rotina extraordinária.
Mas ao compilar usando -w3 -es2....

declarei as variáveis do jeito que dava, no início do fonte:
MEMVAR ACOBR, I, cInfCpl, cInfAdFisco, cDigVal, cChave, cVerAplic, cTpAmb, c_Span
MEMVAR cVersao, cArqXml, cIniFolder, nArqHandle, cxMotivo, ccStat, cnProt, cPart_
MEMVAR cDhRecbto, cTag, cTagPai, nIni, nFimTagPai, aTotais, cDiscAdicional, nContador
MEMVAR P_, aDet, aPis, aTransp, aCofins, aIpi, lpOemTag, cTag_, aIcms, aTrib, nSoma
MEMVAR aMedicamentos, aEmit, aDest, aIde, c_Tag, cPar_, nTamTag, cPar1_, nFim, cFile
MEMVAR cParte, Contador, nTotPro, cHtml, cPart, cStringCookie, cViewState, cViewStateGenerator
MEMVAR nFim3, cHiddenToken, nIni4, cHtml1, nFim4, Txt_File, cCodigo, ceEventValidation
MEMVAR nIni1, nFim1, nIni2, nFim2, nIni3, cHiddenSom, cUrl, cUrl1, oServer, nInie, nFime, cUrl2
MEMVAR cMsgErro


Omiti as partes ref. minigui.

Restou este erro:

Compiling 'baixaimpnfe.prg'...
baixaimpnfe.prg(486) Warning W0032  Variable 'CRET' is assigned but not used in function 'CONTINUAR(125)'
1300
No code generated.


Isso se refere a esta linha:

         cRet := oInternet:ReadAll()


É o retorno de um dos acessos à internet, não usa pra nada, pelo menos aparentemente não.

É provável que o uso de PRIVATE e PUBLIC possa estar escondendo alguma coisa, mas deixou tudo esquisito.

Apenas como sugestão, Isolem as rotinas

- acesso à internet
- tratamento do retorno
assim não prende a lib especifica e da pra todo mundo testar/ajudar.

Consulta optante do simples online

MensagemEnviado: 14 Dez 2016 13:31
por JoséQuintas
Segue uma pequena mudança também como sugestão, que divide melhor as coisas.
Isso era uma única rotina enorme com IFs.
Sem ajuste de -w3 -es2.
Neste caso, acaba sendo interessante deixar isso pro final.

FUNCTION GeraBlocoIde( cParte )

   cPar_ := StrTran( cFile, Chr( 13 ) + Chr( 10 ), "" )
   cPar_ := StrTran( cPar_, Chr( 160 ), "" )
   nIni := At( '<legend>Informações Complementares de Interesse do Contribuinte</legend>', cPar_ )
   IF nIni > 0
      c_span := SubStr( cPar_, nIni + 70 )
      nIni   := At( '<div style="word-wrap: break-word">', c_span )
      c_span := SubStr( c_span, nIni + 35 )
      nIni   := At( '</div></span>', c_span )
      cinfCpl := AllTrim( SubStr( c_span, 1, nIni - 1 ) )
   ENDIF
   cPar_   := StrTran( cParte, Chr( 13 ) + Chr( 10 ), "" )
   cPar_   := StrTran( cPar_, Chr( 160 ), "" )
   nIni    := At( 'Situação Atual:', cPar_ )
   c_span  := SubStr( cPar_, nIni + 15 )
   nIni    := At( '(Ambiente de autorização:', c_span )
   cxMotivo := AllTrim( SubStr( c_span, 1, nIni - 1 ) )
   IF "AUTORIZADA" $ cxMotivo
      ccStat  := "100"
      cxMotivo := "Autorizado o uso da NF-e"
   ENDIF
   IF "CANCELADA" $ cxMotivo
      ccStat  := "101"
      cxMotivo := "Cancelamento de NF-e homologado"
   ENDIF
   nIni     := At( 'Data Inclusão AN</label></td></tr><tr><td><span>', cPar_ )
   c_span   := SubStr( cPar_, nIni + 50 )
   nIni     := At( '<span>', c_span ) + 6
   nTamTag  := At( '<input', c_span ) - nIni
   cnProt   := AllTrim( SubStr( c_span, nIni, nTamTag ) )
   c_span   := SubStr( c_span, nIni + nTamTag )
   nIni     := At( '<span>', c_span ) + 6
   c_span   := SubStr( c_span, nIni )
   nTamTag  := At( '</span>', c_span ) -1  // nIni
   cdhRecbto := AllTrim( SubStr( c_span, 1, nTamTag ) )
   cdhRecbto := SubStr( cdhRecbto, 7, 4 ) + "-" + SubStr( cdhRecbto, 4, 2 ) + "-" + Left( cdhRecbto, 2 ) + "T" + Right( cdhRecbto, 14 )
   nIni     := At( '<i>Digest</i> Value da NF-e', cPar_ )
   c_span   := SubStr( cPar_, nIni + 20 )
   nIni     := At( '<span>', c_span ) + 6
   nTamTag  := At( '</span>', c_span ) - nIni
   cdigVal  := AllTrim( SubStr( c_span, nIni, nTamTag ) )
   nIni     := At( 'Versão XML', cParte )
   c_span   := SubStr( cParte, nIni )
   nIni     := At( '<span>', c_span ) + 6
   nTamTag  := At( '</span>', c_span ) - nIni
   cVersao  := AllTrim( SubStr( c_span, nIni, nTamTag ) )
   FOR i := 1 TO Len( aIde[ 1 ] )
      cPar_ := cParte
      IF i == 12
         cPar_ := cFile
      ENDIF
      IF i == 13
         cPar_ := cFile
      ENDIF
      nIni  := At( aIde[ 1, i, 5 ], cPar_ )
      c_span := SubStr( cPar_, nIni )
      IF i != 16
         nIni   := At( '<span>', c_span ) + 6
         nTamTag := At( '</span>', c_span ) - nIni
         c_tag  := AllTrim( SubStr( c_span, nIni, nTamTag ) )
      ELSE
         nIni := At( '</legend>', c_span )
         c_tag := AllTrim( SubStr( c_span, 1, nIni - 1 ) )
         IF At( 'produção', c_tag ) > 0
            c_tag := "1"
         ELSE
            c_tag := "2"
         ENDIF
         ctpAmb := c_tag
      ENDIF
      IF i == 2
         c_tag := SubStr( cChave, 36, 8 )
      ENDIF
      IF i == 8 .OR. i == 9
         IF !Empt( c_tag )
            c_tag := SubStr( c_tag, 7, 4 ) + "-" + SubStr( c_tag, 4, 2 ) + "-" + Left( c_tag, 2 ) + "T" + SubStr( c_tag, 12 )
         ENDIF
      ENDIF
      IF i == 15
         c_tag := Right( c_tag, 1 )
      ENDIF
      IF aIde[ 1, i, 6 ] != 0
         IF aIde[ 1, i, 6 ] > 0
            c_tag := Left( c_tag, aIde[ 1, i, 6 ] )
         ELSE
            c_tag := SubStr( c_tag, Abs( aIde[ 1, i, 6 ] ) + 1 )
         ENDIF
      ENDIF
      aIde[ 1, i, 1 ] := c_tag
      IF i == 21
         cverAplic := c_tag
      ENDIF
   NEXT

   RETURN NIL

FUNCTION GeraBlocoEmit( cParte )

   FOR i := 1 TO Len( aEmit[ 1 ] )
      cPar_ := StrTran( cParte, Chr( 13 ) + Chr( 10 ), "" )
      cPar_ := StrTran( cPar_, Chr( 160 ), "" )
      nIni := At( aEmit[ 1, i, 5 ], cPar_ )
      IF nIni > 0
         c_span := SubStr( cPar_, nIni )
         nIni   := At( '<span>', c_span ) + 6
         nTamTag := At( '</span>', c_span ) - nIni
         c_tag := AllTrim( SubStr( c_span, nIni, nTamTag ) )
         IF i >= 1 .AND. i <= 2
            c_tag := StrTran( c_tag, ".", "" )
            c_tag := StrTran( c_tag, "/", "" )
            c_tag := StrTran( c_tag, "-", "" )
         ENDIF
         IF i >= 5 .AND. i <= 7
            nIni := At( ",,", c_tag )
            IF nIni == 0
               nIni := At( ",", c_tag )
            ENDIF
            IF i == 5
               c_tag := Left( c_tag, nIni - 1 )  // xlg
            ELSEIF i == 6
               c_tag := AllTrim( SubStr( c_tag, nIni + 2 ) )
               nIni := At( " ", c_tag )
               IF nIni > 0
                  c_tag := Left( c_tag, nIni - 1 ) // nro
               ENDIF
            ELSE
               c_tag := AllTrim( SubStr( c_tag, nIni + 2 ) )
               nIni := At( " ", c_tag )
               IF nIni > 0
                  c_tag := AllTrim( SubStr( c_tag, nIni + 1 ) ) // xcpl
               ELSE
                  c_tag := ""
               ENDIF
            ENDIF
         ENDIF
         IF i == 12
            c_tag := StrTran( c_tag, "-", "" )
         ENDIF
         IF i == 15
            c_tag := StrTran( c_tag, "(", "" )
            c_tag := StrTran( c_tag, ")", "" )
            c_tag := StrTran( c_tag, "-", "" )
         ENDIF
         IF aEmit[ 1, i, 6 ] != 0
            IF aEmit[ 1, i, 6 ] > 0
               c_tag := Left( c_tag, aEmit[ 1, i, 6 ] )
            ELSE
               c_tag := AllTrim( SubStr( c_tag, Abs( aEmit[ 1, i, 6 ] ) + 1 ) )
               c_tag := AllTrim( StrTran( c_tag, "-", "" ) )
            ENDIF
         ENDIF
         aEmit[ 1, i, 1 ] := c_tag
      ENDIF
   NEXT

   RETURN NIL

FUNCTION GeraBlocoDest( cParte )

   FOR i = 1 TO Len( aDest[ 1 ] )
      cPar_ := StrTran( cParte, Chr( 13 ) + Chr( 10 ), "" )
      cPar_ := StrTran( cPar_, Chr( 160 ), "" )
      nIni := At( aDest[ 1, i, 5 ], cPar_ )
      IF nIni > 0
         c_span := SubStr( cPar_, nIni )
         nIni   := At( '<span>', c_span ) + 6
         nTamTag := At( '</span>', c_span ) -nIni
         c_tag  := AllTrim( SubStr( c_span, nIni, nTamTag ) )
         IF i >= 1 .AND. i <= 2
            c_tag := StrTran( c_tag, ".", "" )
            c_tag := StrTran( c_tag, "/", "" )
            c_tag := StrTran( c_tag, "-", "" )
         ENDIF
         IF i >= 5 .AND. i <= 7
            nIni := At( ",,", c_tag )
            IF nIni == 0
               nIni := At( ",", c_tag )
            ENDIF
            IF i == 5
               c_tag := Left( c_tag, nIni - 1 )
            ELSEIF i == 6
               c_tag := AllTrim( SubStr( c_tag, nIni + 2 ) )
               nIni := At( " ", c_tag )
               IF nIni > 0
                  c_tag := Left( c_tag, nIni - 1 )
               ENDIF
            ELSE
               c_tag := AllTrim( SubStr( c_tag, nIni + 2 ) )
               nIni := At( " ", c_tag )
               IF nIni > 0
                  c_tag := AllTrim( SubStr( c_tag, nIni + 1 ) )
               ELSE
                  c_tag := ""
               ENDIF
            ENDIF
         ENDIF
         IF i == 12
            c_tag := StrTran( c_tag, "-", "" )
         ENDIF
         IF i == 15
            c_tag := StrTran( c_tag, "(", "" )
            c_tag := StrTran( c_tag, ")", "" )
            c_tag := StrTran( c_tag, "-", "" )
         ENDIF
         IF i == 16
            c_tag := AllTrim( Str( Val( c_tag ) ) )
         ENDIF
         IF aDest[ 1, i, 6 ] != 0
            IF aDest[ 1, i, 6 ] > 0
               c_tag := Left( c_tag, aDest[ 1, i, 6 ] )
            ELSE
               c_tag := AllTrim( SubStr( c_tag, Abs( aDest[ 1, i, 6 ] ) + 1 ) )
               c_tag := AllTrim( StrTran( c_tag, "-", "" ) )
            ENDIF
         ENDIF
         aDest[ 1, i, 1 ] := c_tag
      ENDIF
   NEXT

   RETURN NIL

FUNCTION GeraBlocoDet( cParte )

   cPar_ := StrTran( cParte, Chr( 13 ) + Chr( 10 ), "" )
   cParT_ := StrTran( cPar_, Chr( 160 ), "" )
   nIni := At( '<td class="fixo-prod-serv-numero"><span>1', cParT_ )
   nfim := At( '<td class="fixo-prod-serv-numero"><span>2', cParT_ ) - nIni
   IF nFim == 0
      cPar_ := SubStr( cParT_, nIni )
   ELSE
      cPar_ := SubStr( cParT_, nIni, nFim )
   ENDIF
   FOR p_ := 1 TO Len( aDet )
      FOR i := 1 TO Len( aDet[ p_ ] )
         nIni := At( aDet[ p_, i, 3 ], cPar_ )
         IF nIni > 0
            c_span := SubStr( cPar_, nIni )
            nIni   := At( '<span>', c_span ) + 6
            nTamTag := At( '</span>', c_span ) -nIni
            c_tag  := AllTrim( SubStr( c_span, nIni, nTamTag ) )
            IF aDet[ p_, i, 4 ] != 0
               IF aDet[ p_, i, 4 ] > 0
                  c_tag := Left( c_tag, aDet[ p_, i, 4 ] )
               ELSE
                  c_tag := AllTrim( SubStr( c_tag, Abs( aDet[ p_, i, 4 ] ) + 1 ) )
                  c_tag := AllTrim( StrTran( c_tag, "-", "" ) )
               ENDIF
            ENDIF
            IF i != 3 .AND. i != 1
               c_tag := StrTran( c_tag, ".",  "" )
               c_tag := StrTran( c_tag, ",", "." )
            ENDIF
            aDet[ p_, i, 1 ] := c_tag
         ENDIF
      NEXT

      FOR i := 1 TO Len( aTrib[ p_ ] )
         nIni := At( aTrib[ p_, i, 3 ], cPar_ )
         IF nIni > 0
            c_span := SubStr( cPar_, nIni )
            nIni   := At( '<span>', c_span ) + 6
            nTamTag := At( '</span>', c_span ) - nIni
            c_tag  := AllTrim( SubStr( c_span, nIni, nTamTag ) )
            IF aTrib[ p_, i, 4 ] != 0
               IF aTrib[ p_, i, 4 ] > 0
                  c_tag := Left( c_tag, aTrib[ p_, i, 4 ] )
               ELSE
                  c_tag := AllTrim( SubStr( c_tag, Abs( aTrib[ p_, i, 4 ] ) + 1 ) )
                  c_tag := AllTrim( StrTran( c_tag, "-", "" ) )
               ENDIF
            ENDIF
            c_tag := StrTran( c_tag, ".", "" )
            c_tag := StrTran( c_tag, ",", "." )
            aTrib[ p_, i, 1 ] := c_tag
         ENDIF
      NEXT

      nIni := At( '<fieldset><legend>ICMS Normal e ST</legend>', cPar_ )
      IF nIni > 0
         cPar1_ := SubStr( cPar_, nIni, At( '<legend class="toggle">PIS</legend>', cPar_ ) -nIni )
         FOR i := 1 TO Len( aICMS[ p_ ] )
            nIni := At( aICMS[ p_, i, 3 ], cPar1_ )
            IF nIni > 0
               c_span := SubStr( cPar1_, nIni )
               nIni   := At( '<span>', c_span ) + 6
               nTamTag := At( '</span>', c_span ) - nIni
               c_tag  := AllTrim( SubStr( c_span, nIni, nTamTag ) )
               IF aICMS[ p_, i, 4 ] != 0
                  IF aICMS[ p_, i, 4 ] > 0
                     c_tag := Left( c_tag, aICMS[ p_, i, 4 ] )
                  ELSE
                     c_tag := AllTrim( SubStr( c_tag, Abs( aICMS[ p_, i, 4 ] ) + 1 ) )
                     c_tag := AllTrim( StrTran( c_tag, "-", "" ) )
                  ENDIF
               ENDIF
               c_tag := StrTran( c_tag, ".",  "" )
               c_tag := StrTran( c_tag, ",", "." )
               aICMS[ p_, i, 1 ] := c_tag
            ENDIF
         NEXT
      ENDIF

      nIni := At( '<legend>Imposto Sobre Produtos Industrializados</legend>', cPar_ )
      IF nIni > 0
         cPar1_ := SubStr( cPar_, nIni, At( '<legend class="toggle">PIS</legend>', cPar_ ) -nIni )
         FOR i := 1 TO Len( aIPI[ p_ ] )
            nIni := At( aIPI[ p_, i, 3 ], cPar1_ )
            IF nIni > 0
               c_span := SubStr( cPar1_, nIni )
               nIni   := At( '<span>', c_span ) + 6
               nTamTag := At( '</span>', c_span ) - nIni
               c_tag  := AllTrim( SubStr( c_span, nIni, nTamTag ) )
               IF aIPI[ p_, i, 4 ] != 0
                  IF aIPI[ p_, i, 4 ] > 0
                     c_tag := Left( c_tag, aIPI[ p_, i, 4 ] )
                  ELSE
                     c_tag := AllTrim( SubStr( c_tag, Abs( aIPI[ p_, i, 4 ] ) + 1 ) )
                     c_tag := AllTrim( StrTran( c_tag, "-", "" ) )
                  ENDIF
               ENDIF
               c_tag := StrTran( c_tag, ".", "" )
               c_tag := StrTran( c_tag, ",", "." )
               aIPI[ p_, i, 1 ] := c_tag
            ENDIF
         NEXT
      ENDIF

      nIni := At( '<legend class="toggle">PIS</legend>', cPar_ )
      IF nIni > 0
         cPar1_ := SubStr( cPar_, nIni, At( '<legend class="toggle">COFINS</legend>', cPar_ ) -nIni )
         FOR i := 1 TO Len( aPIS[ p_ ] )
            nIni := At( aPIS[ p_, i, 3 ], cPar1_ )
            IF nIni > 0
               c_span := SubStr( cPar1_, nIni )
               nIni   := At( '<span>', c_span ) + 6
               nTamTag := At( '</span>', c_span ) - nIni
               c_tag  := AllTrim( SubStr( c_span, nIni, nTamTag ) )
               IF aPIS[ p_, i, 4 ] != 0
                  IF aPIS[ p_, i, 4 ] > 0
                     c_tag := Left( c_tag, aPIS[ p_, i, 4 ] )
                  ELSE
                     c_tag := AllTrim( SubStr( c_tag, Abs( aPIS[ p_, i, 4 ] ) + 1 ) )
                     c_tag := AllTrim( StrTran( c_tag, "-", "" ) )
                  ENDIF
               ENDIF
               c_tag := StrTran( c_tag, ".",  "" )
               c_tag := StrTran( c_tag, ",", "." )
               aPIS[ p_, i, 1 ] := c_tag
            ENDIF
         NEXT
      ENDIF

      nIni := At( '<legend class="toggle">COFINS</legend>', cPar_ )
      IF nIni > 0
         cPar1_ := SubStr( cPar_, nIni )
         FOR i := 1 TO Len( aCOFINS[ p_ ] )
            nIni  := At( aCOFINS[ p_, i, 3 ], cPar1_ )
            IF nIni > 0
               c_span := SubStr( cPar1_, nIni )
               nIni   := At( '<span>', c_span ) + 6
               nTamTag := At( '</span>', c_span ) - nIni
               c_tag  := AllTrim( SubStr( c_span, nIni, nTamTag ) )
               IF aCOFINS[ p_, i, 4 ] != 0
                  IF aCOFINS[ p_, i, 4 ] > 0
                     c_tag := Left( c_tag, aCOFINS[ p_, i, 4 ] )
                  ELSE
                     c_tag := AllTrim( SubStr( c_tag, Abs( aCOFINS[ p_, i, 4 ] ) + 1 ) )
                     c_tag := AllTrim( StrTran( c_tag, "-", "" ) )
                  ENDIF
               ENDIF
               c_tag := StrTran( c_tag, ".",  "" )
               c_tag := StrTran( c_tag, ",", "." )
               aCOFINS[ p_, i, 1 ] := c_tag
            ENDIF
         NEXT
      ENDIF

      nIni := At( '<legend>Detalhamento específico dos medicamentos</legend>', cPar_ )
      IF nIni > 0
         cPar1_ := SubStr( cPar_, nIni )
         FOR i := 1 TO Len( aMedicamentos[ p_ ] )
            nIni := At( aMedicamentos[ p_, i, 3 ], cPar1_ )
            IF nIni > 0
               c_span := SubStr( cPar1_, nIni )
               nIni   := At( '<span>', c_span ) + 6
               nTamTag := At( '</span>', c_span ) - nIni
               c_tag  := AllTrim( SubStr( c_span, nIni, nTamTag ) )
               IF aMedicamentos[ p_, i, 4 ] != 0
                  IF aMedicamentos[ p_, i, 4 ] > 0
                     c_tag := Left( c_tag, aMedicamentos[ p_, i, 4 ] )
                  ELSE
                     c_tag := AllTrim( SubStr( c_tag, Abs( aMedicamentos[ p_, i, 4 ] ) + 1 ) )
                     c_tag := AllTrim( StrTran( c_tag, "-", "" ) )
                  ENDIF
               ENDIF
               IF i != 6
                  c_tag := StrTran( c_tag, ".",  "" )
                  c_tag := StrTran( c_tag, ",", "." )
               ENDIF
               IF StrZero( i, 2 ) $ "-03-04"
                  c_tag := SubStr( c_tag, 7, 4 ) + "-" + SubStr( c_tag, 4, 2 ) + "-" + Left( c_tag, 2 )
               ENDIF
               aMedicamentos[ p_, i, 1 ] := c_tag
            ENDIF
         NEXT
      ENDIF
      IF p_ == ( Len( aDet ) -1 )
         nIni := At( '<td class="fixo-prod-serv-numero"><span>' + AllTrim( Str( p_ + 1 ) ), cParT_ )
         cPar_ := SubStr( cParT_, nIni )
      ELSE
         nIni := At( '<td class="fixo-prod-serv-numero"><span>' + AllTrim( Str( p_ + 1 ) ), cParT_ )
         nFim := At( '<td class="fixo-prod-serv-numero"><span>' + AllTrim( Str( p_ + 2 ) ), cParT_ ) - nIni
         IF nFim == 0
            cPar_ := SubStr( cParT_, nIni )
         ELSE
            cPar_ := SubStr( cParT_, nIni, nFim )
         ENDIF
      ENDIF
   NEXT

   RETURN NIL

FUNCTION GeraBlocoTotais( cParte )

   FOR i := 1 TO Len( aTotais[ 1 ] )
      cPar_ := StrTran( cParte, Chr( 13 ) + Chr( 10 ), "" )
      cPar_ := StrTran( cPar_, Chr( 160 ), "" )
      nIni := At( aTotais[ 1, i, 3 ], cPar_ )
      IF nIni > 0
         c_span := SubStr( cPar_, nIni )
         nIni   := At( '<span>', c_span ) + 6
         nTamTag := At( '</span>', c_span ) -nIni
         c_tag  := AllTrim( SubStr( c_span, nIni, nTamTag ) )
         c_tag  := StrTran( c_tag, ".", "" )
         c_tag  := StrTran( c_tag, ",", "." )
         aTotais[ 1, i, 1 ] := c_tag
      ENDIF
   NEXT

   RETURN NIL

FUNCTION GeraBlocoTransp( cParte )

   FOR i := 1 TO Len( aTransp[ 1 ] )
      cPar_ := StrTran( cParte, Chr( 13 ) + Chr( 10 ), "" )
      cPar_ := StrTran( cPar_, Chr( 160 ), "" )
      nIni := At( aTransp[ 1, i, 5 ], cPar_ )
      IF nIni > 0
         c_span := SubStr( cPar_, nIni )
         nIni   := At( '<span>', c_span ) + 6
         nTamTag := At( '</span>', c_span ) -nIni
         c_tag  := AllTrim( SubStr( c_span, nIni, nTamTag ) )
         IF i >= 2 .AND. i <= 3
            c_tag := StrTran( c_tag, ".", "" )
            c_tag := StrTran( c_tag, "/", "" )
            c_tag := StrTran( c_tag, "-", "" )
         ENDIF
         IF aTransp[ 1, i, 6 ] != 0
            IF aTransp[ 1, i, 6 ] > 0
               c_tag := Left( c_tag, aTransp[ 1, i, 6 ] )
            ELSE
               c_tag := AllTrim( SubStr( c_tag, Abs( aTransp[ 1, i, 6 ] ) + 1 ) )
               c_tag := AllTrim( StrTran( c_tag, "-", "" ) )
            ENDIF
         ENDIF
         aTransp[ 1, i, 1 ] := c_tag
      ENDIF
   NEXT

   RETURN NIL

FUNCTION GeraBlocoCobr( cParte )

   cPar_ := StrTran( cParte, Chr( 13 ) + Chr( 10 ), "" )
   cPar_ := StrTran( cPar_, Chr( 160 ), "" )
   FOR i := 1 TO Len( aCobr[ 1 ] )
      nIni := At( '<span>', cPar_ )
      IF nIni > 0
         cPar_ := SubStr( cPar_, nIni + 6 )
         nTamTag := At( '</span>', cPar_ ) -1
         c_tag  := AllTrim( SubStr( cPar_, 1, nTamTag ) )
         c_tag  := StrTran( c_tag, ".", "" )
         c_tag  := StrTran( c_tag, ",", "." )
         IF StrZero( i, 2 ) $ "-02-05-08-11-14-17-20-23-26-29"
            c_tag := SubStr( c_tag, 7, 4 ) + "-" + SubStr( c_tag, 4, 2 ) + "-" + Left( c_tag, 2 )
         ENDIF
         aCobr[ 1, i, 1 ] := c_tag
      ELSE
         EXIT
      ENDIF
   NEXT

   RETURN NIL

Consulta optante do simples online

MensagemEnviado: 14 Dez 2016 17:00
por Daniel
Ola José Quintas
Ficou melhor de entender.

cRet := oInternet:ReadAll()
esta linha esqueci de apagar, ela era usada para gravar em arquivo
Grato pelo colaboração

Consulta optante do simples online

MensagemEnviado: 14 Dez 2016 20:32
por Daniel
Ola
Segue ele mudado conforme o José falou e pronto para -w3 -es2
Usando as parte que ele passou

Consulta optante do simples online

MensagemEnviado: 14 Dez 2016 22:02
por fladimir
Show de bola...

:{ :-Y

Vlw

Consulta optante do simples online

MensagemEnviado: 15 Dez 2016 08:55
por rubens
E lá vamos nós de novo...
E a culpa dessa vez não foi sua Fladimir... !!!

O negócio vai só ficando high-tech...

Parabéns... pessoal...

Obg

:D

Consulta optante do simples online

MensagemEnviado: 15 Dez 2016 10:00
por fladimir
Verdade... kkk

Da até pra virar parte do projeto hbNFe/SefazClass talvez... o q acham ou se não montar um para Consultas CPF/CNPJ/NFE/Download NFe e depois daria pra dar continuidade Download CTe

Consulta optante do simples online

MensagemEnviado: 03 Jan 2017 10:28
por ctoas
Bom dia e um ótimo ano novo a todos.

Estou tentando converter a função que busca os dados do CNPJ para Fivewin, mas nunca fui fundo no que diz respeito a WEB com o Fivewin e estou tomando uma surra. O que acontece é que sempre o retorno vem vazio.

Alguém poderia dar uma força?

Agradeço desde já.

#INCLUDE "MAXXTECH.CH"  
#INCLUDE "IMAGE.CH"
#INCLUDE "FILEIO.CH"

********************************************************************************
FUNCTION DADOSCNPJ( cCNPJ )
********************************************************************************

   PRIVATE cCAPTCHA    := SPACE(06)
   PRIVATE cTIPO       := SPACE(10)
   PRIVATE cABERTURA   := SPACE(10)
   PRIVATE cFANTASIA   := SPACE(44)
   PRIVATE cRSOCIAL    := SPACE(78)
   PRIVATE cENDERECO   := SPACE(70)
   PRIVATE nNUMERO     := 0
   PRIVATE cCOMPLEMENT := SPACE(30)
   PRIVATE cBAIRRO     := SPACE(30)
   PRIVATE cCIDADE     := SPACE(30)
   PRIVATE cUF         := SPACE(02)
   PRIVATE cCEP        := SPACE(09)
   PRIVATE cSITUACAO   := SPACE(20)
   
   PRIVATE oBtnCANCELAR, oBtnCONFIRMAR, oSayCNPJ, oSayCNPJ2
   PRIVATE oSayNASCIMENTO2, oSayCAPTCHA, oGetCAPTCHA, oBtnPESQUISACPF
   PRIVATE oGrpDADOSCNPJ, oImgCAPTCHA, oGrpCLIENTE, oGrpCAPTCHA, oGrpDADOS
   PRIVATE oSayNOME, oGetNOME, oSayABERTURA, oGetABERTURA, oSayFANTASIA
   PRIVATE oGetFANTASIA, oSayENDERECO, oGetENDERECO, oSayCOMPLEMENT, oGetCOMPLEMENT
   PRIVATE oSayRSOCIAL, oGetRSOCIAL, oSayNUMERO, oGetNUMERO
   
   PRIVATE cURL  := "http://www.receita.fazenda.gov.br/pessoajuridica/cnpj/cnpjreva/valida.asp"
   PRIVATE cURLC := "http://www.receita.fazenda.gov.br/Pessoajuridica/cnpj/cnpjreva/captcha/gerarCaptcha.asp?"
   PRIVATE cURL2 := "http://www.receita.fazenda.gov.br/Pessoajuridica/cnpj/cnpjreva/Cnpjreva_solicitacao2.asp?"
   PRIVATE cStringCookie, cViewState, cEeventValidation, cHiddenField, cCookie, cCookie1   
   
   DEFINE CURSOR oCurHAND RESOURCE "MAO"
   
   DEFINE DIALOG oDlgCNPJ FROM 0,0 TO 670,860 FONT TTF_COURIER_NEW PIXEL STYLE nOr( WS_POPUP|DS_MODALFRAME|WS_VISIBLE )
   
   @ 000,000 TITLE oTitle2 OF oDlgCNPJ SIZE 349,28 NOBORDER PIXEL
   oTitle2:aGrdBack := { { 1, 8388608, 8388608 }, { 0.5, 16312263, 16770250 } }
   oTitle2:nShadow  := 0
   
   @ 013,020 TITLEIMG OF oTitle2 BITMAP "TIT_CLIENTES" SIZE 052,052
         
   @ 020,090 TITLETEXT OF oTitle2 TEXT "Consulta Cadastro de CNPJ" COLOR 16777215 FONT ARIAL14B
   @ 040,090 TITLETEXT OF oTitle2 TEXT "CNPJ" COLOR 14591785 FONT ARIAL16B

   @ 002,360 BITMAP oBtnCANCELAR RESOURCE "BTN_CANCELAR" SIZE 026,026 OF oDlgCNPJ PIXEL NOBORDER
   TOOLTIPNEW(oBtnCANCELAR,"Cancelar consulta do CNPJ","Cancelar")
   oBtnCANCELAR:oCursor := oCurHAND   
   oBtnCANCELAR:bLClicked := {||lSair2:=.T.,oDlgCNPJ:END()}
   
   @ 002,395 BITMAP oBtnCONFIRMAR RESOURCE "BTN_CONFIRMAR" SIZE 026,026 OF oDlgCNPJ PIXEL NOBORDER
     TOOLTIPNEW(oBtnCONFIRMAR,"Confirmar inclusão dos dados","Confirmar")
     oBtnCONFIRMAR:bLClicked := {||lSair2:=.T.,oDlgCNPJ:END()}
   oBtnCONFIRMAR:oCursor = oCurHAND
   
   @ 045,008 SAY oSayCNPJ PROMPT "NÚMERO CNPJ" OF oDlgCNPJ SIZE 120,017 PIXEL TRANSPARENT FONT TTF_COURIER_RECEITA ; oSayCNPJ:nStyle := nOR( oSayCNPJ:nStyle, SS_CENTERIMAGE )
   @ 045,095 SAY oSayCNPJ2 VAR TRANSFORM(cCNPJ,"@R 99.999.999/9999-99") OF oDlgCNPJ SIZE 135,017 PIXEL TRANSPARENT FONT TTF_COURIER_RECEITA COLORS nRGB(000,000,255) ; oSayCNPJ2:nStyle := nOR( oSayCNPJ2:nStyle, SS_CENTERIMAGE )

   @ 068,008 SAY oSayCAPTCHA PROMPT "CARACTERES CAPTCHA" OF oDlgCNPJ SIZE 140,017 PIXEL TRANSPARENT FONT TTF_COURIER_RECEITA ; oSayCAPTCHA:nStyle := nOR( oSayCAPTCHA:nStyle, SS_CENTERIMAGE )
   @ 068,158 GET oGetCAPTCHA VAR cCAPTCHA PICTURE "!!!!!!" OF oDlgCNPJ SIZE 050,017 PIXEL COLORS nRGB(000,000,255) FONT TTF_COURIER_RECEITA
   
   @ 068,212 BTNBMP oBtnPESQUISACPF RESOURCE "BTN_PESQUISA_RECEITA" OF oDlgCNPJ SIZE 20,20 PIXEL ACTION CONSULTA(cCNPJ, cCaptcha, cCookie1) NOBORDER TRANSPARENT
   TOOLTIPNEW(oBtnPESQUISACPF,"Pesquisar dados no site da Receita Federal","Pesquisar")   
   oBtnPESQUISACPF:oCursor = oCurHAND
   oBtnPESQUISACPF:nStyle := nAnd( oBtnPESQUISACPF:nStyle, nNot( WS_TABSTOP ) )       
   
   @ 033,003 GROUP oGrpDADOSCNPJ OF oDlgCNPJ COLOR nRGB(000,000,255) SIZE 230,060 PIXEL TRANSPARENT
   
   @ 040,241 IMAGE oImgCAPTCHA SIZE 185,052 FILENAME "CAPTCHA\CAPTCHA.PNG" OF oDlgCNPJ PIXEL ADJUST NOBORDER
   TOOLTIPNEW(oImgCAPTCHA,"Clique para trocar a imagem","Captcha")
   oImgCAPTCHA:oCursor := oCurHAND   
   oImgCAPTCHA:bLClicked := {||MAXXINFO()}     

   @ 033,238 GROUP oGrpCAPTCHA OF oDlgCNPJ COLOR nRGB(000,000,255) SIZE 190,060 PIXEL TRANSPARENT   

   @ 095,003 GROUP oGrpDADOS PROMPT "Dados Recebidos da Receita" OF oDlgCNPJ COLOR nRGB(000,000,255) SIZE 424,086 PIXEL TRANSPARENT   
   
   @ 105,008 SAY oSayTIPO PROMPT "Tipo" OF oDlgCNPJ SIZE 080,012 PIXEL TRANSPARENT ; oSayTIPO:nStyle := nOR( oSayTIPO:nStyle, SS_CENTERIMAGE )
   @ 105,030 GET oGetTIPO VAR cTIPO PICTURE "@!" OF oDlgCNPJ SIZE 050,012 PIXEL COLORS nRGB(000,000,255)

   @ 105,085 SAY oSayABERTURA PROMPT "Abertura" OF oDlgCNPJ SIZE 080,012 PIXEL TRANSPARENT ; oSayABERTURA:nStyle := nOR( oSayABERTURA:nStyle, SS_CENTERIMAGE )
   @ 105,125 GET oGetABERTURA VAR cABERTURA PICTURE "@!" OF oDlgCNPJ SIZE 050,012 PIXEL COLORS nRGB(000,000,255)

   @ 105,180 SAY oSayFANTASIA PROMPT "Fantasia" OF oDlgCNPJ SIZE 080,012 PIXEL TRANSPARENT ; oSayFANTASIA:nStyle := nOR( oSayFANTASIA:nStyle, SS_CENTERIMAGE )
   @ 105,220 GET oGetFANTASIA VAR cFANTASIA PICTURE "@!" OF oDlgCNPJ SIZE 203,012 PIXEL COLORS nRGB(000,000,255)

   @ 120,008 SAY oSayRSOCIAL PROMPT "Razão Social" OF oDlgCNPJ SIZE 080,012 PIXEL TRANSPARENT ; oSayRSOCIAL:nStyle := nOR( oSayRSOCIAL:nStyle, SS_CENTERIMAGE )
   @ 120,065 GET oGetRSOCIAL VAR cRSOCIAL PICTURE "@!" OF oDlgCNPJ SIZE 358,012 PIXEL COLORS nRGB(000,000,255)

   @ 135,008 SAY oSayENDERECO PROMPT "Endereço" OF oDlgCNPJ SIZE 070,012 PIXEL TRANSPARENT ; oSayENDERECO:nStyle := nOR( oSayENDERECO:nStyle, SS_CENTERIMAGE )
   @ 135,047 GET oGetENDERECO VAR cENDERECO PICTURE "@!" OF oDlgCNPJ SIZE 320,012 PIXEL COLORS nRGB(000,000,255)

   @ 135,370 SAY oSayNUMERO PROMPT "N°" OF oDlgCNPJ SIZE 020,012 PIXEL TRANSPARENT ; oSayNUMERO:nStyle := nOR( oSayNUMERO:nStyle, SS_CENTERIMAGE )
   @ 135,382 GET oGetNUMERO VAR nNUMERO PICTURE "99999999" OF oDlgCNPJ SIZE 041,012 PIXEL COLORS nRGB(000,000,255)

   @ 150,008 SAY oSayCOMPLEMENT PROMPT "Complemento" OF oDlgCNPJ SIZE 150,012 PIXEL TRANSPARENT ; oSayCOMPLEMENT:nStyle := nOR( oSayCOMPLEMENT:nStyle, SS_CENTERIMAGE )
   @ 150,060 GET oGetCOMPLEMENT VAR cCOMPLEMENT PICTURE "@!" OF oDlgCNPJ SIZE 140,012 PIXEL COLORS nRGB(000,000,255)

   @ 150,252 SAY oSayBAIRRO PROMPT "Bairro" OF oDlgCNPJ SIZE 150,012 PIXEL TRANSPARENT ; oSayBAIRRO:nStyle := nOR( oSayBAIRRO:nStyle, SS_CENTERIMAGE )
   @ 150,283 GET oGetBAIRRO VAR cBAIRRO PICTURE "@!" OF oDlgCNPJ SIZE 140,012 PIXEL COLORS nRGB(000,000,255)

   @ 165,008 SAY oSayCIDADE PROMPT "Cidade" OF oDlgCNPJ SIZE 150,012 PIXEL TRANSPARENT ; oSayCIDADE:nStyle := nOR( oSayCIDADE:nStyle, SS_CENTERIMAGE )
   @ 165,039 GET oGetCIDADE VAR cCIDADE PICTURE "@!" OF oDlgCNPJ SIZE 140,012 PIXEL COLORS nRGB(000,000,255)

   @ 165,184 SAY oSayUF PROMPT "UF" OF oDlgCNPJ SIZE 150,012 PIXEL TRANSPARENT ; oSayUF:nStyle := nOR( oSayUF:nStyle, SS_CENTERIMAGE )
   @ 165,198 GET oGetUF VAR cUF PICTURE "!!" OF oDlgCNPJ SIZE 014,012 PIXEL COLORS nRGB(000,000,255)

   @ 165,218 SAY oSayCEP PROMPT "CEP" OF oDlgCNPJ SIZE 150,012 PIXEL TRANSPARENT ; oSayCEP:nStyle := nOR( oSayCEP:nStyle, SS_CENTERIMAGE )
   @ 165,236 GET oGetCEP VAR cCEP PICTURE "@R 99999-999" OF oDlgCNPJ SIZE 046,012 PIXEL COLORS nRGB(000,000,255)

   @ 165,288 SAY oSaySITUACAO PROMPT "Situação" OF oDlgCNPJ SIZE 050,012 PIXEL TRANSPARENT ; oSaySITUACAO:nStyle := nOR( oSaySITUACAO:nStyle, SS_CENTERIMAGE )
   @ 165,327 GET oGetSITUACAO VAR cSITUACAO PICTURE "@!" OF oDlgCNPJ SIZE 096,012 PIXEL COLORS nRGB(000,000,255)

   @ 190,008 ACTIVEX oACTIVEX OF oDlgCNPJ PROGID "Shell.Explorer.2" SIZE 413,138
   
   ACTIVATE DIALOG oDlgCNPJ CENTERED ON PAINT PINTAFUNDO(oDlgCNPJ, hDC) ON INIT PEGACAPTCHA()
   
RETURN NIL   

***************************************************************************************************
STATIC FUNCTION PEGACAPTCHA()
***************************************************************************************************

   LOCAL oSERVER, cRETORNO := "*ERRO*", cMSGERRO:= ''

   Try
      oSERVER:= CreateObject( "MSXML2.ServerXMLHTTP.5.0")
   Catch
      MAXXINFO('Erro na Criação do Serviço')
      RETURN .F.
   End
   
   Try
      oSERVER:Open( "GET", cUrlc, .f. )
      oSERVER:SetRequestHeader("Content-Type", "application/x-www-form-urlencoded" )
      oSERVER:SetRequestHeader("Connection", "keep-alive" )
      oSERVER:Send()
      oSERVER:WaitForResponse( 5000 )
   Catch
      MAXXINFO('Erro na Conexão com Site')
      RETURN .F.
   End

   c := oSERVER:getResponseHeader("Set-Cookie")
   cCOOKIE1:= SUBSTR(c, 1, At(';', c) -1)
   cHTML:= oSERVER:ResponseBody
   TXT_FILE := FCREATE("CAPTCHA\CAPTCHA.PNG", 0)
   
   IF !FERROR() = 0
      MAXXINFO("Erro de criacao do arquivo imagem " + STR(FERROR(), 3, 0))
      RETURN NIL
   ENDIF
   
   FWRITE(TXT_FILE, cHTML)
   FCLOSE(TXT_FILE)
   oSERVER:SetProperty('F_Cnpj', 'image_1', 'Picture', 'Captcha.png')
   
RETURN (cCOOKIE1)

***************************************************************************************************
STATIC FUNCTION CONSULTA(cCNPJ, cCAPTCHA, cCOOK1)
***************************************************************************************************

   LOCAL oSERVER, c, cQUERY
   
   Try
      oSERVER:= CreateObject("MSXML2.ServerXMLHTTP.5.0")
   Catch
      MAXXINFO('Erro na Criação do Serviço')
      RETURN .F.
   End
   
   Try
      oSERVER:Open( "GET", cUrl2, .f. )
      oSERVER:SetRequestHeader( "Content-Type", "application/x-www-form-urlencoded" )
      oSERVER:SetRequestHeader( "Connection", "keep-alive" )
      oSERVER:SetRequestHeader("Cookie", cCook1)
      oSERVER:Send()
      oSERVER:WaitForResponse( 5000 )
   Catch
      MAXXINFO('Erro na Conexão com o Site')
      RETURN .F.
   End
   
   c := oSERVER:getResponseHeader("Set-Cookie")
   
   cCookie:= SUBSTR(c, 1, AT(';', c) -1)

   cQuery:= "origem=comprovante&" +;
            "cnpj=" +  cCnpj +;
            "&txtTexto_captcha_serpro_gov_br=" + cCaptcha +;
            "&submit1=Consultar" +;
            "&search_type=cnpj"            

   Try
      oSERVER:= CreateObject("MSXML2.ServerXMLHTTP.5.0")
   Catch
      MAXXINFO('Erro na Criação do Serviço')
      RETURN .F.
   End

   Try
      oSERVER:Open( "POST", cUrl, .f. )
      oSERVER:SetRequestHeader("Content-Type", "application/x-www-form-urlencoded" )
      oSERVER:SetRequestHeader("Connection", "keep-alive" )
      oSERVER:SetRequestHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8")
      oSERVER:SetRequestHeader("Referer", "http://www.receita.fazenda.gov.br/PessoaJuridica/CNPJ/cnpjreva/Cnpjreva_Solicitacao2.asp")
      oSERVER:SetRequestHeader("Accept-Encoding", "gzip, deflate")
      oSERVER:SetRequestHeader("Accept-Language", "pt-BR,pt;q=0.8,en-US;q=0.5,en;q=0.3")
      oSERVER:SetRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; rv:44.0) Gecko/20100101 Firefox/44.0")
      oSERVER:SetRequestHeader("Cookie", cCook1)
      oSERVER:SetRequestHeader("Cookie", 'flag=1')
      oSERVER:Send(cQuery)
      oSERVER:WaitForResponse( 5000 )   
   Catch
      MAXXINFO('Erro na Conexão com o Site')
      RETURN .F.
   End
   
   cRETORNO:= oSERVER:ResponseBody
   
   * Elemina a parte de baixa da consulta
   nINI1:= AT('<!-- Fim da tabela principal -->',  cRETORNO) - 1
   nFIM1:= AT('</body>', cRETORNO)
   cPARTE:= SUBSTR(cRETORNO, 1, nINI1)
   cRETORNO:= cPARTE + SUBSTR(cRETORNO, nFim1)

   TXT_FILE:=FCREATE("Resultado.html", 0)
   IF !FError() = 0
      MAXXINFO("Erro de criação do arquivo de Imagem " + STR(FERROR(), 3, 0))
      RETURN .F.
   ENDIF
   
   FWRITE(TXT_FILE, cRETORNO)
   FCLOSE(TXT_FILE)
   oACTIVEX := F_Cnpj.Test.Object
   oACTIVEX:Navigate(DiskName() +':' + DirName(DiskName()) + "\Resultado.html")
   
RETURN NIL

***************************************************************************************************
STATIC FUNCTION PINTAFUNDO(oDlg, hDC, aRect)
***************************************************************************************************

   ***** POSIÇÕES FILLRECT
   ***** aRect = {nTop, nLeft, nBottom, nRight}
   LOCAL oBrush

     DEFAULT aRect := {0,700,059,902}

   DEFINE BRUSH oBrush COLOR RGB(000,000,128)
   FILLRECT( hDC, aRect, oBrush:hBrush )
                                                      
RETURN NIL

Consulta optante do simples online

MensagemEnviado: 04 Jan 2017 14:24
por Itamar M. Lins Jr.
Ola!
Aqui comigo, este ultimo exemplo não está rodando. Depois das alterações do José Quintas, tem uns BUG´s eu até esqueci quais...
Parece que ninguém compilou está ultima atualização.
Mudei para rodar com a Hwgui, mas não tive tempo de terminar.

Saudações,
Itamar M. Lins Jr.

Consulta optante do simples online

MensagemEnviado: 04 Jan 2017 17:55
por ctoas
Opa Itamar, bom ano novo...

Bom, a ultima postagem que fizeram com a MiniGui eu compilei e esta rodando perfeitamente....

Consulta optante do simples online

MensagemEnviado: 04 Jan 2017 18:20
por Itamar M. Lins Jr.
Oi!
Fiz umas correções, poucas, agora esta adaptado para Hwgui 2.20 depois posto os fontes.

Saudações,
Itamar M. Lins Jr.

Consulta optante do simples online

MensagemEnviado: 04 Jan 2017 19:17
por ctoas
Legal Itamar, valeu pela força....

Depois posto em fivewin também.

[]'s

Consulta optante do simples online

MensagemEnviado: 05 Jan 2017 21:42
por Daniel
Ola
Nova consulta do CNPJ em MIniGui
falta a função importa

Consulta optante do simples online

MensagemEnviado: 23 Jan 2017 01:13
por rubens
Olá...

Daniel compilei com essa última versão, mas não gerou os produtos...

Segue o xml que baixou...

Rubens


Consulta optante do simples online

MensagemEnviado: 23 Jan 2017 01:42
por rubens
Para quem quer baixar o xml no seu sistema mas ainda não compila pela Minigui... gerei um executável que pode receber a chave e o path para salvar o xml. Pode ser chamado direto do seu programa.
Basta usar o seguinte comando que vai abrir o executável. Neste exemplo está sendo enviado uma chave e o path..
HB_RUN( 'START impnfe.exe 51161007407005000182550010000040251000040258 '+hb_dirbase()+'XML\' )

Pode ser usado até mesmo por programas clipper...

Executavel.rar
(785.04 KiB) Baixado 145 vezes


O Projeto tem quer ser aberto pela IDE da minigui... se usar a xdev tem o projeto da xdev na mesma pasta...
Projeto Impnfe.rar
(101.08 KiB) Baixado 140 vezes


Rubens

Consulta optante do simples online

MensagemEnviado: 23 Jan 2017 16:17
por Daniel
Rubens

Arrumado segue ele
impnfe.rar
abaixa xml da nfe
(9.88 KiB) Baixado 142 vezes

Consulta optante do simples online

MensagemEnviado: 01 Fev 2017 17:18
por malcarli
muito bom. parabéns a todos pelo esforço

Consulta optante do simples online

MensagemEnviado: 07 Fev 2017 09:25
por depaula.jau
Bom dia!!!!

Acho que essa informação esta errada

Consulta optante do simples online

MensagemEnviado: 07 Fev 2017 10:43
por Daniel
Bom dia
vc esta usando a ultima versão
pois aqui esta correto

Consulta optante do simples online

MensagemEnviado: 07 Fev 2017 11:03
por depaula.jau
rubens escreveu:Para quem quer baixar o xml no seu sistema mas ainda não compila pela Minigui... gerei um executável que pode receber a chave e o path para salvar o xml. Pode ser chamado direto do seu programa.
Basta usar o seguinte comando que vai abrir o executável. Neste exemplo está sendo enviado uma chave e o path..
HB_RUN( 'START impnfe.exe 51161007407005000182550010000040251000040258 '+hb_dirbase()+'XML\' )

Pode ser usado até mesmo por programas clipper...

Executavel.rar


O Projeto tem quer ser aberto pela IDE da minigui... se usar a xdev tem o projeto da xdev na mesma pasta...
Projeto Impnfe.rar


Rubens


Realmente esta correto, baixei essa aqui agora: Projeto Impnfe.rar
Estou chamando através do HB_RUN()

Só uma dúvida, porque ele não trás a assinatura digital completa do XML... Apenas o Digito ?

Não que isso vá me fazer diferença, afinal o que me interessa é o Protocolo.

Consulta optante do simples online

MensagemEnviado: 07 Fev 2017 11:15
por Daniel
para trazer a assinatura teria que usar Certificado Digital
este e usado mais para lançamento sem valor fiscal como xml

Consulta optante do simples online

MensagemEnviado: 10 Fev 2017 09:56
por Daniel
Ola
Para quem estiver com erro na linha oServer:Open( "GET", cUrlc, .f. ) "Metodo não exportado: OPEN" com Windows 64
resolver instalando o msxml6_x64 e alterando a chamada oServer := win_OleCreateObject("MSXML2.ServerXMLHTTP.6.0").
E nos exe que não funciona olha se tem estas DLL na pasta System32 msxml5.dll msxml5r.dll msxml6.dll msxml6r.dll

Consulta optante do simples online

MensagemEnviado: 10 Fev 2017 13:21
por fladimir
vlw Daniel

Consulta optante do simples online

MensagemEnviado: 12 Fev 2017 23:54
por fladimir
O meu aki começou a não carregar o Captcha... seja 32 ou 64... alguém esta passando por isso?

Consulta optante do simples online

MensagemEnviado: 13 Fev 2017 07:56
por rubens
Bom dia...

Aqui também não está gerando...
Nesse trecho de código ele retorna vazio:
   nIni  := At('data:image/png;base64,',  cHtml) + 22
   cHtml1:= SubStr(cHtml, nIni)
   nFim  := At('" style="border-width:0px;" />', cHtml1) - 2
   cFile:= SubStr(cHtml, nIni, nFim)


Não acha o "Style="

Vamos aguardar o Daniel dar uma olhada...
Obrigado..

Rubens

Consulta optante do simples online

MensagemEnviado: 13 Fev 2017 08:44
por rubens
Fladimir

Mude esta linha
nFim  := At('" style="border-width:0px;" />', cHtml1) - 2

para
nFim  := At('<input type=', cHtml1) - 13

Que funciona...
Provavelmente houve alguma alteração na resposta da página...

Rubens

Consulta optante do simples online

MensagemEnviado: 13 Fev 2017 11:11
por Daniel
Isso mesmo erra so mudar esta linha

nFim  := At('" style="border-width:0px;" />', cHtml1) - 2

para esta
nFim  := At('" />', cHtml1) - 1

Consulta optante do simples online

MensagemEnviado: 13 Fev 2017 11:16
por fladimir
Daniel uma dúvida, antes funcionava e depois parou de funcionar pq eles mudaram algo no site é isso?

Consulta optante do simples online

MensagemEnviado: 13 Fev 2017 13:37
por Daniel
Isso mesmo ele fizeram upgrade no site.
Ainda bem que foi pouco, só esta linha que deu erro

Consulta optante do simples online

MensagemEnviado: 13 Fev 2017 15:10
por ErithonLuz
Boa tarde.

Estou acompanhando meio por cima... srrsrs hoje utilizo o FSIST para download de XML em lote.

Porém desde sexta-feira estou com o seguinte erro:

ERRO Erro usar o leitor de captcha: A conexão com o servidor foi reconfigurada - URL:http://api.captchaboss.com/imagepost.ashx

Poderiam me ajudar, ou se tiver um programa que eu consiga baixar os XMLs poderiam me indicar?

No aguardo,

Erithon Luz

Consulta optante do simples online

MensagemEnviado: 13 Fev 2017 17:48
por Daniel
Boa tarde
Nos estamos fazendo este projeto case igual do FSIST
So que nao tem o leitor de captcha automático
mais esta baixo ate bem os arquivos xml, "sem valor fiscal"

Consulta optante do simples online

MensagemEnviado: 16 Fev 2017 00:44
por rubens
Daniel...

Temos outro problema... Quando vem só um item na nota não está sendo gerado no xml... Quando é mais de um item gera normal...

Olha o xml que foi gerado ...


Até tentei procurar algo errado... mas não consegui achar nenhuma pista não...

Obrigado
Rubens

Consulta optante do simples online

MensagemEnviado: 16 Fev 2017 07:15
por Daniel
Rubens

Voce esta usando a ultima versão?
Pois aqui não deu erro


Consulta optante do simples online

MensagemEnviado: 16 Fev 2017 08:11
por rubens
Bom dia Daniel...

Essa versão que você tá usando aí é a que o Quintas alterou ou a sua original?

Obrigado
Rubens

Consulta optante do simples online

MensagemEnviado: 16 Fev 2017 11:31
por Daniel
E uso estas com as Ideias do Quintas
Estes são os últimos
Consulta de Nfe
imp.rar
(782.25 KiB) Baixado 179 vezes


Consulta Cpf
Cpf.rar
(537.53 KiB) Baixado 173 vezes


Consulta Cnpj
Cnpj.rar
(535.53 KiB) Baixado 160 vezes

Consulta optante do simples online

MensagemEnviado: 13 Mar 2017 16:51
por depaula.jau
Olá!

Daniel, eu atualizei com os prgs que vc postou última mensagem e na compilação começou a aparecer erro de chamado de função.

Você pode me ajudar ?

Minigui 16.01 + Harbour

Consulta optante do simples online

MensagemEnviado: 13 Mar 2017 16:53
por depaula.jau
Continuando ...

Eu estava com os mesmos erros do Colega Rubens.
Quando há apenas um Item na XML ele não traz.

Abs;

Marcelo de Paula

Consulta optante do simples online

MensagemEnviado: 13 Mar 2017 17:56
por depaula.jau
Problema da compilação corrigido, faltava copiar os outros arquivos (FMG).
Agora o Sistema trouxe o XML com um Item, mas esta faltando a TAG CONFINS.

Vou postar o XML Original para vc poder analisar.

Consulta optante do simples online

MensagemEnviado: 14 Mar 2017 15:32
por Daniel
Erro arrumado

impnfe1.rar
(10.1 KiB) Baixado 145 vezes

Consulta optante do simples online

MensagemEnviado: 21 Mar 2017 09:56
por rubens
Bom dia...

Daniel...

Tem um problema quando baixa o xml e a sequencia dos itens está alterada. Neste exemplo que estou enviando O nosso ImpNFE não baixa o item fora de ordem, já no Fsist baixa normalmente. O item fora de ordem é o 14 que no XML baixado pelo FSIST está depois do item 8.
Você pode dar uma olhada?

Obrigado
Rubens

Baixado pelo Fsist.xml
(15.39 KiB) Baixado 121 vezes

Baixado pelo Impnfe.xml
(13.55 KiB) Baixado 101 vezes

Consulta optante do simples online

MensagemEnviado: 21 Mar 2017 23:19
por Daniel
erro arrumado
ficou em ordem a numeração dos itens
ipi arrumado, tag compra colocada, informação do fisco arrumada, tag fatura colocada

impnfe.rar
(10.75 KiB) Baixado 159 vezes

Consulta optante do simples online

MensagemEnviado: 28 Mar 2017 09:10
por rubens
Obrigado Daniel....

Segue compilado...

Impnfe.zip
(839.83 KiB) Baixado 159 vezes

Consulta optante do simples online

MensagemEnviado: 23 Abr 2017 17:07
por jorge andrade
Pessoal

Fiz um teste utilizando o último binário compilado, depois fiz o download pelo portal nacional e comparei os arquivos com o winmerge e constatei algumas diferenças, algumas não significativas, porém outras de suma importância.
Não sei se vou conseguir colar as imagens aqui para que vcs possam analisar.

Obs: Esqueci de informar a ordem dos arquivos na imagem, o da esquerda é o baixado pelo binário.

[]s

Consulta optante do simples online

MensagemEnviado: 24 Abr 2017 10:47
por rubens
Bom dia..

Jorge Andrade....

No meu caso uso só para dar entrada no estoque e cadastrar os produtos, então estas informações que foram destacadas não me fizeram falta ainda... não dei importância para isso... acredito que os que usam esse importa nfe do Daniel/Toledo usam só para isso então não creio que vá baixar a assinatura do certificado e outros dados que vem no xml baixado pela Sefaz...
Isso vai depender se o Daniel vai implementar isso ou não...
Tem que realmente haver uma solicitação do que é necessário e indispensável...
Se estiver falando bobagem que o Daniel me corrija por favor !!!

Rubens

Consulta optante do simples online

MensagemEnviado: 25 Abr 2017 13:23
por jorge andrade
Rubens

Boa tarde

Acho que vc me interpretou mal, eu apenas queria enfatizar que quando fiz download dos arquivos em opções diferentes só mostrei que existem diferenças.
Como disse acima, algumas pode não ser tão significativas (Para alguns), em relação assinatura, entra nas que citei que pode ou não ter importância.
Os valores do DIFAL também, como vc mesmo disse, depende de quem vai usar e extrair o conteúdo do arquivo, mas acredito que o download deveria ser fiel ao original, ao menos no conteúdo de dados reais gerado pelo emitente, caso contrário deixa de ser confiável, pq não contém informações relevantes.
Só pra vc entender, a minha intenção foi informativa e não crítica, mas esclarecendo melhor, analise as imagens e veja que no arquivo baixado pelo compilado existem informações que não faz parte do original o que ao menos baixado pelo portal não trouxe tais informações por não achar relevantes ou não conter no original, veja abaixo.

Baixado pelo original:
<transp>
<modFrete>0</modFrete>
</transp>

Baixado pelo binário:
<transp>
<modFrete>0</modFrete>
<transporta/>
<veicTransp/>
<vol/>
</transp>


Baixado pelo original:
detalhamento do item:
<ICMSUFDest>
<vBCUFDest>2333.24</vBCUFDest>
<pFCPUFDest>0.00</pFCPUFDest>
<pICMSUFDest>18.00</pICMSUFDest>
<pICMSInter>12.00</pICMSInter>
<pICMSInterPart>60.00</pICMSInterPart>
<vFCPUFDest>0.00</vFCPUFDest>
<vICMSUFDest>84.00</vICMSUFDest>
<vICMSUFRemet>56.00</vICMSUFRemet>
</ICMSUFDest>


Baixado pelo binário:
detalhamento do item:
VAZIO


Baixado pelo original:
<infAdic>
<infCpl>NOME FANTASIA: CLINICA IMUNIZE;FORMA DE PAGAMENTO: BANCOOB;NOME DO VENDEDOR: VENDAS; VALOR APROX. TRIBUTOS R$ 908,6 (32,45 %) Fonte: IBPT; Aliq Interna do ICMS de Destino: 18,00% Aliq Interestadual do ICMS: 12,00% Aliq FCP: 0,00% Total Compartilhado Destino: 84,00 Total Compartilhado Origem: 56,00 Total FCP:0,00 Proporção: 60,00/40,00;</infCpl>
</infAdic>

Baixado pelo binário:

<infAdic>
<infCpl>NOME FANTASIA: CLINICA IMUNIZE;FORMA DE PAGAMENTO: BANCOOB;NOME DO VENDEDOR: VENDAS; VALOR APROX. TRIBUTOS R$ 908,6 (32,45 %) Fonte: IBPT; Aliq Interna do ICMS de Destino: 18,00% Aliq Interestadual do ICMS: 12,00% Aliq FCP: 0,00% Total Compartilhado Destino: 84,00 Total Compartilhado Origem: 56,00 Total FCP:0,00 Propor褯: 60,00/40,00;</infCpl>
</infAdic>
<compra>
<xNEm>5217 0411 1640 7300 0216 5500 1000 0146 6310 0014 6632</xNEm>
<xPed>14663</xPed>
<xCont>3.10</xCont>
</compra>


Peço desculpas se sentiu ofendido, mas como disse antes a minha intenção foi meramente informativa

[]s,

Consulta optante do simples online

MensagemEnviado: 25 Abr 2017 14:55
por rubens
Boa tarde...

Também me interpretou mal Jorge... vamos deixa de bobagem...
Numa função dessas qualquer ajuda é bem vinda, né...
O Daniel é quem conhece ela a fundo... Então estas alterações/correções vão depender dele...
Se ele acrescentar na classe eu compilo e posto de novo....

abçs..

Rubens

Consulta optante do simples online

MensagemEnviado: 25 Abr 2017 19:19
por Daniel
Ola a todos

Estamos fazendo esta funções para abaixar o xml, mais para lançamento pois o mesmo
não tem assinatura. Podendo baixar sem mesmo dar ciência do arquivo e sem certificado.
A parte do icms partilha ainda não esta pronto e so passar a chave da nfe com partilha

Consulta optante do simples online

MensagemEnviado: 25 Abr 2017 19:35
por Jairo Maia
Olá pessoal,

Não uso e não testei esse utilitário, mas esse utilitário serve também para baixar o XML de nota emitida no regime RPA?

Porque se não seve, a nota baixada pelo Jorge Andrade está incorreta. Basta verificar o grupo <ICMSUFDest>. Para o Simples está incorreto esse grupo.

Consulta optante do simples online

MensagemEnviado: 09 Mai 2017 16:35
por Daniel
Ola a Todos

Segue nova versão com erro arrumados, agora com Danfe em Pdf ajuda da classe do Quintas

imp.rar
(102.74 KiB) Baixado 245 vezes

Consulta optante do simples online

MensagemEnviado: 29 Ago 2017 17:06
por rubens
Boa tarde...

Daniel...
tem como disponibilizar o formulário correto do projeto CNPJ?
o que veio junto zipado no projeto, não compila... parece que não é o mesmo do arquivo compilado...
Obrigado
Rubens

Consulta optante do simples online

MensagemEnviado: 30 Ago 2017 09:33
por Daniel
Ola aqui esta

Consulta optante do simples online

MensagemEnviado: 30 Ago 2017 10:55
por rubens
:{ :{ :{
Muito obrigado Daniel... jóia mesmo...
Vou criar mais uma função que vai salvar um arquivo txt com os dados, dai quem não tá usando minigui ainda pode aproveitar esse recurso e fazer uma inclusão automática de dados de cliente pessoa jurídica, né..

Vlw...
Rubens

Consulta optante do simples online

MensagemEnviado: 15 Set 2017 09:31
por depaula.jau
Daniel, bom dia!!!

A rotina impxml esta dando erro de atualização de imagens, Erro 32
Provavelmente o Sefaz mudou os servidores.

Quando tiver um tempo , vc pode dar uma olhadinha?.

Marcelo de Paula

Consulta optante do simples online

MensagemEnviado: 15 Set 2017 14:25
por rubens
Boa tarde...

Baixei uma NFE aqui agora sem problemas...
O erro tá na NFE mesmo?
ImpXml.png


Rubens

Consulta optante do simples online

MensagemEnviado: 15 Set 2017 14:37
por Jairo Maia
Olá Pessoal,

Também acabei de baixar uma nota para teste agora, e baixou normal.

Consulta optante do simples online

MensagemEnviado: 13 Out 2017 19:39
por FFreire
Parabéns pela iniciativa...estou ajustando e vou usar, tanto a consulta da NFe, quanto a consulta do CNPJ !!!

A mesma coisa para CTe, tem alguma coisa em vista ??

F.Freire

Consulta optante do simples online

MensagemEnviado: 23 Out 2017 15:27
por Wanderlei
Olá Pessoal a receita mudou o link da consulta, tem como alguem analisar como vamos fazer, eu atualizei para o link novo, mas tenho certeza que eles vão desativar ele logo logo.

Consulta optante do simples online

MensagemEnviado: 23 Out 2017 15:51
por fladimir
Porque a certeza de vão desativar?

Consulta optante do simples online

MensagemEnviado: 23 Out 2017 16:26
por marcelo.chakal
Porque no topo, está como "consultaResumoCompletaAntiga", acredito também que logo irão desativar este link.

Consulta optante do simples online

MensagemEnviado: 24 Out 2017 09:03
por rubens
Bom dia...

Olá Pessoal a receita mudou o link da consulta

Qual é o link atualizado Wanderlei...?

Eu abro esse link e cai na página de consulta.
http://www.nfe.fazenda.gov.br/portal/consulta.aspx?tipoConsulta=completa&tipoConteudo=XbSeqxE8pl8=
Só que aqui não tá gerando o Captcha...

Tá sabendo de alguma coisa Daniel?

Obrigado
Rubens

Consulta optante do simples online

MensagemEnviado: 24 Out 2017 10:06
por Daniel

Consulta optante do simples online

MensagemEnviado: 24 Out 2017 10:43
por rubens
Daniel,
Bom dia...

Beleza, resolveu até que mudem de novo o endereço....
Acho que vou até colocar esse negócio dinâmico em um ini. Daí não precisa ficar atualizando o executável no cliente...

Obrigado

Impnfe.exe atualizado.
Impnfe.rar
(736.3 KiB) Baixado 239 vezes


Rubens

Consulta optante do simples online

MensagemEnviado: 24 Out 2017 10:52
por Wanderlei
Rubens e Daniel, acho que eles vão deixar este novo captcha dizendo NÃO SOU UM ROBÔ, se tiver como já prepara para ele seria legal.

Consulta optante do simples online

MensagemEnviado: 24 Out 2017 12:44
por edmarfrazao
alguém ja tem portado para hwgui?

Consulta optante do simples online

MensagemEnviado: 24 Out 2017 14:05
por Daniel
Wanderlei lá será difícil de quebrar o captcha
estou testando aqui http://www.dfeportal.fazenda.pr.gov.br/dfe-portal/rest/servico/iniciarInterfaceConsultaDFe?modelo=55
me parece mais fácil e com mais dados

Consulta optante do simples online

MensagemEnviado: 24 Out 2017 15:13
por marcelo.chakal
Pessoal,

Não mecho muito com Harbour, estou pegando o jeito ainda, tanto que pedi ajuda para varias pessoas para pode fazer rodar este exe kkk, mas com o pouco que consegui mexer, fiz uma funcionalidade onde ele lê o captcha.

Estou compartilhando aqui com vocês, para verificarem se irá ajudar em algo, basta clicar no atualizar imagem do captcha, que eu já trago preenchido o valor.

Daniel, você busca o xml deste site? É fácil de ajustar para buscar as informações dele?

Consulta optante do simples online

MensagemEnviado: 24 Out 2017 23:04
por fladimir
Como vc fez pra decodificar o Captcha?

Consulta optante do simples online

MensagemEnviado: 29 Out 2017 19:24
por lucimauro
Boa noite a todos;
Aonde posso baixar o código fontes atualizado do BaixaXMl, já que só vi aqui a versão compilada?

Consulta optante do simples online

MensagemEnviado: 30 Out 2017 07:31
por edmarfrazao
o site parou novamente.

alguem tem esta versão em hwgui?

Consulta optante do simples online

MensagemEnviado: 30 Out 2017 08:16
por rubens
Bom dia...
Aonde posso baixar o código fontes atualizado do BaixaXMl, já que só vi aqui a versão compilada?

http://www.pctoledo.com.br/forum/viewtopic.php?f=4&t=16972&start=150#p115878

Versão oficial do Daniel ...

Consulta optante do simples online

MensagemEnviado: 30 Out 2017 12:56
por lucimauro
Obrigado Rubens.

Consulta optante do simples online

MensagemEnviado: 30 Out 2017 15:27
por fladimir
O Rubens e o esquema de pegar o Captcha q nem o colega postou e eu perguntei como fez vc sabe? Ele não respondeu.

Consulta optante do simples online

MensagemEnviado: 30 Out 2017 16:17
por rubens
Fladimir...

Eu peguei carona na função do Daniel e Toledo... fiz umas alterações e compilei gerando um executável para já receber a chave e salvar em um path determinado. Não sei muito bem como o Daniel fez a geração do Captcha... só tô ajudando da maneira que consigo no meu modo computês caipira meia boca de programar.
Segundo o próprio Daniel.
Wanderlei lá será difícil de quebrar o captcha
estou testando aqui http://www.dfeportal.fazenda.pr.gov.br/ ... ?modelo=55
me parece mais fácil e com mais dados


Então aguardemos o Daniel resolver a charada e disponibilizar aqui para nós.
Quanto ao outro colega marcelo.chakal, se puder e quiser disponibilizar o código onde ele conseguiu gerar o captcha será bem vindo...

Rubens

Consulta optante do simples online

MensagemEnviado: 30 Out 2017 16:29
por fladimir
Sim sim, mas se vc ver umas postagens anteriores [LINK DIRETO AKI]verá q um colega fez quebrar o captcha e já inserir sem precisarmos digitar, foi isso q eu questionei ele mas não tive resposta por isso a pergunta.

Consulta optante do simples online

MensagemEnviado: 30 Out 2017 20:08
por Daniel
Boas noticias
com este novo sistema nem captcha usa
teste se esta funcionando depois eu coloco o código

Consulta optante do simples online

MensagemEnviado: 30 Out 2017 20:24
por fladimir
deu certo sim

Consulta optante do simples online

MensagemEnviado: 31 Out 2017 07:01
por edmarfrazao
Funcionou perfeitamente.

Tem como gerar o exe aceitando dois parâmetros

um a chave outra o path onde sera salvo o xml.

Assim poderia usar a sua copia ja compilada.

ps. não uso minigui so hwgui

Obrigado.

Consulta optante do simples online

MensagemEnviado: 31 Out 2017 07:39
por Jairo Maia
Funcionou Daniel. Valeu.

edmarfrazao escreveu:Tem como gerar o exe aceitando dois parâmetros um a chave outra o path onde sera salvo o xml.
Sim. Assim que o Daniel publicar os fontes me comprometo a fazer essa alteração.

Consulta optante do simples online

MensagemEnviado: 31 Out 2017 07:51
por amadorqueiroz
Daniel funcionou perfeitamente....

Galera trabalho com Delphi e PHP alguém aqui já se arriscou a traduzir este fonte ?
Antes utilizada uma DLL do Fernando da FSIST

Obrigado,
Amador Queiroz

Daniel escreveu:Boas noticias
com este novo sistema nem captcha usa
teste se esta funcionando depois eu coloco o código

Consulta optante do simples online

MensagemEnviado: 31 Out 2017 08:23
por jairfab
Funcionou 100% valeu daniel, você é o cara!

Consulta optante do simples online

MensagemEnviado: 31 Out 2017 08:40
por rubens
:{

Ok... também baixou....

Rubens

Consulta optante do simples online

MensagemEnviado: 31 Out 2017 08:49
por gilbertosilverio
Ola,

Aqui na minha maquina não funcionou, ele cria o captcha na pasta onde coloquei o executável, mais não aparece na tela do aplicativo e da a mensagem de A sessão expirou. Faça a consulta novamente.

Mesmo clicando para atualizar a imagem não aparece o captcha, dando a mesma mensagem se clico em baixar.

Exclui o captcha da pasta manualmente, clico em atualizar é recriado o captcha, mais não aparece no aplicativo.

Estou usando W10, executando a rotina como admin e mesmo assim não consigo baixar.

Não sei se é o w10, mais ja tive problemas tambem em baixar o xml pelo site do NFe, em um maquina com W10, o tecnico tentou de todas as maneiras e não consegui libertar um certificado A3 no IE para poder baixar os XML, estamos encontrando alguns problema nas novas versoes do W10.

:'( :'( :'(

Consulta optante do simples online

MensagemEnviado: 31 Out 2017 08:58
por Jairo Maia
Olá Gilberto,

A ultima versão postada pelo Daniel para testar está aqui: http://www.pctoledo.com.br/forum/viewtopic.php?p=119109#p119109. Não é criado Captcha nenhum, apenas baixa o XML na mesma pasta do executável.

Consulta optante do simples online

MensagemEnviado: 31 Out 2017 09:08
por gilbertosilverio
Jairo, Amigos,

Me desculpem, baixei a nova versão, mais na hora de descompactar, usei a anterior...

Me perdoem, esta funcionando perfeitamente, ficou muito pratico... parabéns Daniel.

:-Y :-Y :-Y

Consulta optante do simples online

MensagemEnviado: 31 Out 2017 09:13
por gilbertosilverio
Daniel,

Clicando sobre o botão limpar da este erro.

<HTML><HEAD><TITLE>Harbour MiniGUI Errorlog File</TITLE></HEAD><style> body{ font-family: sans-serif;background-color: #ffffff;font-size: 75%;color: #000000;}h1{font-family: sans-serif;font-size: 150%;color: #0000cc;font-weight: bold;background-color: #f0f0f0;}.updated{font-family: sans-serif;color: #cc0000;font-size: 110%;}.normaltext{font-family: sans-serif;font-size: 100%;color: #000000;font-weight: normal;text-transform: none;text-decoration: none;}</style><BODY>
<H1 Align=Center>Harbour MiniGUI Errorlog File</H1><BR>
<HR>
<p class="updated">Application: C:\Users\gilbe\Desktop\BaixaNFE\impnfenovo.exe<BR>
Date: 10/31/17  Time: 10:10:08<BR>
Time from start: 0 days 0 hours 0 mins 6 secs<BR>
Error MGERROR/0  Control: oTxt_captcha Of principal Not defined. Program terminated.</p><BR>
Called from MSGMINIGUIERROR(94) in module: h_error.prg
<BR>
Called from SETPROPERTY(3629) in module: h_controlmisc.prg
<BR>
Called from LIMPAR(48) in module: impnfenovo.prg
<BR>
Called from (b)MAIN(67) in module: impnfenovo.prg
<BR>
Called from _DOCONTROLEVENTPROCEDURE(1795) in module: h_windows.prg
<BR>
Called from EVENTS(1730) in module: h_events.prg
<BR>
Called from DOMESSAGELOOP(0)
<BR>
Called from _ACTIVATEWINDOW(1449) in module: h_windows.prg
<BR>
Called from MAIN(40) in module: impnfenovo.prg
<BR>
<HR>
</BODY></HTML><p class="updated">Application: C:\Users\gilbe\Desktop\BaixaNFE\impnfenovo.exe<BR>
Date: 10/31/17  Time: 10:10:53<BR>
Time from start: 0 days 0 hours 0 mins 2 secs<BR>
Error MGERROR/0  Control: oTxt_captcha Of principal Not defined. Program terminated.</p><BR>
Called from MSGMINIGUIERROR(94) in module: h_error.prg
<BR>
Called from SETPROPERTY(3629) in module: h_controlmisc.prg
<BR>
Called from LIMPAR(48) in module: impnfenovo.prg
<BR>
Called from (b)MAIN(67) in module: impnfenovo.prg
<BR>
Called from _DOCONTROLEVENTPROCEDURE(1795) in module: h_windows.prg
<BR>
Called from EVENTS(1730) in module: h_events.prg
<BR>
Called from DOMESSAGELOOP(0)
<BR>
Called from _ACTIVATEWINDOW(1449) in module: h_windows.prg
<BR>
Called from MAIN(40) in module: impnfenovo.prg
<BR>
<HR>
</BODY></HTML>

Consulta optante do simples online

MensagemEnviado: 31 Out 2017 09:46
por marcelo.chakal
fladimir escreveu:O Rubens e o esquema de pegar o Captcha q nem o colega postou e eu perguntei como fez vc sabe? Ele não respondeu.


Opa galera, desculpe a demora, estive fora desde a semana passada.

Então Fladimir, o que eu fiz foi um esquema utilizando a linguagem R, é bemmm complicado a criação do serviço, mas eu fiz e disponibilizei em um servidor.

Basta você enviar para este link: http://35.193.152.7:8000/predict_rfb passando o post no parametro IMG a imagem em base64. No código do Daniel, na função "AtualizaImagem", ele faz o download da imagem em base64 já e grava na variável cFile. Sendo assim, é só utilizar o código abaixo.

/* PROCESSA A IMAGEM */   
    cParm:= {{"img", cFile}}
         
   Try
      oInternet:= TIPClientHTTP():New("http://35.193.152.7:8000/predict_rfb", .f.)
      oInternet:nConnTimeout:= 10000
   Catch
      IIf(lUsarMiniGui, MsgInfo('Erro na criação do serviço'), Alert('Erro na Criação do Serviço'))
        Return .f.
      End
      
   If oInternet:Open()
      If oInternet:POST(cParm)
         cHtml:= oInternet:ReadAll()
      Else
         IIf(lUsarMiniGui, MsgInfo('Erro na criacao do arquivo de imagem', 'Aviso do Sistema'), Alert('Erro na criação do arquivo de imagem', 'Aviso do Sistema'))
            Return .F.
      EndIf
   Else
      IIf(lUsarMiniGui, msgInfo('Erro na Conexão'), Alert('Erro na Conexão'))
         Return .f.
   EndIf
   cHtml := StrTran(cHtml, '["', '')
   cHtml := StrTran(cHtml, '"]', '')
   principal.oTxt_captcha.Value:=cHtml
   
   /* FIM */


Deu pra entender? Se achar melhor, posso passar a função atualiza imagem inteira.

Consulta optante do simples online

MensagemEnviado: 31 Out 2017 09:47
por marcelo.chakal
Segue a função AtualizaImagem com o processamento do captcha.

Function AtualizaImagem()
   Local oInternet, cParm
   
   Try
      oServer:= win_OleCreateObject( "MSXML2.ServerXMLHTTP.5.0")
   Catch
      IIf(lUsarMiniGui, MsgInfo('Erro na Criação do Serviço'), Alert('Erro na Criação do Serviço'))
      Return .f.
   End
   Try
      oServer:Open( "GET", cUrl, .f. )
      oServer:SetRequestHeader( "Content-Type", "application/x-www-form-urlencoded" )
      oServer:SetRequestHeader( "Connection", "keep-alive" )
      oServer:Send()
      oServer:WaitForResponse( 10000 )
   Catch
      IIf(lUsarMiniGui, MsgInfo('Erro na Conexão com o Site'), Alert('Erro na Conexão com o Site'))
      Return .f.
   End
   cHtml:= oServer:ResponseBody
   cStringCookie:= oServer:getResponseHeader("Set-Cookie")

   nInie   := At('id="ctl00_ContentPlaceHolder1_lblMensagemErro">',  cHtml) + 47
   If nInie > 47
      cHtml1  := SubStr( cHtml, nInie)
      nFime   := At('</span>', cHtml1) - 1
      cMsgErro:= SubStr(cHtml, nInie, nFime)
      If ! Empty(cMsgErro)
         IIf(lUsarMiniGui, MsgInfo(cMsgErro, 'Erro no Site ' + cUrl), Alert(cMsgErro, 'Erro no Site ' + cUrl))
         Return .f.
      EndIf
   EndIf
   nIni  := At('id="__VIEWSTATE" value=',  cHtml) + 24
   cHtml1:= SubStr( cHtml, nIni)
   nFim  := At('" />', cHtml1) - 1
   cViewState:= SubStr(cHtml, nIni, nFim)

   nIni1 := At('id="__EVENTVALIDATION" value="',  cHtml) + 30
   cHtml1:= SubStr( cHtml, nIni1)
   nFim1 := At('" />', cHtml1) - 1
   cEeventValidation:= SubStr(cHtml, nIni1, nFim1)

   nIni2 := At('id="__VIEWSTATEGENERATOR" value="',  cHtml) + 33
   cHtml1:= SubStr( cHtml, nIni2)
   nFim2 := At('" />', cHtml1) - 1
   cViewStateGenerator:= SubStr(cHtml, nIni2, nFim2)

   nIni3 := At('id="ctl00_ContentPlaceHolder1_token" value="',  cHtml) + 44
   cHtml1:= SubStr( cHtml, nIni3)
   nFim3 := At('" />', cHtml1) - 1
   cHiddenToken:= SubStr(cHtml, nIni3, nFim3)

   nIni4 := At('id="ctl00_ContentPlaceHolder1_captchaSom" value="',  cHtml) + 49
   cHtml1:= SubStr( cHtml, nIni4)
   nFim4 := At('" />', cHtml1) - 1
   cHiddenSom:= SubStr(cHtml, nIni4, nFim4)

   nIni  := At('data:image/png;base64,',  cHtml) + 22
   cHtml1:= SubStr(cHtml, nIni)
   nFim  := At('" />', cHtml1) - 1
   cFile:= SubStr(cHtml, nIni, nFim)
   txt_file:=fcreate("captcha.png", 0)
   If (!(ferror() = 0))
      IIf(lUsarMiniGui, MsgInfo("Erro de criacao do arquivo de imagem " + Str(ferror(), 3, 0)),    Alert("Erro de criacao do arquivo de imagem " + Str(ferror(), 3, 0)))
      Return .f.
   EndIf

   cCodigo:= SubStr(cHtml, nIni, nFim)
   If Empty(cCodigo)
      IIf(lUsarMiniGui, MsgInfo("Erro de criacao do arquivo de imagem"), Alert("Erro de criacao do arquivo de imagem"))
      Return .f.
   EndIf
   
   /* PROCESSA A IMAGEM */
   
    cParm:= {{"img", cFile}}
         
   Try
      oInternet:= TIPClientHTTP():New("http://35.184.33.72:8000/predict_rfb", .f.)
      oInternet:nConnTimeout:= 10000
   Catch
      IIf(lUsarMiniGui, MsgInfo('Erro na criação do serviço'), Alert('Erro na Criação do Serviço'))
        Return .f.
      End
      
   If oInternet:Open()
      If oInternet:POST(cParm)
         cHtml:= oInternet:ReadAll()
      Else
         IIf(lUsarMiniGui, MsgInfo('Erro na criacao do arquivo de imagem', 'Aviso do Sistema'), Alert('Erro na criação do arquivo de imagem', 'Aviso do Sistema'))
            Return .F.
      EndIf
   Else
      IIf(lUsarMiniGui, msgInfo('Erro na Conexão'), Alert('Erro na Conexão'))
         Return .f.
   EndIf
   cHtml := StrTran(cHtml, '["', '')
   cHtml := StrTran(cHtml, '"]', '')
   principal.oTxt_captcha.Value:=cHtml
   
   /* FIM */
   
    cFile:= hb_base64Decode(cFile, cCodigo)
    FWrite(txt_file, cFile)
    FClose(txt_file)
    SetProperty ('principal', 'oImg_captcha', 'Picture', 'Captcha.png')
    principal.Button_1.Enabled:=.T.
   
   Return .t.

Consulta optante do simples online

MensagemEnviado: 31 Out 2017 10:07
por fladimir
Obrigado pelo retorno colega.

Consulta optante do simples online

MensagemEnviado: 31 Out 2017 11:29
por marcelo.chakal
fladimir escreveu:Obrigado pelo retorno colega.


Nada, se tiver alguma duvida, só me avisar. Como disse, sou bem leigo em Harbour kk, mas no que eu puder ajudar, estarei disposto.

Consulta optante do simples online

MensagemEnviado: 01 Nov 2017 06:52
por Wanderlei
Oi Daniel, não consegui utilizar, aparece a mensagem que o Captcha é obrigatório marcar.

Consulta optante do simples online

MensagemEnviado: 01 Nov 2017 07:51
por Daniel
Tava com uma fala no captcha e eles arrumarão.
Vamos tem que continuar com a versão velha
Pois ta difícil de quebrar o captcha :(

Consulta optante do simples online

MensagemEnviado: 01 Nov 2017 08:25
por edmarfrazao
a rotina parou.



Acho que devemos ter duas opções.

1)Automática

2)Se a automática falhar ter a opção de:

Manual abrindo o Internet Explorer e digitando o eu sou robo e depois importando(este fiz usando o exemplo acima e gerei com xharbour e hwgui)
www.sesistemas.net/baixanfe.zip

Consulta optante do simples online

MensagemEnviado: 01 Nov 2017 09:05
por Jairo Maia
Olá pessoal,

Apenas lembrando que o link da consulta antiga mudou de http para https:
https://www.nfe.fazenda.gov.br/portal/consultaResumoCompletaAntiga.aspx?tipoConsulta=completa&tipoConteudo=XbSeqxE8pl8=

Se tenta baixar vem o captcha mas dá erro de criação do serviço.

Consulta optante do simples online

MensagemEnviado: 01 Nov 2017 09:18
por marcelo.chakal
Pessoal, fiz um ajuste, testem este exe agora.
Criem uma pasta em C:/NFe é onde os arquivos baixados irão diretamente pra esta pasta.

Caso alguém queira, segue a função AtualizarImagem atualizado:

Function AtualizaImagem()
   Local oInternet, cParm
   
   Try
      oServer:= win_OleCreateObject( "MSXML2.ServerXMLHTTP.5.0")
   Catch
      IIf(lUsarMiniGui, MsgInfo('Erro na Criação do Serviço'), Alert('Erro na Criação do Serviço'))
      Return .f.
   End
   Try
      oServer:Open( "GET", cUrl, .f. )
     oServer:SetRequestHeader( "Content-Type", "application/x-www-form-urlencoded" )
      oServer:SetRequestHeader( "Connection", "keep-alive" )
      oServer:Send()
      oServer:WaitForResponse( 10000 )
   Catch
      IIf(lUsarMiniGui, MsgInfo('Erro na Conexão com o Site'), Alert('Erro na Conexão com o Site'))
      Return .f.
   End
   cHtml:= oServer:ResponseBody
   cStringCookie:= oServer:getResponseHeader("Set-Cookie")

   nInie   := At('id="ctl00_ContentPlaceHolder1_lblMensagemErro">',  cHtml) + 47
   If nInie > 47
      cHtml1  := SubStr( cHtml, nInie)
      nFime   := At('</span>', cHtml1) - 1
      cMsgErro:= SubStr(cHtml, nInie, nFime)
      If ! Empty(cMsgErro)
         IIf(lUsarMiniGui, MsgInfo(cMsgErro, 'Erro no Site ' + cUrl), Alert(cMsgErro, 'Erro no Site ' + cUrl))
         Return .f.
      EndIf
   EndIf
   nIni  := At('id="__VIEWSTATE" value=',  cHtml) + 24
   cHtml1:= SubStr( cHtml, nIni)
   nFim  := At('" />', cHtml1) - 1
   cViewState:= SubStr(cHtml, nIni, nFim)

   nIni1 := At('id="__EVENTVALIDATION" value="',  cHtml) + 30
   cHtml1:= SubStr( cHtml, nIni1)
   nFim1 := At('" />', cHtml1) - 1
   cEeventValidation:= SubStr(cHtml, nIni1, nFim1)

   nIni2 := At('id="__VIEWSTATEGENERATOR" value="',  cHtml) + 33
   cHtml1:= SubStr( cHtml, nIni2)
   nFim2 := At('" />', cHtml1) - 1
   cViewStateGenerator:= SubStr(cHtml, nIni2, nFim2)

   nIni3 := At('id="ctl00_ContentPlaceHolder1_token" value="',  cHtml) + 44
   cHtml1:= SubStr( cHtml, nIni3)
   nFim3 := At('" />', cHtml1) - 1
   cHiddenToken:= SubStr(cHtml, nIni3, nFim3)

   nIni4 := At('id="ctl00_ContentPlaceHolder1_captchaSom" value="',  cHtml) + 49
   cHtml1:= SubStr( cHtml, nIni4)
   nFim4 := At('" />', cHtml1) - 1
   cHiddenSom:= SubStr(cHtml, nIni4, nFim4)

   nIni  := At('data:image/png;base64,',  cHtml) + 22
   cHtml1:= SubStr(cHtml, nIni)
   nFim  := At('" />', cHtml1) - 1
   cFile:= SubStr(cHtml, nIni, nFim)
   txt_file:=fcreate("captcha.png", 0)
   If (!(ferror() = 0))
      IIf(lUsarMiniGui, MsgInfo("Erro de criacao do arquivo de imagem " + Str(ferror(), 3, 0)),    Alert("Erro de criacao do arquivo de imagem " + Str(ferror(), 3, 0)))
      Return .f.
   EndIf

   cCodigo:= SubStr(cHtml, nIni, nFim)
   If Empty(cCodigo)
      IIf(lUsarMiniGui, MsgInfo("Erro de criacao do arquivo de imagem"), Alert("Erro de criacao do arquivo de imagem"))
      Return .f.
   EndIf
   
   /* PROCESSA A IMAGEM */
   
    cParm:= {{"img", cFile}}
         
   Try
      oInternet:= TIPClientHTTP():New("http://35.184.33.72:8000/predict_rfb", .f.)
      oInternet:nConnTimeout:= 10000
   Catch
      IIf(lUsarMiniGui, MsgInfo('Erro na criação do serviço'), Alert('Erro na Criação do Serviço'))
        Return .f.
      End
      
   If oInternet:Open()
      If oInternet:POST(cParm)
         cHtml:= oInternet:ReadAll()
      Else
         IIf(lUsarMiniGui, MsgInfo('Erro na criacao do arquivo de imagem', 'Aviso do Sistema'), Alert('Erro na criação do arquivo de imagem', 'Aviso do Sistema'))
            Return .F.
      EndIf
   Else
      IIf(lUsarMiniGui, msgInfo('Erro na Conexão'), Alert('Erro na Conexão'))
         Return .f.
   EndIf
   cHtml := StrTran(cHtml, '["', '')
   cHtml := StrTran(cHtml, '"]', '')
   principal.oTxt_captcha.Value:=cHtml
   
   /* FIM */
   
    cFile:= hb_base64Decode(cFile, cCodigo)
    FWrite(txt_file, cFile)
    FClose(txt_file)
    SetProperty ('principal', 'oImg_captcha', 'Picture', 'Captcha.png')
    principal.Button_1.Enabled:=.T.
   
   Return .t.


Basta trocar a função AtualizaImagem() que tem no pgr por esta.

Consulta optante do simples online

MensagemEnviado: 01 Nov 2017 09:33
por janio
Nada, se tiver alguma duvida, só me avisar. Como disse, sou bem leigo em Harbour kk, mas no que eu puder ajudar, estarei disposto.


Leigo em Harbour e ja fez isso? kkkkk
ta de brinks

Consulta optante do simples online

MensagemEnviado: 01 Nov 2017 09:41
por edmarfrazao
Este ultima versão esta funcionado

mas so se criar o diretorio c:\nfe

não poderia receber um parametro chave e diretorio

e se não informado salvar na pasta corrente.

Poderia posta os fontes?

Consulta optante do simples online

MensagemEnviado: 01 Nov 2017 10:33
por marcelo.chakal
edmarfrazao escreveu:Este ultima versão esta funcionado

mas so se criar o diretorio c:\nfe

não poderia receber um parametro chave e diretorio

e se não informado salvar na pasta corrente.

Poderia posta os fontes?


É o mesmo fonte, só fiz uns ajustes pra salvar sem perguntar, mas basta trocar a função AtualizaImagem, pela que eu postei.

Consulta optante do simples online

MensagemEnviado: 01 Nov 2017 11:26
por Jairo Maia
Olá Pessoal,

Marcelo, ao executar seu exe dá a mensagem: Erro de conexão com o site, e não vem o captcha.

Nos fontes do Daniel, se alterar a variavel cUrl para:
https://www.nfe.fazenda.gov.br/portal/consultaResumoCompletaAntiga.aspx?tipoConsulta=completa&tipoConteudo=XbSeqxE8pl8=, vem o captcha, mas ao pressionar Continuar dá o erro: Erro na criação do serviço.

Consulta optante do simples online

MensagemEnviado: 01 Nov 2017 12:19
por marcelo.chakal
Jairo Maia escreveu:Olá Pessoal,

Marcelo, ao executar seu exe dá a mensagem: Erro de conexão com o site, e não vem o captcha.

Nos fontes do Daniel, se alterar a variavel cUrl para:
https://www.nfe.fazenda.gov.br/portal/consultaResumoCompletaAntiga.aspx?tipoConsulta=completa&tipoConteudo=XbSeqxE8pl8=, vem o captcha, mas ao pressionar Continuar dá o erro: Erro na criação do serviço.


Que estranho, poderia testar com este? Veja se funciona. Caso de essa mensagem, feche e abre novamente.

Consulta optante do simples online

MensagemEnviado: 01 Nov 2017 12:46
por Jairo Maia
Olá Marcelo,

Mesmo com o anterior está funcionando sim... Acho que foi falha no momento que testei, mas agora funcionou normal.

Porém, apenas substituindo a função AtualizaImagem() no código do Daniel, não funciona. Tem como você postar seu código?

Consulta optante do simples online

MensagemEnviado: 01 Nov 2017 13:39
por marcelo.chakal
Jairo Maia escreveu:Olá Marcelo,

Mesmo com o anterior está funcionando sim... Acho que foi falha no momento que testei, mas agora funcionou normal.

Porém, apenas substituindo a função AtualizaImagem() no código do Daniel, não funciona. Tem como você postar seu código?


Jairo, o meu eu dei uma modificada e não está 100% ainda, mas vamos lá:

Coloquei conexão com MySQL para baixar NFe do meu servidor e tabela.

Mude as configurações:

Public cServer := NOME_DO_SEU_SERVIDOR
Public Database := NOME_BASE
Public User := USUARIO
Public Password := SENHA


Na minha função Play(), é onde eu faço a conexão com o banco e dou um select na minha tabela, filtrando o que já foi baixado e trago somente 5, as que eu consigo baixar, dou um update na tabela informando que já foi baixada, e fico no loop enquanto tiver nota.

Agora o que estou tentando, as vezes no loop mesmo acertando o captcha, ele da um erro de que o captcha esta errado, parece que perde o cookie ou algo do tipo. E outro detalhe, é que a receita bloqueia conforme a quantidade de tentativas, eu estava tentando usar proxy, mas ainda não consegui, devido a troca de IP e sessão.

Bom, espero ajudar em algo.

Consulta optante do simples online

MensagemEnviado: 02 Nov 2017 19:09
por lucimauro
O Exemplo do edmar não consegui rodar aqui, trava quando click no botão BUSCAR.

Consulta optante do simples online

MensagemEnviado: 02 Nov 2017 19:16
por janio
Tbm nao. Trava

Consulta optante do simples online

MensagemEnviado: 03 Nov 2017 07:26
por edmarfrazao
o Meu exemplo se trava e porque o Internet explorer não esta rodando.

Eu atualizei para o windows fall e o Internet explorer não roda no meu computador e o meu exemplo trava.

Fiz em um maquina virtual.
uso xharbour.com+hwgui e não tenho a tipssl(sofri para descobri isto, então site https não funciona porque não tenho a tipssl para o xharbour.com de 2009).

Fiz a chamada do Internet explorer, abre uma nova janela e se digita o captch

os fontes estão ai

Consulta optante do simples online

MensagemEnviado: 03 Nov 2017 09:23
por janio
Faltando include xSe.ch

Janio

Consulta optante do simples online

MensagemEnviado: 03 Nov 2017 09:37
por edmarfrazao
meus ch

Consulta optante do simples online

MensagemEnviado: 04 Nov 2017 14:34
por Daniel
Ola nova versão sem captcha não sei por quanto tempo vai funcionar
Agora voces pode escolher sem tela gráfica com os paramentos
-h HELP
-c Chave Nfe
-d Diretório de gravação
-g Desliga modo grafico

Consulta optante do simples online

MensagemEnviado: 04 Nov 2017 22:43
por janio
fera
:{ :{

Consulta optante do simples online

MensagemEnviado: 05 Nov 2017 16:33
por marcelo.chakal
Poderia disponibilizar o fonte?
Daniel escreveu:Ola nova versão sem captcha não sei por quanto tempo vai funcionar
Agora voces pode escolher sem tela gráfica com os paramentos
-h HELP
-c Chave Nfe
-d Diretório de gravação
-g Desliga modo grafico

Consulta optante do simples online

MensagemEnviado: 06 Nov 2017 07:54
por edmarfrazao
Daniel.
O site http://35.184.33.72:8000/predict_rfb

não esta respondendo mais, você mudou o site?

Agora conseguir gerar no xharbour.com+hwgui com a TIPSSL

mas não sei quebrar o captcha sem o seu site.

Teria como fazer no xharbour a quebra do captcha sem usar o seu site?

Consulta optante do simples online

MensagemEnviado: 06 Nov 2017 10:21
por Daniel
Edmar eu nao uso este site.
O meu quebra o captcha usando uma falha no site
e nao sei por quanto tempo ira funcionar

Consulta optante do simples online

MensagemEnviado: 06 Nov 2017 10:40
por janio
e nao sei por quanto tempo ira funcionar


Tomara que por longos anos rsrsrsrs

Eu usava/uso a dll da fsist, mas vai ser descontinuada!
Ja fiz uma adaptação no sistema para usar o seu exe e ta muuuuito bom assim

Vlw

Janio

Consulta optante do simples online

MensagemEnviado: 06 Nov 2017 10:51
por marcelo.chakal
Daniel escreveu:Edmar eu nao uso este site.
O meu quebra o captcha usando uma falha no site
e nao sei por quanto tempo ira funcionar


Daniel, o que você envia no header? Eu estava pensando em fazer em PHP. Consegue me passar somente o que é passado na consulta?

Consulta optante do simples online

MensagemEnviado: 06 Nov 2017 12:11
por edmarfrazao
o captch descobri que esta em base64
um exemplo em anexo.

usando as dicas que vocês dera.

no site
http://www.nfe.fazenda.gov.br/portal/co ... SeqxE8pl8=

ver o codigo fonte, pocure a tag
<img id="ctl00_ContentPlaceHolder1_imgCaptcha" src="data:image/png;

o que esta na frente e a imagem em base64

o exemplo do Daniel faz isto, extrai a imagem e salva no hd.

uso xharbour.com e o base64 não deu certo então usei as funções e anexo no exemplo.

Agora com a imagem no hd você pode mostrar para o usuário digitar.

Mas tem outra maneira que não sei usar.

O Daniel envia a imagem para um site em e ele retorna o captch digitado.

Descobri na internet estas funções que quebram o captch ( mas não sei usar)

https://github.com/dfalbel/captchaReceita2
http://fivewin.com.br/index.php?/topic/ ... codificar/

Consulta optante do simples online

MensagemEnviado: 06 Nov 2017 12:18
por anacatacombs
Eu também utilizo xHarbour e consegui capturar o base64 e gravar a imagem no pc. Qual versão do xHarbour vc utiliza?

Consulta optante do simples online

MensagemEnviado: 08 Nov 2017 17:25
por janio
Daniel,

O xml baixado NÃO ESTÁ vindo com as informações de SUBSTITUIÇÃO TRIBUTÁRIA dos produtos.

Chave: 23171100048785002892550010006768001570730879

Consulta optante do simples online

MensagemEnviado: 08 Nov 2017 21:41
por lucimauro
É eu também detectei o mesmo erro que o janio mencionou acima.

Consulta optante do simples online

MensagemEnviado: 09 Nov 2017 13:03
por Daniel
Ola erro arrumado

Consulta optante do simples online

MensagemEnviado: 09 Nov 2017 14:13
por lucimauro
Obrigado daniel.

Consulta optante do simples online

MensagemEnviado: 09 Nov 2017 14:25
por HASA
:-o
Boa tarde, Daniel você disponibiliza o código fonte.
:)Pos
HASA

Consulta optante do simples online

MensagemEnviado: 11 Nov 2017 10:00
por marcelo.chakal
Tentei achar a brecha no site que o Daniel informou, mas sem sucesso kk..

Queria fazer alguma forma de baixar com proxy e já trazer o XML e PDF.

Consulta optante do simples online

MensagemEnviado: 14 Nov 2017 07:04
por edmarfrazao
A rotina que o Daniel postou usa um site para quebrar o captch, mas o site não funciona mais.

E o Daniel não posto mais como fazer.

Eu preferi abrir uma janela do Internet Explorer e deixar o usuário digitar,

Ai o usuário pode escolher o captch ou o eu Robo

Consulta optante do simples online

MensagemEnviado: 14 Nov 2017 13:39
por Daniel
Ola
Segue a nova versão com seu fonte sem captcha
esperamos que eles não arrumem o bug
No exe inclui o parâmetro -pdf para gera o danfe em pdf
marcelo.chakal você vai dar risada como eu quebrei o "não sou robo"

Consulta optante do simples online

MensagemEnviado: 14 Nov 2017 13:43
por janio
Pessoal,

E sobre a consulta ao CNPJ que tbm parou de funcionar. Alguém ja arrumou?

Janio

Consulta optante do simples online

MensagemEnviado: 14 Nov 2017 13:53
por marcelo.chakal
Daniel escreveu:Ola
Segue a nova versão com seu fonte sem captcha
esperamos que eles não arrumem o bug
No exe inclui o parâmetro -pdf para gera o danfe em pdf
marcelo.chakal você vai dar risada como eu quebrei o "não sou robo"


Daniel, parece brincadeira, mas eu consegui fazer isso hoje cedo kkk..

Sabe o mais estranho, eu já havia tentando isso semana passada e nada de funcionar, ai hoje olhei cada ponto e bummmmmm funcionou, consegui fazer esse esquema também kkk..

Agora até quando isso irá funcionar ehm!

Consulta optante do simples online

MensagemEnviado: 14 Nov 2017 16:03
por Poka
Valeu Daniel. Grande ajuda.

Poka

Consulta optante do simples online

MensagemEnviado: 15 Nov 2017 13:40
por Poka
Olá

será que parou novamente?

Poka

Consulta optante do simples online

MensagemEnviado: 16 Nov 2017 07:34
por Wanderlei
Valeu Daniel, ficou muito bom.

Consulta optante do simples online

MensagemEnviado: 16 Nov 2017 19:10
por janio
Pessoal,

A consulta ao CNPJ ainda está funcionando pra vcs?

Consulta optante do simples online

MensagemEnviado: 17 Nov 2017 08:58
por rubens
Bom dia...
Aqui tá funcionando beleza...
Acabei de testar aqui e consultou beleza...

Rubens

Consulta optante do simples online

MensagemEnviado: 17 Nov 2017 09:23
por mga
Amigos,

alguem tem a ultima consulta XML(impnfenovo) em fivewin?

tentei converter mais estou tendo problemas.

muito obrigado

Consulta optante do simples online

MensagemEnviado: 26 Dez 2017 16:23
por lucimauro
Alguém esta tendo problema em baixar usando o Impnfe.exe porque agora a tarde parou de funcionar. Esta trazendo o Xml todo embaraçado.

Consulta optante do simples online

MensagemEnviado: 28 Dez 2017 16:18
por lucimauro
Mais alguém aqui esta com esse mesmo problema?

Consulta optante do simples online

MensagemEnviado: 28 Dez 2017 16:33
por Daniel
Em todas as consultas? Ou em uma chave especifica?
pois aqui esta normal.

Consulta optante do simples online

MensagemEnviado: 28 Dez 2017 16:34
por janio
Daniel,

O problema eh que ele está criando tpAmb 2 (homologação) para todas as notas consultadas!

23140705537332000123550010000007971000007974

Consulta optante do simples online

MensagemEnviado: 28 Dez 2017 17:26
por fladimir
não é só mudar lá Janio?

Consulta optante do simples online

MensagemEnviado: 28 Dez 2017 17:33
por janio
Eu uso a versão compilada (ImpNfe.exe). Nao deu tempo ainda de integrar os fontes.

O interessante eh q estava funcionando muito bem, e de repente os xml's começaram a vir dessa forma.

Eu poderia ajustar o meu sistema pra aceitar lançar notas que foram emitidas em homologação, mas aí eh abrir muita brecha pra coisa errada

Consulta optante do simples online

MensagemEnviado: 28 Dez 2017 18:04
por fladimir
Entendi, achei q vc usava os fontes pra baixar.

Consulta optante do simples online

MensagemEnviado: 28 Dez 2017 19:29
por Daniel
Esta chave e da versão 2.00 tinha alguma diferença
Segue ele arrumado

Consulta optante do simples online

MensagemEnviado: 28 Dez 2017 21:04
por janio
Nao consigo baixar

Consulta optante do simples online

MensagemEnviado: 28 Dez 2017 22:39
por janio
Obrigado, amigo!

Integrei os fontes a minha aplicação pra não ficar dependendo de um exe externo!

Pra quem nao sabe o problema eh que pra determinar o ambiente, ele procurava 'produção'. Alguem la na sefaz mudou o html de retorno para 'Produção' rsrsrsrs. Coisa de quem nao tem o que fazer kkk

Vlw, obrigado!

Consulta optante do simples online

MensagemEnviado: 31 Dez 2017 20:02
por Nascimento
baixei mais esta dando como corrompido

Consulta optante do simples online

MensagemEnviado: 07 Jan 2018 19:17
por marcelo.chakal
A consulta optante do simples pra vocês estão OK? Quando eu tento executar aqui, abre, mas na hora que vou consultar ta erro e fecha, alguem está conseguindo? Se sim, poderia me passar o fonte?

Consulta optante do simples online

MensagemEnviado: 09 Jan 2018 11:12
por depaula.jau
Daniel, boa tarde!!!

Vc pode postar o anexo do programa compilado atualizado ?

O Meu esta dando problemas de comunicação com o Servidor

Abs:

Marcelo de Paula

Consulta optante do simples online

MensagemEnviado: 09 Jan 2018 12:33
por Poka
Boa tarde

Aqui também dá erro

Poka

Consulta optante do simples online

MensagemEnviado: 12 Jan 2018 09:44
por marcelo.chakal
Fala galera,
Alguem tem o fonte ae do simples nacional funcionando? Se puder disponibilizar, agradeço.

Consulta optante do simples online

MensagemEnviado: 12 Jan 2018 13:12
por Daniel
Poka e DePaula
qual seria o erro? pois aqui esta normal.
Marcelo sobre o simples nacional, o fonte esta no inicio deste poster
http://www.pctoledo.com.br/forum/download/file.php?id=3212

Consulta optante do simples online

MensagemEnviado: 12 Jan 2018 16:33
por rubens
Daniel... ainda tô com versão antes do captcha automático..
Ela ainda baixa notas.. desde que não sejam notas em sequencia...
Tipo baixa uma agora, daqui meia hora baixa de novo...
Essa versão nova sem o captcha... tá baixando normal.? não está dando erros?

Vou ter que compilar ela aqui..

Rubens

Consulta optante do simples online

MensagemEnviado: 15 Jan 2018 16:31
por depaula.jau
Consulta optante do simples online
Nova mensagempor Daniel » 12 Jan 2018 13:12

Poka e DePaula
qual seria o erro? pois aqui esta normal.


Algo com a imagem, devo esta com algo desatualizado né!!!!

Consulta optante do simples online

MensagemEnviado: 15 Jan 2018 19:54
por rubens
Tenta esse aqui DePaula..

Impnfe.zip
(839.83 KiB) Baixado 114 vezes


Rubens

Consulta optante do simples online

MensagemEnviado: 18 Jan 2018 11:06
por marcelo.chakal
Vocês estão conseguindo baixar?
Aqui no meu ta dando erro.

Consulta optante do simples online

MensagemEnviado: 18 Jan 2018 12:20
por rubens
Aqui só pode baixar umas 4 ou 5 seguidas... mais que isso começa dar erro...

Rubens

Consulta optante do simples online

MensagemEnviado: 18 Jan 2018 16:07
por marcelo.chakal
Daniel escreveu:Marcelo sobre o simples nacional, o fonte esta no inicio deste poster


Daniel, vlw meu broder! Eu já havia feito isso, só que no meu sempre que tento da msg "Erro ao conectar no servidor" ou então quando traz o captcha e eu preencho e clico em consultar, o programa para e finaliza.

Vocês estão conseguindo fazer a consulta normalmente?

Consulta optante do simples online

MensagemEnviado: 18 Jan 2018 20:19
por janio
Pessoal,

Estou com um xml que ta ficando muuuito diferente do xml baixado pelo fsist, por exemplo.

Valores e percentuais do COFINS... valor ICMS com substituição tributária...

Destaco apenas algumas diferenças nas imagens abaixo.

Chave: 23171263310411000101550040014072241517802890

Consulta optante do simples online

MensagemEnviado: 18 Jan 2018 22:00
por fladimir
Anexei o meu tb para que alguém possa, caso possível, orientar onde corrijo no fonte, tentei alterar, mas não obtive sucesso.

Consulta optante do simples online

MensagemEnviado: 19 Jan 2018 07:32
por Daniel
fladimir escreveu:Anexei o meu tb para que alguém possa, caso possível, orientar onde corrijo no fonte, tentei alterar, mas não obtive sucesso.

Voce pode fornecer o numero da chave para eu arrumar

Consulta optante do simples online

MensagemEnviado: 19 Jan 2018 10:30
por fladimir
50180143001981002903550020000623831710162676 (questao entrega/ e qVol)
50171243001981004272550020000183201915194570 (questao nFCI)

Consulta optante do simples online

MensagemEnviado: 19 Jan 2018 14:56
por Daniel
Ola
segue nova versão

Consulta optante do simples online

MensagemEnviado: 21 Jan 2018 09:26
por lucimauro
Valeu Daniel, muito obrigado.

Consulta optante do simples online

MensagemEnviado: 24 Jan 2018 07:36
por Wanderlei
Bom dia Daniel, você podeira dar uma olhada nesta chave 52171201206820001500550040022885791854519399, não consigo baixar ela.
Observei o seguente: que o nome dos campos mudam de acordo com o CST do produto, exemplo:
em um produto vem escrito: Modalidade de determinação da BC do ICMS ST e no outro vem assim: Modalidade Definição da BC ICMS ST
e tem mais campos.

Consulta optante do simples online

MensagemEnviado: 06 Fev 2018 10:57
por marcelo.chakal
Daniel, a consulta do simples não to conseguindo ainda, mesmo pegando do inicio da página.
Será que é porque os links mudaram também?

Consulta optante do simples online

MensagemEnviado: 06 Fev 2018 20:28
por Daniel
Ola acho que não mudou, aqui esta funcionando ok
Segue ele para teste

Consulta optante do simples online

MensagemEnviado: 06 Fev 2018 21:43
por Daniel
Wanderlei escreveu:Bom dia Daniel, você podeira dar uma olhada nesta chave 52171201206820001500550040022885791854519399, não consigo baixar ela.
Observei o seguente: que o nome dos campos mudam de acordo com o CST do produto, exemplo:
em um produto vem escrito: Modalidade de determinação da BC do ICMS ST e no outro vem assim: Modalidade Definição da BC ICMS ST
e tem mais campos.

Consulta optante do simples online

MensagemEnviado: 09 Fev 2018 05:52
por Wanderlei
Valeu Daniel.

Consulta optante do simples online

MensagemEnviado: 25 Fev 2018 10:43
por janio
Daniel e amigos,

Peguei um caso de um xml esquisito. Ha uma QUEBRA de numeração na SEQUENCIA do ITENS (pasmem). Não ha os 10 e 13.

Baixando pelo fsist ele trouxe o xml tal como está na receita. Essa quebra da sequencia f*deu com minha função de leitura do xml.

Baixando pela solução deste tópico ele tenta consertar essa quebra de sequencia rsrsrs, mas se atrapalhou não pegando os produtos corretamente. Os itens faltantes (10 e 13) ele repete pelo PRIMEIRO produto. O produto <cProd>000000000012036006</cProd> há 3x no xml.

Consulta optante do simples online

MensagemEnviado: 27 Mar 2018 13:50
por gilbertooliver
Pessoal alguém aqui já viu isso?

https://blog.danfe.br.com/api-para-gera ... so-da-nfe/

Queria saber como eles conseguiram, retorna o XML e o DANFE, não tem captcha, não tem nada...

Consulta optante do simples online

MensagemEnviado: 23 Mai 2018 19:52
por janio
Boa noite,

Hj tivemos muitas reclamações de clientes que não estavam conseguindo baixar o xml pelo ImpNfe disponibilizada aqui.

Erro: "FALHA NA VALIDAÇÃO DO CAPTCHA"

Alguem mais passou por isso?

Sera a sefaz mexendo de novo?

Consulta optante do simples online

MensagemEnviado: 24 Mai 2018 08:29
por Wanderlei
Eu também estou com o mesmo problema.

o Daniel ajuda a gente.

Consulta optante do simples online

MensagemEnviado: 24 Mai 2018 10:17
por fladimir
Acredito q possa ser mudanças lá

Consulta optante do simples online

MensagemEnviado: 24 Mai 2018 10:57
por rubens
Vocês atualizaram para a última versão que o Daniel corrigiu? Que baixa sem o captcha?
Eu uso a versão anterior e ainda tá baixando... só que se eu mandar baixar mais de duas notas seguidas da erro...

Rubens

Consulta optante do simples online

MensagemEnviado: 24 Mai 2018 16:33
por Wanderlei
Rubens eu estou usando a ultima sem o captcha, mas estou tentando usar com o captcha mas está dando muito erro para abrir o link http, se eu colocar o https abre rapido mas dá erro na hora de colocar o captcha.

Consulta optante do simples online

MensagemEnviado: 24 Mai 2018 22:57
por lucimauro
Eu também estou recebendo varias reclamações com o erro "FALHA NA VALIDAÇÃO DO CAPTCHA" na hora de baixar os xml.
Hoje por exemplo acho que não quase não funcionou em nenhum cliente.

Consulta optante do simples online

MensagemEnviado: 25 Mai 2018 12:17
por fladimir
Pessoal, a melhor solução é usar o download com certificado via webservice, acessando diretamente ou via ACBr, ou outros.

O q nosso amigo Daniel disponibilizou é dependente do site e regras da pagina em q é buscada a informação, mais cedo ou mais tarde isso ia acontecer, ou seja, pode ser até q seja resolvido, mas como disse acima é melhor usar o q já tem disposto e baixa na integra o XML original.

Consulta optante do simples online

MensagemEnviado: 25 Mai 2018 13:11
por janio
O problema de usar o certificado eh:

Primeiro, o certificado tem q estar instalado em todas as maquinas que fazem o download

Segundo, antes de fazer o download tem q fazer a manifestação, se nao me engano.

Ou seja, tem uns pregos no caminho.

Com a baixa direto e, considerando que a inteção eh apenas para agilizar o lançamento de notas de entrada, a solução daqui (e outras) eh PERFEITA.

A conversa de que um dia vai parar... vai parar... vai parar... ja faz um tempo e mesmo assim ta funcionando ate hoje

Consulta optante do simples online

MensagemEnviado: 25 Mai 2018 13:29
por rubens
Tem a opção de autorização de download tb... o problema é o os fornecedores do clientes enviarem essa autoriazação de download tb no xml ...
Rubens

Consulta optante do simples online

MensagemEnviado: 26 Mai 2018 18:26
por janio
Nada, pessoal?

Clientes estao pra arrancar meus ultimos cabelos

Consulta optante do simples online

MensagemEnviado: 26 Mai 2018 18:37
por fladimir
mantenho o q disse, já estou implementando, os clientes já emitem NFe, ou seja, já tem o certificado então pra baixar via ACBr ou webservice melzinho na chupeta.

Qto a ter q manifestar pra fazer isto é simples, se já ta com a chave pra dar entrada sinal q a nota / mercadoria chegou então já manifesta como ciencia da operação, faz o download e pronto, sem dor de cabeça e vem o xml original

Consulta optante do simples online

MensagemEnviado: 29 Mai 2018 08:47
por rubens
Bom dia..

Fladimir..

Sei que deve tá muito ocupado aí... mas posta a rotina da manifestação.. um tempo atrás tentei implementar isso mas parece que ainda não funcionava direito no acbr...

Obrigado
Rubens

Consulta optante do simples online

MensagemEnviado: 29 Mai 2018 10:24
por fladimir
Sim meu amigo Rubens, abri outro tópicopara tratarmos esse assunto.

Abraço.

Consulta optante do simples online

MensagemEnviado: 30 Mai 2018 13:31
por Wanderlei
Oi Daniel, será que vc consegue mudar as chamadas das funções do oInternet:= TIPClientHTTP():New(cUrl, .f.) pela criação dos objetos tipo este:
oServer:= CreateObject( "MSXML2.ServerXMLHTTP.6.0")
assim nos poderiamos usar o https.

Consulta optante do simples online

MensagemEnviado: 05 Jun 2018 14:03
por Daniel
Ola
Como a versão sem captcha parou de funcionar.
Segue este com captcha

Consulta optante do simples online

MensagemEnviado: 05 Jun 2018 14:32
por janio
vaaaaaaleu, obg.

Iremos testar

Consulta optante do simples online

MensagemEnviado: 05 Jun 2018 15:39
por rubens
Boa tarde...

Funcionou belezinha aqui... Obrigado Daniel... :{ :{ :{

Segue versão compilada que eu tinha implementado um tempo atrás que tb pode ser chamada da nossa aplicação...

Impnfe.zip
(763.15 KiB) Baixado 129 vezes

Consulta optante do simples online

MensagemEnviado: 05 Jun 2018 22:29
por lucimauro
@Daniel junto a seus arquivos que voce disponibilizou segue os prg atualizados?
Digo isso porque a minigui eu não domino.

Desde já agradeço por sua contribuição.

Consulta optante do simples online

MensagemEnviado: 06 Jun 2018 01:09
por fladimir
Sim Lucimauro.

Testei aki e ficou com Captcha funcional. Tomara q demorem um bom tempo para mudar

Consulta optante do simples online

MensagemEnviado: 06 Jun 2018 08:11
por lucimauro
Bom dia

@fladimir mais você teve que juntar ou já usa a minigui para integrar a seu sistema ou apenas chamou o executavel de dentro dele?

Consulta optante do simples online

MensagemEnviado: 06 Jun 2018 08:38
por rubens
Bom dia..

Lucimauro, se estiver falando da versão compilada que disponibilizei usa assim:
FUNCTION ImpXml()  
   cPathXml   := cPath + Alltrim( Pers->PAstaXml )    // Pasta onde vai baixar o xml
   HB_RUN( 'START '+cPath+'ImportarXml\impnfe.exe '+cPathXml )
   Return nil

Tem que executar o impnfe.exe e informar junto a pasta onde vai baixar o xml.
Não precisa nem ser (x)harbour, até do clipper da para baixar.

Rubens

Consulta optante do simples online

MensagemEnviado: 06 Jun 2018 10:10
por Wanderlei
Valeu Daniel, mais uma vez salvando a pátria.

Consulta optante do simples online

MensagemEnviado: 06 Jun 2018 10:20
por Kapiaba
Rubens,

rubens.png


Abs.

Consulta optante do simples online

MensagemEnviado: 06 Jun 2018 10:30
por rubens
Kapiaba...

Tenta baixar essa chave no impnfe que o Daniel disponibilizou... se continuar ocorrendo, se puder posta essa chave aqui para gente ver o que é...
Aqui tá baixando normal...

Rubens

Consulta optante do simples online

MensagemEnviado: 06 Jun 2018 10:33
por Kapiaba
Essa chave é do ambiente de homologação, será por isso?

Consulta optante do simples online

MensagemEnviado: 06 Jun 2018 10:40
por rubens
Provavelmente éh isso.
As URLs são do ambiente de produção...
   Public cUrl := "https://www.nfe.fazenda.gov.br/portal/consultaResumoCompletaAntiga.aspx?tipoConsulta=completa&tipoConteudo=XbSeqxE8pl8%3D"
   Public cUrl2:= 'https://www.nfe.fazenda.gov.br/portal/consultaCompleta.aspx?tipoConteudo=XbSeqxE8pl8%3D'

Por isso tá retornando Array vazio no erro.
Tenta baixar uma chave do ambiente de produção para fazer o teste.

Rubens

Consulta optante do simples online

MensagemEnviado: 06 Jun 2018 11:39
por talisof
Rubens

Bom dia, quais argumentos devo passar para o exe?
para setar a chave e o local para salvar o xml.

Consulta optante do simples online

MensagemEnviado: 06 Jun 2018 14:15
por rubens
Bom dia, quais argumentos devo passar para o exe?
para setar a chave e o local para salvar o xml.


Só o Exe e o path onde será salvo o xml. O nome do Xml será a Chave. Isso se for integrar com o seu sistema manda executar enviando como argumento a pasta:
Impnfe "D:\XML", vai baixar o xml e salvar na pasta D:\xml

Se estiver usando harbour pode usar
HB_RUN( 'START '+cPath+'ImportarXml\impnfe.exe D:\XML' )
que funciona.

Agora se quiser deixar o usuário escolher a pasta use o arquivo que o Daniel disponibilizou. Que aí pode escolher a pasta onde vai salvar o arquivo e ainda pode imprimir um Danfe do Xml. O Daniel usou a classe do Quintas.

Rubens

Consulta optante do simples online

MensagemEnviado: 06 Jun 2018 19:56
por janio
Essa chave é do ambiente de homologação, será por isso?


Nao.

Esse erro acontece quando vc digita um CAPTCHA errado! Na função faltou um tratamento para esse erro

Na função "Continuar" deve ser acrescentado o codigo abaixo:

   If At('id="ctl00_ContentPlaceHolder1_bltMensagensErro" class="listaErro">', cHtml) > 0
      cPart:= Substr(cHtml, (At('id="ctl00_ContentPlaceHolder1_bltMensagensErro" class="listaErro">', cHtml) + 66))
      cPart:= Substr(cPart, (At('<li>', cPart) + 4))
      MsgInfo(Troca_Acento(SubStr(cPart, 1, (At('</li>', cPart) - 1))), 'aviso Erro')
      Return .f.
   EndIf

   If ! Empty(cHtml)
   ...

Consulta optante do simples online

MensagemEnviado: 07 Jun 2018 09:40
por rubens
Bom dia..

Valeu Janio.. Obrigado...

Segue corrigido...
impnfe.zip
(763.39 KiB) Baixado 122 vezes


Rubens

Consulta optante do simples online

MensagemEnviado: 08 Jun 2018 15:31
por rubens
Boa tarde...

No outro arquivo tava baixando incompleto os dados dos produtos..
Corrigido...
Impnfe.rar
(653.63 KiB) Baixado 181 vezes


Rubens

Consulta optante do simples online

MensagemEnviado: 04 Ago 2018 14:29
por Ariston Santos
Olá. Eu estou usando o Impnfe.exe para baixar os XMLs e sou muito grato ao Rubens, que o disponibilizou.
Só quero relatar um erro que encontrei: a NF-e 35180573856593000409550030000493221182770442 contém 3 lotes, mas no XML baixado pelo IMPNFE só vem 1.
Poderia corrigir e postar a atualização?
Obrigado.

Consulta optante do simples online

MensagemEnviado: 05 Ago 2018 02:02
por Jairo Maia
Olá Ariston Santos,

A última versão com os códigos fontes disponibilizadas pelo Daniel está aqui: viewtopic.php?p=123929#p123929

Consulta optante do simples online

MensagemEnviado: 05 Ago 2018 10:44
por rubens
Bom dia..

Ariston segue em anexo os fontes do projetos que compilei.
Lembrando que o original veio dos fontes do Daniel.. Só fiz algumas modificações ao meu gosto que alguma pessoas estão usando tb.
Uso a IDE da minigui extends para compilar.

Rubens

Consulta optante do simples online

MensagemEnviado: 25 Fev 2019 21:11
por Ariston Santos
Olá.
Eu gostaria de saber se já existe uma compilação mais recente do impnfe.exe que gera as tags de rastreamento e de ICMS Desonerado de cada item corretamente. A que tenho não gera essas tags corretamente.

Exemplo 1 - Rastreamento de Medicamento:
Imagem

Exemplo 2 - ICMS Desonerado:
Imagem

Chave de acesso para teste:
23181206628333000146550000001961571002685617

Grato pelo retorno.

Consulta optante do simples online

MensagemEnviado: 28 Fev 2019 12:00
por Daniel
Ola

Consulta optante do simples online

MensagemEnviado: 02 Mar 2019 00:23
por Ariston Santos
Muito obrigado, Daniel.
:)Pos

Consulta optante do simples online

MensagemEnviado: 19 Mar 2019 18:31
por Fernando queiroz
Alguém tem essa rotina em HWGUI to querendo incluir no meu sistema

Consulta optante do simples online

MensagemEnviado: 20 Mar 2019 15:01
por Fernando queiroz
//=========================================================================
//
// Arquivo.....: impnfe.prg
// Criado em...: 09/05/2016 as 10:41:18
//
// Projeto.....: Importa NF-e da SEFAZ
//
// Programador.: Daniel Denobie - denobie@hotmail.com
//               alterado para HWgui em 20/03/2019 por
//               Fernando Queiroz - m5200n@hotmail.com
//=========================================================================

#include 'HWgui.ch'
#include 'hbcompat.ch'

MEMVAR aCobr, I, cInfCpl, cInfAdFisco, cDigVal, cChave, cVerAplic, cTpAmb, c_Span, cRet, aRet
MEMVAR cVersao, cArqXml, cIniFolder, nArqHandle, cxMotivo, ccStat, cnProt, cPart_, aFat, oDanfe
MEMVAR cDhRecbto, cTag, cTagPai, nIni, nFimTagPai, aTotais, cDiscAdicional, nContador, aIcmsPart
MEMVAR P_, aDet, aPis, aTransp, aCofins, aIpi, lpOemTag, cTag_, aIcms, aTrib, nSoma, aCompra
MEMVAR aMedicamentos, aEmit, aDest, aIde, c_Tag, cPar_, nTamTag, cPar1_, nFim, cFile, aEntrega
MEMVAR cParte, Contador, nTotPro, cHtml, cPart, cStringCookie, cViewState, cViewStateGenerator
MEMVAR nFim3, cHiddenToken, nIni4, cHtml1, nFim4, Txt_File, cCodigo, ceEventValidation, cIndPag
MEMVAR nIni1, nFim1, nIni2, nFim2, nIni3, cHiddenSom, cUrl, oServer, nInie, nFime, cUrl2, aRastro
MEMVAR cMsgErro, c, aItensNota, cFCI, aMedLote, aPagamento, nCP

***************************************
Function IMPNFE()
***************************************
   LOCAL oBitmap1, oGroup1, oLabel1, oChave_NFe, oIcon1, oTxt_captcha, oLabel2
   LOCAL Button_1, Button_2, Button_3, oSayImg

   Public cUrl := "https://www.nfe.fazenda.gov.br/portal/consultaResumoCompletaAntiga.aspx?tipoConsulta=completa&tipoConteudo=XbSeqxE8pl8%3D"
   Public cUrl2:= 'https://www.nfe.fazenda.gov.br/portal/consultaCompleta.aspx?tipoConteudo=XbSeqxE8pl8%3D'
   Public cCaptcha:=space(6), cCnpj, cStringCookie, cViewState, cEeventValidation, cHiddenToken, cCodigo, cViewStateGenerator
   Public cHiddenSom, cChave:=space(44)
   

  INIT DIALOG oDlg TITLE "Importar XML NF-e" ;
    AT 708,198 SIZE 732,336 ;
     STYLE DS_CENTER+DS_ABSALIGN ;
    ON INIT {|| AtualizaImagem() }
   
   Principal   := oDlg

   @ 9,1 BITMAP oBitmap1  ;
        SHOW 'CABNFE' FROM RESOURCE ;
        SIZE 715,130   
   @ 212,147 SAY oLabel1 CAPTION "Chave de Acesso da NF-e" OF oGroup1  SIZE 435,17    ;
        FONT HFont():Add( '',0,-16,400,,,)
   @ 213,169 GET oChave VAR cChave OF oGroup1  SIZE 495,28 ;
        STYLE WS_BORDER   PICTURE '99999999999999999999999999999999999999999999' MAXLENGTH 44   ;
      FONT HFont():Add( '',0,-19,400,,,)
   @ 213,213 GET oTxt_captcha VAR cCaptcha OF oGroup1  SIZE 83,28 ;
        STYLE WS_BORDER   MAXLENGTH 6   ;
      FONT HFont():Add( '',0,-19,400,,,)
   @ 303,216 SAY oLabel2 CAPTION "Digite o código da imagem ao lado" OF oGroup1  SIZE 326,22    ;
        FONT HFont():Add( '',0,-16,400,,,)
   @ 213,259 OWNERBUTTON Button_1  OF oGroup1  SIZE 99,26 ;
        TEXT 'Baixar'  ;
        COORDINATES 0, 0, 0, 0  ;
        FONT HFont():Add( '',0,-16,400,,,);
      ON CLICK {|| IIF(Continuar(cCaptcha, cChave), oDlg:Close(), (cCaptcha:=space(6), Principal:oTxt_captcha:REFRESH(), principal:oTxt_captcha:SetFocus()) )  }
   @ 323,259 OWNERBUTTON Button_2  OF oGroup1  SIZE 99,26 ;
        TEXT 'Limpar'  ;
        COORDINATES 0, 0, 0, 0  ;
        FONT HFont():Add( '',0,-16,400,,,);
      ON CLICK {|| limpar( ) }
   @ 606,259 OWNERBUTTON Button_3  OF oGroup1  SIZE 99,26 ;
        TEXT 'Sair'  ;
        COORDINATES 0, 0, 0, 0  ;
        FONT HFont():Add( '',0,-16,400,,,);
      ON CLICK {|| oDlg:Close() }

   @ 12, 171 IMAGE oSayImg SHOW Nil OF oGroup1 SIZE 180, 70

   @ 9,129 GROUPBOX oGroup1 CAPTION ""  SIZE 715,172    ;
        FONT HFont():Add( '',0,-11,400,,,)

   ACTIVATE DIALOG principal
RETURN cChave

****************************************
STATIC Function Limpar()

   cChave:=space(44)
   cCaptcha:=space(6)
   Principal:oChave:REFRESH()
   Principal:oTxt_captcha:REFRESH()
   AtualizaImagem()
   principal:oChave:SetFocus()
   Return Nil

***************************************************
Function AtualizaImagem()

#require "hbfimage"

   Try
      oServer:= win_OleCreateObject("MSXML2.ServerXMLHTTP.6.0")
   Catch
      hwg_MsgInfo('Erro na Criação do Serviço')
      Return .f.
   End
   Try
      oServer:Open( "GET", cUrl, .f. )
      oServer:SetRequestHeader( "Content-Type", "application/x-www-form-urlencoded" )
      oServer:SetRequestHeader( "Connection", "keep-alive" )
      oServer:Send()
      oServer:WaitForResponse( 100000 )
   Catch
      hwg_MsgInfo('Erro na Conexão com o Site')
      Return .f.
   End
   c:= oServer:getResponseHeader("Set-Cookie")
   cStringCookie:= Substr(c, 1, At(';', c) -1)
   cHtml:= oServer:ResponseBody
//  MemoWrit('siteA.txt', cHtml)

   nInie   := At('id="ctl00_ContentPlaceHolder1_lblMensagemErro">',  cHtml) + 47
   If nInie > 47
      cHtml1  := SubStr( cHtml, nInie)
      nFime   := At('</span>', cHtml1) - 1
      cMsgErro:= SubStr(cHtml, nInie, nFime)
      If ! Empty(cMsgErro)
         hwg_MsgInfo(cMsgErro, 'Erro no Site ' + cUrl)
         Return .f.
      EndIf
   EndIf
   nIni  := At('id="__VIEWSTATE" value=',  cHtml) + 24
   cHtml1:= SubStr( cHtml, nIni)
   nFim  := At('" />', cHtml1) - 1
   cViewState:= SubStr(cHtml, nIni, nFim)

   nIni1 := At('id="__EVENTVALIDATION" value="',  cHtml) + 30
   cHtml1:= SubStr( cHtml, nIni1)
   nFim1 := At('" />', cHtml1) - 1
   cEeventValidation:= SubStr(cHtml, nIni1, nFim1)

   nIni2 := At('id="__VIEWSTATEGENERATOR" value="',  cHtml) + 33
   cHtml1:= SubStr( cHtml, nIni2)
   nFim2 := At('" />', cHtml1) - 1
   cViewStateGenerator:= SubStr(cHtml, nIni2, nFim2)

   nIni3 := At('id="ctl00_ContentPlaceHolder1_token" value="',  cHtml) + 44
   cHtml1:= SubStr( cHtml, nIni3)
   nFim3 := At('" />', cHtml1) - 1
   cHiddenToken:= SubStr(cHtml, nIni3, nFim3)

   nIni4 := At('id="ctl00_ContentPlaceHolder1_captchaSom" value="',  cHtml) + 49
   cHtml1:= SubStr( cHtml, nIni4)
   nFim4 := At('" />', cHtml1) - 1
   cHiddenSom:= SubStr(cHtml, nIni4, nFim4)

   nIni  := At('data:image/png;base64,',  cHtml) + 22
   cHtml1:= SubStr(cHtml, nIni)
   nFim  := At('" />', cHtml1) - 1
   cFile:= SubStr(cHtml, nIni, nFim)
   txt_file:=fcreate("captcha.png", 0)
   If (!(ferror() = 0))
      hwg_MsgInfo("Erro de criacao do arquivo de imagem " + Str(ferror(), 3, 0))
      Return .f.
   EndIf

   cCodigo:= SubStr(cHtml, nIni, nFim)
   If Empty(cCodigo)
      hwg_MsgInfo("Erro de criacao do arquivo de imagem")
      Return .f.
   EndIf
   cFile:= hb_base64Decode(cFile, cCodigo)
   FWrite(txt_file, cFile)
   FClose(txt_file)
   Principal:oSayImg:ReplaceImage( 'Captcha.png' )
   Principal:oSayImg:Refresh()
   principal:Button_1:Enabled()

   Return .t.

***************************************************
Function Continuar(cCaptcha, Chave)
Local cParm, oServer
Public cChave:= Chave, aItensNota:= {}

   If ! DigitoChave(cChave)
      Return Nil
   EndIf

   cParm:=  "__EVENTTARGET=" + ;
            "&__EVENTARGUMENT=" + ;
            "&__VIEWSTATE=" + Transfome(cviewState) + ;
            "&__VIEWSTATEGENERATOR=" + Transfome(cViewStateGenerator) + ;
            "&__EVENTVALIDATION=" + Transfome(cEeventValidation) + ;
            "&ctl00%24txtPalavraChave=" + ;
            "&ctl00%24ContentPlaceHolder1%24txtChaveAcessoCompleta=" + cChave + ;
            "&ctl00%24ContentPlaceHolder1%24txtCaptcha=" + cCaptcha + ;
            "&ctl00%24ContentPlaceHolder1%24btnConsultar=Continuar" + ;
            "&ctl00%24ContentPlaceHolder1%24token=" + Transfome(cHiddenToken) + ;
            "&ctl00%24ContentPlaceHolder1%24captchaSom=" + Transfome(cHiddenSom) + ;
            "&hiddenInputToUpdateATBuffer_CommonToolkitScripts=1"
     Try
      oServer:= win_OleCreateObject( "MSXML2.ServerXMLHTTP.6.0")
   Catch
      hwg_MsgInfo('Erro na Criação do Serviço')
      Return .f.
   End
   Try
      oServer:Open( "POST", cUrl, .f. )
   Catch
      hwg_MsgInfo('Erro na Conexão com o Site ' + cUrl)
      Return .f.
   End
     oServer:SetRequestHeader( "Content-Type", "application/x-www-form-urlencoded" )
   oServer:SetRequestHeader( "Connection", "keep-alive" )
   oServer:SetRequestHeader( "Cookie", cStringCookie)
     Try
      oServer:Send(cParm)
      oServer:WaitForResponse( 500000 )
   Catch
      hwg_MsgInfo('Erro na Resposta com o Site ' + cUrl)
      Return .f.
   End
   cHtml:= oServer:ResponseBody
   MemoWrit('siteA.txt', cHtml)  //Usado para testar sem Baixar

   If At('<div id="ctl00_ContentPlaceHolder1_vdsErros" class="listaErro" style="display:none;">', cHtml) > 0
      cPart:= Substr(cHtml, (At('<ul id="ctl00_ContentPlaceHolder1_bltMensagensErro" class="listaErro">', cHtml) + 80))
      cPart:= Substr(cPart, 1, (At('</li><li>', cPart) - 1))
      hwg_MsgInfo(Troca_Acento(cPart, 'aviso Erro'))
      Return .f.
   EndIf

   If At('<div class="divMensagemPaginaErro">', cHtml) > 0
      cPart:= Substr(cHtml, (At('<span id="ctl00_ContentPlaceHolder1_lblMensagemErro">', cHtml) + 53))
      cPart:= Substr(cPart, 1, (At('</span>', cPart) - 1))
      hwg_MsgInfo(Troca_Acento(cPart, 'aviso Erro'))
      Return .f.
   EndIf

   If ! Empty(cHtml)
      nIni  := At('<html><link ',  cHtml)
      cParte:= SubStr(cHtml, nIni)
      nIni  := At('<div id="ctl00_ContentPlaceHolder1_divBotoesConsulta"',  cParte)
      cParte:= SubStr(cParte, 1, nIni - 1)
      nFim  := At('</form>', cParte)
      cFile := SubStr(cParte, nFim)
      nTotPro:= 0
      c_span:= cFile
      While .t.
         nIni   := At('fixo-prod-serv-numero"><span>', c_span)
         If nIni > 0
            c_span:= SubStr(c_span, nIni + 29)
            nFim  := At('</span>', c_span) - 1
            AADD(aItensNota, Val(SubStr(c_span, 1, nFim)))
            nTotPro ++
         Else
            Exit
         EndIf
      End
      If nTotPro > 0
       If TratamentoDados()
         GravaXML()
         Else
            hwg_MsgInfo('Erro no Tratamento do Dados')
            Return  .f.
         EndIf
      Else
         hwg_MsgInfo('Erro no Tratamento do Dados')
         Return .f.
      Endif
   Else
      hwg_MsgInfo('Erro ao ler retorno da Consulta')
      Return .f.
   EndIf
   Return .t.

*****************************************
Static Function Teste(chave)// Função para testar geração do xml sem ter que baixar
Public cChave:= Chave, aItensNota:= {}

   cHtml:= MemoRead('siteA.txt')

   If At('id="ctl00_ContentPlaceHolder1_pnlErro" class="painel_erro_sistema">', cHtml) > 0
      cPart:= Substr(cHtml, (At('<span id="ctl00_ContentPlaceHolder1_lblResultadoConsulta">', cHtml) + 58))
      cPart:= Substr(cPart, 1, (At('</span>', cPart) - 1))
      hwg_MsgInfo(Troca_Acento(cPart, 'aviso Erro'))
      Return .f.
   EndIf

   If ! Empty(cHtml)
      nIni  := At('<html><link ',  cHtml)
      cParte:= SubStr(cHtml, nIni)
      nIni  := At('<div id="ctl00_ContentPlaceHolder1_divBotoesConsulta"',  cParte)
      cParte:= SubStr(cParte, 1, nIni - 1)
      nFim  := At('</form>', cParte)
      cFile := SubStr(cParte, nFim)
      nTotPro:= 0
      c_span:= cFile
      While .t.
         nIni   := At('fixo-prod-serv-numero"><span>', c_span)
         If nIni > 0
            c_span:= SubStr(c_span, nIni + 29)
            nFim  := At('</span>', c_span) - 1
            AADD(aItensNota, Val(SubStr(c_span, 1, nFim)))
            nTotPro ++
         Else
            Exit
         EndIf
      End
      If TratamentoDados()
         GravaXML()
      Else
         hwg_MsgInfo('Erro no Tratamento do Dados')
         Return  .f.
      EndIf
   Else
      hwg_MsgInfo('Erro ao ler retorno da Consulta')
      Return .f.
   EndIf
   Return .t.

***************************************
Function TratamentoDados()
Public aIde:={}, aEmit:={}, aDest:={}, aDet:={}, aICMS:={}, aIPI:={}, aPIS:={}, aCOFINS:={}, aTotais:={}, aTransp:={}, aCobr:={}
Public aMedicamentos:= {}, aTrib:= {}, aFat:={}, aCompra:= {}, aEntrega:= {}, aIcmsPart:= {}, aMedLote:={}, aPagamento:= {}
Public aRastro:= {}

* Conteudo elementos da Matriz = {VALOR_TAG,TAG,TAG_PAI,Elemento_Final_TAG_PAI,LABEL_HTML,TAM_LABEL}
* TAM_LABEL se ZERO pega tudo, se MAIOR que ZERO pega o tamanho no início e se MENOR que ZERO exclui o tamanho no início e pega o restante

   AADD(aIde,{{"","cUF","ide",21,"Chave de Acesso",2},; //1- tratamento especial
              {"","cNF","",0,"Número",0},; //2- tratamento especial
              {"","natOp","",0,"Natureza da Operação",0},; //3-
              {"","indPag","",0,"Forma de Pagamento",1},; //4-
              {"","mod","",0,"Modelo",0},; //5-
              {"","serie","",0,"Série",0},; //6-
              {"","nNF","",0,"Número",0},; //7-
              {"","dhEmi","",0,"Data de Emissão",0},; //8- tratamento especial
              {"","dhSaiEnt","",0,"Entrada",0},; //9- tratamento especial
              {"","tpNF","",0,"Tipo da Operação",1},; //10-
              {"","idDest","",0,"Destino da operação",1},; //11-
              {"","cMunFG","",0,"Município da Ocorrência do Fato Gerador do ICMS",0},; //12-
              {"","tpImp","",0,"Formato de Impressão DANFE",1},; //13- tratamento especial
              {"","tpEmis","",0,"Tipo de Emissão",1},; //14-
              {"","cDV","",0,"Chave de Acesso",0},; //15- tratamento especial
              {"","tpAmb","",0,"Ambiente de autorização:",0},; //16- tratamento especial
              {"","finNFe","",0,"Finalidade",1},; //17-
              {"","indFinal","",0,"Consumidor final",1},; //18-
              {"","indPres","",0,"Presença do Comprador",1},; //19-
              {"","procEmi","",0,"Processo",1},; //20-
              {"","verProc","",0,"Versão do Processo",0}}) //21-

   AADD(aEmit,{{"","CNPJ","emit",20,"CNPJ",0},; //1- tratamento especial
               {"","CPF","",0,"CPF",0},; //2-
               {"","xNome","",0,"Nome / Razão Social",0},; //3-
               {"","xFant","",0,"Nome Fantasia",0},; //4-
               {"","xLgr","enderEmit",15,"Endereço",0},; //5- tratamento especial
               {"","nro","",0,"Endereço",0},; //6- tratamento especial
               {"","xCpl","",0,"Endereço",0},; //7- tratamento especial
               {"","xBairro","",0,"Bairro / Distrito",0},; //8-
               {"","cMun","",0,"Município",7},; //9-
               {"","xMun","",0,"Município",-10},; //10-
               {"","UF","",0,"UF",0},; //11-
               {"","CEP","",0,"CEP",0},; //12-
               {"","cPais","",0,"País",4},; //13- tratamento especial
               {"","xPais","",0,"País",-7},; //14-
               {"","fone","",0,"Telefone",0},; //15- tratamento especial
               {"","IE","",0,"Inscrição Estadual",0},; //16-
               {"","IEST","",0,"Inscrição Estadual do Substituto Tributário",0},; //17-
               {"","IM","",0,"Inscrição Municipal",0},; //18-
               {"","CNAE","",0,"CNAE Fiscal",0},; //19-
               {"","CRT","",0,"Código de Regime Tributário",1}}) //20-

   AADD(aDest,{{"","CNPJ","dest",20,"CNPJ",0},; //1-
               {"","CPF","",0,"CPF",0},; //2-
               {"","idEstrangeiro","",0,"",0},; //3-
               {"","xNome","",0,"Nome / Razão Social",0},; //4-
               {"","xLgr","enderDest",15,"Endereço",0},; //5- tratamento especial
               {"","nro","",0,"Endereço",0},; //6- tratamento especial
               {"","xCpl","",0,"Endereço",0},; //7- tratamento especial
               {"","xBairro","",0,"Bairro / Distrito",0},; //8-
               {"","cMun","",0,"Município",7},; //9-
               {"","xMun","",0,"Município",-10},; //10-
               {"","UF","",0,"UF",0},; //11-
               {"","CEP","",0,"CEP",0},; //12- tratamento especial
               {"","cPais","",0,"País",4},; //13-
               {"","xPais","",0,"País",-7},; //14-
               {"","fone","",0,"Telefone",0},; //15- tratamento especial
               {"","indIEDest","",0,"Indicador IE",2},; //16- tratamento especial
               {"","IE","",0,"Inscrição Estadual",0},; //17-
               {"","ISUF","",0,"Inscrição SUFRAMA",0},; //18-
               {"","IM","",0,"IM",0},; //19-
               {"","email","",0,"E-mail",0}}) //20-

    AADD(aEntrega,{{"","CNPJ","entrega",7,"CNPJ",0},; //1-
                   {"","xLgr","",15,"Logradouro",0},; //2- tratamento especial
                   {"","nro","",0,"Logradouro",0},; //3- tratamento especial
                   {"","xBairro","",0,"Bairro",0},; //4-
                   {"","cMun","",0,"Município",7},; //5-
                   {"","xMun","",0,"Município",-10},; //6-
                   {"","UF","",0,"UF",0}}) //7-

*   Conteudo elementos da Matriz = {VALOR_TAG,TAG,LABEL_HTML}

   AADD(aTotais,{{"0.00","vBC", "Base de Cálculo ICMS"},; //1-
                 {"0.00","vICMS", "Valor do ICMS"},; //2-
                 {"0.00","vICMSDeson", "Valor do ICMS Desonerado"},; //3-
                 {"0.00","vFCPUFDest", "Valor Total ICMS FCP"},; //4-
                 {"0.00","vICMSUFDest", "Valor Total ICMS Interestadual UF Destino"},;
                 {"0.00","vICMSUFRemet", "Valor Total ICMS Interestadual UF Rem."},;
                 {"0.00","vBCST","Base de Cálculo ICMS ST"},; //5-
                 {"0.00","vST","Valor ICMS Substituição"},; //6-
                 {"0.00","vProd","Valor Total dos Produtos"},; //7-
                 {"0.00","vFrete","Valor do Frete"},; //8-
                 {"0.00","vSeg","Valor do Seguro"},; //9-
                 {"0.00","vDesc","Valor Total dos Descontos"},; //10-
                 {"0.00","vII","Valor Total do II"},; //11-
                 {"0.00","vIPI","Valor Total do IPI"},; //12-
                 {"0.00","vPIS","Valor do PIS"},; //13-
                 {"0.00","vCOFINS","Valor da COFINS"},; //14-
                 {"0.00","vOutro","Outras Despesas Acessórias"},; //15-
                 {"0.00","vNF","Valor Total da NFe"},; //16-
                 {"0.00","vTotTrib","Valor Aproximado dos Tributos"}}) //17-

*   Conteudo elementos da Matriz = {VALOR_TAG, TAG, TAG_PAI, Elemento_Final_TAG_PAI, LABEL_HTML, TAM_LABEL}

   AADD(aTransp,{{"","modFrete","transp",17,"Modalidade do Frete",1},; //1-
                 {"","CNPJ","transporta",8,"CNPJ",0},; //2-
                 {"","CPF","",0,"CPF",0},; //3-
                 {"","xNome","",0,"Razão Social / Nome",0},; //4-
                 {"","IE","",0,"Inscrição Estadual",0},; //5-
                 {"","xEnder","",0,"Endereço Completo",0},; //6-
                 {"","xMun","",0,"Município",0},; //7-
                 {"","UF","",0,"UF",0},; //8-
                 {"",'placa','veicTransp',11,'Placa',0},; //9-
                 {"","UF","",0,"UF",0},; //10-
                 {"","RNTC","",0,"RNTC",0},; //11-
                 {"","qVol","vol",17,"Quantidade",0},; //12-
                 {"","esp","",0,"Espécie",0},; //13-
                 {"","marca","",0,"Marca dos Volumes",0},; //14-
                 {"","nVol","",0,"Numeração",0},; //15-
                 {"","pesoL","",0,"Peso Líquido",0},; //16-
                 {"","pesoB","",0,"Peso Bruto",0}}) //17-

*   Conteudo elementos da Matriz = {VALOR_TAG,TAG}

   AADD(aCobr,{{"","nDup"},; //1-
               {"","dVenc"},; //2-
               {"","vDup"},; //3-
               {"","nDup"},; //4-
               {"","dVenc"},; //5-
               {"","vDup"},; //6-
               {"","nDup"},; //7-
               {"","dVenc"},; //8-
               {"","vDup"},; //9-
               {"","nDup"},; //10-
               {"","dVenc"},; //11-
               {"","vDup"},; //12-
               {"","nDup"},; //13-
               {"","dVenc"},; //14-
               {"","vDup"},; //15-
               {"","nDup"},; //16-
               {"","dVenc"},; //17-
               {"","vDup"},; //18-
               {"","nDup"},; //19-
               {"","dVenc"},; //20-
               {"","vDup"},; //21-
               {"","nDup"},; //22-
               {"","dVenc"},; //23-
               {"","vDup"},; //24-
               {"","nDup"},; //25-
               {"","dVenc"},; //26-
               {"","vDup"},; //27-
               {"","nDup"},; //28-
               {"","dVenc"},; //29-
               {"","vDup"}}) //30-

   AADD(aFat, {{"","nFat"},;  //1-
               {"","vOrig"},; //2-
               {"","vDesc"},; //3-
               {"","vLiq"}})  //4-

   AADD(aPagamento, {{"","tPag"  ,"Tipo de Integração Pagamento",2},; //2- {"","indPag","Forma de Pagamento",1},; //1-
                     {"","vPag"  ,"Valor do Pagamento",0},; //3-
                     {"","CNPJ"  ,"CNPJ da Credenciadora",0},; //4-
                     {"","tBand" ,"Bandeira da operadora",0},; //5-
                     {"","cAut"  ,"Número de autorização",0},; //6-
                     {"","vTroco","Troco",0}}) //7-

//    Conteudo elementos da Matriz = {VALOR_TAG,TAG,LABEL_HTML,TAM_LABEL}
//    Produtos e Serviços da NF-e
      For p_:= 1 To nTotPro
        AADD(aDet,{{"","cProd"    ,"Código do Produto",0},; //1-
                   {"","cEAN"     ,"Código EAN Comercial",0},; //2-
                   {"","xProd"    ,"fixo-prod-serv-descricao",0},; //3-
                   {"","NCM"      ,"Código NCM",0},; //4-
                   {"","NVE"      ,"",0},; //5-
                   {"","CEST"     ,"Código CEST",0},; //6-
                   {"","indEscala","Indicador de Escala Relevante",0},; //6-
                   {"","CNPJFab"  ,"CNPJ do Fabricante da Mercadoria",0},; //6-
                   {"","cBenef"   ,"Código de Benefício Fiscal",0},; //6-
                   {"","EXTIPI"   ,"Código EX da TIPI",0},; //7-
                   {"","CFOP"     ,"CFOP",0},; //8-
                   {"","uCom"     ,"Unidade Comercial",0},; //9-
                   {"","qCom"     ,"Quantidade Comercial",0},; //10-
                   {"","vUnCom"   ,"Valor unitário de comercialização",0},; //11-
                   {"","vProd"    ,"fixo-prod-serv-vb",0},; //12-
                   {"","cEANTrib" ,"Código EAN Tributável",0},; //13-
                   {"","uTrib"    ,"Unidade Tributável",0},; //14-
                   {"","qTrib"    ,"Quantidade Tributável",0},; //15-
                   {"","vUnTrib"  ,"Valor unitário de tributação",0},; //16-
                   {"","vFrete"   ,"Valor Total do Frete",0},; //17-
                   {"","vSeg"     ,"Valor do Seguro",0},; //18-
                   {"","vDesc"    ,"Valor do Desconto",0},; //19-
                   {"","vOutro"   ,"Outras Despesas Acessórias",0},; //20-
                   {"","indTot"   ,"Indicador de Composição do Valor Total da NF-e",1},; //21-
                   {"","nItemPed" ,"Item do pedido de compra",0},; //22-
                   {"","xPed"     ,"Número do pedido de compra",0},; //23-
                   {"","infAdProd",'Descrição', 0},; //24-
                   {"","nFCI"     ,'Número da FCI', 0}}) //25-

         AADD(aTrib, {{"","vTotTrib","Valor Aproximado dos Tributos",0}}) //1-

         AADD(aCompra, {{"","xNEm","Nota de Empenho",0},; //1-
                        {"","xPed","Pedido",0},; //2-
                        {"","xCont","Contrato",0}}) //3-

         AADD(aRastro, {{"","nLote" , 'Número do Lote do produto', 0},; //1-
                        {"","qLote" , 'Quantidade de produto no Lote', 0},; //2-
                        {"","dFab"  , 'Data de fabricação/ Produção', 0},; //3-
                        {"","dVal"  , 'Data de validade', 0},;  //4-
                        {"","cAgreg", 'Código de Agregação', 0}}) //5-

         AADD(aMedicamentos, {{"","cProdANVISA"   ,'Código de Produto da ANVISA', 0},; //1-
                              {"","xMotivoIsencao",'Motivo da isenção da ANVISA', 0},; //2-
                              {"","vPMC"          ,'Preço Máximo Consumidor', 0}})     //3-

        AADD(aMedLote, {{"","nLote",'Nro. do Lote', 0},; //1-
                        {"","qLote",'Quantidade de produtos no lote', 0},; //2-
                        {"","dFab",'Data de fabricação', 0},; //3-
                        {"","dVal",'Data de validade', 0},;  //4-
                        {"","vPMC",'Preço Máximo Consumido', 0},; //5-
                        {"","infAdProd",'Descrição', 0},; //6-
                        {"","Controle",'', 0}}) //7-

        AADD(aICMS,{{"","orig","Origem da Mercadoria",1},; //1- ICMS Normal e  ST
                    {"","CST","Tributação do ICMS",2},; //2-
                    {"","CSOSN","Código de Situação da Operação",3},; //3-
                    {"","modBC","Modalidade",1},; //4-
                    {"","pRedBC","Percentual Redução",0},; //5-
                    {"","vBC","Base de Cálculo",0},; //6-
                    {"","pICMS","Alíquota do ICMS",0},; //7-
                    {"","vICMS","Valor do ICMS<",0},; //8-
                    {"","vICMSDeson","Valor ICMS desoneração",0},; //9-
                    {"","motDesICMS","Motivo da desoneração do ICMS",1},; //10-
                    {"","modBCST","Modalidade de Determinação da BC do ICMS ST",1},; //11-
                    {"","pMVAST","Percentual Margem Valor Adicionado do ICMS ST",0},; //12-
                    {"","pRedBCST","Percentual da Redução de BC do ICMS ST",0},; //13-
                    {"","vBCST","Valor da BC do ICMS ST",0},; //14-
                    {"","pICMSST","Alíquota do imposto do ICMS ST",0},; //15-
                    {"","vICMSST","Valor do ICMS ST",0},; //16-
                    {"","vBCSTRet","Valor da BC do ICMS ST retido",0},; //17-
                    {"","vICMSSTRet","Valor do ICMS ST retido",0},; //18-
                    {"","vICMSOp","",0},; //19-
                    {"","pDif","",0},; //20-
                    {"","vICMSDif","",0},; //21-
                    {"","pCredSN","Alíquota aplicável de cálculo do crédito",0},; //22-
                    {"","vCredICMSSN","Valor de crédito do ICMS",0}}) //23-

         AADD(aIPI,{{"","cEnq","Código de Enquadramento", 3},;
                   {"","CST","CST", 2},; //1-
                   {"","vBC","Base de Cálculo", 0},; //2-
                   {"","pIPI","Alíquota", 0},; //3-
                   {"","vIPI","Valor IPI", 0},; //4-
                   {"","qBCProd","", 0},; //5-
                   {"","vAliqProd","", 0}}) //6-

         AADD(aPIS,{{"","CST","CST", 2},; //1-
                   {"","vBC","Base de Cálculo", 0},; //2-
                   {"","pPIS","Alíquota", 0},; //3-
                   {"","vPIS","Valor", 0},; //4-
                   {"","qBCProd","", 0},; //5-
                   {"","vAliqProd","", 0}}) //6-

         AADD(aCOFINS,{{"","CST","CST",2},; //1-
                      {"","vBC","Base de Cálculo",0},; //2-vBC
                      {"","pCOFINS","Alíquota",0},; //3-
                      {"","vCOFINS","Valor<",0},; //4-
                      {"","qBCProd","",0},; //5-
                      {"","vAliqProd","",0}}) //6-

         AADD(aIcmsPart,{{"0.00", "vBCUFDest"     , "Valor BC ICMS na UF Destino"}          ,; //1-
                         {"0.00", "pFCPUFDest"    , "Percentual ICMS FCP na UF Destino"}    ,; //2-
                         {"0.00", "pICMSUFDest"   , "Alíquota Interna UF Destino"}          ,; //3-
                         {"0.00", "pICMSInter"    , "Alíquota Interestadual das UFs"}       ,; //4-
                         {"0.00", "pICMSInterPart", "Percentual Provisório de Partilha"}    ,; //5-
                         {"0.00", "vFCPUFDest"    , "Valor do ICMS FCP"}                    ,; //6-
                         {"0.00", "vICMSUFDest"   , "Valor ICMS Interestadual UF Destino"}  ,; //7-
                         {"0.00", "vICMSUFRemet"  , "Valor ICMS Interestadual UF Remetente"}}) //8-

      Next p_

      nIni  := At('<div class="GeralXslt"', cFile)
      cParte:= SubStr(cFile, nIni)
      nIni  := At('<div id="Emitente"', cParte)
      cParte:= SubStr(cParte, 1, nIni - 1)  //ide
      GeraBlocoIde(cParte)

      nIni  := At('<div id="Emitente"', cFile)
      cParte:= SubStr(cFile, nIni)
      nIni  := At('</div>', cParte)
      cParte:= SubStr(cParte, 1, nIni - 1)  //emit
      GeraBlocoEmit(cParte)

      nIni  := At('<div id="DestRem"', cFile)
      cParte:= SubStr(cFile, nIni)
      nIni  := At('</div>', cParte)
      cParte:= SubStr(cParte, 1, nIni - 1)  //dest
      GeraBlocoDest(cParte)

      nIni  := At('Local de Entrega', cFile)
      cParte:= SubStr(cFile, nIni)
      nIni  := At('</div>', cParte)
      cParte:= SubStr(cParte, 1, nIni - 1)  //Local de Entrega
      GeraBlocoEntrega(cParte)

      nIni  := At('<td class="fixo-prod-serv-numero"><span>', cFile)
      cParte:= SubStr(cFile, nIni)
      nIni  := At('</body></html>', cParte)
      cParte:= SubStr(cParte, 1, nIni - 1)  //det
      GeraBlocoDet(cParte)

      nIni  := At('ICMS para a UF de destino', cFile)
      cParte:= SubStr(cFile, nIni)
      nIni  := At('</tr></table></fieldset>', cParte)
      cParte:= SubStr(cParte, 1, nIni - 1)  //icms Partilha
      GeraBlocoIcmsPart(cParte)

      nIni  := At('<legend class="titulo-aba">Totais</legend>', cFile)
      cParte:= SubStr(cFile, nIni+42)
      nIni  := At('<div id="aba_nft_5"', cParte)
      cParte:= SubStr(cParte, 1, nIni - 1)  //totais
      GeraBlocoTotais(cParte)

      nIni  := At('Dados do Transporte</legend>', cFile)
      cParte:= SubStr(cFile, nIni+29)
      nIni  := At('<div id="Cobranca"', cParte)
      cParte:= SubStr(cParte, 1, nIni - 1)  //transp
      GeraBlocoTransp(cParte)

      nIni  := At('Informações de Compra</legend>', cFile)
      cParte:= SubStr(cFile, nIni + 30)
      nIni  := At('<legend>Informações Complementares de Interesse do Contribuinte', cParte)
      cParte:= SubStr(cParte, 1, nIni - 1)  //compra
      GeraBlocoCompra(cParte)

      nIni  := At('<legend>Duplicatas</legend><table', cFile)
      If nIni > 0
         cParte:= SubStr(cFile, nIni)
           nIni  := At('</table>', cParte)
         cParte:= SubStr(cParte, 1, nIni - 1)  //cobr
         GeraBlocoCobr(cParte)
      EndIf

      nIni  := At('<legend>Fatura</legend><table', cFile)
      If nIni > 0
         cParte:= SubStr(cFile, nIni)
           nIni  := At('</table>', cParte)
         cParte:= SubStr(cParte, 1, nIni - 1)  //fatura
         GeraBlocoFat(cParte)
      EndIf

      nIni  := At('<legend class="titulo-aba">Formas de Pagamento</legend>', cFile)
      If nIni > 0
         cParte:= SubStr(cFile, nIni)
           nIni  := At('<div id="aba_nft_7" class="nft">', cParte)
         cParte:= SubStr(cParte, 1, nIni - 1)  //Pagamento
         GeraBlocoPagamento( cParte )
      EndIf

      Return .t.

****************************************
FUNCTION GeraBlocoIde( cParte )
Public cVersao:="", ctpAmb:="", cverAplic:="", cdhRecbto:="", cnProt:="", cdigVal:="", ccStat:="", cxMotivo:=""
Public cinfCpl:="", cinfAdFisco:="", cDiscAdicional:="", cFCI:= '', cIndPag:= ''

   cPar_ := StrTran( cFile, Chr( 13 ) + Chr( 10 ), "" )
   cPar_ := StrTran( cPar_, Chr( 160 ), "" )
   nIni := At( '<legend>Informações Complementares de Interesse do Contribuinte</legend>', cPar_ )
   IF nIni > 0
      c_span := SubStr( cPar_, nIni + 70 )
      nIni   := At( '<div style="word-wrap: break-word">', c_span )
      c_span := SubStr( c_span, nIni + 35 )
      nIni   := At( '</div></span>', c_span )
      cinfCpl:= AllTrim( SubStr( c_span, 1, nIni - 1 ) )
   ENDIF
   nIni := At( '<legend class="titulo-aba-interna">Informações Adicionais de Interesse do Fisco</legend>', cPar_ )
   IF nIni > 0
      c_span     := SubStr( cPar_, nIni + 88 )
      nIni       := At( '<label>Descrição</label><span>', c_span )
      c_span     := SubStr( c_span, nIni + 30 )
      nIni       := At( '</span>', c_span )
      cInfAdFisco:= AllTrim( SubStr( c_span, 1, nIni - 1 ) )
   ENDIF
   cPar_   := StrTran( cParte, Chr( 13 ) + Chr( 10 ), "" )
   cPar_   := StrTran( cPar_, Chr( 160 ), "" )
   nIni    := At( 'Situação Atual:', cPar_ )
   c_span  := SubStr( cPar_, nIni + 15 )
   nIni    := At( '(Ambiente de autorização:', c_span )
   cxMotivo := AllTrim( SubStr( c_span, 1, nIni - 1 ) )
   IF "AUTORIZADA" $ cxMotivo
      ccStat  := "100"
      cxMotivo := "Autorizado o uso da NF-e"
   ENDIF
   IF "CANCELADA" $ cxMotivo
      ccStat  := "101"
      cxMotivo:= "Cancelamento de NF-e homologado"
   ENDIF
   nIni     := At( 'Data Inclusão AN</label></td></tr><tr><td><span>', cPar_ )
   c_span   := SubStr( cPar_, nIni + 50 )
   nIni     := At( '<span>', c_span ) + 6
   nTamTag  := At( '<input', c_span ) - nIni
   cnProt   := AllTrim( SubStr( c_span, nIni, nTamTag ) )
   c_span   := SubStr( c_span, nIni + nTamTag )
   nIni     := At( '<span>', c_span ) + 6
   c_span   := SubStr( c_span, nIni )
   nTamTag  := At( '</span>', c_span ) -1  // nIni
   cdhRecbto:= AllTrim( SubStr( c_span, 1, nTamTag ) )
   cdhRecbto:= SubStr( cdhRecbto, 7, 4 ) + "-" + SubStr( cdhRecbto, 4, 2 ) + "-" + Left( cdhRecbto, 2 ) + "T" + Right( cdhRecbto, 14 )
   nIni     := At( '<i>Digest</i> Value da NF-e', cPar_ )
   c_span   := SubStr( cPar_, nIni + 20 )
   nIni     := At( '<span>', c_span ) + 6
   nTamTag  := At( '</span>', c_span ) - nIni
   cdigVal  := AllTrim( SubStr( c_span, nIni, nTamTag ) )
   nIni     := At( 'Versão XML', cParte )
   c_span   := SubStr( cParte, nIni )
   nIni     := At( '<span>', c_span ) + 6
   nTamTag  := At( '</span>', c_span ) - nIni
   cVersao  := AllTrim( SubStr( c_span, nIni, nTamTag ) )
   FOR i := 1 TO Len( aIde[ 1 ] )
      cPar_ := cParte
      IF i == 12
         cPar_ := cFile
      ENDIF
      IF i == 13
         cPar_ := cFile
      ENDIF
      nIni  := At( aIde[ 1, i, 5 ], cPar_ )
      c_span := SubStr( cPar_, nIni )
      IF i != 16
         nIni   := At( '<span>', c_span ) + 6
         nTamTag := At( '</span>', c_span ) - nIni
         c_tag  := AllTrim( SubStr( c_span, nIni, nTamTag ) )
      ELSE
         nIni := At( '</legend>', c_span )
         c_tag := AllTrim( SubStr( c_span, 1, nIni - 1 ) )
         IF HB_AtI( 'produção', c_tag ) > 0
            c_tag := "1"
         ELSE
            c_tag := "2"
         ENDIF
         ctpAmb := c_tag
      ENDIF
      IF i == 2
         c_tag := SubStr( cChave, 36, 8 )
      ENDIF
      IF i == 8 .OR. i == 9
         IF !Empt( c_tag )
            c_tag := SubStr( c_tag, 7, 4 ) + "-" + SubStr( c_tag, 4, 2 ) + "-" + Left( c_tag, 2 ) + "T" + SubStr( c_tag, 12 )
         ENDIF
      ENDIF
      IF i == 15
         c_tag := Right( c_tag, 1 )
      ENDIF
      IF aIde[ 1, i, 6 ] != 0
         IF aIde[ 1, i, 6 ] > 0
            c_tag := Left( c_tag, aIde[ 1, i, 6 ] )
         ELSE
            c_tag := SubStr( c_tag, Abs( aIde[ 1, i, 6 ] ) + 1 )
         ENDIF
      ENDIF
      aIde[ 1, i, 1 ] := c_tag
      IF i == 21
         cverAplic := c_tag
      ElseIf i == 4
          cIndPag:= c_tag
      ENDIF
   NEXT i
   RETURN NIL

***************************************
FUNCTION GeraBlocoEmit( cParte )

   cPar_ := StrTran( cParte, Chr( 13 ), "" )
   cPar_ := StrTran( cParte, Chr( 10 ), "" )
   cPar_ := StrTran( cPar_, Chr( 160 ), " " )
   FOR i := 1 TO Len( aEmit[ 1 ] )
      nIni := At( aEmit[ 1, i, 5 ], cPar_ )
      IF nIni > 0
         c_span := SubStr( cPar_, nIni )
         nIni   := At( '<span>', c_span ) + 6
         nTamTag:= At( '</span>', c_span ) - nIni
         c_tag := AllTrim( SubStr( c_span, nIni, nTamTag ) )
         IF i >= 1 .AND. i <= 2
            c_tag:= StrTran( c_tag, ".", "" )
            c_tag:= StrTran( c_tag, "/", "" )
            c_tag:= StrTran( c_tag, "-", "" )
         ENDIF
         IF i >= 5 .AND. i <= 7
            nIni:= At( ",,", c_tag )
            IF nIni == 0
               nIni:= At( ",", c_tag )
            ENDIF
            IF i == 5
               c_tag:= Left( c_tag, nIni - 1 )  // xlg
            ELSEIF i == 6
               c_tag:= AllTrim( SubStr( c_tag, nIni + 2 ) )
               nIni:= At( " ", c_tag )
               IF nIni > 0
                  c_tag:= Left( c_tag, nIni - 1 ) // nro
               ENDIF
            ELSE
               c_tag:= AllTrim( SubStr( c_tag, nIni + 2 ) )
               nIni := At( " ", c_tag )
               IF nIni > 0
                  c_tag:= AllTrim( SubStr( c_tag, nIni + 1 ) ) // xcpl
               ELSE
                  c_tag:= ""
               ENDIF
            ENDIF
         ENDIF
         IF i == 12
            c_tag := StrTran( c_tag, "-", "" )
         ENDIF
         IF i == 13
            c_tag := '1058'
         ENDIF
         IF i == 14
            c_tag := 'Brasil'
         ENDIF
         IF i == 15
            c_tag := StrTran( c_tag, "(", "" )
            c_tag := StrTran( c_tag, ")", "" )
            c_tag := StrTran( c_tag, "-", "" )
         ENDIF
         IF aEmit[ 1, i, 6 ] != 0
            IF aEmit[ 1, i, 6 ] > 0
               c_tag := Left( c_tag, aEmit[ 1, i, 6 ] )
            ELSE
               c_tag := AllTrim( SubStr( c_tag, Abs( aEmit[ 1, i, 6 ] ) + 1 ) )
               c_tag := AllTrim( StrTran( c_tag, "-", "" ) )
            ENDIF
         ENDIF
         aEmit[ 1, i, 1 ] := c_tag
      ENDIF
   NEXT i
   RETURN NIL

***************************************
FUNCTION GeraBlocoDest( cParte )

   FOR i := 1 TO Len( aDest[ 1 ] )
      cPar_ := StrTran( cParte, Chr( 13 ) + Chr( 10 ), "" )
      cPar_ := StrTran( cPar_, Chr( 160 ), "" )
      nIni := At( aDest[ 1, i, 5 ], cPar_ )
      IF nIni > 0
         c_span := SubStr( cPar_, nIni )
         nIni   := At( '<span>', c_span ) + 6
         nTamTag := At( '</span>', c_span ) -nIni
         c_tag  := AllTrim( SubStr( c_span, nIni, nTamTag ) )
         IF i >= 1 .AND. i <= 2
            c_tag := StrTran( c_tag, ".", "" )
            c_tag := StrTran( c_tag, "/", "" )
            c_tag := StrTran( c_tag, "-", "" )
         ENDIF
         IF i >= 5 .AND. i <= 7
            nIni := At( ",,", c_tag )
            IF nIni == 0
               nIni := At( ",", c_tag )
            ENDIF
            IF i == 5
               c_tag := Left( c_tag, nIni - 1 )
            ELSEIF i == 6
               c_tag := AllTrim( SubStr( c_tag, nIni + 1 ) )
               nIni := At( " ", c_tag )
               IF nIni > 0
                  c_tag := Left( c_tag, nIni - 1 )
               ENDIF
            ELSE
               c_tag := AllTrim( SubStr( c_tag, nIni + 2 ) )
               nIni := At( " ", c_tag )
               IF nIni > 0
                  c_tag := AllTrim( SubStr( c_tag, nIni + 1 ) )
               ELSE
                  c_tag := ""
               ENDIF
            ENDIF
         ENDIF
         IF i == 12
            c_tag := StrTran( c_tag, "-", "" )
         ENDIF
         IF i == 15
            c_tag := StrTran( c_tag, "(", "" )
            c_tag := StrTran( c_tag, ")", "" )
            c_tag := StrTran( c_tag, "-", "" )
         ENDIF
         IF i == 16
            c_tag := AllTrim( Str( Val( c_tag ) ) )
         ENDIF
         IF aDest[ 1, i, 6 ] != 0
            IF aDest[ 1, i, 6 ] > 0
               c_tag := Left( c_tag, aDest[ 1, i, 6 ] )
            ELSE
               c_tag := AllTrim( SubStr( c_tag, Abs( aDest[ 1, i, 6 ] ) + 1 ) )
               c_tag := AllTrim( StrTran( c_tag, "-", "" ) )
            ENDIF
         ENDIF
         aDest[ 1, i, 1 ] := c_tag
      ENDIF
   NEXT i
   RETURN NIL

***************************************
FUNCTION GeraBlocoEntrega( cParte )

   FOR i := 1 TO Len( aEntrega[ 1 ] )
      cPar_ := StrTran( cParte, Chr( 13 ) + Chr( 10 ), "" )
      cPar_ := StrTran( cPar_, Chr( 160 ), "" )
      nIni := At( aEntrega[ 1, i, 5 ], cPar_ )
      IF nIni > 0
         c_span := SubStr( cPar_, nIni )
         nIni   := At( '<span>', c_span ) + 6
         nTamTag := At( '</span>', c_span ) -nIni
         c_tag  := AllTrim( SubStr( c_span, nIni, nTamTag ) )
         IF i == 1
            c_tag := StrTran( c_tag, ".", "" )
            c_tag := StrTran( c_tag, "/", "" )
            c_tag := StrTran( c_tag, "-", "" )
         ENDIF
         IF i >= 2 .AND. i <= 3
            nIni := At( ",,", c_tag )
            IF nIni == 0
               nIni := At( ",", c_tag )
            ENDIF
            IF i == 2
               c_tag := Left( c_tag, nIni - 1 )
            ELSEIF i == 3
               c_tag := AllTrim( SubStr( c_tag, nIni + 1 ) )
               nIni := At( " ", c_tag )
               IF nIni > 0
                  c_tag := Left( c_tag, nIni - 1 )
               ENDIF
            ENDIF
         ENDIF
         IF aEntrega[ 1, i, 6 ] != 0
            IF aEntrega[ 1, i, 6 ] > 0
               c_tag := Left( c_tag, aEntrega[ 1, i, 6 ] )
            ELSE
               c_tag := AllTrim( SubStr( c_tag, Abs( aEntrega[ 1, i, 6 ] ) + 1 ) )
               c_tag := AllTrim( StrTran( c_tag, "-", "" ) )
            ENDIF
         ENDIF
         aEntrega[ 1, i, 1 ] := c_tag
      ENDIF
   NEXT i
   RETURN NIL

***************************************
FUNCTION GeraBlocoDet( cParte )
Local nMed, nN:= 1, nCP:= 1

   cPar_ := StrTran(cParte, Chr(10) , "" )
   cPar_ := StrTran(cPar_ , Chr(160), " " )
   cPar_ := StrTran(cPar_ , Chr(13) , "")
   cParT_:= StrTran(cPar_ , Chr(9)  , "")
   nIni  := At( '<td class="fixo-prod-serv-numero"><span>1', cParT_ )
   nfim  := At( '<td class="fixo-prod-serv-numero"><span>2', cParT_ ) - nIni

   IF nFim <= 0
      cPar_ := SubStr( cParT_, nIni )
   ELSE
      cPar_ := SubStr( cParT_, nIni, nFim )
   ENDIF
   FOR p_ := 1 TO Len( aDet )
      FOR i := 1 TO Len( aDet[ p_ ] )
         nIni := At( aDet[ p_, i, 3 ], cPar_ )
         IF nIni > 0
            c_span := SubStr( cPar_, nIni )
            nIni   := At( '<span>', c_span ) + 6
            nTamTag := At( '</span>', c_span ) -nIni
            c_tag  := AllTrim( SubStr( c_span, nIni, nTamTag ) )
            IF aDet[ p_, i, 4 ] != 0
               IF aDet[ p_, i, 4 ] > 0
                  c_tag := Left( c_tag, aDet[ p_, i, 4 ] )
               ELSE
                  c_tag := AllTrim( SubStr( c_tag, Abs( aDet[ p_, i, 4 ] ) + 1 ) )
                  c_tag := AllTrim( StrTran( c_tag, "-", "" ) )
               ENDIF
            ENDIF
            IF i != 3 .AND. i != 1 .And. i != 24
               c_tag := StrTran( c_tag, ".",  "" )
               c_tag := StrTran( c_tag, ",", "." )
            ENDIF
            aDet[ p_, i, 1 ] := c_tag
         ENDIF
      NEXT i

      //Tag Valor dos tributos pagos
      FOR i := 1 TO Len( aTrib[ p_ ] )
         nIni := At( aTrib[ p_, i, 3 ], cPar_ )
         IF nIni > 0
            c_span := SubStr( cPar_, nIni )
            nIni   := At( '<span>', c_span ) + 6
            nTamTag := At( '</span>', c_span ) - nIni
            c_tag  := AllTrim( SubStr( c_span, nIni, nTamTag ) )
            IF aTrib[ p_, i, 4 ] != 0
               IF aTrib[ p_, i, 4 ] > 0
                  c_tag := Left( c_tag, aTrib[ p_, i, 4 ] )
               ELSE
                  c_tag := AllTrim( SubStr( c_tag, Abs( aTrib[ p_, i, 4 ] ) + 1 ) )
                  c_tag := AllTrim( StrTran( c_tag, "-", "" ) )
               ENDIF
            ENDIF
            c_tag := StrTran( c_tag, ".", "" )
            c_tag := StrTran( c_tag, ",", "." )
            aTrib[ p_, i, 1 ] := c_tag
         ENDIF
      NEXT i

      //Tags do Icms
      nIni := At( '<fieldset><legend>ICMS Normal e ST</legend>', cPar_ )
      IF nIni > 0
         cPar1_ := SubStr( cPar_, nIni, At( '<legend class="toggle">PIS</legend>', cPar_ ) -nIni )
         FOR i := 1 TO Len( aICMS[ p_ ] )
            nIni := HB_At( aICMS[ p_, i, 3 ], cPar1_ )
            IF nIni > 0
               c_span := SubStr( cPar1_, nIni )
               nIni   := At( '<span>', c_span ) + 6
               nTamTag:= At( '</span>', c_span ) - nIni
               c_tag  := AllTrim( SubStr( c_span, nIni, nTamTag ) )
               IF aICMS[ p_, i, 4 ] != 0
                  IF aICMS[ p_, i, 4 ] > 0
                     c_tag := Left( c_tag, aICMS[ p_, i, 4 ] )
                  ELSE
                     c_tag := AllTrim( SubStr( c_tag, Abs( aICMS[ p_, i, 4 ] ) + 1 ) )
                     c_tag := AllTrim( StrTran( c_tag, "-", "" ) )
                  ENDIF
               ENDIF
               c_tag := StrTran( c_tag, ".",  "" )
               c_tag := StrTran( c_tag, ",", "." )
               aICMS[ p_, i, 1 ] := c_tag
            Else
               If i == 4
                    nIni := At( 'Modalidade Definição da', cPar1_ )
                  If nIni > 0
                     c_span := SubStr( cPar1_, nIni )
                     nIni   := At( '<span>', c_span ) + 6
                     nTamTag:= At( '</span>', c_span ) - nIni
                     IF aICMS[ p_, i, 4 ] != 0
                        IF aICMS[ p_, i, 4 ] > 0
                           c_tag := Left( c_tag, aICMS[ p_, i, 4 ] )
                        ELSE
                           c_tag := AllTrim( SubStr( c_tag, Abs( aICMS[ p_, i, 4 ] ) + 1 ) )
                              c_tag := AllTrim( StrTran( c_tag, "-", "" ) )
                        ENDIF
                     ENDIF
                       aICMS[ p_, i, 1 ] := c_tag
                  EndIf
               EndIf
               If i == 7
                    nIni := At( 'Alíquota', cPar1_ )
                  If nIni > 0
                     c_span := SubStr( cPar1_, nIni )
                     nIni   := At( '<span>', c_span ) + 6
                     nTamTag:= At( '</span>', c_span ) - nIni
                     c_tag  := AllTrim( SubStr( c_span, nIni, nTamTag ) )
                     c_tag := StrTran( c_tag, ".",  "" )
                       c_tag := StrTran( c_tag, ",", "." )
                       aICMS[ p_, i, 1 ] := c_tag
                  EndIf
               EndIf
                If i == 8
                   nIni := At( 'Valor do ICMS Normal', cPar1_ )
                   If nIni == 0
                      nIni := At( 'Valor<', cPar1_ )
                   EndIf
                  If nIni > 0
                     c_span := SubStr( cPar1_, nIni )
                     nIni   := At( '<span>', c_span ) + 6
                     nTamTag:= At( '</span>', c_span ) - nIni
                     c_tag  := AllTrim( SubStr( c_span, nIni, nTamTag ) )
                     c_tag := StrTran( c_tag, ".",  "" )
                       c_tag := StrTran( c_tag, ",", "." )
                       aICMS[ p_, i, 1 ] := c_tag

Consulta optante do simples online

MensagemEnviado: 20 Mar 2019 15:03
por Fernando queiroz
                 EndIf
               EndIf
               If i == 11
                   nIni := At( 'Modalidade definição da BC ICMS ST', cPar1_ )
                  If nIni > 0
                     c_span := SubStr( cPar1_, nIni )
                     nIni   := At( '<span>', c_span ) + 6
                     nTamTag:= At( '</span>', c_span ) - nIni
                     IF aICMS[ p_, i, 4 ] != 0
                        IF aICMS[ p_, i, 4 ] > 0
                           c_tag := Left( c_tag, aICMS[ p_, i, 4 ] )
                        ELSE
                           c_tag := AllTrim( SubStr( c_tag, Abs( aICMS[ p_, i, 4 ] ) + 1 ) )
                              c_tag := AllTrim( StrTran( c_tag, "-", "" ) )
                        ENDIF
                     ENDIF
                       aICMS[ p_, i, 1 ] := c_tag
                  EndIf
               EndIf
               If i == 14
                   nIni := At( 'Base de Cálculo do ICMS ST', cPar1_ )
                  If nIni > 0
                     c_span := SubStr( cPar1_, nIni )
                     nIni   := At( '<span>', c_span ) + 6
                     nTamTag:= At( '</span>', c_span ) - nIni
                     c_tag  := AllTrim( SubStr( c_span, nIni, nTamTag ) )
                     c_tag := StrTran( c_tag, ".",  "" )
                       c_tag := StrTran( c_tag, ",", "." )
                       aICMS[ p_, i, 1 ] := c_tag
                  EndIf
               EndIf
               If i == 15
                   nIni := At( 'Alíquota do ICMS ST', cPar1_ )
                   If nIni == 0
                      nIni := At( 'Alíquota', cPar1_ )
                   EndIf
                  If nIni > 0
                     c_span := SubStr( cPar1_, nIni )
                     nIni   := At( '<span>', c_span ) + 6
                     nTamTag:= At( '</span>', c_span ) - nIni
                     c_tag  := AllTrim( SubStr( c_span, nIni, nTamTag ) )
                     c_tag := StrTran( c_tag, ".",  "" )
                       c_tag := StrTran( c_tag, ",", "." )
                       aICMS[ p_, i, 1 ] := c_tag
                  EndIf
               EndIf
               If i == 16
                   nIni := At( 'Valor', cPar1_ )
                  If nIni > 0
                     c_span := SubStr( cPar1_, nIni )
                     nIni   := At( '<span>', c_span ) + 6
                     nTamTag:= At( '</span>', c_span ) - nIni
                     c_tag  := AllTrim( SubStr( c_span, nIni, nTamTag ) )
                     aICMS[ p_, i, 1 ] := c_tag
                     c_tag := StrTran( c_tag, ".",  "" )
                       c_tag := StrTran( c_tag, ",", "." )
                       aICMS[ p_, i, 1 ] := c_tag
                  EndIf
               EndIf
            EndIf
         NEXT i
      ENDIF

      //Tags do Ipi
      nIni := At( '<legend>Imposto Sobre Produtos Industrializados</legend>', cPar_ )
      IF nIni > 0
         cPar1_ := SubStr( cPar_, nIni, At( '<legend class="toggle">PIS</legend>', cPar_ ) -nIni )
         FOR i := 1 TO Len( aIPI[ p_ ] )
            nIni := At( aIPI[ p_, i, 3 ], cPar1_ )
            IF nIni > 0
               c_span := SubStr( cPar1_, nIni )
               nIni   := At( '<span>', c_span ) + 6
               nTamTag := At( '</span>', c_span ) - nIni
               c_tag  := AllTrim( SubStr( c_span, nIni, nTamTag ) )
               IF aIPI[ p_, i, 4 ] != 0
                  IF aIPI[ p_, i, 4 ] > 0
                     c_tag := Left( c_tag, aIPI[ p_, i, 4 ] )
                  ELSE
                     c_tag := AllTrim( SubStr( c_tag, Abs( aIPI[ p_, i, 4 ] ) + 1 ) )
                     c_tag := AllTrim( StrTran( c_tag, "-", "" ) )
                  ENDIF
               ENDIF
               c_tag := StrTran( c_tag, ".", "" )
               c_tag := StrTran( c_tag, ",", "." )
               aIPI[ p_, i, 1 ] := c_tag
            ENDIF
         NEXT i
      ENDIF

      //Tags Pis
      nIni := At( '<legend class="toggle">PIS</legend>', cPar_ )
      IF nIni > 0
         cPar1_ := SubStr( cPar_, nIni, At( '<legend class="toggle">COFINS</legend>', cPar_ ) - nIni )
         FOR i := 1 TO Len( aPIS[ p_ ] )
            nIni := At( aPIS[ p_, i, 3 ], cPar1_ )
            IF nIni > 0
               c_span := SubStr( cPar1_, nIni )
               nIni   := At( '<span>', c_span ) + 6
               nTamTag := At( '</span>', c_span ) - nIni
               c_tag  := AllTrim( SubStr( c_span, nIni, nTamTag ) )
               IF aPIS[ p_, i, 4 ] != 0
                  IF aPIS[ p_, i, 4 ] > 0
                     c_tag := Left( c_tag, aPIS[ p_, i, 4 ] )
                  ELSE
                     c_tag := AllTrim( SubStr( c_tag, Abs( aPIS[ p_, i, 4 ] ) + 1 ) )
                     c_tag := AllTrim( StrTran( c_tag, "-", "" ) )
                  ENDIF
               ENDIF
               c_tag := StrTran( c_tag, ".",  "" )
               c_tag := StrTran( c_tag, ",", "." )
               aPIS[ p_, i, 1 ] := c_tag
            ENDIF
         NEXT i
      ENDIF

      //Tags Cofins
      nIni:= At( '<legend class="toggle">COFINS</legend>', cPar_ )
      IF nIni > 0
         cPar1_ := SubStr( cPar_, nIni )
         FOR i := 1 TO Len( aCOFINS[ p_ ] )
            nIni  := At( aCOFINS[ p_, i, 3 ], cPar1_ )
            IF nIni > 0
               c_span := SubStr( cPar1_, nIni )
               nIni   := At( '<span>', c_span ) + 6
               nTamTag:= At( '</span>', c_span ) - nIni
               c_tag  := AllTrim( SubStr( c_span, nIni, nTamTag ) )
               IF aCOFINS[ p_, i, 4 ] != 0
                  IF aCOFINS[ p_, i, 4 ] > 0
                     c_tag := Left( c_tag, aCOFINS[ p_, i, 4 ] )
                  ELSE
                     c_tag := AllTrim( SubStr( c_tag, Abs( aCOFINS[ p_, i, 4 ] ) + 1 ) )
                     c_tag := AllTrim( StrTran( c_tag, "-", "" ) )
                  ENDIF
               ENDIF
               c_tag := StrTran( c_tag, ".",  "" )
               c_tag := StrTran( c_tag, ",", "." )
               aCOFINS[ p_, i, 1 ] := c_tag
            ENDIF
         NEXT i
      ENDIF

      //Tags Medicamentos
      nIni:= At( '<legend>Rastro</legend>', cPar_ )
      IF nIni > 0
         cPar1_ := SubStr( cPar_, nIni )
         FOR i := 1 TO Len( aRastro[ p_ ] )
            nIni:= At( aRastro[ p_, i, 3 ], cPar1_ )
              IF nIni > 0
               c_span := SubStr( cPar1_, nIni )
                 nIni   := At( '<span>', c_span ) + 6
                 nTamTag:= At( '</span>', c_span ) - nIni
               c_tag  := AllTrim( SubStr( c_span, nIni, nTamTag ) )
                 IF aRastro[ p_, i, 4 ] != 0
                    IF aRastro[ p_, i, 4 ] > 0
                       c_tag:= Left( c_tag, aRastro[ p_, i, 4 ] )
                    ELSE
                     c_tag:= AllTrim( SubStr( c_tag, Abs( aRastro[ p_, i, 4 ] ) + 1 ) )
                       c_tag:= AllTrim( StrTran( c_tag, "-", "" ) )
                    ENDIF
               ENDIF
                 IF i != 6
                    c_tag:= StrTran( c_tag, ".",  "" )
                   c_tag:= StrTran( c_tag, ",", "." )
               ENDIF
                 aRastro[ p_, i, 1 ] := c_tag
              ENDIF
           NEXT i
      ENDIF
      If cVersao == '3.10'
       nIni:= At( '<legend>Detalhamento específico dos medicamentos</legend>', cPar_ )
         IF nIni > 0
            cPar1_:= SubStr( cPar_, nIni )
            nMed  := At( 'Medicamento ' + AllTrim(Str(nN)), cPar1_ )
            cPar1_:= SubStr( cPar1_, nMed )
            While .t.
               If nMed > 0
                   FOR i := 1 TO Len( aMedLote[ p_ ] )
                      If i == 7
                        aMedLote[ nCP, i, 1 ] := p_
                     Else
                        nIni := At( aMedLote[ p_, i, 3 ], cPar1_ )
                        IF nIni > 0
                             c_span := SubStr( cPar1_, nIni )
                           nIni   := At( '<span>', c_span ) + 6
                           nTamTag := At( '</span>', c_span ) - nIni
                            c_tag  := AllTrim( SubStr( c_span, nIni, nTamTag ) )
                            IF aMedLote[ p_, i, 4 ] != 0
                              IF aMedLote[ p_, i, 4 ] > 0
                                 c_tag := Left( c_tag, aMedlote[ p_, i, 4 ] )
                              ELSE
                                 c_tag := AllTrim( SubStr( c_tag, Abs( aMedLote[ p_, i, 4 ] ) + 1 ) )
                                 c_tag := AllTrim( StrTran( c_tag, "-", "" ) )
                              ENDIF
                           ENDIF
                           IF i != 3
                              c_tag := StrTran( c_tag, ".",  "" )
                              c_tag := StrTran( c_tag, ",", "." )
                           ENDIF
                           IF StrZero( i, 2 ) $ "-03-04"
                              c_tag := SubStr( c_tag, 7, 4 ) + "-" + SubStr( c_tag, 4, 2 ) + "-" + Left( c_tag, 2 )
                           ENDIF
                             aMedLote[ nCP, i, 1 ] := c_tag
                          EndIf
                     EndIf
                    NEXT i
                    nN++
                  nMed  := At( 'Medicamento ' + AllTrim(Str(nN)), cPar1_ )
                  cPar1_:= SubStr( cPar1_, nMed )
                  If nMed > 0
                     aadd(aMedLote, {{"","nLote",'Nro. do Lote', 0},; //1-
                        {"","qLote",'Quantidade de produtos no lote', 0},; //2-
                        {"","dFab",'Data de fabricação', 0},; //3-
                        {"","dVal",'Data de validade', 0},;  //4-
                        {"","vPMC",'Preço Máximo Consumido', 0},; //5-
                        {"","infAdProd",'Descrição', 0},; //6-
                        {"","Controle",'', 0}})
                  EndIf
                  nCP++
               Else
                    Exit
               EndIf
            End
            nN:= 1
         ENDIF
      Else
         nIni:= At( '<legend>Detalhamento específico dos medicamentos</legend>', cPar_ )
         IF nIni > 0
            cPar1_:= SubStr( cPar_, nIni )
            nMed  := At( 'Medicamento ' + AllTrim(Str(nN)), cPar1_ )
            cPar1_:= SubStr( cPar1_, nMed )
            While .t.
               If nMed > 0
                   FOR i := 1 TO Len( aMedicamentos[ p_ ] )
                     nIni := At( aMedicamentos[ p_, i, 3 ], cPar1_ )
                     IF nIni > 0
                        c_span := SubStr( cPar1_, nIni )
                        nIni   := At( '<span>', c_span ) + 6
                        nTamTag := At( '</span>', c_span ) - nIni
                         c_tag  := AllTrim( SubStr( c_span, nIni, nTamTag ) )
                         IF aMedicamentos[ p_, i, 4 ] != 0
                           IF aMedicamentos[ p_, i, 4 ] > 0
                              c_tag := Left( c_tag, aMedicamentos[ p_, i, 4 ] )
                           ELSE
                              c_tag := AllTrim( SubStr( c_tag, Abs( aMedicamentos[ p_, i, 4 ] ) + 1 ) )
                              c_tag := AllTrim( StrTran( c_tag, "-", "" ) )
                           ENDIF
                        ENDIF
                        IF i != 3
                           c_tag := StrTran( c_tag, ".",  "" )
                           c_tag := StrTran( c_tag, ",", "." )
                        ENDIF
                          aMedicamentos[ p_, i, 1 ] := c_tag
                     ENDIF
                    NEXT i
                  nMed  := At( 'Medicamento ' + AllTrim(Str(nN)), cPar1_ )
                  cPar1_:= SubStr( cPar1_, nMed )
                  nN++
               Else
                    Exit
               EndIf
            End
            nN:= 1
         ENDIF
      EndIf
      If p_ < Len( aDet )
              nIni:= At('<td class="fixo-prod-serv-numero"><span>' + AllTrim( Str( aItensNota[p_+1] ) ), cParT_ )
      Else
         nIni:= At('<td class="fixo-prod-serv-numero"><span>' + AllTrim( Str( aItensNota[p_] ) ), cParT_ )
      EndIf
      cParT_:= SubStr(cParT_, (nIni + 40))
      nFim  := At('<td class="fixo-prod-serv-numero"><span>', cParT_ )
      IF nFim <= 0
         cPar_:= SubStr( cParT_, 1 )
      ELSE
         cPar_:= SubStr( cParT_, 1, nFim )
      ENDIF
   NEXT p_
   RETURN NIL

***************************************
FUNCTION GeraBlocoIcmsPart( cParte )

   FOR i := 1 TO Len( aIcmsPart[ 1 ] )
      cPar_ := StrTran( cParte, Chr( 13 ) + Chr( 10 ), "" )
      cPar_ := StrTran( cPar_, Chr( 160 ), "" )
      nIni := At( aIcmsPart[ 1, i, 3 ], cPar_ )
      IF nIni > 0
         c_span := SubStr( cPar_, nIni )
         nIni   := At( '<span>', c_span ) + 6
         nTamTag := At( '</span>', c_span ) -nIni
         c_tag  := AllTrim( SubStr( c_span, nIni, nTamTag ) )
         c_tag  := StrTran( c_tag, ".", "" )
         c_tag  := StrTran( c_tag, ",", "." )
         aIcmsPart[ 1, i, 1 ] := c_tag
      ENDIF
   NEXT i
   RETURN NIL

***************************************
FUNCTION GeraBlocoTotais( cParte )

   FOR i := 1 TO Len( aTotais[ 1 ] )
      cPar_:= StrTran( cParte, Chr( 13 ) + Chr( 10 ), "" )
      cPar_:= StrTran( cPar_, Chr( 160 ), "" )
      nIni := At( aTotais[ 1, i, 3 ], cPar_ )
      IF nIni > 0
         c_span := SubStr( cPar_, nIni )
         nIni   := At( '<span>', c_span ) + 6
         nTamTag := At( '</span>', c_span ) -nIni
         c_tag  := AllTrim( SubStr( c_span, nIni, nTamTag ) )
         c_tag  := StrTran( c_tag, ".", "" )
         c_tag  := StrTran( c_tag, ",", "." )
         aTotais[ 1, i, 1 ] := c_tag
      ENDIF
   NEXT i
   RETURN NIL

***************************************
FUNCTION GeraBlocoTransp( cParte )

   FOR i := 1 TO Len( aTransp[ 1 ] )
      cPar_ := StrTran( cParte, Chr( 13 ) + Chr( 10 ), "" )
      cPar_ := StrTran( cPar_, Chr( 160 ), "" )
      nIni := At( aTransp[ 1, i, 5 ], cPar_ )
      IF nIni > 0
         c_span := SubStr( cPar_, nIni )
         nIni   := At( '<span>', c_span ) + 6
         nTamTag := At( '</span>', c_span ) -nIni
         c_tag  := AllTrim( SubStr( c_span, nIni, nTamTag ) )
         IF i >= 2 .AND. i <= 3
            c_tag := StrTran( c_tag, ".", "" )
            c_tag := StrTran( c_tag, "/", "" )
            c_tag := StrTran( c_tag, "-", "" )
         ENDIF
         IF aTransp[ 1, i, 6 ] != 0
            IF aTransp[ 1, i, 6 ] >= 0
               c_tag := Left( c_tag, aTransp[ 1, i, 6 ] )
            ELSE
               c_tag := AllTrim( SubStr( c_tag, Abs( aTransp[ 1, i, 6 ] ) + 1 ) )
               c_tag := AllTrim( StrTran( c_tag, "-", "" ) )
            ENDIF
         ENDIF
         IF i == 12 .Or. i == 16 .Or. i == 17
            If Empty(c_tag)
               c_Tag:= '0,000'
            EndIf
            c_tag := StrTran( c_tag, ".",  "" )
            c_tag := StrTran( c_tag, ",", "." )
         ENDIF
         aTransp[ 1, i, 1 ] := c_tag
      ENDIF
   NEXT i
   RETURN NIL

***************************************
FUNCTION GeraBlocoCobr( cParte )

   cPar_ := StrTran( cParte, Chr( 13 ) + Chr( 10 ), "" )
   cPar_ := StrTran( cPar_, Chr( 160 ), "" )
   FOR i := 1 TO Len( aCobr[ 1 ] )
      nIni := At( '<span>', cPar_ )
      IF nIni > 0
         cPar_ := SubStr( cPar_, nIni + 6 )
         nTamTag := At( '</span>', cPar_ ) -1
         c_tag  := AllTrim( SubStr( cPar_, 1, nTamTag ) )
         c_tag  := StrTran( c_tag, ".", "" )
         c_tag  := StrTran( c_tag, ",", "." )
         IF StrZero( i, 2 ) $ "-02-05-08-11-14-17-20-23-26-29"
            c_tag := SubStr( c_tag, 7, 4 ) + "-" + SubStr( c_tag, 4, 2 ) + "-" + Left( c_tag, 2 )
         ENDIF
         aCobr[ 1, i, 1 ] := c_tag
      ELSE
         EXIT
      ENDIF
   NEXT i
   RETURN NIL

***************************************
FUNCTION GeraBlocoFat( cParte )

   cPar_ := StrTran( cParte, Chr( 13 ) + Chr( 10 ), "" )
   cPar_ := StrTran( cPar_, Chr( 160 ), "" )
   FOR i := 1 TO Len( aFat[ 1 ] )
      nIni := At( '<span>', cPar_ )
      IF nIni > 0
         cPar_ := SubStr( cPar_, nIni + 6 )
         nTamTag:= At( '</span>', cPar_ ) -1
         c_tag  := AllTrim( SubStr( cPar_, 1, nTamTag ) )
         c_tag  := StrTran( c_tag, ".", "" )
         c_tag  := StrTran( c_tag, ",", "." )
         aFat[ 1, i, 1 ] := c_tag
      ELSE
         EXIT
      ENDIF
   NEXT i
   RETURN NIL

***************************************
FUNCTION GeraBlocoPagamento( cParte )

   cPar_ := StrTran( cParte, Chr( 13 ) + Chr( 10 ), "" )
   cPar_ := StrTran( cPar_, Chr( 160 ), "" )
   FOR i := 1 TO Len( aPagamento[ 1 ] )
      nIni := At( '<span>', cPar_ )
      IF nIni > 0
         cPar_ := SubStr( cPar_, nIni + 6 )
         nTamTag:= At( '</span>', cPar_ ) -1
         c_tag  := AllTrim( SubStr( cPar_, 1, nTamTag ) )
         IF aPagamento[ 1, i, 4 ] != 0
            IF aPagamento[ 1, i, 4 ] > 0
               c_tag := Left( c_tag, aPagamento[ 1, i, 4 ] )
            ELSE
               c_tag := AllTrim( SubStr( c_tag, Abs( aPagamento[ 1, i, 4 ] ) + 1 ) )
               c_tag := AllTrim( StrTran( c_tag, "-", "" ) )
            ENDIF
         ENDIF
         c_tag  := StrTran( c_tag, ".", "" )
         c_tag  := StrTran( c_tag, ",", "." )
         aPagamento[ 1, i, 1 ] := c_tag
      ELSE
         EXIT
      ENDIF
   NEXT i
   RETURN NIL

***************************************
FUNCTION GeraBlocoCompra( cParte )

   cPar_ := StrTran( cParte, Chr( 13 ) + Chr( 10 ), "" )
   cPar_ := StrTran( cPar_, Chr( 160 ), "" )
   FOR i := 1 TO Len( aCompra[ 1 ] )
      nIni := At( aCompra[ 1, i, 3 ], cPar_ )
      IF nIni > 0
         c_span := SubStr( cPar_, nIni )
         nIni   := At( '<span>', c_span ) + 6
         nTamTag := At( '</span>', c_span ) -nIni
         c_tag  := AllTrim( SubStr( c_span, nIni, nTamTag ) )
         aCompra[ 1, i, 1 ] := c_tag
      ELSE
         EXIT
      ENDIF
   NEXT i
   RETURN NIL

***************************************************
Function GravaXML()
Local cXML:='<?xml version="1.0" encoding="UTF-8"?><nfeProc versao="'+cVersao+'" xmlns="http://www.portalfiscal.inf.br/nfe"><NFe xmlns="http://www.portalfiscal.inf.br/nfe"><infNFe versao="'+cVersao+'" Id="NFe'+cChave+'">'
Local lTagFim := .f., a, x

   cTagPai   := ""
   nFimTagPai:= 0
   For i:= 1 To Len(aIde[1])
        If ! Empty(aIde[1,i,3])
         nFimTagPai:=aIde[1,i,4]
          cTagPai+="|"+StrZero(nFimTagPai,2)+aIde[1,i,3]
          cXML+='<'+aIde[1,i,3]+'>'
        EndIf
        If ! Empty(aIde[1,i,1])
          cXML+= '<'+aIde[1,i,2]+'>'+aIde[1,i,1]+'</'+aIde[1,i,2]+'>'
        EndIf
        If i == nFimTagPai
          nIni:=RAT("|",cTagPai)
          cTag:=Substr(cTagPai,nIni+1)
          cXML+='</'+SubStr(cTag,3)+'>'
          cTagPai:=SubStr(cTagPai,1,nIni-1)
          If nIni>1
            nIni:=RAT("|",cTagPai)
            nFimTagPai:=Val(Substr(cTagPai,nIni+1,2))
          Else
            nFimTagPai:=0
          EndIf
        EndIf
   Next i

   For i:= 1 To Len(aEmit[1])
        If ! Empty(aEmit[1,i,3])
          nFimTagPai:= aEmit[1,i,4]
          cTagPai+="|"+StrZero(nFimTagPai,2)+aEmit[1,i,3]
          cXML   +='<'+aEmit[1,i,3]+'>'
        EndIf
        If !Empty(aEmit[1,i,1])
          cXML+= '<'+aEmit[1,i,2]+'>'+aEmit[1,i,1]+'</'+aEmit[1,i,2]+'>'
        EndIf
        If i == nFimTagPai
          nIni:= RAT("|",cTagPai)
          cTag:= Substr(cTagPai,nIni+1)
          cXML+= '</'+SubStr(cTag,3)+'>'
          cTagPai:= SubStr(cTagPai,1,nIni-1)
          If nIni > 1
            nIni      := RAT("|",cTagPai)
            nFimTagPai:= Val(Substr(cTagPai,nIni+1,2))
          Else
            nFimTagPai:= 0
          EndIf
        EndIf
   Next i

   For i:= 1 To Len(aDest[1])
        If !Empty(aDest[1,i,3])
          nFimTagPai:=aDest[1,i,4]
          cTagPai+="|"+StrZero(nFimTagPai,2)+aDest[1,i,3]
          cXML+='<'+aDest[1,i,3]+'>'
        EndIf
        If !Empty(aDest[1,i,1])
          cXML+='<'+aDest[1,i,2]+'>'+aDest[1,i,1]+'</'+aDest[1,i,2]+'>'
        EndIf
        If i == nFimTagPai
          nIni:= RAT("|",cTagPai)
          cTag:= Substr(cTagPai,nIni+1)
          cXML+= '</'+SubStr(cTag,3)+'>'
          cTagPai:= SubStr(cTagPai,1,nIni-1)
          If nIni > 1
            nIni:= RAT("|",cTagPai)
            nFimTagPai:= Val(Substr(cTagPai,nIni+1,2))
          Else
            nFimTagPai:= 0
          EndIf
        EndIf
   Next i

   For i:= 1 To Len(aEntrega[1])
        If ! Empty(aEntrega[1,i,1])
          nFimTagPai:= aEntrega[1,i,4]
          cTagPai+="|"+StrZero(nFimTagPai,2)+aEntrega[1,i,3]
          cXML   +='<'+aEntrega[1,i,3]+'>'
        EndIf
        If !Empty(aEntrega[1,i,1])
          cXML+= '<'+aEntrega[1,i,2]+'>'+aEntrega[1,i,1]+'</'+aEntrega[1,i,2]+'>'
        EndIf
        If i == nFimTagPai
          nIni:= RAT("|",cTagPai)
          cTag:= Substr(cTagPai,nIni+1)
          cXML+= '</'+SubStr(cTag,3)+'>'
          cTagPai:= SubStr(cTagPai,1,nIni-1)
          If nIni > 1
            nIni      := RAT("|",cTagPai)
            nFimTagPai:= Val(Substr(cTagPai,nIni+1,2))
          Else
            nFimTagPai:= 0
          EndIf
        EndIf
   Next i

   For p_:= 1 To Len(aDet)
        cXML+= '<det nItem="'+AllTrim(Str(aItensNota[p_]))+'"><prod>'
        cFCI:= cDiscAdicional:= ''
        For i:= 1 To Len(aDet[p_])
          If ! Empty(aDet[p_, i, 1])
             If i == 24
                 cDiscAdicional:= '<'+aDet[p_,i,2]+'>'+aDet[p_,i,1]+'</'+aDet[p_,i,2]+'>'
            Else
                 cXML+= '<'+aDet[p_,i,2]+'>'+aDet[p_,i,1]+'</'+aDet[p_,i,2]+'>'
            EndIf
         Else
            If i == 2 .Or. i == 13
               cXML+= '<' + aDet[p_, i, 2] + '/>'
            EndIf
          EndIf
        Next
        lpoemTag:= .F.

        For i:= 1 To Len(aRastro[p_])
          If i == 1
            If ! Empty(aRastro[p_,i,1])
               cXML+= '<rastro><' + aRastro[p_,i,2] + '>' + aRastro[p_,i,1] + '</' + aRastro[p_,i,2] + '>'
                 lpoemTag:=.T.
            EndIf
          Else
            If ! Empty(aRastro[p_,i,1])
                  cXML+='<'+aRastro[p_,i,2]+'>'+ aRastro[p_,i,1] + '</'+aRastro[p_,i,2]+'>'
            EndIf
          EndIf
        Next
        If lpoemTag
          cXML+='</rastro>'
        EndIf

      lpoemTag:= .f.
        For i:= 1 To Len(aMedicamentos[p_])
          If i == 1
            If ! Empty(aMedicamentos[p_,i,1])
               cXML+= '<med><' + aMedicamentos[p_,i,2] + '>' + aMedicamentos[p_, i, 1] + '</' + aMedicamentos[p_,i,2] + '>'
                 lpoemTag:=.T.
            EndIf
          Else
            If ! Empty(aMedicamentos[p_,i,1])
               If i == 6
                   cDiscAdicional:= '<'+aMedicamentos[p_,i,2]+'>'+ aMedicamentos[p_,i,1] + '</'+aMedicamentos[p_,i,2]+'>'
               Else
                   cXML+='<'+aMedicamentos[p_,i,2]+'>'+ aMedicamentos[p_,i,1] + '</'+aMedicamentos[p_,i,2]+'>'
               EndIf
            EndIf
          EndIf
        Next
        If lpoemTag
          cXML+='</med>'
        EndIf
        If cVersao == '3.10'
         For a:= 1 To Len(aMedLote)
//         msginfo(aMedLote[ a, 7, 1 ])
            If aMedLote[ a, 7, 1 ] == p_
                 For x:= 1 To 6
                    If x == 1
                     cXML+= '<med><nLote>' + aMedLote[a, x, 1] + '</nLote>'
                  Else
                     cXML+='<'+aMedLote[a,x,2]+'>'+ aMedLote[a,x,1] + '</'+aMedLote[a,x,2]+'>'
                  EndIf
               next x
               cXML+='</med>'
            EndIf
         Next a
      EndIf
        cXML+= '</prod><imposto>'
      For i:= 1 To Len(aTrib[p_])
           If Val(aTrib[p_,i,1]) > 0
              cXML+='<'+aTrib[p_,i,2]+'>'+ aTrib[p_,i,1] + '</'+aTrib[p_,i,2]+'>'
           EndIf
        Next i
        cXML+= '<ICMS>'
        cTag_:='ICMS'
        For i:= 1 To Len(aICMS[p_])
          If i == 1
            If ! Empty(aICMS[p_, 2, 1])
                 cTag_+= aICMS[p_, 2, 1]
            Else
                 cTag_+= 'SN' + aICMS[p_, 3, 1]
            EndIf
            cXML+= '<' + cTag_ + '>'
          EndIf
          If !Empty(aICMS[p_, i, 1])
             If aICMS[p_, 2, 1] == '00'
                If StrZero(i, 2) $ "-01-02-04-06-07-08"
                  cXML+= '<' + aICMS[p_, i, 2] + '>' + aICMS[p_, i, 1] + '</' + aICMS[p_, i, 2] + '>'
               EndIf
            ElseIf aICMS[p_, 2, 1] == '10'
               If StrZero(i, 2) $ "-01-02-04-06-07-08-11-12-13-14-15-16"
                  cXml+= '<' + aICMS[p_, i, 2] + '>' + aICMS[p_, i, 1] + '</' + aICMS[p_, i, 2] + '>'
               EndIf
            ElseIf aICMS[p_, 2, 1] == '20'
               If StrZero(i, 2) $ "-01-02-04-05-06-07-08"
                  cXml+= '<' + aICMS[p_, i, 2] + '>' + aICMS[p_, i, 1] + '</' + aICMS[p_, i, 2] + '>'
               EndIf
            ElseIf aICMS[p_, 2, 1] == '30'
               If StrZero(i, 2) $ "-01-02-11-12-13-14-15-16-09-10"
                  cXml+= '<' + aICMS[p_, i, 2] + '>' + aICMS[p_, i, 1] + '</' + aICMS[p_, i, 2] + '>'
               EndIf
            ElseIf aICMS[p_, 2, 1] == '40' .Or. aICMS[p_, 2, 1] == '41' .Or. aICMS[p_, 2, 1] == '50'
               If StrZero(i, 2) $ "-01-02-09-10"
                  cXml+= '<' + aICMS[p_, i, 2] + '>' + aICMS[p_, i, 1] + '</' + aICMS[p_, i, 2] + '>'
               EndIf
            ElseIf aICMS[p_, 2, 1] == '51'
               If StrZero(i, 2) $ "-01-02-04-05-06-07-08-19-20-21"
                  cXml+= '<' + aICMS[p_, i, 2] + '>' + aICMS[p_, i, 1] + '</' + aICMS[p_, i, 2] + '>'
               EndIf
            ElseIf aICMS[p_, 2, 1] == '60'
               If StrZero(i, 2) $ "-01-02-17-18"
                  cXml+= '<' + aICMS[p_, i, 2] + '>' + aICMS[p_, i, 1] + '</' + aICMS[p_, i, 2] + '>'
               EndIf
            ElseIf aICMS[p_, 2, 1] == '70'
               If StrZero(i, 2) $ "-01-02-04-05-06-07-08-09-10-11-12-13-14-15-16"
                  cXml+= '<' + aICMS[p_, i, 2] + '>' + aICMS[p_, i, 1] + '</' + aICMS[p_, i, 2] + '>'
               EndIf
            ElseIf aICMS[p_, 2, 1] == '90'
               If StrZero(i, 2) $ "-01-02-04-05-06-07-08-11-12-13-14-15-16"
                  cXml+= '<' + aICMS[p_, i, 2] + '>' + aICMS[p_, i, 1] + '</' + aICMS[p_, i, 2] + '>'
               EndIf
            Else
               IF aICMS[ p_, i, 4 ] != 0
                  cXml+= '<' + aICMS[p_, i, 2] + '>' + aICMS[p_, i, 1] + '</' + aICMS[p_, i, 2] + '>'
               Else
                  If Val(aICMS[p_, i, 1]) > 0
                     cXml+= '<' + aICMS[p_, i, 2] + '>' + aICMS[p_, i, 1] + '</' + aICMS[p_, i, 2] + '>'
                  EndIf
               EndIf
            EndIf
          EndIf
        Next i
        cXML+='</'+cTag_+'></ICMS>'

        lpoemTag:= .F.
        For i:= 1 To Len(aIPI[p_])
          If i == 1
            If ! Empty(aIPI[p_,i,1])
               If aIPI[p_,2,1] == '00' .Or. aIPI[p_,2,1]  == '49' .Or. aIPI[p_,2,1] == '50' .Or. aIPI[p_,2,1] == '99'
                    cXML+= '<IPI><cEnq>' + aIPI[p_,i,1] + '</cEnq><IPITrib>'
                 Else
                    cXML+= '<IPI><cEnq>' + aIPI[p_,i,1] + '</cEnq><IPINT>'
                 EndIf
                 lpoemTag:=.T.
            EndIf
          Else
            If ! Empty(aIPI[p_,i,1])
                 cXML+='<'+aIPI[p_,i,2]+'>'+ aIPI[p_,i,1] + '</'+aIPI[p_,i,2]+'>'
            EndIf
          EndIf
        Next
        If lpoemTag
           If aIPI[p_,2,1] == '00' .Or. aIPI[p_,2,1]  == '49' .Or. aIPI[p_,2,1] == '50' .Or. aIPI[p_,2,1] == '99'
             cXML+='</IPITrib></IPI>'
          Else
             cXML+='</IPINT></IPI>'
          EndIf
        EndIf

        lpoemTag:= .F.
        For i:= 1 To Len(aPIS[p_])
           If i == 1
            If ! Empty(aPIS[p_, i, 1])
                 If Val(aPIS[p_, i, 1]) >= 1 .And. Val(aPIS[p_, i, 1]) <= 2
                  cXML+= '<PIS><PISAliq>'
                 ElseIf Val(aPIS[p_, i, 1]) == 3
                  cXML+= '<PIS><PISQte>'
                 ElseIf Val(aPIS[p_, i, 1]) >= 4 .And. Val(aPIS[p_, i, 1]) <= 9
                   cXML+= '<PIS><PISNT>'
                 ElseIf Val(aPIS[p_, i, 1]) >= 49 .And. Val(aPIS[p_, i, 1]) <= 99
                    cXML+= '<PIS><PISOutr>'
               EndIf
                 lpoemTag:= .T.
            EndIf
          EndIf
         If ! Empty(aPIS[p_, i, 1])
            If Val(aPIS[p_, 1, 1]) == 1 .Or. Val(aPIS[p_, 1, 1]) == 2
                If StrZero(i, 1) $ "-01-02-03-04"
                  cXML+= '<' + aPIS[p_,i,2] + '>' + aPIS[p_,i,1] + '</' + aPIS[p_,i,2] + '>'
               EndIf
            ElseIf Val(aPIS[p_, 1, 1]) == 3
                If StrZero(i, 1) $ "-01-04-06-05"
                  cXML+= '<' + aPIS[p_,i,2] + '>' + aPIS[p_,i,1] + '</' + aPIS[p_,i,2] + '>'
               EndIf
            ElseIf Val(aPIS[p_, 1, 1]) >= 4 .And. Val(aPIS[p_, 1, 1]) <= 9
                If StrZero(i, 1) $ "-01"
                  cXML+= '<' + aPIS[p_,i,2] + '>' + aPIS[p_,i,1] + '</' + aPIS[p_,i,2] + '>'
               EndIf
            ElseIf Val(aPIS[p_, 1, 1]) >= 9 .And. Val(aPIS[p_, 1, 1]) <= 99
                If StrZero(i, 1) $ "-01-02-03-04-05-06"
                  cXML+= '<' + aPIS[p_,i,2] + '>' + aPIS[p_,i,1] + '</' + aPIS[p_,i,2] + '>'
               EndIf
              Else
                 If StrZero(i, 1) $ "-02-03-04-05-06"
                    cXML+= '<' + aPIS[p_,i,2] + '>' + aPIS[p_,i,1] + '</' + aPIS[p_,i,2] + '>'
                 EndIf
              EndIf
           EndIf
        Next i
        If lpoemTag
           If Val(aPIS[p_, 1, 1]) >= 1 .And. Val(aPIS[p_, 1, 1]) <= 2
            cXML+= '</PISAliq></PIS>'
           ElseIf Val(aPIS[p_, 1, 1]) == 3
            cXML+= '</PISQte></PIS>'
           ElseIf Val(aPIS[p_, 1, 1]) >= 4 .And. Val(aPIS[p_, 1, 1]) <= 9
             cXML+= '</PISNT></PIS>'
           ElseIf Val(aPIS[p_, 1, 1]) >= 49 .And. Val(aPIS[p_, 1, 1]) <= 99
            cXML+= '</PISOutr></PIS>'
         EndIf
        EndIf
        lpoemTag:=.F.
      For i:= 1 To Len(aCOFINS[p_])
         If i == 1
            If !Empty(aCOFINS[p_,i,1])
               If Val(aCOFINS[p_, 1, 1]) >= 1 .And. Val(aCOFINS[p_, 1, 1]) <= 2
                    cXML+= '<COFINS><COFINSAliq>'
               ElseIf Val(aCOFINS[p_, 1, 1]) == 3
                  cXML+= '<COFINS><COFINSQte>'
               ElseIf Val(aCOFINS[p_, 1, 1]) >= 4 .And. Val(aCOFINS[p_, 1, 1]) <= 9
                   cXML+= '<COFINS><COFINSNT>'
               ElseIf Val(aCOFINS[p_, 1, 1]) >= 49 .And. Val(aCOFINS[p_, 1, 1]) <= 99
                    cXML+= '<COFINS><COFINSOutr>'
                EndIf
                 lpoemTag:=.T.
            EndIf
          EndIf
           If !Empty(aCOFINS[p_, i, 1])
              If Val(aCOFINS[p_, 1, 1]) == 1 .Or. Val(aCOFINS[p_, 1, 1]) == 2
                If StrZero(i, 1) $ "-01-02-03-04"
                  cXML+= '<' + aCOFINS[p_, i, 2] + '>' + aCOFINS[p_, i, 1] + '</' + aCOFINS[p_, i, 2] + '>'
               EndIf
            ElseIf Val(aCOFINS[p_, 1, 1]) == 3
                If StrZero(i, 1) $ "-01-04-06-05"
                  cXML+= '<' + aCOFINS[p_, i, 2] + '>' + aCOFINS[p_, i, 1] + '</' + aCOFINS[p_, i, 2] + '>'
               EndIf
            ElseIf Val(aCOFINS[p_, 1, 1]) >= 4 .And. Val(aCOFINS[p_, 1, 1]) <= 9
                If StrZero(i, 1) $ "-01"
                  cXML+= '<' + aCOFINS[p_, i, 2] + '>' + aCOFINS[p_, i, 1] + '</' + aCOFINS[p_, i, 2] + '>'
               EndIf
            ElseIf Val(aCOFINS[p_, 1, 1]) >= 9 .And. Val(aCOFINS[p_, 1, 1]) <= 99
                If StrZero(i, 1) $ "-01-02-03-04-05-06"
                  cXML+= '<' + aCOFINS[p_, i, 2] + '>' + aCOFINS[p_, i, 1] + '</' + aCOFINS[p_, i, 2] + '>'
               EndIf
              Else
                 If StrZero(i, 1) $ "-02-03-04-05-06"
                    cXML+= '<' + aCOFINS[p_, i, 2] + '>' + aCOFINS[p_, i, 1] + '</' + aCOFINS[p_, i, 2] + '>'
                 EndIf
              EndIf
           EndIf
        Next i
        If lpoemTag
          If Val(aCOFINS[p_, 1, 1]) >= 1 .And. Val(aCOFINS[p_, 1, 1]) <= 2
              cXML+= '</COFINSAliq></COFINS>'
         ElseIf Val(aCOFINS[p_, 1, 1]) == 3
            cXML+= '</COFINSQte></COFINS>'
         ElseIf Val(aCOFINS[p_, 1, 1]) >= 4 .And. Val(aCOFINS[p_, 1, 1]) <= 9
             cXML+= '</COFINSNT></COFINS>'
         ElseIf Val(aCOFINS[p_, 1, 1]) >= 49 .And. Val(aCOFINS[p_, 1, 1]) <= 99
            cXML+= '</COFINSOutr></COFINS>'
         EndIf
        EndIf

        If Val(aIcmsPart[1,1,1]) > 0
           cXML+='<ICMSUFDest>'
         For i:= 1 To Len(aIcmsPart[1])
              If !Empty(aIcmsPart[1,i,1])
                cXML+= '<'+aIcmsPart[1,i,2]+'>'+aIcmsPart[1,i,1]+'</'+aIcmsPart[1,i,2]+'>'
              EndIf
         Next i
         cXML+= '</ICMSUFDest>'
        EndIf

        cXML+= '</imposto>'
      If ! Empty(cDiscAdicional)
           cXml+= cDiscAdicional
        EndIf
        cXML+= '</det>'
   Next
   cXML+='<total><ICMSTot>'
   For i:= 1 To Len(aTotais[1])
        If !Empty(aTotais[1,i,1])
          cXML+= '<'+aTotais[1,i,2]+'>'+aTotais[1,i,1]+'</'+aTotais[1,i,2]+'>'
        EndIf
   Next i
   cXML+= '</ICMSTot></total>'

   For i:= 1 To Len(aTransp[1])
        If !Empty(aTransp[1,i,3])
           If !Empty(aTransp[1,i,1])
             nFimTagPai:= aTransp[1,i,4]
             cTagPai+= "|"+StrZero(nFimTagPai,2) + aTransp[1,i,3]
             cXML+= '<' + aTransp[1,i,3] + '>'
             lpoemTag:= .t.
             lTagFim := .t.
          Else
             lpoemTag:= .f.
          EndIf
        EndIf
        If ! Empty(aTransp[1,i,1])
          cXML+= '<'+aTransp[1,i,2]+'>'+aTransp[1,i,1]+'</'+aTransp[1,i,2]+'>'
        EndIf
        If i == nFimTagPai .And. lpoemTag
          nIni:= RAT("|", cTagPai)
          cTag:= Substr(cTagPai, nIni+1)
          cXML+= '</'+SubStr(cTag, 3) + '>'
          cTagPai:= SubStr(cTagPai,1,nIni-1)
          If nIni > 1
            nIni      := RAT("|",cTagPai)
            nFimTagPai:= Val(Substr(cTagPai,nIni+1,2))
          Else
            nFimTagPai:= 0
         EndIf
      EndIf
   Next i
   If lTagFim
      cXML+= '</transp>'
     EndIf

   lpoemTag:= .f.
   If ! Empty(aFat[1,1,1])
        cXML+= '<cobr>'
        For i:= 1 To Len(aFat[1])
          If ! Empty(aFat[1,i,1])
            If StrZero(i,2) $ "-01-05-09-13-17-21-25-29"
                 If i > 2
                   cXML+= '</fat>'
                 EndIf
                 cXML+= '<fat>'
            EndIf
            cXML+= '<'+aFat[1,i,2]+'>'+aFat[1,i,1]+'</'+aFat[1,i,2]+'>'
          EndIf
        Next
        cXML+= '</fat>'
        lpoemTag:= .t.
   EndIf

   If ! Empty(aCobr[1,1,1])
      If ! lpoemTag
           cXML+= '<cobr>'
        EndIf
        For i:= 1 To Len(aCobr[1])
          If ! Empty(aCobr[1,i,1])
            If StrZero(i,2) $ "-01-04-07-10-13-16-19-22-25-28"
                 If i > 2
                   cXML+= '</dup>'
                 EndIf
                 cXML+= '<dup>'
            EndIf
            cXML+= '<'+aCobr[1,i,2]+'>'+aCobr[1,i,1]+'</'+aCobr[1,i,2]+'>'
            lpoemTag:= .t.
          EndIf
        Next
        cXML+= '</dup>'
   EndIf
   If lpoemTag
      cXML+= '</cobr>'
   EndIf

   lpoemTag:= .f.
   If ! Empty(aPagamento[1,1,1])
      cXML+= '<pag>'
        For i:= 1 To Len(aPagamento[1])
          If ! Empty(aPagamento[1,i,1])
             If i == 1
                 cXML+= '<detPag>'
                 If ! Empty(cIndPag)
                    cXML+= '<indPag>' + cIndPag + '</indPag>'
                 EndIf
              EndIf
            cXML+= '<'+aPagamento[1,i,2]+'>'+aPagamento[1,i,1]+'</'+aPagamento[1,i,2]+'>'
            lpoemTag:= .t.
          EndIf
        Next i
        cXML+= '</detPag>'
   EndIf
   If lpoemTag
      cXML+= '</pag>'
   EndIf

   If ! Empty(cinfCpl) .or. ! Empty(cinfAdFisco)
        cXML+= '<infAdic>'
        If ! Empty(cinfAdFisco)
          cXML+= '<infAdFisco>' + cinfAdFisco + '</infAdFisco>'
        EndIf
        If ! Empty(cinfCpl)
          cXML+= '<infCpl>' + cinfCpl + '</infCpl>'
        EndIf
        cXML+= '</infAdic>'
   EndIf

   If ! Empty(aCompra[1, 1, 1])
      cXML+= '<compra>'
      For i:= 1 To Len(aCompra[1])
         If ! Empty(aCompra[1,i,1])
              cXML+= '<'+aCompra[1,i,2]+'>'+aCompra[1,i,1]+'</'+aCompra[1,i,2]+'>'
           Endif
      Next i
      cXML+= '</compra>'
     EndIf

   cXML+= '</infNFe>'
   cXML+= '<Signature xmlns="http://www.w3.org/2000/09/xmldsig#"><SignedInfo><CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/><SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" />'
   cXML+= '<Reference URI="#NFe' + cChave + '">'
   cXML+= '<Transforms><Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" /><Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" /></Transforms><DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />'
   cXML+= '<DigestValue>' + cdigVal + '</DigestValue></Reference></SignedInfo><SignatureValue>N6srMqFYv/CIChjx+BEqcBf8qrh0KR1bn2uKBe6h51SaZw+SN3oUVKww/GmWi7iMgKkYMKgVz9QzT0Ooviw8a6WFENTHbABxMfg3UhJeFrvM+4Z75M5WTXEH6TuEi+BYodv44zNCn0utIkdGngvIEmB86KFJRnDCm+u1hrYHcNA=</SignatureValue>'
    cXML+= '<KeyInfo><X509Data><X509Certificate>MIICOTCCAaKgAwIBAgIQJpLn3fwH17RNXJHw5VenaDANBgkqhkiG9w0BAQUFADBbMVkwVwYDVQQDHlAAdwB3AHcALgBmAHMAaQBzAHQALgBjAG8AbQAuAGIAcgAgACgAUwBFAE0AIABWAEEATABJAEQAQQBEAEUAIABKAFUAUgDNAEQASQBDAEEAKTAeFw0xNTEyMjQwODI1MjVaFw0xODEyMjQwODI1MjVaMFsxWTBXBgNVBAMeUAB3AHcAdwAuAGYAcwBpAHMAdAAuAGMAbwBtAC4AYgByACAAKABTAEUATQAgAFYAQQBMAEkARABBAEQARQAgAEoAVQBSAM0ARABJAEMAQQApMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDX4BYmJiNwrPz9At2ioXYkMuMWAOf669VPS3SAzIKkJLhSE7Bf9sbTjGHRFZhs6STxKkMBKKnx6dqAEMGlQwDSU42/kqhGya28SUn3HigH2w3dR/536Gt4eAxyLp9ODNXUqWTpnraWCeT41kcnJ27cmOAUMxzxDcsA93n32L4u8wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAAN89zf+wSFL+4+2Ic8mGva8Z51EzYzNgYEqXwEMHxw4jCxxbsuxewQWedSGWi3SFZla6zmNUEA+UO95tSZ353klTvWDzut2BFSJOPLcMu8HPTTdnMt4ofVeVqKyi2vp+3t78vjqDAAfSAu5C9wT7stoUx41Nok+L6WbmpOIgvHy</X509Certificate>'
    cXML+= '</X509Data></KeyInfo></Signature></NFe>'
   cXML+= '<protNFe versao="'+cVersao+'"><infProt>'
   cXML+= '<tpAmb>'+ctpAmb+'</tpAmb><verAplic>'+cverAplic+'</verAplic><chNFe>'+cChave+'</chNFe><dhRecbto>'+cdhRecbto+'</dhRecbto>'
   cXML+= '<nProt>'+cnProt+'</nProt><digVal>'+cdigVal+'</digVal><cStat>'+ccStat+'</cStat><xMotivo>'+cxMotivo+'</xMotivo>'
   cXML+= '</infProt></protNFe></nfeProc>'

   cArqXml:= "C:\TEMP\" + cChave + ".xml"

   nArqHandle:= FCREATE(cArqXml, 0 )
   FWRITE(nArqHandle, cXML)
   FCLOSE(nArqHandle)
   If ! File(cArqXml)
      hwg_msginfo("XML não foi Criado!")
      Return Nil
   Else
      hwg_msginfo("XML criado com sucesso!")
   EndIf

   Return Nil

***************************************
Function DigitoChave(CodigoChave)
Local indice:= '4329876543298765432987654329876543298765432'
Local digito

   nSoma:= 0
   For contador:= 1 To 43
      nSoma+= (Val(SubStr(CodigoChave, contador, 1)) * Val(SubStr(indice, contador, 1)))
   Next

   digito:= (nSoma % 11)
   If digito == 0 .Or. digito == 1
      digito:= 0
   Else
      digito:= (11 - digito)
   EndIf
   If SubStr(CodigoChave, 44, 1) != LTrim(Str(digito, 1))
      MsgStop('Código da Chave Errado....', 'Aviso do Sistema')
      principal:oChaveNFe:SetFocus()
      Return .f.
   EndIf
   Return .t.

***************************************
Function Troca_Acento(cTexto)

   cTexto := StrTran( cTexto, "&#243;", "ó" )
   cTexto := StrTran( cTexto, "&#225;", "á" )
   cTexto := StrTran( cTexto, "&#233;", "é" )
   Return cTexto

**************************************
Function Transfome(cTexto)

   cTexto := StrTran( cTexto, "/", "%2F" )
   cTexto := StrTran( cTexto, "=", "%3D" )
   cTexto := StrTran( cTexto, "+", "%2B" )
   cTexto := StrTran( cTexto, ":", "%3A" )
   cTexto := StrTran( cTexto, ",", "%2C" )
   cTexto := StrTran( cTexto, "?", "%3F" )
   cTexto := StrTran( cTexto, "$", "%24" )

   Return cTexto


rotina em HWGUI completa :xau :xau :xau

Consulta optante do simples online

MensagemEnviado: 27 Mar 2019 16:37
por fladimir
Agradeço aos colegas q implentaram ou melhoraram a função em especial ao Daniel, mas o fato é q estou tendo problemas e pelo q pesquisei o governo quer limitar o download a ter o certificado ou via manifestação prévia.

Eu tenha as 2 formas em meu sistema via a rotina aki descrita e tb via manifestação.

Via manifestação o problema é q demora a sincronização no site do governo ou seja, manifesta como confirmação da operação e pra liberar o download demora de 30 segundos até uns 3 min e o cliente quer tudo na hora.

Tem alguns sites como o FSIST q vc informa a chave e escolhe com certificado ai pede o certificado e já baixa o XML.

Se fosse possível modificar esta rotina aki pra incorporar o certificado ou algo assim ai daria certo sem ter q manifestar, ou seja, seria mais rápido.

Será q seria possível?

Consulta optante do simples online

MensagemEnviado: 27 Mar 2019 20:06
por janio
Se fosse possível modificar esta rotina aki pra incorporar o certificado


Show, Fladimir. Acho q eh isso mesmo que precisamos no momento, como forma de contornar esse problema que o governo está criando pra nós.

Eu lembro que ha alguns anos havia duas versões desta rotina: uma com certificado, e a outra (esta que estamos usando até hoje) sem certificado.

Vamos aguardar o que os mestres tem a dizer

PS: Se tiro a baixa de xml do meu sistema, me matam rsrs

Consulta optante do simples online

MensagemEnviado: 28 Mar 2019 14:10
por Daniel
Ola
Para teste com uso do certificado

Consulta optante do simples online

MensagemEnviado: 28 Mar 2019 15:12
por fladimir
Cara... deu certo...
Daniel meu amigo, vou entrar em contato contigo no particular, vou mandar um presente pra vc...

Kkk
Parabéns cara vc manja muito de Web e esses negócios.

Só 1 dúvida, qdo abriu apareceu os diversos certificados, mesmo eu tendo marcado o correto não baixou, ai removi e deixei somente o correto, ai executando deu certo, seria isso mesmo?
De qualquer maneira tem o fonte, vou dar uma analisada mais apurada.

Grande abraço e obrigado mais 1 vez... não precisa nem manifestar e não esta errado pq usou o certificado do cliente, agora se o governo não mudar (o q é meio dificil) vai funcionar por mais um bom tempo

Consulta optante do simples online

MensagemEnviado: 28 Mar 2019 17:31
por Daniel
Ola Fladimir
Testar com esta mudança na função abaixo
com mais de um certificado

*****************************************
Function DownLoad()
Local cParm, cRet, cPart, cCertificado:= SubStr(principal.Combo_1.DisplayValue, (At(' - ', principal.Combo_1.DisplayValue) + 3))
Local cXML

   nIni  := At('id="__VIEWSTATE" value=',  cHtml) + 24
   cHtml1:= SubStr( cHtml, nIni)
   nFim  := At('" />', cHtml1) - 1
   cViewState:= SubStr(cHtml, nIni, nFim)

   nIni1 := At('id="__EVENTVALIDATION" value="',  cHtml) + 30
   cHtml1:= SubStr( cHtml, nIni1)
   nFim1 := At('" />', cHtml1) - 1
   cEeventValidation:= SubStr(cHtml, nIni1, nFim1)

   nIni2 := At('id="__VIEWSTATEGENERATOR" value="',  cHtml) + 33
   cHtml1:= SubStr( cHtml, nIni2)
   nFim2 := At('" />', cHtml1) - 1
   cViewStateGenerator:= SubStr(cHtml, nIni2, nFim2)

   cParm:= "__EVENTTARGET=" + ;
           "&__EVENTARGUMENT=" + ;
           "&__VIEWSTATE=" + Transfome(cviewState) + ;
           "&__VIEWSTATEGENERATOR=" + Transfome(cViewStateGenerator) + ;
           "&__EVENTVALIDATION=" + Transfome(cEeventValidation) + ;
           "&ctl00%24txtPalavraChave=" + ;
           "&ctl00%24ContentPlaceHolder1%24btnDownload=Download+do+documento*" + ;
           "&ctl00%24ContentPlaceHolder1%24abaSelecionada=" + ;
           "&hiddenInputToUpdateATBuffer_CommonToolkitScripts=1"

   Try
      oServer:= win_OleCreateObject( "MSXML2.ServerXMLHTTP.6.0")
   Catch
      MsgInfo('Erro na Criação do Serviço')
      Return .f.
   End
   Try
      If cCertificado != NIL
         oServer:setOption( 3, "CURRENT_USER\MY\" + cCertificado )
      EndIf
      oServer:Open( "POST", cUrl2, .f. )
   Catch
      MsgInfo('Erro na Conexão com o Site ' + cUrl2)
      Return .f.
   End
     oServer:SetRequestHeader( "Content-Type", "application/x-www-form-urlencoded" )
   oServer:SetRequestHeader( "Connection", "keep-alive" )
   oServer:SetRequestHeader( "Cookie", cStringCookie)
     Try
      oServer:Send(cParm)
      oServer:WaitForResponse( 500000 )
   Catch
      MsgInfo('Erro na Resposta com o Site ' + cUrl2)
      Return .f.
   End
   cRet:= oServer:ResponseBody
   //MemoWrit("texte-nfe.txt", cRet)

   If At('<div id="ctl00_ContentPlaceHolder1_pnlErro" class="painel_alerta">', cRet) > 0
      cPart:= Substr(cRet, (At('<span id="ctl00_ContentPlaceHolder1_lblResultadoConsulta">', cRet) + 60))
      cPart:= Substr(cPart, 1, (At('</span>', cPart) - 1))
      MsgInfo(Troca_Acento(cPart, 'aviso Erro'))
      Return .f.
   EndIf
   If At('<div id="ctl00_ContentPlaceHolder1_pnlErro" class="painel_erro_sistema">', cRet) > 0
      cPart:= Substr(cRet, (At('<span id="ctl00_ContentPlaceHolder1_lblResultadoConsulta">', cRet) + 60))
      cPart:= Substr(cPart, 1, (At('</span>', cPart) - 1))
      MsgInfo(Troca_Acento(cPart, 'aviso Erro'))
      Return .f.
   EndIf
   If At('<div class="divMensagemPaginaErro">', cRet) > 0
      cPart:= Substr(cRet, (At('<span id="ctl00_ContentPlaceHolder1_lblMensagemErro">', cRet) + 53))
      cPart:= Substr(cPart, 1, (At('</span>', cPart) - 1))
      MsgInfo(Troca_Acento(cPart, 'aviso Erro'))
      Return .f.
   EndIf
   cIniFolder:= DiskName() + ":\" + CurDir() + "\"
   cXML:= cIniFolder + '\' + cChave + "-nfe_Cert.xml"
   nArqHandle:= FCREATE(cXML, 0 )
   FWRITE(nArqHandle, cRet)
   FCLOSE(nArqHandle)
   If ! File(cXML)
      MsgInfo("xML não baixado!")
      Return .f.
   Else
      MsgInfo("xML baixado com sucesso!")
      If MsgYesNo('Gerar DANFE?')
         cXML:= MemoRead(cXML)
           ImprimeDanfe(cXML, cChave + '.pdf')
        EndIf
   EndIf
   Return .t.

Consulta optante do simples online

MensagemEnviado: 28 Mar 2019 18:32
por janio
Boa noite,

Não consegui fazer funcionar. Mesmo na versão compilada não funcionou!

Janio

Consulta optante do simples online

MensagemEnviado: 28 Mar 2019 21:09
por fladimir
Deixa um certificado só na opções de internet

Consulta optante do simples online

MensagemEnviado: 29 Mar 2019 09:00
por rubens
Bom dia...

Daniel ainda não baixei essa versão nova aí, mas na versão anterior se digitasse o captcha errado dava erro e saía do sistema.. Já que você tá fazendo estas alterações aí poderia dar uma olhada nesse erro ...

Obrigado
Rubens

Consulta optante do simples online

MensagemEnviado: 29 Mar 2019 09:36
por fladimir
O Rubens, coloca um TRY CATCH nessa parte q ai não sai

Consulta optante do simples online

MensagemEnviado: 29 Mar 2019 11:13
por Daniel
ola Rubens nesta ultima foi arrumado o erro

Consulta optante do simples online

MensagemEnviado: 30 Mar 2019 15:46
por janio
Tudo funcionando! Vlw Daniel

Janio

Consulta optante do simples online

MensagemEnviado: 29 Abr 2019 03:40
por Sistem
olá,
acho que a SEFAZ bloqueou o captcha, desde de quinta feira não mostra o captcha (A seguinte falha ocorreu: Falha inesperada. O sistema pode estar momentaneamente indisponível ou ocorreu um erro pontual.) ver link abaixo.
o site do fsist não trabalha bem também
https://www.nfe.fazenda.gov.br/portal/consultaResumoCompletaAntiga.aspx?tipoConsulta=completa&tipoConteudo=XbSeqxE8pl8=

Consulta optante do simples online

MensagemEnviado: 29 Abr 2019 08:21
por janio
Bucha grande aqui.
Agora lascou

Consulta optante do simples online

MensagemEnviado: 29 Abr 2019 08:57
por lucimauro
Realmente fica muito difícil assim, já que era tão fácil com a grande contribuição do Daniel.
vamos ver se aparece um solução, se não vamos para a manifestação.

Consulta optante do simples online

MensagemEnviado: 29 Abr 2019 10:02
por Wanderlei
Daniel será que vc consegue resolver isso?
agora só tem como consultar com o novo captcha.

Consulta optante do simples online

MensagemEnviado: 29 Abr 2019 12:00
por marcelo.chakal
Poats, parece que realmente o página com captcha foi retirada.
Agora somente com recaptcha.

Consulta optante do simples online

MensagemEnviado: 29 Abr 2019 12:42
por fladimir
Tem q usar o site q tem a recaptcha q é o novo, o antigo vai parar e não podemos ficar sujeitos a ele

Então as opções são:

Site de consulta nacional com o recaptcha Prós e Contras, Prós tem funcionado e foi o q o governo disponibilzou no lugar do antigo, porém podem mudar futuramente
Manifestação - Esse não falha, porém o entrave na pracitidade é q tem q manifestar como ciencia pra fazer o download e não podemos faze automatico pq se não puxamos a responsabilidade pra nós até de notas q tenham sido emitida contra o cnpj q não eram. ficando a encargo do usuario fazer isso e ai aguardar um tempinho minimo pra poder fazer o download
Terceiros (q desconheço) - Não posso opinar

Então o q fiz por enquanto foi direcionar pro link com recaptha preenchendo a chave direto no site do governo, cliente abre, com certificado ele consegue fazer o download e já deixamos pra aparecer onde quer salvar e tem o atalho da pasta dos xmls do governo.

Até fazermos a manifestação de uma forma mais pratica.

Consulta optante do simples online

MensagemEnviado: 29 Abr 2019 13:04
por Sistem
tem esse site https://lite.arquivei.com.br testei e funciona sem certificado eles tem API, valor eh de 0,25 centavos,(numero minino 200 xml x 0.25 = 50 reais) nao sei se tem custo para implementar a API, quando ligaram disseram que eu tinha que falar com Luis sobre API, talvez seja pq tem custo, eu disse talvez, nao liguei.
obs: se eles conseguem eh pq da pra fazer :%

Consulta optante do simples online

MensagemEnviado: 29 Abr 2019 14:34
por fladimir
Como disse tem por terceiros tem q pesquisar e provavelmente terá custos

Se o Daniel se dispor a mudar a solução aki para Recptcha com certificado mata a charada.
Se não direciona pra abrir o link da consulta direta do governo já no recpatcha (novo captch) e o cliente faz o dowload tb resolve, mas ai fica do cliente salvar o XML no local correto.
E a terceira solução q é a q o governo quer mas não é pratica é a manifestação de ciência da operação para posterior download, não tem como automatizar ao meu ver sem chamar a responsabilidade disso, pq se colocamos pra fazer a verificação pra posterior manifestação o usuário tem q dar ciência da operação pra posterior download, não podemos deixar automatico pq pode ter notas q foram emitidas e não são de conhecimento do cliente ou seja, ele pode não aceitar akela determinada nota se alguma empresa emitiu sem autorização do cliente.

Consulta optante do simples online

MensagemEnviado: 29 Abr 2019 16:38
por Jairo Maia
Olá Pessoal,

fladimir, mas dar ciência, significa apenas que ele tomou conhecimento que aquela nota foi emitida contra seu CNPJ, posteriormente, ele pode recusar, alegando que não reconhece aquela operação.

Consulta optante do simples online

MensagemEnviado: 29 Abr 2019 16:57
por fladimir
Tem certeza?
pq se for isso mesmo ai podemos até automatizar o processo via manifestação q é o q o governo manda e funciona

Eu tenha a rotina aki e funciona mas depois q da ciencia tem q esperar um tempo entre 10 segundos a 1 min pra sincronizar nos servidores da SEFAZ ai faz o download tranquilo mas o problema é q os clientes não querem esperar isso já querem entrar em algum local e baixar

Agora se dar ciencia n ão tem problema ai faz uma thread q vai consultando e dando ciencia de tempos em tempos, com isso qdo for dar entrada em determinada chave ela já vai estar manifestada ai o download faz na hora

Agora precisamos ter certeza disso.

Consulta optante do simples online

MensagemEnviado: 29 Abr 2019 17:06
por Jairo Maia
fladimir escreveu:Tem certeza?
Sim!!! Absoluta.

Porém, após dar ciência, se for o caso de recusar tem prazo. Se nenhum colega colocar aqui antes, amanhã me comprometo a fazê-lo.

Ciência é uma etapa, Reconhecimento é outra.

Consulta optante do simples online

MensagemEnviado: 29 Abr 2019 17:11
por fladimir
Perai deixa ver se entendi

Então se der ciencia e tem uma nota lá q ele não comprou/autorizou ai talvez tenha prazo pra recusar seria isso?

Bom se for assim pode resolver de um lado e o cliente 1 vez por semana recusar o q não for, talvez se for o caso.

Ai talvez resolvamos.

Consulta optante do simples online

MensagemEnviado: 29 Abr 2019 17:17
por Jairo Maia
fladimir, exatamente ISSO. Após dar ciência, tem um prazo de contestação. Se não for feito: Operação Reconhecida. Amanhã coloco a questão do prazo caso nenhum colega antecipe.

Bom trabalho.

Consulta optante do simples online

MensagemEnviado: 30 Abr 2019 09:46
por Jairo Maia
Olá Pessoal,

Essas informações constam em: Perguntas Frequentes da NF-e:

Fase 1: Manifestação de Ciência de emissão:
O evento de "Ciência da Emissão" registra na NF-e a solicitação do destinatário para a obtenção do arquivo XML. Após o registro deste evento, é permitido que o destinatário efetue o download do arquivo XML.
O Evento da "Ciência da Emissão" não representa a manifestação do destinatário sobre a operação, mas unicamente dá condições para que o destinatário obtenha o arquivo XML; este evento registra na NF-e que o destinatário da operação, constante nesta NF-e, tem conhecimento que o documento foi emitido, mas ainda não expressou uma manifestação conclusiva para a operação.


Uma vez que o destinatário tomou Ciência da Emissão é obrigatória a sua manifestação?
Sim. Toda nota informada ao contribuinte tem que ter registrada a sua respectiva manifestação até um prazo máximo de 180 dias, contados da data da ciência. Este prazo máximo será reduzido gradativamente, conforme o interesse das Administrações Tributárias.

ATENÇÃO! NOTA: O AJUSTE SINIEF 7, DE 30 DE SETEMBRO DE 2005, em sua Cláusula décima quinta-C estabelece 90 dias para se manifestar, e 30 dias após a manifestação para eventual correção.

Fase 2: Manifestação conclusiva sobre a NF-e:

-Confirmação da Operação:
O evento será registrado após a realização da operação, e significa que a operação ocorreu conforme informado na NF-e. Quando a NF-e trata de uma circulação de mercadorias, o momento de registro do evento deve ser posterior à entrada física da mercadoria no estabelecimento do destinatário.
Este evento também deve ser registrado para NF-e onde não existem movimentações de mercadorias, mas foram objeto de ciência por parte do destinatário, por isso é denominado de Confirmação da Operação e não Confirmação de Recebimento.
Importante registrar, que após a Confirmação da Operação pelo destinatário, a empresa emitente fica impedida de cancelar a NF-e. Apenas o evento Ciência da Emissão não inibe a autorização para o pedido de cancelamento da NF-e, conforme o prazo definido na legislação vigente.


-Operação não Realizada:
Este evento será informado pelo destinatário quando, por algum motivo, a operação legalmente acordada entre as partes não se realizou (devolução sem entrada física da mercadoria no estabelecimento do destinatário, sinistro da carga durante seu transporte, etc.).

-Desconhecimento da Operação:
Este evento tem como finalidade possibilitar ao destinatário se manifestar quando da utilização indevida de sua Inscrição Estadual, por parte do emitente da NF-e, para acobertar operações fraudulentas de remessas de mercadorias para destinatário diverso. Este evento protege o destinatário de passivos tributários envolvendo o uso indevido de sua Inscrição Estadual/CNPJ.

IMPORTANTE:
-Conforme publicado o Ajuste SINIEF 23, de 05/12/2014, É OBRIGATÓRIO a manifestação nesses casos:
III -nos casos em que o destinatário for um estabelecimento distribuidor ou atacadista, acoberte, a partir de 1º de agosto de 2015, a circulação de:
a) cigarros;
b) bebidas alcoólicas, inclusive cervejas e chopes;
c) refrigerantes e água mineral.

Consulta optante do simples online

MensagemEnviado: 30 Abr 2019 10:00
por fladimir
Matou a pau

Melhor fazer via manifestação, fica mais prático e tal e o cara tem 90 dias pra contestar algo.

Vlw Jairo.

Consulta optante do simples online

MensagemEnviado: 30 Abr 2019 10:20
por lucimauro
Bom dia,
fladimir você faz essa manifestação usando o acbrmonitorplus?

Consulta optante do simples online

MensagemEnviado: 30 Abr 2019 10:41
por fladimir
Fiz via hbNFe a anos atrás, mas meus clientes não usavam devido o outro método ser mais prático, pq eu não deixava automático dando ciencia, apenas mostrava e o usuario tinha dar ciencia e depois fazer o download.

Depois fiz via ACBr mas seguindo a mesma lógica acima

Agora vou mudar pra deixar automatizado baixando geral e dando ciencia e fazendo os downloads, ai o cliente só passa a chave

Terei q ver como farei pra ele com relação aos XMLs q ele não der entrada, como o prazo é 90 dias pra manifestar algo, o q eu penso, o q fez o download e deu entrada eu já manifesto como Ok

Os demais pensei em mostrar todo inicio de mês relativos ao mes anterior pra ele dar uma definição e se não der pedir senha de Gerente pra gravar isso em um log apenas pra eu ter mais munição caso ele alegue algo

mas como o Jairo expos aki resolve, por isso q agora entendo alguns sistemas q já tem isso, é assim q eles fazem.

Consulta optante do simples online

MensagemEnviado: 03 Mai 2019 09:17
por janio
Alguém consegue me explicar como esse site CONTINUA funcionando, sem digitar captcha e nem nada??

https://lite.arquivei.com.br/

Consulta optante do simples online

MensagemEnviado: 03 Mai 2019 09:28
por Sistem
o site arquivei usar protecao para recaptcha por isso não precisa por o reCaptcha "não sou um rôbo"
o site aquivei tem limite de download de chave (querem vender o produto)
Imagem
o fsist tb colocou no site dele acabei de ver

Consulta optante do simples online

MensagemEnviado: 03 Mai 2019 11:56
por Sistem
da pra baixar do site fsist
Function Bxxml(cChave, oLbxNfee)
  Local hWnd, oOle, cUrl

  cUrl:="https://www.fsist.com.br"

  TRY
   oOle:= CreateObject("InternetExplorer.Application")

   oOle:Visible    := .f.
//   oOle:ToolBar    := .f.
//   oOle:StatusBar  := .f.
//   oOle:MenuBar    := .f.

   oOle:Navigate(cUrl)

   hWnd:=oOle:hWnd
   ShowWindow(hWnd, 1)
   BringWindowToTop(hWnd)

   While oOle:Busy
     syswait(.5)
   End
  CATCH
  END

  TRY
   oOle := oOle:Document()
   oOle:All:Item("chave",0):Value := cChave
   oOle:All:Item("chave",0):Focus()
   oOle:All:Item("chave",0):Click()
   oOle:All:Item("butconsulta",0):Focus()
   oOle:All:Item("butconsulta",0):Click()
   syswait(10)
   oOle:All:Item("linksemcert",0):Focus()
   oOle:All:Item("linksemcert",0):Click()

  CATCH
  END

  cUser := Alltrim(NetName(.T.))

  oOle := Nil

  If File("C:\Users\"+cUser+"\Downloads\"+cChave+".xml")
     aqui sua funcao p/puxa xml para seu sistema
  Else
     ? "nada feito"
  Endif

Return nil


so que tem um problema, no IE mostra a msg de confirmacao de salvar o arquivo, algume sabe como resolver?

Consulta optante do simples online

MensagemEnviado: 03 Mai 2019 18:35
por Sistem
esse resolve o problema do salvar
Function Bxxml(cChave)
  Local hWnd, oOle, cUrl, oShell

  cUrl:="https://www.fsist.com.br"

  TRY
   oOle:= CreateObject("InternetExplorer.Application")

   oOle:ToolBar    := .t.
   oOle:StatusBar  := .t.
   oOle:MenuBar    := .f.
   oOle:Visible    := .f.

   oOle:Navigate2(cUrl)

   hWnd:=oOle:hWnd
   ShowWindow(hWnd, 1)
   BringWindowToTop(hWnd)

//   GetWndDefault():Minimize()

   While oOle:Busy
     syswait(.5)
   End
  CATCH
  END

  TRY
   oDoc := oOle:Document()
   oDoc:All:Item("chave",0):Value := cChave
   oDoc:All:Item("butconsulta",0):Focus()
   oDoc:All:Item("butconsulta",0):Click()
   syswait(5)
   oDoc:All:Item("linksemcert",0):Focus()
   oDoc:All:Item("linksemcert",0):Click()
   syswait(1)
   oShell := CreateObject( "WScript.Shell" )
   oShell:AppActivate("Internet Explorer")
// oShell:SetForegroundWindow()
   oShell:SendKeys("%{TAB}")  // tecla tab acionada
   oShell:SendKeys("%{S}")   // alt+s acionado para salvar o arquivo
//   oShell:SendKeys("{Enter}")
   syswait(3)
   oOle:Quit()
  CATCH
  END

  cUser := Alltrim(NetName(.T.))

  cFile := "C:\Users\"+cUser+"\Downloads\"+cChave+".xml"

  If File(cFile)
     ? "encontrou o aquivo na pasta download, nesta linha vc coloca sua funcao p/importar para seu aplicativo"
     fErase(cFile)
  Else
     ? "nada feito!"
  Endif

Return nil

Consulta optante do simples online

MensagemEnviado: 05 Mar 2020 09:57
por lucimauro
@Daniel a consulta pelo CNPJ na receita federal , com você continua funcionando, porque eu uso aqui e a alguns dias parou de funcionar.

Consulta optante do simples online

MensagemEnviado: 30 Dez 2020 20:37
por marcosLP
também gostaria de saber