Una Solucion?

Una Solucion?

Postby Mike Serra » Wed Oct 01, 2008 11:02 pm

Buenas Noches foro, a ver si me podeis echar una mano. . . :?
En una tabla tengo lo siguiente:

140001
140002
410001
410002
410003

Ahora bien, en un get introduzco 2 digitos (o 14 o 41), y en ese mismo get tiene que completarlo con el siguiente valor, es decir, si en el get pulso 14 se completara y quedara 140003 o 41 y el get quedará 410004

Casi todo funciona bien, ya que la función que me calcula y actualiza el get está en su valid

Code: Select all  Expand view  RUN
redefine get oget1 var Codigo id 201 of odlg valid CalculaNumero(@Codigo,oget1)


pero la funcion se ejecuta 2 veces, 1 cuando introduzco los 2 dígitos y pulso intro, y otro cuando ya lo ha calculado y refresca/actualiza el get, se lanza.

He probado poniendo en la funcion CalculaNumero (antes de actualizar el get) un:
oGet1:bValid:=nil y tambien
oGet1:bValid:={||.t.}
pero no funciona.

¿Sabeis como puedo hacer que se ejecute solo la primera vez?

MUCHAS GRACIAS y buenas noches
Mike Serra
 
Posts: 297
Joined: Fri Apr 14, 2006 5:52 pm
Location: Córdoba (España)

Postby Antonio Linares » Wed Oct 01, 2008 11:06 pm

Mike,

Puedes usar la longitud del código:
Code: Select all  Expand view  RUN
redefine get oget1 var Codigo id 201 of odlg valid If( Len( AllTrim( Str( Codigo ) ) ) == 2, ( CalculaNumero(@Codigo,oget1), .T. ), .T. )
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42161
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby triumvirato » Thu Oct 02, 2008 8:57 am

Mike,

Una cosa que se me ocurre, es que fueses haciendo el cálculo desde la cláusa ON CHANGE del get, según se van pulsando teclas, en lugar de hacer ese cálculo con el VALID. Después en el VALID puedes hacer la comprobación, sin variar el contenido del GET...

Saludos.
triumvirato
 
Posts: 199
Joined: Tue Apr 22, 2008 9:54 am
Location: Valladolid, Spain.

Mike Prueba esto

Postby Ramon Paredes » Fri Oct 03, 2008 2:44 am

Mike,

Prueba esto, a mi me funciona ok,

// este es el get
REDEFINE oGet1 Var mNumero ID 110 of oDlg VALID(SIGUE(@mNumero,@oGet1))


function sigue(Fnum,foNum)

// debes de tener una tabla con 2 campos numericos donde llevar el control del consecutivo

if substr(fnum,1,2) = "14"
SELECT CONTROL
MULTIMO = control->ULTIMO
else
//SELECT CONTROL
MULTIMO = control->ULTIMO1
endif

xNumero = str(mUltimo + 1)
xNumero = rellena(xNumero,"0",3)
fNum = substr(fNum,1,2)+xNumero

foNum:Varput(fNum)
foNum:Refresh()

RETURN .t.

// despues al momento de grabar el registro actualizas tu tabla de control asi :

SELECT CONTROL
xdato = substr(mNumero,3,3)
control->ULTIMO = val(xdato)

// y listo para el siguiente registro

//====================
FUNCTION RELLENA()
//====================

PARAMETERS FCAMPO,FCAR,FLONG

LOCAL oRet, FC, FL, FD

IF LEN(ALLTRIM(FCAMPO)) = FLONG
FD := FCAMPO
ELSE
FC = ALLTRIM(FCAMPO)
FL = LEN(FC)
FD = REPLICATE(FCAR,FLONG-FL)+FC
ENDIF

RETURN FD


Saludes desde Managua, Nicaragua

Ramon Paredes
... Desde la Tierra de lagos y Volcanes......
User avatar
Ramon Paredes
 
Posts: 215
Joined: Fri Feb 02, 2007 3:38 pm
Location: Managua, Nicaragua


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 41 guests

cron