Ir para conteúdo
  • Cadastre-se

dev botao

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

Recommended Posts

Postado

Estava com problema para recuperar os dados de protocolo na consulta da NFe quando ela esta denegada.

Acredito que o problema esta na leitura do XML(pcnRetConsSitNFe.pas) método(TRetConsSitNFe.LerXml: boolean), ele trata os status 100 e 101 quando deveria tratar 100 e 110.

Hoje ele faz if FcStat in [100,101] then, mas acredito que o correto seria if FcStat in [100,110] then, fiz um teste aqui e funcionou.

Acredito que esta correção poderá resolver o problema relatado no topico (viewtopic.php?f=6&t=5412&p=28066&hilit=DENEGADA#p28066).

Obrigado pela atenção.

Carlos H. Marian

Analista de Sistemas

|/-\|

  • Moderadores
Postado

... ele trata os status 100 e 101 quando deveria tratar 100 e 110.

o correto seria if FcStat in [100,110] then, fiz um teste aqui e funcionou.

Só um alerta, vc não pode ignorar o 101, pois ele é o código de status cancelado.

100-Autorizado/101-Cancelado, ou seja se a nota está cancelada o retorno será 101.


logoacbr.pngConheça o Portal do Projeto ACBr

Ajude o Projeto ACBr crescer - Assine o SAC ACBr
Assine um dos planos de longa duração do SAC ACBr, obtenha Descontos Especiais, Parcele no Cartão e ainda ganhe Brindes Exclusivos. Saiba mais aqui

Conheça o ACBrLib, o ACBr de forma nativa para qualquer linguagem de programação. Saiba mais aqui

 

 

 

 

Postado

Olá,

correto Kiko Fernandes, a rotina que trata o status 101 esta logo abaixo do tratamento que hoje eu sugeri que fosse revisado.

valeu por lembrar, eu esqueci de comentar que onde hoje trata só o 101, não existe a necessidade de manutenção.

at+

Carlos H. Marian

Analista de Sistemas

|/-\|

  • 5 meses depois ...
Postado

Pessoal,

não consegui identificar se foi solucionado o problema do não retorno do protocolo das notas denegadas, status 205.

Identificador :

Ambiente : 1

Versão Aplicativo : 4.00

Status Código : 205

Status Descrição : Rejeicao: NF-e esta denegada na base de dados da SEFAZ

UF : BA

Chave Acesso : 29121114437971000108550010000019001600207860

Recebimento : 30/12/1899

Protocolo :

Digest Value :

E ressalto que consultado a chave de acesso citada acima, no portal nacional, existe protocolo.

Alguém conseguiu resolver isso?

Atenciosamente,

Darlana Nogueira

Postado

Olá Darlana, tbm não tive retorno sobre este assunto.

Sempre depois que atualizo o ACBr, altero os fontes descritos no início e desta forma não tenho mais o problema.

at+

Carlos H. Marian

Analista de Sistemas

|/-\|

Postado

Carlos,

procurando no forum alguém informou que para receber o protocolo da NF-e Denegada, tem que pegar o protocolo de nota que já foi transmitida, tem que usar a consulta da nota pela chave ou do lote pelo recibo.

Vou tentar testar, caso consiga realizar os testes ai e obtiver sucesso, se possivel postar o que fez, ficarei grata, farei o mesmo, caso consiga aqui.

Darlana

Postado

Darlana

Eu trato a nota Denegada(cStat 301 ou 302) tanto no retorno do envio(TACBrNFe.WebServices.Envia(xx)) do XML quanto no retorno da Consulta(TACBrNFe.Consultar).

O que verifique é que na minha opinião o método TRetConsSitNFe.LerXml não estava tratando corretamente o retorno, quando a nota estava denegada o método não carregava todos os dados (protocolo,...) que vieram no retorno. Por isso alterei o código e com esta alteração quando a nota é denegada no envio(por exemplo) eu tenho o protocolo, e posso guardar ele.

Talvez a forma como implementamos o tratamento do retorno pode estar incorreto, e por isso que o erro pode não estar ocorrendo com outro usuário.

at+

Carlos H. Marian

Analista de Sistemas

|/-\|

  • 1 ano depois...
Postado

Prezados,

a unica forma que havia conseguido contornar o problema do retorno da nota denegada foi incluindo os valores [100,110,205,150,301,302]

 

{ TNFeRetRecepcao }
function TNFeRetRecepcao.Confirma(AInfProt: TProtNFeCollection): Boolean;

...

...

FNotasFiscais.Items[j].Confirmada := (AInfProt.Items.cStat in [100,110,205,150,301,302]);

 

Porem na ultima versão baixada do acbr, na ultima sexta-feira 17/01/2014 ao compilar esta apresentando mensagem que esta fora da faixa

 

[Error] ACBrNFeWebServices.pas(2126): Constant expression violates subrange bounds

 

Isso esta ocorrendo exatamente pelo uso dos valores 301 e 302, não consegui localizar no componente onde estabelece faixa de valor para o cStat, alguém pode me auxiliar?

 

Grata,

Darlana Nogueira

  • Consultores
Postado

Bom dia Darlana,

 

Ao compilar o erro ocorre justamente na linha que você alterou, ou seja:

 

FNotasFiscais.Items[j].Confirmada := (AInfProt.Items.cStat in [100,110,205,150,301,302]);

 

e se remover os valores 301 e 302 a compilação ocorre sem nenhum problema?

 

Se sim, abra a unit pcnRetConsReciNFe e veja se a propriedade cStat não esta definida como sendo Byte em vez de Integer.

 

A unica razão no momento que vejo é essa, uma vez que os valore 301 e 302 ultrapassa o limite de 255.

Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / Araraquara-SP

Araraquara - A era dos Trólebus

Postado

Bom dia Darlana,

 

Ao compilar o erro ocorre justamente na linha que você alterou, ou seja:

 

FNotasFiscais.Items[j].Confirmada := (AInfProt.Items.cStat in [100,110,205,150,301,302]);

 

e se remover os valores 301 e 302 a compilação ocorre sem nenhum problema?

 

Se sim, abra a unit pcnRetConsReciNFe e veja se a propriedade cStat não esta definida como sendo Byte em vez de Integer.

 

A unica razão no momento que vejo é essa, uma vez que os valore 301 e 302 ultrapassa o limite de 255.

Na verdade isso é uma limitação do operador "IN" - ele que aceita no máximo 255 conjuntos.

  • Consultores
Postado

Boa tarde Astrogildo,

 

Note que o conjunto de valores passado para o operador IN possui apenas 6 elementos.

 

O 301 e 302 são valores de 2 elementos e não a quantidade de elementos.

 

Valores estes a serem comparados com o valor da propriedade cStat, cujo resultado sera True ou False.

 

Darlana, verifique se não existe nenhum "." ponto separando um valor do outro, uma vez que o correto é virgula.

 

Procure deixar um espaço em branco entre a virgula e o próximo elemento.

Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / Araraquara-SP

Araraquara - A era dos Trólebus

Postado (editado)

Prezados Italo e Astrogildo,

 

não é a quantidade de elementos, pois se altero por exemplo os valores 301 e 302 para qq outro valor menor do que 255, passa.

Ja tinha olhado a questão do tipo do campo, e estava integer...

 

Cheguei a conclusão que é o operador in que manipula somente dados do tipo ordinal ate 255, byte como havia comentado o Italo, porem não localizei nenhuma literatura para confirmar isso...

Resolvi da forma mais tupiniquim...

 

if (AInfProt.Items.cStat = 301) or (AInfProt.Items.cStat = 302) then

  FNotasFiscais.Items[j].Confirmada := true;

 

Obrigado.

Editado por darlananogueira
Postado (editado)

Me expressei mal, não quis me referir a quantidade de elementos do conjunto. Mas o operador "in" não consegue tratar os elementos inteiros maiores que 255, talvez o delphi trate os numeros byte (0..255) como sendo um tipo enumerado que é subconjunto dos inteiros.

Vai dar erro se vc tentar compilar esse codigo, porque um dos elementos é maior do que a faixa dos byte:

if 1 in [1,301] then
  showmessage('OK');

Vai dar erro também se tiver um número negativo no conjunto, mas vai dar certo se vc fizer:

if 1 in [1,255] then
  showmessage('OK');

Um modo "gambi" para resolver o problema das NFe confirmadas é: 

FNotasFiscais.Items[j].Confirmada := (AInfProt.Items[i].cStat in [100,110,205,150]) or (AInfProt.Items[i].cStat = 301) or (AInfProt.Items[i].cStat = 302);

Desculpa Darlana, não havia visto a sua resposta ainda, mas é isso ai.

Editado por Astrogildo82
  • 5 meses depois ...
  • Membros Pro
Postado

Prezados,

a unica forma que havia conseguido contornar o problema do retorno da nota denegada foi incluindo os valores [100,110,205,150,301,302]

 

{ TNFeRetRecepcao }

function TNFeRetRecepcao.Confirma(AInfProt: TProtNFeCollection): Boolean;

...

...

FNotasFiscais.Items[j].Confirmada := (AInfProt.Items.cStat in [100,110,205,150,301,302]);

 

Porem na ultima versão baixada do acbr, na ultima sexta-feira 17/01/2014 ao compilar esta apresentando mensagem que esta fora da faixa

 

[Error] ACBrNFeWebServices.pas(2126): Constant expression violates subrange bounds

 

Isso esta ocorrendo exatamente pelo uso dos valores 301 e 302, não consegui localizar no componente onde estabelece faixa de valor para o cStat, alguém pode me auxiliar?

 

Grata,

Darlana Nogueira

 

Olá Darlana,

 

Passei pelo mesmo problema relatado por vocês e resolvi fazer a mesma alteração sugerida por você e Astrogildo na fonte do ACBR.

Uma dúvida ficou pairando na minha cabeça. Como na alteração você confirma a nota caso o retorno seja 301 ou 302

como você trata isso na rotina ACBrNFe1.Enviar(0)?

Pelo que entendi a nota será confirmada como enviada (o que realmente aconteceu). O que você sugere? Verifico qual o retorno após o envio?

Seria mais ou menos o código abaixo?

 

ACBrNFe1.Enviar(0);
if ACBrNFe1.NotasFiscais.Items[0].Confirmada = True then
  If ACBrNFe1.WebServices.Retorno.cStat = 301 then
     ShowMessage('Nota Denegada')
     else
  If ACBrNFe1.WebServices.Retorno.cStat = 100 then
     ShowMessage('Nota Enviada com sucesso!')

Grato desde já,

 

Rodrigo Cardilo

Rodrigo Cardilo

Card System Info

[email protected]

  • 2 anos depois...
  • Este tópico foi criado há 2797 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.