Uso uma função ACHOICE para cadastrar os produtos (num total de 16 por venda), mas, como o espaço da tela (visual é apertado) esse achoice trabalha entre as linhas 12 e 16, ou seja, quando ocupa 5 produtos a tela fica rolando.
Até aí tudo bem.
O problema é que, quando pressionamos ENTER em qualquer das linhas que estivermos deveria o cursor ficar entre as linhas 12 e 16.
Para isso, usamos a função ROW() para pegar a posição correta do cursor.
No clipper isso estava tudo correto, mas, no harbour, não está não
Quando pressionamos ENTER o ROW() fornece uma posição diferente (deveria ser entre 12 e 16) mas, pude observar que ele sempre vai para a linha 18.
Vejam o trecho do meu código onde esta função funciona:
Código: Selecionar todos
do while .t.
// ? ROW() // só pra teste migração clipper/harbour pois na hora de se cadastrar o produto, tá ficando 6 linhas abaixo do lugar correto 6/3/15w.
// INKEY(0) // só pra teste migração clipper/harbour pois na hora de se cadastrar o produto, tá ficando 6 linhas abaixo do lugar correto 6/3/15w.
CAN_TECLA_F3 := .t.
set key TECLA_CONT_ANT to
mIND := achoice (12,01,16,77,mLINHA,.T.,'fACH_001',mIND)
set key TECLA_CONT_ANT to CONTEUDO_ANTERIOR
CAN_TECLA_F3 := .f.
// ? ROW() // só pra teste migração clipper/harbour pois na hora de se cadastrar o produto, tá ficando 6 linhas abaixo do lugar correto 6/3/15w.
// INKEY(0) // só pra teste migração clipper/harbour pois na hora de se cadastrar o produto, tá ficando 6 linhas abaixo do lugar correto 6/3/15w.
if lastkey () = 27
SALVA_CP := savescreen (0,0,maxrow (),maxcol ())
if .not. CONFIRMA ('Confirma Dados')
loop
endif
exit
elseif lastkey () = 13
//? 'estou na linha 2344' // Somente para testes provis¢rios. Walcledson 21/2/02w // reacrescentada novamente para migração para harbour 6/3/15w
//? mIND // acrescentada novamente para migração para harbour 6/3/15w
//? row() // acrescentada novamente para migração para harbour 6/3/15w
//inkey(0) // Somente para testes provis¢rios. Walcledson 21/2/02w // reacrescentada novamente para migração para harbour 6/3/15w
mCDPRODUTO := val (substr (mLINHA [mIND],01,13))
aCDPRODUTO := mCDPRODUTO
mDSPRODUTO := substr (mLINHA [mIND],15,32)
mCD_GRADE := substr (mLINHA [mIND],48,02)
mCD_GRADE := iif (mCD_GRADE=' ',DCI10010->DSUNIDADE,substr (mLINHA [mIND],48,02)) // Modificado p/Walcledson em 09/05/01 p/func. mt,cm,kg.
aCD_GRADE := mCD_GRADE
mQT_VENDA := val (substr (mLINHA [mIND],51,07)) // Modificado p/Walcledson em 09/05/01 p/func. mt,cm,kg.
aQT_VENDA := mQT_VENDA
mVR_UNITAR := val (substr (mLINHA [mIND],59,01) +;
substr (mLINHA [mIND],61,03) + '.'+;
substr (mLINHA [mIND],65,02))
aVR_UNITAR := mVR_UNITAR
mLIN := row()
* Consulta se j existe o produto/grade na venda
EXISTE_PRD := EXISTE_PRDUTO () // modificado o nome de EXISTE_PROD e EXISTE_PRODUTO p/ EXISTE_PRD e EXISTE_PRDUTO, pois está gerando conflito com a função EXISTE_PROGRAMA q pertence ao arquivo ROTINAS.PRG (e seus derivados, no caso ROTINAS5.PRG). 02-11-11w.
*? EXISTE_PRD // modificado o nome de EXISTE_PROD e EXISTE_PRODUTO p/ EXISTE_PRD e EXISTE_PRDUTO, pois está gerando conflito com a função EXISTE_PROGRAMA q pertence ao arquivo ROTINAS.PRG (e seus derivados, no caso ROTINAS5.PRG). 02-11-11w.
//? row() // acrescentado apenas para teste de migração harbour 6/3/15w.
//inkey(0) // acrescentado apenas para teste de migração harbour 6/3/15w.
@ row(),01 get mCDPRODUTO picture pCDPRODUTO when empty (mCDPRODUTO) valid fCDPRODUTO () // modificado pela linha abaixo, pois na migração do clipper/harbour o cursor na hora de cadastrar um produto aparece 6 linhas abaixo do lugar correto 6/3/15w.
*@ 16,01 get mCDPRODUTO picture pCDPRODUTO when empty (mCDPRODUTO) valid fCDPRODUTO ()
*@ row(),48 get mCD_GRADE picture pCD_GRADE when mCD_GRADE = 'PC' .and. .not. EXISTE_PRD valid fQT_VENDA () // modificado o nome de EXISTE_PROD e EXISTE_PRODUTO p/ EXISTE_PRD e EXISTE_PRDUTO, pois está gerando conflito com a função EXISTE_PROGRAMA q pertence ao arquivo ROTINAS.PRG (e seus derivados, no caso ROTINAS5.PRG). 02-11-11w.
*@ row(),48 get mCD_GRADE picture pCD_GRADE when mCD_GRADE = 'UN' .and. .not. EXISTE_PRD valid fCD_GRADE () // Substitu¡da pela linha abaixo. 27/1/3w: // modificado o nome de EXISTE_PROD e EXISTE_PRODUTO p/ EXISTE_PRD e EXISTE_PRDUTO, pois está gerando conflito com a função EXISTE_PROGRAMA q pertence ao arquivo ROTINAS.PRG (e seus derivados, no caso ROTINAS5.PRG). 02-11-11w.
@ row(),48 get mCD_GRADE picture pCD_GRADE when .not. EXISTE_PRD valid fCD_GRADE () // modificado o nome de EXISTE_PROD e EXISTE_PRODUTO p/ EXISTE_PRD e EXISTE_PRDUTO, pois está gerando conflito com a função EXISTE_PROGRAMA q pertence ao arquivo ROTINAS.PRG (e seus derivados, no caso ROTINAS5.PRG). 02-11-11w.
private mQT_ESTOQ2 := nil // Acrescentado para que qd§ o estoque estiver zerado, pe‡a senha para liberara‡Æo. Walcledson 09/09/02.
*@ row(),52 get mQT_VENDA picture pQT_VENDA valid fQT_VENDA () // Modificado p/Walcledson em 27/01/03 p/func. mt,cm,kg.
@ row(),51 get mQT_VENDA picture pQT_VENDA valid fQT_VENDA () // Modificado p/Walcledson em 27/01/03 p/func. mt,cm,kg.
readGrato,
MICROVOLUTION, DE PAULA
PS: grifo nosso[/b em parte do código acima


