FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para CA-Clipper Filtrado de registros en LISTBOX con CDX
Posts: 610
Joined: Wed Oct 19, 2005 08:20 PM
Filtrado de registros en LISTBOX con CDX
Posted: Tue May 16, 2006 06: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

Un saludo,

Manuel



xH 1.2.3, FWH 23.07 32 bits, BC++ 7.4, xVerce CW 1.0, PellesC
Posts: 108
Joined: Sun Oct 09, 2005 06:12 PM
Filtrado de registros en LISTBOX con CDX
Posted: Fri May 19, 2006 05: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.

  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
Posts: 610
Joined: Wed Oct 19, 2005 08:20 PM
Filtrado de registros en LISTBOX con CDX
Posted: Fri May 19, 2006 03: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

Un saludo,

Manuel



xH 1.2.3, FWH 23.07 32 bits, BC++ 7.4, xVerce CW 1.0, PellesC

Continue the discussion