FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Consulta sobre xBrowse
Posts: 17
Joined: Sun Sep 14, 2025 02:43 PM
Consulta sobre xBrowse
Posted: Wed Mar 18, 2026 01:19 PM

Buenos dias.
se puede mostrar en xbrowse registros agrupados?
Me explico:
si en mi dbf tengo 10 registros con 4 campos y uno de esos campos es una fecha, puedo mostrar agrupados los campos con la misma fecha?
ejemplo:


_______________________________

01/01/2026 x xxxx xxxxxxx
01/01/2026 z zzzzz zzzzzzz
01/01/2026 a aaaaa aaaaaa


_______________________________

02/01/2026 x xxxxx xxxxxx


_________________________________

03/01/2026 z zzzzz zzzzzz
03/01/2026 x xxxxx xxxxxx


_______________________________

muchas gracias

Posts: 389
Joined: Wed Nov 29, 2006 01:51 PM
Re: Consulta sobre xBrowse
Posted: Wed Mar 18, 2026 01:55 PM

Hola, proba cuando definis el xbrowse, asi :

			::oBrw:fecha:lMergeVert:= .t.
			::oBrw:lMergeVert:= .t.

// ::oBrw:fecha:WorkMergeData() // usar cuando cambia el filtro de la consulta

espero te sirva, saludos.

Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Consulta sobre xBrowse
Posted: Wed Mar 18, 2026 02:04 PM

Estimado JMA,

Sí, xBrowse ofrece varias formas de mostrar registros agrupados por un campo (como una fecha). Estas son las principales opciones:


---

1. SetTree() - Vista de Arbol automatica (la mas directa)

Si tu DBF esta ordenado por fecha, puedes convertir el browse en un arbol agrupado automaticamente con una sola linea:

Code (prg): Select all Collapse
USE midbf NEW
SET ORDER TO TAG FECHA   // ordenar por fecha
GO TOP

@ 60,20 XBROWSE oBrw SIZE -20,-20 PIXEL OF oDlg ;
   DATASOURCE Alias() ;
   COLUMNS "FECHA", "CAMPO2", "CAMPO3", "CAMPO4" ;
   CELL LINES NOBORDER

oBrw:lDisplayZeros := .f.
oBrw:CreateFromCode()

// Convertir a arbol agrupado (1 nivel = por fecha)
oBrw:SetTree( 1 )

El metodo SetTree( nLevels ) construye automaticamente el arbol desde los datos ordenados. Funciona con DBF, arrays y rowsets. 0-cite-0 0-cite-1


---

2. lMergeVert - Fusion vertical de celdas

Si prefieres mantener el browse plano pero fusionar visualmente las celdas con la misma fecha, usa lMergeVert:

Code (prg): Select all Collapse
// Los datos deben estar ordenados por fecha
oBrw:Fecha:lMergeVert := .t.

Esto fusiona verticalmente las celdas consecutivas que tienen el mismo valor, dando un efecto visual de agrupacion. Ver el ejemplo completo en samples/test/testmerg.prg: 0-cite-2


---

3. FW_ArrGroupSum() - Agrupar con subtotales

Si necesitas subtotales por fecha, puedes cargar los datos en un array y usar FW_ArrGroupSum():

Code (prg): Select all Collapse
USE midbf NEW
aData := FW_DbfToArray( "FECHA,CAMPO2,CAMPO3,IMPORTE" )
aData := FW_ArrGroupSum( aData, 1, 2, { 4 } )  // agrupa por col 1 (fecha), suma col 4
XBROWSER aData

Esto ordena por el campo de agrupacion, inserta filas de subtotal por cada grupo y un gran total al final. 0-cite-3


---

4. Arbol manual con BuildTree()

Para control total, puedes construir un arbol manualmente agrupando por fecha:

Code (prg): Select all Collapse
USE midbf NEW
INDEX ON DTOS(FECHA) TO temp
SET ORDER TO 1
GO TOP

TREE oTree
   do while ! Eof()
      dFecha := midbf->FECHA
      TREEITEM DTOC(dFecha) CARGO { Space(20) }
      TREE
         do while midbf->FECHA == dFecha .and. ! Eof()
            TREEITEM midbf->CAMPO2 CARGO { midbf->CAMPO3, midbf->CAMPO4 }
            DbSkip(1)
         enddo
      ENDTREE
   enddo
ENDTREE

@ 0,0 XBROWSE oBrw OF oWnd DATASOURCE oTree ...
``` [0-cite-4](#0-cite-4) [0-cite-5](#0-cite-5) 

---
[code]

Recomendacion: Para tu caso (10 registros, agrupar por fecha), la opcion mas sencilla es SetTree(1) si quieres un arbol colapsable, o lMergeVert si prefieres un browse plano con celdas fusionadas. Ambas requieren que los datos esten ordenados por el campo fecha.

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 17
Joined: Sun Sep 14, 2025 02:43 PM
Re: Consulta sobre xBrowse
Posted: Thu Mar 19, 2026 07:31 PM

Muchas Gracias Ariel y Antonio.

Continue the discussion