Cayque Posted October 2, 2019 Posted October 2, 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
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now