Impresión de Recibos

Quiero imprimir un conjunto de recibos para pago de pensiones, en total son 50 recibos uno por cada alumno, las dimensiones del recibo son de 10.5 cm. De alto por 35 cm de ancho, utilizo el DataReport y el tamaño de papel que le asigno a la impresora es A2, ya que los recibos están en papel continuo con esas dimensiones.
Los empiezo a imprimir y los 5 primeros quedan excelente pero a partir del sexto recibo la impresora hace un desplazamiento del papel de 1.5 cm con lo que los siguientes recibos se descuadran totalmente, la verdad soy un novato y me gustaría saber como hacer este tipo de impresiones desde VB 6, o si es que necesito alguna herramienta adicional.

10 respuestas

Respuesta
1
No hay ningún problema, lo que más te conviene es como vos decís, seguir utilizando lo que ya tienes, y en un futuro, en un nuevo sistema utilizar crystal reports, te va a solucionar la vida, ya vas a ver...
Cuando necesites info de Crystal avisame que ahí mismo te paso alguna porción de código mio para que utilices.
Ahora no te paso nada porque quizás no lo vas a entender, pero al momento que necesites imprimir o crear un nuevo reporte avisame y te paso todo.
Si podes finalizame esta pregunta así la cerramos, y ya sabes que podes contar conmigo para lo que necesites
Te mando un abrazo enorme...
Hola gizmomega
Muchísimas gracias por contestar mi pregunta.
Tengo el Crystal Reports 7, no lo he instaladado por que la única vez que lo use me sentía recontra perdido, no me ubicaba, he oído que es excelente pero no me he decidido aun por usarlo, sobre todo en este programita por que tengo 4 dataenvironment y algo de 14 datareports, me parece que a esta altura no podría adicionarle un reporte con crystal o en todo caso tendría que mudar todo al crystal, bueno por cuestión de tiempo creo que no, pero te agradecería muchísimo si tuvieras material acerca de crystal, en realidad me gustaría aplicarlo a otro proyecto que pienso realizar muy pronto.
Nuevamente muchas gracias.
Mi e-mail es:
[email protected]
La verdad nunca he trabajado con el DataReport, yo te recomendaría la herramienta Crystal Reports que viene con VB desde la version 4.0, es muy pero muy buena para todo lo que sea reportes y seguramente vas a poder realizar tu trabajo a la perfección, si te decides por Crystal Reports, avisame que te puedo decir como se utiliza y demás...
Respuesta
1
Lo primero, es curiosidad, me imagino que te has confundido al decirme el tamaño del papel, ya que un A2 es más grande que un A3, y este más grande que un A4, por lo tanto habrás querido decir otro tipo de papel.
Ahora vamos con la respuesta. En los report de Visual Basic, habrás visto que hay varias zonas dentro del mismo report. Encabezado del informe, Encabezado de página, Detalle, Pie de Página, Pie de Informe. Prueba a reducir a nada, tanto el Encabezado del informe, como el encabezado de página, como el pie de página y el pie de informe, me imagino que por el tipo de report que me has comentado solo tienes que imprimir en la zona de Detalle, por lo tanto reduce a zero todas las demás partes. Me imagino que sabes como reducir estas partes, pero por si acaso: al mover con el cursor del ratón sobre las zonas del report que ponen, por ejemplo Encabezado de página, se cambia el cursor al cursor de modificar tamaño, y puedes moverlo.
Respuesta
1
¿Cuándo decís que la impresora hace un desplazamiento del papel de 1.5 cm, te referís a que lo hace la impresora (hardware) o el programa (software)?
Si es el primer caso, proba en mandar a imprimir 5 hojas, y luego el resto con distinto tamaño o configuración de página.
Pero si es el segundo caso, manda a imprimir de a grupos de a 5, y fíjate si te sigue dando el mismo problema.
Espero te haya servido de ayuda, y no te olvides de ponerle puntaje a la respuesta.
No se como se cambia esta propiedad (creo que no se cambia, ya que la impresora detecta automáticamente el tipo de alimentación del papel).
Proba hacer un bucle (while, for, loop, etc.) que imprima de grupos de 5 (después de imprimir cada grupo que cierre el trabajo de impresión). Así podes dejar imprimiendo toda la noche sin importar cuantos recibos sean.
Mandame el código y me fijo.
Espero te haya servido de ayuda, y no te olvides de ponerle puntaje a la respuesta.
Respuesta
1
El tema que comentas es bastante común. La verdad hace bastante tiempo que no me peleo con impresión de reports, pero siempre había alguno que era un poco más rebelde. Hay que tener en cuenta que el papel es algo físico, y las impresoras no son todas una maravilla.
Normalmente las matriciales lo hacen todo perfecto ya que están preparadas para imprimir TEXTO y tienen un control de lineas estupendo, pero las de inyección de tinta pueden ser un poco más rebeldes, ya que si la hoja cae un poco más o un poco menos, el resultado final puede variar. En las laser normalmente no suele haber problemas.
Veamos... antes de nada, ¿estas seguro de que los 5 primeros salen perfecto? Chequea que no vayan -poco a poco- desplazándose, de forma que al llegar al sexto la impresora ve que no cabe y hace un salto de linea.
No he usado nunca el programa DataReport por lo que no puedo aconsejarte qué opciones configurar o de qué modo hacerlo mejor, aunque he usado el Crystal Reports y como dije en algunas Reports se ponía un poco rebelde.
Veamos... puede que lo que te diga ahora te cause risa, y seguro dices "que me estas contando?", pero... a veces es la única solución.
Para listados así de problemáticos quizás lo mejor sea que lo hagas a mano. Yo recuerdo que hice un listado enorme de clientes... era bastante complejo, con cálculos entre medio, grupos, subgrupos, totales y subtotales, y además tomaba datos de muchas tablas. Pero al final salió bien.
Para hacer listados a mano necesitas primero de todo controlar cuantas lineas mostrarás por página. Por otro lado cuantas lineas caben en la página. El sistema es sencillo... es llevar un contador por cada linea que imprimes de forma que cada vez que la impresora llega al limite salte de hoja. Este salgo obliga a que el papel se sitúe de nuevo en el sitio exacto.
El "problema" con esto es que si ahora ya estaba haciendo el salto de página, puede que el error se deba a algo en el papel o en la propia impresora (como dije, algunas son rebeldes), pero otras veces es simplemente que el propio programa no está gestionando bien el listado, por eso se recurre a programarlo manualmente.
Bueno... me siento como si no te hubiese servido de ayuda, pero es que la verdad con estas cosas poco se puede hacer además de mirarlo y hacer pruebas directamente... no se cómo aconsejarte.
Aún así, por si te decides a probar a hacerlo manualmente, te indico que tienes que ir imprimiendo al controlador de la impresora linea por linea.
Yo tenía una función a la cual le pasaba la cadena de texto, supongamos.
SImprimirLinea(lCadena)
Habiendo inicializado antes lCadena correctamente claro...
lCadena = "Alumno: " & lAlumno
Etc... insertando los espacios necesarios, calculando los 80 caracteres por linea (o los que tengas que meter), etc.
La función imprimir simplemente lanza el comando Print (no recuerdo la sintaxis.. hace 3 años ya) a un fichero que es la impresora, por lo que el listado sale automáticamente. Esto lo haces en un bucle claro, hasta fin de fichero alumnos o lo que sea, y dentro del mismo llevarías un control de las lineas, para que si llega (supongamos) a 10, haga un salto. Este salgo sería manual claro... si sabes que caben 14 lineas en tu papel y quieres meter 10 lineas (2 de margen arriba y abajo) lo que harías sería ejecutar 4 veces la función de imprimir linea con una linea en blanco.
De esta forma lo normal es que (siempre que ajustes el primer papel bien) la impresión quede perfecta.
Claro que... como dije, nosotros trabajábamos con matriciales que iban MUY bien (Epson DFX-5000, no se si la conoces), y claro, las lineas quedaban prácticamente perfectas.
Bueno... espero que aunque no te haya podido ayudar directamente con tu problema te sirva de algo este modo alternativo que te comento.
Suerte... si quieres profundizar más sobre el tema no dudes en comentarme.
Muchas gracias
Me podrías enviar código acerca de como enviarle directamente la impresión
mi email es [email protected]
Nuevamente muchas gracias
Respuesta
1
Lamenento informate que tienes que armar los recibos a mano.. no te va a servir el datareport... sino que se imprime directamente en la impresora armando el recibo mediante coordenadas y medidas.
Enviame tu mail que te envío un ejemplo de como armar el recibo a mano durante la impresión
Respuesta
1
Yo nunca he utilizado el DATA REPORT yo he utilizado Crystal Reports que creo que es mejor, y siempre es un dolor de cabeza imprimir recibos.
¿Estas utilizando recibos en forma continua?, ¿Si es así deberás estar utilizando una impresora de matriz de puntos?, quizá el DATAREPORT este enviando un código ESC de avance de papel al detectar el fin del papel.
Quizá el tamaño A2 no es el que debes de utilizar, por que no utilizas un tamaño personalizado de 10.5 x 35, ¿tu impresora lo permite?
Buscale por ahí.
Configure una EPSON FX 1170 en mi PC y no me deja seleccionar A2, solo A3, A4 y A5, desde WORD si me deja configurar tamaño personalizado.
¿Cuál es el tamaño del papel A2, te caben 5 exactos? Si es así entonces deberá tener 10.5 x 5 de alto exactamente si no las hojas se te van a desfasar, que es lo que te esta pasando.
La impresora va a dar un salto de página cuanto llegue al tamaño del alto del papel A2, yo insisto en que debes de configurar un tamaño personalizado y enviar todos los recibos a la vez dentro de un ciclo o algo así.
No creo que puedas controlas los códigos ESCAPE de la impresora desde el datareport, ¿tienes el manual de la impresora?, ¿Sabes lo que son los códigos ESCAPE en las impresoras de matriz?
Intenta jugar con tu formato de datareport hasta que te cuadren los saltos de página.
Si no puedes configurar el papel correctamente quizá si debas intentar enviar los datos del recibo directamente a la impresora con códigos ESCAPE. Desde VB no lo he hecho pero si envías el código ASCII de la tecla ESCAPE y luego otros códigos puedes controlar por programa la impresora de matriz, el salto de linea el avence de página, etc etc, se hace enviando estos caracteres al puerto de la impresora LPT1, yo lo solía hacer con Clipper hace tiempo, no VB no lo he hecho pero debe ser igual, solo hay que direccionar la salida a lpt1.
Respuesta
1
Seguramente es debido al salto de página, o a que la medida A2 es ligeramente más larga que 5 recibos, por lo que la impresora imprime 5 y luego avanza hasta el final de página. Si es posible, no utilices la medida A2, y usa una definida por el usuario, que sea exacta con la medida de tus recibos.
Hola smunoz
Te agradezco muchísimo tu colaboración.
Hola
Actualmente estoy imprimiendo en grupos de 5 y funciona muy bien, pero el inconveniente es que tengo que imprimir 1200 recibos, es por ello que deseo imprimir todos de una sola vez osea poner el papel que es papel continuo, darle la orden a la impresora y dejarla imprimiendo hasta el día siguiente, el desplazamiento lo hace la impresora(hardware), a mi me parece que si lograra indicarle que se trata de papel continuo tamaño A2 en lugar de hojas sueltas A2 se resolvería el problema, el inconveniente es que no se como hacerlo.
La impresora es una epson fx 1170, el único tamaño de papel que aceptaba el reporte es A2, por que con los demás obtenía un error de que el tamaño del informe es mayor que el papel, los recibos están preimpresos en papel continuo.
Nuevamente te agradezco muchísimo tu colaboración
Martin
Si deseas te envío el código fuente
Mi email es [email protected]
El problema parece estar en el driver de la impresora. Debería aceptar "Tamaño definido por el usuario", y definir el tamaño de página a la medida exacta de un único recibo (o de varios, pero siempre exacta, sobre todo en longitud). Aún así, la impresión en matriciales desde Windows es bastante lenta. Tal vez te salga más a cuenta generar un archivo de texto con el contenido de toda la impresión (y con los códigos de escape Epson para cambiar ancho de texto, enfatizado y todo eso, si te hace falta), y cuando lo tengas, lanzarlo directamente contra la impresora si ésta es visible desde MS-DOS, por ejemplo ejecutando el comando DOS "copy listado.txt lpt1:". Así, como desde DOS no hay driver, no hay tamaños de papel ni nada de eso y es posible que la impresión salga toda de un tirón.
Es sólo una idea, así que no sé si funcionará perfectamente con todas las versiones de Windows. Te hablo de cuando programaba en MS-DOS hace ya un porrón de años. Es posible que pueda hacerse una cosa parecida sin recurrir a DOS.
Respuesta
1
¿Qué versión de service pack de visual basic tienes instalada?
Porque el datareport tenía algunos problemas y en la versión 3, fueron corregidos.
Tal vez, sea también el driver del proveedor de la impresora.
Otra revisión sería ver el tipo de papel que se imprime, cuantos tantos tiene cada forma, porque muchas veces la fuerza de los sujetadores de los tractores, no es suficiente y da problemas.
Respuesta
1
Cuando usas el DataReport, es necesario que tengas en cuenta que el reporte tiene secciones, la primera hoja hace una sección que se llama encabezado de reporte, esta es solo para la primera página, en las demás se elimina, para hacer que en la primera hoja no salga debes hacerla igual a cero o sencillamente eliminarla desde propiedades del reporte. Suerte cualquier cosa vuelve a comunicarte...
Respuesta

Lo que esta pasando es que estas usando un tamaño de documento extremadamente grande, en el cual solo te entran 5 recibos, después de eso obviamente la impresora hace el salto de pagina.

Deberías crear un tamaño personalizado de cada recibo en cuya altura estará incluido el avance de salto de página. Luego simplemente haces un bucle de todos los recibos que quieras.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas