Membros Pro C4Dev Posted September 11 Membros Pro Share Posted September 11 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 More sharing options...
Consultores Daniel InfoCotidiano Posted September 11 Consultores Share Posted September 11 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). Daniel de Morais (Infocotidiano) Ajude o Projeto ACBr crescer - Assine o SAC (15) 2105-0750 (15)99790-2976. Discord Link to comment Share on other sites More sharing options...
Membros Pro C4Dev Posted September 11 Author Membros Pro Share Posted September 11 @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. Link to comment Share on other sites More sharing options...
Consultores Diego Foliene Posted September 11 Consultores Share Posted September 11 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 EL* em 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 1 Diego FolieniAjude o Projeto ACBr crescer - Assine o SAC (15) 2105-0750 (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 More sharing options...
Membros Pro C4Dev Posted September 11 Author Membros Pro Share Posted September 11 (edited) @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? Edited September 11 by C4Dev Link to comment Share on other sites More sharing options...
Consultores Italo Giurizzato Junior Posted September 11 Consultores Share Posted September 11 Tópico movido para a área do SAC, para que o SLA de respostas seja considerado Italo Giurizzato Junior Ajude o Projeto ACBr crescer - Assine o SAC Analista de Sistemas / Araraquara-SP Araraquara - A era dos Trólebus Link to comment Share on other sites More sharing options...
Consultores Diego Foliene Posted September 11 Consultores Share Posted September 11 @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. Diego FolieniAjude o Projeto ACBr crescer - Assine o SAC (15) 2105-0750 (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 More sharing options...
Membros Pro C4Dev Posted September 12 Author Membros Pro Share Posted September 12 @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 More sharing options...
Consultores Diego Foliene Posted September 12 Consultores Share Posted September 12 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. Diego FolieniAjude o Projeto ACBr crescer - Assine o SAC (15) 2105-0750 (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 More sharing options...
Membros Pro C4Dev Posted September 13 Author Membros Pro Share Posted September 13 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. Link to comment Share on other sites More sharing options...
Consultores Diego Foliene Posted September 13 Consultores Share Posted September 13 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. Diego FolieniAjude o Projeto ACBr crescer - Assine o SAC (15) 2105-0750 (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 More sharing options...
Membros Pro C4Dev Posted September 13 Author Membros Pro Share Posted September 13 @Diego Foliene Nãoconsigo gravar manualmente após envio, depois prosseguir para a consulta? Link to comment Share on other sites More sharing options...
Consultores Diego Foliene Posted September 13 Consultores Share Posted September 13 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. Diego FolieniAjude o Projeto ACBr crescer - Assine o SAC (15) 2105-0750 (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 More sharing options...
Consultores Solution Italo Giurizzato Junior Posted September 14 Consultores Solution Share Posted September 14 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. 1 Italo Giurizzato Junior Ajude o Projeto ACBr crescer - Assine o SAC Analista de Sistemas / Araraquara-SP Araraquara - A era dos Trólebus Link to comment Share on other sites More sharing options...
Consultores Diego Foliene Posted September 16 Consultores Share Posted September 16 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. EL.Provider.pas 1 Diego FolieniAjude o Projeto ACBr crescer - Assine o SAC (15) 2105-0750 (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 More sharing options...
Membros Pro C4Dev Posted September 16 Author Membros Pro Share Posted September 16 Bom dia @Diego Foliene Esta retornando 1. Logo após não retorna nenhuma NFSe. Próximo processo é realizar uma consulta de lote, onde novamente cai nesse Break-point, porém retornando 0. EL.Provider.pas Link to comment Share on other sites More sharing options...
Consultores Diego Foliene Posted September 16 Consultores Share Posted September 16 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. Diego FolieniAjude o Projeto ACBr crescer - Assine o SAC (15) 2105-0750 (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 More sharing options...
Membros Pro C4Dev Posted September 16 Author Membros Pro Share Posted September 16 @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. Link to comment Share on other sites More sharing options...
Consultores Diego Foliene Posted September 16 Consultores Share Posted September 16 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. 1 Diego FolieniAjude o Projeto ACBr crescer - Assine o SAC (15) 2105-0750 (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 More sharing options...
Membros Pro C4Dev Posted September 17 Author Membros Pro Share Posted September 17 @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 More sharing options...
Membros Pro C4Dev Posted September 17 Author Membros Pro Share Posted September 17 @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 More sharing options...
Membros Pro C4Dev Posted September 17 Author Membros Pro Share Posted September 17 @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 More sharing options...
Consultores Italo Giurizzato Junior Posted September 17 Consultores Share Posted September 17 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? Italo Giurizzato Junior Ajude o Projeto ACBr crescer - Assine o SAC Analista de Sistemas / Araraquara-SP Araraquara - A era dos Trólebus Link to comment Share on other sites More sharing options...
Membros Pro C4Dev Posted September 17 Author Membros Pro Share Posted September 17 Olá @Italo Giurizzato Junior Segue os retornos. 322-rec.xml 000000055672-lista-nfse-con-lot.xml Link to comment Share on other sites More sharing options...
Consultores Italo Giurizzato Junior Posted September 17 Consultores Share Posted September 17 @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. 1 Italo Giurizzato Junior Ajude o Projeto ACBr crescer - Assine o SAC Analista de Sistemas / Araraquara-SP Araraquara - A era dos Trólebus Link to comment Share on other sites More sharing options...
Recommended Posts