Jump to content

Delphi chamada_delphi.png acbr.png

C6 chamada_c6.png botao.png

Problemas no TEF PayGoWeb, com Aplicativo rodando em várias instâncias simultaneamente


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

Recommended Posts

  • Fundadores

O TEF por API/DLL, PayGoWeb, é muito rápido e simples de instalar... Mas você deve tomar alguns cuidados para que ele funcione corretamente nos seus clientes Finais

Se você está recebendo alguma das msgs de erro abaixo:

  • SEQUENCIA INVALIDA DO NUMERO DE SOLICITACAO
  • ERRO DE AUTENTICACAO DO PONTO DE CAPTURA

A causa desse problema, pode ser o Fato de sua aplicação, que carrega a DLL da PayGoWeb, estar sendo executada em várias instâncias, ao mesmo tempo, na mesma máquina...
Ou seja, o Operador executou a aplicação duas ou mais vezes, e está operando o TEF em várias janelas da sua mesma aplicação...  Isso gera uma série de problemas, e deve ser evitado...

  • O PinPad não poderá ser acessado em modo compartilhado, por várias instâncias da DLL da PayGoWeb, ao mesmo tempo, e você pode receber erros de acesso ao PinPad
  • As tabelas internas da PayGoWeb, que ela cria em sua Pasta de Trabalho podem perder o sincronismo, pois agora temos várias instâncias da DLL da PayGoWeb gravando nas mesmas tabelas...

Portanto, devemos evitar que a aplicação de Frente de Caixa, possa ser aberta várias vezes, na mesma máquina...

Uma das técnica para fazer isso, é usar a API do Windows, com o método CreateMutex

Veja um exemplo, abaixo, usando Delphi.

program SeuPrograma;

uses
  Interfaces, sysutils, IniFiles, Windows, Dialogs, Forms, .... ;

{$R *.res}

var
  Ini : TIniFile;
  UmaInstancia : Boolean;
begin
  Ini := TIniFile.Create(  ExtractFilePath(Application.ExeName)+ 'Config.ini' ) ;
  try
     UmaInstancia := Ini.ReadBool('Config', 'Uma_Instancia', false);
  finally
     Ini.Free;
  end;
  Application.Initialize;

  if UmaInstancia then
  begin
    CreateMutex(nil, True, 'NomeDoSeuPrograma');      // <--------------- AQUI -------------
    if GetLastError = ERROR_ALREADY_EXISTS then
    begin
      MessageDlg('NomeDoSeuPrograma','O programa já está em execução', mtError, [mbOK], 0);
      Application.Terminate;
      exit ;
    end;
  end;
  
  Application.CreateForm(TFrmMain, FrmMain) ;
  Application.Run;
end. 

 

Ou Seja, o Primeiro Mutex será criado com sucesso... Mas quando a segunda aplicação for executada, haverá um erro na criação do Mutex, e isso forçará a entrada no IF que aborta a execução do programa, fechando a segunda instância...

  • Like 5
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 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.