Ir para conteúdo
  • Cadastre-se

dev botao

Erro ao limpar dados ACBrNFSe


BRAGUIROLLI
Ver Solução Respondido por BRAGUIROLLI,
  • Este tópico foi criado há 1341 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Boa tarde,

Tenho esse formulário, onde o cliente seleciona mais de uma NFS-e para emissão.

Tenho esse pequeno processo:

// PROCESSA AS NOTAS SELECIONADAS
    With cdsNotas Do
    Begin
      First;
      While (Not Eof) Do
      Begin
        Application.ProcessMessages;
        cdsNotas.FieldByName('NUMDOC').AsString;
        If (cdsNotas.FieldByName('MARDES').AsString = 'M') Then
        Begin
          ACBrNFSe.NotasFiscais.Clear;
          blnNFSValid := fGerarXmlNew(cdsNotas);
          If blnNFSValid Then
            Inc(intNFSGerad)
          Else
            Break;
        End;

        Next;
      End;
      First;

    End;

Na primeira passada como não tem nada configurado ele passa normal e transmite e imprimi a NFS-e. 

Mais ao sair da dela ou fazer uma segunda passagem limpando os dados ele apresenta o erro.

Na seguinte linha é dado o erro: ACBrNFSe.NotasFiscais.Clear;

Erro Ao Limpar.jpg

Codigo.txt

Editado por BRAGUIROLLI
Complementar
Link para o comentário
Compartilhar em outros sites

  • Moderadores

Acces Violation geralmente é quando tenta acessar um objeto que não está instânciado.

precisaria ver todo o trecho de código

mas vai uma sugestão, coloca o ponto de parada onde mencionou acima e quando chegar ali coloque o mouse sobre e veja se por acaso tu não tá destruindo ele em algum lugar dentro de alguma função que tem ali e tu não mandou

Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Black-02.png
 

 

Link para o comentário
Compartilhar em outros sites

9 horas atrás, Juliomar Marchetti disse:

Acces Violation geralmente é quando tenta acessar um objeto que não está instânciado.

precisaria ver todo o trecho de código

mas vai uma sugestão, coloca o ponto de parada onde mencionou acima e quando chegar ali coloque o mouse sobre e veja se por acaso tu não tá destruindo ele em algum lugar dentro de alguma função que tem ali e tu não mandou

Bom dia,

Já refiz varia vezes, e sempre dá o erro no mesmo lugar.

Se eu não limpar(Clear) ele continua adicionando e na impressão vai ter 1/N para impressão... onde eu uso o padrão 1 lote para 1 nota.

Tá anexado o código, se puder dar uma olhada, eu agradeço.

UntNFSe.txt

Link para o comentário
Compartilhar em outros sites

  • Moderadores

Faz o seguinte nesse trecho remove os with colocando o componente em cada

    With cdsNotas Do
    Begin
      First;
      While (Not Eof) Do
      Begin
        Application.ProcessMessages;
        cdsNotas.FieldByName('NUMDOC').AsString;
        If (cdsNotas.FieldByName('MARDES').AsString = 'M') Then
        Begin
          ACBrNFSe.NotasFiscais.Clear;
          blnNFSValid := fGerarXmlNew(cdsNotas);
          If blnNFSValid Then
            Inc(intNFSGerad)
          Else
            Break;
        End;

        Next;
      End;
      First;

    End;

 

Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Black-02.png
 

 

Link para o comentário
Compartilhar em outros sites

23 minutos atrás, Juliomar Marchetti disse:

Faz o seguinte nesse trecho remove os with colocando o componente em cada


    With cdsNotas Do
    Begin
      First;
      While (Not Eof) Do
      Begin
        Application.ProcessMessages;
        cdsNotas.FieldByName('NUMDOC').AsString;
        If (cdsNotas.FieldByName('MARDES').AsString = 'M') Then
        Begin
          ACBrNFSe.NotasFiscais.Clear;
          blnNFSValid := fGerarXmlNew(cdsNotas);
          If blnNFSValid Then
            Inc(intNFSGerad)
          Else
            Break;
        End;

        Next;
      End;
      First;

    End;

 

Feito, Loop está correto pega apenas as selecionadas...

Imagem em anexo, debug, na segunda passagem do loop. apenas mandei gerar o arquivo GerarNFSe; 

Debug.jpg

Editado por BRAGUIROLLI
Link para o comentário
Compartilhar em outros sites

  • Moderadores

Porque tem o with aqui:

image.png

sendo que aqui já usa ele mesmo

image.png

Será necessário depurar linha a linha e verificar que possui algum lugar que libera esse componente

coloque um ponto de parada e adicione  na watch esse texto : ACBrNFSe.NotasFiscais.Count

e veja o que ocorre.

Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Black-02.png
 

 

Link para o comentário
Compartilhar em outros sites

  • Solution

Solução paliativa.

Como meu padrão é uma Nota por Lote. Não uso mais o ACBrNFSe.NotasFiscais.Clear;

Tbem criei em RunTime o componente ACBRNFe, porem criando com Nil.

É criado e destruído a cada envio. 

Segue Código usado:

    ///////////////////////////////////
    // PROCESSA AS NOTAS SELECIONADAS
    ///////////////////////////////////
    cdsNotas.First;
    While (Not cdsNotas.Eof) Do
    Begin
      If (cdsNotas.FieldByName('MARDES').AsString = 'M') Then
      Begin
        objACBrNFSe := TACBrNFSe.Create(Nil);
        Try
          pSetaConfigAcbrNFSe(objACBrNFSe);
          pnlInfo.Caption := objACBrNFSe.Configuracoes.Geral.xProvedor;

          blnNFSValid := fGerarXmlNew(objACBrNFSe);
        Finally
          If AssigNed(objACBrNFSe) Then
            objACBrNFSe.FreeOnRelease;
        End;

        If (blnNFSValid) Then
        Begin
          Inc(intNFSGerad);
        End
        Else
        Begin
          Break;
        End;
      End;

      Application.ProcessMessages;

      cdsNotas.Next;
    End;
    cdsNotas.First;

 

Agradeço Juliomar Marchetti  pela disposição em me ajudar.

Link para o comentário
Compartilhar em outros sites

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

The popup will be closed in 10 segundos...