Jump to content

dev botao

Recommended Posts

Posted

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
Posted
  • 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

Posted (edited)

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.

Edited by Sigelman Araujo
Posted

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
Posted
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

Posted (edited)
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;

 

Edited by datilas

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.

The popup will be closed in 10 seconds...