Page 1 of 1

Refrescar datos en Folder - SOLUCIONADO

PostPosted: Mon Feb 28, 2011 6:10 pm
by Armando Picon
Amigos

Estoy usando, por vez primera, un folder que pertenece a un modulo1 para rellenar datos provenientes de un un browse perteneciente a un modulo2. El inconveniente es que los datos procedentes del browse no aparecen en el Folder sino hasta que vuelva a clickar en el GET que ha solicitado el dato.

Por fa' ¿hay manera de refrescar el get del folder de una manera simple?

Este es el trozo de codigo:
Function CtaBco()

DEFINE DIALOG oDlg1 ;
RESOURCE "MiFolder" ;
of oWndBCO

oDlg1:cCaption := Title
oDlg1:lHelpIcon := .f.
oDlg1:bGotfocus := {|| oNombre:Setfocus(), oFld:refresh()}

REDEFINE FOLDER oFld ID 333 OF oDlg1 ;
PROMPT "Datos Generales", ;
"Observaciones";
DIALOGS "Dlg_1", "Dlg_2" ;
UPDATE

oFld:lWin95Look := .T.

REDEFINE GET oCuenta VAR CTABCO ;
OF oFld:aDialogs[1] ;
ID 336 PICTURE "@ !" ;
VALID (IIF(EMPTY(CTABCO), ; // para mostrar el dato recibido se tiene que clickar nuevamente en este GET
( CatchCta(oCuenta, CTABCO), oFld:refresh(), oCuenta:Setfocus(), oCuenta:refresh(), .T. ), .F.)) ;
UPDATE

ACTIVATE DIALOG oDlg1 CENTERED


oFont:end()
oFont1:end()
SELECT(cAlias)
DBGOTO(nRec)

RETURN NIL

FUNCTION CatchCta( oCuenta, cCTABCO )
*
LOCAL oDlg, oBrw, oBtn1, oBtn2, oBtn3, oBtn4, oBtn5
LOCAL nRec, lOk := .F.
LOCAL cAlias := ALIAS()
* ---Initialize database file.
SELECT Cta
DBGOTOP()
*
* ---Main execution loop.
DEFINE DIALOG oDlg RESOURCE "BrwABMP" ;
TITLE "Cuentas Contables"
oDlg:lhelpicon:= .F.

REDEFINE LISTBOX oBrw ;
ALIAS Cta ;
FIELDS ;
Cta->CTA_CODIGO, ;
Cta->CTA_DESCRI ;
HEADERS ;
"Código", ;
"Cuenta Contable" ;
ID 101 ;
ON DBLCLICK (lOk := .T., oDlg:end() ) ;
OF oDlg UPDATE

oBrw:UpStable()

REDEFINE BUTTON oBtn3 ;
ID 104 ;
OF oDlg ;
ACTION (lOk := .T., oDlg:end() ) ;
MESSAGE "Este es el boton 3 - Seleccionar"
oBtn3:cCaption := "&Seleccionar"

REDEFINE BUTTON oBtn5 ;
ID 106 ;
OF oDlg ;
ACTION ( oDlg:end() ) ;
MESSAGE "Este es el boton 5 - sALIR" CANCEL

ACTIVATE DIALOG oDlg CENTERED
*
IF lOk
cCTABCO := ALLTRIM(Cta->CTA_CODIGO)
oCuenta:cText(cCTABCO)
oCuenta:refresh()
ENDIF
*
SELECT(cAlias)
RETURN(.T.)[color=#0000FF][color=#0000FF][color=#0000FF][/color][/color][/color]

Re: Refrescar datos en Folder

PostPosted: Mon Feb 28, 2011 7:20 pm
by Manuel Aranda
Hola Armando,
Prueba así:
Code: Select all  Expand view

*
IF lOk
   cCTABCO := ALLTRIM(Cta->CTA_CODIGO)
   oCuenta:VarPut(cCTABCO)
   oCuenta:EditUpdate()
   oCuenta:Refresh()
ENDIF
*
 

Re: Refrescar datos en Folder

PostPosted: Mon Feb 28, 2011 11:15 pm
by Armando Picon
Manuel

El get contenido en el folder no se refresca. Continúa necesitando clickar en el Get. ¿Otra sugerencia?

Re: Refrescar datos en Folder

PostPosted: Tue Mar 01, 2011 3:25 pm
by MarioG
Armando;
a ver si esto funciona
Code: Select all  Expand view


VALID (IIF(EMPTY(CTABCO), ; // para mostrar el dato recibido se tiene que clickar nuevamente en este GET
( CatchCta(oCuenta, @CTABCO), oFld:refresh(), oCuenta:Setfocus(), oCuenta:refresh(), .T. )

...

IF lOk
   cCTABCO := ALLTRIM(Cta->CTA_CODIGO)
ENDIF
 


Me resulta raro que no funcione con VarPut()
Saludos

Re: Refrescar datos en Folder

PostPosted: Tue Mar 01, 2011 9:31 pm
by Armando Picon
Mario

Tampoco funca. Sigue necesitando darle al click nuevamente. Es como si algo faltara en el manejo del objeto folder para que pudiera refrescar el Get. Se continúa aceptando sugerencias... :wink:

Re: Refrescar datos en Folder

PostPosted: Wed Mar 02, 2011 12:15 am
by MarioG
Se me ocurre una trampa

...( CatchCta(oCuenta, CTABCO), oFld:refresh(), oCuenta:Setfocus(), oCuenta:Click(), oCuenta:refresh(), .T. )

,...ya que es el click lo que lo refresca :wink:

Re: Refrescar datos en Folder

PostPosted: Wed Mar 02, 2011 2:09 am
by Armando Picon
Ni el truco funca.

También probe:
IF lOk
cCTABCO := ALLTRIM(Cta->CTA_CODIGO) + CHR(13) // para incluir un Return
ENDIF

¡Uffff! ¡Esta "macana" de folder si que se ha vuelto más arisca que "mujer coqueta"!

Re: Refrescar datos en Folder

PostPosted: Wed Mar 02, 2011 2:17 am
by Kleyber
Armando,

Intenta esto y me comentas:

Code: Select all  Expand view

...( CatchCta(oCuenta, CTABCO), xSetfocus(oCuenta), oCuenta:refresh(), oFld:refresh(), .T. )
 


Code: Select all  Expand view

//----------------------------------------------------------------------------//
function xSetFocus( oObx )
// Atualizacao da tela
//----------------------------------------------------------------------------//
local oTempo:=""

define timer oTempo interval 10 of oObx:oWnd ;
  action (oObx:SetFocus(), oObx:SetPos(0), oTempo:Deactivate() )

activate timer oTempo

return nil
 

Re: Refrescar datos en Folder

PostPosted: Wed Mar 02, 2011 3:03 am
by Raymundo Islas M.
Armando,

Al final de la rutina donde tomas los nuevos valores, bastaria que mandaras un oFld:aDialogs[1]:update()


Saludos

Re: Refrescar datos en Folder

PostPosted: Wed Mar 02, 2011 3:14 am
by Armando Picon
Kleyber, Mario, Manuel

Ya está solucionado. Tuve que utilizar los metodos del Folder y del Get para que funcione bien. Aunque la solución propuesta, al final, por Raymundo también es otra mejor y más simple.

Raymundo

Tu solución también funciona y es más simple que el que encontré... Al final, las soluciones fueron más simples de lo esperado.

Esta fue mi solucion usando metodos del Folder y del Get

REDEFINE GET oCuenta VAR CTABCO ;
OF oFld:aDialogs[1] ;
ID 336 PICTURE "@!" ;
VALID (IIF(EMPTY(CTABCO), ;
( CatchCta(oCuenta, CTABCO), oFld:Update(),.T.), .F.) )

oCuenta:lUpdate=.t.