Jump to content

dev botao

Provedor EL não esta retornando XML da NFSe


Go to solution Solved by Italo Giurizzato Junior,

Recommended Posts

  • Membros Pro

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.

Link to comment
Share on other sites

  • Consultores

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

Link to comment
Share on other sites

  • Consultores
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

 

  • Like 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 !!

Link to comment
Share on other sites

  • Consultores

@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 !!

Link to comment
Share on other sites

  • Membros Pro

@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%

 

Link to comment
Share on other sites

  • Consultores
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 !!

Link to comment
Share on other sites

  • Consultores
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 !!

Link to comment
Share on other sites

  • Consultores
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 !!

Link to comment
Share on other sites

  • Consultores
  • Solution

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.

  • Like 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

Link to comment
Share on other sites

  • Consultores

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

  • Like 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 !!

Link to comment
Share on other sites

  • Consultores
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 !!

Link to comment
Share on other sites

  • Consultores
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.
  • Like 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 !!

Link to comment
Share on other sites

  • Membros Pro

@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.

Link to comment
Share on other sites

  • Membros Pro

@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);

 

Link to comment
Share on other sites

  • Membros Pro

@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

Link to comment
Share on other sites

  • Consultores

Boa tarde @C4Dev,

Ao consultar a variável aXmlRetorno é para conter o XML retornado pelo webservice.

Você poderia anexar esse XML para que possamos analisar o problema?

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

Link to comment
Share on other sites

  • Consultores

@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.

  • Like 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

Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
×
×
  • 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...