Imprimir reporte desde Array

Post Reply
User avatar
cuatecatl82
Posts: 614
Joined: Wed Mar 14, 2007 6:49 pm
Location: San Cristobal de las Casas, Chiapas México
Contact:

Imprimir reporte desde Array

Post by cuatecatl82 »

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
jcaro
Posts: 270
Joined: Fri Nov 11, 2005 7:39 pm

Post by jcaro »

Hola Victor:

Yo lo hago asi, y funciona perfecto:

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

Code: Select all

// --------------------------------------------------------------------- 
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
R.F.
Posts: 840
Joined: Thu Oct 13, 2005 7:05 pm

Post by R.F. »

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.
User avatar
cuatecatl82
Posts: 614
Joined: Wed Mar 14, 2007 6:49 pm
Location: San Cristobal de las Casas, Chiapas México
Contact:

Post by cuatecatl82 »

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: 614
Joined: Wed Mar 14, 2007 6:49 pm
Location: San Cristobal de las Casas, Chiapas México
Contact:

Post by cuatecatl82 »

: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
Post Reply