Ir para conteúdo
  • Cadastre-se

dev botao

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

Recommended Posts

Postado

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á 1876 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

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 conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.