Página 1 de 1
Limpar GETS de algumas variaveis
Enviado: 04 Abr 2011 23:04
por rbonotto
Ola,
Estou com a seguinte situação: tenho quatro variaveis que tem um VALID no final de cada GET e duas outras que não estão ligadas
a estas anteriores.
Eu preciso que quando entrar em uma variavel (das que estão com VALID) se umas situações forem atendidas que as variaveis abaixo
dela (só as que tem o VALID) sejam limpadas, como um CLEAR GETS. Não posso usar o CLEAR GETS pois este limpara as duas variaveis
que o usuario tera que digitar. Abaixo um resumo do codigo:
Código: Selecionar todos
@ 09,06 SAY 'ITEM...:' GET pItem1 PICT('@!') VALID(loc_item(1,pItem1))
@ 10,06 SAY ' ' GET pItem2 PICT('@!') VALID(loc_item(2,pItem2))
@ 11,06 SAY ' ' GET pItem3 PICT('@!') VALID(loc_item(3,pItem3))
@ 12,06 SAY ' ' GET pItem4 PICT('@!') VALID(loc_item(4,pItem4))
@ 13,06 SAY 'TAMANHO:' GET mYtmn PICT('@!')
@ 14,06 SAY 'QTDE...:' GET qTd PICT('99')
Código: Selecionar todos
*********************************************
FUNCTION loc_item(TARGET,VAR_ITEM)
*********************************************
SELE item; sset(2)
SEEK crd->codigo + VAR_ITEM
IF !EOF()
IF TARGET == 1
vRuNc1 := unico
vRdvd1 := dividido
IF unico == 'S'
AQUI LIMPAR OS GETS DAS VARIAVEIS pItem2, pItem3 E pItem4 MAS PRESERVANDO AS VARIAVEIS mYtmn e qTd
END
ELSEIF TARGET == 2
ELSEIF TARGET == 3
ELSEIF TARGET == 3
END
Alguém saberia se existe um modo de dar um CLEAR GETS "seletivo" ??
Abraços
Re: Limpar GETS de algumas variaveis
Enviado: 05 Abr 2011 09:51
por billy1943
Use o comando RELEASE.
Limpar GETS de algumas variaveis
Enviado: 05 Abr 2011 10:13
por Pablo César
Não entendí direito qual seria a sua necessidade. Se limpar o conteúdo das variáveis conforme não satisfaça a condição ou se é de apenas limitar a edição dos gets. Se for este o seu segundo caso, acho melhor você utilizar a clausula WHEN e não VALID. Daí você não precisará utilizar o CLEAR GETS, que na minha opinião você irá precisar para validar o resto dos gets.
Código: Selecionar todos
@ 09,06 SAY 'ITEM...:' GET pItem1 PICT('@!')
@ 10,06 SAY ' ' GET pItem2 PICT('@!') WHEN unico == 'S'
@ 11,06 SAY ' ' GET pItem3 PICT('@!') WHEN unico == 'S'
@ 12,06 SAY ' ' GET pItem4 PICT('@!') WHEN unico == 'S'
@ 13,06 SAY 'TAMANHO:' GET mYtmn PICT('@!')
@ 14,06 SAY 'QTDE...:' GET qTd PICT('99')
READ
Não sei de onde surgiu essa variável ou campo "unico", mas acredito que assim funcionaria. E senão, explique melhor a sua necessidade.
Limpar GETS de algumas variaveis
Enviado: 05 Abr 2011 10:17
por Pablo César
O uso do comando RELEASE <var> vai matar a variável e dará erro posteriormente no READ ou até mesmo quando precisar dela...
Se a questão for, zerar a variáveis, pode se implementado em lugar de WHEN unico == 'S' para WHEN função_analítica_de_exceção e zerar cada variável.
Re: Limpar GETS de algumas variaveis
Enviado: 05 Abr 2011 11:52
por rbonotto
Ola pessoal, obrigado pela atenção.
Explicando melhor:
Os campos pItem1 ao pItem4 são do tipo caracter, a situação que ocorre é que alguns itens podem ser acompanhados
de outros ( unico := ´N´) e neste caso a variavel seguinte pode ser lida, mas ao contrario os campos restantes não
devem ser preenchidos.
Seria algo assim:
No primeiro campo o usuario digita o sabor de uma pizza, a validação seria: este sabor é unico ou pode ser dividido ?
Se não for unico o campo de baixo pode (ou não) ser preenchido, mas se unico == ´S´os campos abaixo não podem
ser preenchidos indo direto para o campo tamanho e quantidade.
Não posso usar o WHEN porque dentro da função que faz a validação são feitos um monte de outras validações....
Dentro da validação poderia colocar para que não pudesse ser digitado nada nos campos adjacentes, mas forçaria o
usuario a ficar pressionando ENTER até chegar nos campos tamanho e quantidade.
Abraços
Re: Limpar GETS de algumas variaveis
Enviado: 05 Abr 2011 14:10
por asimoes
Olá,
Você pode fazer este teste na sua função
Código: Selecionar todos
*********************************************
FUNCTION loc_item(TARGET,VAR_ITEM)
*********************************************
SELE item; sset(2)
SEEK crd->codigo + VAR_ITEM
IF !EOF()
IF TARGET == 1
vRuNc1 := unico
vRdvd1 := dividido
IF unico == 'S'
//Limpando os gets dos campos pItem2 a pItem4
FOR I:=2 TO 4
GetList[I]:block:={||" "}
GetList[I]:UpdateBuffer()
GetList[I]:display()
NEXT
//AQUI LIMPAR OS GETS DAS VARIAVEIS pItem2, pItem3 E pItem4 MAS PRESERVANDO AS VARIAVEIS mYtmn e qTd
END
ELSEIF TARGET == 2
ELSEIF TARGET == 3
ELSEIF TARGET == 3
END
Re: Limpar GETS de algumas variaveis
Enviado: 05 Abr 2011 17:07
por rbonotto
Ola Asimoes, obrigado pela atenção.
Eu ja havia feito algo parecido, colocando GetList:block:={||""} (sem espaço dentro dos " ")
Funciona, mas se o usuario precisar voltar com a seta para cima a variavel não permite, pois esta "zerada"
Acho que o que eu queria fazer não é possivel mesmo, que seria dar um CLEAR GETS seletivo nas variaveis pItem2 a pItem4. Procurei no NG
e não achei nada referente ao assunto, deve ser um comando que não existe no clipper....
Abbraço
Re: Limpar GETS de algumas variaveis
Enviado: 05 Abr 2011 17:35
por asimoes
Essa parte eu não entendi direito:
rbonotto escreveu:Funciona, mas se o usuario precisar voltar com a seta para cima a variavel não permite, pois esta "zerada"
[]´s
Limpar GETS de algumas variaveis
Enviado: 05 Abr 2011 18:17
por Pablo César
rbonotto escreveu:Não posso usar o WHEN porque dentro da função que faz a validação são feitos um monte de outras validações....
Mas o quê impede você fazer essa função validadora na clausula do WHEN ? Seria o VALID ? Pois tira e coloque no lugar o WHEN, mas a função precisa retornar .T. ou .F. como na função para o VALID.
Como tinha dito antes, após o WHEN você chama a função validadora para fazer as outras validações. Para mim essa seria a saída mais acertada.
Re: Limpar GETS de algumas variaveis
Enviado: 06 Abr 2011 09:23
por beltrani_mi
Bom dia!
Acho que o amigo precisa é mais ou menos isso:
Código: Selecionar todos
@ 9,6 say ´Item :´ get pitem1 pict ´@!´ valid (pitem2:=if(unico = ´S´,spac(50),pitem2)) .and. (pitem3:=if(unico = ´S´,spac(50),pitem3))
@ 10,6 say ´ :´ get pitem2 pict ´@!´ when unico = ´N´
@ 11,6 say ´ :´ get pitem3 pict ´@!´ when unico = ´N´
read
Espero ter ajudado.
Re: Limpar GETS de algumas variaveis
Enviado: 06 Abr 2011 10:37
por rbonotto
Bom dia ! Obrigado pela atenção :)Pos
Ola Pablo César, dentro da função loc_item() tem umas 8 validações além da unico por este motivo não posso colocar o WHEN nem
colocar o modeo como o beltrani_mi postou, o programa precisa passar pela função loc_item() para preencher varias situações.
Grande abraço :)Pos
Limpar GETS de algumas variaveis
Enviado: 06 Abr 2011 12:18
por Pablo César
dentro da função loc_item() tem umas 8 validações além da unico por este motivo não posso colocar o WHEN nem colocar o modelo como o beltrani_mi postou
Ok colega, se você quiser uma ajuda, poste o código completo da função loca_item que daremos uma forcinha, se você quiser é claro.
Re: Limpar GETS de algumas variaveis
Enviado: 06 Abr 2011 12:43
por alxsts
Olá!
Misturando tudo, tente assim:
Código: Selecionar todos
Private pItem1, pItem2, pItem3, pItem4, mYtmn, qtd, GetList := {}
pItem1 := Space(1)
pItem2 := Space(1)
pItem3 := Space(1)
pItem4 := Space(1)
mYtmn := Space(1)
qtd := 0
altd()
@ 09,06 SAY 'ITEM...:' ;
GET pItem1 ;
PICT ('@!') ;
WHEN (loc_item(1,pItem1)) ;
VALID (loc_item(1,pItem1))
@ 10,06 SAY ' ' GET pItem2 PICT('@!') VALID(loc_item(2,pItem2))
@ 11,06 SAY ' ' GET pItem3 PICT('@!') VALID(loc_item(3,pItem3))
@ 12,06 SAY ' ' GET pItem4 PICT('@!') VALID(loc_item(4,pItem4))
@ 13,06 SAY 'TAMANHO:' GET mYtmn PICT('@!')
@ 14,06 SAY 'QTDE...:' GET qTd PICT('99')
read
*********************************************
FUNCTION loc_item(TARGET,VAR_ITEM)
*********************************************
SELE item; dbsetorder(2) //sset(2)
SEEK crd->codigo + VAR_ITEM
IF !EOF()
IF TARGET == 1
vRuNc1 := unico
vRdvd1 := dividido
if pROCnAME( 2 ) == "GETPREVALI"
// está no WHEN
IF unico == 'S'
// AQUI LIMPAR OS GETS DAS VARIAVEIS pItem2, pItem3 E pItem4 MAS PRESERVANDO AS VARIAVEIS mYtmn e qTd
pItem2 := Space(1)
pItem3 := Space(1)
pItem4 := Space(1)
ENDIF
END
ELSEIF TARGET > 1 .And. Target < 5
if pROCnAME( 2 ) == "GETPREVALI" .And. unico == "S"
RETURN .F.
ENDIF
ENDIF
ENDIF
Re: Limpar GETS de algumas variaveis
Enviado: 07 Abr 2011 15:36
por rbonotto
Ola pessoal, obrigado mesmo pela atenção, usando um pouco de cada sugestão o problema esta resolvido :{
Ola Pablo César, as validações eram muitas: abrir um banco de dados e ver se o produto existe, se ele é um item ou composição de itens, se ele pode
ser agregado a outro ou não, etc...mas a variavel UNICO éra uma das mais importantes; não havia postado o restante pois não influenciaria na resolução do problema.
Muito obrigado pela ajuda, etse fórum é muito 10 !!!!!