ACHOICE - travando ao pressionar Tecla UP
Enviado: 21 Fev 2016 10:50
Prezados colegas, nobre professores, bom dia, bom domingo e ótimo 1º dia sem horário de verão a todos! X:) #téquenfim #acabouOhorárioDeVerão
Bom, a um tempo atrás os prezados clippeiros/harboueiros me ajudaram quanto à "posição do row() dentro de um achoice"...
No clipper nunca tive esse problema, mas, após migrar para o harbour em em 2015, está acontecendo uma coisa muito estranha com o meu código (uma das partes) onde tem um determinado achoice.
O problema está no cadastro de compras para o estoque, onde por exemplo existe um local para cadastro de grades (empresas de calçados, por exemplo).
O usuário cadastra apenas um código e gera sub-códigos através da numeração dos calçados (grades) dos tamanhos adquiridos na compra (36,38.. 44, etc).
Acontece que se tiver apenas uma grade cadastrada e o usuário pressionar a tecla (seta para cima UP) o sistema literalmente trava (o relógio showtime prova isso, parando de funcionar).
Agora se tiver 2 ou mais grades cadastradas, o ACHOICE navega entre elas, mas, repito:
Os meus códigos são os seguintes:
1 - Após cadastrar o produto, vem a quantidade adquirida desse tal produto. Ao pressionar enter e acionada a função GRADE(). Vejam:
A função acima, chama 2 outras funções importantes no processo de funcionamento do achoice.
2 - uma delas é acionada nesta linha: mIND := achoice (05,62,UL,75,mLINHA,.T.,'fACHOICE1',mIND) que é a função FACHOICE:
A função acima no original, não tinha os argumentos NELEMENT e NROW, pois foi por este fórum que os nobres professores melhoraram-na pois quando se dava enter o posicionamento fica incorreto.
3 - Agora a próxima função que acho que é importante os senhores observarem é a que está no @GET a função fQT_COMP:
Observem que tem as linhas comentadas: SETKEY e BSETKEY que na tentativa de solucionar o problema o qual não deu certo...
Bom "amiguinhos" (faço minha o jargão do Rochinha/Asimoes), prezados professores, já tem 2 dias no chutômetro tentando entender esse achoice e não consigo, e gostaria da ajuda de todos mais uma vez! :%
Abraços!
Bom, a um tempo atrás os prezados clippeiros/harboueiros me ajudaram quanto à "posição do row() dentro de um achoice"...
No clipper nunca tive esse problema, mas, após migrar para o harbour em em 2015, está acontecendo uma coisa muito estranha com o meu código (uma das partes) onde tem um determinado achoice.
O problema está no cadastro de compras para o estoque, onde por exemplo existe um local para cadastro de grades (empresas de calçados, por exemplo).
O usuário cadastra apenas um código e gera sub-códigos através da numeração dos calçados (grades) dos tamanhos adquiridos na compra (36,38.. 44, etc).
Acontece que se tiver apenas uma grade cadastrada e o usuário pressionar a tecla (seta para cima UP) o sistema literalmente trava (o relógio showtime prova isso, parando de funcionar).
Agora se tiver 2 ou mais grades cadastradas, o ACHOICE navega entre elas, mas, repito:
Só consegue sair ou clicando no X da janela ou com o gerenciador de tarefas.se tiver apenas 1 grade e for pressionada a tecla (K_UP) seta para cima, o sistema trava totalmente!
Os meus códigos são os seguintes:
1 - Após cadastrar o produto, vem a quantidade adquirida desse tal produto. Ao pressionar enter e acionada a função GRADE(). Vejam:
Código: Selecionar todos
static function GRADE ()
local ARQUIVO := select (),;
TECLAS := {},;
TELA_ANT := savescreen (0,0,maxrow (),maxcol ())
// LOCAL bSetKey // acrescentado p/ recuperar a funcionalidade do ESC 29/12/15w.
// bSetKey := Setkey( K_ESC, NIL ) // isto salva a configuratpo do ESC e volta o ESC ao normal 29/12/15w.
private GETLIST := {}
private nLinGet := 12 // pctoledo em 9/3/15w. // acrescentado neste local em 5/12/15w.
aadd (TECLAS,{'Esc','Retorna'})
aadd (TECLAS,{'F1','Help'})
aadd (TECLAS,{'F2','Utilit rios'})
aadd (TECLAS,{'F4/Alt F4','Consulta'})
TECLAS_FUNCAO (TECLAS)
set key TECLA_CONT_ANT to
UL := 5 + mQT_GRADE
if UL > 17
UL := 17
endif
MOLDURA (02,60,UL+2,77,.f.,'Prod./Grade')
set cursor on
@ 03,60 say '³ GRADE ³QUANTID.³'
@ 04,60 say 'ÃÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄ´'
@ UL,60 say 'ÃÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄ´'
@ UL+1,61 say ' TOTAL ³ '
@ UL+2,61 say 'ÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄ'
mIND := 1
mQT_TOTCOM := 0
for mI = 1 to mQT_GRADE
mQT_TOTCOM += val (right (mLINHA [mI],7))
next
@ UL+1,69 say transform (mQT_TOTCOM,pQT_COMPRA)
do while .t.
mIND := achoice (05,62,UL,75,mLINHA,.T.,'fACHOICE1',mIND)
if lastkey () = 27
if mQT_TOTCOM <> mQT_COMPRA
MENSAGEM ('Quantidade Total nÆo pode ser diferente que quantidade da nota')
// clear typeahead // acrescentado para parar de travar na quantidade 0 (zero) 20/2/16w.
// clear gets
loop
else
// SetKey( K_ESC, bSetKey ) // isto devolve a configuratpo do ESC que estava antes 29/12/15w.
exit
endif
endif
aQT_COMP := val (right (mLINHA [mIND],7))
mQT_COMP := val (right (mLINHA [mIND],7))
@ 05 + nLinGet,68 get mQT_COMP picture '@Z 999.999' valid fQT_COMP ()
read
if lastkey () <> 27
mLINHA [mIND] := left (mLINHA [mIND],07) +;
transform (mQT_COMP,'@Z 999.999')
GRAVA_GRADE ()
endif
mQT_TOTCOM := 0
for mI = 1 to mQT_GRADE
mQT_TOTCOM += val (right (mLINHA [mI],7))
next
@ UL+1,69 say transform (mQT_TOTCOM,pQT_COMPRA)
enddo
TECLAS := {}
aadd (TECLAS,{'Esc','Retorna'})
aadd (TECLAS,{'F1','Help'})
aadd (TECLAS,{'F2','Utilit rios'})
aadd (TECLAS,{'F3','Valor Anterior'})
aadd (TECLAS,{'F4/Alt F4','Consulta'})
TECLAS_FUNCAO (TECLAS)
SetKey( K_ESC, bSetKey ) // isto devolve a configuratpo do ESC que estava antes 29/12/15w.
set key TECLA_CONT_ANT to CONTEUDO_ANTERIOR
restscreen (0,0,maxrow (),maxcol (),TELA_ANT)
return2 - uma delas é acionada nesta linha: mIND := achoice (05,62,UL,75,mLINHA,.T.,'fACHOICE1',mIND) que é a função FACHOICE:
Código: Selecionar todos
function fACHOICE1(mPAR1,nElement,nRow) // pctoledo em 9/3/15w. // acrescentei em 5/12/15w
nLinGet := nRow // pctoledo em 9/3/15w. // acrescentei em 5/12/15w
if lastkey()=13
return 1
elseif lastkey()=27
return 0
elseif mPAR1=1
keyboard chr(30)
elseif mPAR1=2
keyboard chr(31)
endif
return 23 - Agora a próxima função que acho que é importante os senhores observarem é a que está no @GET a função fQT_COMP:
Código: Selecionar todos
static function fQT_COMP ()
// LOCAL bSetKey // acrescentado p/ recuperar a funcionalidade do ESC 29/12/15w.
// bSetKey := Setkey( K_ESC, NIL ) // isto salva a configuratpo do ESC e volta o ESC ao normal 29/12/15w.
LIMPA_MENSAGEM ()
if EXISTE_REG .or. lastkey () <> K_UP
if mQT_COMP < 0.001 .or. mQT_COMP > 999.999
MENSAGEM ('Quantidade deve estar entre 0.001 e 999.999 inclusive')
// SetKey( K_ESC, bSetKey ) // isto devolve a configuratpo do ESC que estava antes 29/12/15w.
return (.f.)
endif
if mQT_COMP > mQT_COMPRA
MENSAGEM ('Quantidade nÆo pode ser maior que quantidade da nota')
// SetKey( K_ESC, bSetKey ) // isto devolve a configuratpo do ESC que estava antes 29/12/15w.
return (.f.)
endif
mQT_TOTCO1 := mQT_TOTCOM - aQT_COMP + mQT_COMP
if mQT_TOTCO1 > mQT_COMPRA .and. mQT_COMP > 0
MENSAGEM ('Quantidade Total nÆo pode ser maior que quantidade da nota')
// SetKey( K_ESC, bSetKey ) // isto devolve a configuratpo do ESC que estava antes 29/12/15w.
return (.f.)
endif
endif
// SetKey( K_ESC, bSetKey ) // isto devolve a configuratpo do ESC que estava antes 29/12/15w.
return (SAIDA_VALIDA ())Bom "amiguinhos" (faço minha o jargão do Rochinha/Asimoes), prezados professores, já tem 2 dias no chutômetro tentando entender esse achoice e não consigo, e gostaria da ajuda de todos mais uma vez! :%
Abraços!