*-----------------------------
SET DATE DMY
SET SAFETY OFF

*--- Crea las tablas que simulan las consultas
DO CreaArchivos

*--- Genera gráfico anual
DO GraficoAnual

*--- Genera gráfico semanal
DO GraficoSemanal

CLOSE TABLES ALL
RETURN
*-----------------------------

*-----------------------------
* PROCEDURE CreaArchivos
*-----------------------------
* Crea y llena las tablas de 
* ejemplo y las copia
* como archivo tipo .XLS
*-----------------------------
PROCEDURE CreaArchivos
   LOCAL lnI, ldFechaIni

   *--- Inicializo la funcion RAND()
   lnI = RAND(-1)
   ldFechaIni = {27/12/1998}

   *---- Creo tablas
   CREATE TABLE Semana (Dia C(10), Item01 N(10,2), ;
      Item02 N(10,2), Item03 N(10,2), Item04 N(10,2))

   CREATE TABLE Anio (Mes C(10), TOTAL N(10,2))

   *--- Cargo datos de los 7 días y los 12 meses
   FOR lnI = 1 TO 12
      IF lnI <= 7
         INSERT INTO Semana ;
            (Dia, Item01, Item02, Item03, Item04) ;
            VALUES (CDOW(ldFechaIni+lnI), RAND()*1000, ;
            RAND()*1000, RAND()*1000, RAND()*1000 )
      ENDIF
      INSERT INTO Anio (Mes, TOTAL) ;
         VALUES (CMONTH(GOMONTH(ldFechaIni,lnI)), RAND()*10000 )
   ENDFOR

   *--- Guardo como tipo XL5
   SELECT Semana
   COPY TO Semana TYPE XL5
   SELECT Anio
   COPY TO Anio TYPE XL5
   RETURN
ENDPROC

*-----------------------------
* PROCEDURE GraficoAnual
*-----------------------------
* Creo un gráfico de Lineas en Excel
*-----------------------------
PROCEDURE GraficoAnual
   LOCAL lnFil, lnCol, lcRango, lcPlanilla, lcHoja, loExcel

   lnFil = RECCOUNT("Anio") + 1
   lnCol = FCOUNT("Anio")
   lcRango = "A1:" + CHR(64+lnCol) + ALLTRIM(STR(lnFil))
   lcHoja = "Anio"
   lcPlanilla = SYS(5) + CURDIR() + "Anio.xls"

   *--- Creo objeto Excel
   loExcel=CREATEOBJECT("Excel.application")
   WITH loExcel.APPLICATION
      .VISIBLE = .F. && oculto el trabajo en la aplicacion Excel
      .workbooks.OPEN(lcPlanilla)

      *---- Añado grafico de líneas
      .Charts.ADD
      .ActiveChart.ChartType = 65 && xlLineMarkers
      .ActiveChart.SetSourceData(.Sheets(lcHoja).RANGE(lcRango), 2)
      .ActiveChart.Location(1, "Grafico")
      .ActiveChart.HasDataTable = .F.

      *--- Estilo y ancho línea
      .ActiveChart.SeriesCollection(1).SELECT
      WITH .SELECTION.BORDER
         .Weight = 4 && xlThick
         .LineStyle = 1 && xlContinuous
      ENDWITH

      *--- Titulo gráfico
      .ActiveChart.HasTitle = .T.
      .ActiveChart.ChartTitle.TEXT = "Ventas acumuladas anuales"
      .ActiveChart.ChartTitle.SELECT
      WITH .SELECTION.FONT
         .NAME = "Arial"
         .FontStyle = "Negrita"
         .SIZE = 16
      ENDWITH

      *--- Leyenda
      .ActiveChart.HasLegend = .T.
      .ActiveChart.Legend.SELECT
      .SELECTION.Position = -4160 && xlTop

      *--- Ejes
      WITH .ActiveChart
         .Axes(1, 1).HasTitle = .T.
         .Axes(1, 1).AxisTitle.TEXT = "Meses del año"
         .Axes(2, 1).HasTitle = .T.
         .Axes(2, 1).AxisTitle.TEXT = "Totales en U$S"
         .Deselect
      ENDWITH

      *--- Grabo planilla y cierro
      .VISIBLE = .F.
      .ActiveWorkbook.SAVE
      .workbooks.CLOSE
   ENDWITH
   RELE loExcel
   RETURN
ENDPROC

*-----------------------------
* PROCEDURE GraficoSemanal

*-----------------------------
* Gráfico de Barras Apiladas en Excel 
*-----------------------------
PROCEDURE GraficoSemanal
   LOCAL lnFil, lnCol, lcRango, lcPlanilla, lcHoja, loExcel

   lnFil = RECCOUNT("Semana") + 1
   lnCol = FCOUNT("Semana")
   lcRango = "A1:" + CHR(64+lnCol) + ALLTRIM(STR(lnFil))
   lcHoja = "Semana"
   lcPlanilla = SYS(5) + CURDIR() + "Semana.xls"

   *--- Creo objeto Excel
   loExcel=CREATEOBJECT("Excel.application")

   WITH loExcel.APPLICATION
      .VISIBLE = .F. && oculto el trabajo en la aplicacion Excel
      .workbooks.OPEN(lcPlanilla)

      *---- Añado grafico barras apiladas
      .Charts.ADD
      .ActiveChart.ChartType = 52 && xlColumnStacked
      .ActiveChart.SetSourceData(.Sheets(lcHoja).RANGE(lcRango), 2)
      .ActiveChart.Location(1, "Grafico")
      .ActiveChart.HasDataTable = .F.

      *--- Titulo gráfico
      .ActiveChart.HasTitle = .T.
      .ActiveChart.ChartTitle.TEXT = "Ventas semanales por items"
      .ActiveChart.ChartTitle.SELECT
      WITH .SELECTION.FONT
         .NAME = "Arial"
         .FontStyle = "Negrita"
         .SIZE = 16
      ENDWITH

      *--- Leyenda 
      .ActiveChart.HasLegend = .T.
      .ActiveChart.Legend.SELECT
      .SELECTION.Position = -4160 && xlTop

      *--- Ejes
      WITH .ActiveChart
         .Axes(1, 1).HasTitle = .T.
         .Axes(1, 1).AxisTitle.TEXT = "Días de la semana"
         .Axes(2, 1).HasTitle = .T.
         .Axes(2, 1).AxisTitle.TEXT = "Totales en U$S"
         .Deselect
      ENDWITH

      *--- Grabo planilla y cierro
      .VISIBLE = .F.
      .ActiveWorkbook.SAVE
      .workbooks.CLOSE
   ENDWITH
   RELE loExcel
   RETURN
ENDPROC
