Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Impresión
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 24-02-2011
SergioVlc SergioVlc is offline
Registrado
 
Registrado: nov 2004
Posts: 3
Poder: 0
SergioVlc Va por buen camino
Problema con TCrpe

Hola,

Tengo un problema, parece que de refresco, con el componente TCrpe

Para el desarrollo de la aplicación uso Delphi 2007, Crystal 10 y una base de datos Access.

La rutina que da el problema se encarga de imprimir una factura pasandole como parámetro un "IdFactura" y funciona de la siguiente manera:

- Vacío una tabla temporal
- Lleno esta tabla con una serie de registros (las lineas de la factura correspondiente)
- Asigno una serie de parámetros del informe de Crystal
- Ejecuto el informe

La primera vez que llamo a este procedimiento muestra correctamente todos los datos.
La segunda vez que lo llamo actualiza correctamente los parámetros del informe pero
muestra los datos de la llamada anterior.
Si insisto y vuelvo a pedir la misma factura muestra correctamente todo.
A partir de aquí funciona bien aparentemente, por que de vez en cuando vuelve a producirse el mismo fallo.

El informe está guardado con la opción de "Save Data With Report" desactivada.
Además utilizo la función "DiscardSavedData" de la clase del componente.

He buscado este mismo error por internet, incluso he buscado otros componentes pero no encuentro solución, ¿alguna ayuda?

Muchas gracias
Responder Con Cita
  #2  
Antiguo 24-02-2011
SergioVlc SergioVlc is offline
Registrado
 
Registrado: nov 2004
Posts: 3
Poder: 0
SergioVlc Va por buen camino
Solucionado

Hola de nuevo,

Finalmente he conseguido solucionar el problema cambiando la forma de pasar los datos al informe, lo comento por si le sirve a alguien:

Hasta ahora pasaba los datos de esta forma:
- La cabecera (Nombre, cif, etc.) y algunos parametros para formatear dinamicamente el informe (Negrita, NoImprimirTotal, etc.) los pasaba mediante paramFields al rpt.
- Las lineas del la factura (articulo, cantidad, precio, etc.) los pasaba mediante una tabla de access.

El problema, además de que no se actualizaba bien, era que cuando ocurría el error teníamos una cabecera de factura con las lineas de la factura anterior. Esto era mas grave que el imprimir una factura anterior o posterior.

La solución:

No utilizar los parametros (paramFields) de crystal para pasar información al report.
Para pasar los datos de cabecera y lineas de la factura he utilizado una consulta.

Parto de las dos tablas de facturas en access: FACTURAS y FACTURAS LINEAS (cabecera y lineas respectivamente)
Creo en access una consulta que relaciona ambas con todos los campos necesarios (si, la podría haber creado directamente en crystal).
Creo otra tabla denominada FACTURAS A IMPRIMIR, con dos únicos campos: un Id y un IdFactura.
El Id es un autonumerico y el IdFactura almacena los numeros de facturas a imprimir.
En crystal agrego esta consulta al informe y se enlazan mediante el campo IdFactura. En las opciones del enlace le indico Enforced Both
De esta forma, tanto si quiero imprimir una factura como lanzar una remesa de facturas, solo tengo que vaciar la tabla FACTURAS A IMPRIMIR y llenarla con los IdFactura correspondientes. Crystal filtrará los datos para que solo se impriman las facturas cuyo IdFactura coincida con los relacionados en la tabla FACTURAS A IMPRIMIR.

Saludos
Responder Con Cita
  #3  
Antiguo 25-02-2011
SergioVlc SergioVlc is offline
Registrado
 
Registrado: nov 2004
Posts: 3
Poder: 0
SergioVlc Va por buen camino
Un poco de código vale mas que mil palabras

Para imprimir una unica factura:
Código Delphi [-]
procedure TInformeFacturaForm.ImprimeFactura(IdFactura: Integer);
begin
  rptInformeFactPto.DiscardSavedData;
  sqlImpresionFacturas.SQL.Text := 'SELECT * FROM [IMPRESION FACTURAS] '+
    'WHERE IdFactura = ' + IntToStr(IdFactura);
  sqlImpresionFacturas.Open;
  rptInformeFactPto.Tables[0].DataPointer := @(sqlImpresionFacturas.Recordset);
  rptInformeFactPto.Execute;
end;

Para imprimir todas las facturas indicadas en la tabla FACTURAS A IMPRIMIR
Código Delphi [-]
 
procedure TInformeFacturaForm.ImprimeFacturas;
begin
  // Imprime todas las facturas relacionadas en la tabla FACTURAS A IMPRIMIR
  sqlImpresionFacturas.SQL.Text := 'SELECT * FROM [IMPRESION FACTURAS] WHERE ' +
    'IdFactura IN (SELECT IdFactura FROM [FACTURAS A IMPRIMIR])';
  sqlImpresionFacturas.Open;
  with rptInformeFactPto do
  begin
    Output := toWindow;
    Tables[0].DataPointer := @(sqlImpresionFacturas.Recordset);
    Execute;
  end;
end;

PD: Finalmente el problema inicial era que olvidaba esta línea
Código Delphi [-]
rptInformeFactPto.Tables[0].DataPointer := @(sqlImpresionFacturas.Recordset);

Saludos
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Conectar Crystal Report (TCrpe) con un Ttable o TQuery Jose_Pérez Impresión 9 07-09-2006 01:35:58
conectar tcrpe con query e imprimir dmagui Impresión 5 02-11-2005 18:03:20
Cambiando Servidor a través de un Tcrpe... dunia_lv Impresión 0 28-04-2005 18:17:16
Componente TCrpe para Crystal Reports samame Impresión 0 24-05-2004 09:46:29


La franja horaria es GMT +2. Ahora son las 13:55:50.


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
Copyright 1996-2007 Club Delphi