Page 1 of 1

Consulta sobre xBrowse

Posted: Wed Mar 18, 2026 1:19 pm
by JMAC

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


Re: Consulta sobre xBrowse

Posted: Wed Mar 18, 2026 1:55 pm
by Ariel

Hola, proba cuando definis el xbrowse, asi :

Code: Select all | Expand

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

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

espero te sirva, saludos.


Re: Consulta sobre xBrowse

Posted: Wed Mar 18, 2026 2:04 pm
by Antonio Linares

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: Select all | Expand

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: Select all | Expand

// 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: Select all | Expand

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: Select all | Expand

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.


Re: Consulta sobre xBrowse

Posted: Thu Mar 19, 2026 7:31 pm
by JMAC

Muchas Gracias Ariel y Antonio.