Página 1 de 1

Bug no meu programa

Enviado: 16 Set 2004 23:15
por JuniorVaz
Estou com um problema que se resume no siguinte: Em uma parte do programa, onde eu uso para fazer a impressão de etiquetas por lote, estava funcionando OK, tinha o campo Xlote, onde era digitado o lote para imprimir as etiquetas.
Acontece que quando eu dava que sim para a impressão, o cursor voltava para o campo xlote, vazio, e se eu apertace esc, voltava para o menu do programa, no caso saía da impressão de etiquetas. Eu fiz algumas mudanças nessa parte das impressões, e agora, ele abre certinho, dai eu digito o lote, dou enter, dai parte para a confirmação da impressão, eu dou S, ele imprime certinho, mas o cursor volta para o campo do lote, mas sem apagar o que nele tinha escrito, e quando eu aperto esc, ao inves dele sair para o menu, ele só apaga o que tinha escrito no campo lote, ficou no caso um bug no programa, que não sai mais dessa parte. Tenho sempre que fechar a janela do DOS e começar tudo novamente, vou colar abaixo o trecho do programa onde está isto, queria ver se alguem poderia me ajudar... Não sei se fui muito claro, mas é que até eu estou meio confuso... Eu acho que deve estar faltando algum endif ou exit, alguma finalização ali que não estou achando... Vlw

...
do while .t.
SETCOLOR(COR2)
RESTscreen(00,00,24,79,XX)
stor SPACE(03) to xlote
STOR 1 TO TLINI
stor 0 to XNUMPED
STOR 999 TO TLFIM
STOR 999999 TO xnumfim
do while .t.
@ 10,4 say "Lote..: " get xlote pict "!!!"
read
if lastkey()=27 .or. empty(xlote)
exit
endif
use lanord
sum totpar to total for lote=xlote


@ 12,04 SAY "Digite o Numero do Pedido ou Tecle <ENTER> para todos..: " get XNUMPED pict '999999'
read
if lastkey()=27
loop
endif
if empty(XNUMPED) .or. XNUMPED=0
@ 12,3 clea to 12,70
@ 12,4 SAY "Talao de Inicio..: " get tlini pict "999"
@ 13,4 say "Talao de Fim.....: " get tlfim pict "999" valid tlfim>=tlini
read
ENDIF
cc=' '
@ 15,4 say "Confirma Gera‡Æo de Etiquetas?" get cc pict "!" valid cc $ "SN"
read
if cc="S"
SET Printer To (xlote) + ".txt"
Set Device to printer
if empty(XNUMPED) .or. XNUMPED=0
sele ord
SET INDE TO LANord
set filter to lote+str(numord,3)>=xlote+str(tlini,3) .and. lote+str(numord,3)<=xlote+str(tlfim,3)
else
SELE ORD
SET INDE TO LANPD
SET FILTER TO LOTE+STR(NUMPED,6)=XLOTE+STR(XNUMPED,6)
endif
do imp_eti
eject
SET DEVI TO SCREEN
else
exit
endif
enddo
enddo
close all
return
...

Enviado: 17 Set 2004 00:02
por Clipper
Prezado Colega

Não tive paciência para analisar seu programa, mas uma solução rápida e que funciona perfeitamente é a seguinte :

Onde tem :

@ 10,4 say "Lote..: " get xlote pict "!!!"
read
if lastkey()=27 .or. empty(xlote)
exit
endif


Mude para :

@ 10,4 say "Lote..: " get xlote pict "!!!"
read
if lastkey()=27 .or. empty(xlote)
DBCLOSEALL() // Ou CLOSE ALL se preferir
RETURN
endif

Acontece que você estava saindo apenas do primeiro loop DO WHILE, mas ficava preso no segundo e ficava num loop infinito.

Até logo.

Marcelo