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 !!!!!