Jump to content


Photo

Se "congela" la aplicación al generar reporte RAVE


  • Please log in to reply
3 replies to this topic

#1 FGarcia

FGarcia

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 687 posts
  • LocationMéxico

Posted 05 January 2015 - 01:01 PM

Hola!!

Espero que tengan un feliz inicio de año y que todo lo que desearon, planearon, prometieron se cumpla!!  *-)

Bueno, entrando en materia; estoy realizando una aplicación de captura de datos desde el puerto serial (5 puertos) el envío de datos no es demasiado rápido -5 segundos entre dos de los dispositivos, 3 minutos en otro y casi 5 minutos con otros dos- la probabilidad de colisión de datos es muy baja y hasta ahora todo me ha ido bien en las pruebas, mi problema se presenta cuando necesito generar tres reportes (Rave Reports) - por cada grupo de dispositivos- esto se hace al "final" del turno de trabajo -06:00:00 a.m. / 02:00:00 p.m. / 10:00:00 p.m. - pues bien el reporte mas grande consta de aproximadamente 116 paginas y la aplicación se "congela" en la captura de datos y queda bloqueada, debo cerrarla y reiniciar nuevamente y funciona perfecta.



delphi
  1. case miHora of
  2.         6: begin
  3.               [b]CreaRptTercero;[/b]
  4.               with frmtrn1 do
  5.                 begin
  6.                   sgHoras.TopRow := 1;
  7.                   LimpiaTurnos;
  8.                 end;
  9.               with frmtrn2 do
  10.                 begin
  11.                   sgHoras.TopRow := 1;
  12.                   LimpiaTurnos;
  13.                 end;
  14.               with frmtrn3 do
  15.                 begin
  16.                   sgHoras.TopRow := 1;
  17.                   LimpiaTurnos;
  18.                 end;
  19.           end;
  20.         14: begin
  21.               [b]CreaRptPrimero;[/b]
  22.               frmtrn1.sgHoras.TopRow := 9;
  23.               frmtrn2.sgHoras.TopRow := 9;
  24.               frmtrn3.sgHoras.TopRow := 9;
  25.             end;
  26.         22: begin
  27.               [b]CreaRptSegundo;[/b]
  28.               frmtrn1.sgHoras.TopRow := 17;
  29.               frmtrn2.sgHoras.TopRow := 17;
  30.               frmtrn3.sgHoras.TopRow := 17;
  31.             end;



Como pueden ver en la porcion de codigo anterior creo los reportes a la hora adecuada y hago otras tareas que no ocupan demasiado tiempo, esto es en unos Frames y StringGrid.

Con este codigo obtengo los datos del turno y los envio a impresion PDF



delphi
  1. procedure TfrmPrincipal.CreaRptPrimero;
  2. var
  3.   tdtInicio,tdtFinal:TDateTime;
  4.   myYear, myMonth, myDay: Word;
  5. begin
  6.   DecodeDate(Now,myYear,myMonth,myDay);
  7.   tdtInicio := StrToDateTime(DateTostr(Today) + ' ' + '06:00:00');
  8.   tdtFinal := StrToDatetime(Datetostr(Today) + ' ' + '13:59:59');
  9.  
  10.   dmDatabase.RptTurnoGpo1(tdtInicio,tdtFinal); //Realiza un query de +- 5000 registros
  11.   dmDatabase.RptTurnoGpo2(tdtInicio,tdtFinal); //Realiza un query de +- 300 registros
  12.  
  13.   dmReportes.ImprimePDFGpo1('Reporte' + IntToStr(myDay) +
  14.                               IntToStr(myMonth) + IntToStr(myYear) + '_1',
  15.                               'Primer Turno  ' + DateToStr(Today));
  16.   dmReportes.ImprimePDFGpo2('Reporte' + IntToStr(myDay) +
  17.                               IntToStr(myMonth) + IntToStr(myYear) + '_1',
  18.                               'Primer Turno  ' + DateToStr(Today));
  19. end;



Estoy pensando ( :D :D) ideas peregrinas así que antes de hacer mas bobadas pido una opinión sobre lo que debería de hacer.

Saludos y gracias por el tiempo y atencion prestado.
  • 0

#2 cram

cram

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 832 posts
  • LocationMisiones, Argentina

Posted 05 January 2015 - 01:42 PM

Lo que se me ocurre más rápidamente es que pruebes recorrer los datos que deberían ser listados sin usar el motor de RAVE. Solo para evitar confundir el lugar donde se origina el problema.
y, crear el mismo reporte usando otro motor como FastReport.

Saludos

  • 0

#3 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14448 posts
  • LocationMéxico

Posted 05 January 2015 - 01:46 PM

La generación del reporte está en la misma aplicación que lee los puertos seriales ?????

Si es así, yo creo que por ahí van los tiros....

¿detienes el proceso de lectura durante la generación de reportes?
¿usas hilos para la lectura de puertos o lo haces al vuelo?

Saludos
  • 0

#4 FGarcia

FGarcia

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 687 posts
  • LocationMéxico

Posted 05 January 2015 - 03:41 PM

Gracias por responder.

CRAM:

Pensé en usar FastReport para la generación del reporte pues es la opción de Embarcadero, sin embargo mi Delphi XE2 no lo instalo por defecto y no tengo ganas de "pelear" con una reinstalación si se da el caso.

Si se genera un reporte pequeño de dos o tres paginas todo funciona perfecto.

EGO:

El archivo de reportes esta fuera del ejecutable.

No, no uso hilos para la lectura de los puertos. Esa es una idea que tengo pero me falta experiencia con eso. De ser necesario......

No detengo la lectura de puertos, de hecho es casi seguro que ya en forma operativa final no se generen datos a capturar durante la generación del reporte, sin embargo quiero evitar suposiciones.


  • 0




IP.Board spam blocked by CleanTalk.