Ver Mensaje Individual
  #1  
Antiguo 29-05-2006
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.557
Reputación: 25
egostar Va camino a la fama
Post Impresion de documentos a través del canvas

Estimados colegas,

Desde que entre a este foro he podido solucionar muchos problemas gracias a la buena voluntad de los integrantes del mismo.

Por esta razón quiero corresponder con mi granito de arena con este pequeño trabajo que espero sea de utilidad.

Se que esto puede ser mejorado y agradeceré todas las críticas que se haga de él.

Cita:
A través del tiempo me he visto en la necesidad de imprimir documentos (frecuentemente Facturas) los cuales resultan hasta cierto punto complejos al utilizar reporteadores como Quick Report, Fast Report, Rave, etc.


Para solucionar este problema he utilizado el objeto TPrinter, sin embargo, al hacer uso de su propiedad Canvas, es necesario, determinar las coordenadas (pixeles) donde se van a “dibujar” los textos, cuestión que obliga a trabajar horas extras para configurar todos los campos que se desean imprimir, incluso, si por alguna razón la impresora que se utilizó para configurar el documento es reemplazada y esta no tiene la misma densidad de impresión, sería necesario volver a configurar las coordenadas del canvas para que la impresión vuelva a coincidir en el documento.


Esto no sería tan problemático si el sistema que se desarrollo solo es para un cliente y solo un documento, sin embargo, si se piensa comercializar dicho sistema los problemas crecen de manera exponencial a grado tal (pensando positivamente, claro está) que se podría convertir en un dolor de cabeza.


Por tal motivo, me di a la tarea de crear una aplicación que me ayudara a configurar documentos de una manera fácil y que me generara un archivo con las coordenadas para cada campo dentro del área de impresión y poder usar estos valores para ahorrar tiempo y esfuerzo.


La conceptualización de esta aplicación es la siguiente:

  • Utilizando un archivo plano (Confimpresion.txt) cargar los campos que van a ser impresos en el documento, para que estos sean cargados en lugares especificos dentro de la forma.
  • Generar una matriz con la definición de la impresora predeterminada a través de un StringGrid.
  • Imprimir una hoja con la misma matriz (en una copia de una factura, de preferencia) para poder determinar en que (columna, renglon) debe ir cada campo.
  • Con el concepto Drag & Drop mover los campos a la matriz correspondiente.
  • Guardar en un archivo INI, la información de las coordenadas de cada campo.


El archivo Confimpresion.txt contiene la lista de los nombre de los campos que serán impresos en el documento y su formato es <Nombre Campo>,<Longitud del campo>


Por Ejemplo


Razon Social,50
Direccion,50
Ciudad,30
Estado,30


Existen algunas condiciones dentro de los campos que se van a imprimir, exclusivamente para aquellos que requieren de imprimirse de forma detalle como son las partidas de una factura por ejemplo. Para esto es necesario que se agregue la palabra Detalle antes del campo.


Por ejemplo


Detalle Partida,10
Detalle Descripcion,50
Detalle Precio, 20
Detalle Importe,20


Esto permite que esos campos se puedan “jalar” hacia abajo para determinar cuantas lineas se podrán imprimir dentro de la Factura. Esto se hace seleccionando el campo en el StringGrid y sin soltar el mouse "jalar" hacia abajo hasta la pocision donde se desea que termine el detalle.


Para borrar algun dato que se ha puesto en una posicion incorrecta, boton derecho del mouse y click en Quitar.


El archivo INI creado se localiza en el directorio de WINDOWS y se llama CONFIMPRESION.INI el cual contiene las coordenadas de cada campo que se va a imprimir, y en el caso de los campos detalle tienen un valor adicional que corresponde al numero de lineas que se pueden imprimir.




Por ejemplo


[MATRIZ]
Razon Social=63,48 coordenadas (63,48)
Detalle Descripcion=189,160,15 coordenadas (189,160), 15 lineas
Saludos.

__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney

Última edición por egostar fecha: 29-05-2006 a las 23:27:45. Razón: No pude pegar el adjunto (Your file of 269,6 KB bytes exceeds the forum's limit of 29,3 KB for this filetype.)
Responder Con Cita