Limpar GETS de algumas variaveis

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

rbonotto
Usuário Nível 3
Usuário Nível 3
Mensagens: 253
Registrado em: 06 Mai 2005 18:52

Limpar GETS de algumas variaveis

Mensagem 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
mixsistemas@gmail.com
Avatar do usuário
billy1943
Usuário Nível 4
Usuário Nível 4
Mensagens: 570
Registrado em: 12 Mai 2009 17:33
Localização: Bauru-SP

Re: Limpar GETS de algumas variaveis

Mensagem por billy1943 »

Use o comando RELEASE.
O bom do computador é que ele resolve os problemas, sem nunca levantar nenhum.
Hoje atuo mais com Clipper 52E, e um pouquinho com XHarbour.
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Limpar GETS de algumas variaveis

Mensagem 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.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Limpar GETS de algumas variaveis

Mensagem 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.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
rbonotto
Usuário Nível 3
Usuário Nível 3
Mensagens: 253
Registrado em: 06 Mai 2005 18:52

Re: Limpar GETS de algumas variaveis

Mensagem 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
mixsistemas@gmail.com
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Re: Limpar GETS de algumas variaveis

Mensagem 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
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
rbonotto
Usuário Nível 3
Usuário Nível 3
Mensagens: 253
Registrado em: 06 Mai 2005 18:52

Re: Limpar GETS de algumas variaveis

Mensagem 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
mixsistemas@gmail.com
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Re: Limpar GETS de algumas variaveis

Mensagem 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
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Limpar GETS de algumas variaveis

Mensagem 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.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
beltrani_mi
Usuário Nível 1
Usuário Nível 1
Mensagens: 21
Registrado em: 10 Fev 2011 17:07
Localização: São Paulo

Re: Limpar GETS de algumas variaveis

Mensagem 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.
rbonotto
Usuário Nível 3
Usuário Nível 3
Mensagens: 253
Registrado em: 06 Mai 2005 18:52

Re: Limpar GETS de algumas variaveis

Mensagem 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
mixsistemas@gmail.com
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Limpar GETS de algumas variaveis

Mensagem 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.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Re: Limpar GETS de algumas variaveis

Mensagem 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
[]´s
Alexandre Santos (AlxSts)
rbonotto
Usuário Nível 3
Usuário Nível 3
Mensagens: 253
Registrado em: 06 Mai 2005 18:52

Re: Limpar GETS de algumas variaveis

Mensagem 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 !!!!!
mixsistemas@gmail.com
Responder