Ir para conteúdo
  • Cadastre-se

dev botao

Informações Retorno ACBrNFSe [RESOLVIDO]


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

Recommended Posts

Boa noite!

Ao enviar o RPS as informações do retorno eu preciso armazenar no sistema, porém algumas não encontrei, conforme abaixo:

N° Protocolo (Funcionando)

----ACBrNFSe.WebServices.ConsLote.Protocolo;

Situação (Funcionando) Acredito que essa seja mesma informação que a NFe Autorizada, nesse caso Processada.

----ACBrNFSe.WebServices.ConsSitLote.Situacao;

Código de verificação (Erro)

----ACBrNFSe.WebServices.ConsNfseRps.NFSeRetorno.ListaNfse.CompNfse.Items[0].Nfse.CodigoVerificacao;

Número da nota (Erro)

----ACBrNFSe.WebServices.ConsNfseRps.NFSeRetorno.ListaNfse.CompNfse.Items[0].Nfse.Numero;

Não sei se estou buscando das propriedades certas, mas os dois últimos me retornam erro (Access Violation).

Alguma idéia?

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Encontrei. Assim que enviar o lote segue abaixo as propriedades para buscar as informações do retorno.

Protocolo := ACBrNFSe.WebServices.ConsLote.Protocolo;

Situacao := ACBrNFSe.WebServices.ConsSitLote.Situacao;

CodVerificacao := ACBrNFSe.WebServices.ConsLote.NFSeRetorno.ListaNfse.CompNfse.Items[0].Nfse.CodigoVerificacao;

NroNFSE := ACBrNFSe.WebServices.ConsLote.NFSeRetorno.ListaNfse.CompNfse.Items[0].Nfse.Numero;

Link para o comentário
Compartilhar em outros sites

  • 5 semanas depois ...

Estou com o mesmo problema, mas em momento diferente.

Quando envio o RPS e o webservice processa e retorna a NFS-e normalmente, consigo pegar todas as informações necessárias para armazenar no banco de dados:

objACBrNFSe.NotasFiscais.Items.NFSe.Protocolo;

objACBrNFSe.NotasFiscais.Items.NFSe.CodigoVerificacao;

objACBrNFSe.NotasFiscais.Items.NFSe.Situacao;

objACBrNFSe.NotasFiscais.Items.NFSe.dhRecebimento;

objACBrNFSe.NotasFiscais.Items.NFSe.Numero;

Mas caso ocorra um problema no envio, onde o lote foi processado mas nao retornou a NFS-e (geralmente por problemas no webservice), não consigo consultar e obter o numero do protocolo e a situacao.

-> Na consulta "objACBrNFSe.ConsutarNFSeporRps()", me retorna o XML da NFS-e, que não tem o numero do protocolo.

-> Na consulta "objACBrNFSe.ConsutarNFSe()", é o mesmo XML da consulta anterior, porém, vão aparecer várias NFS-es de acordo com o período passado como parametro. Mas possui o mesmo problema da consulta "objACBrNFSe.ConsutarNFSeporRps()".

-> Na consulta "objACBrNFSe.ConsutarSituacao()", preciso passar o protocolo como parametro, mas justamente o que preciso é saber qual o protocolo, pois vamos supor que não consegui obter o numero do protocolo na primeira tentativa de envio.

-> Na consulta "objACBrNFSe.ConsutarLoteRps()", também preciso informar o protocolo como parametro.

Para o componente da NF-e, funciona perfeitamente a lógica que apliquei: caso nao consiga receber resposta do webservice na primeira tentativa de envio, permito ao usuario enviar novamente e caso a mensagem que retornar seja de rejeição por duplicidade, apenas realizo uma consulta pela chave e o próprio componente se encarrega de preencher as propriedades que necessito gravar no bando de dados (protocolo, recibo, data/hora de autorização, situação, etc) e caso ela tenha sido autorizada, precesso a NF-e normalmente como se fosse a primeira tentativa de envio.

Quando renvio um RPS que já foi processado, a mensagem de erro que o componente gera é "RPS ja informado. /" e nenhuma das consultas que citei acima atualiza as propriedades.

Será que consegui deixar claro a minha dificuldade? Teria alguém aí que tenha passado pela mesma dificuldade?

Grato

Link para o comentário
Compartilhar em outros sites

Estou tendo o mesmo problema. Sinceramente nao entendo porque o numero da nfse nao é o sistema que controla e sim so vai saber o numero apos retorno, com isso quebra a logica no sistema, exemplo quando salvo a nota ja gero as cobranças (boletos) onde por lei os boletos vai o numero da nota. E nesses casos onde nao tenho o numero como faço? Gero boletos so depois que tiver o numero? Ai como falei muda lógica dos sistemas na minha opinião.

Link para o comentário
Compartilhar em outros sites

  • Consultores

Boa noite Rosemir,

O protocolo é retornado após o envio, se esse retorno falhar, até onde sei não tem como obte-lo.

E vai ai uma informação:

Já esta no forno a versão 3.00 da NFe que vai contemplar a venda ao consumidor final.

A novidade é a possibilidade de enviar o lote com apenas 1 (uma) NFe e obter como retorno não o recibo de entrega e sim o protocolo de autorização.

Sendo assim que esta acostumado em armazenar o numero do recibo, como essa metodologia de envio, não teremos mais essa informação.

Mas atenção, o envio de um lote com apenas uma NFe e já obter como resposta o protocolo de autorização só vai ser possivel se a venda for para o consumidor final.

Consultor SAC ACBr

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

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros sites

Ítalo, muito obrigado pelas informações...

Referente ao protocolo, já havia me dado por vencido, realmente não tem como recuperar o protocolo nessa situação, vai a dica, caso isso aconteça, eu verifico as propriedades:

"objACBrNFSe.WebServices.ConsSitLote.NFSeRetorno.InfSit.MsgRetorno.Items[0].Codigo" quando estou enviando

"objACBrNFSe.WebServices.CancNfse.NFSeRetorno.InfCanc.MsgRetorno.Items[0].Codigo" quando estou cancelando

caso o valor seja "E10" quando estou enviando ou "E79" quando estou cancelando, então processo normalmente salvando no banco as informações que acho interessante de armazenar, só não o protocolo é claro.

Referente à NF-e 3.0, parece que vai haver algumas mudanças consideráveis, conforme as que voce mencionou. Assim que pudermos iniciar os testes, provavelmente haverão muitos tópicos a serem discutidos.

Grato.

Link para o comentário
Compartilhar em outros sites

  • 9 meses depois ...

Boa tarde estou tentando fazer a consulta das NFSEs por periodo de tempo, preciso que essa consulta retorne o numero da nota, rps, cliente e data de emissão além da situação.
Estou tendo problema ao pegar a situação dessas notas que essa consulta retorna (cancelada,  emitida, substituída) ela não esta retornando no xml gerado, os demais campos estão todos ok.

Alguém tem alguma dica que possa ajudar?

Link para o comentário
Compartilhar em outros sites

  • 10 meses depois ...

Ítalo, muito obrigado pelas informações...

Referente ao protocolo, já havia me dado por vencido, realmente não tem como recuperar o protocolo nessa situação, vai a dica, caso isso aconteça, eu verifico as propriedades:

"objACBrNFSe.WebServices.ConsSitLote.NFSeRetorno.InfSit.MsgRetorno.Items[0].Codigo" quando estou enviando

"objACBrNFSe.WebServices.CancNfse.NFSeRetorno.InfCanc.MsgRetorno.Items[0].Codigo" quando estou cancelando

caso o valor seja "E10" quando estou enviando ou "E79" quando estou cancelando, então processo normalmente salvando no banco as informações que acho interessante de armazenar, só não o protocolo é claro.

Referente à NF-e 3.0, parece que vai haver algumas mudanças consideráveis, conforme as que voce mencionou. Assim que pudermos iniciar os testes, provavelmente haverão muitos tópicos a serem discutidos.

Grato.

Obrigado pela dica, mas quando tento assim tenho AccessViolation.

Executo logo após enviar.

Resolvido, para o evento Enviar:

DMNFSe.ObjetoNFSe.WebServices.Enviar.NFSeRetorno.InfRec.MsgRetorno.Items[0].Codigo;
Editado por Leandro Araújo

Leandro Araújo, Analista de Sistemas.

Link para o comentário
Compartilhar em outros sites

  • 3 semanas depois ...
  • 6 meses depois ...

Bom dia!

 

Quando envio um RPS e o WebService retorna que o RPS já foi informado, gostaria de saber como fazer para as seguintes situações:

 

1º) Como fazer para que o componente ACBrNFSe não exiba a mensagem "RPS já informado";

 

2º) Quando existir um RPS já informado, como eu faço para carregar o componente ACBrNFSe com os dados desse RPS e atualizar o banco de dados?

 

Neste 2º caso, estou fazendo assim:

ACBrNFSe1.WebServices.ConsLote.Executar;

 

Depois disso, tento jogar para a tabela o resultado da consulta assim:

Table2.FieldByName('numerolote').AsString := ACBrNFSe1.WebServices.ConsLote.NFSeRetorno.ListaNfse.CompNfse.Items.Nfse.NumeroLote;

 

Só que, fazendo desta forma, dá erro ao ler a propriedade do componente.

 

Obrigado,

 

Rogério.

Link para o comentário
Compartilhar em outros sites

  • Consultores

Bom dia Rogério,

 

No meu entendimento, você tem que garantir que não ocorra o envio de um RPS já enviado, sendo assim a sua aplicação tem que possuir um controle sobre o numero do RPS.

 

O usuário já mais pode informar esse numero, é a sua aplicação que tem que tem que gerar um numero sequencial e não permitir que o usuário o altere.

Consultor SAC ACBr

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

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros sites

Ítalo,

 

Seu entendimento é perfeito e é dessa forma que minha aplicação funciona.

 

O problema é que a porcaria do provedor Ginfes dá muito pau. De 10 notas enviadas, 11 dá problema.

 

Desta forma, o cliente sempre recorre ao nosso suporte técnico aqui e ele não entende que o problema é com o Ginfes.

 

Então, o que eu quero fazer é quando identificar "uma duplicidade", o próprio sistema se encarrega de resolver isso sem que o usuário fique nos atormentado.

 

Se houver uma cStat conforme existe no ACBrNFe, já vai resolver meu problema. De acordo com a tabela de erro, eu faço o tratamento que eu queira fazer e não fico me preocupando se o Ginfez vai dar pau ou não e o cliente não fica nos perturbando.

 

Entendeu onde quero chegar?

 

Obrigado,

 

Rogério.

Link para o comentário
Compartilhar em outros sites

Olá, com a Betha acontece quase a mesma coisa, fiz o seguinte:

Deixei que continue aparecendo a mensagem de duplicidade, em seguida,

pergunto ao usuário se quer atualizar a base local.

Se o usuário diz sim uso o comando de consulta RPS para pegar o número da

NFS-e e mais alguma coisa que precisar e já faz a impressão.

 

Claro que se tiver como não exibir a mensagem de duplicidade e fazer tudo automático

é melhor. Porém assim foi a solução que encontrei.

Link para o comentário
Compartilhar em outros sites

Bom dia Jefferson!

 

Não sei o que estou fazendo de errado nessa rotina. Veja como estou fazendo:

 

try

 

...

 

except

 

//aqui verifica se o RPS existe no BD. Se não existir, implementa a informação abaixo

 

ACBrNFSe1.WebServices.ConsLote.Executar;

 

Table2.Append;

Table2.FieldByName('codempresa').AsInteger := codempresa;
Table2.FieldByName('numerolote').AsString := WebServices.ConsLote.NFSeRetorno.ListaNfse.CompNfse.Items[0].Nfse.NumeroLote;
Table2.FieldByName('numeronfse').AsString := WebServices.ConsLote.NFSeRetorno.ListaNfse.CompNfse.Items[0].Nfse.Numero;
Table2.FieldByName('numerorps').AsString := WebServices.ConsLote.NFSeRetorno.ListaNfse.CompNfse.Items[0].Nfse.IdentificacaoRps.Numero;
Table2.FieldByName('datahora').AsDateTime := WebServices.ConsLote.NFSeRetorno.ListaNfse.CompNfse.Items[0].Nfse.DataEmissaoRps;
Table2.FieldByName('cpfcnpj').AsString := WebServices.ConsLote.NFSeRetorno.ListaNfse.CompNfse.Items[0].Nfse.Tomador.IdentificacaoTomador.CpfCnpj;
Table2.FieldByName('valor').AsFloat := WebServices.ConsLote.NFSeRetorno.ListaNfse.CompNfse.Items[0].Nfse.Servico.Valores.ValorServicos;
Table2.FieldByName('valoriss').AsFloat := WebServices.ConsLote.NFSeRetorno.ListaNfse.CompNfse.Items[0].Nfse.Servico.Valores.ValorIss;
Table2.FieldByName('valorpis').AsFloat := WebServices.ConsLote.NFSeRetorno.ListaNfse.CompNfse.Items[0].Nfse.Servico.Valores.ValorPis;
Table2.FieldByName('valorcofins').AsFloat := WebServices.ConsLote.NFSeRetorno.ListaNfse.CompNfse.Items[0].Nfse.Servico.Valores.ValorCofins;
Table2.FieldByName('valorir').AsFloat := WebServices.ConsLote.NFSeRetorno.ListaNfse.CompNfse.Items[0].Nfse.Servico.Valores.ValorIr;
Table2.FieldByName('valorcsll').AsFloat := WebServices.ConsLote.NFSeRetorno.ListaNfse.CompNfse.Items[0].Nfse.Servico.Valores.ValorCsll;
Table2.FieldByName('valorinss').AsFloat := WebServices.ConsLote.NFSeRetorno.ListaNfse.CompNfse.Items[0].Nfse.Servico.Valores.ValorInss;
Table2.FieldByName('protocolo').AsString := WebServices.ConsSitLote.Protocolo;
Table2.FieldByName('codverificacao').AsString := WebServices.ConsLote.NFSeRetorno.ListaNfse.CompNfse.Items[0].Nfse.CodigoVerificacao;
Table2.Post;

 

end;

 

Só que ao ler o número do lote o componente já dispara uma mensagem de erro: List index out of bounds (0)

 

WebServices.ConsLote.NFSeRetorno.ListaNfse.CompNfse.Items[0].Nfse.NumeroLote;

 

Veja que dentro do colchetes, está o nº 0 e nele já coloquei 1, 2, 3 e etc e nada passa.

 

Sabes me dizer onde estou errando?

 

Obrigado,

 

Rogério.

Link para o comentário
Compartilhar em outros sites

Dá uma olhada como estou fazendo no arquivo TXT em anexo.

Vale lembrar que todos os comandos que estou usando peguei no modelo que a ACBR fornece

porém a sequência que escolhi foi a única que funcionou, pelo menos comigo. principalmente a de consulta.

Também descobri que não é possível retorno de tudo, então me detive no que funcionou para mim.

Espero que consiga achar o erro com isso.

envio rps.txt

Link para o comentário
Compartilhar em outros sites

Bom dia Jefferson, tudo bem?

 

Na verdade, o que você mandou não é a solução para a minha dúvida. Estou com dúvidas/dificuldades no componente ACBrNFSe.

 

Quando o Ginfes retorna que o RPS já foi informado, quero fazer a consulta e trazer todos os dados possíveis para alimentar o BD e dar continuidade.

 

Para consultar o RPS faço da seguinte forma:

 

ACBrNFSe1.WebServices.ConsLote.Executar;

 

Depois, para ler os dados do RPS consultado, faço da seguinte forma:

 

numerolote := WebServices.ConsLote.NFSeRetorno.ListaNfse.CompNfse.Items[0].Nfse.NumeroLote;

 

Só que ao ler o número do lote do componente conforme descrito na linha acima, retorna o seguinte erro:

 

List index out of bounds (0)

 

Então, não sei onde está o erro na leitura dessa informação no componente.

 

Eu gostaria de saber como você está pegando a informação do RPS lá no Ginfes, trazendo para o componente e como você está lendo o componente. Entendeu?

 

Obrigado,

 

Rogério.

Link para o comentário
Compartilhar em outros sites

Na consulta é um processo... pelo menos com o provedor BETHA, que é o que usamos aqui,

fiz várias tentativas de consultar os dados enviados e a única forma de consulta que consegui as

informações que eu precisava foi as que estão no arquivo em anexo. Tentei diversas outras que estavam

no modelo deles mas só consegui receber dados dessa forma. Na postagem anterior não aparecia como

faço a consulta, nessa apresento apenas a consulta. Espero que ajude.

Consulta do RPS.txt

Link para o comentário
Compartilhar em outros sites

  • 5 meses depois ...

Se não tiver processado ainda na prefeitura vc precisa fazer um consulta de Situacao, caso a nota esteja processada vc faz uma consulta por RPS então ele te retorna o XML pronto. 

Mas esse controle vc precisa implementar no seu sistema.

Por exemplo:

ACBrNFSe.ConsultarSituacao(CNPJ, INSC_MUNICIPAL,PROTOCOLO);
  if (ACBrNFSe.WebServices.ConsSitLote.Situacao = 4) then
  begin
    ACBrNFSe.ConsultarNFSeporRps(IntToStr(pRps), SERIE, TIPO, CNPJ, INSC_MUNICIPAL);
    ACBrNFSe.WebServices.ConsNfseRps.RetWS //esse é o XML de retorno na consulta

    //aqui faço a impressao e salvo o XML na base.
  end;

Eu uso assim no meu sistema e funciona 100%. No meu caso criei um Status de diferente onde trato o retorno do acbr e vejo se o ACBrNFSe.NotasFiscais.Items[0].NFSe.Situacao for um dos abaixo 

// 1 = Não Recebido
// 2 = Não Processado
// 3 = Processado com Erro
// 4 = Processado com Sucesso

se não for processado com sucesso então bloqueio a nota para que nao posso mais ser alterada.

E se no teu caso a nota não estiver processada ainda ainda deixo bloqueada, caso for um erro de informacao faço um update na nota para aberto e mostro o erro.

e assim por diante.

 

Depois que implementei isso nunca mais me incomodei, ate por que tinha vezes que na Betha, Pronim demorava 1 hora para processar a nota...

 

  • Curtir 1
 
 
 
Att. 
Oneide Luiz Schneider
Software Developer
Location: Chapecó / SC - Brazil
Link para o comentário
Compartilhar em outros sites

  • Este tópico foi criado há 3233 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.