Clarion - Imprimir dos copias de un comprobante en la misma

   
Vista:

Imprimir dos copias de un comprobante en la misma

Publicado por Mario Aguiar (10 intervenciones) el 05/04/2010 18:59:41
Hola, tengo un comprobante que quisiera imprimir dos copias en la misma hoja... alguien sabe como puedo hacerlo?
gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
información
Otras secciones de LWP con contenido de Clarion
- Código fuente de Clarion
- Cursos de Clarion
información
Códigos de Clarion
- Llamar al form para insertar desde el menu

RE:Imprimir dos copias de un comprobante en la mis

Publicado por Marcelo Madelon (572 intervenciones) el 06/04/2010 12:57:43
Mario

Tenes que hacerlo a mano usando códigos
Te muestro como lo hago yo y ves si te sirve.
Creo un Report de un archivo que tiene solo un registro, es un archivo que tengo solo para los reportes manuales cargado con un solo registro, de esa manera me aseguro que pase por el punto embeds TAKERECORD solo una vez y le agrego el código para la impresión.
(Parece complicado pero no lo es)
Vamos al reporte
Primero creo un HEAD vacio y le pongo altura y largo igual a cero
Width Fixed = 0 Height Fixed = 0
Lo mismo hago con el FOOTER (podes borrarlo)
Luego Creo tres detalles (DETAIL).
Uno para la Cabecera, otro para el Detalle y otro para el Total

En Report Properties
---- filters Posicionate sobre el detalle Cabecera
--------------- Propierties
---------------------------- Filter Pone: False y tilda Exclude Unfiltered
Hace lo mismo con Detalle y con Total y por ultimo OK
Esto hace que se imprima solo por código.
En el caso de una factura uso Fact001 para los datos de la cabecera y Fact002 para el detalle

Lo que queda es imprimir
en el punto TakeRecord agrego este código

Clear (FA1:Record) ! Inicializo el registro
FA1:Numero = GLO:Numero ! Para este ejemplo uso una variable GLOBAL, podes usar parametros
SET(FA1:KeyNumero,FA1:KeyNumero) ! Me posiciono el el numero pasado desde GLO:Numero
LOOP UNTIL Access:Fact001.Next() or FA1:numero <> GLO:Numero
LOOP I# = 1 TO 2 BY 1
! Imprimo Cabecera
Print(RPT:Cabecera)
FA2:Numero = GLO:Numero
SET(FA2:KeyNumero,FA2:KeyNumero) ! Me posiciono el el numero pasado desde GLO:Numero
LOOP UNTIL Access:Fact002.Next() or FA2:numero <> GLO:Numero
! Imprimo Detalle
Print(RPT:Detalle)
End ! Loop Fact002
! Imprimo Tatal
Print(RPT:Total)
End ! LOOP I#
End ! Loop Fact001

Avisame si te sirvio

Saludos desde Venado Tuerto - Argentina
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Imprimir dos copias de un comprobante en la mis

Publicado por Mario Aguiar (10 intervenciones) el 06/04/2010 14:44:00
Hola Marcelo, gracias por tu aporte pero queria consultarte algunas cositas que no me quedaron claras.
Vos usas una sola tabla con un solo registro, yo necesito imprimir un comprobante tipo factura con varios renglones de detalle, la duda es si usas una tabla con un solo registro como hago para leer los datos del detalle y el encabezado.
Desde ya muchas gracias.
Mario
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Imprimir dos copias de un comprobante en la mis

Publicado por Marcelo Madelon (572 intervenciones) el 06/04/2010 17:05:17
Mario

Los registros que nesecitas leer los tenes que leer a mano (por codigo)

En ejemplo anterior leo secuencialmente los dos archivos el FACT001 primero
y luego FACT002. Para ello uso la sentencia LOOP (fijate en el Help)

Pero para el caso que quieras leer los datos de una factura por vez
cargaria el FA1:Numero en GLO:Numero y luego llamaria al reporte

GLO:Numero = FA1:Numero
PrnFactura ! LLamo al reporte (tenes que declararlo en procudures sino te da error)

En PrnFactura tendrias que leer el registro de FACT001 y luego recorrer Todos los FACT002 que esten relacionados


Clear (FA1:Record) ! Inicializo el registro
FA1:Numero = GLO:Numero
IF Access:FACT001.Fetch(FA1:KeyNumero) !Lee desde la clave FA1:KeyNumero
MESSAGE('No Encuentra Registro ','Mensaje del Sistema',ICON:Exclamation)
RETURN Level:Fatal ! Salir del programa
END

LOOP I# = 1 TO 2 BY 1 ! hace un loop comenzando en I# = 1 hasta 2 incrementando I# en 1
! queres una copia mas sera: LOOP I# = 1 TO 3 BY 1
! Imprimo Cabecera
Print(RPT:Cabecera)
FA2:Numero = GLO:Numero
SET(FA2:KeyNumero,FA2:KeyNumero) ! Me posiciono
LOOP UNTIL Access:Fact002.Next() or FA2:numero <> GLO:Numero
! Imprimo Detalle
Print(RPT:Detalle)
End ! Loop Fact002
! Imprimo Tatal
Print(RPT:Total)
End ! LOOP I#


! te explico el LOOP de Arriba
! con la linea siguiente leo secuencialmente mientras FA2:Numero sea igual a GLO:Numero
! y recorro los registros que tienen FA2:Numero = GLO:Numero

LOOP UNTIL Access:Fact002.Next() or FA2:numero <> GLO:Numero
! aca va el código de la impresion del detalle
! por lo tanto te imprimirá tantas lineas como registros tenga el detalle
! Antes de imprimir tendrás que cargar las variables que queres imprimir
! a menos que imprimas directamente los campos de FACT002

End ! End Loop
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Imprimir dos copias de un comprobante en la mis

Publicado por Mario Aguiar (10 intervenciones) el 06/04/2010 18:16:09
Hola Marcelo, agradezco desde ya tu ayuda.
Lo hice y al parecer lo hace bien, lo único que sucede es que no respeta la cantidad de copias, en mi caso lo hace muchas veces, quizas deba definir la hoja de alguna manera o en algo le estoy errando, tenes idea que puede ser? yo a la hoja la tengo definida como legal.
Desde ya muchas gracias.

Mario
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Imprimir dos copias de un comprobante en la mis

Publicado por Marcelo Madelon (572 intervenciones) el 07/04/2010 12:13:40
Mario
Puede ser que estés usando un archivo con mas de un registro cargado. Eso hará que pase por el código embebido tantas veces como registros tenga. Otra es que no le hayas puesto en:

Report Properties
- - - - Filters
- - - - - - - - Properties
- - - - - - - - - - - - Filter False y tilda Exclude Unfiltered

Con esto logras que la impresión se haga solo por código. De no hacer esto te va a imprimir una vez por haber leído el registro y otra por código.


Yo tengo un archivo que se llama Reporte.tps con un solo campo y le cargo en forma manual un solo registro.

Espero te sirva. Avisame si lo solucionaste.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Imprimir dos copias de un comprobante en la mis

Publicado por Mario Aguiar (10 intervenciones) el 08/04/2010 00:47:47
Hola Marcelo:
te cuento, logre hacerlo y te cuento como, yo tengo una tabla comprobantes y otra que son los items de comprobantes, hice como me dijiste con las bandas, le puse false en filters, puse el embebido pero me lo hacia varias veces y no 2 como yo le indicaba, entonces puse una variable de control 0=falso 1=verdadero, entonces cuando pasa por el take record viene con valor 0, imprime las bandas dos veces y toma el valor 1 despues que imprime, entonces con eso logré que lo hiciera solo una vez, pero sucede que la banda detalle, que son los renglones del comprobante, hace que la banda total suba o baje segun la cantidad de renglones que tenga el comprobante, como hago para que mantenga el formato, es decir, que el total se me imprima en el casillero que corresponde sin depender de los renglones del comprobante?
Desde ya muchas gracias.
Mario
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Imprimir dos copias de un comprobante en la mis

Publicado por Marcelo Madelon (572 intervenciones) el 08/04/2010 13:02:45
Mario.
No necesitas el false

Formo un report del archivo famoso con un solo registro, luego en Other Files agrego los archivos Cabecera y detalle. FACT001 y FACT002 Para este ejemplo.
Creo un detalle para la cabecera, otro para el detalle, otro para el pie y uno mas en blanco de la misma altura del detalle (Vacio).
Lo que queda es manejarlo por código.

Le agrego una variable LOC:CanLin

Clear (FA1:Record) ! Inicializo el registro
FA1:Numero = GLO:Numero
IF Access:FACT001.Fetch(FA1:KeyNumero) !Lee desde la clave FA1:KeyNumero
MESSAGE('No Encuentra Registro ','Mensaje del Sistema',ICON:Exclamation)
RETURN Level:Fatal ! Salir del programa
END

LOOP I# = 1 TO 2 BY 1 ! hace un loop comenzando en I# = 1 hasta 2 incrementando I# en 1
Print(RPT:Cabecera)
LOC:CanLin = 0
FA2:Numero = GLO:Numero
SET(FA2:KeyNumero,FA2:KeyNumero) ! Me posiciono
LOOP UNTIL Access:Fact002.Next() or FA2:numero <> GLO:Numero
! Imprimo Detalle
Print(RPT:Detalle)
LOC:CanLin += 1 ! Sumo 1 por cada item
End ! Loop Fact002

LOOP I# = LOC:CanLin TO 18 BY 1 ! 18 es la cantidad de items que entran como maximo
Print(RPT:Vacio)
End

! Imprimo Tatal
Print(RPT:Total)
End ! LOOP I#

Avisame y saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Imprimir dos copias de un comprobante en la mis

Publicado por Mario Aguiar (10 intervenciones) el 09/04/2010 13:48:58
Gracias Marcelo por tu desinteresada ayuda, salio todo bien, pude hacerlo sin problemas.
Saludos!

Mario
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar