Jump to content
Fivewin Brasil

amadorqueiroz

Membros
  • Posts

    6
  • Joined

  • Last visited

Posts posted by amadorqueiroz

  1. E já compartilharam a versão anterior que requer o captcha, segue anexo (imp.rar). O outro anexo (impnfenovo.rar) é o exe compilado que não requer captcha.
    Créditos do DANIEL da PCTOLEDO... http://www.pctoledo.com.br/forum/memberlist.php?mode=viewprofile&u=9

    A versão que não requer o captcha ele ainda não soltou o fonte.

    Acho que está escrito em XHarbour se alguém ai arriscar traduzir para o Delphi e quiser compartilhar estou na fila rsrs...imp.rar

     

     

    o pessoal aqui gerou um exe que consegue importar.

     

    http://www.pctoledo.com.br/forum/viewtopic.php?f=4&t=16972&p=119114#p119114

     

    disseram que irão compartilhar os fontes

     

     

     

  2.  

    Pessoal, boa tarde!

    A Sefaz manteve a consulta antiga para fins de acessibilidade, para que a rotina funcione, bastar alterar as variáveis de URL conforme abaixo:

    
       PRIVATE cUrl := "http://www.nfe.fazenda.gov.br/portal/consultaResumoCompletaAntiga.aspx?tipoConsulta=completa&tipoConteudo=XbSeqxE8pl8="
       PRIVATE cUrl1:= "http://www.nfe.fazenda.gov.br/portal/consultaCompleta.aspx?tipoConteudo=XbSeqxE8pl8="
       PRIVATE cUrl2:= "http://www.nfe.fazenda.gov.br/portal/consultaResumoCompletaAntiga.aspx?tipoConsulta=completa&tipoConteudo=XbSeqxE8pl8%3d"
    

    Espero ter ajudado.

    Abraços 

    Att,

    Fernando Alves
    Skype: fernando.advpl

     

    Fernando vc é o da FSIST ???

    Se for poderia me enviar da última versão da DLL por email ???

    amadorjosequeiroz@gmail.com

     

  3.  

    Ainda usamos na empresa a da FSIST porem enquanto ele não avisava do comunicado, corri e ressuscitei  uma rotina antiga que tinha achado por aqui no forum e no pctoledo.

    Fiz uma adaptações para o xHarbour e esta funcional.

    Funcionamento: a URL atual do novo captcha não esta validando o click do usuário, caso acessem e digitem a chave e clique em continuar vai direto para area de visualização e download, me usei desse recurso para não solicitar nada ao usuário é só passar a chave e ser feliz

     

    Segue código abaixo

     

    
    // --------- Download XML NFe --------- //
    #include "fivewin.ch"
    #include "image.ch"
    #include "directry.ch"
    #include "fileio.ch"
    #include "tip.ch"
    
    #define URL_CONSULTA          "http://www.nfe.fazenda.gov.br/portal/consultaRecaptcha.aspx?tipoConsulta=completa&tipoConteudo=XbSeqxE8pl8="
    #define URL_CONSULTA_COMPLETA "http://www.nfe.fazenda.gov.br/portal/consultaRecaptcha.aspx?tipoConsulta=completa&tipoConteudo=XbSeqxE8pl8="
    
    Static s_cVersao := "", s_cTpAmb      := "", s_cVerAplic      := "", s_cDhRecbto := "", s_cnProt := "", s_cDigVal := ""
    Static s_cinfCpl := "", s_cInfAdFisco := "", s_cDiscAdicional := "", s_cxMotivo  := "", s_ccStat := ""
    Static s_aIde    := {}, s_aEmit       := {}, s_aDest          := {}, s_aDet      := {}, s_aICMS  := {}, s_aIPI    := {}
    Static s_aTransp := {}, s_aCobr       := {}, s_aMedicamentos  := {}, s_aTotais   := {}, s_aPIS   := {}, s_aCOFINS := {}
    Static s_cViewState, s_cViewStateGenerator, s_cHiddenToken, s_cEventValidation, s_cStringCookie, s_cHiddenSom
    // ---------------------------------------- //
    // Download XML //
    
    /******************************************************************************/
    procedure DownloadNFe( cChave, cPasta )
    /*
    */
       local oDialog, oIcone, oFonte, hInput := HB_Hash()
       local cCaptcha       := Space( 6 )
       local lSemParametros := Empty( PCount() )
    
       if lSemParametros
          cChave := Space( 44 )
          cPasta := ''
       endif
       
       MsgRun( 'Aguarde! Realizando Download do XML...',, {|| BaixarXML(cChave, cCaptcha, hInput, nil, lSemParametros, cPasta)})
    
    return
    
    /***********************************************************************************/
    static function BaixarXML( cChave, cCaptcha, hInput, oDialog, lSemParametros, cPasta )
    /*
    */
       Local p, oInternet, cParm, cRetorno := '', cHtml := '', c_span := ''
       Local nIni, cPart, cParte, nFim, cFile, nTamTag, nTotPro
    
       // 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(s_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(s_aEmit,{{"","CNPJ","emit",20,"CNPJ",0},; //1- tratamento especial
                     {"","CPF","",0,"CPF",0},; //2-
                     {"","xNome","",0,"Nome / Razão Social",0},; //3-
                     {"","xFant","",0,"Nome Fantasia",0},; //4-
                     {"","xLgr","enderEmit",15,"Endereço",0},; //5- tratamento especial
                     {"","nro","",0,"Endereço",0},; //6- tratamento especial
                     {"","xCpl","",0,"Endereço",0},; //7- tratamento especial
                     {"","xBairro","",0,"Bairro / Distrito",0},; //8-
                     {"","cMun","",0,"Município",7},; //9-
                     {"","xMun","",0,"Município",-10},; //10-
                     {"","UF","",0,"UF",0},; //11-
                     {"","CEP","",0,"CEP",0},; //12- tratamento especial
                     {"","cPais","",0,"País",4},; //13-
                     {"","xPais","",0,"País",-7},; //14-
                     {"","fone","",0,"Telefone",0},; //15- tratamento especial
                     {"","IE","",0,"Inscrição Estadual",0},; //16-
                     {"","IEST","",0,"Inscrição Estadual do Substituto Tributário",0},; //17-
                     {"","IM","",0,"Inscrição Municipal",0},; //18-
                     {"","CNAE","",0,"CNAE Fiscal",0},; //19-
                     {"","CRT","",0,"Código de Regime Tributário",1}}) //20-
    
       AADD(s_aDest,{{"","CNPJ","dest",20,"CNPJ",0},; //1-
                     {"","CPF","",0,"CPF",0},; //2-
                     {"","idEstrangeiro","",0,"",0},; //3-
                     {"","xNome","",0,"Nome / Razão Social",0},; //4-
                     {"","xLgr","enderDest",15,"Endereço",0},; //5- tratamento especial
                     {"","nro","",0,"Endereço",0},; //6- tratamento especial
                     {"","xCpl","",0,"Endereço",0},; //7- tratamento especial
                     {"","xBairro","",0,"Bairro / Distrito",0},; //8-
                     {"","cMun","",0,"Município",7},; //9-
                     {"","xMun","",0,"Município",-10},; //10-
                     {"","UF","",0,"UF",0},; //11-
                     {"","CEP","",0,"CEP",0},; //12- tratamento especial
                     {"","cPais","",0,"País",4},; //13-
                     {"","xPais","",0,"País",-7},; //14-
                     {"","fone","",0,"Telefone",0},; //15- tratamento especial
                     {"","indIEDest","",0,"Indicador IE",2},; //16- tratamento especial
                     {"","IE","",0,"Inscrição Estadual",0},; //17-
                     {"","ISUF","",0,"Inscrição SUFRAMA",0},; //18-
                     {"","IM","",0,"IM",0},; //19-
                     {"","email","",0,"E-mail",0}}) //20-
    
       //Conteudo elementos da Matriz = {VALOR_TAG,TAG,LABEL_HTML}
    
       AADD(s_aTotais,{{"0.00","vBC","Base de Cálculo ICMS"},; //1-
                       {"0.00","vICMS","Valor do ICMS"},; //2-
                       {"0.00","vICMSDeson","Valor do ICMS Desonerado"},; //3-
                       {"0.00","vFCPUFDest","Valor Total ICMS FCP"},; //4-
                       {"0.00","vBCST","Base de Cálculo ICMS ST"},; //5-
                       {"0.00","vST","Valor ICMS Substituição"},; //6-
                       {"0.00","vProd","Valor Total dos Produtos"},; //7-
                       {"0.00","vFrete","Valor do Frete"},; //8-
                       {"0.00","vSeg","Valor do Seguro"},; //9-
                       {"0.00","vDesc","Valor Total dos Descontos"},; //10-
                       {"0.00","vII","Valor Total do II"},; //11-
                       {"0.00","vIPI","Valor Total do IPI"},; //12-
                       {"0.00","vPIS","Valor do PIS"},; //13-
                       {"0.00","vCOFINS","Valor da COFINS"},; //14-
                       {"0.00","vOutro","Outras Despesas Acessórias"},; //15-
                       {"0.00","vNF","Valor Total da NFe"}}) //16-
    
       //Conteudo elementos da Matriz = {VALOR_TAG,TAG,TAG_PAI,Elemento_Final_TAG_PAI,LABEL_HTML,TAM_LABEL}
    
       AADD(s_aTransp,{{"","modFrete","transp",17,"Modalidade do Frete",1},; //1-
                       {"","CNPJ","transporta",8,"CNPJ",0},; //2-
                       {"","CPF","",0,"CPF",0},; //3-
                       {"","xNome","",0,"Razão Social / Nome",0},; //4-
                       {"","IE","",0,"Inscrição Estadual",0},; //5-
                       {"","xEnder","",0,"Endereço Completo",0},; //6-
                       {"","xMun","",0,"Município",0},; //7-
                       {"","UF","",0,"UF",0},; //8-
                       {"",'placa','veicTransp',11,'Placa',0},; //9-
                       {"","UF","",0,"UF",0},; //10-
                       {"","RNTC","",0,"RNTC",0},; //11-
                       {"","qVol","vol",17,"Quantidade",0},; //12-
                       {"","esp","",0,"Espécie",0},; //13-
                       {"","marca","",0,"Marca dos Volumes",0},; //14-
                       {"","nVol","",0,"Volume",0},; //15-
                       {"","pesoL","",0,"Peso Líquido",0},; //16-
                       {"","pesoB","",0,"Peso Bruto",0}}) //17-
    
       //Conteudo elementos da Matriz = {VALOR_TAG,TAG}
    
       AADD(s_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-
    
    	// fazer o acesso
    	nTentativas := 0
    	REPEAT 
       && http://msdn.microsoft.com/en-us/library/aa752084%28v=vs.85%29.aspx
       oIE:=TOleAuto():New( "InternetExplorer.Application" )
    	*
       oIE:ToolBar   := .T.
       oIE:StatusBar := .T.
       oIE:MenuBar   := .F.
       oIE:Visible   := .F.
       *
       oIE:Navigate2( "https://www.nfe.fazenda.gov.br/portal/consultaRecaptcha.aspx?tipoConsulta=completa&tipoConteudo=XbSeqxE8pl8=" )
       while oIE:Busy
          SysWait(.2)
       end
       *
    	oActdo:=oIE:Document()
       oActdo:All:Item("ctl00$ContentPlaceHolder1$txtChaveAcessoCompleta",0):Value:=cChave
    	SysWait()
    	*
    	oActdo:All:Item("ctl00$ContentPlaceHolder1$btnConsultar"):Click()
    	SysWait()
    	*
       GetWndDefault():Minimize()
    	while oIE:Busy
          SysWait()
       end
       *
       cHtml:=oIE:Document():All(0):OuterHTML
    	while oIE:Busy
          SysWait()
       end
       TRY
          oIE:Quit()
       catch
       end
       Release oIE                                                                    	
    	*
       cHtml:=strtran(cHtml,'&')
       cHtml:=strtran(cHtml,'nbsp;')
    	*
    	nTentativas ++ 
       UNTIL At('Realizar consulta com captcha sonoro',  cHtml) == 0 .or. nTentativas > 4
       if At('Realizar consulta com captcha sonoro',  cHtml) > 0 .or. nTentativas > 4
    		MsgAlert("Atenção tente novamente!","Atenção")
    		return .f.
    	endif
    	*
    	If !Empty(cHtml)
          nIni  := At('<html',  cHtml)
          cParte:= SubStr(cHtml, nIni)
          nIni  := At('<div class="divLarguraMaxima" id="ctl00_ContentPlaceHolder1_divBotoesConsulta"',  cParte)
          cParte:= SubStr(cParte, 1, nIni - 1)
          nFim  := At('</form>', cParte)
          cFile := SubStr(cParte, nFim)
    		// memowrit('site.txt',cfile)
          nIni   := RAt('fixo-prod-serv-numero',cFile)
          c_span := SubStr(cFile, nIni)
          nIni   := AT('<span>',c_span)+6                  
          nTamTag:= AT('</span>',c_span)-nIni
          nTotPro:= Val(AllTrim(SubStr(c_span,nIni,nTamTag)))
    		*
    		//Conteudo elementos da Matriz = {VALOR_TAG,TAG,LABEL_HTML,TAM_LABEL}
          For p := 1 to nTotPro
              AADD(s_aDet,{{"","cProd","Código do Produto",0},; //1-
                           {"","cEAN","Código EAN Comercial",0},; //2-
                           {"","xProd","fixo-prod-serv-descricao",0},; //3-
                           {"","NCM","Código NCM",0},; //4-
                           {"","NVE","",0},; //5-
                           {"","CEST","Código CEST",0},; //6-
                           {"","EXTIPI","Código EX da TIPI",0},; //7-
                           {"","CFOP","CFOP",0},; //8-
                           {"","uCom","Unidade Comercial",0},; //9-
                           {"","qCom","Quantidade Comercial",0},; //10-
                           {"","vUnCom","Valor unitário de comercialização",0},; //11-
                           {"","vProd","fixo-prod-serv-vb",0},; //12-
                           {"","cEANTrib","Código EAN Tributável",0},; //13-
                           {"","uTrib","Unidade Tributável",0},; //14-
                           {"","qTrib","Quantidade Tributável",0},; //15-
                           {"","vUnTrib","Valor unitário de tributação",0},; //16-
                           {"","vFrete","Valor Total do Frete",0},; //17-
                           {"","vSeg","Valor do Seguro",0},; //18-
                           {"","vDesc","Valor do Desconto",0},; //19-
                           {"","vOutro","Outras Despesas Acessórias",0},; //20-
                           {"","indTot","Indicador de Composição do Valor Total da NF-e",1},; //21-
                           {"","nItemPed","Item do pedido de compra",0}}) //22-
    
             AADD(s_aMedicamentos, {{"","Lote",'Nro. do Lote', 0},; //1-
                                    {"","qLote",'Quantidade de produtos no lote', 0},; //2-
                                    {"","dFab",'Data de fabricaçã', 0},; //3-
                                    {"","dVal",'Data de validade', 0},; //4-
                                    {"","vPMC",'Preço Máximo Consumido', 0},; //5-
                                    {"","infAdProd",'Descrição', 0}}) //6-
    
             AADD(s_aICMS,{{"","orig","Origem da Mercadoria",1},; //1- ICMS Normal e ST
                           {"","CST","Tributação do ICMS",2},; //2-
                           {"","CSOSN","Código de Situação da Operação",3},; //3-
                           {"","modBC","Modalidade Definição da BC do ICMS",1},; //4-
                           {"","pRedBC","Percentual Redução de BC do ICMS",0},; //5-
                           {"","vBC","Base de Cálculo",0},; //6-
                           {"","pICMS","Alíquota",0},; //7-
                           {"","vICMS","Valor",0},; //8-
                           {"","vICMSDeson","",0},; //9-
                           {"","motDesICMS","",0},; //10-
                           {"","modBCST","Modalidade de determinação da BC do ICMS ST",1},; //11-
                           {"","pMVAST","Percentual Margem Valor Adicionado do ICMS ST",0},; //12-
                           {"","pRedBCST","Percentual da Redução de BC do ICMS ST",0},; //13-
                           {"","vBCST","Valor da BC do ICMS ST",0},; //14-
                           {"","pICMSST","Alíquota do imposto do ICMS ST",0},; //15-
                           {"","vICMSST","Valor do ICMS ST",0},; //16-
                           {"","vBCSTRet","Valor da BC do ICMS ST retido",0},; //17-
                           {"","vICMSSTRet","Valor do ICMS ST retido",0},; //18-
                           {"","vICMSOp","",0},; //19-
                           {"","pDif","",0},; //20-
                           {"","vICMSDif","",0},; //21-
                           {"","pCredSN","Alíquota aplicável de cálculo do crédito",0},; //22-
                           {"","vCredICMSSN","Valor crédito do ICMS",0}}) //23-
    
             AADD(s_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(s_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(s_aCOFINS,{{"","CST","CST",2},; //1-
                             {"","vBC","Base de Cálculo",0},; //2-vBC
                             {"","pCOFINS","Alíquota",0},; //3-
                             {"","vCOFINS","Valor",0},; //4-
                             {"","qBCProd","",0},; //5-
                             {"","vAliqProd","",0}}) //6-
    
         Next
    
         nIni   := At('<div class="GeralXslt"',cFile)
         cParte := SubStr(cFile, nIni)
         nIni   := At('<div class="GeralXslt" id="Emitente"',cParte)
         cParte := SubStr(cParte, 1, nIni - 1) //ide
         //? "ide", !Empty(cParte)
    	  GeraTag("ide", cParte, cFile, cChave)
    
         nIni   := At('<div class="GeralXslt" id="Emitente"',cFile)
         cParte := SubStr(cFile, nIni)
         nIni   := At('</div>',cParte)
         cParte := SubStr(cParte, 1, nIni - 1) //emit
    	  //? "emit", !Empty(cParte)
         GeraTag("emit", cParte, cFile, cChave)
    
         *nIni   := At('<div id="DestRem"',cFile)
         nIni   := At('<div class="GeralXslt" id="DestRem"',cFile)
         cParte := SubStr(cFile, nIni)
         nIni   := At('</div>',cParte)
         cParte := SubStr(cParte, 1, nIni - 1) //dest
    	  *? "dest", !Empty(cParte)
         GeraTag("dest",cParte, cFile, cChave)
    
         *nIni   := At('<td class="fixo-prod-serv-numero"><span>', cFile)
         nIni   := At('<tr><td class="fixo-prod-serv-numero"><span>', cFile)
         cParte := SubStr(cFile, nIni)
    	  *nIni   := At('</body></html>', cParte)
    	  nIni   := At('<div class="nft" id="aba_nft_10">', cParte)
         cParte := SubStr(cParte, 1, nIni - 1) //det
         //? "det", !Empty(cParte)
    	  GeraTag("det", cParte, cFile, cChave)
    
         nIni   := At('<legend class="titulo-aba">Totais</legend>',cFile)
         cParte := SubStr(cFile, nIni+42)
    	  *nIni   := At('<div id="aba_nft_5"',cParte)
         nIni   := At('<div class="nft" id="aba_nft_5"',cParte)
         cParte := SubStr(cParte, 1, nIni - 1) //totais
         //? "totais", !Empty(cParte)
    	  GeraTag("totais", cParte, cFile, cChave)
    
         nIni   := At('Dados do Transporte</legend>',cFile)
         cParte := SubStr(cFile, nIni+29)
         nIni   := At('<div class="GeralXslt" id="Cobranca"',cParte)
         cParte := SubStr(cParte, 1, nIni - 1) //transp
         //? "transp", !Empty(cParte)
         GeraTag("transp", cParte, cFile, cChave)
    
         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
            *? "cobr",  !Empty(cParte)
    		  GeraTag("cobr", cParte, cFile, cChave)
         endif
    
         GravaXML(cChave, hInput, oDialog, lSemParametros, cPasta)
    
       Else
          MsgInfo('Erro ao ler retorno da Consulta!', 'Atenção!')
          Return .f.
       EndIf
    
    Return .t.
    
    /***********************************************************/
    static Function DigitoChave(cCodigoChave)
    /*
    */
       Local cIndice := '4329876543298765432987654329876543298765432'
       Local nDigito, nContador, nSoma := 0
    
       For nContador := 1 to 43
           nSoma += (Val(SubStr(cCodigoChave, nContador, 1)) * Val(SubStr(cIndice, nContador, 1)))
       Next
    
       nDigito := (nSoma % 11)
    
       If nDigito == 0 .Or. nDigito == 1
          nDigito := 0
       Else
          nDigito := (11 - nDigito)
       EndIf
    
       If SubStr(cCodigoChave, 44, 1) != LTrim(Str(nDigito, 1))
         MsgStop('A chave informada é inválida!', 'Atenção!')
         Return .f.
       EndIf
    
    Return .t.
    
    /********************************************************************/
    static Function Troca_Acento( cTexto )
    /*
    */
    
       cTexto := StrTran( cTexto, "&#243;", "ó" )
       cTexto := StrTran( cTexto, "&#225;", "á" )
       cTexto := StrTran( cTexto, "&#233;", "é" )
    
    Return cTexto
    
    /*******************************************************************/
    static Function GeraTag( _tag, cParte, cFile, cChave )
    /*
    */
       Local i, cPar_, c_Tag, nTamTag, nIni, c_span, cPar1_, nFim
    
       if _tag=="ide"
          cPar_:= StrTran(cFile,Chr(13)+Chr(10),"")
          cPar_:= StrTran(cPar_,Chr(160),"")
          nIni := At('<legend>Informações Complementares de Interesse do Contribuinte</legend>', cPar_)
    		
          if nIni>0
             c_span    := SubStr(cPar_, nIni+70)
             nIni      := AT('<div style="word-wrap: break-word">',c_span)
             c_span    := SubStr(c_span, nIni+35)
             nIni      := AT('</div></span>',c_span)
             s_cinfCpl := alltrim(SubStr(c_span,1,nIni-1))
          endif
    
          cPar_      := StrTran(cParte,Chr(13)+Chr(10),"")
          cPar_      := StrTran(cPar_,Chr(160),"")
    
          nIni       := AT('Situação Atual:',cPar_)
          c_span     := SubStr(cPar_, nIni+15)
          nIni       := AT('(Ambiente de autorização:',c_span)
          s_cxMotivo := Alltrim(SubStr(c_span,1,nIni-1))
    
          if "AUTORIZADA" $ s_cxMotivo
             s_ccStat   := "100"
             s_cxMotivo := "Autorizado o uso da NF-e"
          endif
    
          if "CANCELADA" $ s_cxMotivo
             s_ccStat   := "101"
             s_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
          s_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
          s_cDhRecbto := alltrim(SubStr(c_span,1,nTamTag))
          s_cDhRecbto := SubStr(s_cDhRecbto,7,4)+"-"+SubStr(s_cDhRecbto,4,2)+"-"+left(s_cDhRecbto,2)+"T"+Right(s_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
          s_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
          s_cVersao   := alltrim(SubStr(c_span,nIni,nTamTag))
    
          For i := 1 to Len(s_aIde[1])
    
              cPar_:= cParte
    
              if i == 12
                 cPar_:= cFile
              endif
    
              if i == 13
                 cPar_:= cFile
              endif
    
              nIni   := AT(s_aIde[1,i,5],cPar_)
              c_span := SubStr(cPar_, nIni)
    
              if i != 16
                 nIni     := AT('<span>', c_span) + 6
                 nTamTag  := AT('</span>', c_span) - nIni
                 c_tag    := alltrim(SubStr(c_span, nIni, nTamTag))
              else
                 nIni     := AT('</legend>', c_span)
                 c_tag    := alltrim(SubStr(c_span, 1, nIni - 1))
                 if AT('produção', c_tag) > 0
                    c_tag := "1"
                 else
                    c_tag := "2"
                 endif
                 s_cTpAmb := c_tag
              endif
    
              if i == 2
                 c_tag := SubStr(cChave, 36, 8)
                 //c_tag:= StrZero(Val(c_tag), 9)
              endif
    
              if i == 8 .or. i == 9
                 if !Empt(c_tag)
                    c_tag := SubStr(c_tag,7,4)+"-"+SubStr(c_tag,4,2)+"-"+left(c_tag,2)+"T"+SubStr(c_tag,12)
                 endif
              endif
    
              if i == 15
                 c_tag := right(c_tag,1)
              endif
    
              if s_aIde[1,i,6]!=0
                 if s_aIde[1,i,6]>0
                    c_tag := left(c_tag,s_aIde[1,i,6])
                 else
                    c_tag := SubStr(c_tag,Abs(s_aIde[1,i,6])+1)
                 endif
              endif
    
              s_aIde[1,i,1] := c_tag
    
          Next
       endif
    
       if _tag == "emit"
    
          For i := 1 to Len(s_aEmit[1])
    
              cPar_ := StrTran(cParte,Chr(13)+Chr(10),"")
              cPar_ := StrTran(cPar_,Chr(160),"")
              nIni  := AT(s_aEmit[1,i,5],cPar_)
    
              if nIni > 0
                 c_span  := SubStr(cPar_, nIni)
                 nIni    := AT('<span>',c_span)+6
                 nTamTag := AT('</span>',c_span)-nIni
                 c_tag   := Alltrim(SubStr(c_span,nIni,nTamTag))
    
                 if i >= 1 .and. i <= 2
                    c_tag := StrTran(c_tag,".","")
                    c_tag := StrTran(c_tag,"/","")
                    c_tag := StrTran(c_tag,"-","")
                 endif
    
                 if i >= 5 .and. i <= 7
    
                    nIni := AT(",",c_tag)
    
                    if i == 5
                       c_tag := Left(c_tag,nIni-1)
                    elseif i == 6
                       c_tag := AllTrim(SubStr(c_tag, nIni + 1))
                       nIni  := AT(" ", c_tag)
                       if nIni > 0
                          c_tag := Left(c_tag, nIni - 1)
                       endif
                    else
                       c_tag := AllTrim(SubStr(c_tag, nIni + 1))
                       nIni  := AT(" ", c_tag)
                       if nIni > 0
                          c_tag := alltrim(SubStr(c_tag, nIni + 1))
                       else
                          c_tag := ""
                       endif
                    endif
                 endif
    
                 if i == 12
                    c_tag := StrTran(c_tag,"-","")
                 endif
    
                 if i==15
                    c_tag := StrTran(c_tag,"(","")
                    c_tag := StrTran(c_tag,")","")
                    c_tag := StrTran(c_tag,"-","")
                 endif
    
                 if s_aEmit[1, i, 6] != 0
                    if s_aEmit[1, i, 6] > 0
                       c_tag := left(c_tag,s_aEmit[1, i, 6])
                    else
                       c_tag := alltrim(SubStr(c_tag, Abs(s_aEmit[1, i, 6]) + 1))
                       c_tag := alltrim(StrTran(c_tag, "-", ""))
                    endif
                 endif
                 s_aEmit[1, i, 1] := c_tag
              endif
          Next
    
       endif
    
       if _tag == "dest"
          For i := 1 to Len(s_aDest[1])
              cPar_ := StrTran(cParte, Chr(13) + Chr(10), "")
              cPar_ := StrTran(cPar_, Chr(160), "")
              nIni  := AT(s_aDest[1, i, 5], cPar_)
              if nIni > 0
                 c_span  := SubStr(cPar_, nIni)
                 nIni    := AT('<span>',c_span)+6
                 nTamTag := AT('</span>',c_span)-nIni
                 c_tag   := AllTrim(SubStr(c_span, nIni, nTamTag))
                 if i >= 1 .and. i <= 2
                    c_tag := StrTran(c_tag, ".", "")
                    c_tag := StrTran(c_tag, "/", "")
                    c_tag := StrTran(c_tag, "-", "")
                 endif
                 If i >= 5 .and. i <= 7
                    nIni := AT(",", c_tag)
                    if i == 5
                       c_tag := Left(c_tag,nIni-1)
                    elseif i == 6
                       c_tag := AllTrim(SubStr(c_tag, nIni + 1))
                       nIni  := AT(" ", c_tag)
                       if nIni > 0
                          c_tag := Left(c_tag, nIni - 1)
                       endif
                    else
                       c_tag := AllTrim(SubStr(c_tag, nIni + 1))
                       nIni  := AT(" ", c_tag)
                       if nIni > 0
                          c_tag := alltrim(SubStr(c_tag, nIni + 1))
                       else
                          c_tag := ""
                       endif
                    endif
                 EndIf
                 if i == 12
                    c_tag := StrTran(c_tag, "-", "")
                 endif
                 if i == 15
                    c_tag := StrTran(c_tag, "(", "")
                    c_tag := StrTran(c_tag, ")", "")
                    c_tag := StrTran(c_tag, "-", "")
                 endif
                 if i==16
                    c_tag := alltrim(Str(Val(c_tag)))
                 endif
                 if s_aDest[1, i, 6] != 0
                    if s_aDest[1, i, 6] > 0
                       c_tag := left(c_tag, s_aDest[1, i, 6])
                    else
                       c_tag := alltrim(SubStr(c_tag, Abs(s_aDest[1,i,6]) + 1))
                       c_tag := alltrim(StrTran(c_tag, "-", ""))
                    endif
                 endif
                 s_aDest[1, i, 1] := c_tag
              endif
          Next
    
       endif
    	
       if _tag == "det"
    		cPar_ := StrTran(cParte, Chr(13) + Chr(10), "")
    		cPar_ := StrTran(cPar_, Chr(160), "")
    		For p := 1 to Len(s_aDet)
    			 For i := 1 to Len(s_aDet[p])
    				  nIni := At(s_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 s_aDet[p, i, 4] != 0
                        if s_aDet[p, i, 4] > 0
                           c_tag := left(c_tag, s_aDet[p, i, 4])
                        else
                           c_tag := alltrim(SubStr(c_tag, Abs(s_aDet[p, i, 4]) + 1))
                           c_tag := alltrim(StrTran(c_tag, "-", ""))
                        endif
                     endif
                     If i != 3
                        c_tag := StrTran(c_tag, ".", "")
                        c_tag := StrTran(c_tag, ",", ".")
                     endIf
                     s_aDet[p, i, 1] := c_tag
                  endif
              Next
    			 
              For i := 1 To Len(s_aICMS[p])
                  nIni := At(s_aICMS[p, i, 3], cPar_)
                  if nIni > 0
                     c_span  := SubStr(cPar_, nIni)
                     nIni    := At('<span>', c_span) + 6
                     nTamTag := At('</span>', c_span) - nIni
                     c_tag   := AllTrim(SubStr(c_span, nIni, nTamTag))
                     If s_aICMS[p, i, 4] != 0
                        if s_aICMS[p, i, 4] > 0
                           c_tag := Left(c_tag, s_aICMS[p, i, 4])
                        else
                           c_tag := AllTrim(SubStr(c_tag, Abs(s_aICMS[p, i, 4]) + 1))
                           c_tag := AllTrim(StrTran(c_tag, "-", ""))
                        endif
                     endif
                     c_tag            := StrTran(c_tag, ".", "")
                     c_tag            := StrTran(c_tag, ",", ".")
                     s_aICMS[p, i, 1] := c_tag
                  endif
              Next
    
              nIni := AT('<legend>Imposto Sobre Produtos Industrializados</legend>', cPar_)
    
              if nIni > 0
                 cPar_ := SubStr(cPar_, nIni)
                 For i := 1 To Len(s_aIPI[p])
                     nIni := AT(s_aIPI[p, i, 3], cPar_)
                     if nIni > 0
                        c_span  := SubStr(cPar_, nIni)
                        nIni    := AT('<span>', c_span) + 6
                        nTamTag := AT('</span>', c_span) - nIni
                        c_tag   := AllTrim(SubStr(c_span, nIni, nTamTag))
                        if s_aIPI[p, i, 4] != 0
                           if s_aIPI[p, i, 4] > 0
                              c_tag := Left(c_tag, s_aIPI[p, i, 4])
                           else
                              c_tag := Alltrim(SubStr(c_tag, Abs(s_aIPI[p, i, 4]) + 1))
                              c_tag := Alltrim(StrTran(c_tag, "-", ""))
                           endif
                        endif
                        c_tag           := StrTran(c_tag, ".", "")
                        c_tag           := StrTran(c_tag, ",", ".")
                        s_aIPI[p, i, 1] := c_tag
                     endif
                 Next
              endif
    
              nIni := At('<legend class="toggle">PIS</legend>', cPar_)
    
              if nIni > 0
                 cPar_ := SubStr(cPar_, nIni)
                 For i := 1 to Len(s_aPIS[p])
    	  		     	  IF P == Len(s_aPIS)
    					  	  nFim  := LEN(cPar_)
    					  ELSE	  
    	                 nFim  := At('<td class="fixo-prod-serv-numero"><span>', cPar_)
    	              ENDIF   
                     cPar1_:= SubStr(cPar_, 1, nFim)
                     nIni  := AT(s_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 s_aPIS[p,i,4] != 0
                           if s_aPIS[p,i,4] > 0
                              c_tag := Left(c_tag,s_aPIS[p,i,4])
                           else
                              c_tag := AllTrim(SubStr(c_tag, Abs(s_aPIS[p, i, 4]) + 1))
                              c_tag := AllTrim(StrTran(c_tag, "-", ""))
                           endif
                        endif
                        c_tag           := StrTran(c_tag, ".", "")
                        c_tag           := StrTran(c_tag, ",", ".")
                        s_aPIS[p, i, 1] := c_tag
                     endif
                 Next
              endif
    			 *
    			 nIni := AT('<legend class="toggle">COFINS</legend>', cPar_)
    			 
    			 if nIni > 0
                 cPar_ := SubStr(cPar_, nIni)
                 For i := 1 to Len(s_aCOFINS[p])
    	  		     	  IF P == Len(s_aCOFINS)
    					  	  nFim  := LEN(cPar_)
    					  ELSE	  
    					  	  nFim  := At('<td class="fixo-prod-serv-numero">', cPar_)
    					  ENDIF	
    	  		    	  cPar1_:= SubStr(cPar_, 1, nFim)
    					  nIni  := AT(s_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 s_aCOFINS[p, i, 4] != 0
                           if s_aCOFINS[p, i, 4] > 0
                              c_tag := left(c_tag, s_aCOFINS[p, i, 4])
                           else
                              c_tag := alltrim(SubStr(c_tag, Abs(s_aCOFINS[p, i, 4]) + 1))
                              c_tag := alltrim(StrTran(c_tag, "-", ""))
                           endif
                        endif
                        c_tag              := StrTran(c_tag, ".", "")
                        c_tag              := StrTran(c_tag, ",", ".")
                        s_aCOFINS[p, i, 1] := c_tag
                     endif
                 Next
              endif
    			 
              nIni := At('<legend>Detalhamento específico dos medicamentos</legend>', cPar_)
    
              if nIni > 0
                 cPar_ := SubStr(cPar_, nIni)
                 For i := 1 to Len(s_aMedicamentos[p])
                     nIni := AT(s_aMedicamentos[p, i, 3], cPar_)
                     if nIni > 0
                        c_span  := SubStr(cPar_, nIni)
                        nIni    := At('<span>', c_span) + 6
                        nTamTag := At('</span>', c_span) - nIni
                        c_tag   := AllTrim(SubStr(c_span, nIni, nTamTag))
                        if s_aMedicamentos[p,i,4] != 0
                           if s_aMedicamentos[p,i,4] > 0
                              c_tag := Left(c_tag,s_aMedicamentos[p,i,4])
                           else
                              c_tag := AllTrim(SubStr(c_tag, Abs(s_aMedicamentos[p, i, 4]) + 1))
                              c_tag := AllTrim(StrTran(c_tag, "-", ""))
                           endif
                        endif
                        If i != 6
                           c_tag := StrTran(c_tag, ".", "")
                           c_tag := StrTran(c_tag, ",", ".")
                        endif
                        if StrZero(i, 2) $ "-03-04"
                           c_tag:=SubStr(c_tag,7,4)+"-"+SubStr(c_tag,4,2)+"-"+left(c_tag,2)
                        endif
                        s_aMedicamentos[p, i, 1] := c_tag
                     endif
                 Next
              endif
    
              nIni  := At('<td class="fixo-prod-serv-numero"><span>', cPar_)
              cPar_ := SubStr(cPar_, nIni)
    
          Next
       endif
    
       if _tag=="totais"
          For i := 1 to Len(s_aTotais[1])
              cPar_ := StrTran(cParte,Chr(13)+Chr(10),"")
              cPar_ := StrTran(cPar_,Chr(160),"")
              nIni  := AT(s_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,",",".")
                 s_aTotais[1,i,1] := c_tag
              endif
          Next
       endif
    
       if _tag=="transp"
          For i := 1 to Len(s_aTransp[1])
              cPar_ := StrTran(cParte,Chr(13)+Chr(10),"")
              cPar_ := StrTran(cPar_,Chr(160),"")
              nIni  := AT(s_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 s_aTransp[1,i,6] != 0
                    if s_aTransp[1,i,6]>0
                       c_tag := left(c_tag,s_aTransp[1,i,6])
                    else
                       c_tag := alltrim(SubStr(c_tag,Abs(s_aTransp[1,i,6])+1))
                       c_tag := alltrim(StrTran(c_tag,"-",""))
                    endif
                 endif
                 s_aTransp[1,i,1] := c_tag
              endif
          Next
       endif
    
       if _tag == "cobr"
          cPar_ := StrTran(cParte,Chr(13)+Chr(10),"")
          cPar_ := StrTran(cPar_,Chr(160),"")
          For i := 1 to Len(s_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
                 s_aCobr[1,i,1] := c_tag
              else
                 Exit
              endif
          Next
       endif
    
    return Nil
    
    /**************************************************************************************************/
    static function GravaXML(cChave, hInput, oDialog, lSemParametros, cPasta)
    /*
    */
       Local i, p, lTemTag, cTagPai, nFimTagPai, nIni, cTag, nArqHandle, cArqXml, cTag_
       Local cXML :='<?xml version="1.0" encoding="UTF-8"?><nfeProc versao="'+s_cVersao+'" xmlns="http://www.portalfiscal.inf.br/nfe"><NFe xmlns="http://www.portalfiscal.inf.br/nfe"><infNFe versao="'+s_cVersao+'" Id="NFe'+cChave+'">'
    
       cTagPai    := ""
       nFimTagPai := 0
    
       For i := 1 to Len(s_aIde[1])
           if !Empt(s_aIde[1,i,3])
              nFimTagPai := s_aIde[1,i,4]
              cTagPai    += "|"+StrZero(nFimTagPai,2)+s_aIde[1,i,3]
              cXML       += '<'+s_aIde[1,i,3]+'>'
           endif
           if !Empty(s_aIde[1,i,1])
              cXML += '<'+s_aIde[1,i,2]+'>'+s_aIde[1,i,1]+'</'+s_aIde[1,i,2]+'>'
           endif
           if i == nFimTagPai
              nIni    := RAT("|",cTagPai)
              cTag    := Substr(cTagPai,nIni+1)
              cXML    += '</'+SubStr(cTag,3)+'>'
              cTagPai := SubStr(cTagPai,1,nIni-1)
              if nIni > 1
                 nIni       := RAT("|",cTagPai)
                 nFimTagPai := Val(Substr(cTagPai,nIni+1,2))
              else
                 nFimTagPai := 0
              endif
           endif
       Next
    
       For i := 1 to Len(s_aEmit[1])
           if !Empty(s_aEmit[1,i,3])
              nFimTagPai := s_aEmit[1,i,4]
              cTagPai    += "|"+StrZero(nFimTagPai,2)+s_aEmit[1,i,3]
              cXML       += '<'+s_aEmit[1,i,3]+'>'
           endif
           if !Empty(s_aEmit[1,i,1])
              cXML += '<'+s_aEmit[1,i,2]+'>'+s_aEmit[1,i,1]+'</'+s_aEmit[1,i,2]+'>'
           endif
           if i == nFimTagPai
              nIni    := RAT("|",cTagPai)
              cTag    := Substr(cTagPai,nIni+1)
              cXML    += '</'+SubStr(cTag,3)+'>'
              cTagPai := SubStr(cTagPai,1,nIni-1)
              if nIni > 1
                 nIni       := RAT("|",cTagPai)
                 nFimTagPai := Val(Substr(cTagPai,nIni+1,2))
              else
                 nFimTagPai := 0
              endif
           endif
       Next
    
       For i := 1 to Len(s_aDest[1])
           if !Empt(s_aDest[1,i,3])
              nFimTagPai := s_aDest[1,i,4]
              cTagPai    += "|"+StrZero(nFimTagPai,2)+s_aDest[1,i,3]
              cXML       += '<'+s_aDest[1,i,3]+'>'
           endif
           if !Empt(s_aDest[1,i,1])
              cXML += '<'+s_aDest[1,i,2]+'>'+s_aDest[1,i,1]+'</'+s_aDest[1,i,2]+'>'
           endif
           if i == nFimTagPai
              nIni    := RAT("|",cTagPai)
              cTag    := Substr(cTagPai,nIni+1)
              cXML    += '</'+SubStr(cTag,3)+'>'
              cTagPai := SubStr(cTagPai,1,nIni-1)
              if nIni > 1
                 nIni       := RAT("|",cTagPai)
                 nFimTagPai := Val(Substr(cTagPai,nIni+1,2))
              else
                 nFimTagPai := 0
              endif
           endif
       Next
    	
    	For p := 1 to Len(s_aDet)
           cXML += '<det nItem="'+alltrim(Str(p))+'"><prod>'
           For i := 1 to Len(s_aDet[p])
               if !Empt(s_aDet[p,i,1])
                  cXML += '<'+s_aDet[p,i,2]+'>'+s_aDet[p,i,1]+'</'+s_aDet[p,i,2]+'>'
               endif
           Next
    
           lTemTag := .F.
           For i := 1 to Len(s_aMedicamentos[p])
               if i == 1
                  if !Empty(s_aMedicamentos[p,i,1])
                     cXML    += '<med><nLote>' + s_aMedicamentos[p,i,1] + '</nLote>'
                     lTemTag := .t.
                  endif
               Else
                  if !Empty(s_aMedicamentos[p,i,1])
                     If i == 6
                        s_cDiscAdicional := '<'+s_aMedicamentos[p,i,2]+'>'+ s_aMedicamentos[p,i,1] + '</'+s_aMedicamentos[p,i,2]+'>'
                     Else
                        cXML             += '<'+s_aMedicamentos[p,i,2]+'>'+ s_aMedicamentos[p,i,1] + '</'+s_aMedicamentos[p,i,2]+'>'
                     Endif
                  endif
               EndIf
           Next
    
           if lTemTag
              cXML += '</med>'
           endif
    
           cXML  += '</prod><imposto><ICMS>'
           cTag_ := 'ICMS'
    
           For i := 1 to Len(s_aICMS[p])
               if i == 1
                  if !Empty(s_aICMS[p, 2, 1])
                     cTag_ += s_aICMS[p, 2, 1]
                  else
                     cTag_ += 'SN' + s_aICMS[p, 3, 1]
                  endif
                  cXML += '<' + cTag_ + '>'
               endif
               if !Empty(s_aICMS[p, i, 1])
                  If s_aICMS[p, 2, 1] == '00'
                     If StrZero(i, 2) $ "-01-02-04-06-07-08"
                        cXML += '<' + s_aICMS[p, i, 2] + '>' + s_aICMS[p, i, 1] + '</' + s_aICMS[p, i, 2] + '>'
                     EndIf
                  ElseIf s_aICMS[p, 2, 1] == '10'
                     If StrZero(i, 2) $ "-01-02-04-06-07-08-11-12-13-14-15-16"
                        cXml += '<' + s_aICMS[p, i, 2] + '>' + s_aICMS[p, i, 1] + '</' + s_aICMS[p, i, 2] + '>'
                     EndIf
                  ElseIf s_aICMS[p, 2, 1] == '20'
                     If StrZero(i, 2) $ "-01-02-04-05-06-07-08-09-10"
                        cXml += '<' + s_aICMS[p, i, 2] + '>' + s_aICMS[p, i, 1] + '</' + s_aICMS[p, i, 2] + '>'
                     EndIf
                  ElseIf s_aICMS[p, 2, 1] == '30'
                     If StrZero(i, 2) $ "-01-02-11-12-13-14-15-16-09-10"
                        cXml += '<' + s_aICMS[p, i, 2] + '>' + s_aICMS[p, i, 1] + '</' + s_aICMS[p, i, 2] + '>'
                     EndIf
                  ElseIf s_aICMS[p, 2, 1] == '40' .or. s_aICMS[p, 2, 1] == '41' .Or. s_aICMS[p, 2, 1] == '50'
                     If StrZero(i, 2) $ "-01-02-09-10"
                        cXml += '<' + s_aICMS[p, i, 2] + '>' + s_aICMS[p, i, 1] + '</' + s_aICMS[p, i, 2] + '>'
                     EndIf
                  ElseIf s_aICMS[p, 2, 1] == '51'
                     If StrZero(i, 2) $ "-01-02-04-05-06-07-08-19-20-21"
                        cXml += '<' + s_aICMS[p, i, 2] + '>' + s_aICMS[p, i, 1] + '</' + s_aICMS[p, i, 2] + '>'
                     EndIf
                  ElseIf s_aICMS[p, 2, 1] == '60'
                     If StrZero(i, 2) $ "-01-02-17-18"
                        cXml += '<' + s_aICMS[p, i, 2] + '>' + s_aICMS[p, i, 1] + '</' + s_aICMS[p, i, 2] + '>'
                     EndIf
                  ElseIf s_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 += '<' + s_aICMS[p, i, 2] + '>' + s_aICMS[p, i, 1] + '</' + s_aICMS[p, i, 2] + '>'
                     EndIf
                  ElseIf s_aICMS[p, 2, 1] == '90'
                     If StrZero(i, 2) $ "-01-02-04-05-06-07-08-11-12-13-14-15-16"
                        cXml += '<' + s_aICMS[p, i, 2] + '>' + s_aICMS[p, i, 1] + '</' + s_aICMS[p, i, 2] + '>'
                     EndIf
                  Else
                     cXml += '<' + s_aICMS[p, i, 2] + '>' + s_aICMS[p, i, 1] + '</' + s_aICMS[p, i, 2] + '>'
                  EndIf
               endif
           Next
    
           cXML    += '</'+cTag_+'></ICMS>'
           lTemTag := .F.
    
           For i := 1 to Len(s_aIPI[p])
               if i == 1
                  if !Empty(s_aIPI[p,i,1])
                     cXML    += '<IPI><cEnq>' + s_aIPI[p,i,1] + '</cEnq><IPITrib>'
                     lTemTag := .T.
                  endif
               Else
                  if !Empty(s_aIPI[p,i,1])
                     cXML += '<'+s_aIPI[p,i,2]+'>'+ s_aIPI[p,i,1] + '</'+s_aIPI[p,i,2]+'>'
                  endif
               EndIf
           Next
    
           if lTemTag
              cXML += '</IPITrib></IPI>'
           endif
    
           lTemTag := .F.
    
           For i:= 1 to Len(s_aPIS[p])
               if i == 1
                  if !Empty(s_aPIS[p, i, 1])
                     If Val(s_aPIS[p, 1, 1]) >= 1 .And. Val(s_aPIS[p, 1, 1]) <= 2
                        cXML += '<PIS><PISAliq>'
                     ElseIf Val(s_aPIS[p, 1, 1]) == 3
                        cXML += '<PIS><PISQte>'
                     ElseIf Val(s_aPIS[p, 1, 1]) >= 4 .And. Val(s_aPIS[p, 1, 1]) <= 9
                        cXML += '<PIS><PISNT>'
                     ElseIf Val(s_aPIS[p, 1, 1]) >= 49 .And. Val(s_aPIS[p, 1, 1]) <= 99
                        cXML += '<PIS><PISOutr>'
                     EndIf
                     lTemTag := .T.
                  endif
               endif
               if !Empty(s_aPIS[p, i, 1])
                  cXML += '<' + s_aPIS[p,i,2] + '>' + s_aPIS[p,i,1] + '</' + s_aPIS[p,i,2] + '>'
               endif
           Next
    
           if lTemTag
              If Val(s_aPIS[p, 1, 1]) >= 1 .And. Val(s_aPIS[p, 1, 1]) <= 2
                 cXML += '</PISAliq></PIS>'
              ElseIf Val(s_aPIS[p, 1, 1]) == 3
                 cXML += '</PISQte></PIS>'
              ElseIf Val(s_aPIS[p, 1, 1]) >= 4 .And. Val(s_aPIS[p, 1, 1]) <= 9
                 cXML += '</PISNT></PIS>'
              ElseIf Val(s_aPIS[p, 1, 1]) >= 49 .And. Val(s_aPIS[p, 1, 1]) <= 99
                 cXML+= '</PISOutr></PIS>'
              EndIf
           endif
    
           lTemTag := .F.
    
           For i := 1 to Len(s_aCOFINS[p])
               if i == 1
                  if !Empty(s_aCOFINS[p,i,1])
                     If Val(s_aPIS[p, 1, 1]) >= 1 .And. Val(s_aPIS[p, 1, 1]) <= 2
                        cXML += '<COFINS><COFINSAliq>'
                     ElseIf Val(s_aPIS[p, 1, 1]) == 3
                        cXML += '<COFINS><COFINSQte>'
                     ElseIf Val(s_aPIS[p, 1, 1]) >= 4 .And. Val(s_aPIS[p, 1, 1]) <= 9
                        cXML += '<COFINS><COFINSNT>'
                     ElseIf Val(s_aPIS[p, 1, 1]) >= 49 .And. Val(s_aPIS[p, 1, 1]) <= 99
                        cXML += '<COFINS><COFINSOutr>'
                     EndIf
                     lTemTag := .T.
                  endif
               endif
               if !Empty(s_aCOFINS[p,i,1])
                  cXML += '<' + s_aCOFINS[p, i, 2] + '>' + s_aCOFINS[p, i, 1] + '</' + s_aCOFINS[p, i, 2] + '>'
               endif
           Next
    
           if lTemTag
              If Val(s_aPIS[p, 1, 1]) >= 1 .And. Val(s_aPIS[p, 1, 1]) <= 2
                 cXML += '</COFINSAliq></COFINS>'
              ElseIf Val(s_aPIS[p, 1, 1]) == 3
                 cXML += '</COFINSQte></COFINS>'
              ElseIf Val(s_aPIS[p, 1, 1]) >= 4 .And. Val(s_aPIS[p, 1, 1]) <= 9
                 cXML += '</COFINSNT></COFINS>'
              ElseIf Val(s_aPIS[p, 1, 1]) >= 49 .And. Val(s_aPIS[p, 1, 1]) <= 99
                 cXML+= '</COFINSOutr></COFINS>'
              EndIf
           endif
           cXML += '</imposto>'
           If !Empty(s_cDiscAdicional)
              cXml += s_cDiscAdicional
           EndIf
           cXML += '</det>'
       Next
    
       cXML += '<total><ICMSTot>'
    
       For i := 1 to Len(s_aTotais[1])
           if !Empty(s_aTotais[1,i,1])
              cXML+='<'+s_aTotais[1,i,2]+'>'+s_aTotais[1,i,1]+'</'+s_aTotais[1,i,2]+'>'
           endif
       Next
    
       cXML += '</ICMSTot></total>'
    
       For i := 1 to Len(s_aTransp[1])
           if !Empty(s_aTransp[1,i,3])
              nFimTagPai := s_aTransp[1,i,4]
              cTagPai    += "|"+StrZero(nFimTagPai,2)+s_aTransp[1,i,3]
              cXML       += '<'+s_aTransp[1,i,3]+'>'
           endif
           if !Empty(s_aTransp[1,i,1])
              cXML += '<'+s_aTransp[1,i,2]+'>'+s_aTransp[1,i,1]+'</'+s_aTransp[1,i,2]+'>'
           endif
           if i == nFimTagPai
              nIni    := RAT("|",cTagPai)
              cTag    := Substr(cTagPai,nIni+1)
              cXML    += '</'+SubStr(cTag,3)+'>'
              cTagPai := SubStr(cTagPai,1,nIni-1)
              if nIni > 1
                 nIni       := RAT("|",cTagPai)
                 nFimTagPai := Val(Substr(cTagPai,nIni+1,2))
              else
                 nFimTagPai := 0
              endif
              if SubStr(cTag,3) == "vol"
                 cXML += '</transp>'
              endif
           endif
       Next
    
       if !Empty(s_aCobr[1,1,1])
          cXML += '<cobr>'
          For i := 1 to Len(s_aCobr[1])
              if !Empty(s_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 += '<'+s_aCobr[1,i,2]+'>'+s_aCobr[1,i,1]+'</'+s_aCobr[1,i,2]+'>'
              endif
          Next
          cXML += '</dup></cobr>'
       endif
    
       if !Empty(s_cinfCpl) .or. !Empty(s_cInfAdFisco)
    //      cXML += '<infAdic>'
    //      if !Empty(s_cInfAdFisco)
    //         cXML += '<infAdFisco>'+s_cInfAdFisco+'</infAdFisco>'
    //      endif
    //      if !Empty(s_cinfCpl)
    //         cXML += '<infCpl>'+s_cinfCpl+'</infCpl>'
    //      endif
    //      cXML += '</infAdic>'
       endif
    
       cXML       += '</infNFe>'
       cXML       += '<Signature xmlns="http://www.w3.org/2000/09/xmldsig#"><SignedInfo><CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/><SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" />'
       cXML       += '<Reference URI="#NFe'+cChave+'">'
       cXML       += '<Transforms><Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" /><Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" /></Transforms><DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />'
       cXML       += '<DigestValue>'+s_cDigVal+'</DigestValue></Reference></SignedInfo><SignatureValue></SignatureValue><KeyInfo></KeyInfo></Signature></NFe>'
       cXML       += '<protNFe versao="'+s_cVersao+'"><infProt>'
       cXML       += '<tpAmb>'+s_cTpAmb+'</tpAmb><verAplic>'+s_cVerAplic+'</verAplic><chNFe>'+cChave+'</chNFe><dhRecbto>'+s_cDhRecbto+'</dhRecbto>'
       cXML       += '<nProt>'+s_cnProt+'</nProt><digVal>'+s_cDigVal+'</digVal><cStat>'+s_ccStat+'</cStat><xMotivo>'+s_cxMotivo+'</xMotivo>'
       cXML       += '</infProt></protNFe></nfeProc>'
    
       cArqXml    := cPasta + '\' + cChave + '.xml'
       nArqHandle := FCreate(cArqXml, 0 )
    
       FWrite(nArqHandle,cXML)
       FClose(nArqHandle)
    
       *MsgInfo( 'Download realizado com sucesso! Arquivo gerado:' + CRLF + cArqXml, 'NF-e ')
    
    
    return nil

     

     

     

    Certo amigo te agradeço, vou dar uma analisada aqui no código, qq dúvida te chamo.

     

  4.  

    A minha tb parou, mas ai vc manda o e-mail pra ele como eu fiz q ele te manda a q funciona provavelmente com o texto acima avisando da descontinuidade.

    Vc poderia me encaminhar este e-mail recebido ? Não tenho o contato do Fernando.

    amadorjosequeiroz@gmail.com

  5.  

    ATENÇÃO PESSOAL Q USA A FSIST OU PENSA EM ADQUIRIR... ELA FOI DESCONTINUADA CONFORME TRECHO ABAIXO DO CRIADOR.

    A ultima versão disponibilizada pelo mesmo contempla as mudanças, PORÉM ele não dara mais continuidade e passou algumas informações importantes.

    Não estou mais trabalhando com desenvolvimento ou DLLs, mais tenho a última versão da DLL que ainda funciona.

    Estou lhe fornecendo essa última DLL sem custo, com as seguintes condições:

    • Não é possível prever por quanto tempo a página https://www.nfe.fazenda.gov.br/portal/consultaResumoCompletaAntiga.aspx?tipoConsulta=completa&tipoConteudo=XbSeqxE8pl8= continuará funcionando do jeito que está, por isso não é possível prever por quanto tempo a DLL continuará funcionando.
    • 100% de certeza que um dia o portal da fazenda irá mudar, então leve em consideração que a DLL depende completamente do portal da fazenda.
    • Caso não seja desenvolvedor, mude assim que possível para uma aplicação que utilize o webservice oficial da fazenda como (trecho removido não nos interessa)
    • Caso seja desenvolver, mude seu software para utilizar o webservice da fazenda, a lista de webservice e a documentação oficial está emhttps://www.nfe.fazenda.gov.br/portal/webServices.aspx?tipoConteudo=Wak0FwB7dKs=  https://www.nfe.fazenda.gov.br/portal/listaConteudo.aspx?tipoConteudo=33ol5hhSYZk=
    • Não terei como dá nenhum tipo de suporte seja ele gratuito ou pago.
    • Não forneço e não vendo código fonte.
    • Não forneço e não vendo nenhum tipo de passo a passo ou tutorial de como programar DLLs, fazer integrações, etc...
    • Como a integração com o portal da fazenda é um trabalho interminável, talvez você ache justo pagar por um serviço que faz esse trabalho por você si possível. O serviço do qual mim refiro é do Roveri http://www.roveri.inf.br/site/ eu já testei a algum tempo atrás e funcionou, além de ter outras opções de consultas. A solução do Roveri é permitir a integração com outros softwares em algumas linguagens de programação como PHP, VB.NET, java mais parece fácil integrar com outras linguagens também (Não tenho vínculo e também não estou ganhando nenhum tipo de comissão por está informando sobre o roveri)

     

    Quando ele diz: "estou lhe fornecendo essa última DLL sem custo, com as seguintes condições:"

    Onde a consigo para implementá-la ?
    Alguém aqui tem esta DLL, pois a que utilizava anteriormente parou de funcionar esta semana.

×
×
  • Create New...