Page 1 of 1

ayuda con un xbrowse

PostPosted: Wed Jan 27, 2016 8:30 pm
by mastintin
Necesito me ayudeis con un xbrowse ... es una cosa muy concreta y voy a intentar resumirla a ver si me explico bien ...
En xbrowse de varias columnas con alias de una dbf ... en su primera columna se colocan unos bitmpas y nos valores que son calculados en una función muy compleja ...

obrW:aCols[1]:bBmpData := { || ncondicion( cAlias ) } // devuelve un valor numerico del 1 al 5
obrW:aCols[1]:bEditVale := { || ponCaracter( ncondicion( calias ) ) } // devuelve un carácter que depende del valor de nCondicion

El tema es que la fusión nCondicion es una función compleja que lleva su tiempo y al ejecutarse por duplicado hace el xbrowse bastante lento . como podría codificarlo para que solo se ejecutase una vez.
Seguro que es sencillo pero no se realmente como hacerlo .
Saludos.

Re: ayuda con un xbrowse

PostPosted: Wed Jan 27, 2016 8:56 pm
by cnavarro
mastintin wrote:Necesito me ayudeis con un xbrowse ... es una cosa muy concreta y voy a intentar resumirla a ver si me explico bien ...
En xbrowse de varias columnas con alias de una dbf ... en su primera columna se colocan unos bitmpas y nos valores que son calculados en una función muy compleja ...

obrW:aCols[1]:bBmpData := { || ncondicion( cAlias ) } // devuelve un valor numerico del 1 al 5
obrW:aCols[1]:bEditVale := { || ponCaracter( ncondicion( calias ) ) } // devuelve un carácter que depende del valor de nCondicion

El tema es que la fusión nCondicion es una función compleja que lleva su tiempo y al ejecutarse por duplicado hace el xbrowse bastante lento . como podría codificarlo para que solo se ejecutase una vez.
Seguro que es sencillo pero no se realmente como hacerlo .
Saludos.


Manuel, lo hago "al vuelo", pero se me ocurre algo asi

Yo modificaria la function nCondicion( cAlias ) para que devolviera un array con los dos valores { valor numerico 1-5, caracter }

Code: Select all  Expand view


 obrW:aCols[1]:bBmpData := {  ||  MyCondicion( cAlias, oBrw, ) } // devuelve un valor numerico  del 1 al 5
 obrW:aCols[1]:bEditVale := {  ||   ponCaracter( oBrw:cargo[ 2 ] )  }  // devuelve un carácter que depende del valor de nCondicion

.../...

Function MyCondicion( cAlias, oBrw, nPos )

   DEFAULT nPos := 0
   if Empty( nPos )
      oBrw:Cargo  := nCondicion( cAlias )
      nPos             := 1
   endif

Return oBrw:Cargo[ nPos ]   //1

 

Re: ayuda con un xbrowse

PostPosted: Wed Jan 27, 2016 9:42 pm
by mastintin
Cristobal , muy buena idea usar oBrw:cargo para guardar el valor .
Con esto estaría solucionado siempre que bBmpData se ejecute antes que bEditValue y así obrW:cargo tenga el valor correcto .

podría quedar así :

obrW:aCols[1]:bBmpData := { || obrW:Cargo:=ncondicion( cAlias ), obrW:cargo } // devuelve un valor numerico del 1 al 5
obrW:aCols[1]:bEditVale := { || ponCaracter( obrW:cargo ) } // devuelve un carácter que depende del valor de nCondicion

Mañana lo miro y cometo ...

Re: ayuda con un xbrowse

PostPosted: Thu Jan 28, 2016 11:23 am
by mastintin
solucionado usando Cargo . Gracias. :D

Re: ayuda con un xbrowse

PostPosted: Thu Jan 28, 2016 11:25 am
by cnavarro
Me alegro mucho, señor