uan con GET ... VALID

Post Reply
User avatar
albeiroval
Posts: 323
Joined: Tue Oct 16, 2007 5:51 pm
Location: Barquisimeto - Venezuela

uan con GET ... VALID

Post by albeiroval »

Buenas tardes,

Como hago para que en un control GET no me valide si su valor no lo cambia el usuario.

Anexo el codigo que he probado.

Code: Select all


....

REDEFINE GET oGet[1] VAR h["Factura"] ID 200 OF oDlg;
    PICTURE "9999999999";
    VALID ValidaNumeroFactura( oGet[1], h["Factura"] )
    // ON CHANGE ( msginfo("cambio el valor") )



....

static Function ValidaNumeroFactura( oGet, nFactura )
  // Local cFactura:= StrZero(nFactura, 12)
  
  ? oGet:value()
  
  oGet:Assign()
  
  ? oGet:value(), oGet:oGet:changed
  
  // ?  ( oGet:varget() <> oGet:oGet:original )
  /*
  if ExisteFacturaVenta( cFactura )
         MsgStop("Factura "+cFactura+" Existe", ovarsis:Empresa)
       Return FALSE
    endif    
    */
    
Return TRUE 
 
Usando la clausula ON CHANGE no me sirve porque al oprimir la primera tecla ( imagino que activa el :bKeychar ) solo me toma ese caracter.

saludos,
Saludos,
Regards,

Albeiro Valencia
www.avcsistemas.com
User avatar
cnavarro
Posts: 5792
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: uan con GET ... VALID

Post by cnavarro »

Comprueba en la funcion de validacion o en el codeblock de validacion los valores a ver si sirve
if ::cCaption == ::oGet:Buffer
C. Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
User avatar
albeiroval
Posts: 323
Joined: Tue Oct 16, 2007 5:51 pm
Location: Barquisimeto - Venezuela

Re: uan con GET ... VALID

Post by albeiroval »

Cristobal, gracias por reponder.

probe en la funcion que valida asi :

Code: Select all

static Function ValidaNumeroFactura( oGet, nFactura )
  // Local cFactura:= StrZero(nFactura, 12)

  ? oGet:cCaption, oGet:oGet:Buffer, ( oGet:cCaption == oGet:oGet:Buffer )
    
  /*
  if ExisteFacturaVenta( cFactura )
         MsgStop("Factura "+cFactura+" Existe", ovarsis:Empresa)
       Return FALSE
    endif    
    */
    
Return TRUE 
 
Muestra lo siguiente :

oGet:cCaption = "vacio" ... el valor es numerico pero no muestra nada
oGet:oGet:Buffer = "vacio" ... el valor es numerico pero no muestra nada
( oGet:cCaption == oGet:oGet:Buffer ) = ".T." .. muestra .T.

Esto lo hace auque tipee '0' o cualquier otro valor numerico.

:(
Saludos,
Regards,

Albeiro Valencia
www.avcsistemas.com
User avatar
cnavarro
Posts: 5792
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: uan con GET ... VALID

Post by cnavarro »

Compara lo siguiente:

Code: Select all


MsgInfo( oGet:cCaption ), Msginfo( oGet:cText() )
 
modifica el valor
C. Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
User avatar
albeiroval
Posts: 323
Joined: Tue Oct 16, 2007 5:51 pm
Location: Barquisimeto - Venezuela

Re: uan con GET ... VALID

Post by albeiroval »

Cristobal,
MsgInfo( oGet:cCaption ) // = "nil"
Msginfo( oGet:cText() ) // ="muestra el valor tipeado"
Saludos,
Regards,

Albeiro Valencia
www.avcsistemas.com
User avatar
gautxori
Posts: 69
Joined: Thu Feb 25, 2010 12:44 pm
Location: Plentzia (Bizkaia)

Re: uan con GET ... VALID

Post by gautxori »

Ejecuta un VALID de un Dialogo "sin permiso"

Activo varios Dialogos NOWAIT, dentro de la Ventana oWndIva

Se presentan todos correctamente PERO al final se activa un VALID OBRA() del Dialogo oDDAbmLin
que llamo desde la Funcion Lineas() que no he llamado AUN

Ya he probado a simplificar el problema es decir no llamar a todos para ver si hay "interferencias"

el valid de Obra lo he simplificado y solo saca un mensaje por pantalla , y SI lo hace pero NO debería
hasta que se le pase el control
Acabo de ver que lo activa el oLbx ¿?, ya que si comento la llamada A Lineas() FUNCIONA

por si acaso he eliminado e ON CHANGE con el mismo resultado,

No alcanzo a ver que sucede

---------------------------

DEFINE Window oWndIva From 0,0 to MaxRow(),MaxCol();
ICON oIconAbm;
COLOR "N/W+";
TITLE OemToAnsi("Apuntes con Iva");
BORDER NONE NOSYSMENU NOMINIMIZE NOMAXIMIZE
Barra()
Cfactura()
Dfactura()
Barra2()
Linea()
Lineas()
DbSelectArea("civa")
oDCObra:Enable()
oBtnRas:SetFocus()
DEFINE MSGBAR PROMPT "Obras 32, (c) Go & Go Software 2016" ;
OF oWndIva KEYBOARD DATE
ACTIVATE Window oWndIva MAXIMIZED;
ON INIT (oWnd:Disable());
VALID(Cerrar(),oWnd:Enable())


----
Static Function Linea()
DEFINE DIALOG oDDAbmLin OF oWndIva RESOURCE "IVA_LIN"
REDEFINE GET oObra VAR cObra ID 100 OF oDDAbmLin VALID Obra()
REDEFINE GET oFechal VAR dFechal ID 102 OF oDDAbmLin ReadOnly
REDEFINE GET oCuenta VAR cCuenta ID 103 OF oDDAbmLin ReadOnly
REDEFINE GET oConcep VAR cConcep ID 104 OF oDDAbmLin VALID Concepto()
REDEFINE GET oDescri VAR cDescri ID 105 OF oDDAbmLin
REDEFINE GET oImport VAR nImport PICTURE "@E 999,999,999.99" ID 106 OF oDDAbmLin VALID Importe()
REDEFINE GET oTipo VAR nTipo PICTURE "@E 99.99" ID 107 OF oDDAbmLin VALID (G_Linea(),.t.)
REDEFINE GET oNumasi VAR cNumasi ID 101 OF oDDAbmLin ReadOnly
REDEFINE BUTTON oBtnObr ID 109 OF oDDAbmLin ACTION (If(HelpObr(),VolHObra(.t.),VolHObra(.f.)),.t.)
REDEFINE BUTTON oBtnCto1 ID 112 OF oDDAbmLin ACTION (If(Helpcon(),VolHcon(.t.),VolHcon(.f.)),.t.)
ACTIVATE DIALOG oDDAbmLin NOWAIT;
Valid (oWndIva:End())
oDDAbmLin:Disable()
----
Static Function Lineas()
DEFINE DIALOG oDDAbmLins OF oWndIva RESOURCE "IVA_LINS"
REDEFINE LISTBOX oLbx;
FIELDS bliva->Obra,bliva->Asiento,;
dtoc(bliva->fecha),;
bliva->Cuenta,bliva->Concepto,;
bliva->Descrip,;
Transform(bliva->Base,"@E 999,999,999.99"),;
Transform(bliva->Tipo,"@E 99.99");
HEADERS "N.Obra","Asiento",;
xPadc("Fecha",75),xPadc("Cuenta",60),"Cpto.",;
xPadc("Descripcion",210),;
xpadc("Base",90),"Tipo";
FIELDSIZES 55,55,70,60,50,210,90,40;
ALIAS "BLIVA";
ON CHANGE Toma_Lin();
ID 110 OF oDDAbmlins
ACTIVATE DIALOG oDDAbmLins NOWAIT;
// on init (oDDAbmLins:Disable());
// Valid (.T.);
// oDDAbmLins:Disable()
return nil

-----
Static Function Obra()

Local lVuelta:=.f.
msginfo('obra')
Return lVuelta
Un saludo
___________________________________________________
La mente es como un paracaídas, solo funciona si se abre
Harbour 3.2.0dev (r1601050904) , Fivewin 16.04
hmpaquito
Posts: 1200
Joined: Thu Oct 30, 2008 2:37 pm

Re: uan con GET ... VALID

Post by hmpaquito »

Hola,

Yo lo solucioné modificando en la clase TGet.

Code: Select all

DATA xValorOriginal
METHOD lOriginal()

// En metodo GotFocus() añade:
::xValorOriginal:= ::VarGet()

// Este metodo solo tiene sentido usarlo durante la edicion, especialmente en el VALID.
METHOD lOriginal()
RETURN ::xValorOriginal == ::VarGet()
Luego en el valid sólo tienes que preguntar por oGet:lOriginal(). Lo uso muchísimo en mis programas.
Salu2
User avatar
gautxori
Posts: 69
Joined: Thu Feb 25, 2010 12:44 pm
Location: Plentzia (Bizkaia)

Re: uan con GET ... VALID

Post by gautxori »

Buenos días, intentaré reproducirlo a la tarde, aunque no "pillo" muy bien como hacerlo

de todas formas si opto por esta solución, habría que cambiar todos los GET con VALID ¿?
Muchas gracias
Un saludo
___________________________________________________
La mente es como un paracaídas, solo funciona si se abre
Harbour 3.2.0dev (r1601050904) , Fivewin 16.04
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: uan con GET ... VALID

Post by Antonio Linares »

Prueba a hacer esto:

REDEFINE GET oObra VAR cObra ID 100 OF oDDAbmLin VALID If( oObra:lFocused, Obra(), .T. )

si no lo soluciona, prueba asi:

REDEFINE GET oObra VAR cObra ID 100 OF oDDAbmLin VALID If( oDDAbmLin:lFocused, Obra(), .T. )

Esto sucede porque el diálogo pierde el foco. Despues de activarlo puedes hacer asi:

oDDAbmLin:SetFocus()
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
gautxori
Posts: 69
Joined: Thu Feb 25, 2010 12:44 pm
Location: Plentzia (Bizkaia)

Re: uan con GET ... VALID

Post by gautxori »

Muchas gracias Antonio,
funciono perfectamente la primera opción,
voy viendo la Luz, :D
Un saludo
___________________________________________________
La mente es como un paracaídas, solo funciona si se abre
Harbour 3.2.0dev (r1601050904) , Fivewin 16.04
Post Reply