Page 1 of 1

Ayuda enviar reporte a Excel

Posted: Mon Mar 01, 2021 5:36 pm
by EBM
Compañeros buen dia,

Estoy queriendo habilitar el envío de reportes a Excel pero no logro hacerlo, ya pude habilitar el boton de excel con oReport:bInit := { || .T. }
sin embargo solo me envia el encabezado del reporte sin los datos y en algunos me genera un error (6) deleting enhanced metafile y solo me envia a excel el encabezado, alguna idea de que podré estar haciendo mal?

Saludos

Eduardo Borondón Muñiz

Code: Select all

REPORT   oReporte                                                                                  ;
TITLE    "Reporte de compras del dia: " + Fec( dDesde ) + " al dia: " + Fec( dHasta ),             ;
         "Fecha: " + Fec( Date() ) + "     Hora: " + Time()                                        ;
HEADER   oPublic:oEmpresa:cNombre  CENTER                                                          ;
FOOTER   "Página: " + Str(oReporte:nPage,3) CENTER                                                 ;
FONT     oFont                                                                                     ;
CAPTION  "Reporte de compras"                                                                      ;
PREVIEW

COLUMN TITLE  "Fecha"                                                                              ;
       SIZE   10                                                                                   ;
       CENTER                                                                                      ;
       DATA   " "

COLUMN TITLE  "Vendedor"                                                                           ;
       SIZE   40                                                                                   ;
       CENTER                                                                                      ;
       DATA   " "

COLUMN TITLE  "Oro"                                                                                ;
       SIZE   10                                                                                   ;
       CENTER                                                                                      ;
       DATA   " "

COLUMN TITLE  "Plata"                                                                              ;
       SIZE   10                                                                                   ;
       CENTER                                                                                      ;
       DATA   " "

COLUMN TITLE  "Entregado"                                                                          ;
       SIZE   10                                                                                   ;
       CENTER                                                                                      ;
       DATA   " "

ENDREPORT

oReporte:nSeparator := 10

oReporte:bInit := { || .T. } 

ACTIVATE REPORT oReporte                                                                           ;
         WHILE  ( RCompras2( dDesde, dHasta, oReporte ) )                                          ;
         ON STARTPAGE PrintLogoRep( oReporte )

oFont := NIL

Return NIL

///////////////////////////////////////////////////////////////////////////////////////////////////////////
STATIC FUNCTION RCompras2( dDesde, dHasta, oReporte )
LOCAL oQuery, cConsulta, nOro, nPlata

nOro := nPlata := 0

cConsulta := "SELECT FECHA, IMPORTE, TIPO, VENDEDOR, FEC_ENTREGA  "                           +     ;
             "FROM compras "                                                                  +     ;
             "WHERE FECHA >= '" + DtoS( dDesde ) + "' AND FECHA <= '" + DtoS( dHasta ) + "' " +     ;
             "AND DELETED = 'N' "                                                             +     ;
             "ORDER BY FECHA, TIPO"

oQuery    := oPublic:oMySql:Query( cConsulta )

If oQuery:nRecCount > 0
   Do While !oQuery:Eof()
      oReporte:StartLine()
      oReporte:Say(  1, Fec( oQuery:FieldGet( "FECHA" ) ), 1, 1 )
      oReporte:Say(  2, oQuery:FieldGet( "VENDEDOR" ), 1, 1 )

      If oQuery:FieldGet( "TIPO" ) == 1 // oro
         oReporte:Say(  3, Transform( oQuery:FieldGet( "IMPORTE" ),"999,999" ),1, 2 )
         nOro   += oQuery:FieldGet( "IMPORTE" )
       else
         oReporte:Say(  4, Transform( oQuery:FieldGet( "IMPORTE" ),"999,999" ),1, 2 )
         nPlata += oQuery:FieldGet( "IMPORTE" )
      EndIf

      oReporte:Say(  5, Fec( oQuery:FieldGet( "FEC_ENTREGA" ) ), 1, 1 )

      oReporte:EndLine()
      oQuery:Skip( 1 )
   EndDo

   oReporte:StartLine()
   oReporte:EndLine()
   oReporte:StartLine()
   oReporte:aColumns[ 3 ]:Separator()
   oReporte:aColumns[ 4 ]:Separator()
   oReporte:EndLine()
   oReporte:StartLine()
   oReporte:Say(  3, Transform( nOro,  "999,999" ),1, 2 )
   oReporte:Say(  4, Transform( nPlata,"999,999" ),1, 2 )
   oReporte:StartLine()
EndIf

oQuery := NIL

Return .F.
 

Re: Ayuda enviar reporte a Excel

Posted: Mon Mar 01, 2021 5:42 pm
by EBM
Se me pasó incluir que tengo FWH 19.05 y que al generar el reporte a PDF me lo hace sin problemas.

Saludos!

Eduardo Borondón Muñiz

Re: Ayuda enviar reporte a Excel

Posted: Mon Mar 01, 2021 9:09 pm
by FranciscoA
Hola. Ya intestaste con esto?:

Code: Select all

        oReport:bSkip := {|| oQry:Skip() }
        oReport:bInit := {|| oQry:Gotop() } 
 
Saludos.

Re: Ayuda enviar reporte a Excel

Posted: Mon Mar 01, 2021 9:26 pm
by EBM
Hola Francisco,

Gracias por respoder, si ya lo habia intentado asi y es el mismo resultado, creo que el problema viene por como yo hago los reportes que en la clausula WHILE lo desvío hacia otra funcion donde yo controlo cada renglón y cada columna que se genera en el reporte, tomé el codigo del metodo toExcel de la clase Report y estoy creando un metodo propio para ver si logro hacerlo funcionar.

Mil Gracias por tu interés

Eduardo Borondón Muñiz

Re: Ayuda enviar reporte a Excel

Posted: Mon Mar 01, 2021 9:32 pm
by FranciscoA
EBM wrote:Hola Francisco,

Gracias por respoder, si ya lo habia intentado asi y es el mismo resultado, creo que el problema viene por como yo hago los reportes que en la clausula WHILE lo desvío hacia otra funcion donde yo controlo cada renglón y cada columna que se genera en el reporte, tomé el codigo del metodo toExcel de la clase Report y estoy creando un metodo propio para ver si logro hacerlo funcionar.

Mil Gracias por tu interés

Eduardo Borondón Muñiz
Por cierto, antes de que escribieras, estaba por preguntarte si se podía saber por qué utilizas una function independiente, si bien lo puedes hacer todo en el oReport.

Saludos.

Re: Ayuda enviar reporte a Excel

Posted: Tue Mar 02, 2021 1:54 pm
by EBM
Hola Francisco,

Lo hago así por que un gran numero de reportes que genero concentro información de diferentes tablas e incluso bases de datos de empresas diferentes para no tener que estar viendo un reporte y otro, sino en uno solo tengo toda la información que necesito, ademas de poder utilizar diferentes fonts para cada renglon/columna independiente a mi gusto. Ya me acostumbre a hacerlo asi. :roll:

Te muestro un ejemplo de un reporte donde concentro información de 3 empresas diferentes:
http://www.suitesrealmazamitla.mx/files ... _flujo.JPG

No lo hago con la clase printer ya que al hacerlo con Report no me preocupo por calcular anchos de columnas ni de renglones ni de nada. Para mi es mas comodo hacerlo de esa manera.

Saludos y nuevamente gracias!!

Eduardo Borondón Muñiz

Re: Ayuda enviar reporte a Excel

Posted: Tue Mar 02, 2021 7:20 pm
by FranciscoA
Eduardo.
Gracias por compartir tus experiencias.
Saludos.