Ir para conteúdo
  • Cadastre-se

dev botao

Recommended Posts

Postado

image.png.58266fd22e8972928a80e2e20b8d7d4c.png

bom dia, estou precisando pegar o código de retorno da sefaz, andei lendo sobre os códigos e obtive esses acima.

meu propósito é saber se a nota foi aceita tudo correto ou rejeitada.

se rejeitada, guardo o XML no computador para enviar por contingência, porém quero acrescentar algumas informações ao nome do arquivo XML.

minha pergunta é, em que momento sei que foi aceita ou não?

 

  • Membros Pro
Postado
  • O retorno 100 é o que considera como EMITIDO;
  • Os retornos 103, 104 e 105 você considera como EM PROCESSAMENTO, ou seja, você enviou a nota para a receita, ela recebeu, mas não te retornou na hora se está emitida ou não. Neste caso você tem de consultar a nota e conferir se foi emitida ou não;
  • O 102 vai ser usado quando estiver inutilizando uma numeração, quer dizer que a nota foi inutilizada, se vier qualquer coisa diferente disto, quer dizer que não foi inutilizado;
  • O 107 o retorno de serviço em operação, ou seja, o webservice está no ar. É retornado quando você pesquisa o status do webservice, se vier qualquer coisa diferente disto, é rejeição;
  • O 101 vai ser usado quando estiver cancelando uma nota, quer dizer que a nota foi cancelad, se vier qualquer coisa diferente disto, quer dizer que não foi cancelada;
  • O 111 e 112 são retornos de consulta do cnpj pelo componente ACBrNFe, retorno os dados da empresa;
  • O retorno 110 ou qualquer outro que indique denegação, agora são considerados rejeições.
  • Qualquer outro retorno diferente dos informados acima são rejeições. Geralmente a rejeição vem com o número e uma breve descrição. Exemplo: "Rejeição 204: Duplicidade de NF-e [nRec:999999999999999]". Quando for assim, pesquise no Google: Rejeição XXX, geralmente eu vou no site da oobj, é muito bem descrito a rejeição e sua solução, mas nas NT também vem explicando o motivo da rejeição.

 

Referência da Rejeição 204:
https://www.oobj.com.br/bc/article/rejeição-204-duplicidade-de-nf-e-nrec999999999999999-como-resolver-289.html

Valter Patrick

Gerente de Projetos na empresa CTEC

(33)98400-0936

GitHub: https://github.com/valterpatrick

Postado (editado)

image.png.8181ece7f03e38e212361e01ebc79d11.png

veja, eu forcei um erro no envio de uma nota, coloquei o NCM errado, o sistema me retornou isso.

eu gostaria de pegar o código de retorno para guardar essa nota rejeitada no banco, entende?

neste momento de rejeição, como pego aqueles códigos? e se nesse momento, ele já gerou a chave da nota.

Editado por Sigelman Araujo
Postado

procedure NotaFiscal.Validar;
var
  Erro, AXML: String;
  NotaEhValida, ok: Boolean;
  ALayout: TLayOut;
  VerServ: Real;
  Modelo: TpcnModeloDF;
  cUF: Integer;
begin
  AXML := FXMLAssinado;
  if AXML = '' then
    AXML := XMLOriginal;

  with TACBrNFe(TNotasFiscais(Collection).ACBrNFe) do
  begin
    VerServ := FNFe.infNFe.Versao;
    Modelo  := StrToModeloDF(ok, IntToStr(FNFe.Ide.modelo));
    cUF     := FNFe.Ide.cUF;

    if EhAutorizacao( DblToVersaoDF(ok, VerServ), Modelo, cUF) then
      ALayout := LayNfeAutorizacao
    else
      ALayout := LayNfeRecepcao;

    // Extraindo apenas os dados da NFe (sem nfeProc)
    AXML := ObterDFeXML(AXML, 'NFe', ACBRNFE_NAMESPACE);

    if EstaVazio(AXML) then
    begin
      Erro := ACBrStr('NFe não encontrada no XML');
      NotaEhValida := False;
    end
    else
      NotaEhValida := SSL.Validar(AXML, GerarNomeArqSchema(ALayout, VerServ), Erro);

    if not NotaEhValida then
    begin
      FErroValidacao := ACBrStr('Falha na validação dos dados da nota: ') +
        IntToStr(NFe.Ide.nNF) + sLineBreak + FAlertas;
      FErroValidacaoCompleto := FErroValidacao + sLineBreak + Erro;

      raise EACBrNFeException.CreateDef(
        IfThen(Configuracoes.Geral.ExibirErroSchema, ErroValidacaoCompleto,
        ErroValidacao));
    end;
  end;
end;

 

fmNFce.btnCriarEnviarNFCeClick(Sender);

 

deixe ver se eu sou mais claro, a procedure acima trata o erro na validação da nota.

no meu formulário eu chamo o btncriarenviarNFCeClick

porém se na validação der algum erro, nada mais abaixo do btncriarenviarNFCeClick será executado.

meu problema é a procedure não retorna valores para que eu possa tratar após o btncriarenviarNFCeClick

tem alguma forma de pegar esse retorno?

  • Membros Pro
Postado
Em 04/10/2024 at 14:16, Sigelman Araujo disse:

procedure NotaFiscal.Validar;
var
  Erro, AXML: String;
  NotaEhValida, ok: Boolean;
  ALayout: TLayOut;
  VerServ: Real;
  Modelo: TpcnModeloDF;
  cUF: Integer;
begin
  AXML := FXMLAssinado;
  if AXML = '' then
    AXML := XMLOriginal;

  with TACBrNFe(TNotasFiscais(Collection).ACBrNFe) do
  begin
    VerServ := FNFe.infNFe.Versao;
    Modelo  := StrToModeloDF(ok, IntToStr(FNFe.Ide.modelo));
    cUF     := FNFe.Ide.cUF;

    if EhAutorizacao( DblToVersaoDF(ok, VerServ), Modelo, cUF) then
      ALayout := LayNfeAutorizacao
    else
      ALayout := LayNfeRecepcao;

    // Extraindo apenas os dados da NFe (sem nfeProc)
    AXML := ObterDFeXML(AXML, 'NFe', ACBRNFE_NAMESPACE);

    if EstaVazio(AXML) then
    begin
      Erro := ACBrStr('NFe não encontrada no XML');
      NotaEhValida := False;
    end
    else
      NotaEhValida := SSL.Validar(AXML, GerarNomeArqSchema(ALayout, VerServ), Erro);

    if not NotaEhValida then
    begin
      FErroValidacao := ACBrStr('Falha na validação dos dados da nota: ') +
        IntToStr(NFe.Ide.nNF) + sLineBreak + FAlertas;
      FErroValidacaoCompleto := FErroValidacao + sLineBreak + Erro;

      raise EACBrNFeException.CreateDef(
        IfThen(Configuracoes.Geral.ExibirErroSchema, ErroValidacaoCompleto,
        ErroValidacao));
    end;
  end;
end;

 

fmNFce.btnCriarEnviarNFCeClick(Sender);

 

deixe ver se eu sou mais claro, a procedure acima trata o erro na validação da nota.

no meu formulário eu chamo o btncriarenviarNFCeClick

porém se na validação der algum erro, nada mais abaixo do btncriarenviarNFCeClick será executado.

meu problema é a procedure não retorna valores para que eu possa tratar após o btncriarenviarNFCeClick

tem alguma forma de pegar esse retorno?

Coloca dentro de um Try Except.

try
  NFe.NotasFiscais[I].Validar;
except
  on E: Exception do
  begin
    // Exibir mensagem com o E.message
  end
end

 

Valter Patrick

Gerente de Projetos na empresa CTEC

(33)98400-0936

GitHub: https://github.com/valterpatrick

Postado (editado)
Em 04/10/2024 at 10:02, Sigelman Araujo disse:

image.png.8181ece7f03e38e212361e01ebc79d11.png

veja, eu forcei um erro no envio de uma nota, coloquei o NCM errado, o sistema me retornou isso.

eu gostaria de pegar o código de retorno para guardar essa nota rejeitada no banco, entende?

neste momento de rejeição, como pego aqueles códigos? e se nesse momento, ele já gerou a chave da nota.

nesse caso não tem codigo de retorno pois o erro foi na validação ou seja ainda não foi enviado para sefaz. só existe código de retorno quando o xml vai para sefaz.

o erro de validação é um erro local, quando o xml não condiz com os schemas.

para pegar o retorno quando tentar enviar vc pode usar:

      ACBrNFe1.WebServices.Enviar.cStat;
      ACBrNFe1.WebServices.Enviar.xMotivo;

mas se vc ja tem um xml "enviado" vc pode ler em:

ACBrNFe1.NotasFiscais[0].NFe.procNFe.cStat;
ACBrNFe1.NotasFiscais[0].NFe.procNFe.xMotivo;

 

Editado por datilas

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.

The popup will be closed in 10 segundos...