Se que a muchos nos an pedido un reporte y a los días lo quieren un cambio y de otra manera en fin usuarios, y solo para q lo ocupen dos veces
para esta solución es mandar esta consulta a una tabla dinámica a Excel y ahí el usuario puede hacer su reporte a la medida
hay otras herramientas mas completas y un poco mas complejas pero son de pago como el "Contourcube"
les dejos un ejemplo para q lo tomen como base y espero q les sea de utilidad
&& validar q este instalado excel
oExcel = CREATEOBJECT("Excel.Application")
If Type('oExcel')#'O'
=Messagebox("No se puede procesar el archivo porque no tiene la aplicación"+Chr(13)+;
"Microsoft Excel instalada en su computador.",16,'De VFP a Excel')
Return .F.
ENDIF
* creamos la consulta a nuestra base de datos es conveniente filtrar por fecha y cambiar nombres a los campos
SELECT tipdoc as TIPO ,numdoc as FACTURA ,condi as CONDICION,;
valorg as VALOR, ROUND(valorg/1.13,2) as VALnoIVA,cantund as UNIDADES,cantlb as LIBRAS, precio as PRECIO,;
nomcli as CLIENTE, nomvend as VENDEDOR,nomgran as GRANJA,fecdoc as FECHA,;
WEEK(fecdoc) AS SEMANA, PADL(allt(STR(MONTH(fecdoc))),2,'0')as MES,YEAR(fecdoc)as ANNIO,;
IIF(ISNULL(b.limite),"SinCredito","ConCredito")as TipoCli;
FROM SALINT LEFT JOIN creditocli b ON allt(SALINT.numreg)==allt(b.numreg);
INTO TABLE c:\ccubo
USE IN SELECT('ccubo')
#define DATAPATH "c:\"
oExcel = createobject("excel.application")
oExcel.Application.Visible = .T.
* Create a workbook.
oWorkbook = oExcel.Workbooks.Add()
LOCAL anom
anom=oexcel.ActiveSheet.name
* definimos la cadena de coneccion
dimension aSource[2]
aSource[1] = "Driver={Microsoft Visual FoxPro Driver};" +;
"UID=;PWD=;" +;
"SourceDB=" + DATAPATH + ";" +;
"SourceType=DBF;" +;
"Exclusive=No;BackgroundFetch=Yes;Collate=Machine;"+;
"Null=Yes;Deleted=Yes;"
aSource[2] = "select * from ccubo"
* Define an Excel range object to dump the results.
oTargetSheet = oWorkbook.Sheets.Add()
oTargetRange = oTargetSheet.range("A2")
* creamos el objeto de la tabla dinamica
oPivotTable = oExcel.Sheets[1].PivotTableWizard( 2,; && source is external data.
@aSource, ;
oTargetRange, ;
"PivotTable", .T., .T. )
* definimos como se muestra inicialmente los datos
* en filas,columnas, datos o campos
oPivotTable.PivotFields("GRANJA").orientation = 1 && fila
oPivotTable.PivotFields("mes").orientation = 2 && columna
oPivotTable.PivotFields("valor").orientation = 4 && data
oPivotTable.PivotFields("UNIDADES").orientation = 3 && campo
oPivotTable.PivotFields("libras").orientation = 3
oPivotTable.PivotFields("cliente").orientation = 3
oPivotTable.PivotFields("VALnoIVA").orientation = 3
oPivotTable.PivotFields("TIPO").orientation = 3
oPivotTable.PivotFields("FACTURA").orientation = 3
oPivotTable.PivotFields("CONDICION").orientation = 3
oPivotTable.PivotFields("VENDEDOR").orientation = 3
oPivotTable.PivotFields("FECHA").orientation = 3
oPivotTable.PivotFields("SEMANA").orientation = 3
oPivotTable.PivotFields("ANNIO").orientation = 3
oPivotTable.PivotFields("PRECIO").orientation = 3
oPivotTable.PivotFields("TipoCli").orientation = 3
*oPivotTable.Format =16
oexcel.ActiveSheet.name = 'CUBO'
oExcel = null
oPivotTable =null
oTargetSheet=null
oTargetRange=null