Dimensionar Areas Cr 4.6

Estoy haciendo una factura en Cr 4.6
Y deseo que mi área detalles tenga25 lineas fijas, e intentado usar el formateo de sección y no encuentro nada,
ademas cree lieas en blanco en el footer claro que si ingreso artículos deja las 25 hacia abajo.

1 Respuesta

Respuesta
1
Hay dos formas de hacer lo que quieres.
1. Precisar bien el encabezado y el footer. En el encabezado sabes que sus datos siempre estarán. El pie de página también siempre va fijo por lo tanto el detalle va libre ya que normalmente no se excede y en todo caso desde el programa que genera la factura se controla que no exceda el número de lineas disponible.
2. A partir de los datos de la factura generar un archivo temporal y desde ahí imprimir(suponiendo que lo puedas generar con Vb por ejemplo u otro lenguaje).
Colocas una tabla temporal encabezado y una tabla temporal detalle y por ejemplo ingresas los 25 registros para el detalle, aunque vayan en blanco y sabrás que efectivamente se van a imprimir.
Los datos de la tabla temporal encabezado irán en el encabezado y pie de página del reporte.
El programa esta en Vb 6
Los detalles es la parte que me complica
Ya que esa es la parte que va a correr el pie de página
Podrías aclarame más el primer punto
Para que fueran los 25 renglones fijos Yo lo que haría sería lo siguiente:
1.Tener al momento de imprimir una tabla temporal diseñada para pasarle los campos de la factura y generar las 25 lineas.
Para esto tendría una tabla llamada TemEncabezado que tendría un identificador único para cada impresión(famoso Id) en donde además iría el número de factura, fecha, clave del empleado, nombre, domicilio, etc. y
2. Otra llamada TemDetalle ligada por el Id de TemEncabezado(desde luego para relacionarlas) con el código del producto, su descripción, importe, precio unitario, etc.
3. Cuando se trate de imprimir llenamos de su tabla original las 2 temporales y por ejemplo si solo hay 2 productos para la factura(lo que quiere decir que son 2 lineas de detalle) guardamos 2 registros en TemDetalle y nosotros "a pie" agregamos los 23 registros en blanco para completar 25 registros que son los que se incluirán al momento de generar el reporte.
Una vez que pasamos los datos a las tablas vamos a generar el reporte.
El reporte ya está diseñado y solo hay que indicarle cual Id va a imprimir, por ejemplo si el temporal que generaste es el Id 174 lo llamarías así:
crystalreport1.selectionformula = "{TemEncabezado.Id} = 174"
Con esto desde luego va a imprimir 2 registros con los productos de la factura y luego va a imprimir los 23 registros que están en blanco.
Luego borras del temporal los registros recién impresos(asegurándote que sea cuando ya termino de imprimir)
Normalmente Yo no lo hago así(lo de los registros en blanco)
Como Yo lo hago es que según el formato de la factura hago una prueba para ver cuantos registros pueden imprimirse para el detalle y en el programa desde Vb válido que no ingrese más de ellos.
Como en tu caso, verifico que cuando está por imprimir la factura no haya más de 25 productos a facturar y se lo indico en pantalla, si son más, los deben imprimir en otra factura y por otro lado crystal desde la versión 6 creo en adelante(van en la 8.5) permite que el pie de página se sitúe siempre al final de la página(no recuerdo bien pero creo que en la 4.6 no lo permite) por lo tanto el encabezado siempre va arriba y el pie de página abajo, solo hay que cuidar que el detalle no exceda las líneas para que no se desborde, si no se excede queda bien colocada.
Hay muchas formas de manejar los temporales.
Un dato que te puede servir es una propiedad del ocx de crystal que se llama Datafiles y sirve para decirle al ocx donde se encuentra ubicada cada tabla de tu reporte.
Por ejemplo(En access), digamos que en tu reporte desde crystal ves la lista de tablas en el siguiente orden
TablaB
Tabla
Tabla01
TablaC
Tabla02
Que pertenecen a las bases de BaseLetras y BaseNumeros
Si al momento de imprimir quieres indicarle que la ubicación de la base de datos es distinta a la que tiene guardada el reporte utilizas el llamado de la siguiente manera:
cryrep1.Datafiles(0) = "c:\rep\BaseLetras.mdb"
cryrep1.Datafiles(1) = "c:\rep\BaseLetras.mdb"
cryrep1.Datafiles(2) = "c:\rep\BaseNumeros.mdb"
cryrep1.Datafiles(3) = "c:\rep\BaseLetras.mdb"
cryrep1.Datafiles(4) = "c:\rep\BaseNumeros.mdb"
cryrep1.action = 1
o
cryrep1.Datafiles(0) = rutarep & "\BaseLetras.mdb"
Desde luego el procedimiento funciona en cualquier base de datos
Si tienes más dudas dímelo

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas