Jump to content

dev botao

  • Este tópico foi criado há 1896 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Posted

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.

  • Este tópico foi criado há 1896 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.

The popup will be closed in 10 seconds...