Página 1 de 1

Mudar o valor da variavel dentro do VALID

Enviado: 03 Nov 2008 15:38
por rubens
Olá...

Alguem sabe se é possivel fazer isso ???

Normalmente faço assim:

@ 10,10 GET QTDE
@ 12,10 GET DESCRICAO
@ 14,10 GET VALOR VALID CALTOTAL( QTDE, VALOR, @TOTAL )
@ 16,10 GET TOTAL
READ

FUNCTION CALCTOTAL( QTDE, VALOR, TOTAL )
TOTAL := QTDE * VALOR
RETURN( .T. )

Não tem como eu calcular o total direto no VALID ???

Tipo:
@ 14,10 GET VALOR VALID ( TOTAL := QTDE * VALOR )
Quando compilo desse jeito dá erro na execução.. alguem sabe se tem como fazer ??/

Vlw
Rubens

Re: MUDAR O VALOR DA VARIAVEL DENTRO DO VALID

Enviado: 03 Nov 2008 15:52
por Maligno
Exemplo:

Código: Selecionar todos

@ 14,10 get VALOR valid Eval({||TOTAL := QTDE*VALOR, .T.})

Re: MUDAR O VALOR DA VARIAVEL DENTRO DO VALID

Enviado: 03 Nov 2008 16:05
por rubens
Ok.

Resolvido...


Só uma dúvida.. se eu tiver dois calculos como colocaria eles...??

Rubens

Re: MUDAR O VALOR DA VARIAVEL DENTRO DO VALID

Enviado: 03 Nov 2008 16:08
por Maligno
Um cálculo é uma expressão. Dentro de um bloco de código você pode ter tantas expressões quanto quiser. Mas como é um valid, a última expressão deve retornar um valor lógico, que será o retorno do valid. Só isso.

Re: MUDAR O VALOR DA VARIAVEL DENTRO DO VALID

Enviado: 03 Nov 2008 16:49
por rubens
Ok.. vou fazer os testes...

Obrigado..

Re: MUDAR O VALOR DA VARIAVEL DENTRO DO VALID

Enviado: 04 Nov 2008 13:43
por Adalberto
Mestre maligno, Deus o abençoe.
Só uma curiosidade:
O exemplo do Rubens mostra a necessidade de um cálculo.

Código: Selecionar todos

FUNCTION CALCTOTAL( QTDE, VALOR, TOTAL )
TOTAL := QTDE * VALOR
RETURN( .T. )
mas se for necessário validar mesmo, verificar se o valor não e negativo, zero, se foi pressionada certa tecla, etc. então a validação por médio de um code block precisa de uma função definida por o usuário.
Então qual e melhor: Com um code block o direto a uma função depois do VALID?
Muito obrigado.

Re: MUDAR O VALOR DA VARIAVEL DENTRO DO VALID

Enviado: 04 Nov 2008 14:48
por Maligno
Dependendo do que for avaliado, até poderia ser feito no bloco de código. Mas dependendo do código, só por função, que é como eu prefiro fazer.

Re: MUDAR O VALOR DA VARIAVEL DENTRO DO VALID

Enviado: 04 Nov 2008 15:01
por Adalberto
Maligno, mais uma vez:
Muito obrigado.

Re: Mudar o valor da variavel dentro do VALID

Enviado: 12 Nov 2008 12:24
por alxsts
Caros, permitam que eu dê uma pequena contribuição, mesmo que com atraso:

Parece que o objetivo do colega Rubens era alimentar a variável TOTAL, visto que o usuário já havia digitado a QTDE e o VALOR. Sendo assim, não seria necessário digitar o campo TOTAL. Então eu escreveria o código assim:

Código: Selecionar todos

   LOCAL QTDE := .000, DESCRICAO := SPACE(50), VALOR := .00, TOTAL := .00
   LOCAL GetList := {}

   CLS

   @ 10,10 GET QTDE PICT "999.999" VALID QTDE > 0
   @ 12,10 GET DESCRICAO   PICT "@!"
   @ 14,10 GET VALOR PICT "999,999,999.99" VALID VALOR > 0
   @ 16,10 GET TOTAL WHEN { |oGet| CalcTotal( oGet, Qtde, Valor ) }

   READ
//------------------------------------------------------------------------------
FUNCTION CalcTotal( oGet, Qtde, Valor )

   // utiliza métodos do objeto GET
   oGet:varPut( Qtde * Valor )   // atualiza a variavel Get
   oGet:updateBuffer()             // atualiza o buffer do objeto Get (automaticamente executa oGet:display() para atualizar a tela)

   RETURN( .F. )                      // pula o Get
//------------------------------------------------------------------------------
Isso pode perfeitamente ser usado na cláusula VALID, de acordo com a necessidade.

Obs: é bom evitar usar palavras reservadas do Clipper para nomes de variáveis. Neste código foi declarada a variável TOTAL, que é o nome de um comando Clipper:

TOTAL ON <expKey> FIELDS <idField list>
TO <xcDatabase>
[<scope>] [WHILE <lCondition>] [FOR <lCondition>]


Espero ter contribuido.

AlxSts

[]s

-------------------------------
Nota de Moderação (Toledo): mensagem editada para colocar a tag [ code ]
Veja como utilizar esta tag: faq.php?mode=bbcode#f21

Re: Mudar o valor da variavel dentro do VALID

Enviado: 12 Nov 2008 13:00
por Maligno
TOTAL não é uma palavra reservada. É apenas um nome de comando. Fora do contexto desse comando ela não existe, já que o pré-processador não reconhece o comando em si. Por isso, não há qualquer conflito.

Re: Mudar o valor da variavel dentro do VALID

Enviado: 12 Nov 2008 21:07
por alxsts
Concordo. Mas eu usaria nTotal...

[]s
AlxSts

Mudar o valor da variavel dentro do VALID

Enviado: 12 Nov 2008 21:37
por Pablo César
É faz sentido. Primeiro padronização e segundo é sempre aconselhável evitar palavras que possam vir a representar comando ou qualquer outra designação interna do Clipper. Apesar que não deva ser este o problema deste enunciado.

Re: Mudar o valor da variavel dentro do VALID

Enviado: 13 Nov 2008 10:12
por Ademir
Bom dia amigos !

Acho que assim tambem funciona:

get valor pict "999999.99" valid ( total := qtde * valor , .t. )

Espero ter ajudado