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, 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
Imprimir reporte desde Array
- cuatecatl82
- Posts: 614
- Joined: Wed Mar 14, 2007 6:49 pm
- Location: San Cristobal de las Casas, Chiapas México
- Contact:
Hola Victor:
Yo lo hago asi, y funciona perfecto:
Donde aDatos, es el array con las columnas a imprimir:
Saludos ,
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
Juan
==> Pasando a FWH16.04 + Harbour32 + BCC70 + PellesC
=> Abandonando FWH 13.7 + xHarbour + BCC582
http://www.mitaller.cl
==> Pasando a FWH16.04 + Harbour32 + BCC70 + PellesC
=> Abandonando FWH 13.7 + xHarbour + BCC582
http://www.mitaller.cl
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.
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.
- cuatecatl82
- Posts: 614
- Joined: Wed Mar 14, 2007 6:49 pm
- Location: San Cristobal de las Casas, Chiapas México
- Contact:
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..
Saludos desde Chiapas..
www.sisa.unlugar.com
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..
Saludos desde Chiapas..
www.sisa.unlugar.com
- cuatecatl82
- Posts: 614
- Joined: Wed Mar 14, 2007 6:49 pm
- Location: San Cristobal de las Casas, Chiapas México
- Contact:
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:
http://img407.imageshack.us/my.php?image=reportexg6.jpg
Saludos..
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:
http://img407.imageshack.us/my.php?image=reportexg6.jpg
Saludos..