Cayque Postado 2 Outubro, 2019 Postado 2 Outubro, 2019 Olá, enfrentei um problema ao efetuar a consulta de status dos servidores da Sefaz para o estado de Minas Gerais (MG). O contexto é o seguinte: Efetuei dois testes de consulta de status dos servidores esperando o retorno 107 (cStat), um voltado para o MG e o outro para RJ. As URLs utilizadas foram as disponibilizadas no arquivo NFeServicos.ini, sendo para o MG a url https://nfe.fazenda.mg.gov.br/nfe2/services/NFeStatusServico4 e para o RJ a url www.fazenda.rj.gov.br/nfce/consulta. Percebi que ao efetuar os testes com o estado de MG, havia retorno da Sefaz porém os valores não estavam sendo setados, e para o RJ sim. Para ficar mais claro o "setado", estou me referindo a unit pcnRetConsStatServ, para a função LerXml e para a função rCampo contida na unit pcnLeitor: function TRetConsStatServ.LerXml: Boolean; var ok: Boolean; begin Result := False; try Leitor.Grupo := Leitor.Arquivo; if leitor.rExtrai(1, 'retConsStatServ' + FtagGrupoMsg) <> '' then begin Fversao := Leitor.rAtributo('versao', 'retConsStatServ' + FtagGrupoMsg); FtpAmb := StrToTpAmb(ok, Leitor.rCampo(tcStr, 'tpAmb')); FverAplic := Leitor.rCampo(tcStr, 'verAplic'); FcStat := Leitor.rCampo(tcInt, 'cStat'); FxMotivo := Leitor.rCampo(tcStr, 'xMotivo'); FcUF := Leitor.rCampo(tcInt, 'cUF'); FdhRecbto := Leitor.rCampo(tcDatHor, 'dhRecbto'); FtMed := Leitor.rCampo(tcInt, 'tMed'); FdhRetorno := Leitor.rCampo(tcDatHor, 'dhRetorno'); FxObs := Leitor.rCampo(tcStr, 'xObs'); Result := True; end; except Result := False; end; end; A estrutura de retorno é a seguinte: MG <retConsStatServ xmlns="http://www.portalfiscal.inf.br/nfe" versao="4.00"> <tpAmb xmlns="http://www.portalfiscal.inf.br/nfe">1 </tpAmb> <verAplic xmlns="http://www.portalfiscal.inf.br/nfe">W-1.4.23 </verAplic> <cStat xmlns="http://www.portalfiscal.inf.br/nfe">107 </cStat> <xMotivo xmlns="http://www.portalfiscal.inf.br/nfe">Serviço em Operação </xMotivo> <cUF xmlns="http://www.portalfiscal.inf.br/nfe">31 </cUF> <dhRecbto xmlns="http://www.portalfiscal.inf.br/nfe">2019-10-02T12:11:19-03:00 </dhRecbto> <tMed xmlns="http://www.portalfiscal.inf.br/nfe">0 </tMed> <dhRetorno xmlns="http://www.portalfiscal.inf.br/nfe">2019-10-02T12:11:19-03:00 </dhRetorno> </retConsStatServ> RJ <retConsStatServ versao="4.00" xmlns="http://www.portalfiscal.inf.br/nfe"> <tpAmb>2</tpAmb> <verAplic>SVRSnfce201805211008</verAplic> <cStat>107</cStat> <xMotivo>Servico em Operacao</xMotivo> <cUF>33</cUF> <dhRecbto>2019-10-02T12:06:49-03:00</dhRecbto> <tMed>1</tMed> </retConsStatServ> O problema é devido a diferente estrutura de retorno para cada estado, pois a função rCampo espera que a tag inicial, tag de abertura seja a tag padrão (<tpAmb>, <verAplic>, <cStat>) sem nada além. Devido a isso, quando é feito a operação para o retorno de MG, os valores das tags não são encontrados, pois além da tag inicial também há a tag/url xmlns="http://www.portalfiscal.inf.br/nfe". Para resolver o problema precisei comentar o sinal de maior ">" para que não ficasse "limitado" somente as tags padrões. Antes: inicio := pos('<' + Tag + '>', UpperCase(FGrupo)); Depois inicio := pos('<' + Tag {+ '>'}, UpperCase(FGrupo)); A partir dai conseguir prosseguir. Essa seria a melhor abordagem a ser tomada? Seria realmente a correção definitiva ? Agradeço e espero que fique claro. Obrigado.
Recommended Posts
Crie uma conta ou entre para comentar
Você precisar ser um membro para fazer um comentário
Criar uma conta
Crie uma nova conta em nossa comunidade. É fácil!
Crie uma nova contaEntrar
Já tem uma conta? Faça o login.
Entrar Agora