this is a sample but working with array, you can change easily to work with DataBase
// was missing this important declaration in the first publication
LOCAL aTotal := {0,0,0,0,0,0,0,0,0,0,0}.....
聽 聽DEFINE FONT oFont1 NAME "ARIAL NARROW" SIZE 0,-8
聽 聽DEFINE FONT oFont2 NAME "ARIAL NARROW" SIZE 0,-8 BOLD
聽 聽DEFINE FONT oFont3 NAME "ARIAL NARROW" SIZE 0,-12 BOLD
聽 聽DEFINE FONT oFont4 NAME "ARIAL NARROW" SIZE 0,-8 BOLD
聽 聽DEFINE FONT oFont5 NAME "ARIAL NARROW" SIZE 0,-6
聽
聽 聽DEFINE PEN pen1 WIDTH 0.3
聽
聽 聽 聽 聽REPORT oReport;
聽 聽 聽 聽 TITLE "PERIODO: " + SUBSTR( aData[1,5], 4 ) ;
聽 聽 聽 聽 聽FONT oFont1, oFont2, oFont3, oFont4, oFont5 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 ;
聽 聽 聽 聽 聽 PEN pen1 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 ;
聽 聽 聽 聽HEADER "Nombre o Raz贸n Social: " + cNombre,;
聽 聽 聽 聽 聽 聽 聽 "N煤mero NIT: " + cNit ,;
聽 聽 聽 聽 聽 聽 聽 "N煤mero Sucursal: " + cSucursal ,;
聽 聽 聽 聽 聽 聽 聽 "Direcci贸n: " + cDireccion;
聽 聽 聽 聽 聽 聽 聽 LEFT 聽 聽 聽 聽;
聽 聽 聽 聽FOOTER "P谩gina : " + STR (oReport:nPage,3);
聽 聽 聽 PREVIEW 聽;
聽 聽 聽 CAPTION "LIBRO VENTAS - IVA"
聽
聽 聽 聽 聽 聽 聽 聽 COLUMN TITLE "Fecha" 聽 聽 聽 聽 聽 聽 聽 聽 DATA aData[ nAt, 5] 聽 聽 聽 SIZE 聽9 FONT 1 CENTER
聽 聽 聽 聽 聽 聽 聽 COLUMN TITLE "N煤mero" 聽 聽 聽 聽 聽 聽 聽 聽DATA aData[ nAt, 1] 聽 聽 聽 SIZE 聽9 FONT 1
聽 聽 聽 聽 聽 聽 聽 COLUMN TITLE "Nombre o Raz贸n Social" DATA aData[ nAt, 2] 聽 聽 聽 SIZE 30 FONT 1
聽 聽 聽 聽 聽 聽 聽 COLUMN TITLE "N煤mero","Factura" 聽 聽 聽DATA aData[ nAt, 3] 聽 聽 聽 SIZE 聽7 FONT 1
聽 聽 聽 聽 聽 聽 聽 COLUMN TITLE "N煤mero","Autorizaci贸n" DATA aData[ nAt, 4] 聽 聽 聽 SIZE 15 FONT 1 CENTER
聽 聽 聽 聽 聽 聽 聽 COLUMN TITLE "C贸digo de","Control" 聽 DATA aData[ nAt, 12] 聽 聽 聽SIZE 12 FONT 1 CENTER
聽 聽 聽 聽 聽 聽 聽 COLUMN TITLE "Importe","Facturado" 聽 DATA VAL(aData[ nAt, 6]) 聽SIZE 聽9 FONT 1 RIGHT PICTURE "999,999.99" TOTAL
聽 聽 聽 聽 聽 聽 聽 COLUMN TITLE "ICE" 聽 聽 聽 聽 聽 聽 聽 聽 聽 DATA aData[ nAt, 7] 聽 聽 聽 SIZE 聽6 FONT 1 RIGHT PICTURE "@Z 999,999.99"
聽 聽 聽 聽 聽 聽 聽 COLUMN TITLE "Exento" 聽 聽 聽 聽 聽 聽 聽 聽DATA aData[ nAt, 8] 聽 聽 聽 SIZE 聽6 FONT 1 RIGHT PICTURE "@Z 999,999.99"
聽 聽 聽 聽 聽 聽 聽 COLUMN TITLE "Valor","Neto" 聽 聽 聽 聽 聽DATA VAL(aData[ nAt, 9]) 聽SIZE 聽9 FONT 1 RIGHT PICTURE "999,999.99" TOTAL
聽 聽 聽 聽 聽 聽 聽 COLUMN TITLE "IVA" 聽 聽 聽 聽 聽 聽 聽 聽 聽 DATA VAL(aData[ nAt, 10]) SIZE 聽7 FONT 1 RIGHT PICTURE "999,999.99" TOTAL
聽
聽 聽END REPORT
聽
聽 聽oReport:bPreInit 聽 聽 := {|| nAt := 1 }
聽 聽oReport:bSkip 聽 聽 聽 聽:= {|| nAt++ }
聽 聽oReport:lPageTotal 聽 := .T.
聽 聽oReport:lTotal 聽 聽 聽 := .T.
聽 聽oReport:cGrandTotal 聽:= 'Total P谩gina'
聽 聽oReport:cPageTotal 聽 := 'Total P谩gina'
聽
聽 聽AEVAL ( oReport:oHeader:aFont, { |e,i| oReport:oHeader:aFont[i] := {||2} } )
聽 聽AEVAL ( oReport:oTitle:aFont, 聽{ |e,i| oReport:oTitle:aFont[i] 聽:= {||3} } )
聽 聽AEVAL ( oReport:aColumns, 聽 聽 聽{ |e| e:bTitleFont 聽 聽 聽 聽 聽 聽 聽 := {||4} 聽 聽 ,;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 e:bTotalFont 聽 聽 聽 聽 聽 聽 聽 := {||2} } )
聽
聽 聽oReport:oDevice:lPrvModal := .T.
聽
聽 聽ACTIVATE REPORT oReport ;
聽 聽 聽 聽 聽 聽 聽WHILE nAt <= LEN( aData ) ;
聽 聽 聽 聽 聽 聽 ON POSTPAGE AEVAL( oReport:aColumns, {|c,i| aTotal[i] += c:nTotal, c:nTotal := 0 } ) ;
聽 聽 聽 聽 聽 聽 ON POSTEND ( oReport:cGrandTotal 聽:= 'Total General',;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽AEVAL( oReport:aColumns, {|c,i| c:nTotal := aTotal[i] } ),;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽oReport:PageTotal() )
聽
聽 聽oFont1:END()
聽 聽oFont2:end()
聽 聽oFont3:END()
聽 聽oFont4:END()
聽 聽oFont5:END()
聽
聽 聽pen1:END()