Page 1 of 1

Problema en impresion de rango de archivo

Posted: Mon Oct 29, 2018 6:47 am
by datato
Hola a todos, estoy intentado imprimir un rango de un archivo como si fuera una factura entre varias fechas. Es con un DBF y en xharbour.

Desde mi aplicación como la dbf y filtro el rango de lo que quiero imprimir, pero el problema que tengo es que, con el archivo .fr3 adjunto la cabecera si se imprime bien y va pasando registros uno a uno para imprimir todos los registros que están en el rango filtrado en mi DBF, pero lo que no avanza son las lineas de cada cabecera.

Es decir, las lineas de la banda detalle, en todas las paginas se imprimen las mismas, no se imprimen las lineas relacionadas con la cabecera.

Este es mi código. También adjunto el .fr3 comprimido

dbsetrelation("linreemb",{||cabreemb->numcontr})
dbselectarea("cabreemb")
cabreemb->(dbgotop())

WITH OBJECT oReport := TFastReport():New()
:cLanguage("spanish")
WITH OBJECT :AddDbf( "cabreemb" , { "cabreemb->*" } )
:nMaxRecsOnDesign := 0
END WITH
WITH OBJECT :AddDbf( "linreemb" , { "linreemb->*" } )
:nMaxRecsOnDesign := 0
END WITH

:Create()
:cFilename := cDiscoRed + "\Valijarango.fr3"
:oPreviewOptions:lAllowEdit := .F.
:OPreviewOptions:SetZoomMode(1)
:SetTitle( "Vista Previa Rango de Impresion de Valija" )
:SetIcon( "A1" )

IF !lDesign
:ShowReport()
ELSE
:DesignReport()
ENDIF
:End()
END WITH

Re: Problema en impresion de rango de archivo

Posted: Sun Nov 04, 2018 8:01 am
by datato
Hola, alguien que me pueda dar una ayuda por favor.

Saludos

Re: Problema en impresion de rango de archivo

Posted: Sun Nov 04, 2018 8:40 pm
by datato
Hola, sigo peleándome con esto sin conseguirlo.

Con este codigo me da error en tiempo de ejecución. Error de argumento LEN en línea de SetMasterDetail. ¿No se porque?

WITH OBJECT oReport := TFastReport():New()
:cLanguage("spanish")
:AddDbf( "cabreemb" , { "cabreemb->*" } )
:AddDbf( "linreemb" , { "linreemb->*" } )
:SetMasterDetail("cabreemb","linreemb",{||cabreemb->numcontr})
:Create()
:cFilename := cDiscoRed + "\Valijarango.fr3"
:oPreviewOptions:lAllowEdit := .F.
:OPreviewOptions:SetZoomMode(1)
:SetTitle( "Vista Previa Rango de Impresion de Valija" )
:SetIcon( "A1" )

IF !lDesign
:ShowReport()
ELSE
:DesignReport()
ENDIF
:End()
END WITH

Re: Problema en impresion de rango de archivo

Posted: Sun Nov 04, 2018 8:51 pm
by datato
Con este codigo adaptado y sacado de frconsole.prg solo me muestra un único registro de cabecera en masterdata y sus líneas asociadas en detaildata correctamente. Pero solo me muestra una pagina, no me muestra más paginas con el resto de registro que hay en cabecera y en líneas asociadas. No se que más hacer.

WITH OBJECT oReport := TFastReport():New()
:cLanguage("spanish")
ocabreemb:= :AddDbf( "cabreemb" , { "cabreemb->*" } )
olinreemb:= :AddDbf( "linreemb" , { "linreemb->*" } )
olinreemb:SetMaster(ocabreemb, {"NUMCONTR=NUMCONTR"} )
:Create()
:cFilename := cDiscoRed + "\Valijarango.fr3"
:oPreviewOptions:lAllowEdit := .F.
:OPreviewOptions:SetZoomMode(1)
:SetTitle( "Vista Previa Rango de Impresion de Valija" )
:SetIcon( "A1" )

IF !lDesign
:ShowReport()
ELSE
:DesignReport()
ENDIF
:End()
END WITH

Re: Problema en impresion de rango de archivo

Posted: Thu Nov 08, 2018 8:03 pm
by angelsalom
Creo que tienes un problema de planteamiento.
Trata cada factura de forma independiente pasando a FR los datos filtrados (con un scope, por ejemplo que es más rápido) y haz tantas llamadas como facturas.
¿De qué te serviría, por ejemplo imprimir 10 facturas distintas de distintos clientes a un mismo fichero PDF?

Te aconsejo la lectura del estupendo manual de Bingen que se incluye en la documentación de Fast Report para Xailer (FRManualBisoft.pdf), es muy ilustrativo y explica, entre muchas otras cosas, el proceso de impresión de una factura con trucos muy útiles.

Re: Problema en impresion de rango de archivo

Posted: Fri Nov 09, 2018 7:56 pm
by datato
Angel en primer lugar, muchas gracias por responder.

El cliente quiere que en un solo pdf vayan varias facturas, ya que la idea es poder filtrar las facturas de un mismo cliente entre un rango de fechas y después Fastreport me cree ese único pdf con todas esas facturas filtradas de un mismo cliente.

Con el archivo que adjunte me sale todo correcto, cabecera y pie con total de factura calculada por Fastreport, pero en todas las facturas salen siempre las lineas del detalle de la primera factura solamente.

No se que hacer más.

Saludos.

Re: Problema en impresion de rango de archivo

Posted: Mon Nov 12, 2018 6:39 am
by datato
Hola de nuevo, después de llevarme todo el fin de semana con este asunto, ya consigo que me funcione a medias con este codigo.

dbselectarea("linreemb")
ordsetfocus('contrnum')
ORDSCOPE(0,NIL)
ORDSCOPE(1,NIL)
dbgotop()

dbselectarea("linreemb")
ordsetfocus('numcontr')
dbgotop()


WITH OBJECT oReport := TFastReport():New()
:cLanguage("spanish")
oCabreemb:= :AddDbf( "cabreemb" , { "cabreemb->*" } )
oLinreemb:= :AddDbf( "linreemb" , { "linreemb->*" } )
oLinreemb:SetMaster( oCabreemb, {"NUMCONTR=NUMCONTR"} )
WITH OBJECT :AddDbf( "linreemb" , { "linreemb->*" } )
:lLoadOnDemand := .T.
:nMaxRecsOnDesign := 10
END WITH
:Create()
:cFilename := cDiscoRed + "\valijarango.fr3"
:oPreviewOptions:lAllowEdit := .F.
:OPreviewOptions:SetZoomMode(1)
:SetTitle( "Vista Previa Rango de Impresion de Valija" )
:SetIcon( "A1" )

IF !lDesign
:ShowReport()
ELSE
:DesignReport()
ENDIF
:End()
END WITH

El problema se generaba en que el fichero de líneas de detalles llevaba a Fastreport Filtrado de una rutina anterior.

He indicado que me funciona a medias porque ahora, porque consigo que me presente hasta un registro determinado, a partir de ese registro no me muestra nada. He estado mirando por si hubiera algún problema en la relación creada pero los índices están bien y los registros también.

No se que puede estar pasando, para que a partir de un registro determinado, no se muestra nada en el impreso que adjunte.

Saludos.

Re: Problema en impresion de rango de archivo

Posted: Mon Nov 12, 2018 6:51 am
by datato
Hola, he probado con los datos del año anterior y me hace lo mismo el informe. A partir del registro num. 45 o 46, no me imprime nada. Es decir, si le indico que me imprima de la factura 1 a la 50, me imprime correctamente hasta la 45 en el año anterior y 46 en el año actual.

Si le indico que me imprima desde la 40 a la 60, solo me imprime desde la 40 a la 46...

Si le indico que me imprima desde la 50 a la que sea, me visualiza un folio en blanco sin nada.

No lo entiendo.

Re: Problema en impresion de rango de archivo

Posted: Mon Nov 12, 2018 7:43 am
by datato
Disculpad con tanto mensaje, pero estoy detallando paso a paso, lo que voy averiguando por si a alguien le pudiera ser servir en un futuro.

Ya he conseguido que no me salgan paginas en blanco, marcando a .T. en el diseñador de informes la propiedad PrintifDetailEmpty de la MasterData1, pero con esto, solo consigo que me salgan los datos de cabecera. Las lineas de detalles asociadas no me salen. Solo salen las lineas de detalle que corresponden a las 100 primeras en la dbf.

Re: Problema en impresion de rango de archivo

Posted: Mon Nov 12, 2018 8:22 am
by angelsalom
¿Puede adjuntar un ZIP con un ejemplo autocontenido y la tablas de datos para hacer alguna prueba?

Re: Problema en impresion de rango de archivo

Posted: Mon Nov 12, 2018 10:29 pm
by datato
Hola, adjunto fichero comprimido con DBF E INDICES.

He adaptado los DBF para que se pueda utilizar para muestra el frconsole que viene con fastreport.

Grabar las dbf y cdx adjuntos dentro de la carpeta DATA de FRX para probar con frconsole.exe

También adjunto el pdf de la impresión obtenida. Al igual que ocurre en mi programa, utilizando mis datos pero con frconsole también se imprime hasta el registro 46 del fichero customer

Re: Problema en impresion de rango de archivo

Posted: Tue Nov 13, 2018 11:06 pm
by datato
Hola, creo que puede ser por esto, pero no se como ponerlo en mi codigo para que no me de error en tiempo de ejecución.

TFrDataset:nMaxRecsOnDesign
Home Topic Previous Topic Next Topic Print this Topic

Sets the maximum number of records that will be downloaded when using the report designer. This property allows you to limit the number of records to be loaded for design processes to not delay carrying large amount of data. A value of cero means to download the complete set of records.

Scope Design assignable

Type Numeric

Initial Value 100

TFrDataset
Properties
Methods
Events

Este es mi codigo.

WITH OBJECT oReport := TFastReport():New()
:cLanguage("spanish")
oCabreemb:= :AddDbf( "cabreemb" , { "cabreemb->*" } )
oLinreemb:= :AddDbf( "linreemb" , { "linreemb->*" } )
oLinreemb:SetMaster( oCabreemb, {"NUMCONTR=NUMCONTR"} )
:Create()
:cFilename := cDiscoRed + "\valijarango.fr3"
:oPreviewOptions:lAllowEdit := .F.
:OPreviewOptions:SetZoomMode(1)
:SetTitle( "Vista Previa Rango de Impresion de Valija" )
:SetIcon( "A1" )

IF !lDesign
:ShowReport()
ELSE
:DesignReport()
ENDIF
:End()
END WITH

Re: Problema en impresion de rango de archivo

Posted: Wed Nov 14, 2018 8:23 am
by angelsalom
Si lanzas el informe sin pasar por el modo de diseño no tiene límites. El nMaxRecsOnDesign sólo actúa en modo diseño.
De todos modos lo tienes que indicar al añadir el DBF

Code: Select all

oCabreemb:= :AddDbf( "cabreemb" , { "cabreemb->*" } )   
oCabreemb:nMaxRecsOnDesign := 50 // Por ejemplo

Re: Problema en impresion de rango de archivo

Posted: Wed Nov 14, 2018 7:40 pm
by datato
Angel muchas gracias por tu ayuda y aclaraciones. Todo ok.