Ir para conteúdo
  • Cadastre-se

dev botao

  • Este tópico foi criado há 3913 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Postado

Quando tento enviar uma NF-e com CNPJ denegado, resultando no cStat 302, a função Enviar do componente lança uma exceção falando que a nota está denegada. A questão é: é certo lançar uma exceção já que o envio foi feito corretamente e ser denegada é um estado válido?

Obrigado.

Postado

Sim, não tem valor jurídico sendo necessário corrigir os dados cadastrais e só assim fazer outra.

Mas ela é armazenada no banco de dados da SEFAZ e é uma situação válida para a nota (igual autorizada e cancelada) retornando todos os valores (cStat, dhRecbto, nProt).

Por ser válida a operação é que penso que ao invés de lançar uma exceção na função ACBrNFe.Enviar(ALote, Imprimir, Sincrono) deveria apenas setar a propriedade ACBrNFe.NotasFiscais.Items.Confirmada para False. Do jeito que está o funcionamento atual, precisamos fazer um tratamento para notas autorizadas dentro de um try..except e de denegadas dentro do except..end como segue:

try
  enviar
  if confirmada then
    if cStat = ... then
      trata autorizada
    else
      ...
  else
    ...
except
  if cStat = ... then
    trata denegada
  else
    mensagem de erro de envio
end;

Assim, fica parecendo que deu problema na função Enviar. Acho que o certo seria tratar assim:

try
  enviar
  if confirmada then
    if cStat = ... then
      trata autorizada
    else
      ...
  else
    if cStat = ... then
      trata denegada
    else
      ...
except
  mensagem de erro de envio
end;

Só uma sugestão.

 

  • Curtir 3
  • Consultores
Postado

  Eu concordo com a sugestão.
  Na verdade Exceptions não deveriam ser geradas quando é um comportamento normal e esperado do componente ou funções da classe. Há um artigo antigo do Nick Hodges que explica o uso de exceptions corretamente neste link.

 

  Uma das coisas que ele mesmo diz é não fazer uso do código abaixo:

type
TExceptionComportamentoNormal = class(Exception);
…
begin
  AlgumCodigoQueFazAlgoNormalENaoPossuiErros;
  raise TExceptionComportamentoNormal.Create('Algo perfeitamente normal ' +
         'e esperado aconteceu.’);
end;

   A explicação é que isso pode ser irritante mesmo que sua aplicação capture e trate corretamente a exception em questão ou não resulte em nenhuma mensagem do usuário pois:

  1. é um meio que consome intensamente processador para simplesmente passar uma informação;
  2. o erro vai aparecer em tempo de design com o efeito de distrair o usuário do código;
  3. Se você está acrescentando uma exception simplesmente para que o usuário do código adicionar ela na lista de exceptions ignoradas pela IDE, então deveria pensar novamente se é necessário em levantar essa exception a princípio;

   Eu entendo que possa ser complicado por causa dos usuários que já fazem uso do código. Mas seria melhor se pudéssemos fazer a alteração...

  • Curtir 2

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

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

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
  • Este tópico foi criado há 3913 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • 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.