Actualizar Index Abierto en Listbox

Actualizar Index Abierto en Listbox

Postby dobfivewin » Tue Mar 31, 2009 9:03 am

Estimados Amigos

Tengo un problema y no se como puedo solucionarlos....

Tengo un Listbox de una bases de dato filtrada y estoy realizando un refresh() actualizando la visualizacion, el tema que cuando desde otra terminal me agrega un registro desde el Listbox que tengo en ejecuacion NO se actualiza el Index por lo que cuando hago la actualiuzacion muestra cualquier cosa, en principio "creo" que es logico ya que la base de dato se actualiza pero el index NO.
Se puede actualizar el Index miestras esté abierto dentro de un Listbox??

esero haber sido claro :?: :?:

paso como tengo armado mi aplicacion...

Code: Select all  Expand view
...
..
.
  DBSELECTAREA( PRESUPU )
  @ 0.875,  1 LISTBOX oLbxPRESU ;
                     FIELDS Transform((PRESUPU)->SOL_NRO,'9999999999') ,;
                            Transform((PRESUPU)->PRE_NRO,'9999999999') ,;
                            (PRESUPU)->NOMB ,;
                            StatusPresupuesto((PRESUPU)->CANCSPR) ,;
                            (PERAUTO)->NOMBRE ,;
                            str((PRESUPU)->CANCSPR,2) ;
                     HEADERS 'Sol.Cotizacion' ,;
                             'Presupuesto',;
                             'Cliente',;
                             'Status' ,;
                             'Usuario Actual:' ,;
                             ' ' ;
                     SELECT 'USUACTU' FOR mRESP TO mRESP ;
                     on change ( xRecno := (PRESUPU)->(RECNO()) ,;
                                 If((PRESUPU)->PRE_NRO<>0,;
                                     (oBTN2:DISABLE(),oBTN5:ENABLE() ) ,;
                                     (oBTN2:ENABLE() ,oBTN5:DISABLE())) ,;
                                 oLbxPRESU:nClrPane:={||If((PRESUPU)->URGENCI==1,;
                                                                            CLR_HCYAN,;
                                                                            CLR_HGRAY ) } ) ;
                     FIELDSIZES 70,70,180,250,180,40 ;
                       SIZE 290,145 ;
                         of oDlgCar

   oLbxPRESU:nLineStyle = 1

   oLbxPRESU:SetFilter( 'USUACTU' ,mRESP ,mRESP )
   oLbxPRESU:GoTop()
   oLbxPRESU:Refresh()

   oBTN1:ENABLE() // Nueva SP
   If (PRESUPU)->PRE_NRO <> 0 .and. !(PRESUPU)->(eof())
     oBTN2:ENABLE()  // Mofid.Anular SP
   Else
     oBTN2:DISABLE()  // Mofid.Anular SP
   EndIf

   If AccePRESU .and. (PRESUPU)->PRE_NRO <> 0
     oBTN3:ENABLE()  // PRESUPUESTO
   Else
     oBTN3:DISABLE()  // PRESUPUESTO
   EndIf

 
ACTIVATE DIALOG oDlgCar CENTERED  ;
                ON INIT (ActuaLista(oLbxPRESU,PRESUPU,mRESP,oDlgCar),;
                         oLbxPRESU:SetFocus())

dbcloseall()

return .t.


FUNCTION ActuaLista(oLbx , base , mRESP , oDlg)
         
DEFINE TIMER oTmr INTERVAL 10000 ;
             ACTION ((base)->(dbgoto(xRecno)) ,; //    oLbx:Upstable(),;
                     oDlg:Update() ) ;
                     of oDlg
ACTIVATE TIMER oTmr  

RETURN .t.

EXIT PROC Salir()

  // esto se ejecuta al salir, normal o cuelgue
  // y verificas si es un Obj es que no se elimino, asi que le das ::END()
if valtype(oTmr) == "O"
    oTmr:End() ;  oTmr := NIL
endif

return NIL
dobfivewin
 
Posts: 325
Joined: Sun Feb 03, 2008 11:04 pm
Location: Argetnina

Re: Actualizar Index Abierto en Listbox

Postby Willi Quintana » Tue Mar 31, 2009 4:04 pm

Hola,
Te sugiero lo siguiente:
1ro, ten un EVAL para realizar el filtrado, te aconsejo que uses OrdScope
2do, arma un timer que cada x segundos active el EVAL y luego un refresh en el listbox, listo...

eFiltro := {||DBSELECTAREA( PRESUPU ), OrdScope(mRESP,0),OrdScope(mRESP,0), oLbx:Refresh()}
EVAL(eFiltro)
DEFINE TIMER oTrm INTERVAL 10000 ACTION EVAL(eFiltro)
@ 0.875, 1 LISTBOX oLbxPRESU ;
FIELDS Transform((PRESUPU)->SOL_NRO,'9999999999') ,;
Transform((PRESUPU)->PRE_NRO,'9999999999') ,;
(PRESUPU)->NOMB ,;
StatusPresupuesto((PRESUPU)->CANCSPR) ,;
(PERAUTO)->NOMBRE ,;
str((PRESUPU)->CANCSPR,2) ;
HEADERS 'Sol.Cotizacion' ,;
'Presupuesto',;
'Cliente',;
'Status' ,;
'Usuario Actual:' ,;
' ' ;
on change ( xRecno := (PRESUPU)->(RECNO()) ,;
If((PRESUPU)->PRE_NRO<>0,;
(oBTN2:DISABLE(),oBTN5:ENABLE() ) ,;
(oBTN2:ENABLE() ,oBTN5:DISABLE())) ,;
oLbxPRESU:nClrPane:={||If((PRESUPU)->URGENCI==1,;
CLR_HCYAN,;
CLR_HGRAY ) } ) ;
FIELDSIZES 70,70,180,250,180,40 ;
SIZE 290,145 ;
of oDlgCar

oLbxPRESU:nLineStyle = 1

oLbxPRESU:GoTop()
oLbxPRESU:Refresh()

oBTN1:ENABLE() // Nueva SP
If (PRESUPU)->PRE_NRO <> 0 .and. !(PRESUPU)->(eof())
oBTN2:ENABLE() // Mofid.Anular SP
Else
oBTN2:DISABLE() // Mofid.Anular SP
EndIf

If AccePRESU .and. (PRESUPU)->PRE_NRO <> 0
oBTN3:ENABLE() // PRESUPUESTO
Else
oBTN3:DISABLE() // PRESUPUESTO
EndIf


ACTIVATE DIALOG oDlgCar CENTERED ;
ON INIT (oTmr:Activate())

dbcloseall()

return .t.


// esto se ejecuta al salir, normal o cuelgue
// y verificas si es un Obj es que no se elimino, asi que le das ::END()
if valtype(oTmr) == "O"
oTmr:End() ; oTmr := NIL
endif

return NIL
User avatar
Willi Quintana
 
Posts: 1019
Joined: Sun Oct 09, 2005 10:41 pm
Location: Cusco - Perú

Re: Actualizar Index Abierto en Listbox

Postby dobfivewin » Wed Apr 01, 2009 11:33 pm

Amigo Willi

muchas gracias por tu respuesta, hago la prueba y te aviso...

gracias

david
argentina
dobfivewin
 
Posts: 325
Joined: Sun Feb 03, 2008 11:04 pm
Location: Argetnina


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 55 guests