Código se repete sem estar em While Do

23/07/2008

0

Amigos

Estou de cabeça quente com esta situação. Na parte de finalização do caixa (aplicação) esse trecho do programa entra em loop como se estivesse usando um While Do mas não está e assim entra em loop indefinido. O mais curioso é que este módulo funciona com impressoras fiscais daruma, bematech, urano e elgin. Mas essa situação só acontece em tres clientes que usam a DARUMA. Na minha maquina tambem acontece. Nos outros clientes que usam daruma nada acontece.

Nunca vi isso ele é com se estivesse dentro do while. Veja que o código é simples onde chama uma funçao na linha :

linhaiFimDoDia = 0 Then GravaSintegra60();

Se puderem me ajudar mais uma vez agardeço

Marcos Roberto


gStringListErro.Add(´Antes de Sintegra´) ;
gStringListErro.SaveToFile(´c:\Fechamento.Txt´);

If iFimDoDia = 0 Then GravaSintegra60();

DeleteFile(gsDiretorioECF+´\Coo_Txt\Data_Mov_Dia.Txt´);

gStringListErro.Add(´Depois do Sintegra´) ;
gStringListErro.SaveToFile(´c:\Fechamento.Txt´);

//frMensagens.Visible := false ;
//frMensagens.Release ;
pnMensAviso.Visible := False ;


Marcosrodias

Marcosrodias

Responder

Posts

25/07/2008

Fabriciocolombo

olá,

exceto pelas iterações (loop, repeat, while), a outra forma de entrar em loop infinito é utilizar funções recursivas que apresentam erros.

posta o método GravaSintegra60 pra gente dar uma olhada, o problema deve estar nele.

até mais


Responder

25/07/2008

Werlon Goulart

E a cacata de eventos???
Dê uma conferida pra ver se não está fazendo com q um evento_1 chame o evento_2 que por sua vez chama o evento_1 novamente...

É só uma ideia q me ocorreu...

Grande abraço.


Responder

04/08/2008

Marcosrodias

Conseguir descobrir o problema do loop no módulo informadoi. Na verdade o problema estava na dll da daruma. É o seguinte:

Quando lancaram a dll o comando da reduzão z era declado assim:

function Daruma_FI_ReducaoZ: Integer; StdCall; External ´Daruma32.dll´;

Quando inclui a ecf daruma na minha aplicação coloquei desta forma mas apos um tempo a DARUMA fez uma modifcação na dll passando dois parâmetros novos que é data e hora para ajuste na hora da ecf ficando assim :

function Daruma_FI_ReducaoZ( Data: String; Hora: String ): Integer; StdCall; External ´Daruma32.dll´;

Pois bem com a primeira declaração não dá erro algum. Ela executa tira redução Z em outra rotina mas quando volta para a rotina que foi chamada ai é que entra em loop infinito.

Depois de fazer teste todos os dias me lembrei que a dois meses atras mostrei ao suporte da daruma um erro que estava dando em uma função e a moça do suporte mandou executar novamente a função passando os parâmetros de forma diferente. No caso a função em questão tinha dois parâmetros COO inicial e COO final. Eu passava então asim 1 e 10 e executa não dava erro na função mas dava acesso violotion então ela mandou passou assim 000001 e 000010 e não deu erro na função.

Então eu resolvi olhar no help da dll da daurma as funções e vi modifação na função acima. Modifique e ai o problema resolveu. A rotina executa normalmente sem entrar em loop. Não sei como a dll estava inteferindo no código do aplicativo mas resolveu.

Um grande abraço

Marcos Roberto


Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar