Ir para conteúdo
  • Cadastre-se

dev botao

TACBrTEFD.Free - Travando


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

Recommended Posts

Olá Pessoal,

Estava com meus fontes do ACBr sem atualizar desde 2018, então resolvi atualizar para pegar as últimas atualizações.

Exclui todo o trunk e baixei novamente (Agora estou na Revision 20214), fiz a compilação e reinstalação de todos os componentes ACBR (Uso Delphi XE 10)

Crio via Fonte, o componente "TACBrTEFD" conforme exemplo abaixo

FACBrTEFD: TACBrTEFD;

Fui executar meu roteiro de testes com esta build citada e a aplicação está demorando mais em alguns pontos e outros chega a trava, conforme abaixo:

FACBrTEFD.Inicializar(gpCliSiTef); >>>>>>> Este método Demorava cerca de 5,8 a 6 segundos, passou a levar 11,8 a 12 segundos para executar.

FACBrTEFD.Free; >>>>>>> Este método, levava alguns milisegundos, agora está demorando mais de 5 minutos ou até travando as vezes.

Alguém já tinha percebido esse problema? Conhece alguma solução?

Achei inviável utilizar tendo esses problemas, a princípio acho que vou retornar para a versão que estava anteriormente.

Link para o comentário
Compartilhar em outros sites

  • Fundadores

Estou trabalhando ativamente no ACBrTEFD e não noto esses problemas...

Sugiro baixar os fontes em uma nova pasta, e fazer uma instalação completa, marcando a opção de remover instalações anteriores...

Faça ainda, testes com o TEFDemoNF

 

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

Oi Daniel, Eu fiz isso, já tinha baixado em uma nova pasta..

Retornei da Revision 20214 para a revision 20052 e o problema parou.

Então limpei tudo e atualizei para revision 20137 e o problema no .Free já ocorre.

Então limpei tudo e atualizei para revision 20052 novamente e não ocorre o problema no .Free

Com certeza algum commit entre a revision 20052 e 20137 está ocasionando o problema.

Sobre o método de inicialização, na review 20052 continua mais lento do que a versão de 2018.. parece que foi adicionado algo que pesou.. mas não chega a ser um grande problema, o problema maior mesmo é no .Free que trava e demora minutos.

FACBrTEFD.Inicializar(gpCliSiTef); >>>>>>> Este método Demorava cerca de 5,8 a 6 segundos, passou a levar 11,8 a 12 segundos para executar.

 

ACBR_Sitef.png

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

@Daniel Simoes O problema ocorreu no commit da revision 20137 (no revision 20136 funciona corretamente o .Free, e quando atualizo para a versão 20137 ocorre problema).

Revision: 20137
Author: dopi
Date: sábado, 20 de junho de 2020 10:53:48
Message:
-- ACBrTEFD, ACBrTEFDClass --
[+] Adicionado novo modelo de TEF Dedicado, para suportar "TEF PayGo Web Libc"
    Modelo: gpPayGoWeb,  Classe: TEFPayGoWeb: TACBrTEFDPayGoWeb;

-- ACBrTEFDClass --
[-] Correção para preencher a Segunda Via, quando apenas a Via Completa é informada

-- TACBrTEFDPayGoWeb --
[+] Nova classe, para suportar TEF Dedicado, "TEF PayGo Web Libc"
    - Necessita da Biblioteca 'PGWebLib.dll' (Windows) ou 'PGWebLib.so' (Linux)
    - Download da Biblioteca e Manuais em: https://www.paygo.com.br/links-e-manuais/
[*] Projeto "TEFDDemoNF", modificado para suportar e demonstrar o novo Modelo de TEF

-- ACBrTEFPayGo --
[+] Mapeamento do campo "729" para "Resp.Confirmar"
[-] Correção para que Resp.NFCeSAT.UltimosQuatroDigitos contenha apenas os 4 últimos digitos do BIN

-- ACBrTEFComum --
[+] Classe "TACBrTEFResp". Adição de comentários nos fontes, para melhor descrição
    de algumas propriedades
[+] Classe "TACBrTEFResp". Adição das propriedades:
    Confirmar: Boolean -> Se True, a Resposta requer uma Confirmação (CNF)
    QRCode: String -> Com Conteúdo do QRCode a ser exibido, quando usando carteiras Digitais
    (por: DSA)    
----
Modified : /trunk2/Fontes/ACBrTEFD/ACBrTEFDClass.pas
Modified : /trunk2/Fontes/ACBrTEFD/ACBrTEFDPayGo.pas
Modified : /trunk2/Fontes/ACBrTEFD/ACBrTEFComum.pas
Modified : /trunk2/Fontes/ACBrTEFD/ACBrTEFD.pas

 

Link para o comentário
Compartilhar em outros sites

  • Fundadores
Agora, tiagok disse:

@Daniel Simoes O problema ocorreu no commit da revision 20137 (no revision 20136 funciona corretamente o .Free, e quando atualizo para a versão 20137 ocorre problema).

Não compreendi o problema que você quer descrever... como você pode ver no Change-log... nenhuma dessas Units é a da CliSitef

Por favor use o TEFDemoNF, e descreva um passo a passo, de como reproduzir o problema....

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

  • Fundadores
4 minutos atrás, Daniel Simoes disse:

Por favor use o TEFDemoNF, e descreva um passo a passo, de como reproduzir o problema....

 

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

@Daniel Simoes

O problema está aqui:

Método >>> destructor TACBrTEFD.Destroy;
>>> fTEFList.Free;  // Destroi Lista de Classes TEF e Objetos internos

Ele sai destruindo todos os objetos da lista, e quando chega no fTimerOcioso.Free, do pacote  (ACBrTEFPayGoWebComum.pas) trava.

destructor TACBrTEFPGWebAPI.Destroy;
>>> fTimerOcioso.Free;

Comentei a linha acima e recompilei o ACBR e resolveu.

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

  • Fundadores

Prezado... não vou mais interagir no tópico... até você responder conforme o solicitado...

Citar

Por favor use o TEFDemoNF, e descreva um passo a passo, de como reproduzir o problema....

 

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

  • Fundadores

Isso me leva a crer, que você tem mudança nos fontes do ACBr, do seu lado.. ou ainda copiou alguma das Units do ACBr, para as pastas do seu projeto...

Só consigo investigar um possível problema, se eu consigo reproduzi-lo...

Outro fato que você pode observar... é que essas modificações já estão há algum tempo no SVN.. e não há relatos de problemas semelhantes ao seu, aqui no fórum...

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

9 minutos atrás, Daniel Simoes disse:

Isso me leva a crer, que você tem mudança nos fontes do ACBr, do seu lado.. ou ainda copiou alguma das Units do ACBr, para as pastas do seu projeto...

Só consigo investigar um possível problema, se eu consigo reproduzi-lo...

Outro fato que você pode observar... é que essas modificações já estão há algum tempo no SVN.. e não há relatos de problemas semelhantes ao seu, aqui no fórum...

Olá Daniel,

Não tenho modificações nos fontes ACBr, apenas baixei o trunk2, última versão e executei o ACBrInstall_Trunk2.exe para compilar e instalar, nada além disso.

Como falei, o meu software ele instancia a classe:

var

 FACBrTEFD: TACBrTEFD;

begin

FACBrTEFD.Inicializar(gpCliSiTef);

FACBrTEFD.Free;

end;

se você fizer isso já vai conseguir simular...

Se quiser pode fechar o tópico, como eu não uso o PayGoWeb, eu comentei o carregamento dele e pronto, pra mim resolveu.. só quis comentar a solução, pois acredito que possa contribuir com outras pessoas que venham a ter o mesmo problema.

Abraço e obrigado pela atenção

 

 

Link para o comentário
Compartilhar em outros sites

  • Fundadores

isso não é de possível execução..  pois para inicializar o componente, você precisaria programar os eventos...

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

  • Moderadores
5 horas atrás, tiagok disse:

var

 FACBrTEFD: TACBrTEFD;

begin

FACBrTEFD.Inicializar(gpCliSiTef);

FACBrTEFD.Free;

end;

Estranho fiz exatamente isso e ele gerou problema já no começo, pois o mesmo não está nem criando o componente e conforme citado não atribuiu os eventos pois depois que fiz a criação começou os problemas, pois nenhum evento necessário estava programado.

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
12 horas atrás, Juliomar Marchetti disse:

Estranho fiz exatamente isso e ele gerou problema já no começo, pois o mesmo não está nem criando o componente e conforme citado não atribuiu os eventos pois depois que fiz a criação começou os problemas, pois nenhum evento necessário estava programado.

Aparentemente, o problema ocorre no meu caso, porque a minha implementação das chamadas ACBR, ficam dentro de uma DLL que é carregada e utilizada pelo sistema... Talvez por ser dentro da DLL tenha alguma limitação na questão do Timer ali que não se destroi... Fiz uma aplicação de teste, com a implementação diretamente em um formulário simples, e não ocorreu o problema..  acho que só consegue simular se for por uma DLL mesmo...

Podem fechar este tópico, eu acabei resolvendo pra mim de outra forma.. mas se quiserem testar, eu joguei abaixo alguns trechos para montagem de um exemplo:

Exemplo:

>>>> Criar uma DLL e exportar o método com uma implementação como esta:

uses
  ACBrTEFD,
  ACBrTEFDClass,
  ACBrTEFDCliSiTef;

private
    FACBrTEFD: TACBrTEFD;
    FEstadoECF: String;

  FACBrTEFD := TACBrTEFD.Create(nil);
  FACBrTEFD.TEFCliSiTef.EnderecoIP := 'localhost';
  FACBrTEFD.TEFCliSiTef.CodigoLoja := '00000000';
  FACBrTEFD.TEFCliSiTef.NumeroTerminal := 'SE000001';
  FACBrTEFD.TEFCliSiTef.PortaPinPad := 3;
  FACBrTEFD.TEFCliSiTef.NumVias := 2;
  FACBrTEFD.SuportaSaque := False;
  FACBrTEFD.SuportaDesconto := False;
  FACBrTEFD.OnExibeMsg := Sitef_ExibirMensagem;
  FACBrTEFD.OnAguardaResp := AguardaResposta;
  FACBrTEFD.OnInfoECF := InfoECF;
  FACBrTEFD.OnComandaECF := ComandaECF;
  FACBrTEFD.OnComandaECFAbreVinculado := ComandaECFAbreVinculado;
  FACBrTEFD.OnComandaECFImprimeVia := ComandaECFImprimeVia;
  FACBrTEFD.OnBloqueiaMouseTeclado := BloqueiaMouseTeclado;
  FACBrTEFD.TEFCliSiTef.OnExibeMenu := Sitef_ExibirMenu;
  FACBrTEFD.TEFCliSiTef.OnObtemCampo := Sitef_ObterCampo;
  FEstadoECF := 'V';
  FACBrTEFD.Inicializar(gpCliSiTef);
  FACBrTEFD.DesInicializar(gpCliSiTef);

  // Aqui vai ocorrer o problema (aparentemente apenas se isso tudo estiver dentro de uma DLL)
  FACBrTEFD.Free;

------------

Métodos para testar assinatura:

procedure Sitef_ExibirMensagem(Operacao: TACBrTEFDOperacaoMensagem; aMensagem: string; var AModalResult: TModalResult);
begin
  // teste
end;

procedure Sitef_ExibirMenu(aTitulo: string; aOpcoes: TStringList; var aItemSelecionado: Integer; var aVoltarMenu: Boolean);
begin
  // teste
end;

procedure Sitef_ObterCampo(aTitulo: string; aTamanhoMinimo, aTamanhoMaximo, aTipoCampo: Integer; aOperacao: TACBrTEFDCliSiTefOperacaoCampo; var aResposta: AnsiString; var aDigitado, aVoltarMenu: Boolean);
begin
  // teste
end;

procedure ComandaECF(Operacao: TACBrTEFDOperacaoECF; Resp: TACBrTEFDResp; var RetornoECF: Integer);
begin
  // teste
end;

procedure AguardaResposta(Arquivo: string; SegundosTimeOut: Integer; var Interromper: Boolean);
begin
  // teste
end;

procedure ComandaECFAbreVinculado(COO, IndiceECF: string; Valor: Double; var RetornoECF: Integer);
begin
  // teste
end;

procedure ComandaECFImprimeVia(TipoRelatorio: TACBrTEFDTipoRelatorio; Via: Integer; ImagemComprovante: TStringList; var RetornoECF: Integer);
begin
  // teste
end;

procedure InfoECF(Operacao: TACBrTEFDInfoECF; var RetornoECF: string);
begin
    // Simula o tempo de resposta da impressora
  Sleep(100);

  case Operacao of
    ineEstadoECF:
      begin
        RetornoECF := FEstadoECF;
      end;
    ineSubTotal:
      begin
        RetornoECF := '999999';
      end;
    ineTotalAPagar:
      begin
        RetornoECF := '0';
      end;
  end;
end;

procedure BloqueiaMouseTeclado(Bloqueia: Boolean; var Tratado: Boolean);
begin
  // teste
end;

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

  • Administradores

Bom dia.

Obrigada por informar, manteremos o tópico aberto para caso surja alguma novidade.

Att.

Consultora SAC ACBr

Juliana Tamizou

Gerente de Projetos ACBr / Diretora de Marketing AFRAC
Ajude o Projeto ACBr crescer - Seja Pro

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

Link para o comentário
Compartilhar em outros sites

  • Fundadores

Por favor verifique se seus fontes estão atualizados...

Eu reverti recentemente uma modificação que havia feito na Unit ACBrBase.pas, no "TACBrThreadTimer.Destroy"
 

destructor TACBrThreadTimer.Destroy;
begin
  fsEnabled := False;
  Terminate;
  fsEvent.SetEvent;  // libera Event.WaitFor()
  if not Terminated then   // <---- Essa linha havia sido removida...
    WaitFor;

  fsEvent.Free;
  inherited Destroy;
end;

 

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

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