Recibos en Jasper

1,047 views
Skip to first unread message

Ruben Diaz

unread,
Oct 30, 2015, 5:20:33 AM10/30/15
to Eneboo
Buenos días, me surge un problema con los recibos de cliente, yo saco los recibos desde los informes de facturación, uso un formato tamaño folio donde caben 3 recibos, por defecto los formatos que he bajado imprimen 1 recibo que esta muy bien, en mi caso sacarían 3 recibos diferentes por hoja que esta muy bien, como necesito copia pues se imprime 2 veces y listo.

Pero quiero rizar el rizo un poco mas, lo ideal seria que sacara los recibos de 2 en 2, quiero decir, 2 iguales, uno diferente y en la siguiente pagina el que falta de la primera hoja, hay forma de  hacer esto con jasper?

He duplicado los campos en el formato y me duplica la información y salen de 2 en 2 pero pierdo un recibo por hoja así que no es una solución valida.

Alguien se ha peleado ya con esto?


Un saludo.


Oscar Dominguez

unread,
Oct 30, 2015, 6:07:54 AM10/30/15
to Eneboo
No se si podría funcionar metiendo todo en el detail y añadiendo un detail2 para que salga copia de cada recibo... ¿?

También podrías probar usando la banda Summary para meter el duplicado, pero seguramente tengas el mismo resultado que ya tienes de solo 2 recibos en cada hoja.

Si me pasas la plantilla puedo intentar ayudar, que me encanta pelearme con estas cosas xD

Supongo que no te vale la opción de meter en cada hoja 3 recibos diferentes y al imprimir sacar 2 copias

Saludos

Ruben Diaz

unread,
Oct 30, 2015, 8:11:24 AM10/30/15
to Eneboo

Este formato que te pongo salen 3 diferentes por hoja, sacando una copia pues tienes  tus 2 recibos, esto no es comodo en la practica porque lo ideal es que salgan agrupados de dos en dos. 
i_reciboscli.jrxml

Oscar Dominguez

unread,
Oct 30, 2015, 10:30:16 AM10/30/15
to Eneboo
Prueba el que te adjunto a ver si es lo que necesitas

Va con 2 details con los mismos campos que tu tenías en el 1

Saludos ;)
i_reciboscli.jrxml

Ruben Diaz

unread,
Oct 30, 2015, 11:34:41 AM10/30/15
to Eneboo
Perfecto Oscar! sensacional, he cambiado el tamaño de la hoja de recibos a Page Weight 830 porque el principio del recibo 4 salia en la primera hoja y ahora todo genial, eres un monstruo, ahora me sentare a entender  como lo has hecho.

Dejo el archivo por si alguien lo necesita.


i_reciboscli.jrxml

Oscar Dominguez

unread,
Oct 30, 2015, 12:23:11 PM10/30/15
to Eneboo
No hice casi nada, es tu archivo con solo un cambio: añadir una segunda banda "Detail" y copiar/pegar en esta los campos que tu tenías en Detail1

Si comparas tu archivo con el mio y ves que faltan etiquetas de otras bandas es porque tu las tenías activas aunque vacías y yo tengo la manía de eliminarlas en ese caso... y cuando me di cuenta ya las había eliminando como si el archivo fuera mio jeje

Y pensándolo mejor, hay una forma más sencilla de hacerlo: En solo 1 banda detail pones 2 copias de los campos del recibo (creo que esto es lo que ya probaste) y le configuras Split Type = Inmediate ;)

Miguel J

unread,
Sep 22, 2016, 5:52:21 AM9/22/16
to Eneboo
Siempre se aprende algo....yo me liaba con el código y acababa más perdido que el Livingstone.....voy a cambiar/ampliar el tutorial...


...pero lo que ponéis aquí no me sirve a mi: busco imprimir dos copias de un albarán en una hoja DinA4, y si pongo dos "details" me parece que escribirá sólo una línea dos veces....no?¿?¿?....alguna idea?

gracias 

Oscar Dominguez

unread,
Sep 22, 2016, 7:11:59 AM9/22/16
to Eneboo
Crea otro report y le pones 2 subreports, ambos apuntando a ese report que quieres que salga duplicado

O usa una herramienta como pdftk que te permita concatenar el pdf consigo mismo y asi resultarán 2 copias ;)

* eneboo puede lanzar comandos del sistema, asi que puedes adaptar tu funcion imprimir() para que lo haga siempre o que te pregunte... el comando sería algo asi: #pdftk tureport.pdf tureport.pdf cat output tureportcon2copias.pdf

Miguel J

unread,
Sep 22, 2016, 7:22:24 AM9/22/16
to ene...@googlegroups.com

jejejeee...todo en chino.

1.- cómo se "apunta" un subreport a un report?
2.- en el subreport pondría todo como lo tengo ahora?...y el report en blanco?
3.- pdftk es algo "dentro" de eneboo?...o de windows?
4.-esos comandos dónde los pongo? ..en un .qs?
gracias


--
Has recibido este mensaje porque estás suscrito a un tema del grupo "Eneboo" de Grupos de Google.
Para anular la suscripción a este tema, visita https://groups.google.com/d/topic/eneboo/cxaX1IL13v8/unsubscribe.
Para anular la suscripción a este grupo y a todos sus temas, envía un correo electrónico a eneboo+unsubscribe@googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

Oscar Dominguez

unread,
Sep 22, 2016, 1:11:20 PM9/22/16
to Eneboo
Antes de nada, se me ocurre otra opción más sencilla: instalar una impresora virtual tipo pdfcreator (este si que es para windows... pero puede que hoy dia ya exista algo mejor jeje)

Asi sacas el report como siempre pero no lo pasas a pdf desde ahí, sino le mandas imprimir 2 copias usando la impresora virtual, que te abrirá una ventana preguntando la ruta donde quieres guardarlo en pdf y ya lo tendrás con las 2 copias en el mismo archivo


Me gusta más la opción simple, pero por si le vale a alguien o si quieres ponerlo en tu documentación, dejo la explicación larga de las otras 2 opciones... porque ya la tenía escrita xD

1)
Un subreport es un elemento del report principal. Una de las propiedades de ese elemento (creo que expression) es la ruta a otro report, que se "incrusta" en el report principal en el sitio donde tu pongas el elemento subreport (y a su vez un subreport puede tener sus propios subreports y etc etc ;)

Seguro que ya sabes, en "paleta" tienes botones para añadir elementos.

Al seleccionar un elemento de tipo subreport, en la ventana propiedades tienes la pestaña subreport donde puedes configurarlo

La ruta puedes escribirla como tal entre comillas, pero puede dar problema en entornos multipuesto. Se suele poner asi:

$P{SUBREPORT_DIR} + "i_tusubreport.jasper"

Lo que va entre corchetes es un parámetro que puedes añadir al report. Si ves ejemplos de plantillas con subreports, encontrarás arriba de todo algo como esto:

<parameter name="SUBREPORT_DIR" class="java.lang.String" isForPrompting="false">
    <defaultValueExpression><![CDATA["../../subreports/"]]></defaultValueExpression>
</parameter>

Lo que vale aquí es el valor: "../../subreports/"

Ese valor se usa para encontrar la ruta donde tienes el subreport... el del ejemplo significa que, desde la ruta donde tengas el report, "retroceda" 2 directorios y luego "suba" a la carpeta subreports (que es la misma estructura de carpetas de los ejemplos en el GIT)

Por ejemplo, si el report principal está en /tuempresa/reports/i_facturascli, tienes que retroceder 2 directorios hasta /tuempresa y desde ahí entrar en /tuempresa/subreports... y por eso se pone "../../subreports/".... asi, aunque la ruta sea diferente en diferentes equipos que usen este report, la ruta relativa sigue siendo la misma y se puede llegar a los subreports con cualquier configuración local

Puedes poner el subreport donde tu quieras y configurar este parámetro como corresponda. Por ejemplo, para usar como subreport en una factura el report de un recibo, pondrías "../i_reciboscli/" (salir de i_facturascli y luego entrar en i_reciboscli)... metes ese subreport en la banda summary y ya tienes un modelo de factura con sus recibos/efectos incrustados, ni arguiñano cocina tan rápido ;)

La otra parte de la ruta es el nombre del report que va a hacer de subreport. Fíjate que es el report compilado (.jasper) y creo que no vale el .jrxml "normal". Puedes compilarlo con el mismo jasperstudio o ireport

Con todo eso ya tienes tu subreport dentro del report principal. Si pones varios subreports apuntando a la misma ruta, ya tienes varias copias

Por otro lado, tienes que pasarle parámetros del report al subreport, para que este sepa lo que tiene que imprimir. Normalmente se pasa el idfactura, idalbaran o lo que sea. Se configuran en el mismo sitio. El subreport toma esos parametros de la misma forma que el report principal toma los que le pasa eneboo (osea, hay que declararlos en la parte de arriba, donde normalmente verás un parametro WHERE en casi todas las plantillas para eneboo)

En el GIT puedes ver ejemplos para configurarlo y si no son suficientes tengo yo otros pocos ;)

Se pueden hacer configuraciones más complicadas, pero no creo que sea necesario si solo quieres varias copias iguales


2)
Sí, el subreport sería el report que tienes ahora

Dentro del cuadro del elemento subreport se pone "tal cual", con sus margenes y todo, asi que al report principal (este nuevo para 2 copias) ponle los márgenes = 0, para que se queden solo los que tenga el report que va a hacer de subreport (el de 1 copia)... o quitaselos al que hace de subreport, pero supongo que quieres dejarlo como está para seguir usándolo para imprimir solo 1 copia por pdf

¿qué report en blanco?


3)
pdftk es una herramienta que manipula pdf, yo hablaba de la consola de linux, pero creo que para windows tb lo hay (si no, vale cualquiera que concatene pdf y puedas "controlar" por consola, que windows debería tener también ¿?)


4)
Puede que para ti sea más sencilla la primera opción, con subreports

Pero sí, en los script .qs puedes lanzar procesos del sistema (pruébalo en windows porque mi eneboo solo conoce linux xD


Un saludo
Para anular la suscripción a este grupo y a todos sus temas, envía un correo electrónico a eneboo+un...@googlegroups.com.

Miguel J

unread,
Sep 22, 2016, 1:19:27 PM9/22/16
to ene...@googlegroups.com

gracias. luego lo miro mejor....;-)

ahora mismo me queda la duda de cómo se "compila" un subreport en jasperstudio...


Para anular la suscripción a este grupo y a todos sus temas, envía un correo electrónico a eneboo+unsubscribe@googlegroups.com.

Oscar Dominguez

unread,
Sep 23, 2016, 4:18:24 AM9/23/16
to Eneboo
Hay varias formas. Te contesto para jasperstudio. Para ireport era parecido

- En el marco del report (donde hay una pestaña para cada report abierto) deberías tener un botón "compile report", cerca de los botones de zoom
- Si pinchas en la pestaña "preview" que hay en la parte de abajo, si el report no da errores se generará un compilado .jasper
- Se puede configurar para que actualice el compilado cada vez que guardas cambios en la plantilla. En el menu "project" tienes la opción "build automatically"

Saludos

Miguel J

unread,
Sep 23, 2016, 4:53:27 AM9/23/16
to Eneboo
Gracias.
Te he enviado el albarán y los subreports...no da error, pero sólo aparecen dos hojas en blanco...Din A4...
El report he puesto dos "details" de Din A5...está bien?
...lo que ahora no entiendo es si la definición de variables tienen que salir en report y subreport o sólo en uno....?

Oscar Dominguez

unread,
Sep 23, 2016, 5:27:57 AM9/23/16
to Eneboo
Ya te contesté al email pero repito aqui en publico. Lo de las páginas en blanco creo que será porque el report pasa un parametro llamado IDFACTURA y el subreport tiene el parametro IDALBARAN... ahí te despistaste; cambialo y funcionará

Lo de poner los 2 subreport en tamaño A5... no, esto no va asi jeje

Tanto el report como los subreports pueden tener el tamaño que tengan que tener. Y el elemento subreport debería tener el mismo ancho que el subreport, pero puede tener la altura que sea (se extenderá al alto que necesite, como cualquier otro campo)

Lo de las variables creo que ya lo entenderás con todo lo dicho aqui y por mail, pero puntualizo:

- En el report, el elemento subreport debe tener un parámetro, que pasará el valor del campo que te interese... en este caso ${idalbaran}
- En el report que hace de subreport, en el código o desde outline, tienes que declarar el parámetro con el mismo nombre con el que "sale" del report principal... creo que solo esto será el problema, y el resto lo veo perfecto

Quedaría algo asi (ojo que lo pongo a mano y puede tener errores):

- Esto para ambos subreports en el report principal:

<subreport>
<reportElement/>
<subreportParameter name="IDALBARAN">
<subreportParameterExpression><![CDATA[$F{idalbaran}]]></subreportParameterExpression>
</subreportParameter>
<connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression>
<subreportExpression><![CDATA[$P{SUBREPORT_DIR} + "i_albaranescli_unacopia.jasper"]]></subreportExpression>
</subreport>

- Y esto en la cabecera del report que hace de subreport:

<parameter name="IDALBARAN" class="java.lang.Integer"/>


Salud

Miguel J

unread,
Sep 23, 2016, 6:52:28 AM9/23/16
to ene...@googlegroups.com

he cambiado de estrategia y ahora me centro en el subreport....le doy a preview y este sí se ve pero entra en bucle y lleva 170 páginas....cómo lo paro?


Para anular la suscripción a este grupo y a todos sus temas, envía un correo electrónico a eneboo+unsubscribe@googlegroups.com.

Oscar Dominguez

unread,
Sep 23, 2016, 7:20:09 AM9/23/16
to Eneboo
Cierra la aplicacion y ya se para

Si salen más registros de los que deberían, revisa el select y/o que se pasen bien los parametros
Reply all
Reply to author
Forward
0 new messages