Autor Tema: tablas dinamica(cubos) de fox para Excel  (Leído 7704 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado eduardoantonio10

  • Sv Member
  • ***
  • Mensajes: 108
tablas dinamica(cubos) de fox para Excel
« : octubre 11, 2008, 09:31:38 am »

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