Sigelman Araujo Posted September 30 Posted September 30 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 valterpatrick Posted September 30 Membros Pro Posted September 30 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
Sigelman Araujo Posted September 30 Author Posted September 30 Entendi, minha pergunta é como pego isso, exemplo (ACBrNFe1.WebServices.Retorno.RetornoWS) esse retorno me dá esses códigos?
Moderadores Juliomar Marchetti Posted September 30 Moderadores Posted September 30 Exemplo do svn tem tudo: pra que pegar o xml ou o txt se já está mapeado nas classes. abre ai sem dó os exemplos do svn e pode mexer a vontade pra ver Juliomar Marchetti skype: juliomar telegram: juliomar e-mail: [email protected] http://www.juliomarmarchetti.com.br
Sigelman Araujo Posted October 4 Author Posted October 4 (edited) 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 October 4 by Sigelman Araujo
Moderadores Juliomar Marchetti Posted October 4 Moderadores Posted October 4 Esse dai é um retorno montaod que tu pode ver no componente mesmo Juliomar Marchetti skype: juliomar telegram: juliomar e-mail: [email protected] http://www.juliomarmarchetti.com.br
Sigelman Araujo Posted October 4 Author Posted October 4 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 valterpatrick Posted October 7 Membros Pro Posted October 7 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
Moderadores Juliomar Marchetti Posted October 7 Moderadores Posted October 7 Em 04/10/2024 at 14:16, Sigelman Araujo disse: porém se na validação der algum erro, nada mais abaixo do btncriarenviarNFCeClick será executado. gerou exceção? Juliomar Marchetti skype: juliomar telegram: juliomar e-mail: [email protected] http://www.juliomarmarchetti.com.br
datilas Posted October 7 Posted October 7 (edited) Em 04/10/2024 at 10:02, Sigelman Araujo disse: 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 October 7 by datilas
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now