Membros Pro SupraMAIS Posted June 13 Membros Pro Share Posted June 13 Prezados, boa tarde! Estamos realizando a implementação da NFS-e para Cidade de Montes Claros - MG que utiliza o Provedor PRONIM (Versao=2.02), utilizando o componente ACBrNFSeX, entretanto, temos enfrentado dificuldades no tratamento das exceções quando existe erro no retorno. Hoje quando tentamos realizar transmissão de uma NFS-e e ela por algum motivo tem inconsistência é retornado a seguinte mensagem: Entretanto, a mensagem em acima não trás o real motivo pelo qual o RPS em questão foi "rejeitado". Conforme XML de nome 28582-lista-nfse-sinc.xml anexo, o motivo da rejeição foi outro e não o de Código E4 que foi apresentado acima. Deste modo, para tentarmos contornar a situação e apresentar corretamente o erro, fizemos uma alteração dentro da unit: ACBrNFSeXProviderABRASFv2.pas, de forma que a exceção passe a ser levantada, de modo que a propriedade ACBrNFSe1.WebService.Emite.Sucesso retorne false, nos casos de erro. A sugestão de ajuste que realizamos foi levando em consideração o tratamento similar que é realizado dentro da unit; ACBrNFSeXProviderABRASFv1 na procedure TratarRetornoEmitir. Após o ajuste em questão, nossa aplicação passou retornar corretamente o erro do RPS: Assim sendo, enviamos anexo a alteração realizada para que seja apreciada. 28582-lista-nfse-sinc.xml ACBrNFSeXProviderABRASFv2.pas Link to comment Share on other sites More sharing options...
Consultores Solution Italo Giurizzato Junior Posted June 14 Consultores Solution Share Posted June 14 Bom dia @SupraMAIS, Vamos lá: 1. A primeira imagem se refere a execução do método ConsultarNFSePorRPS, logo se você informar um numero de RPS que não foi aceito por conter informações erradas o erro E4 esta correto. 2. A segunda imagem se refere a execução do método Emitir, que traz o erro E39 e por conta desse erro o RPS enviado não foi aceito e que se executar o método ConsultarNFSePorRPS vai retornar o erro E4. Quanto a sua alteração, será que realmente se faz necessário? Você acrescentou a linha abaixo logo após a execução da procedure: ProcessarMensagemErros. //Acrescentado Response.Sucesso := (Response.Erros.Count = 0); Mas no final do Try temos: Response.Sucesso := (Response.Erros.Count = 0); except E na posição que essa linha esta, ao meu ver contempla tanto o ProcessarMensagemErros que esta logo no inicio quanto o que esta dentro do IF cujas linhas são executadas se o modo de envio for Lote Síncrono ou Unitário. Italo Giurizzato Junior Ajude o Projeto ACBr crescer - Assine o SAC Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP Araraquara - A era dos Trólebus Link to comment Share on other sites More sharing options...
Membros Pro SupraMAIS Posted June 20 Author Membros Pro Share Posted June 20 @Italo Giurizzato Junior, boa tarde! Analisamos a situação acima e identificamos que a principio o trecho em questão é executado somente quando não corre nenhum erro, exemplo Cod202, que é tratado em um bloco que contem um exit, fazendo com que este trecho não seja executado em virtude do exit: if Response.ModoEnvio in [meLoteSincrono, meUnitario] then begin // Retorno do EnviarLoteRpsSincrono e GerarNfse ANode := ANode.Childrens.FindAnyNs('ListaNfse'); if not Assigned(ANode) then begin AErro := Response.Erros.New; AErro.Codigo := Cod202; AErro.Descricao := ACBrStr(Desc202); Exit; end; Deste modo, sugeriríamos que este comando seja movido para dentro do finally: end; except on E:Exception do begin AErro := Response.Erros.New; AErro.Codigo := Cod999; AErro.Descricao := ACBrStr(Desc999 + E.Message); end; end; finally Response.Sucesso := (Response.Erros.Count = 0); FreeAndNil(Document); end; end; Caso tenham alguma sugestão de como contornar a situação fiquem a vontade nos repassar. Obrigado. ACBrNFSeXProviderABRASFv2 (1).pas Link to comment Share on other sites More sharing options...
Consultores Italo Giurizzato Junior Posted June 20 Consultores Share Posted June 20 Boa tarde @SupraMAIS, Vamos analisar a sua sugestão, já inclui na lista de tarefas. TK-5619 Italo Giurizzato Junior Ajude o Projeto ACBr crescer - Assine o SAC Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP Araraquara - A era dos Trólebus Link to comment Share on other sites More sharing options...
Consultores Italo Giurizzato Junior Posted June 21 Consultores Share Posted June 21 Bom dia @SupraMAIS, Tenho uma segunda proposta para essa questão. Na unit ACBrNFSeXPrividerBase, procedure Emite fazer essas duas alterações: procedure TACBrNFSeXProvider.Emite; var AService: TACBrNFSeXWebservice; AErro: TNFSeEventoCollectionItem; begin EmiteResponse.Sucesso := False; <=== incluir esta linha EmiteResponse.Erros.Clear; EmiteResponse.Alertas.Clear; EmiteResponse.Resumos.Clear; TACBrNFSeX(FAOwner).SetStatus(stNFSeRecepcao); (...) TACBrNFSeX(FAOwner).SetStatus(stNFSeAguardaProcesso); TratarRetornoEmitir(EmiteResponse); TACBrNFSeX(FAOwner).SetStatus(stNFSeIdle); EmiteResponse.Sucesso := (EmiteResponse.Erros.Count = 0); <=== incluir esta linha end; Logo no inicio da procedure defino que o valor da propriedade Sucesso é False, porque essa procedure chama o PrepararEmitir, AssinarEmitir e ValidarSchema que podem resultar em erros. No final da procedure é executado o TratarRetornoEmitir que também pode resultar em erros, ai mudo o valor de Sucesso com base no contador de erros. Desta forma, acredito eu que podemos eliminar a linha ( Response.Sucesso := (Response.Erros.Count = 0); ) do TratarRetornoEmitir que se encontra na unit ACBrNFSeXProviderABRASFv2. O que você acha? 1 Italo Giurizzato Junior Ajude o Projeto ACBr crescer - Assine o SAC Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP Araraquara - A era dos Trólebus Link to comment Share on other sites More sharing options...
Membros Pro SupraMAIS Posted June 24 Author Membros Pro Share Posted June 24 @Italo Giurizzato Junior, bom dia! Fizemos aqui e a sugestão funcionou perfeitamente! Neste caso vocês irão submeter este ajuste ao componente? Obrigado. Link to comment Share on other sites More sharing options...
Consultores Italo Giurizzato Junior Posted June 24 Consultores Share Posted June 24 Boa tarde @SupraMAIS, Já vou incluir na minha lista de tarefas para fazer essa adequação para os demais métodos e não somente no Emitir. Assim que finalizado iremos enviar para o SVN. Aviso aqui quando isso ocorrer. 1 Italo Giurizzato Junior Ajude o Projeto ACBr crescer - Assine o SAC Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP Araraquara - A era dos Trólebus Link to comment Share on other sites More sharing options...
Consultores Italo Giurizzato Junior Posted June 25 Consultores Share Posted June 25 Boa tarde @SupraMAIS, Já esta no SVN. 1 Italo Giurizzato Junior Ajude o Projeto ACBr crescer - Assine o SAC Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP Araraquara - A era dos Trólebus Link to comment Share on other sites More sharing options...
Membros Pro SupraMAIS Posted June 26 Author Membros Pro Share Posted June 26 Bom dia @Italo Giurizzato Junior, Resolvido! Obrigado. Link to comment Share on other sites More sharing options...
Consultores Italo Giurizzato Junior Posted June 26 Consultores Share Posted June 26 Obrigado por reportar. Fechando. Para novas dúvidas, criar um novo tópico. Italo Giurizzato Junior Ajude o Projeto ACBr crescer - Assine o SAC Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP Araraquara - A era dos Trólebus Link to comment Share on other sites More sharing options...
Recommended Posts