Página 1 de 2

Pular o get

Enviado: 02 Abr 2006 19:10
por Josmar dos Santos
Ola pessoal, gostaria que voces observassem essa rotina

FUNCTION IFU03011
IF VALIDA = NIL; VALIDA := .T.; ENDIF
M->SALDO_REC := M->VALOR_REC-M->PAGO_REC
@ 14, 23 SAY M->SALDO_REC PICT "@Z 999,999,999.99"
RETURN .T.


@ 14, 23 GET M->SALDO_REC PICTURE "@Z 999,999,999.99" VALID IFU03011()

E o seguinte: Essa rotina pelo que voces podem observar faz a subtração da variavel saldo_rec. O que estou querendo e que ele continue a fazer o mesmo como uma condição, que ele não acesse o get . Eu coloquei say no lugar de get, mas nao aceita a declaração da função....tem algum jeito de ele continuar fazendo o mesmo procedimento, mas sem acessar o saldo_rec e registrar normalmente na dbu....
sem mais grato
josmar

Enviado: 02 Abr 2006 20:07
por evaldo
Éssa funcao IFU03011(), vc tem que colocar ela em outro lugar para que a soma seja feita Ex.

Código: Selecionar todos

@ 13, 23 GET M->VALOR_REC PICTURE "@E 999,999.99" VALID IFU03011() 
READ

FUNCTION IFU03011() 
   IF VALIDA = NIL; VALIDA := .T.; ENDIF 
   M->SALDO_REC := M->VALOR_REC-M->PAGO_REC 
   @ 14, 23 SAY M->SALDO_REC PICT "@Z 999,999,999.99" 
RETURN .T. 

Assim quando vc acabar de digitar o valor recebido, a funcao ja vai somar e dar o total recebido.
OK

Enviado: 03 Abr 2006 10:28
por alaminojunior
Bom dia, não sei se entendi muito bem o que vc quer fazer, mas...
Vc quer que a variavel M->valor_rec do get já contenha o valor calculado ?
Caso seja isso, é só trocar a clausula Valid pela When, e toda vez que vc entrar neste get, ele já vai trazer o valor calculado.
Desculpe se entendi errado.

Pular o get

Enviado: 03 Abr 2006 13:32
por Josmar dos Santos
Ola coelgas, desculpa...acho que nao expliquei direito...
Com essa função, ele faz o calculo e joga certinho na variavel saldo_rec...sem problema, não ha necessidade de digitar o valor nesse variavel, pois a funçao faz isso.
Mas o que relamente estou pretendendo é que o cursor não acesse essa variável, ou seja, a hora que for digitado o primeiro valor(valor_rec), e a funçao jogar o valor no saldo_rec, ele pule esse variavel...enfim, resumindo queria aprender a pular uma variavel...sem
mais obrigado a todos pela atençao
josmar

Enviado: 03 Abr 2006 14:10
por Daniel
vc pode jogar junto com o retorno da variavel um
keyboard chr(13)

Código: Selecionar todos

FUNCTION IFU03011() 
   IF VALIDA = NIL; VALIDA := .T.; ENDIF 
   M->SALDO_REC := M->VALOR_REC-M->PAGO_REC 
   @ 14, 23 SAY M->SALDO_REC PICT "@Z 999,999,999.99" 
   KeyBoard Chr(13)
RETURN .T.

Enviado: 03 Abr 2006 18:28
por filizola
@ lin,col get valor_rec pict "@ez 99,999.99" valid(IFU03011(valor_rec,@saldo_rec))

function ifu03011(valor_rec_f, saldo_rec_f)

saldo_rec_f=saldo_rec_f-valor_rec_f
@ lin,col say saldo_rec_f pict "@ez 99,999.99"
return(.t.)

Pular o get

Enviado: 05 Abr 2006 14:50
por Josmar dos Santos
Ola galera, blz....antes de mais nada orbrigado pela força e atençao de voces. Eu testei todas as rotinas que vocês me passaro e nem uma deu resultado....Se alguem tiver outra sugestão eu agradeço.
Eu estava pensando em criar uma variável de memória e jogar o resultado dela nessa varável (sado_rec) dbu...será que tem jeito de fazer isso ?Se der para fazer isso posso colocar o "say" no lugar do get...ai não precisa mais da função. Isso porque o resultado da funcçao poderá ser jogado na variavel de memoria e o resultado do mesmo na variavel saldo_rec.....sem mais grato
josmar

Enviado: 05 Abr 2006 15:24
por Daniel
tenta assim

Código: Selecionar todos

@ 11, 23 GET M->HIST_REC PICTURE "@!"
@ 11, 56 GET M->PAGTO_REC
@ 14,  7 GET M->PAGO_REC PICTURE "@Z 999,999,999.99" Valid IFU03011()

-> o calculo e feito aqui !
@ 14, 23 Say M->SALDO_REC PICTURE "@Z 999,999,999.99" COLOR CONTECOR[ 8 ]

// -> Funcao que faz calculo com campos numericos
M->SALDO_REC := M->VALOR_REC-M->PAGO_REC
@ 14, 23 SAY M->SALDO_REC PICT "@Z 999,999,999.99" COLOR CONTECOR[ 8 ]
RETURN .T.


Enviado: 06 Abr 2006 19:11
por C Leonam
Olá

Vamos ver, o que vc quer é saltar o GET mas que sejam feitos os processamentos desejados, certo?

Então porque não usar a cláusula WHEN para isso. Veja abaixo:

Código: Selecionar todos

@ 14, 23 GET M->SALDO_REC PICTURE "@Z 999,999,999.99" WHEN DesligaGET("IFU03011()")

-----------------------------------------------------------------
#INCLUDE "INKEY.CH"
FUNCTION DesligaGET(bProcessos)
LOCAL lVolta := .T.
   IF bProcessos=NIL
      bProcessos := {||.T.}
   ELSEIF VALTYPE(bProcessos)='C'
      bProcessos := &"{||"+ALLTRIM(bProcessos)+"}"
   ENDIF

   // Executa a sua função
   EVAL(bProcessos) 

   // Simulação das teclas de entrada no GET para forçar a saida
   IF LASTKEY()==K_DOWN
      __KEYBOARD(CHR(K_DOWN))
   ELSEIF LASTKEY()==K_UP
      __KEYBOARD(CHR(K_UP))
   ELSE
      __KEYBOARD(CHR(K_ENTER))
   ENDIF

RETURN lVolta
Na função DesligaGET é passado no parâmetro "bProcessos" (como TEXTO ou CODEBLOCK) a sua função, se não passar nada apenas o GET não vai permitir edição.

Ah! Lembre que as variáveis deverão ser PRIVATE para serem vistas na função. Ou se vc desejar pode passa-las como parâmetros também, é só modificar a função DesligaGET

:xau

Enviado: 06 Abr 2006 19:28
por Augusto
E se vc der um "READ" após o último GET antes desse e esse passar a ser um SAY ??

Falei besteira ??

Enviado: 06 Abr 2006 19:52
por MARCELOG
Caro Josmar,
só não entendi por que gastar um get com isso?
Todavia, veja isto:

cls

a:=1
b:=2
c:=space(6)
d:=3

@ 10,2 get a
@ 12,2 get b;
valid {||c:=a+b,.t.}
@ 14,2 get c;
when {|n|Imprime(n)} //Retornando .F. nunca vai ter o foco
@ 16,2 get d
Read


function Imprime(n)

n:Display()
Return .f.


Espero ter ajudado

MarceloG

Enviado: 06 Abr 2006 20:02
por MARCELOG
Apenas para entender a dica anterior:

Toda vez que você sair do get b a cláusula valid vai ser avaliada e igualar a variável c à soma de get a + get b.

A cláusula valid do get b termina com .t. para sempre permitir a saída do mesmo.

Quando o foco é transferido para o get c a cláusula when é avaliada.

Então a gente pede para o programa exibir (display) o conteúdo da variável c (get c) e retorna .f.

Como c é igual a a+b, o resultado é exibido.

Retornando .f. a cláusula when não é satisfeita, então o programa vai para o get seguinte ou fica no mesmo get.

When é condição de entrada
Valid é condição de saída

Sacou!?

Beleza então!


A

Enviado: 07 Abr 2006 10:35
por digitom
Tenta assim:


FUNCTION IFU03011
IF VALIDA = NIL
VALIDA := .T.
ENDIF
CLEAR GETS
M->SALDO_REC := M->VALOR_REC-M->PAGO_REC
@ 14, 23 SAY M->SALDO_REC PICT "@Z 999,999,999.99"
RETURN .T.


@ 14, 23 GET M->SALDO_REC PICTURE "@Z 999,999,999.99" VALID IFU03011()

Caso não tenha nenhum outro GET isso vai funcionar.

Pular o get

Enviado: 08 Abr 2006 15:40
por Josmar dos Santos
Ola C Leonam.....blz, estou tentando testar a sua rotina que vc me mandou. Gostaria de saber porque esta dando erro de syntax nessa rotina -->bProcessos := &"{||"+Alltrim(bProcessos)+"}"...o erro que ocorre e esse: '{||'...eu ja mexi em tudo e não consegui arrumar...
Obrigado por enquanto...
valew
josmar

Enviado: 08 Abr 2006 22:14
por marbio
Boa Noite.

Eu acho que nao entendi sua pergunta mais vai um teste. certo

clear
x1=0
x2=0
x3=0
x4=0
@01,01 say 'Sub Total R$ ' get x4 pict '@e 999.99'
@02,01 say 'Desconto.... ' get x1 pict '@E 999.99' valid calculo()
@03,01 say 'Total........'
@04,01 say 'teste ' get x2 pict '@E 999.99'
read

function calculo()
xtotal=x4-x1
@03,01 say 'Total........' +transf(xtotal,'@E 999.99')
return .t.


t+