Jump to content

dev botao

ACBrNFe.Enviar Duvida por favor


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

Recommended Posts

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 ?

 

 

 

 

Edited by Antonio Carlos L
Link to comment
Share on other sites

  • Consultores

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

  • Consultores

Antonio,

O Enviar tem que ficar dentro de um Try.

E você tem que se basear pelo valor de cStat e não pelo valor True ou False retornado pela função Enviar.

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

Link to comment
Share on other sites

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;

Link to comment
Share on other sites

  • Consultores

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

Link to comment
Share on other sites

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.

 

 

 

Edited by Antonio Carlos L
  • Like 1
Link to comment
Share on other sites

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.

The popup will be closed in 10 seconds...