Imprimir reporte desde Array

Imprimir reporte desde Array

Postby cuatecatl82 » Tue Aug 28, 2007 6:10 pm

Saludos de nuevo colegas de foro: :)

Esta vez para molestarlos con lo siguiente, resulta que necesito imprimir un reporte tipo columnas con existencia, costos y total de productos existentes en cada almacen de trabajo. :?

http://img204.imageshack.us/my.php?image=reportedz8.jpg

Ya lo he intentado con TPrinter, TDosPrn, pero no permite la impresion en Lanscape, y si lo hago con texto comprimido pues tampoco queda porque lo hago desde un array de X cantidad de almacenes, :x necesito hacerlo con TReport ya que tambien tengo que incluir un logo y en landscape

La forma más facil de hacerlo es con TReport porque se ajusta la horientacion de la pagina dependiendo si el reporte es demasiado largo, hasta donde lo he intentado la cuestion es que no tengo ni pizca idea de como generar y vizualizar el reporte desde array, lo intente con el metodo aColumns, pero no encuentro documentación de como usarlo..

Agradesco de ante mano cualquier ayuda que me puedan brindar..


I.S.C. Víctor Daniel Cuatécatl León
User avatar
cuatecatl82
 
Posts: 625
Joined: Wed Mar 14, 2007 6:49 pm
Location: San Cristobal de las Casas, Chiapas México

Postby jcaro » Tue Aug 28, 2007 9:43 pm

Hola Victor:

Yo lo hago asi, y funciona perfecto:

Donde aDatos, es el array con las columnas a imprimir:


Code: Select all  Expand view
// ---------------------------------------------------------------------
FUNCTION Imprime_Rep100( aDatos )
// ---------------------------------------------------------------------

   Local oFont      := Array( 3 )
   Local oReport   := NIL
     Local nI         := 0
    Local nField    := 1
   
     DEFINE FONT oFont[1] NAME "ARIAL" SIZE 0, -12 BOLD   
     DEFINE FONT oFont[2] NAME "ARIAL" SIZE 0, -9         
     DEFINE FONT oFont[3] NAME "ARIAL" SIZE 0, -10 BOLD   

   PrinterSetup()
   
    REPORT oReport TITLE "ARTICULOS POR BODEGAS al " + DTOC( Date() )   ;
   FONT oFont[1], oFont[2] , oFont[3]        ;
   PREVIEW             ;
    CAPTION "ARTICULOS EN LAS BODEGAS "  ;
   FOOTER "Pág: " + Padl( oReport:nPage , 4 ,'0' ) ;
   CENTERED   
   
    COLUMN TITLE "BODEGA"          DATA aDatos[ nField ,1 ]   SIZE 10 FONT 2 LEFT
    COLUMN TITLE "CODIGO"          DATA aDatos[ nField ,2 ]   SIZE 15 FONT 2 LEFT
    COLUMN TITLE "ARTICULO"         DATA aDatos[ nField ,3 ]   SIZE 30 FONT 2 LEFT
    COLUMN TITLE "CANTIDAD"          DATA aDatos[ nField ,4 ]   SIZE 15 FONT 2 RIGHT  PICTURE "@E 999,999,999.99"


     END REPORT
   
     oReport:CellView()           

   oReport:aColumns[2]:bTitleFont := { || 3         }
    oReport:bSkip                  := { || nField++  }
   
    ACTIVATE REPORT oReport  WHILE nField <= LEN( aDatos ) 

    oFont:= NIL

RETURN NIL


Saludos ,
Juan
==> Pasando a FWH16.04 + Harbour32 + BCC70 + PellesC
=> Abandonando FWH 13.7 + xHarbour + BCC582
http://www.mitaller.cl
jcaro
 
Posts: 270
Joined: Fri Nov 11, 2005 7:39 pm

Postby R.F. » Tue Aug 28, 2007 10:15 pm

Es super facil......

Tienes el ejemplo en la carpeta \FWxx\samples\report.

Básicamente la cosa funciona asi:

Defines una variable que va a ser tu "contador" registros, como lo puso Juan en su ejemplo anterior:

nField := 1

Luego defines todas tus columnas como elementos del array:

COLUMN DATA Campo[nField, 1] Title "columna 1"
COLUMN DATA Campo[nField, 2] TITLE "columna 2"
....
...
...

La gracia del invento consiste en conocer las DATAS del objeto reporte controlan tanto el flujo de datos, como el salto entre registros, para ello tendrás que retocar 2 cosilla:

ACTIVATE REPORT oRep WHILE nField <= LEN(Campo)

Lo cual ejecutara el reporte mientras tu contador sea menor o igual a lo que mida tu array

y lo mas importante, el control de salto de registro esta dado por un bloque de código:

oRep:bSkip

Este bloque de codigo por default tiene un {|| dbskip() }, lo unico que tienes que hacer cambiar el bloque de salto por uno que salte arrays en vez de saltar registros de campos, en este caso:

oRep:bSkip := {|| nField++}

Y listo, eso es todo.

Como te dije, tienes el ejemplo en la carpeta SAMPLES de tu instalación original de FiveWin.
Saludos
R.F.
R.F.
 
Posts: 840
Joined: Thu Oct 13, 2005 7:05 pm

Postby cuatecatl82 » Wed Aug 29, 2007 12:42 am

RF:
jcaro:

Gracias por sus respuestas, reviso los ejemplos y con los datos que me acaban de mencionar ya tengo una idea mas clara para poder generar mi reporte, mis agradecimientos a los dos y espero mañana comentar que paso y poner una captura de pantalla para que vean como quedo..

:D Saludos desde Chiapas..
:lol:
www.sisa.unlugar.com
User avatar
cuatecatl82
 
Posts: 625
Joined: Wed Mar 14, 2007 6:49 pm
Location: San Cristobal de las Casas, Chiapas México

Postby cuatecatl82 » Thu Aug 30, 2007 5:00 pm

:lol: Ok Colegas del foro:

Ya quedo solucionado el problema de impresion de reportes, lo hize por medio de columnas de la siguiente manera:

REPORT oReporte TITLE "REPORTE GLOBAL DE EXISTENCIAS DE INVENTARIO" PREVIEW;
CAPTION "Existencias por Almacen"


FOR N:= 1 TO FCOUNT()

oReporte:AddColumn( TrColumn():New( { TituCol( cDBF, N, 08 ) },,{ ContCol( cDBF, N, .F. ) },,,,,,,,,, oReporte ) )

oReporte:AddColumn( TrColumn():New( { TituCol( cDBF, Z, 4 ) },,{ ContCol( cDBF, Z, .F. ) },,,,,,,,,, oReporte ) )

oReporte:AddColumn( TrColumn():New( { TituCol( cDBF, N, 3 ) },,{ ContCol( cDBF, N, .F. ) },,,,,,,,,, oReporte ) )

next

END REPORT

ACTIVATE REPORT oReporte ON STARTPAGE BitMaps(oReporte)

y esta es la imagen de como quedo: :shock:

http://img407.imageshack.us/my.php?image=reportexg6.jpg

Saludos.. :D
User avatar
cuatecatl82
 
Posts: 625
Joined: Wed Mar 14, 2007 6:49 pm
Location: San Cristobal de las Casas, Chiapas México


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 51 guests