Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Impresión (https://www.clubdelphi.com/foros/forumdisplay.php?f=4)
-   -   FastReport, imprimir solo cuando cumpla una condición (https://www.clubdelphi.com/foros/showthread.php?t=96340)

Eduard23 17-08-2023 03:02:07

FastReport, imprimir solo cuando cumpla una condición
 
1 Archivos Adjunto(s)
Hola amigos nuevamente necesito de su valiosa ayuda esta vez estoy haciendo un reporte Contable (FastReport ) y necesito Acumular un valor y luego imprimirlo solo cuando se cumpla una condicion no necesito se imprima en cada registro .
Adjunto les envio una imagen
de Antemano Muchisimas Gracias

Saludos

Casimiro Notevi 17-08-2023 08:22:59

En el "BeforePrint" le pones la condición.

pgranados 17-08-2023 16:44:08

Hola. ¿puedes compartirnos que versión de FastReport tienes? Pasa que la versión gratuita por ejemplo no tiene la sección de código y eventos, por lo que la sugerencia de Casimiro no te funcionaria.

Ahora, también puedes hacerlo mediante código desde Delphi, por ejemplo: yo imprimo recibos de nomina (México) y existen dos tipos de nomina: ordinaria y extraordinaria, por lo que requiero ocultar las bandas del tipo de nomina que no estén. Entonces yo lo hago de esta forma:

Código Delphi [-]
var 
Report: TfrxReport;
RutaPDF, RutaModelo: string; // archivo FR3
pdfExport: TfrxPDFExport;
masterdata: TFrxMasterData;

Report := TfrxReport.Create(nil);
try
  Report.LoadFromFile(RutaModelo);
  // nomina ordinaria
  if (DModuloEmpresa.FDQueryNPR.IsEmpty) and (DModuloEmpresa.FDQueryNDR.IsEmpty) and (DModuloEmpresa.FDQueryNOPR.IsEmpty) then
  begin
    masterdata:= Report.FindObject('o') as TfrxMasterData;
    Masterdata.Visible:= false;
  end;
  // extraordinaria
  if (DModuloEmpresa.FDQueryNPR_E.IsEmpty) and (DModuloEmpresa.FDQueryNDR_E.IsEmpty) and (DModuloEmpresa.FDQueryNOPR_E.IsEmpty) then
  begin
    masterdata:= Report.FindObject('e') as TfrxMasterData;
    Masterdata.Visible:= false;
  end;

   // Preparo el Reporte
   Report.PrepareReport();


   // Crear un objeto de exportación a PDF
    PDFExport := TfrxPDFExport.Create(nil);
    try
      // Configurar las opciones de exportación
      Report.ShowProgress:= false;
      Report.PrintOptions.ShowDialog:= false;
      PDFExport.FileName := RutaPDF;
      PDFExport.ShowProgress:= False;
      PDFExport.ShowDialog := False;
      PDFExport.OverwritePrompt := False;
      // Exportar el informe a PDF
      Report.Export(PDFExport);
    finally
      FreeAndNil(PDFExport);
    end;
   // RutaPDF es la ruta del archivo PDF que voy a crear, este dato yo se lo paso porque en mi codigo,la generación
   // del PDF es una función.
    Result:= FileExists(RutaPDF);


finally
  FreeAndNil(Report);
end;

Saludos.

Casimiro Notevi 17-08-2023 19:13:49

Cita:

Empezado por pgranados (Mensaje 552363)
Pasa que la versión gratuita por ejemplo no tiene la sección de código y eventos

¿Cuál es la versión gratuita?

pgranados 17-08-2023 19:21:30

Cita:

Empezado por Casimiro Notevi (Mensaje 552364)
¿Cuál es la versión gratuita?

La que viene con Delphi 11 CE



Y la que puedes obtener en GetIt en Delphi 10.4



Yo probé fastReport así y me encanto, así que ya adquirí mi licencia :D

Casimiro Notevi 17-08-2023 21:42:52

Pero esa versión creo que no es gratuita, sino que es la versión "trial" que se puede descargar en su web.
Imagino que tendrá algunas limitaciones.

pgranados 17-08-2023 21:48:47

Cita:

Empezado por Casimiro Notevi (Mensaje 552367)
Pero esa versión creo que no es gratuita, sino que es la versión "trial" que se puede descargar en su web.
Imagino que tendrá algunas limitaciones.

Yo lo use como 1 mes y fracción en Delphi 10.4 y no hubo problemas, eso si: viene bastante limitado a diferencia de la estándar (esta es la que tengo yo).

En Delphi 11 CE me vino instalada por default, pero igual: limitada a lo básico.

¿Cómo que diferencias por ejemplo?
En mi caso, en los recibos de nomina necesito imprimir un QR y la versión que viene gratuita no tiene el componente, además de no incluir la sección de data y code, entonces para poder construir el QR debía de insertar una imagen, crear el qr de forma local con alguna librería externa y luego cargarla en el archivo .fr3

Algo que con un evento y una linea de código se resuelve en la versión standar o superior.

pgranados 17-08-2023 21:51:17

Cita:

Empezado por Casimiro Notevi (Mensaje 552367)
Pero esa versión creo que no es gratuita, sino que es la versión "trial" que se puede descargar en su web.
Imagino que tendrá algunas limitaciones.

Casimiro un favorcito, es que ya no me deja, en el mensaje donde pude el código me falto declarar en variables

Código Delphi [-]
 var masterdata: TFrxMasterData;

porfas :D

Casimiro Notevi 18-08-2023 09:48:01

Cita:

Empezado por pgranados (Mensaje 552369)
... faltó declarar en variables
var masterdata: TFrxMasterData;

^\||/^\||/^\||/

manelb 18-08-2023 12:41:39

Cita:

Empezado por Eduard23 (Mensaje 552361)
Hola amigos nuevamente necesito de su valiosa ayuda esta vez estoy haciendo un reporte Contable (FastReport ) y necesito Acumular un valor y luego imprimirlo solo cuando se cumpla una condicion no necesito se imprima en cada registro .
Adjunto les envio una imagen
de Antemano Muchisimas Gracias

Saludos

Y en el propio objeto de texto(TfrxMemoView), no puedes evaluar la condición?

Esto lo tengo yo en un listado, dentro de un TfrxMemoView:

Código:

[IIF(<_datos."HORAS_FUNCIONAMIENTO">=0,'Km:','Horas:')]
Saludos

Eduard23 19-08-2023 16:39:22

hola amigos gracias por sus repuestas pero estoy muy nuevo en esto podrian por favor ayudarme un poco mas con la impresion en el evento (No se como hacerlo) uso la version 6.9.3.
creo es lo mas sencillo.

Eduard23 19-08-2023 18:17:18

hola manelb si lo intente la diferencia es que necesito imprimir una variable algo asi:

[IIF(<_datos."HORAS_FUNCIONAMIENTO">=0,[Saldo],no hacer salto de linea)]

manelb 19-08-2023 18:21:40

Pues lo que te comentaba supongo que estará en todas las versiones de FastReport.

Yo vengo de QuickReport, pero he hecho algunas cosillas muy simples con FastReport por ir probando.

En QuickReport tenemos un control, QRExpr, que es un evaluador de expresiones.
En FastResport, veo que la misma funcionalidad la ofrece el objeto Text Object de la paleta de controles, que al situarlo sobre el formulario se convierte en un TFrxMemoView.

Una vez tienes la caja de texto sobre el formulario, con dos clicks se abre y tienes la posibilidad de añadir expresiones (fíjate en los iconos de la parte superior izquierda: Insert Expression).
Desde aquí vas a poder añadir datos de tus tablas, variables de sistema, utilizar funciones, etc.

Si visualizas algún tutorial básico por internet te resultará mucho más sencillo que con mis explicaciones.

Saludos y suerte

manelb 19-08-2023 18:26:25

Cita:

Empezado por Eduard23 (Mensaje 552377)
hola manelb si lo intente la diferencia es que necesito imprimir una variable algo asi:

[IIF(<_datos."HORAS_FUNCIONAMIENTO">=0,[Saldo],no hacer salto de linea)]

En la paleta hay una propiedad, AllowHTMTags, que permite colocar comandos html básicos en el texto.
De esta forma puedes gestionar negritas, saltos de línea, y alguna que otra floritura en los textos, no demasiadas.

Perdona Eduard23, pero parece que fastreport no permite usar el salto de línea en los comandos html
Según la ayuda, estos son los permitidos:
<b> : bold text
<i> : italic text
<u> : underlined text
<sub> : subscript
<sup> : superscript
<font color> : font color
<nowrap> : text which is not split when "WordWrap" is enabled, the whole text is shifted to the next line

Eduard23 19-08-2023 18:36:33

Es decir si se cumple esta condicion debo imprimir la variable SALDO en caso contrario no imprimo nada y no salto la linea
[IIF(<_datos."HORAS_FUNCIONAMIENTO">=0,[Saldo],no imprimir nada ni Saltar Linea )]

Gracias

Eduard23 19-08-2023 18:46:19

Perfecto pero como seria para imprimir la variable solo cuando cumpla la condicion [IIF(<_datos."HORAS_FUNCIONAMIENTO">=0,[Saldo],'')]
lo pongo asi y arroja error

Saludos

manelb 19-08-2023 19:05:18

Ten en cuenta que debes componer la expresión estrictamente con los datos de tus tablas.
En el caso de que tuvieras una tabla con el nombre "_Datos" y que dos de sus campos fueran "HORAS_FUNCIONAMIENTO" y "Saldo", la expresión quedaría así:

Código:

[IIF(<_datos."HORAS_FUNCIONAMIENTO">=0,<_datos."Saldo">,0)]
Pero lo hago de memoria

Si quieres, me mandas por privado un mensaje, te paso mi teléfono y te echo una mano.
Creo que no estamos lejos

Saludos


La franja horaria es GMT +2. Ahora son las 11:17:45.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi