Ir para conteúdo
  • Cadastre-se

dev botao

Provedor EL não esta retornando XML da NFSe


Ver Solução Respondido por Italo Giurizzato Junior,

Recommended Posts

  • Membros Pro
Postado

Olá.

O provedor EL autoriza a nota, retorna númeração, tudo certinho, porém não esta retornando o xml da NFSe, com isso não é possível imprimir.

Vou enviar para o e-mail do acbr os arquivos.

No aguardo.

  • Consultores
Postado

Boa tarde !
Vamos la.
Ideal é sempre aguardar a solicitação do arquivo antes de enviar, assim o consultor que solicitou vai esperar o referido arquivo.
Mas nos dê mais informações, qual municipio, como foi enviado (assincrono, sincrono).

Consultor SAC ACBr

Daniel de Morais (Infocotidiano)
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

  • Membros Pro
Postado

@Daniel InfoCotidiano Acabei já enviando os arquivos.

Uso o método automático, provedor é o EL, para cidade de Orizona - GO.

O envio é feito corretamente, cancelamento também.

Porém no envio não retorna o xml da NFSe, nem mesmo realizando a consulta de NFSe por RPS.

  • Consultores
Postado
21 minutes ago, C4Dev said:

@Daniel InfoCotidiano Acabei já enviando os arquivos.

Uso o método automático, provedor é o EL, para cidade de Orizona - GO.

O envio é feito corretamente, cancelamento também.

Porém no envio não retorna o xml da NFSe, nem mesmo realizando a consulta de NFSe por RPS.

Boa tarde!

O seu arquivo 000000055309-lista-nfse-con-lot.xml.xml é o retorno devolvido pelo web service do provedor, como resposta para a consulta de lote.

Se você abrir o arquivo, vai verificar que são devolvidas apenas algumas poucas informações e por isso não há XML a ser devolvido.

No caso do ELem específico, pelo fato de o provedor devolver somente estas poucas informações, o componente tenta montar um XML para você com os dados que alimentou do RPS somando os dados que foram devolvidos no retorno da consulta.

Mas para que isso de certo, o componente usa o valor atribuído em NFSe.IdentificacaoRps.Numero como parâmetro. Se no retorno do web service, vier na tag <rpsNumero> o mesmo valor que tem nesta propriedade, ele tenta gerar o XML.

if ANota.NFSe.IdentificacaoRps.Numero = ANumRps  then
begin
  if ANota.XmlRps = '' then
  	aXmlNota := GerarXmlNota(ANota.XmlNfse, aXmlRetorno)
  else
  	aXmlNota := GerarXmlNota(ANota.XmlRps, aXmlRetorno);

  ANota.XmlNfse := aXmlNota;

  SalvarXmlNfse(ANota);
  Exit;
end;

Repara que para isso funcionar:

  • O RPS precisa estar carregado na memória do componente, então se você transmitiu e apagou o RPS da memória ou foi consultar posteriormente não vai dar certo.
  • O valor da propriedade precisa ser o mesmo que vem no retorno do web service, então se você não preencheu a propriedade, modificou ela ou a informação não foi devolvida pelo web service não vai dar certo.

* Estou lhe passando estas informações considerando que você alterou a informação do provedor localmente em seu ambiente, pois a informação que dispomos é de que está cidade é atendida pelo provedor Sigep e não o EL.

Está assim no ACBrNFSeXServicos.ini do SVN:

[5215306]
; Incluído em 17/11/2021
Nome=Orizona
UF=GO
Provedor=Sigep
Versao=2.00
ProRecepcionar=http://gestaopublica.orizona.bsit-br.com.br/integracao/services/nfseWS

 

  • Curtir 1
Consultor SAC ACBr

Diego Folieni
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

  • Membros Pro
Postado (editado)

@Diego Foliene

Desculpa, o provedor é EL mesmo,  só confundi a cidade.

A cidade correta é Brumadinho MG.

Considerando o que você explicou, de alguma forma consigo pegar esse XML?

Editado por C4Dev
  • Consultores
Postado

@C4Dev

Por favor, abra seu arquivo ACBrNFSeXServicos.ini e veja como está a informação para a cidade configurada.

A explicação que forneci é referente ao provedor EL em sua versão 1.00 que implementa layout próprio.

O seu arquivo de retorno também coincide em estrutura com o que é esperado na resposta do EL.

O provedor Sigep implementa um layout baseado na versão 2.00 da ABRASF.

 

Consultor SAC ACBr

Diego Folieni
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

  • Membros Pro
Postado

@Diego Foliene

O provedor é EL mesmo, como comentei.

[3109006]
Nome=Brumadinho
UF=MG
Provedor=EL
ProRecepcionar=https://mg-brumadinho-pm-nfs.cloud.el.com.br/RpsServiceService
HomRecepcionar=
ProLinkURL=https://mg-brumadinho-pm-nfs.cloud.el.com.br/paginas/sistema/autenticacaoNota.jsf?cpfCnpj=%Cnpj%&chave=%CodVerif%
HomLinkURL=https://mg-brumadinho-pm-nfs.cloud.el.com.br/paginas/sistema/autenticacaoNota.jsf?cpfCnpj=%Cnpj%&chave=%CodVerif%

 

  • Consultores
Postado
2 hours ago, C4Dev said:

@Diego Foliene

O provedor é EL mesmo, como comentei.

[3109006]
Nome=Brumadinho
UF=MG
Provedor=EL
ProRecepcionar=https://mg-brumadinho-pm-nfs.cloud.el.com.br/RpsServiceService
HomRecepcionar=
ProLinkURL=https://mg-brumadinho-pm-nfs.cloud.el.com.br/paginas/sistema/autenticacaoNota.jsf?cpfCnpj=%Cnpj%&chave=%CodVerif%
HomLinkURL=https://mg-brumadinho-pm-nfs.cloud.el.com.br/paginas/sistema/autenticacaoNota.jsf?cpfCnpj=%Cnpj%&chave=%CodVerif%

 

Bom dia!

Neste caso, se aplicam as orientações mencionadas anteriormente.

20 hours ago, Diego Foliene said:

Repara que para isso funcionar:

  • O RPS precisa estar carregado na memória do componente, então se você transmitiu e apagou o RPS da memória ou foi consultar posteriormente não vai dar certo.
  • O valor da propriedade precisa ser o mesmo que vem no retorno do web service, então se você não preencheu a propriedade, modificou ela ou a informação não foi devolvida pelo web service não vai dar certo.

 

Consultor SAC ACBr

Diego Folieni
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

  • Membros Pro
Postado

Olá @Diego Foliene

Só não entendo como não realizar a consulta após envio, se este provedor é assíncrono, então necessita de uma consulta posterior para chegar o status.

 

  • Consultores
Postado
1 hour ago, C4Dev said:

Olá @Diego Foliene

Só não entendo como não realizar a consulta após envio, se este provedor é assíncrono, então necessita de uma consulta posterior para chegar o status.

 

Boa tarde!

Você pode fazer a consulta posteriormente, desde que o RPS esteja na memória da Lib.

Então você não vai conseguir o XML de retorno se por exemplo, você transmitir, receber o protocolo, fechar sua aplicação, der um free no componente ou simplesmente fizer um ACBrNFSeX.NotasFiscais.Clear e depois posteriormente, tentar consultar.

Consultor SAC ACBr

Diego Folieni
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

  • Consultores
Postado
13 minutes ago, C4Dev said:

Nãoconsigo gravar manualmente após envio, depois prosseguir para a consulta?

Você diz gravar o XML do RPS e aí quando for consultar carregar ele na memória antes de fazer a consulta?

Sim, acredito que isso seja possível sim.

Uma retratação, será necessário um ajuste para  que o retorno que você recebeu do web service do provedor gere o XML de retorno para você.

Além disso, talvez eu tenha feito uma escolha de palavras que tenha causado confusão.

Me de alguns instantes, vou disponibilizar uma unit e passar algumas orientações para que, se possível é claro, você possa fazer um teste na prática e entender de forma mais assertiva.

Consultor SAC ACBr

Diego Folieni
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

  • Consultores
  • Solution
Postado

Bom dia @C4Dev,

O provedor EL possui 2 webservices, um deles se utiliza de layout próprio (versão 1.00) e o outro da versão 2.04 do layout da ABRASF.

A cidade em questão usa o webservice de layout próprio.

Se você abrir a unit EL.Provider vai ver o seguinte:

  TACBrNFSeXWebserviceEL = class(TACBrNFSeXWebserviceSoap11)
  public
    function Recepcionar(const ACabecalho, AMSG: String): string; override;
    function ConsultarSituacao(const ACabecalho, AMSG: String): string; override;
    function ConsultarLote(const ACabecalho, AMSG: String): string; override;
    function ConsultarNFSePorRps(const ACabecalho, AMSG: String): string; override;
    function ConsultarNFSe(const ACabecalho, AMSG: String): string; override;
    function Cancelar(const ACabecalho, AMSG: String): string; override;
    function AbrirSessao(const ACabecalho, AMSG: String): string; override;
    function FecharSessao(const ACabecalho, AMSG: String): string; override;

    function TratarXmlRetornado(const aXML: string): string; override;
  end;

Com exceção do TratarXmlRetornado os demais são os serviços disponibilizados pelo webservice.

Note que temos o serviço: Recepcionar, esse serviço trabalha no modo assíncrono, portanto ao enviar um lote de RPS o webservice lhe retorna apenas um numero de protocolo.

O numero do protocolo você vai usar nos método de Consultar a Situação do Lote e Consultar Lote RPS.

O Consultar Situação vai lhe informar se o lote foi processado com sucesso ou não.

Já o Consultar Lote vai lhe retornar o XML da nota caso tenha processado com sucesso ou a lista de erros caso tenha processado com falhas.

O componente possui uma propriedade de configuração chamada: ConsultaLoteAposEnvio.

Se essa propriedade estiver com o valor True o componente executa automaticamente todo o fluxo (Envio, Consultar Situação e Consultar Lote).

Espero ter ajudado.

  • Curtir 1
Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / Araraquara-SP

Araraquara - A era dos Trólebus

  • Consultores
Postado

Bom dia @C4Dev!

On 9/13/2024 at 5:47 PM, Diego Foliene said:

Me de alguns instantes, vou disponibilizar uma unit e passar algumas orientações para que, se possível é claro, você possa fazer um teste na prática e entender de forma mais assertiva.

Vamos continuar daqui.

Por favor, substitua a unit em anexo em ACBr\trunk2\Fontes\ACBrDFe\ACBrNFSeX\Provedores, reinstale o ACBr e faça um novo teste.

Coloque um break-point no local indicado pelo print e siga o debug.

Acho que vai facilitar no entendimento do processo.

image.png

EL.Provider.pas

  • Curtir 1
Consultor SAC ACBr

Diego Folieni
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

  • Consultores
Postado
10 minutes ago, C4Dev said:

Esta retornando 1.

10 minutes ago, C4Dev said:

Próximo processo é realizar uma consulta de lote, onde novamente cai nesse Break-point, porém retornando 0.

Booa!

Debugando, ficou mais claro que é preciso ter uma NFSe carregada na memória do componente para que o processo funcione?

Um outro teste bem simples para ilustrar.

  • Abra o programa exemplo do ACBrNFSeX.
  • Clique no botão "Gerar Lote RPS"
  • Quando ele mostrar para você uma janelinha pedindo para informar o número do RPS, informe 5928.
  • Clique no botão Consultar Lote RPS e passe o número de protocolo que você consultou para gerar os arquivos que nos enviou no e-mail lá no início.
  • Ainda com o debug, veja como ele se comporta.
Consultor SAC ACBr

Diego Folieni
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

  • Membros Pro
Postado

@Diego Foliene Entendi o processo.

Mas miha dúvida agora é como salvar essa NFSe, com a numeração de retorno correta.

Procurei no fórum não encontrei um exemplo sobre isso.

  • Consultores
Postado
1 hour ago, C4Dev said:

Mas miha dúvida agora é como salvar essa NFSe, com a numeração de retorno correta.

Para isso, vamos descer um pouco mais para baixo na rotina e observar da linha 1091 para baixo:

if Assigned(ANota) then
begin
  if ANota.XmlRps = '' then
    aXmlNota := GerarXmlNota(ANota.XmlNfse, aXmlRetorno)
  else
    aXmlNota := GerarXmlNota(ANota.XmlRps, aXmlRetorno);

  ANota.XmlNfse := aXmlNota;

  SalvarXmlNfse(ANota);
end;

Veja que:

  • Encontrando a informação, o componente vai gerar o XML para você.
  • Uma vez que o componente tenha gerado o XML, ele também vai salvar o arquivo automaticamente para você.
  • A propriedade XMLNfse vai receber o conteúdo do XML caso você queira salvar manualmente.
  • Curtir 1
Consultor SAC ACBr

Diego Folieni
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

  • Membros Pro
Postado

@Diego Foliene

Bom dia;

Realizando os testes em debug, verifiquei que não esta caindo na linha abaixo:

for i := Low(ANodeArray) to High(ANodeArray) do
begin
	AuxNode := ANodeArray[i];

Neste caso não realiza o processo de:

 aXmlNota := GerarXmlNota(ANota.XmlNfse, aXmlRetorno)

 

E caso eu tente após a emissão pegar manualmente com a propriedade XMLNfse, ela se encontra vazia.

  • Membros Pro
Postado

@Diego Foliene

Consegui fazer passar pelas linhas á cima, mas veja onde esta o poblema:

Aqui ele preenche certinho com numeração e tudo:  

AResumo := Response.Resumos.New;
AResumo.idNota := AidNota;
AResumo.idRps := AidRps;
AResumo.NumeroNota := ANumNfse;
AResumo.Data := ADataHora;
AResumo.Situacao := ASituacao;
AResumo.NumeroRps := ANumRps;

Porém quando chama a função para salvar:

if ANota.NFSe.IdentificacaoRps.Numero = ANumRps  then
begin
	if ANota.XmlRps = '' then
		aXmlNota := GerarXmlNota(ANota.XmlNfse, aXmlRetorno)
	else
		aXmlNota := GerarXmlNota(ANota.XmlRps, aXmlRetorno);

	ANota.XmlNfse := aXmlNota;

	SalvarXmlNfse(ANota);
	Exit;
end;

A propriedade Anota não possui essas informações.

 

Pelo que vi, dentro da função:

function TACBrNFSeProviderEL.GerarXmlNota(const aXmlRps,
  aXmlRetorno: string): string;

Para alimentar os campos Numero da nota, esta pegando da propriedade   aXmlRetorno, que esta vazia, deveria ser aXmlRps

IDNota := SeparaDados(aXmlRetorno, 'idNota', False);
 Numero := SeparaDados(aXmlRetorno, 'numero', False);
 NumeroRPS := SeparaDados(aXmlRetorno, 'rpsnumero', False);

 

  • Membros Pro
Postado

@Diego Foliene

Uma correção do que enviei á cima.

if AResumo.NumeroNota <> '' then
      ANota := TACBrNFSeX(FAOwner).NotasFiscais.FindByNFSe(AResumo.NumeroNota);

Neste código, o número da Nota esta alimentado, porém ele cai no Anota, e não gera o xml, sendo assim, na sequencia:

 if ANota.XmlRps = '' then
	aXmlNota := GerarXmlNota(ANota.XmlNfse, aXmlRetorno)
 else
     aXmlNota := GerarXmlNota(ANota.XmlRps, aXmlRetorno);

A função GeraXmlNota esta sendo alimentada com xmlRps, onde não constém a numeração.

Na pasta de log esta salvando assim:

NFS-e-nfse.xml

Sem a numeração da NFS-e

  • Consultores
Postado

@C4Dev,

Eu acho que ficou faltando uma linha, veja:

                AResumo.Data := Response.Data;
                AResumo.Situacao :=  Response.Situacao;
                AResumo.NumeroRps := Response.NumeroRps;

                aXmlRetorno := AuxNode.OuterXml;    <==== incluir esta linha

                if AResumo.NumeroNota <> '' then
                  ANota := TACBrNFSeX(FAOwner).NotasFiscais.FindByNFSe(AResumo.NumeroNota);

                if not Assigned(ANota) then
                  ANota := TACBrNFSeX(FAOwner).NotasFiscais.FindByRps(AResumo.NumeroRps);

Inclui a linha reinstale o ACBr e faça novos testes.

  • Curtir 1
Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / Araraquara-SP

Araraquara - A era dos Trólebus

Visitante
Este tópico está agora fechado para novas respostas
×
×
  • 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.

The popup will be closed in 10 segundos...