Filtrado de registros en LISTBOX con CDX

Filtrado de registros en LISTBOX con CDX

Postby Manuel Aranda » Tue May 16, 2006 6:05 pm

En un LISTBOX muestro los registros que cumplen una condición elegida desde un COMBOBOX. Según la opción elegida cambio el índice activo y con TOPSCOPE Y BOTTOMSCOPE filtro los registro a mostrar. Todo funciona perfectamente menos cuando no existen registros según la condición especificada. En este caso se produce un cuelgue del programa.
Alguna explicación ?

Uso fivewin 2.3 y blinker 6.0
User avatar
Manuel Aranda
 
Posts: 602
Joined: Wed Oct 19, 2005 8:20 pm
Location: España

Postby DanielPuente » Fri May 19, 2006 5:28 am

Manuel:

Yo hago eso bastante seguido y no tengo problemas. Lo uso para dos browses uno debajo del otro, el de arriba con los encabezados de facturas y el de abajo scopeado con el detalle de articulos o para filtrar la cuenta corriendo de un cliente, etc, etc.

Con lo que tenes que tener cuidado con los scopes es con no errarle al indice que corresponde activar para el scope o a los datos que mandas a filtrar, si no coinciden ahi es donde se producen cuelgues del programa o gpfs.

Code: Select all  Expand view


  REDEFINE LISTBOX oBrw Fields DTOC(CCCLI->FECHA),;
                                              CCCLI->DETALLE,;
                                              TRANS(CCCLI->DEBE,"@E 999,999.99"),;
                                              TRANS(CCCLI->HABER,"@E 999,999.99"),;
                                              TRANS(CCCLI->SALDO,"@E 999,999.99");
                                              ID 110  OF oDlg;
  HEADERS "Fecha","Detalle","Debe ","Haber","Saldo ";
  FIELDSIZES 80, 290, 90, 90, 90;
  COLOR CLR_BLACK, RGB(202, 197, 192)

   REDEFINE BTNGET oDesde VAR cDesde ID 113 OF oDlg ;
      RESOURCE "B_Cld" PICTURE "@D" VALID ValDesde(oBrw,vCodigo,@cDesde,oDesde,@vSaldo,oSaldo) ;
         FONT oFont3;
      ACTION (aRec :=GetCoors(oDesde:hWnd),;
              cDesde:=Calend(cDesde,aRec[1],aRec[4],oDlg),;
              oDesde:Refresh(),oDesde:SetFocus())

   REDEFINE BTNGET oHasta VAR cHasta ID 114 OF oDlg ;
      RESOURCE "B_Cld" PICTURE "@D" VALID ValHasta(oBrw,vCodigo,@cHasta,oHasta,@vSaldo,oSaldo) ;
         FONT oFont3;
      ACTION (aRec :=GetCoors(oHasta:hWnd),       ;
              cHasta:=Calend(cHasta,aRec[1],aRec[4],oDlg),;
              oHasta:Refresh(),oHasta:SetFocus())

FUNCTION ValDesde(oBrw,vCodigo,wFecdsd,oFecent,vSaldo,oSaldo)
    vSaldo:=0
   IF EMPTY(WFECDSD)
        CCCLI->(ORDSCOPE(0,PADL(vCodigo,4,'0')+"19900101"))
         CCCLI->(DBGOTOP())
      wfecdsd:=CCCLI->FECHA
      oFecent:Refresh()
   ENDIF
   CCCLI->(ORDSCOPE(0,PADL(vCodigo,4,'0')+DTOS(wFecdsd)))
   CCCLI->(DBGOTOP())

   CCCLI->(DbEval( { || vSaldo+= CCCLI->DEBE - CCCLI->HABER,IF(CCCLI->(DBRLOCK()),(CCCLI->SALDO:=vSaldo,;
                        CCCLI->(DBUNLOCK())),)} ))
   CCCLI->(DBGOTOP())
   oBrw:Refresh()
   oSaldo:Refresh()

RETURN .T.

FUNCTION ValHasta(oBrw,vCodigo,wFecHST,oFecent,vSaldo,oSaldo)
vSaldo:=0
   IF EMPTY(WFECHST)
      wfecHST:=DATE()
      oFecent:Refresh()
   ENDIF
   CCCLI->(ORDSCOPE(1,PADL(vCodigo,4,'0')+DTOS(wFecHST)))
   CCCLI->(DBGOTOP())
   CCCLI->(DbEval( { || vSaldo+= CCCLI->DEBE - CCCLI->HABER,IF(CCCLI->(DBRLOCK()),(CCCLI->SALDO:=vSaldo,;
                        CCCLI->(DBUNLOCK())),)} ))
   CCCLI->(DBGOTOP())
   LLOCLIEN->(DBSETORDER(1))
   IF LLOCLIEN->(DBSEEK(PADL(vCodigo,4,'0'),.F.))
      IF LLOCLIEN->(DBRLOCK())
         REPLACE LLOCLIEN->SALDOM WITH vSaldo
         REPLACE LLOCLIEN->SALDOD WITH DATE()
         LLOCLIEN->(DBUNLOCK())
      ENDIF
   ENDIF
   LLOCLIEN->(DBCOMMIT())

   oBrw:Refresh()
   oSaldo:Refresh()

RETURN .T.




Saludos,
Daniel Puente
Mar del Plata, Argentina
danielpuente@speedy.com.ar
puenteda@hotmail.com
DanielPuente
 
Posts: 108
Joined: Sun Oct 09, 2005 6:12 pm
Location: Mar del Plata - Argentina

Postby Manuel Aranda » Fri May 19, 2006 3:51 pm

Gracias Daniel por tu respuesta. Yo también lo uso como tú y no me da problemas. Pero en el caso que describo se produce un cuelgue cuando no se encuentran registros a mostrar. No lo entiendo. Pero como hay más de un camino para llegar a Roma, lo he solucionado haciendo, antes de establecer el SCOPE, un Datos->(DbSeek(condicion)) y funciona perfectamente.

Un saludo,
Manuel Aranda
User avatar
Manuel Aranda
 
Posts: 602
Joined: Wed Oct 19, 2005 8:20 pm
Location: España


Return to FiveWin para CA-Clipper

Who is online

Users browsing this forum: No registered users and 5 guests