Ir para conteúdo
  • Cadastre-se

dev botao

Thread utilizada no curso Contingência NFC-e


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

Recommended Posts

  • Membros Pro
Postado

Boa tarde,

Estou fazendo alterações no meu sistema para enviar a contingência NFC-e corretamente.

Estou criando uma thread nova adaptando para minha realidade. 

Nesse primeiro momento preciso criar apenas 2 rotinas nessa Thread.

A primeira é para verificar se a receita está online e sair do modo contingência.

A segunda é, caso a receita estiver ok, enviar os cupons emitidos offline.

Essas 2 rotinas eu preciso fazer conforme o exemplo do curso, ou seja, depois de x minutos o sistema verificar e executar.

Alguém poderia me dar uma luz de onde eu posso encontrar na unit uContingenciaNFCe essas rotinas pra tirar como exemplo?

Grato desde já

 

Rodrigo Cardilo

Card System Info

[email protected]

  • Moderadores
Postado
15 minutos atrás, Rodrigo Cardilo disse:

Boa tarde,

Estou fazendo alterações no meu sistema para enviar a contingência NFC-e corretamente.

Estou criando uma thread nova adaptando para minha realidade. 

Nesse primeiro momento preciso criar apenas 2 rotinas nessa Thread.

A primeira é para verificar se a receita está online e sair do modo contingência.

A segunda é, caso a receita estiver ok, enviar os cupons emitidos offline.

Essas 2 rotinas eu preciso fazer conforme o exemplo do curso, ou seja, depois de x minutos o sistema verificar e executar.

Alguém poderia me dar uma luz de onde eu posso encontrar na unit uContingenciaNFCe essas rotinas pra tirar como exemplo?

Grato desde já

 

tu assistiu o curso? se sim lá tu tem elas disponíveis para baixar

Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

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

 

  • Membros Pro
Postado
20 horas atrás, Juliomar Marchetti disse:

tu assistiu o curso? se sim lá tu tem elas disponíveis para baixar

Sim, assisti o curso, baixei os fontes e estou testando.

Porém, como não vou utilizar todas as rotinas do thread utilizada no curso resolvi montar minha própria Thread copiando o que eu realmente preciso na minha aplicação.

O primeiro problema que eu estou esbarrando é configurar a classe. Fiz uma procedure identica ao do curso:

procedure TDM1.GravarConfiguracaoContingencia;
var
  Config: TConfigContigencia;
begin
  Config := TConfigContigencia.Create;
  try
    Config.TempoTransmissaoOffLine := DM1.TB10910TEMPOTRANSMISSAOOFFLINE.Value;
    Config.TempoAtivarOnLine := DM1.TB10910TEMPOATIVARONLINE.Value;
    ContingenciaNFCe.SetConfigContingencia(Config);
  finally
    Config.Free;
  end;

end;

Porém dá erro de Access violation exatamente nesse ponto:

procedure TConfigContigencia.Assign(DeConfigContigencia: TConfigContigencia);
begin
  TempoTransmissaoOffLine := DeConfigContigencia.TempoTransmissaoOffLine;
  TempoAtivarOnLine := DeConfigContigencia.TempoAtivarOnLine;
end;

Como disse, sou novo na criação de Threads mas acredito que o erro não está diretamente à Thread e sim algo que eu não criei pra tentar gravar.

Deixei anexo minha unit da classe que ainda está em construção caso alguém possa me ajudar.

Desde já agradeço

uContingenciaNFCe.pas

Rodrigo Cardilo

Card System Info

[email protected]

  • Moderadores
Postado

No caso está correto . seu A.V. é por não criar objetos e tentar acessar o mesmo.

Thread tu tem que isolar tudo dentro dela. conexão, componentes não deve ficar acessando externamente, pois por exemplo um form ou dm não estar criado

Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

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

 

  • Membros Pro
Postado
55 minutos atrás, Juliomar Marchetti disse:

No caso está correto . seu A.V. é por não criar objetos e tentar acessar o mesmo.

Thread tu tem que isolar tudo dentro dela. conexão, componentes não deve ficar acessando externamente, pois por exemplo um form ou dm não estar criado

Consegui criar corretamente @Juliomar Marchetti. E já está dando certo.

Agora tenho uma outra dúvida.. Analisando os fontes procurei a rotina para voltar a emissão de NFC-e para online porém não achei nada que verifique o status da receita antes. Simplesmente existe uma procedure LigarOnLine que tem um código somente para mudar  de True para False.

procedure TContingenciaNFCe.LigarOnLine;
begin
  if (FConfigContigencia.FOffLine) then
  begin
     FConfigContigencia.FOffLine := False;
     FConfigContigencia.SalvarArquivo;
  end;

end;

Tem alguma outra forma no exemplo de verificar se a receita está online antes de mudar?

Gratos desde já

Rodrigo Cardilo

Card System Info

[email protected]

  • Fundadores
  • Solution
Postado

Ele apenas verifica, se já atingiu o prazo de espera em OffLine...

    //Verifica tempo de espera para voltar Emitir On-Line
    if CheckTimer(LStartTimerAtivarOnLine, FConfigContigencia.TempoAtivarOnLine) then
    begin
      LigarOnLine(Self);
      LStartTimerAtivarOnLine:= Now;
    end;

Feito isso.. na próxima transmissão, se houver novamente erro.. ele sinaliza que deve voltar para OffLine, novamente...

 

Não há uma maneira segura, de testar se um Site/Servidor está OnLine.. pois você pode ter sucesso em um teste, e ele ficar Offline instantes depois...

Então o melhor teste é tentar transmitir algo, e capturar o erro de transmissão, se ele ocorrer...

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.

  • Membros Pro
Postado
4 minutos atrás, Daniel Simoes disse:

Ele apenas verifica, se já atingiu o prazo de espera em OffLine...

    //Verifica tempo de espera para voltar Emitir On-Line
    if CheckTimer(LStartTimerAtivarOnLine, FConfigContigencia.TempoAtivarOnLine) then
    begin
      LigarOnLine(Self);
      LStartTimerAtivarOnLine:= Now;
    end;

Feito isso.. na próxima transmissão, se houver novamente erro.. ele sinaliza que deve voltar para OffLine, novamente...

 

Não há uma maneira segura, de testar se um Site/Servidor está OnLine.. pois você pode ter sucesso em um teste, e ele ficar Offline instantes depois...

Então o melhor teste é tentar transmitir algo, e capturar o erro de transmissão, se ele ocorrer...

Entendi @Daniel Simoes, então a lógica é. Eu entrei em contingência. Depois de X segundos eu volto pra Online. Na tentativa de enviar o próximo ou algum pendente eu verifico novamente e caso não tiver sucesso volto pra Offiline correto?

Rodrigo Cardilo

Card System Info

[email protected]

×
×
  • 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.