Membros Pro C4Dev Postado 11 Setembro Membros Pro Postado 11 Setembro 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 Daniel InfoCotidiano Postado 11 Setembro Consultores Postado 11 Setembro 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
Membros Pro C4Dev Postado 11 Setembro Autor Membros Pro Postado 11 Setembro @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 Diego Foliene Postado 11 Setembro Consultores Postado 11 Setembro 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 !!
Membros Pro C4Dev Postado 11 Setembro Autor Membros Pro Postado 11 Setembro (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 11 Setembro por C4Dev
Consultores Italo Giurizzato Junior Postado 11 Setembro Consultores Postado 11 Setembro 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
Consultores Diego Foliene Postado 11 Setembro Consultores Postado 11 Setembro @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 !!
Membros Pro C4Dev Postado 12 Setembro Autor Membros Pro Postado 12 Setembro @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 Diego Foliene Postado 12 Setembro Consultores Postado 12 Setembro 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 !!
Membros Pro C4Dev Postado 13 Setembro Autor Membros Pro Postado 13 Setembro 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 Diego Foliene Postado 13 Setembro Consultores Postado 13 Setembro 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 !!
Membros Pro C4Dev Postado 13 Setembro Autor Membros Pro Postado 13 Setembro @Diego Foliene Nãoconsigo gravar manualmente após envio, depois prosseguir para a consulta?
Consultores Diego Foliene Postado 13 Setembro Consultores Postado 13 Setembro 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 !!
Consultores Solution Italo Giurizzato Junior Postado 14 Setembro Consultores Solution Postado 14 Setembro 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
Consultores Diego Foliene Postado 16 Setembro Consultores Postado 16 Setembro 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 !!
Membros Pro C4Dev Postado 16 Setembro Autor Membros Pro Postado 16 Setembro 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
Consultores Diego Foliene Postado 16 Setembro Consultores Postado 16 Setembro 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 !!
Membros Pro C4Dev Postado 16 Setembro Autor Membros Pro Postado 16 Setembro @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 Diego Foliene Postado 16 Setembro Consultores Postado 16 Setembro 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 !!
Membros Pro C4Dev Postado 17 Setembro Autor Membros Pro Postado 17 Setembro @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 C4Dev Postado 17 Setembro Autor Membros Pro Postado 17 Setembro @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 C4Dev Postado 17 Setembro Autor Membros Pro Postado 17 Setembro @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 Italo Giurizzato Junior Postado 17 Setembro Consultores Postado 17 Setembro 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
Membros Pro C4Dev Postado 17 Setembro Autor Membros Pro Postado 17 Setembro Olá @Italo Giurizzato Junior Segue os retornos. 322-rec.xml 000000055672-lista-nfse-con-lot.xml
Consultores Italo Giurizzato Junior Postado 17 Setembro Consultores Postado 17 Setembro @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
Recommended Posts