Clipper On Line • Ver Tópico - Consulta optante do simples online

Consulta optante do simples online

Projeto Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

 

Consulta optante do simples online

Mensagempor Fernando queiroz » 19 Mar 2019 18:31

Alguém tem essa rotina em HWGUI to querendo incluir no meu sistema
HARBOUR 3.2, HWGUI 2.23 B3, SEFAZCLASS, PDFClass, ADO + MariaDB/MySQL, RMChart
Fernando queiroz
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 737
Data de registro: 12 Nov 2014 23:41
Cidade/Estado: Porto Alegre/RS
Curtiu: 12 vezes
Mens.Curtidas: 58 vezes

Consulta optante do simples online

Mensagempor Fernando queiroz » 20 Mar 2019 15:01

//=========================================================================
//
// 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
HARBOUR 3.2, HWGUI 2.23 B3, SEFAZCLASS, PDFClass, ADO + MariaDB/MySQL, RMChart
Fernando queiroz
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 737
Data de registro: 12 Nov 2014 23:41
Cidade/Estado: Porto Alegre/RS
Curtiu: 12 vezes
Mens.Curtidas: 58 vezes

Consulta optante do simples online

Mensagempor Fernando queiroz » 20 Mar 2019 15:03

                 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
HARBOUR 3.2, HWGUI 2.23 B3, SEFAZCLASS, PDFClass, ADO + MariaDB/MySQL, RMChart
Fernando queiroz
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 737
Data de registro: 12 Nov 2014 23:41
Cidade/Estado: Porto Alegre/RS
Curtiu: 12 vezes
Mens.Curtidas: 58 vezes

Consulta optante do simples online

Mensagempor fladimir » 27 Mar 2019 16:37

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?
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
Avatar de usuário

fladimir
Colaborador

Colaborador
 
Mensagens: 2434
Data de registro: 15 Nov 2006 19:21
Curtiu: 28 vezes
Mens.Curtidas: 157 vezes

Consulta optante do simples online

Mensagempor janio » 27 Mar 2019 20:06

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
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Avatar de usuário

janio
Colaborador

Colaborador
 
Mensagens: 1835
Data de registro: 06 Jul 2004 07:43
Cidade/Estado: UBAJARA - CE
Curtiu: 8 vezes
Mens.Curtidas: 68 vezes

Consulta optante do simples online

Mensagempor Daniel » 28 Mar 2019 14:10

Ola
Para teste com uso do certificado
Anexos
ImpCertificado.rar
para teste
(1.01 MiB) Baixado 178 vezes
Daniel

Harbour + Minigui + dbfcdx
Marinas-Gui Pena que parou o suporte
Avatar de usuário

Daniel
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 373
Data de registro: 13 Ago 2003 22:42
Cidade/Estado: Apucarana - PR
Curtiu: 0 vez
Mens.Curtidas: 36 vezes

Consulta optante do simples online

Mensagempor fladimir » 28 Mar 2019 15:12

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
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
Avatar de usuário

fladimir
Colaborador

Colaborador
 
Mensagens: 2434
Data de registro: 15 Nov 2006 19:21
Curtiu: 28 vezes
Mens.Curtidas: 157 vezes

Consulta optante do simples online

Mensagempor Daniel » 28 Mar 2019 17:31

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.
Daniel

Harbour + Minigui + dbfcdx
Marinas-Gui Pena que parou o suporte
Avatar de usuário

Daniel
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 373
Data de registro: 13 Ago 2003 22:42
Cidade/Estado: Apucarana - PR
Curtiu: 0 vez
Mens.Curtidas: 36 vezes

Consulta optante do simples online

Mensagempor janio » 28 Mar 2019 18:32

Boa noite,

Não consegui fazer funcionar. Mesmo na versão compilada não funcionou!

Janio
Anexos
erroCert.png
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Avatar de usuário

janio
Colaborador

Colaborador
 
Mensagens: 1835
Data de registro: 06 Jul 2004 07:43
Cidade/Estado: UBAJARA - CE
Curtiu: 8 vezes
Mens.Curtidas: 68 vezes

Consulta optante do simples online

Mensagempor fladimir » 28 Mar 2019 21:09

Deixa um certificado só na opções de internet
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
Avatar de usuário

fladimir
Colaborador

Colaborador
 
Mensagens: 2434
Data de registro: 15 Nov 2006 19:21
Curtiu: 28 vezes
Mens.Curtidas: 157 vezes

Consulta optante do simples online

Mensagempor rubens » 29 Mar 2019 09:00

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
"Eu e minha casa servimos ao Senhor e você ???"
Avatar de usuário

rubens
Colaborador

Colaborador
 
Mensagens: 1518
Data de registro: 16 Ago 2003 09:05
Cidade/Estado: Nova Xavantina - MT
Curtiu: 77 vezes
Mens.Curtidas: 104 vezes

Consulta optante do simples online

Mensagempor fladimir » 29 Mar 2019 09:36

O Rubens, coloca um TRY CATCH nessa parte q ai não sai
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
Avatar de usuário

fladimir
Colaborador

Colaborador
 
Mensagens: 2434
Data de registro: 15 Nov 2006 19:21
Curtiu: 28 vezes
Mens.Curtidas: 157 vezes

Consulta optante do simples online

Mensagempor Daniel » 29 Mar 2019 11:13

ola Rubens nesta ultima foi arrumado o erro
Daniel

Harbour + Minigui + dbfcdx
Marinas-Gui Pena que parou o suporte
Avatar de usuário

Daniel
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 373
Data de registro: 13 Ago 2003 22:42
Cidade/Estado: Apucarana - PR
Curtiu: 0 vez
Mens.Curtidas: 36 vezes

Consulta optante do simples online

Mensagempor janio » 30 Mar 2019 15:46

Tudo funcionando! Vlw Daniel

Janio
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Avatar de usuário

janio
Colaborador

Colaborador
 
Mensagens: 1835
Data de registro: 06 Jul 2004 07:43
Cidade/Estado: UBAJARA - CE
Curtiu: 8 vezes
Mens.Curtidas: 68 vezes

Consulta optante do simples online

Mensagempor Sistem » 29 Abr 2019 03:40

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=
Sistem
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 14
Data de registro: 10 Out 2012 20:21
Cidade/Estado: Fortaleza/CE
Curtiu: 0 vez
Mens.Curtidas: 0 vez

Anterior Próximo



Retornar para Harbour

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 7 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro