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:
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:
// 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():
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:
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.