Sigelman Araujo Postado 30 Setembro Postado 30 Setembro 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 Postado 30 Setembro Membros Pro Postado 30 Setembro 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 Postado 30 Setembro Autor Postado 30 Setembro Entendi, minha pergunta é como pego isso, exemplo (ACBrNFe1.WebServices.Retorno.RetornoWS) esse retorno me dá esses códigos?
Moderadores Juliomar Marchetti Postado 30 Setembro Moderadores Postado 30 Setembro 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 Postado 4 Outubro Autor Postado 4 Outubro (editado) 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 4 Outubro por Sigelman Araujo
Moderadores Juliomar Marchetti Postado 4 Outubro Moderadores Postado 4 Outubro 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 Postado 4 Outubro Autor Postado 4 Outubro 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 Postado 7 Outubro Membros Pro Postado 7 Outubro 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 Postado 7 Outubro Moderadores Postado 7 Outubro 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 Postado 7 Outubro Postado 7 Outubro (editado) 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; Editado 7 Outubro por datilas
Recommended Posts
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 contaEntrar
Já tem uma conta? Faça o login.
Entrar Agora