Ir para conteúdo
  • Cadastre-se

dev botao

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

Recommended Posts

Postado (editado)

Caros em relação a função ACBrNFe.Enviar

Em resposta anterior fui informado que o resultado de  ACBrNFe.Enviar(iLote,True,False)  = True significa que cStat = 100 e a nota foi autorizada.

Entretanto quando o resultado é false, significa que cStat <> 100 , estou tentando gravar e exibir de forma personalizada o problema.

Se tento usar o bloco abaixo quando o resultado da função é false, nada é exibido

with ACBrNFe.WebServices.Retorno do
            begin
              GravaRet1(iModelo,iNumero,iSerie,IntToStr(cStat),xMotivo,Recibo,Protocolo,DM.sqlConnMain);
              FrmRetorno := TFrmRetorno.Create(Application);
              try
                with FrmRetorno do
                  begin
                    MemoDados.Lines.Add('Erro no Envio !');
                    MemoDados.Lines.Add('');
                    MemoDados.Lines.Add('tpAmb     : '    +TpAmbToStr(tpAmb));
                    MemoDados.Lines.Add('versão    : ' + versao);
                    MemoDados.Lines.Add('verAplic  : ' + verAplic);
                    MemoDados.Lines.Add('cStat     : ' + IntToStr(cStat));
                    MemoDados.Lines.Add('xMotivo   : ' + xMotivo);
                    MemoDados.Lines.Add('cUF       : ' + IntToStr(cUF));
                    MemoDados.Lines.Add('Recibo    : ' + Recibo);
                    MemoDados.Lines.Add('Protocolo : '+Protocolo);
                    MemoDados.Lines.Add('');
                  end;
                FrmRetorno.ShowModal;
            

Se coloco a função em um bloco try .. except a mensagem de erro do componente some, mas também não consigo gravar e exibir 

Não existe a possibilidade de gravar essas informações ou exibir . Por favor o que estou fazendo de errado ?

 

 

 

 

Editado por Antonio Carlos L
  • Consultores
Postado

Boa tarde Antonio,

Quando o Enviar retorna False significa que algum erro ocorreu no envio ou no retorno, não tem nada haver com o status.

Se o retorno foi True você deve ler o conteúdo de cStat, nos manuais e notas técnicas possuem uma tabela com os códigos retornado em cStat e seu significado.

Mas lembre-se que a descrição você pode obter também pela propriedade xMotivo.

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

Muito obrigado Italo pela resposta, mas fiquei confuso, desculpe.

Quando o retorno é True, OK , a nota foi autorizada, cStat = 100 esta gravando corretamente.

Mas veja se o retorno foi False significa que ocorreu um problema qualquer, cStat <> 100 . pois então eu quero gravar esse retorno.

Ocorre que se uso :

if not ACBrNFe.Enviar(iLote,True,False)  then

   with ACBrNFe.WebServices.Retorno do
            begin
                GravaRet1(iModelo,iNumero,iSerie,IntToStr(cStat),xMotivo,Recibo,Protocolo,DM.sqlConnMain);
            end;  

Acho que a pergunta seria : Usando ACBrNFe.WebServices.Retorno quando ACBrNFe.Enviar = False não retorna informação ? Se sim qual devo utilizar ?

Obrigado

Postado

Obrigado Italo, entendo, e você falando parece ser simples, desculpe minha ignorância ...

ANTES de postar fiz a implementação abaixo e não obtive exito.

try

  if ACBrNFe.Enviar(iLote,True,False) then

     begin

          O cStat = 100 nota autorizada vida que segue esta funcionando 100%

     end;

except

     begin

        Quando o resultado é False ( cStat <> de 100 ) o componente dispara uma exception e acaba caindo aqui.

        Entretanto se tento usar o bloco abaixo para gravar , não vem valores em cStat,xMotivo,Recibo,Protocolo

        Para pegar o retorno estou usado de forma correta ? 

            with ACBrNFe.WebServices.Retorno do
            begin
                GravaRet1(iModelo,iNumero,iSerie,IntToStr(cStat),xMotivo,Recibo,Protocolo,DM.sqlConnMain);
            end;  

    end;

end;

  • Consultores
Postado

Antonio,

Se o Enviar retornar True não significa que o cStat é igual a 100, mas sim que não ocorreu nenhum erro de conexão com a SEFAZ.

Portanto no bloco entre begin end; que esta antes do except você tem que checar o valor de cStat, bem como as demais informações.

Se o cStat = 100 significa que a nota foi autorizada, caso contrário ela pode ter sido denegada ou rejeitada.

Já o bloco begin end; após o except você que tem apresentar uma tela ao usuário que algum problema técnico ocorreu, neste caso pode ter sido antes do envio ou após o envio.

A recomendação neste caso é primeiro levar em consideração que o problema foi após o envio, neste caso devemos carregar o componente o o XML da nota enviada e realizar uma consulta.

Se realmente o problema ocorreu após o envio, teremos como retorno o protocolo de autorização ou a rejeição da nota por esta conter dados incorretos.

Por outro lado se recebermos uma mensagem acusando que a nota não consta no banco de dados da SEFAZ, concluímos que o problema ocorreu no envio, sendo assim devemos providenciar o reenvio da mesma.

Toda nota rejeitada devemos efetuar a correção do dado errado e enviar novamente a nota com o mesmo numero.

Por outro lado uma nota denegada, significa que o destinatário possui algum problema no Fisco, logo a SEFAZ não autoriza a venda a essa pessoa.

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)

Caro ITALO, agora a coisa ficou clara.

Desculpe eu ter teimando no Result = True é porque o cStat=100

Mas veja eu perguntei isso e a resposta   http://www.projetoacbr.com.br/forum/topic/25062-duvidas-acbrnfeenviar-e-possivel-bug-primeiro-item-sendo-renomeado/ 

Conforme pode ver a resposta que recebi do Forum foi de que o retorno é True se cSTAT = 100.

 

Com base em sua explicação

"Já o bloco begin end; após o except você que tem apresentar uma tela ao usuário que algum problema técnico ocorreu, neste caso pode ter sido antes do envio ou após o envio.

A recomendação neste caso é primeiro levar em consideração que o problema foi após o envio, neste caso devemos carregar o componente o o XML da nota enviada e realizar uma consulta.

a - Devemos salvar também o XML de envio, creio que depois do Gerar, antes do Enviar para ser utilizado nessa contigencia ?

Se realmente o problema ocorreu após o envio, teremos como retorno o protocolo de autorização ou a rejeição da nota por esta conter dados incorretos."

b - Então quer dizer que havendo erro não adianta eu tentar pegar as informações pelo bloco 

with ACBrNFe1.WebServices.Retorno do
  begin

  end

no máximo eu terei a mensagem retornada por E.Message com a mensagem interna do componente

 

"Por outro lado se recebermos uma mensagem acusando que a nota não consta no banco de dados da SEFAZ, concluímos que o problema ocorreu no envio, sendo assim devemos providenciar o reenvio da mesma."

Entendido perfeito !

Toda nota rejeitada devemos efetuar a correção do dado errado e enviar novamente a nota com o mesmo numero.

Entendido perfeito !

Por outro lado uma nota denegada, significa que o destinatário possui algum problema no Fisco, logo a SEFAZ não autoriza a venda a essa pessoa"

Entendido perfeito !

Muitíssimo obrigado, vou implementar as sua considerações.

 

 

 

Editado por Antonio Carlos L
  • Curtir 1
×
×
  • 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.