Ir para conteúdo
  • Cadastre-se

dev botao

Nota autorizada mesmo sem conexão de rede


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

Recommended Posts

Boa tarde, pesquisei nos tópicos algo relacionado ao meu problema e não achei, se caso existir outro tópico me perdoem. Uso o componente acbrnfe e capicom.

Estou com o seguinte problema:

Teste 1. Envio a primeira nota em homologação e tudo certo a nota é autorizada e feita a impressão e gravo no banco. Faço varias notas em sequencia e tudo certo.

Teste 2. Desativo a rede para simular problemas na internet na hora do envio e pra minha surpresa a nota é autorizada e quando debugo para ver que chave esta carregada no componente está carregada a chave da nota anterior e o xmotivo também da nota anterior que foi autorizada mesmo eu usando ACBrNFe1.NotasFiscais.Clear; antes de enviar a nota e no final da operação.

Meus passos são os seguintes:

1. ACBrNFe1.NotasFiscais.Clear;

2. Alimento o componente;

3. ACBrNFe1.NotasFiscais.Items[0].GravarXML();

4. arquivo := ACBrNFe1.NotasFiscais.Items[0].NomeArq;

5. ACBrNFe1.Enviar(1,False);

6. ACBrNFe1.NotasFiscais.Clear;
    ACBrNFe1.NotasFiscais.LoadFromFile(arquivo);
    ACBrNFe1.Consultar;

7. Se nota autorizada faço a impressão e gravo no banco.

Se eu estiver fazendo algo errado então peço a ajuda dos colegas.

Link para o comentário
Compartilhar em outros sites

Pois e. Tem um tal de cache no Windows, dai não precisa dizer mais nada.
Mesmo sem conexão a informação está no cache, mas, observe que neste caso, o arquivo que está sendo chamado é o mesmo da NFe anterior.

Eu particularmente só salvo a NFe quando assino, dai, salvo com ACBrNFe1.NotasFiscais.Items[0].GravarXML(Arquivo, Pasta);

Quando vou enviar, limpo ACBrNFe1.NotasFiscais.Clear; Apos ACBrNFe1.NotasFiscais.LoadFromFile( nome do arquivo que salvei );

Ainda não tive o problema mencionado.

att.

 

 

 

_____________

Prates, Agnaldo

Link para o comentário
Compartilhar em outros sites

Eu utilizo o componente na seguinte sequência e nunca tive problemas;

1. ACBrNFe1.NotasFiscais.Clear;

2. Alimento o componente;

3. ACBrNFe1.Valida ;

4. ACBrNFe1.Assina;

5. ACBrNFe1.Enviar(1,False);

6. ACBrNFe1.NotasFiscais.Items[0].GravarXML();

7. arquivo := ACBrNFe1.NotasFiscais.Items[0].NomeArq;

8. Salva no Banco(Arquivo) ;

Tente dessa forma.

Sistema de Automação Comercial para diversos segmentos
NF-e, NFC-e, SPED Fiscal - www.arenasoft.com.br

Link para o comentário
Compartilhar em outros sites

O Valida e Assina já esta dentro do Enviar. Mas vou tentar. Valeu

Observei no seu método que você salva o XML antes mesmo de enviar, acho que pode esta ai o problema, você tem que esperar o envio, porque é ai que o componente atualiza o XML com os dados do protocolo e depois você o salva em disco.

Sistema de Automação Comercial para diversos segmentos
NF-e, NFC-e, SPED Fiscal - www.arenasoft.com.br

Link para o comentário
Compartilhar em outros sites

Eu coloqueis os passos daquela forma mas eu não fazia assim eu simplesmente alimentava o componente e enviava e esperava pelo cStat = 100 para gravar e ja acontecia isso. Mas vou tentar o seguinte vou criar o componente ao invés de colocar no form e depois do envio da nota eu dou um componente.free talvez assim funcione.

Link para o comentário
Compartilhar em outros sites

Bom dia Pessoal, fiz os testes criando o componente e instanciando ele quando eu entro na rotina para enviar a nota. Obrigado a todos pela ajuda.

No CarregaComponente

  NFE := TACBrNFe.Create(Self);

  DF := TACBrNFeDANFEFR.Create(Self);

  NFE.DANFE := DF;

No DestroiComponente

  if Assigned(NFE) then
    NFE.Destroy;
  if Assigned(DF) then
    DF.Destroy;

Rotina de Envio da Nota

  if(ValidaNfe = False) then
    Exit
  else
    begin
      dm_principal.CarregaComponente; //Aqui crio o componente
      dm_principal.DF.FastFile := TConfig.instancia.Danfe.FastFile;
      dm_principal.NFE.NotasFiscais.Clear;
      //Alimenta o componente
      if(dm_principal.GeraNfe)then //passo 1
        begin
          dm_principal.NFE.NotasFiscais.Items[0].GravarXML();
          arquivo := dm_principal.NFE.NotasFiscais.Items[0].NomeArq;
          //Enviar
          if(dm_principal.NFE.Enviar(1,False))then
            begin
              dm_principal.NFE.NotasFiscais.Clear;
              dm_principal.NFE.NotasFiscais.LoadFromFile(arquivo);
              dm_principal.NFE.Consultar;
              if(RespostaEnviar)then //Aqui gravo no banco e faço a impressão se cStat = 100
                begin
                  if(dm_principal.NFE.WebServices.Retorno.xMotivo = 'Autorizado o uso da NF-e')then
                     FinalizaNota
                  else if(Copy(dm_principal.NFE.WebServices.Retorno.xMotivo,0,29) = 'Rejeicao: Duplicidade de NF-e')then
                    MessageDlg('Tente novamente',mtWarning, [mbOK],0)
                  else
                    dm_principal.VoltaNumeroNfe;
                end
              else
                dm_principal.VoltaNumeroNfe;
            end
          else
            dm_principal.VoltaNumeroNfe; 
        end
      else
        ac_cancelar.Execute;
    end;
  dm_principal.DestroiComponente; Aqui destruo o componente

Link para o comentário
Compartilhar em outros sites

  • Moderadores

Eduardo,

Fiz uma correção na unit ACBrNFeWebServices.pas para ver se conseguimos resolver o problema relatado.

Você pode testar para ver se com a solução proposta podemos resolver essa situação?

Segue anexo a unit citada, nela inclui nas classes TNFeRecepcao e TNFeRetRecepcao uma procedura para Limpar os registros antes do envio.

Quando o envio ocorre na function TWebServices.Envia e nela ocorre um erro os valores carregados da nota anterior se mantinham nos objetos FEnviar e FRetorno.

Vi que você fez inúmeros testes e resolveu o seu problema criando o componente em tempo de execução, mas se puder fazer  mais esses testes, poderia voltar seu código original.

 

ACBrNFeWebServices.pas

Link para o comentário
Compartilhar em outros sites

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